AltME: REBOL3

Messages

Ashley
call/wait/output {cmd /C "c:\Program Files\flite\flite.exe" "this is a test"}
Oops ... sans the /output refinement
Also, I'm assuming Windows here

Gregg
Some things are unhappy if you don't use /show. A workaround, if you launch them a lot, is to use call/show "" once at the top of your app. This primes things so they work.
Permission wise, have you tried running rebol as admin? In addition to Ashley's trick, try using a fully qualified path to the exe you're launching.
I haven't seen that exact error, so these are just my normal CALL tricks when I have issues.

Gregg
parse "12345" [2 skip -1 skip]
** Script error: value out of range: -1
** Where: parse
** Near: parse "12345" [2 skip -1 skip]
Is it a bug that negative skip values aren't supported?
Bo
Ashley: Thanks for the input, but I'm using Linux.
Gregg: In R3, 'call doesn't have a /show refinement.
Gregg
Ah, right, R3. Are you using the latest from Atronix? I had issues with earlier versions.
Bo
Yes, latest Atronix version.

Arie
Hi, can somebody point me to the latest r3-gui.r3 on the web? I find it very difficult to know what to use these days ;-) Atronix, Saphirion, RT website which is very outdated ...
Also, is there a REBGUI port for R3 available?
Henrik
There is no RebGUI for R3, as far as I know.
WRT, R3 GUI, well, I guess someone needs to dedicate more time to it.
NickA
Arie, the Atronix version is kept up most right now:  http://www.atronixengineering.com/downloads  The r3gui.r3 loaded by the 'load-gui in that version is at  http://rebol.atronixengineering.com/r3/r3-gui.r3    You need to use their version of r3 with that version of r3-gui.r3.
amacleod
Is there  a r3-view for raspberry pi?
amacleod
OK, got it...."load-gui" using arm binary....cool
amacleod
Anyone ever use r3 to display maps using openstreet map data or similar? Or know how to go about doing it....

GiuseppeC
Hi, is there a way create a EAN 128 barcode in REBOL 3 ?
Henrik
I made an EAN13 barcode generator for REBOL2 once. I don't know if that can be used to create an EAN128 one. Maybe they are too different.
GiuseppeC
Hi there to the Atronix People.
How do you read serial port data using Rebol 3 ?
I have to read it from a weight machine
Marco
There is also a EAN128 font.
Josh
gs: open serial://ttyUSB0/57600
written: false
gs/awake: func [evt][
     switch evt/type [
          read [
                print to-string evt/port/data
                read evt/port
                return true
          ]
          wrote [
                 written: true
                 return true
          ]
     ]
     false
]
write gs "m"
while [not written][
    wait [gs 1]
]
read gs
wait [gs 1]

Josh
Those using MAP! in R3, it has a significant bug:  https://github.com/zsx/r3/issues/30

Ladislav
Hi all,
Based on this observation:
a: 1
if false (a: 2 [a: 3])
a ; == 2
I think that
a: 1
case [
false (a: 2 [a: 3])
]
a
should yield 2 too. Is there an agreement on this?
Gregg
Hi Ladislav! Wouldn't it make more sense for the first example to return 1? This is because R3 allows more than block! values for the 'then arg, but it seems like it should not evaluate them if the condition isn't true.

Ashley
re MAP! bug. I use map! with APPEND / SELECT extensively and have never encountered an issue. The bug report highlights an issue with unique/skip on a block! (unique does not accept map! as an argument) ... so I fail to see what the issue with map! usage actually is. Can someone enlighten me?
Sunanda
I am not sure it is a bug - may be a difference between what UNIQUE does and what HF thinks it should do. His example:
    unique/skip [a "b" "c" a "d" "e" z "f" "g"] 3
    == [a "b" "c" z "f" "g"]
Produces the correct (or at least same) result under R2, Red, and R3.
Gabriele
Gregg, the paren is evaluated before being passed to IF.
Personally I don't think CASE should evaluate, but then again, I can see why evaluation might be desired.

Josh
You may want to reread the issue, and take a look at the source links/fix.   The point regarding the Map bug is that the C hashing function sometimes accesses invalid memory.  The unique/skip example as described in the issue is not demonstrating a bug but showing the hashing function does not always have the same width (2) . The issue is when hash misses occur and new indices are added into the hash, it ignores the width.

Josh
One example of the bug:
rebol3> union/skip [1 1 2 2 2 2] [] 2
== [1 1 2 2 2 2]
red>> union/skip [1 1 2 2 2 2] [] 2
== [1 1 2 2]
PeterWood
I'm not sure what causes the bug in your example but its seems that there are bugs in both union and intersect when used with the /skip refinement:
>> union [1 2 3][]
== [1 2 3]
>> union/skip [1 1 2 2 2 2 3 3][] 2
== [1 1 2 2 2 2]
>> union/skip [1 1 1 2 2 2 2 2 2 3 3 3][] 3
== [1 1 1 2 2 2 3 3 3]
>> union/skip [1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3][] 4
== [1 1 1 1 2 2 2 2 2 2 2 2]
>> intersect [1 2 3][2]
== [2]
>> intersect/skip [1 1 2 2 3 3][2 2] 2
== []
>> intersect/skip [1 1 1 2 2 2 3 3 3][2 2 2] 3
== []
>> intersect/skip [1 1 1 1 2 2 2 2 3 3 3 3][2 2 2 2] 4
== []
Ladislav
Hi, Gregg! You wrote: "Wouldn't it make more sense for the first example to return 1?" - that is certainly an interesting idea, but I am not sure if may be popular.
The first disadvantage is that it would introduce a new incompatibility with older interpreter versions (R2),
and the second one is transparency. It would mean that the TRUE-BRANCH argument would not be normally evaluated, i.e., the programmer would not be allowed to calculate it somehow "just in time".
Gabriele: "Personally I don't think CASE should evaluate" - yes, that is another alternative. However, I do not think the current behaviour is correct in that case.
Josh
Here's a fix for the other hash issue in /skip (intersect/skip examples above don't work for this reason)
https://github.com/metaeducation/ren-c/commit/5e2fa93b66b6d372b6564e4bda1d4fe5a7d87eed
Gregg
Good points Ladislav. For your original question, the help for CASE says that what follows a condition is only evaluated if the condition is true, which seems OK to me.

