AltME: REBOL3

Messages

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

Chris
Max (from !munge group re. Ren-C), aside from Atronix? For me: not quite--am still missing some key libraries that I'm working to replace (similar situation with Red). I would prefer that there's a stable branch with paced releases, but it is a better version of Rebol 3 than R3 Alpha. Working cross-codes (Red/Ren-C) on the HTML parser is fun (if you like that type of thing).
Chris
Say what you will about the character/conduct of the project lead (I know everyone has their opinion) there's a good infrastructure around the process--changes are reasoned/documented, edge builds are available to download automatically, any impulse on experimention is tempered by the conservative needs of Atronix, more of the core extensions (modules, help, interface) are being pushed to third parties.

eFishAnt
I used Atronix R3 to parse 7 gig fs binaries for FAT table coherence on some returns for product returs since I needed more than 4 gig of 32-bit, and no problems. with it.

Bo
I wrote an answer here on how to get R3 to run on arm64-capable hardware running an arm64 OS (like the Rock64 or ODROID-C2 running Ubuntu for arm64) back on 21-Dec-2016. But I left out an important step. After adding the armhf architecture, make sure to run 'apt update'! Or it won't find the packages...
sudo dpkg --add-architecture armhf
sudo apt update
sudo apt install libc6:armhf libncurses5:armhf libstdc++6:armhf
This should take care of the message "unable to execute ./r3: No such file or directory".
BTW, I have an armhf version of ./r3 that you can download on your device by the following:
wget http://respectech.com/odroid/r3
Have fun!
GrahamC
Why would you want to run r3alpha when you can run ren-c?
Bo
Not sure what the limitations of ren-c are. Do you have to call it from a C program?
GrahamC
It's a superset of r3alpha but with the bugs removed!
And there's an armhf build available
There has been a version that can be linked into a C++ program but that's not currently available.
GiuseppeC
Graham, where could I find all the changes/fixing of REN-C ?
Pekr
You would have to properly follow HostileFork. He changes concepts here or there, some changes seem to be fundamental, mostly low level, difficult to say. You can reach him at the Stack Overflow chat.
Bo
When Red reaches 0.7, I'm probably going to switch most of my development to that anyway.
GrahamC
@Guiseppe, there's a change log but I'm not sure if it's being maintained.

GrahamC
well, Cyphre was asking for $1500-$2000 to update Rebol3 TLS - I'm asking for at least TLS 1.2 and server side SSL.  And we now have half of that pledged.
If you wish to pledge, add your selves here https://forum.rebol.info/t/updating-tls-bounty/478/10
GrahamC
Oh, and if anyone else wants to take on this job for a cheaper price, please speak up!  :)

Gregg
I have always admired your optimisim Graham. :^)
GiuseppeC
1500 USD = 1 month of work for europe, 5-6 months in CZEC republic. I think Cyphre is the perfect candidate as this bounty  let him be dedicated only to this task for a vast amount of time nad he has the needed knowledge. If he will not work full job he could work on this project even for a full year. Hope our group of people will grew and we will able to raise more money for development tasks.
Arnold
Or ask the new millionairs at Fullstack to fund this project....
Pekr
1500 is slightly above the average salary in CZ, programmers here have more. So, 5-6 months is really unrealistic here :-)
GiuseppeC

GrahamC
I read that differently.  30,000 czk top average salary which is USD1500 so only a month's wages.
GiuseppeC
This is for the very high skilled people working on money rich areas and money rich areas.
We are a small group of people and despite cyphre is very high skilled we are neither a big company nor a rich economic niche. You should aspect a much lower income for jobs in our area until we become a microsoft adversary ;-) When big companies will be again on REBOL (RED?) you can rise how much you could get from the market as wage rate/time equivalence for your skill over a bounty.
GiuseppeC
* This is for the very high skilled people working for big companies and in money rich areas.

GrahamC
Our alpha emscripten build is online http://giuliolunati.altervista.org/try-renc.html
if it's a bit slow, it might be running off a phone

