Norbert

 

I agree. I was angry and went over the top – sorry. Let’s consider it closed.

 

Peter

 

From: Pharo-users [mailto:pharo-users-boun...@lists.pharo.org] On Behalf Of 
Norbert Hartl
Sent: 12 June 2015 12:18
To: Pharo users users
Subject: Re: [Pharo-users] ZnClient and percent characters

 

 

Am 12.06.2015 um 12:03 schrieb PBKResearch <pe...@pbkresearch.co.uk 
<mailto:pe...@pbkresearch.co.uk> >:

 

Norbert

 

Some comments on your latest post below.

 

I just wrote because you told Jimmie to alter a method of a third-party 
library. And that is a no-go.

 

Zinc, like almost all of Pharo, is MIT licenced, “including without limitation 
the rights to use, copy, modify, merge, publish…” Once the code is on my 
machine, I am entitled to alter it for my own use in any way I see fit; so is 
Jimmie. It is clear from Sven’s comments that not encoding commas is a design 
decision, and a departure from earlier Zinc working. Sven himself says “ maybe 
we made a mistake, maybe not.” I am entitled to disagree with that decision, 
and to act on that disagreement; so is Jimmie. I just told him how to do it 
quickly and safely.

 

So, the misunderstanding is because we seem to have different views on the 
topic. I have always projects in mind that are built together by a build system 
and they produce something deployable. Your proposal doesn't fit in this view 
for me. If you alter a third-party function you need to make that a repeatable 
task which is having an expression to patch the third-party library again if 
you build the project again. 





The way to change it and have Sven it commited is doable. 

 

Obviously it would be ideal if Sven made a change which allowed encoding of 
commas. However, that does not seem likely to happen any time soon. Meanwhile, 
Jimmie was stuck with a program which would not carry out a function that 
should be quite normal.

 

As is my proposal that you can change the code in a reliable way without 
changing a third-party library. That's all I wanted to say. 

 

No doubt your subclassing approach would work, though not as easily as you 
imply. The method that encodes the key-value pairs of a query is not 
#encodeQuery:on:, it is #printQueryOn: (see ZnUrl>>#printPathQueryFragmentOn:); 
changing that would involve having variant versions of 
ZnResourceMetaUtils>>#writeQueryFields:on: and 
>>writeQueryFields:withEncoder:on:, as well as a new safe list.

 

Yes, but it is still the thing you can do immediately without having to patch 
code that is not under your control. That's my whole point. I wouldn't consider 
my approach good or even nice. 



 

And yes I think it applies to monkey patching. Choosing weaker terms just to 
avoid problems is not the way to go IMHO.

 

I was not asking for a weaker term, I was asking for a less offensive one. I 
think this term is offensive in all contexts, and should not be used. Henry’s 
comment implies that it is widely used, and everyone knows what it means. In my 
youth, 60-70 years ago, the n-word was widely used to refer to people of 
African origin, and everyone knew what it meant. Now, thank goodness, we see 
how offensive it was. To me, this expression is equally offensive. You used it, 
in a derogatory sense, to criticise what I had done in helping Jimmie. Frankly, 
I do not think you were sincere in saying “No offense meant.”

 

I like the term monkey patching because it is as funny as it might be 
offensive. The rest I don't want to comment because I could easily be offended 
by your paragraph above…if I only had those kinds of sensitivities. And btw. 
don't hide behind something like not using a certain word. You can still be a 
racist without using the n-word. What is needed is to change attitude not 
words. 





I had thought of just ignoring your comment, thinking that we will have to 
agree to differ. However, your reiteration of the m-word has got me 
sufficiently riled to make another protest. I may be a lone voice here, but 
that does not make my views any less valid.

 

dito.

 

Let's close this case. To me it is a little misunderstanding that took the 
wrong route.

 

Norbert

 

 

Peter Kenny

 

 

From: Pharo-users [mailto:pharo-users-boun...@lists.pharo.org] On Behalf Of 
Norbert Hartl
Sent: 11 June 2015 17:07
To: Pharo users users
Subject: Re: [Pharo-users] ZnClient and percent characters

 

 