Ladislav
Hi, Gregg. Unfortunately, "only evaluated if the condition is true" does not specifiy the behaviour as precisely as one may think. The examples below demonstrate the problem.
blk: [1 +]
case [
    true append blk 2
]
versus
blk: [1 +]
case [
    false append blk 2
]
, or similarblk: [1 +]
case [
    true append blk 2
]
blk: [1 +]
case [
    true append blk 2
]
sorry, copy and paste problem
ignore the text following the comma, please
Gregg
So what is the actual behavior? That is, what does get evaluated and what doesn't? Clearly stating how each is intended to work seems to be the first step. For example, should CASE enforce that values following conditions must be block types?
I can see the problem, with free-ranging evaluation, so constructs like your latest example seem like a bad idea in any case.

Ladislav
Well, the first example (preceding the "versus" word) yields 3 in Rebol 3, as well as in Rebol 2, and I dare to guess that it was intended.
Ladislav
The behaviour looks as inspired by IF. However, the behaviour of the second example (following the "versus" word) does not look reasonable, and I dare to say that it is a design (or implementation) flaw.
Gregg
So, in the latter case 'blk should be [1 + 2] and CASE should return none.
What was the reason for allowing non-block values for the cases, for both IF and CASE? Your examples tell me that it can be abused and hurt readability. Are there scenarios where it helps?

GiuseppeC
MARCO:
How should I use the EAN 128 font in REBOL 3 ?

GiuseppeC
What is blocking me to fully integrate REBOL in a company:
ODBC driver with some errors
No BARCODE support
No way to print a label using it
No way to rapresent a sheet of data using a report and print it or send it as PDF
Maybe since the last time I have used REBOL 3 things have changed.
Have you some solution, even integrating rebol with other technologies/libraries ?
Henrik
Regarding printing, there was some fairly functional and fast postscript output for REBOL2, which I used a lot between 2007 and 2013. Then I used adobe's virtual postscript printer, which then generates a file for the printer. I think also it can generate PDFs. It's also possible to generate postscript directly for the printer, but then the output becomes printer dependent and much harder to work with.
I had written a dialect on top of the postscript dialect, so I could output VID layouts as postscript.
Maybe there should be some work done on porting the postscript dialect to R3, and then you can use the above to support the rest.
GiuseppeC
Henrik, I don't have the skill for such high profile modification.
I could propose a bounty for it.
I don't want also do any work on REBOL2 because we must concentrate all of our forces on R3
I (we) need the following:
Printing on any size of paper (from A4 to rectangular labels) arranged with images and barcodes.
This would unblock a whole new opprtunities for REBOL3 to be used in companies.
Henrik
I believe it can be done. However I wish also it to make sense in a larger printing tool-chain, from authoring to printing.

GiuseppeC
Next week I'll propose a bounty.
Henrik
I hope there will be someone available to do it. :-)

PeterWood
In Rebol2, this works:
>> do load make block! "a: 1 print a"
1
But in Rebol3 , it doesn'tt:
>> do load make block! "a: 1 print a"
** Script error: -apply- does not allow set-word! for its source argument
** Where: apply map-each case load
** Near: apply :load [:item header all type ftype]
Does anybody know why this change of behaviour was made?
WiseGenius
The problem is this part:
>> load [a: 1 print a]
** Script error: -apply- does not allow set-word! for its source argument
** Where: apply map-each case load
** Near: apply :load [:item header all type ftype]
I'm still a noob in Rebol, but my guess is that using `load` on a block in Rebol 2 returns the original block, but in Rebol 3 it returns a block with `load` applied to each value in the block.
Rebol 2:
>> load ["a:" "1 + 1"]
== ["a:" "1 + 1"]
Rebol 3:
>> load ["a:" "1 + 1"]
== [a: [1 + 1]]
Maybe it was changed to make `load` less redundant?
Both of these seem to work in both Rebols:
>> do "a: 1 print a"
1
>> do load "a: 1 print a"
1

PeterWood
The reason that I ask is that Ladislav's explanation in https://en.wikibooks.org/wiki/REBOL_Programming/Advanced/Interpreter is based on it working. Perhaps the explanation only applies to Rebol 2.
I'll try again without the HTTP link:
The reason that I ask is that Ladislav's explanation of the Rebol interpreter in Wiki iBooks s based on it working. Perhaps his explanation only applies to Rebol 2.
Endo
In the page you sent, Ladislav says:
"if the do function evaluates an error! datatype value and the value isn't used as an argument to a function accepting error values, the interpreter causes the error.
In my opinion, this exception is unnecessary and can be painlessly avoided in the future versions of the interpreter."
Is this changed already?
>> f:  func [e [error!]] [true]
>> f  x
== true
And, before above lines, do the following:
>> x: try [1 / 0]
It works as above for R2 and R3.
Ah, sorry, he already says "and the value isn't used as an argument to a function accepting error values", I missed that part, sorry.
Maarten
Has anybody ever done a Redis client for Rebol3?
Pekr
IIRC, Rebolek did Redis protocol for R3 .....
Rebolek
There is probably one bug that I fixed locally, but I'm not sure if I uploaded the fix to GitHub. I will check it.
Rebolek
(fix uploaded)
Ashley
"using path! is much faster than working with string!. make path! [user 1 name] runs about 8-9 faster than rejoin" ... AJOIN addresses this.