eFishAnt
I love that Graham!  very cool
Gregg
Congratulations guys!

eFishAnt

GrahamC
Giulio does all his programming on his phone.  And maybe runs a web server on this phone :(
Arnold
And his phone is as big as a refridgerator? Big enough to even run Java? Still impressive work!
GrahamC
No, one of his criteria for a computing device is that it fits in his pocket.

GrahamC
A little script that controls a Tello drone.  The problem we had with this is that the drone replies to the first UDP port it gets commands from. So, we need to fix the port we open rather than leaving it to the OS to allocate the port.  We have local-id now for that.
Before that Rebol had no way of specifying which port to open, except when opening a server port.

Gregg
Cool Graham.
GrahamC
It's like controlling a logo turtle in the sky :)
Gregg
In that case, VERY cool. :^)

GrahamC
We now have the empscripten builds available for download http://metaeducation.s3.amazonaws.com/index.html
Of course there's no documentation, and it's pretty fragile. But it's a starting point.
I wanted to use the emscripten builds to have a web page to control my Tello drone but alas Javascript doesn't have UDP support built in.

Bo
What are some examples of what can be done with a Rebol3 emscripten build?

GrahamC
It's there as a R3 interpreter for people to easily try out.
I imagine in time we will have complete control of the DOM so that you'll be able control the browser and JS. But initially it's JS calling Rebol.

Bo
I'd be excited to be able to control the DOM from R3...
Pekr
There's no spoon (R3)
Bo
Spoon?

Pekr
"There is no spoon" is famous saying from The Matrix movie. What I mean is - there is (mostly) no R3. There is Ren-C though. The question is, if we should regard it being a direct continuation of an R3 effort, as there does not seem to be any other active effort ...

GrahamC
Current focus is now on getting Dom manipulation using the Emscripten build.  And this apparently involves running a JS emulator in JS!  How twisted is that?

GrahamC
So, this is a Rebol console in Javascript with widgets now.
The feat was just accomplished last night so lots of things to fix.
The columns on the right will be a debug inspector.
eFishAnt
very cool, white paper and looks like typing in the web browser directly
Arnold
You cannot eat soup unless it is almost frozen, or cooked dry.... there is no spoon..
almost invented / discovered though :-)

GrahamC
You can now use shift-enter to enter multiline editing mode, and control-enter to evaluate switching back to single line mode.
Bo
Pretty cool!

Endo
That is cool Graham!

Oldes
I have added RSA cryptography to my R3 fork... here is a test file, where one can see usage example:
https://github.com/Oldes/Rebol3/blob/master/src/tests/units/rsa-test.r3
The code is based on files from Atronix's fork, but with rewritten and modified Rebol part (with a different function definitions).

GrahamC
Ren-c now supports TLS 1.1 and 1.2 https://github.com/metaeducation/ren-c/pull/854
which is pretty important considering most of the sites I use have now switched to TLS 1.2 now :(

Bo
Some interesting stuff that came up while doing some market research:
Search Terms / Number of searches within US per month
"what is rebol" / 50
"rebol programming language" / 20
"rebol tutorial" / 20
"rebol 3" / 10

Sunanda
Maybe everyone knows about Rebol - so no need to search :)

GrahamC
This is the first app for Rebol in a browser.  It just calculates how much various companies would charge me for power use
So, it's a console app.  It can change the dom dynamically but I'm not doing that apart from printing to the console.

GrahamC
So, the Ren-c projected has now moved to a Rebol in the browser effort
So, those people who wanted to be manipulate the DOM using Rebol can now do this.
And, if you want to use R2 to do this, then you can use the R2 compatibiility mode for Ren-c

Bo
Is Ren-C currently able to run in the browser and manipulate the DOM? Or is that a future target?
GrahamC
Yes, it can manipulate the DOM now.  See my single page app above.
r2 backwards compatibility is a WIP again

