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

World: r3wp

[Core] Discuss core issues

Graham
10-Aug-2009
[14442x4]
I can understand the philosophical reasons why you consider it an 
error ... but there are practical reasons also to not consider them 
errors.
http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html#AuthProcess


At the bottom of this page, the Google authentication API can provide 
a 403 response as this example below

HTTP/1.0 403 Access Forbidden
Server: GFE/1.3
Content-Type: text/plain
	
Url=http://www.google.com/login/captcha
Error=CaptchaRequired
CaptchaToken=DQAAAGgA...dkI1LK9

CaptchaUrl=Captcha?ctoken=HiteT4b0Bk5Xg18_AcVoP6-yFkHPibe7O9EqxeiI7lUSN
The client is supposed to read the http body to extract the token 
and captcha url so that they can attempt re-authentication.
Just curious .. but what does the qtask api do when issuing 403s 
?
Gabriele
11-Aug-2009
[14446x5]
I don't think the Qtask API issues 403.
still, 4xx is an error no matter what. *any* browser would consider 
that an error. then, you handle it. you can't just expect READ to 
handle it for you, as by the standard, there is no way to handle 
this case (auth required can be handled by asking the user for a 
password).
it would be very nice if proper auth methods were added to HTTP and 
all those APIs were changed to use it, and be RESTful, and so on, 
then maybe we could talk of a standard http scheme that behaves correctly 
"by default".
how things are now, HTTP is (mis)used in varioius ways, and you have 
to handle the exceptional cases yourself.
don't you agree, that the way R3 handles the issue is the best way? 
R2 can probably be made to behave similarly. (I've actually been 
thinking of backporting R3's HTTP for a long time...)
Graham
11-Aug-2009
[14451x2]
I don't know how R3 handles http .. not looked at it.
I guess I just don't like the idea of a protocol hiding data from 
me,...
Graham
15-Aug-2009
[14453]
what's the difference between 'join and 'rejoin ?
Sunanda
15-Aug-2009
[14454]
The number of args:
    join "a" ["b" "c"]
    rejoin ["a" "b" "c"]
Graham
15-Aug-2009
[14455]
>> text: "hello world"
== "hello world"
>> bin: make binary! 1
== #{}
>> join text bin
== "hello world"
>> rejoin [ text bin ]
== "hello world#{}"
BrianH
15-Aug-2009
[14456]
JOIN takes 2 parameters, REJOIN just takes one, and is slightly slower 
because it has to retrieve the first parameter from what would be 
the second parameter of JOIN.
Graham
15-Aug-2009
[14457]
A different outcome.
Sunanda
15-Aug-2009
[14458]
Looks like a bug to me, Graham.
Graham
15-Aug-2009
[14459x2]
Opinions?
Looks like a bug to me too.
Sunanda
15-Aug-2009
[14461]
R2 work around?
    to-string rejoin [#{} "hello" #{}]
    == "hello"
Graham
15-Aug-2009
[14462x3]
not for me .. thanks!
I was constructing a payload for a http post, and need a combination 
of string and binary data.  I used rejoin... and got an unexpected 
outcome.
So, I guess I'll just have to use repeated appends instead to build 
the payload.
BrianH
15-Aug-2009
[14465x2]
ajoin: funco [
	"Reduces and joins a block of values into a new string."
	[throw]
	block [block!]
][
	make string! reduce block
]

Faster than JOIN or REJOIN.
Sorry about the funco, I copied that from R2/Forward.
Graham
15-Aug-2009
[14467]
let me guess .. part of your rebol3 backport ??
BrianH
15-Aug-2009
[14468]
Of course.
Graham
15-Aug-2009
[14469x2]
does it build a series without corrupting binary data ??
perhaps i need 'bjoin :)
BrianH
15-Aug-2009
[14471]
Yes. The mezzanine is faster than the native version, but the native 
doesn't have the intermediate block overhead.
Graham
15-Aug-2009
[14472x2]
Where is it?
'funco i.e.
BrianH
15-Aug-2009
[14474]
It's just another name for FUNC (where FUNC is redefined in R2/Forward).
Graham
15-Aug-2009
[14475x2]
ask-brian: funco [ ask-brian ]
oops... missing the second block!
BrianH
15-Aug-2009
[14477]
Just use FUNC :)
Graham
15-Aug-2009
[14478x3]
Nope... seems to give the same problems as rejoin
ajoin: func [[throw!] block [block!]][make string! reduce block]
>> ajoin [ "hello" make binary! 1 ]
== "hello#{}"
apologies .. Sunanda's workround works  viz to-string rejoin [ #{} 
.... ]
Ashley
15-Aug-2009
[14481]
Wow, that make string! change to join/rejoin yields about a 300% 
speed increase! Definiately one to backport to R2.
Graham
15-Aug-2009
[14482]
doesn't help with 'ajoin though ... need to coerce to binary first
Sunanda
15-Aug-2009
[14483]
Graham -- glad the workaround  works.
But it is R2 only. R3 has other problems.
Graham
15-Aug-2009
[14484]
not too fast .. it exhibits different behaviours
Ashley
15-Aug-2009
[14485]
Just needs a bit of datatype coercing added.
Graham
15-Aug-2009
[14486x4]
this has always got me
 rejoin [ <text> "hello" </text> ]
== <texthello</text>>
rejoin [ "" <text> "hello" </text> ]
== "<text>hello</text>"
which is I guess one should use 'reform when constructing strings 
for web output.
this fix allows me to upload a binary document using the googleapi 
.. eg. docx
Ashley
15-Aug-2009
[14490]
First cut QAD on join/rejoin, still about twice as fast the originals:

	join: make function! [
		"Concatenates values."
		value "Base value"
		rest "Value or block of values"
	][
		either series? value [
			make type? value reduce [value rest]
		][
			make string! reduce [value rest]
		]
	]


	rejoin: make function! [
		"Reduces and joins a block of values."
		block [block!] "Values to reduce and join"
	][
		either empty? block: reduce block [block] [

   make either series? first block [type? first block] [string!] block
		]

	]
Graham
15-Aug-2009
[14491]
try rejoin with using #{} as the first element!