Rebolek
Yes, that's true, AJOIN is faster. There's definitely room for optimalization.

Maarten
@Rebolek - thanks!

Maarten
I am in need of some docs for R3 - how dows the module system work, mostly... I need exhustive documentation in terms of options, i.e. can I upgrade modules, sign them, etc.? What's possible?
Pekr
Module system was imo never properly finished and/or documented. Dunno if first implementation was done by Carl or BrianH, but Carl asked BrianH to rewrite it. He did so. But I also remember, that he still wanted some PROTECT function changes, etc., which were imo not done. IIRC, Rebolek tried to use the module system, not sure about his experience, but some ppl found the module system quite complicated ....
Pekr
Atronix used R3/View to create this really cool looking UI for their product. Does not use R3/GUI, but is built upon the gobs -https://www.youtube.com/watch?v=xj1CEU2RlBg&feature=youtu.be
Pekr
Maxim
neet
Bo
David den Haring said that they are integrating OpenGL into Rebol3 natively. That sounds exciting!
I can imagine an amazing OpenGL dialect.

Maarten
Quick question: what are the possblie actor types for a networking scheme? Can you define an actor subtype yourself. As an example, we seem to have lost the list function on network ports.
Pekr

Andreas
Maarten, here are my notes regarding port/scheme actors:
(Warning, slightly long.)
"Port actions":
    create [port]
    delete [port]
    open [port /new /read /write /seek /allow]
    close [port]
    read [port /part length /seek index /string /lines]
    write [port data /part length /seek index /append /allow access /lines]
    open? [port]
    query [port /mode field]
    modify [target field value]
    update [port]
    rename [port to]
Port actions can be used not only with port!s, but also with port
specs (everything make port! accepts: url! block! object! word!) In
this case, `make port!` will be called with the spec first, and then
the corresponding actor is called with the freshly created port!.
"Series actions":
    append
    at
    back
    change
    clear
    copy
    find
    empty?
    head
    head?
    index?
    insert
    length?
    next
    past?
    pick
    poke
    remove
    select
    skip
    tail
    tail?
    take
I think I also put that, or a slight variation of it, on the rebol.net Wiki once. Unfortunately that's still offline.
Bo
Does this help?
http://web.archive.org/web/20150423153208/http://www.rebol.net/
Bo
I'm looking forward to playing with OpenGL in R3 from Atronix. Will it be available soon? Will there be some rudimentary documentation?

Maarten
Andreas, thanks. That does help

Maarten
Anyone know how to use UDP on Rebol 3 (atronix version)?
Maarten
Or if it exists at all?
Pekr
I think it is non existent, but I could be wrong ....

Maarten
Does anyone have a working R3 RSA example? Between 'rsa and rsa-generate-key I seem to miss the functions that create the public/priv keys....

PeterWood
How do you run a Rebol 3 script from the DOS command line?
I tried with this simple script:
    Rebol []
    print 1
The Rebol console flashes in the background and the DOS console shows only a blank line.
C:\Users\peter\Desktop>AtronixR3 test.r
C:\Users\peter\Desktop>
sqlab
Works under Linux
anton@sixpack ~/own/R3 $ ./r3 ../test/test.r
1
PeterWood
I think it's more general Windows/Rebol problem -- it' seems the same for Rebol 2.
Sunanda
The script is running: it prints 1 in the Rebol console, and then closes the Rebol console.
You need to put a HALT at the end of your script if you want the Rebol console to stay open at end of execution.....As far as I know, there is no other easy way of guaranteeing that.
PeterWood
Thanks Sunanda

Pekr
There is special release to have a true console. What R3 provided by default just looks like a DOS console, maybe even is, but that's not what you usually want. It was IIRC Earl, who provided true DOS console for R3. Obviously, no GUI available ....

Ladislav
Hi all! I wrote a https://github.com/rebol/rebol-issues/issues/2259 ticket explaining why EQUAL? should be transitive. I always thought that EQUAL? should be transitive, but these arguments may convince people who did not know them until now. Anybody wanting to discuss it?
The essence is as follows: ordering has to be transitive, otherwise you cannot obtain reasonable sorting results. Moreover, EQUAL? has to be a conjunction of two orderings: LESSER-OR-EQUAL? and GREATER-OR-EQUAL?, which, since both must be transitive, yields that EQUAL? must be transitive too.
Gregg
Your examples are clear and compelling Ladislav. Not sure how I'd argue with them, so I won't. :-)

Ladislav
So, do you think that the reasons to make EQUAL? transitive are compelling?
Gregg
Yes.
Robert
+1

