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

World: r3wp

[Core] Discuss core issues

Louis
7-Jun-2007
[8263x6]
Good progress, then stuck again. I can get one file transferred, 
but I don't know how to transfer the following files. This is the 
server (put it in an empty folder): 

rebol []

print ["This program RECEIVES files sent by send-files-tcp." newline]
port-num: request-text/title/default "Port Number: " "2006"
url: to-url rejoin ["tcp://:" port-num]
received-file: copy first open/binary url
write %file-names decompress received-file
files: load %file-names
foreach file files [

    received-file: copy url ;<======== HOW DO I FEED IN THE NEXT FILE?
    write/binary file received-file
    print ["Successfully received file: " file]
]

ask "The files transfer is complete. Press <Enter> to close."
This is the client; put it in the folder containing the files you 
want to send.

rebol []
ip: request-text/title/default "IP Address: " "localhost"
port-num: request-text/title/default "Port Number: " "2006"
url: to-url rejoin ["tcp://" ip ":" port-num]
system/options/binary-base: 64  ; best binary encoding


print ["This program SENDS all files in its folder to receive-files-tcp." 
newline]
print "NOTE: receive-files-tcp must be running on the remote"
print ["computer before starting this program." newline]

files: read %. ; Note that 'files is a block of file names.
save %file-names files
server: open url

insert server compress as-binary read/binary %file-names ;send file 
names
file-block: []
foreach file files [
    if not find file "/" [insert file-block file] ;remove folders
]
files: file-block
foreach file files [
    insert server compress as-binary read/binary file
    print ["Successfully sent file: " file]
]
close server

ask [newline "The files transfer is complete. Press <Enter> to close."]
The design is to place the server in the folder on the computer to 
which you want to transfer files.  Place the client in the folder 
on the other computer containing the files you want to transfer.
Start the server first, then the client, and file transfer should 
be automatic.
....that is if I can get it to work...with your kind help.
It actually needs View to run, but I put it here because the question 
is Core related.
Geomol
7-Jun-2007
[8269x4]
Louis, I think, your problem is, that you only operate with one port. 
When you define a listen port in REBOL, you receive a port from that. 
This new port can be used to receive the file. Something like:

listen-port: open/lines join tcp://: port-num
wait listen-port
talk-port: first listen-port
file: first talk-port
close talk-port
wait listen-port
...


(I haven't tested this code. It's free from a similar program, I 
made in the past.)
Play around with a very simple test, where you do it manually between 
2 REBOL sessions. This way you get a feel for it and can made your 
program to work.
server example:

listen-port: open/lines tcp://:8080
wait listen-port
p: first listen-port
file: load first p
close p
write/binary %file.r debase first file
close listen-port

client example:

p: open/lines tcp://127.0.0.1:8080
insert p remold [enbase read/binary %hokus-pokus.r]
close p
I just tried these examples, and they works. To send more files, 
you should loop the server from the wait to the write, both included.
Louis
7-Jun-2007
[8273]
Geomol, thanks!  I'll experiment with your examples, and report back. 
But it will be awhile, as I'm out of time right now.
Oldes
10-Jun-2007
[8274x3]
as current path-thru function is not working with queries and port 
numbers, and it's not part of core at all, what do you say about 
using this imporved version (which I'm already using for couple of 
years):

path-thru: func [
    "Return a path relative to the disk cache."
    url /local purl
][
    if file? url [return url]
    if not all [purl: decode-url url purl/host] [return none]

    if all [string? purl/target find purl/target #"?"] [replace purl/target 
    "?" "_query_"]
    rejoin [
        view-root/public slash
        purl/host

        either none? purl/port-id [""] [join "_atport_" purl/port-id] slash
        any [purl/path ""] any [purl/target ""]
    ]
]

so:

>> path-thru http://us.maps2.yimg.com/us.png.maps.yimg.com/png?v=3.52&t=m&x=3&y=0&z=16

== %/D/view/public/us.maps2.yimg.com/us.png.maps.yimg.com/png_query_v=3.52&t=m&x=3&y=0&z=16
aaaa.... this nasty Altme link bug... will it ever be fixed?
And it must be so easy to fix it... it looks that it would be enough 
to increase the Y-size ot the face which is used to cound the size 
of the text link (so it do not breaks)
btiffin
10-Jun-2007
[8277]
How many rebols have written language localization routines?

I'm toggling back and forth between external heaps and in-code strings
I've got a RebGUI widget...


