World: r3wp
[Core] Discuss core issues
older newer | first last |
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! |
older newer | first last |