Endo
+1
PeterWood
The arguments for making Equal? transitive are compelling Ladislav. Would there be any noticeable change from the current Equal? behaviour if it was implemented?
Perhaps it would be better to ask, what (if any) change would there be in the behaviour in Equal? if a transitive version was implemented?
Ladislav
Yes, that is a perfect question.
DideC
I see the point is about decimals, but other bugs relate to word! comparison.
Does this 2 points must be threaded separatly or not ?
Ladislav
To answer Peter's question: Currently, EQUAL? is not only nontransitive for decimals, it is also "approximate" in that different numbers (differing by 10 ULP or less) are considered equal. For example, 0.1 + 0.1 + 0.1 (to binary! 0.1 + 0.1 + 0.1; == #{3FD3333333333334}) differs from 0.3 (to binary! 0.3 ; == #{3FD3333333333333}) by exactly 1 ULP (unit in in the last place), as can be seen from the binary representation.
EQUAL? 0.1 + 0.1 + 0.1 0.3 yields TRUE
Ladislav
..., while the number representing 0.1 + 0.1 + 0.1 is exactly by 1 ULP greater than the number representing 0.3, and greater-or-equal? 0.1 + 0.1 + 0.1 yields TRUE, while lesser-or-equal? 0.1 + 0.1 + 0.1 0.3 yields FALSE
If we defined EQUAL? to be equivalent to the conjunction of LESSER-OR-EQUAL? and GREATER-OR-EQUAL? (which we should to be consistent), while retatining both the definition of LESSER-OR-EQUAL? and GREATER-OR-EQUAL? we would obtain that 0.1 + 0.1 + 0.1 has to be unequal to 0.3 (actually greater than 0.3).
DideC - no, I used word comparison only as an illustration why nontransitive relations cannot be used as orders for sorting. Otherwise, word! is a separate datatype, and the issue with word ordering should be resolved separately.
Ladislav
Using present definitions of LESSER-OR-EQUAL? and GREATER-OR-EQUAL? for decimals, and defining EQUAL? as their conjuction, we would obtain a transitive equality, but it would not be approximate.
It turns out that we *can* define a transitive approximate equality, but we cannot do it so that it will be always "tolerant".
The way how to do it is to define some subset of decimals and some rounding, and say that two decimals are approximately equal if they round to the same value. This is guaranteed to be both approximate as well as transitive.
Ladislav
The only problem is that it is not always "tolerant" in the sense that can be illustrated by an example: let's use rounding to the nearest integer, then the numbers greater than 0.0 and smaller than 0.5 round to 0.0, while numbers greater or equal to 0.5 and smaller than 1.5 round to 1.0. This is a transitive relation that is quite tolerant, but it is not always tolerant, since the numbers 0.49999999999999994 and 0.5 round to 0.0 and 1.0 respectively, and are not nearly equal, although they differ only by one ULP.
Ladislav
Our consolation is that this happens only exceptionally, on the "boundary" between successive rounding areas.
I know that this is not trivial stuff, so please ask if anything is unclear to you.
Ladislav
To compare it to other languages, to not run into difficulties, they use only zero-tolerance (strict) comparison, which is guaranteed to be transitive, and inform the user to use a more tolerant comparison where appropriate, leaving her on her own to do it.
PeterWood
Thanks Ladislav. I found the explanation very clear. Given that one of the premises of Rebol, if I remember correctly, is pragmatism, I can understand why Carl would adopt the current behavior. It gives the "expected" answer in most people's eyes (but not those of an expert).
Is there not an argument to retain the current behaviour for equal? but change strict-equal? to be transitive?

Ladislav
Hi, I added an experimental example of a transitive approximate equality. Testing and playing with it welcome.
Ladislav
"Is there not an argument to retain the current behaviour for equal? but change strict-equal? to be transitive?" - hmm, I guess that I know what you wanted to ask. Given a transitive approximate-equal? (AE?) function, we can easily define a transitive approximate-lesser-or-equal? (ALE?) function. The definition would be as follows: ALE?: func [x [decimal!] y [decimal!]] [((lesser? x y) or (ae? x y))]. We could also define approximate-lesser? (AL?) function: AL?: func [x [decimal!] y [decimal!]] [(lesser? x y) and not (ae? x y)], etc.
Does that answer your question, Peter?