Am 11.06.2015 um 16:51 schrieb PBKResearch < <mailto:pe...@pbkresearch.co.uk> 
pe...@pbkresearch.co.uk>:

 

Norbert

 

Apology accepted – I had never heard this term before. However, having read the 
Wikipedia article Henry mentioned, I do not think it applies to what I had 
done. If Sven accepts the argument that commas should always be encoded in 
query lines – and I can see a strong argument for that from what I have read – 
then the change I made is just what he will need to do. I simply anticipated 
the decision. If it goes the other way, then it was just a hack to solve 
Jimmie’s problem – but it might be better to say ‘hack’ rather than use a term 
which is potentially offensive.

 

I just wrote because you told Jimmie to alter a method of a third-party 
library. And that is a no-go. The way to change it and have Sven it commited is 
doable. As is my proposal that you can change the code in a reliable way 
without changing a third-party library. That's all I wanted to say. And yes I 
think it applies to monkey patching. Choosing weaker terms just to avoid 
problems is not the way to go IMHO. 






I also note Jimmie’s argument that, as long as there are some sites which 
insist on encoded commas, it must be possible to generate such lines if Zinc is 
to be generally useful. Whether this should be a user-controlled option, as 
Sven seems to suggest, is open to discussion – but if so I would argue for 
encoding of commas as the safe default, which can be overridden if necessary.

 

Sure. Zinc should behave correctly and it should provide functionalities to 
make it "less correct". And these functionalities shouldn't be too easy to use 
;)

 

Norbert






Peter Kenny

 

From: Pharo-users [ <mailto:pharo-users-boun...@lists.pharo.org> 
mailto:pharo-users-boun...@lists.pharo.org] On Behalf Of Norbert Hartl
Sent: 11 June 2015 11:25
To: Pharo users users
Subject: Re: [Pharo-users] ZnClient and percent characters

 

No offense meant. I assumed you would know the term. Sorry! Henry explained it 
quite good what I meant.

 

Norbert

 

Am 11.06.2015 um 09:51 schrieb PBKResearch < <mailto:pe...@pbkresearch.co.uk> 
pe...@pbkresearch.co.uk>:

 

I don’t quite understand Norbert’s comment. Does ‘monkey’ apply to me or to 
what I have done? Either way, it seems unnecessary and abusive. 

 

Thanks to Sven’s careful use of informative method names, the effect of my 
change is quite clear. Any comma in the value part of a query line will be 
encoded. Nothing else. I did my best to trace any side effects, and didn’t find 
any. What is not ‘reliable’ about that?

 

Peter Kenny

 

 

I was thinking of a reliable solution. Of course if it only needs to be tested 
than monkey patching foreign packages is ok. 

 

Norbert

 

Am 11.06.2015 um 01:22 schrieb PBKResearch < <mailto:pe...@pbkresearch.co.uk> 
pe...@pbkresearch.co.uk>:

 

There is a simpler way than Norbert’s suggestion. Find the class 
ZnResourceMetaUtils (in the package Zinc-Resource-Meta-Core). Locate the class 
side method #queryKeyValueSafeSet. Remove the comma from the string. With this 
change your ‘Google’ example generates the query line with the ‘%2C’ encoding 
of the commas.

 

Of course, with this change a comma in the value field of a query will always 
be encoded. It is not clear to me whether this is correcting an error in Zinc, 
or just a hack to solve your problem – earlier posts here endorse both views. 
No doubt Sven is the person to sort this out. Meanwhile, this will enable you 
to get moving.

 

Hope this helps

 

Peter Kenny

 

From: Pharo-users [ <mailto:pharo-users-boun...@lists.pharo.org> 
mailto:pharo-users-boun...@lists.pharo.org] On Behalf Of Norbert Hartl
Sent: 10 June 2015 23:56
To: Pharo users users
Subject: Re: [Pharo-users] ZnClient and percent characters

 

Just to clarify:

 

"Characters in the "reserved" set are not reserved in all contexts.

   The set of characters actually reserved within any given URI
   component is defined by that component. In general, a character is
   reserved if the semantics of the URI changes if the character is
   replaced with its escaped US-ASCII encoding."