GrahamC
Here's a rebol dialect driven GUI in the browser.  Rebol creates JS on the fly.  https://brianotto.github.io/ui-builder/web/

GrahamC
Renc now has a redbol dialect.  There's a version in the web browser - see http://hostilefork.com/media/shared/replpad-js/
And it was used to create a pdf using pdf-maker.r
Yes, the name means it will try and run red scripts as well

amacleod
Graham, any other examples of apps built with this rebol dialect? rtying to get my head around what is possible.

GrahamC
amcleod, I've started a FAQ on how to use the Rebol JS API https://github.com/hostilefork/replpad-js/wiki/Basic---Getting-started
Basically you have JS available to you from rebol and its limitations.  So, CORS stops you loading JS from sites that don't have CORS enabled, and you can write to local files.  Storage has to be web based database, or you could use cookies for session management.
This is for one page apps without using CGI.  If you choose to use CGI then you have more options.   Currently it doesn't very well on node.js so we're targetting the browser JS engine first.
sorry, you can not write to local files
amacleod
Thanks.
GrahamC
So, basically you are writing normal rebol/renc code but your GUI is JS, and I/O has all JS limitations
If we could run on node.js then those latter issues are addressed since it's no longer blocked by browser security considerations
Note that this stuff runs on your phone so you can start to write phone apps

Oldes
Not working... probably because I have not set the required flags, which I'm not going to do... even now Chrome is a devil's beast and I don't want to extend it. I prefer my tooling to be living close to me and don't need to download them from a server all the time.. but good luck with your efford.
GrahamC
That's ignorant oldes. You know you can just save everything locally.
GrahamC
You can either download the repo to your phone or PC.  I have even this script https://github.com/gchiu/rebol-misc/blob/master/setup-rebolweb.reb
if you don't want the sources.  And then grab the latest .wasm file off my S3 site.

GrahamC
Here's a chess demo
GrahamC
make sure your browser is setup correctly and supported by going here http://metaeducation.s3.amazonaws.com/index.html
Now either type
do <chess>
at the prompt, or go directly to my app by http://metaeducation.s3.amazonaws.com/index.html?do=chess
you can clear the board using "clear", setup a new board by "start", show a position eg. type "ruy-lopez"
GrahamC
to move, use the move command.
Here's the opening sequence for the Ruy Lopez
move "e2-e4" move "e7-e5" move "g1-f3" move "b8-c6" move "c1-b5"
so the rebol words are functions that call a JS chess library to manipulate the dom
GrahamC
Maybe I should drop the "-" ?
GrahamC
or:
clear start for-each mv [ "e2-e4" "e7-e5" "g1-f3" "b8-c6" "c1-b5" ][move mv wait 1]
Oldes
Ok.. works in Chrome.
Oldes
But it is cheating a little bit as the chess are written in JavaScript https://github.com/oakmac/chessboardjs/
GrahamC
huh?  This is rebol javascript integration.  All the graphics have to be done in JS.
Bo
That's really cool. Now I have to find some time to look at the source code.