PeterWood
Perhaps Ladislav. What I am asking is whether it would be good to retain the current behaviour for equal?. I'm sure that Carl implemented it that way with good reason. I realise that this may still be the result with the transitive approximate-equal? (but Im not sure).
I feel that these two examples of the current equal? behaviour should be retained (if possible):
>> equal? 0.49999999999999994 0.5
== true
>> equal? 0.1 + 0.1 + 0.1 0.3
== true
but that this behaviour should be changed:
>> strict-equal? 0.49999999999999994 0.5
== true -->> false
>> strict-equal? 0.1 + 0.1 + 0.1 0.3
== true -->> false
>> strict-equal? 0.1 + 0.1 + 0.1 0.3
== true
DideC
It's what I though too.
Same behaviour for '= and '== of course.
But it does not answer to the 'lesser-or-equal? and 'greater-or-equal? transitivity question.
PeterWood
I left an extra line in my posting :-(
What I am suggesting that it would be good for equal? to use Ladislav's transitive approximate-equal? but strict-equal? should check that the values are actually equal. So that the future behaviour would be
>> equal? 0.1 + 0.1 + 0.1 0.3
== true
>> strict-equal? 0.1 + 0.1 + 0.1 0.3
== false
I suppose same? could provide the actual check that the values are actually equal but it doesn't seem to in Rebol2
>> same? 0.1 + 0.1 + 0.1 3
== false
>> same? 0.49999999999999994 0.5
== true
Typo:
>>  same? 0.1 + 0.1 + 0.1 0.3
== true
Ladislav
Hi, I corrected the AE? function at https://github.com/rebol/rebol-issues/issues/2259 (there were some bugs) and improved comments.
PeterWood
I see that same? works as I expected in Rebol 3:
>> same? 0.49999999999999994 0.5
== false
>> same? 0.1 + 0.1 + 0.1 0.3
== false
Ladislav
Yes, Peter
PeterWood
So my thought that strict-equal? should check for the values being the same is probably not necessary.
Ladislav
examples:
>> ae? 0.49999999999999994 0.5
== true
>> ae? 0.1 + 0.1 + 0.1 0.3
== true
However, AE? is transitive, and (while only exceptionally), sometimes you get FALSE from AE? A B even when A and B differ only by one ULP. This is inevitable for a transitive relation.
(I should have said: this is inevitable for a nontrivial transitive relation)
PeterWood
That seems very reasonable.
Ladislav
At present, there is only one difference between SAME? and STRICT-EQUAL? for decimals in Rebol3. It is this one:
>> strict-equal? 0.0 -0.0
== true
>> same? 0.0 -0.0
== false
The difference is caused by the fact that 0.0 and -0.0 have different binary representations.
>> to binary! 0.0
== #{0000000000000000}
>> to binary! -0.0
== #{8000000000000000}
PeterWood
So strict-equal? is more strict in R3 than R2.
Ladislav
Yes
PeterWood
That's good.

Ladislav
Hi all, as far as I know, Rebol is considered a high-level cross-platform language. For example, in Windows and in all GCC-compiled platforms it uses two's complement signed integers. I think that to be truly cross-platform, it should use two's complement signed integers on every platform. What do others think on this?
Ladislav
Note: currently, the two's complement signed integer representation is already tested by the core-tests, otherwise it is not enforced.

Ladislav
Please check the ~Humour (my apologies for misusing the group) and #Topaz for the discussion/poll related to undefined variables, #[datatype! unset!], etc.

Arnold
@Reichart Will R4 be open sourced? I have PM ed with Bo about what I thought has to be done about R3.
As well Carl and Earl do not attend to the R3 repo so something has to be done.
In my plan at least 3 sourcekeepers must be assigned.
I think there should be at least three and 2 of three should support an update to have it accepted and if the other one disagrees this must be regarded as you win some you lose some. Good valid arguments will persuade for the better. Besides the 3 keepers, they need to know each others real name and physical address and emailaddress as well as a contactperson to call upon when there has been no contact for a longer period without given reason (holiday).
Any keeper must be replaced when no contact is made over a certain period of time.
Rebolek
That's sure better than your plan to abandon R3 repo totally.
Arnold
I do not know who the lucky ones should be. But if other communities can get the ball rolling so should ours.
Thanks Rebolek!
Bo has agreed to talk to Carl about this.
Rebolek
Anyway, I'm afraid it's hard to find one person to do it, it would be much harder with three.
Arnold
There is so much modesty around...
Well I no one else I will do it, but I need good advice.
Well I => Well if
Geomol
My view on things.
With R2, there were certain shortcommings or errors, that meant, we couldn't finish projects the way, we wanted. I saw R2 as a way to develop cross-platform for the major platforms, Windows, Linux, and OS X. And in a way with very fast development, a short way from idea to product.
For some server-side tasks, R2 was good enough in many ways (approaching perfect), but wanting to do graphics and sound and responsive events, there were obstacles.
The desire for an open-source R2 was there. Then we could fix things ourselves. Not develop new, but fix things to get R2 to work as intended across all platforms.
R3 meant new development, not just a fix of things in R2. But if almost starting over, then it could be from any ground, not only R3. And the world around us changed fast with new mobile platforms. We saw new approaches to solve the problem of 'programming' in efficient and rebolish kind of ways, World, Topaz, Red. I started development of World before Rebol was open source. I don't know if this is the case for Topaz and Red too.
On open source, I see benefit in open source, if things needs to be fixed. I don't always see benefit in open source, when new stuff is being developed. You run into the too many cooks problem. I see huge bloat open source projects all over the place. I am being presented them at university, and I run away in horror. They sucks!
New development should be done by one or very few people, if you want somethings really good out of it. That is my view, and I think, it is true in general. But you can probably find projects, where this is not the case.
I hope, Red succeed. I hope, Topaz succeed (it maybe already did, I haven't followed it). I hope, R3 succeed. I hope, Carl succeed with R4. I will do, what I can to get a success out of the World Programming Language.
There are many old-kind-of-languages out there, and we need new modern next-step future-proof rebolish kind of languages!
Not one such language, but several.
Rebolek
So Carl asks "why are people moving forward with Red as oposed to building on Rebol 3?" and then he mentions that he is working on Rebol 4. In private, not using the public open repo. I guess he answered his own question.
Arnold
Red also started before R3 was open sourced.
I agree with you John that it would have been easier to fix things in R2 then create them in R3. Facts are R2 is closed source and investors interests prohibit open sourcing that. R3 development had already started also as closed source from RT. Carl has managed to free this source from investors interest and could give this source out. But then asking why there is no development is asking for the sake of asking. Nobody was maintaining its source!
Geomol
About succeeding, we already have had success in many situations with these languages (and some crash and burns). I am using the World language every day to do things, I couldn't do with any other language, i know of, in such a short time.
And I use Rebol often, e.g. to produce LaTeX documents using NicomDoc 2, I developed in R2:
http://www.fys.ku.dk/~niclasen/nicomdoc/
Other students at university can't understand, how I can produce LaTeX documents so fast. They have never seen anything like it.
And I have great success these days and weeks developing software in World to produce HW accelerated graphics and 24-bit/96kHz audio. I have waited almost 30 years, since I got my Amiga500, to be able to do the things, I do now. I can thank Carl for showing the way to efficient languages. I use AGG graphics from DRAW in R2 to create the GUI, and it looks very nice. A bit annoying, that I have to go to my Windows PC to have R2 produce the text, as DRAW doesn't work well with fonts under OS X, but it is doable.
We should remember all the good things, and then keep on going to make things even better.
Geomol
(I should say, that the gfx and audio, I'm doing, is in a combination of World and C code, but World working as the scripting part makes the whole thing so much easier. My experiences with this can lead to further development of World.)
Arnold
@Rebolek This 'plan' is still very dependend on getting the access to the repo.
I expected the volunteers to apply in big numbers now I threatened to be willing to help with that. ;-)
Maxim
Arnold, I think you don't understand how Git works.  if you fork the R3 repo you have all of the repo.  there is no need to have access to the repo, you can build your own "official" repo, just like HF did with ren/C.  
the work is about attracting people to your project, if Carl isn't maintaining *his* copy of R3, then that copy is dead... you can work on yours (or another's) and hope it will be good enough to build a community around it.
Arnold
No Maxim, I don't think you understand how this works. There can be a 100 forks, but there is only 1 that is regarded as leading. In our case that one is not maintained and therefor R3 is not maintained, there is no consensus between forks. Outsiders look at the repo and see it is dead as a dodo and so regard R3 not as a viable alternative.
Kaj
R3 is dead, long live R4!
With the emphasis on long
Maxim
yes, Rebol/R3 is dead in terms of development that is true.  Ren-C IS the currently active Rebol3 project.  that's just how it is.
DocKimbel
It is doubtful that Carl would drop the R3 codebase to start from scratch again. I bet that R4 would be more like a re-branding of [R3 + something else].
Another option could also be a "specialized" R3 version for a given domain, like embedded devices.

Arnold
We need a !REBOL4 Group!
And "we" need to take over control over the repo immediately.
Pekr
If there is going to be any repo, maybe it is going to be closed source again :-)
Arnold
If it is closed, in my opinion he better save the effort of creating it.
Rebolek
Why? I believe Carls has fun creating it. Isn't it good enough reason? :)