If I were you I'd subclass ZnUrl and implement 
#encodeQuery:on:
on that class. You could have an extension method in ZnResourceMetaUtils that 
returns the character set you need to have encoded. In ZnClient you just set 
your ZnUrl derived class object as #url:
Cannot think of anything better for a quick resolve of your problem.
Norbert

Am 11.06.2015 um 00:26 schrieb Jimmie Houchin < <mailto:jlhouc...@gmail.com> 
jlhouc...@gmail.com>:

 

I am not an expert on URIs or encoding. However, this is a requirement of the 
API I am using and I am required to submit an encoded URI with %2C and no 
commas.

As far as commas needing to be escaped, it seems from other sources that they 
should be.

>From  <https://www.ietf.org/rfc/rfc2396.txt> 
>https://www.ietf.org/rfc/rfc2396.txt







The plus "+", dollar "$", and comma "," characters have been added to
   those in the "reserved" set, since they are treated as reserved
   within the query component.
 
States that commas are reserved within the query component.
 
 <http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded> 
http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded
 
Regardless of what is or is not required, I do need the ability to have a query 
string with commas encoded as %2C in order to satisfy and use the API which 
states.
 
fields: Optional An URL encoded (%2C) comma separated list of instrument fields 
that are to be returned in the response. The instrument field will be returned 
regardless of the input to this query parameter. Please see the Response 
Parameters section below for a list of valid values.
 
Which will look like this or something similar.
 
fields=displayName%2Cinstrument%2Cpip
 
 
Thanks.
 
Jimmie
 

On 06/10/2015 03:27 PM, Norbert Hartl wrote:

That's because the comma does not need to be escaped in the query part of the 
uri.
 
Norbert
 

Am 10.06.2015 um 22:00 schrieb Jimmie Houchin  <mailto:jlhouc...@gmail.com> 
<jlhouc...@gmail.com>:
 
On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:

On 10 Jun 2015, at 17:24, David  <mailto:stormb...@gmail.com> 
<stormb...@gmail.com> wrote:
 
El Wed, 10 Jun 2015 10:14:37 -0500
Jimmie Houchin  <mailto:jlhouc...@gmail.com> <jlhouc...@gmail.com>
escribió:

Hello,
 
I am attempting to use ZnClient to request data. The request requires
a %2C (comma) delimited string as part of the query. Below is a
snippet.
 
znClient
        addPath: '/v1/instruments';
        queryAt: 'fields' putAll: 'displayName%2Cinstrument%2Cpip';
        get ;
        contents)
 
The string  'displayName%2Cinstrument%2Cpip'
is being converted to  'displayName%252Cinstrument%252Cpip'
which causes the request to fail.
 
The query needs to be
fields=displayName%2Cinstrument%2Cpip
 
I have not found how to do this correctly.
Any help greatly appreciated.
 
Thanks.
 
Jimmie
 
 

Maybe a silly thing, but since %2C = , ... Did you tried already to
make itself encode that? Like
znClient
         addPath: '/v1/instruments';
         queryAt: 'fields' putAll: 'displayName,instrument,pip';
         get ;
         contents)
 
I suspect it is using encoding internally, that is why % is also
encoded if you try to put it.
 
I hope that works

Not silly and no need to suspect, but absolutely correct !
 
Sven

My apologies for not having full disclosure.
 
Pharo 4, new image, freshly installed Zinc stable version.
Xubuntu 15.04
 
 
 
That is what I thought would happen and what I tried first. But it is not being 
encoded from what I can find.
 
Inspect this in a workspace/playground.
 
ZnClient new
       https;
       host: ' <http://google.com/> google.com';
       addPath: '/commaTest';
       queryAt: 'fields' put: 'displayName,instrument,pip';
       yourself
 
View the  request / requestLine / uri.  The commas are still present in the URI.
So I tried encoding myself and get the other error.
 
Of course Google won't understand this and in this snippet won't receive it.
 
And please let me know if I am doing something wrong.
 
Any help greatly appreciated.
 
Jimmie

 

Reply via email to