lang-text {en "This is the english" fr "C'est francais" it "Don't 
know any italian"}

meaning a translator will have to get dirty in code edits (or send 
to coder) or use

text (lang "SomekindaKey")

where lang is some func that having read some file, selects the string 
key by lang type...
lang-type being buried somewhere in locale*


How often is a REBOL translator a non-programmer?  I find external 
text to be a pain when
coding.  But...it lets non-coders help with translations.


In particular, I only have about 10 or so screens that could be translated. 
 Ashley's

builtin localization nicely handles all the GUI stuff.  I'm leaning 
toward in-code strings.
[unknown: 9]
10-Jun-2007
[8278]
Qtask using a huge database for all languages...
btiffin
11-Jun-2007
[8279]
On the fly translation?  Or work by coders?  Or a text heap?  :)

I guess I'm just looking for advice, but I'm travelling down the 
in-code multi-language
string path.
Gabriele
11-Jun-2007
[8280x6]
my approach is: preprocess the code to identify values that need 
translations (not only strings, any value can be language-dependent)
so if you have     text "Some string"
you add     text #l "Some string"
and the preprocessor can create a nice .catalog file for you
then, you can use a gui tool to edit .catalog files.
http://www.colellachiara.com/soft/libs/locale.r
btiffin
11-Jun-2007
[8286]
Cool.  Thanks Gabriele.  I'll be relying on Ashley's RebGUI code 
for some of the
localization, but this looks like something to dig into.
Ashley
11-Jun-2007
[8287]
A key consideration is whether you want the translation(s) to be 
static (compile-time) or dynamic (run-time). Advantages and disadvantages 
to both approaches.
btiffin
11-Jun-2007
[8288]
Yeah, I toggle back and forth, but they'll be static this time.  
:)
Rebolek
11-Jun-2007
[8289]
some BIND expert, please, help me:

>> act: [add a b]
== [add a b]
>> for a 1 5 1 [for b 1 5 1 [do act]]
** Script Error: a has no value
** Where: do-body
** Near: add a b

There must be something easier than
>> for a 1 5 1 [for b 1 5 1 [do bind bind act 'a 'b]]
Sunanda
11-Jun-2007
[8290]
Is this simpler and the same effect?
    act: func [a b][add a b]
    for a 1 5 1 [for b 1 5 1 [act a b]]
Rebolek
11-Jun-2007
[8291]
hm, not exactly what I want because this is simplified, I have more 
variables than just 'a and 'b, but still useful.
btiffin
11-Jun-2007
[8292]
May or may not work for your needs

for a 1 5 1 [for b 1 5 1 bind act 'a]
Graham
11-Jun-2007
[8293]
Is there an async https protocol in the offing?
Gabriele
11-Jun-2007
[8294]
mine works with both http and https
Graham
11-Jun-2007
[8295x2]
is this the current release?
or you own unreleased version?
Gabriele
11-Jun-2007
[8297]
same version as used on the detective and published on my site
Graham
11-Jun-2007
[8298]
Ok.
Oldes
12-Jun-2007
[8299x3]
what would be the best way how to legalize urls like this one http://maps.google.com/mapfiles//cb/blue_outlines.png
I mean rebol-file from such a url
hm.. parse t: "a//bb/c" [any [to "/" p1: some "/" p2: (p1: change/part 
p1 "/" p2) :p1] to end] t
Anton
13-Jun-2007
[8302x2]
You mean, to "clean" it, into a legal url ?
http://anton.wildit.net.au/rebol/freezer/simple-clean-path.r
Oldes
13-Jun-2007
[8304x2]
yes... that's what I wanted.. especially to make the local file secure 
as well... (so converting url to local file does not leave the send-box:)
I already had own version, but your is a little bit better as correctly 
handles complete url... my was only for the path
Chris
13-Jun-2007
[8306]
This is one reason I wrote my files:// protocol -- http://www.ross-gill.com/r/sandbox.html
(need to add to the library).
Anton
14-Jun-2007
[8307x2]
we also had a secure-clean-path....
Ah.. secure-clean-path should be in rebol.org already.
Henrik
16-Jun-2007
[8309x4]
do func [a b /c] [either c [a + b][a * b]] 2 3

How do I invoke the refinement?
or perhaps:

f. func [a b /c] [either c [a + b][a * b]] 2 3

do :f 2 3 ; <--- here?
Think I figured it out...
nope, didn't work. I need the function in a composed block:


compose [do (:f/c) 2 3] ; causes error, since arguments are not inside 
the compose parantheses.

But the arguments are not used, so:

compose [do (:f/c 2 3)]


But now the arguments are local to the function. The arguments come 
from a different context, so I can't just compose the get-word'ed 
function with the arguments.


So I'll go back to the first question on how to make a refinement 
on an inline function?