Marco
I'd like to show a window with a progress bar that show the progress of a download taking place and with a "Cancel" button to stop it  same as request-download. How can I do it in R3? I am able to create the window with widgets but don't know the net part, any hint?
Maarten
>> yes, Rebol/R3 is dead in terms of development that is true.  Ren-C IS the currently active Rebol3 project.  that's just how it is
I disagree - we have the Atronix fork and that works pretty well. Good enough to bridge the gap until REDhas TCP and more UI backends
I'm actually using the Atronix version to build a distributed computing system, that runs across ARMv7, Win64, Lin64 (32 bit too, but whta's the case). Pet project, but fast enough dev time wise to be usable, and seems to "just work"
Ren-c.... I don't think that has a UI. So it's really R3/Core witout FFI

amacleod
Does r3 on android allow to read write local files? I tried but I get an error.

CelesteM
What's the error?

amacleod
access error: cannot open: %test.txt
reason -3

GiuseppeC
Hi, is there a way to intecept new data on the windows clipboard and read it ?
Gregg
I don't recall of any old notification hooks for it. You might have to poll.
Bo
I'm sure there is a .dll to do that, but it would involve a callback, I'm sure.

GiuseppeC
I have resolved the situation in a different way, without rebol.
Gregg
How did you do it Giuseppe?
GiuseppeC
Hi Greg, I had to download the elements of a web table and put it inside a database.
Excel did the job for me. I have learnt it could query a multipage table and write the columns on the current sheed.
I was able to finish a multy day job in just 5 minutes.
GiuseppeC
In the past years, someone gave me a ULTRAEDIT wordfile for REBOL.I don't' remember if version 2 or 3.
I have lost the file but I don't remember the person.
Could someone help ?

Gregg
Might have been me. I'm signing off right now, but ping me and I'll send you my UE REBOL stuff.

Maxim
might be me too...  but mine is highly customized... not very usefull anymore.
(for someone other than me)

DocKimbel
Is there a good reason for ROUND to return a decimal! instead of an integer! like it does in Rebol2?
Rebol3:
>> round 2.3
== 2.0
Rebol2
>> round 2.3
== 2
Endo
Help text says "ROUND returns the nearest integer" but it doesn't always return an integer: May be he thought that its better to keep the datatype of the return value same:
>> round/to 1.987 0.37
== 1.85
DocKimbel
There's no mention of the return type in the R3 version of ROUND docstrings.
Endo
It is on R2.
Gregg
Using /TO changes the result type, but with out it ROUND always returns an integer, correct? If so, the help string for /TO implicitly covers it I think.
But, for Doc, I don't know a good reason to change it. Do you have one?
Endo
Correct, returns integer for all other refinements.
Gregg
As you know, one of the reasons to return an integer was for use with loops.
Thanks Endo.
DocKimbel
@Gregg I don't understand the rationale of Rebol3 returning a decimal! instead of integer!. Qingtian implemented it in Red copying R3 semantics, but I am about to change it to have R2's semantics, but I want first, to understand the reason for R3's behavior.
Gregg
Ah, I see. I don't know why the change was made either, except that they made it a native from a mezz. Maybe it was just an implementation detail?
DocKimbel
It looks too obvious to be a bug, so I guess it was planned. I still don't get why as it makes it impractical for the common use-case.
Gregg
R3 changed to support non-integer values for loops, so the result is usable, but I don't remember why that change was made.
Pekr
IIRC, Ladislav implemented it for Carl, so if he is around, most probably he's the one who knows the answer?
Gregg
I think you're right Petr. He and I did the mezz version, so that makes sense.

Bo
How does one write data into a port in Rebol3? 'insert, 'append, etc. do not work.
Bo
I found this example, but it makes r3-view from Atronix crash:
client: open tcp://localhost:8080
client/awake: func [event /local port] [
    port: event/port
    switch event/type [
        lookup  [open port]
        connect [write port to-binary request]
        read [
           result: to-string port/data
           close port
           return true
        ]
        wrote [read event/port]
    ]
    false
]
wait [client 30] ;the number is a timeout in seconds
close client
(at least when using "client: open clipboard://" instead of a TCP port.

Endo
This works for me:
write clipboard:// "test"
Version:   3.0.91.3.3
Rebolek
Bo, take a look at https://github.com/rebolek/prot-redis/blob/master/prot-redis.reb#L335 . I don't know what version of R3 I am using, because there's no official version, I have something different installed on different machines, but I use it everyday and it works. With limitations, thanks to many R3 bugs.
Rest of the text, obfuscated by long time AltME bug: "I don't know what version of R3 I am using, because there's no official version, I have something different installed on different machines, but I use it everyday and it works. With limitations, thanks to many R3 bugs."
Bo
To get around that bug, I just copy the entire message and paste it in the message field of AltME. ;-)
Rebolek
Thanks, I just haven't posted a link on AltME for some time, so I forgot about it's limitations ;)
Anyway, there's write and read support and it also properly handles writes longer than 32000 bytes.
Gregg
You can patch R2 to handle longer writes as well, thanks to Max. I doubt this affects too much at this point though.
Maxim
yes the simple R2 fix allows to POST any size.