GrahamC
I have this FAQ for those wanting to get started https://github.com/hostilefork/replpad-js/wiki/Basic---Getting-started
Bo
>>  source move
move: make action! [ [
    chess-move [text!] "use chess notation"
]...native code, no source available...
I'll check out the FAQ. Thanks.
GrahamC
GrahamC
Ok, try this once your browser is working
http://metaeducation.s3.amazonaws.com/index.html?do=chess
and type
chiu-vs-jensen
forget about the "ss" which is a typo
a game of mine from over 40 years ago which I found on the net

GrahamC
Here's a little homage experiment
What happens is that the JS looks for a file startup-sequence.reb and if it finds it executes it.  This gives a table of downloads to renc binaries. Click on a link and it gives you the url to the latest binary for that OS tuple.

GrahamC
move the board out of the way, and then you can start typing chess moves
eg.  e2 e4 e7 e5 g1 f3 etc
Have yet to implement castling, en passant and pawn promotion
so the console has a hook that allows me to parse out chess moves and instead of sending them to the interpreter moves the pieces instead
eFishAnt
sweet chess game

Bo
Just got to play with the demo. Super neat!

GrahamC
Now has pawn promotion, castling and en passant in my Rebol Javascript Wasm chess interpreter

Bo
I was installing R3 on a headless Armbian SBC called SOPine A64 Compute Module, and the standard steps didn't work. This is what I needed to do to get it to work:
dpkg --add-architecture armhf
apt update
apt install libc6:armhf libncurses5:armhf libstdc++6:armhf
apt install libxrandr2:armhf libfontconfig1:armhf
#not sure if the following line is needed
apt install libx11-6:armhf libxaw7:armhf libfreetype6:armhf
reboot
Bo
It turns out that all the above lines are needed.

GrahamC
Ren-c added ECDHE to its arsenal so we can now read those sites that only use ECDHE.
Since some of us have become somewhat disenchanted with the admin at Stackexchange we are looking to move our chat
This is a first pass of mine at a new rebol chat http://35.224.174.22/rooms/1 and if it looks familiar, it's because I've taken the CSS from stackoverflow!
Initially the idea is to get chat at the console, like the late rebdev chat which was never open sourced
So, currently I can register, post,  replyto and read messages.  Initial encryption uses gnuGPG as we still don't have server side https going.  The server is rebol httpd.
If it goes down frequently it will be because I'm adding new features and bugs
The web client will likely be a WASM based client which means I guess using GPG from JS.
Private messaging will require that you import the recipient's public certificate so that encrypted messages can be stored on the server until the recipient uplifts them.
And if it's excessively complicated .. then yes, it is lol

Bo
Code would be 1/4 the size and 1/10 as complicated if it weren't for edge cases and security!
But the chat looks good!
I've been considering doing a chat client for a while. Here are my wants:
- Able to be self hosted, which means it can also be hosted in the cloud.
- Messaging engine and data store is completely isolated from the interface so multiple interfaces can be developed for the same messaging engine and data store.
- Multiple message "worlds", each with their own groups, permissions, users, etc., but all can be active at the same time (sort of like Discord, but unlike AltME where only one world can be active at a time per instance of the AltME client).

GrahamC
So, 1. This is self hosted, on a google compute cloud instance, 2. we now have both console and web clients ( I can post from google chrome ) 3. that's easy enough as well.
the data is currently just stored in rebol objects on the file system at present because how it's stored is less important in the short term.
The browser interface downloads all messages locally and serves those so it acts as a proxy for the cloud server
So, there's a bit of a lag from posting to seeing your message but that just needs tweeking
Now, I'm going to look at adding rebol Wasm to the browser client so I can do more complex things in rebol rather than having to learn JS!
The multiple worlds scenario .. i'd imagine would just be separate tabs in the browser
Each connecting to a different cloud instance
I also have it so that if your message starts with a >> it gets sent to a rebol eval instance and the result is posted instead

Bo
Has anyone gotten mysql-protocol.r3 to work with mysql-server 8.0?
Alternatively, I can't figure out how to install mysql-server 5.5 or older on Linux Mint x86.

Bo
Just in case anyone is wondering, I was able to install mysql-server 5.5 on Linux Mint x86. I'm posting the steps here.
`cd /usr/local` is the location where MySQL should be installed
`wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz` If this returns an error, it is because this file has been moved or removed from MySQL's site - the newer versions aren't compatible with the latest version of mysql-protocol.r3 that I can find
`groupadd mysql` If this returns an error, this step wasn't needed
`useradd -g mysql mysql` If this returns an error, this step wasn't needed
`tar -xvf mysql*.tar.gz` extracts MySQL into the current directory
`rm mysql-*.gz` removes the compressed file that is no longer needed
`mv mysql-* mysql` renames the long MySQL directory name to the short version
`chown root:root mysql` changes the permissions on the mysql directory to the correct permissions
`cd mysql` goes into the mysql directory
`chown -R mysql:mysql *` changes permissions on all the files in the mysql directory to the mysql user and the mysql group
`apt install libaio1` may already be installed, but just to make sure
`scripts/mysql_install_db --user=mysql` installs MySQL
`chown -R root .` changes permissions on the files in the MySQL directory
`chown -R mysql data` changes permissions on the MySQL data directory
`cp support-files/my-medium.cnf /etc/my.cnf` copies the configuration file to the correct location
`bin/mysqld_safe --user=mysql & cp support-files/mysql.server /etc/init.d/mysql.server` starts MySQL server and copies the autostart file to the correct location
`bin/mysqladmin -u root password 'pswd'` change 'pswd' to the MySQL root password - This will be referred to as the MySQL root password from now on
`/etc/init.d/mysql.server start` starts MySQL server
`/etc/init.d/mysql.server stop` stops MySQL server
`update-rc.d -f mysql.server defaults` enables MySQL to start when computer is rebooted
`ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql` adds MySQL to the system path
`apt install libncursesw5` installs a library needed by MySQL
Gregg
Thanks for sharing Bo!

eFishAnt
wow, that's something I can use.  Muchos Gracious Bo!

Bo
I've made it into a blog post for easier access:
https://ameridroid.com/blogs/ameriblogs/how-to-install-older-version-of-mysql-on-debian-based-systems
Oldes
My version of MySQL protocol should be working (tried with MySQL 8.0.20 on Windows).. just there must be enabled old native passwords
https://github.com/Oldes/Rebol3/blob/master/src/mezz/prot-mysql.reb
https://stackoverflow.com/a/50131831/494472
Bo
Oldes, that's great!
Where are the old native passwords enabled at? In mysql.cnf or somewhere else?

Oldes
I'm not actively using MySQL, but when I was testing the MySQL protocol, I used instructions from the stackoverflow chat (link above) to enable the old passwords.

Scot
Struggling with REBOL 3 draw dialect.  I see draw blocks throughout the styles, but cannot seem to create my own gobs with them.  The draw function expects a command rather than a dialect.  What is the process for parsing the draw dialect and creating a gob! from it?

Henrik
Scot, I'm not sure DRAW is supposed to have that coupling. I thought you would assign an image! to a gob!, and then use DRAW to draw on the image!.
Henrik
Generally finding a working REBOL 3 seems to be a bit confusing...

Marco
@Scot which version of R3 are you using ? Oldes Rebol 3.5 seems not to support draw since it has not AGG  embedde AFAIK. In early R3 versions:
    How R3 low-level view system works:
    ; window's gob
    gobw: make gob! [
        text: "Win title"
        size: 700x500
        offset: 50x50
    ]
    ; background's gob
    gobb: make gob! [
        size: 700x500
        color: 200.200.200
    ]
    ; foreground's
    gobd: make gob! [
        offset: 10x10
        size: 400x400
        draw: none
    ]
    gobd/draw: bind reduce ['pen 200.0.0 'circle 20x20 55x55] import 'draw ; !!??!!
    append gobw [gobb gobd]
    view/no-wait/as-is gobw
I hope Oldes (or Ren-C?) adds support for AGG or Cairo or Blend2d as soon as possible.

Oldes
I'm not going to add support for AGG (it's no going to evolve as the main author passed away), but I was experimenting with Blend2D some time ago (on Windows) https://github.com/Oldes/Rebol3-Blend2D
Oldes
Just don't know if the code from the link above is still in par with recent lib changes (it was tested with version 3.3).
Oldes
I'm now rewriting the original build system to something more modular, so don't have time to continue with the draw experiments, but it's one of my long lasting goals. Second one is 3D using Sokol.
Henrik
I wouldn't mind if there was a simple way to draw using pure mezzanines. Would be a great way to prototype a different kind of draw engine, as I've kind of outgrown DRAW.

Last message posted 164 weeks ago.