Ashley
Anyone else notice this strange behaviour (Atronix R3 on Windows):
>> b: read %test.csv ; 50MB ASCII file
>> b: none
>> recycle
>> stats ; ~ 2MB
>> s: to string! read %test.csv
>> s: none
>> recycle
>> stats ; ~ 130MB
Looks like a memory leak with converting from binary to string. Same thing happens with read/string as well.
Oddly enough, the following is OK:
>> b: parse read %test.csv rule ; parse entire file into strings
>> b: none
>> recycle
>> stats ; ~ 2MB

Bo
Is there a way to change this:
>> to-money 3
== $3
to this:
>> to-money 3
== $3.00
The bottom is the way Rebol2 behaved, and the top is the way that Rebol3 seems to behave.

Chris
One possibility:
>> round/to to money! 3 $.01
== $3.00

Bo
Chris: Nice!
>> round/to $3 $.01
== $3.00

GiuseppeC
Hi, I have 2 servers, one with SQL Server installed and another where users work.
I need to have a rebol app on the first server which receives  some commands and return one or more result sets of a query to its rebol caller app part on the other server.
No need for async operation a sync one is sufficient.
Have you some code example
Gregg
I don't have example code, and don't use R3 in production at this point, but have you considered just using req/rep files on the FS? Just have your app look for %*.req files, run the query in them, and write out a %.rep file of the same name for the client to watch for. You can do it with net protocols, 0MQ, etc. but then you may need to be concerned about data size and such.

GiuseppeC
I'd rather prefeer direct server to serve communication, but if it is the only option I will use a file syste watcher.
Also, how do I read command line arguments in REBOL 3 ?
Gregg
I'm sure it's not the only option, just an easy suggestion since I don't have code at the ready for another one. :-)
So system/options/args or system/script/args not work correctly in R3?

DideC
@GiuseppeC:
- If this server app need only to serve SQL commands and send response, and if ODBC 32bits is an option, consider using odbcsocketserver with the Rebol client script, but it's for R2, not R3. It's a pretty simple protocol so maybe it could be adapted to R3 easily.
http://odbcsock.sourceforge.net/
The Rebol client protocol seems to not be available online anymore but ask me in private if you are interested.
GiuseppeC
DideC, it is not suitable for me.
I need only 2 scripts which communicate each other.

GiuseppeC
Hi, is it possible to create a Rebol3 Executable ?
Also, is it possible to associate the R3 console to .r (r3 ?) files ?
Gregg
There was an experimental ENCAP in the Atronix version. I don't know how far Shixin took it though.
File association should be normal.

Sunanda
Rebol to executable: Someone posted this link a while back. No idea if it works:
http://nsis.sourceforge.net/How_to_turn_a_REBOL_script_into_EXE
GiuseppeC
It seem write/append/lines %filename.txt reduce [a b c d] is not working correctly. I have not newlines.
I have also tried write/append/lines %filename.txt append {sometext} lf
but as soon as the loop run reiterating the same line, I accumulate tons of LF

GiuseppeC
Too many answer for all my question in this world, please, stop, it's a flooding !!! :)

Bo
Hmmm. I know I've done this before, but I can't find any reference to it. In Rebol3, how does one access the serial port? It doesn't work the same way as in Rebol2, as there is no system/ports/serial object.
Version:   3.0.99.4.20
This version has GUI and Serial built into it. Here are some things I tried:
>> ser: open serial://  
** Access error: invalid port argument: make error! [
    code: 346
    type: 'Script
    id: 'bad-make-arg
    arg1: integer!
    arg2: none
    arg3: none
    near: [to integer! speed]
    where: [to try if init if -apply- open]
]
** Where: open
** Near: open serial://
>> ser: open serial://ttyUSB0/9600/8/none/1
** Access error: invalid port argument: make error! [
    code: 346
    type: 'Script
    id: 'bad-make-arg
    arg1: integer!
    arg2: 9600/8/none/1
    arg3: none
    near: [to integer! speed]
    where: [to try if init if -apply- open]
]
** Where: open
** Near: open serial://ttyUSB0/9600/8/none/1
>> ser: open serial://ttyUSB0              
** Script error: cannot MAKE/TO file! from: none
** Where: to if init if -apply- open
** Near: to file! path
Bo
OK. Note to self: I was close. This is the correct way to open a serial port:
ser: open serial://ttyUSB0/9600
And here's how to write/read data to/from the serial port:
ser/awake: func [event /local p][
    p: event/port
    switch event/type [
        lookup  [open p]
        connect [write p to-binary request]
        read [
           result: to-string p/data
           close p
           return true
        ]
        wrote [read event/port]
    ]
    false
]
write ser "ping^/"
s: wait [ser 5]
print to-string s/data
Bo
The problem I have now is that I cannot figure out how to read data from the serial port. I always only get back the last command I wrote to the serial port in s/data.

Bo
Hmm, I guess nobody has any ideas here nor on Stack Overflow. :-(

Pekr
Isn't serial port occupied by other app? I very vaguely remember, I once met such situation too. Or it might be related to USB to serial converted, not sure ....
Gregg
I've only ever used R2 for serial port work.

Arnold
Bo, what is wrote [read event/port] ? Is it a typo you only made here?
Arnold
(I saw on SO you also had WROTE not WRITE)

Marco
@Bo . Try also to search for "gs: open" in this group (6-dec-2015 by Josh)
Bo
Arnold: "wrote [read event/port]" is part of the awake handler.
Bo
@Marco: Thanks! That's what I was looking for!

amacleod
does r3 not have a set-net function?
"** Script error: set-net has no value"

Gregg
Protocols were never completed for R3.

Bo
A long time ago (Sep 2014 I believe), I wrote a question here but never got an answer. I did eventually figure it out, but I recently had to figure it out again, so I'm posting it here for posterity:
Here's the solution when encountering the following:
$ sudo ./r3
sudo: unable to execute ./r3: No such file or directory
ARM devices running 64-bit operating systems don't generally have the 32-bit libraries installed. This can be fixed with the following commands:
sudo dpkg --add-architecture armhf
sudo apt install libc6:armhf libncurses5:armhf libstdc++6:armhf
After installing those libraries, the executable should now run!
A similar procedure can be performed for Intel machines as well by replacing the "armhf" with "i386".

Endo
Thank you for posting this Bo, I had this issue several times and it was diffcult for me to find.

Bo
:-)

GiuseppeC
How could I find the corresponding date for:
"The monday of 2 weeks ago"
"The next sunday"
"The last day of the current/next/prev month ?"
Ashley
The monday of 2 weeks ago ... either now/weekday = 1 [now - 14][now - (6 + now/weekday)]
The next sunday ... either now/weekday = 7 [now + 7][now + (7 - now/weekday)]
The last day of the current/next/prev month ... http://www.rebol.org/view-script.r?script=date-time.r

Gregg
Giuseppe, individual date calcs are relatively easy. Designing a dialect to interpret human expressions of them is more work, though still doable. I have a number of things that do part of it, but no complete, open system I can post.
Watch for boundary issues. Here are a couple helpers that show what I mean.
set 'last-day-of-month func [date /local d] [
    d: date
    d/day: 1
    d/month: d/month + 1
    d: d - 1
    d
]
set 'same-day-next-month func [date /local d] [
    d: date
    d/month: d/month + 1
    if d/day < date/day [d: d - d/day]
    d
]
GiuseppeC
Ashley, how if I need to calculate a generic monday of N weeks AGO
or
sunday of N weeks in the future ?
Gregg
What have you tried so far Giuseppe?
GiuseppeC
I am currently working on it on the consolle
GiuseppeC
dayofweek: 1
date:  either now/weekday = dayofweek [now - (7 * (weeks - 1))] [now - (((7 * (weeks - 1)) - either now/weekday = 1 [now - (7 * (weeks - 1))] [now - (((7 * (weeks - 1)) -  dayofweek) + now/weekday)]
GiuseppeC
Ooops... to many copies
The following code returns the dayofweek of /weeks/ ago
        dayofweek: 1
        weeks: 2
        date: either now/weekday = dayofweek
            [now - (7 * (weeks - 1))]
            [now - (((7 * (weeks - 1)) -  dayofweek) + now/weekday)]
GiuseppeC
Note that this formula is dangerous when you want to filter something from a start to and date because it includes TIME!
now should be changed to now/date
DideC
I have a generic calculation for dates:   date-of-monday: a-date + 1 - a-date/weekday
If you need a sunday, it become:   date-of-sunday: a-date + 7 - a-date/weekday
Then just add or remove (weeks  * 7)

GiuseppeC
Interesting
Arnold
What should same-day-next-month be today?

Gregg
That would be open to interpretation on a day like today. My call, when I wrote that func, was to use the last day of the month, if the next month has less days than the target month.
Alternately, you could throw an error or return none.
Arnold
Yes depends on what you want it to be.

Ashley
>> col: 1
>> do z: compose/deep [foreach row [[A]] [(to-path join "row/" col)]]
** Script error: cannot access end! in path row/1
** Where: foreach do
** Near: foreach row [[A]] [row/1]
>> z
== [foreach row [[A]] [row/1]]
>> type? first p: [row/1]                                
== path!
>> do z: compose/deep [foreach row [[A]] [(pick p col)]]
== A
>> z
== [foreach row [[A]] [row/1]]
How to get first example working? ... and then for set-path! (i.e. row/1:)
DocKimbel
TO-PATH on a string! value is not doing what you expect:
>> length? to-path "a/b"
== 1
Just replace it with LOAD and it will work fine.
And alternative way to achieve it without using strings: (append to-path 'row col)
Ashley
Wow, the append approach is pretty neat (works with to-set-path as well). Thanks.

GrahamC
For those who don't follow the progress of Ren-c, there have been some changes.  We are currently working on reaching r2 parity.  See https://trello.com/c/5K0ZKkrg/92-bringing-ren-c-to-parity-with-rebol2
I knocked off prot-smtp, prot-send and prot-pop3 recently based on the work I did many years ago.  But also did a prot-synctcp https://github.com/gchiu/Rebol3/blob/master/protocols/prot-synctcp.reb
this sort of allows you to do synchronous tcp like rebol2
And Brian is close to porting Christian Ensel's ODBC extension to ren-c
which should also work with UnixODBC
GrahamC
And current downloads are here http://metaeducation.s3.amazonaws.com/index.html ( windows, linux, OSX, and Android )
the files are much larger than the r3a builds because they include debugging, the FFI etc.
GrahamC
You can also store multiple identities in the system/user object
set-net select system/user/identities 'gmail
switches to my gmail settings.

GrahamC
We are now testing an ODBC extension which was based on Christian Ensel's code, and need to sort out whether we should stick to RT's sql dialect which is a dialect ontop of another dialect
Gregg
What's the alternative?
GrahamC
Chris uses an abstraction Active Record in Quarter Master which is based on a ruby thing
Of course we want to avoid any possibility of sql injection which RT's dialect prevents
Gregg
I think that's the important bit.

GrahamC
so this was implemented by ruby on rails
I've carried out ODBC testing now on Firebird 3.0, Interbase 2017 and DB2 Express edition.  They all have their quirks :(

GrahamC
@Ladislav are you doing any Rebol work at present?  We need an elliptic curve diffie-hellman key exchange implementation for r3 tls !
Using Curve25519 instead of the compromised NIST curves

Last message posted 11 weeks ago.