Huh?

I don’t see how it’s possible to avoid Object completely. Even using VOs 
require constructing them from Objects when coming from outside sources.

Again: I’m not arguing against using VOs when possible/practical. I’m just 
arguing that use of dot notation on Objects shouldn’t blow up your app.

Right now, I’m creating VOs for the ASDoc app. It’s kind of tedious work…

Harbs

> On Feb 6, 2018, at 6:40 PM, Alex Harui <[email protected]> wrote:
> 
> Good catch. I fixed that.
> 
> Actually, you are arguing in favor of ValueObjects.  The error was there
> because commitObj was a plain Object so the compiler couldn't understand
> more about it.  We want to not have any plain objects in a Royale app.
> They only create potential problems.  In fact, maybe it is time for me to
> figure out how to generate warnings on every use of plain Object.
> Eventually we will have typedefs for the GitHub value objects and then
> there wouldn't be an issue like this.
> 
> Thanks for proving my point.
> 
> -Alex
> 
> On 2/6/18, 2:59 AM, "Gabe Harbs" <[email protected]> wrote:
> 
>> To illustrate that the VO solution is also error prone, I’m pretty sure
>> that this page has a mistake:
>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapacheroya
>> leci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2FlastSu
>> ccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication-tut
>> orial%2Fvalue-objects.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49b
>> b443ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C6365351
>> 16172815360&sdata=e9FoFwJfNJfjmFlWF4%2FRIwCNU4R5mhEEQ9GYz70W3Ls%3D&reserve
>> d=0 
>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapacheroy
>> aleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2FlastS
>> uccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication-tu
>> torial%2Fvalue-objects.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49
>> bb443ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C636535
>> 116172825365&sdata=3m3kTW910JYWV8MaM4%2F%2B3v82l5EvxIqgRjqAtIC7N%2BU%3D&re
>> served=0>
>> 
>> Unless I’m missing something, the following line can be renamed:
>>           data.message = commitObj.message;
>> 
>> I think it should have been:
>>           data.message = commitObj[“message”];
>> 
>> Harbs
>> 
>>> On Feb 6, 2018, at 12:48 PM, Gabe Harbs <[email protected]> wrote:
>>> 
>>> Related:
>>> 
>>> On this page: 
>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapacheroy
>>> aleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2Flast
>>> SuccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication-
>>> tutorial%2Fdata.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49bb443d
>>> dbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C63653511617
>>> 2825365&sdata=IgeSJZENyrUXHWMMzG7U5ZIBYdBe5so%2BeO81N%2B1u%2B%2Fc%3D&rese
>>> rved=0 
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapachero
>>> yaleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2Flas
>>> tSuccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication
>>> -tutorial%2Fdata.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49bb443
>>> ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C6365351161
>>> 72825365&sdata=IgeSJZENyrUXHWMMzG7U5ZIBYdBe5so%2BeO81N%2B1u%2B%2Fc%3D&res
>>> erved=0>
>>> 
>>> Shouldn’t the following code have trouble with minification?
>>> 
>>> {
>>>  repos = configurator.json.repos;
>>>  projectName = configurator.json.projectName;
>>> }
>>> 
>>> What’s preventing json.repos and json.projectName from being renamed?
>>> 
>>>> On Feb 5, 2018, at 11:34 PM, Alex Harui <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>> Maybe I'm missing something.  I don't think Royale has any extra
>>>> problems
>>>> with JSON objects than other JS Frameworks have.  If you want to
>>>> minify,
>>>> you have to use brackets and strings.  If you don't want to minify,
>>>> then
>>>> you don't need to worry about that.  Am I wrong about that?
>>>> 
>>>> 
>>>> JSON has something like a "reviver".  Has anyone played with that to
>>>> see
>>>> if it can be used to convert straight to VO's?
>>>> 
>>>> Thanks,
>>>> -Alex 
>>>> 
>>>> On 2/5/18, 1:08 PM, "Gabe Harbs" <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>>> An additional point:
>>>>> 
>>>>> How do you propose handling json that’s multiple levels deep? Walk the
>>>>> json and construct VOs on each level? That seems to me just as bad as
>>>>> the
>>>>> problem. Imagine you just want foo.baz.thingy.uid? You’d need to
>>>>> create a
>>>>> VO of foo, baz and thingy or be forced to use
>>>>> foo[“baz”][“thingy”][“uid”]. Of course the average user is not going
>>>>> to
>>>>> remember to do that until their release build doesn’t work…
>>>>> 
>>>>> Creating VOs means you can’t simply use JSON.parse(). You’d need your
>>>>> own
>>>>> parser for each type of json you’re consuming. OK. Maybe not full
>>>>> parsing, but the constructors for these VOs will get pretty messy —
>>>>> especially if the structure is a bit fluid.
>>>>> 
>>>>> Harbs
>>>>> 
>>>>> 
>>>>>> On Feb 5, 2018, at 10:36 PM, Gabe Harbs <[email protected]
>>>>>> <mailto:[email protected]>> wrote:
>>>>>> 
>>>>>> In theory, everything you say is true. It might even be good
>>>>>> practice.
>>>>>> 
>>>>>> I’m telling you that this was a pain point when migrating my app.
>>>>>> Simply declaring types as VOs didn't solve the problem for me. The
>>>>>> way
>>>>>> I’ve found that’s needed to solve the problem was passing the object
>>>>>> literal into a VO constructor and declaring the variables using
>>>>>> bracketed access. I was likely going about it wrong, but it was
>>>>>> easier
>>>>>> to just go with the bracketed literals.
>>>>>> 
>>>>>> Again: Suggesting using VOs (if we can figure out easy instructions
>>>>>> to
>>>>>> do so) is probably a good idea and better recommended practice, but
>>>>>> people live on the edge using other JS frameworks, and I’d rather not
>>>>>> make it harder than it needs to be if they do want to use untyped
>>>>>> object
>>>>>> literals.
>>>>>> 
>>>>>> Harbs
>>>>>> 
>>>>>>> On Feb 5, 2018, at 8:01 PM, Alex Harui <[email protected]
>>>>>>> <mailto:[email protected]>>
>>>>>>> wrote:
>>>>>>> 
>>>>>>> It was great to skip type-checking in Flash at times, but the
>>>>>>> runtime
>>>>>>> was
>>>>>>> also strongly typed.  Also, JS was not a practical language for
>>>>>>> Flash.
>>>>>>> It
>>>>>>> is more risky to do skip type-checking in Royale for JS.  These new
>>>>>>> cars
>>>>>>> with lane warnings are a rough analogy.  They only let you be less
>>>>>>> attentive on nice new painted highways.  Flash's runtime wouldn't
>>>>>>> let
>>>>>>> you
>>>>>>> make type mismatches so it effectively had lane lines.  JS is a road
>>>>>>> without lane lines.  A ValueObject keeps your eyes on the road.  An
>>>>>>> ounce
>>>>>>> of prevention is better than a pound of cure.
>>>>>>> 
>>>>>>> IMO, you might be better off writing a bead that you can pass a JSON
>>>>>>> object and it will generate the AS class for you to copy from the
>>>>>>> clipboard and paste into a file.  Then you could guess at the types.
>>>>>>> That
>>>>>>> wouldn't require compiler changes and would encourage early
>>>>>>> prevention.
>>>>>>> 
>>>>>>> Just an idea,
>>>>>>> -Alex
>>>>>>> 
>>>>>>> On 2/5/18, 9:39 AM, "Gabe Harbs" <[email protected]
>>>>>>> <mailto:[email protected]>> wrote:
>>>>>>> 
>>>>>>>> Yeah. That’s what you’ve argued in the past, and in a pure world
>>>>>>>> you’d be
>>>>>>>> right.
>>>>>>>> 
>>>>>>>> However, I’d prefer the option to be practical when dealing with
>>>>>>>> more
>>>>>>>> data types. Being forced to fiddle with properly typed objects
>>>>>>>> *always*
>>>>>>>> is too confining IMO. What I personally ended up doing when dealing
>>>>>>>> with
>>>>>>>> APIs and the like was the make sure to quote everything in my app
>>>>>>>> rather
>>>>>>>> than declare VOs even though finding all the instances were a pain.
>>>>>>>> 
>>>>>>>> I think it’s pretty common for folks to use untyped objects
>>>>>>>> *especially*
>>>>>>>> when dealing with APIs in classic Flex apps. It seem overly
>>>>>>>> draconian
>>>>>>>> to
>>>>>>>> make that a requirement for Royale.
>>>>>>>> 
>>>>>>>> Part of the attraction of ActionScript has been that it’s
>>>>>>>> *optionally*
>>>>>>>> typed. Minification in JS makes the optional typing pretty weak.
>>>>>>>> 
>>>>>>>>> If you don't care about SWF support, you can quickly make
>>>>>>>>> ValueObjects
>>>>>>>>> just for the compiler.
>>>>>>>> 
>>>>>>>> Quickly? I’m not sure how.
>>>>>>>> 
>>>>>>>> My $0.02.
>>>>>>>> Harbs
>>>>>>>> 
>>>>>>>>> On Feb 5, 2018, at 7:28 PM, Alex Harui <[email protected]
>>>>>>>>> <mailto:[email protected]>>
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> IMO, your proposal sort of defeats the purpose of ActionScript and
>>>>>>>>> Royale,
>>>>>>>>> which is to provide a type system at compile time.  Not only
>>>>>>>>> should
>>>>>>>>> you
>>>>>>>>> want to address your JSON fields, but you should want to have them
>>>>>>>>> type-checked, and that you spelled the field name correctly.
>>>>>>>>> Otherwise,
>>>>>>>>> the compiler is going to also allow you to mistype:
>>>>>>>>> 
>>>>>>>>> var name = myProps["nme"];
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> And there will be no errors.  And similarly:
>>>>>>>>> 
>>>>>>>>> var myObj:Object = {
>>>>>>>>> nme: "foo",
>>>>>>>>> age : 30.1415
>>>>>>>>> }
>>>>>>>>> 
>>>>>>>>> Will be allowed when it probably shouldn't.  And also, you could
>>>>>>>>> then
>>>>>>>>> use
>>>>>>>>> myObj when you intended to use myOtherObj and nobody will know
>>>>>>>>> until
>>>>>>>>> you
>>>>>>>>> try to debug in JS.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> If you don't care about SWF support, you can quickly make
>>>>>>>>> ValueObjects
>>>>>>>>> just for the compiler.  In ASDoc, the ValueObject is never
>>>>>>>>> instantiated.
>>>>>>>>> It is just like a typedef for the compiler.
>>>>>>>>> 
>>>>>>>>> HTH,
>>>>>>>>> -Alex
>>>>>>>>> 
>>>>>>>>> On 2/5/18, 8:43 AM, "Gabe Harbs" <[email protected]
>>>>>>>>> <mailto:[email protected]>> wrote:
>>>>>>>>> 
>>>>>>>>>>> JSON Objects are not destroyed.
>>>>>>>>>> 
>>>>>>>>>> Yeah. I know, but untyped js literals are pretty much useless in
>>>>>>>>>> minified
>>>>>>>>>> Royale apps.
>>>>>>>>>> 
>>>>>>>>>>> Propose a way to determine that a data structure
>>>>>>>>>>> is external and what the compiler should generate and implement
>>>>>>>>>>> it.
>>>>>>>>>>> IMO,
>>>>>>>>>>> the answer is to create ValueObjects.  That is essentially
>>>>>>>>>>> typedefs
>>>>>>>>>>> and
>>>>>>>>>>> AFAIK, there is no way to automate typedef generation.
>>>>>>>>>> 
>>>>>>>>>> I already made a suggestion once:
>>>>>>>>>> 
>>>>>>>>>> For untyped Objects, the compiler could convert dot notation to
>>>>>>>>>> bracket
>>>>>>>>>> notation.
>>>>>>>>>> 
>>>>>>>>>> The other half of that would be to convert all object literals to
>>>>>>>>>> “quoted” literals automatically.
>>>>>>>>>> 
>>>>>>>>>> So if I have a function:
>>>>>>>>>> 
>>>>>>>>>> function parseMyJson(json:String):Object{
>>>>>>>>>>      return JSON.parse(json);
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> var myProps:Object = parseMyJson(json);
>>>>>>>>>> 
>>>>>>>>>> var name:string = myProps.name;
>>>>>>>>>> 
>>>>>>>>>> Would become:
>>>>>>>>>> 
>>>>>>>>>> function parseMyJson(json){
>>>>>>>>>>      return JSON.parse(json);
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> var myProps = parseMyJson(json);
>>>>>>>>>> 
>>>>>>>>>> var name = myProps["name"];
>>>>>>>>>> 
>>>>>>>>>> And this:
>>>>>>>>>> var myObj:Object = {
>>>>>>>>>>      name: "foo",
>>>>>>>>>>      age : 30
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> Would become:
>>>>>>>>>> var myObj = {
>>>>>>>>>>      "name": "foo",
>>>>>>>>>>      "age" : 30
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> These two features would have solved almost all minification
>>>>>>>>>> issues
>>>>>>>>>> I’ve
>>>>>>>>>> run into.
>>>>>>>>>> 
>>>>>>>>>> I’d love to work on this myself, but I’m still not up to making
>>>>>>>>>> any
>>>>>>>>>> major
>>>>>>>>>> changes to the compiler… :-(
>>>>>>>>>> 
>>>>>>>>>>> On Feb 5, 2018, at 6:13 PM, Alex Harui
>>>>>>>>>>> <[email protected] <mailto:[email protected]>>
>>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> On 2/5/18, 2:01 AM, "Gabe Harbs" <[email protected]
>>>>>>>>>>> <mailto:[email protected]>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> I’ll try to work on this. It’s pretty slow loading the debug
>>>>>>>>>>>> build.
>>>>>>>>>>>> 
>>>>>>>>>>>> I still maintain there should be a compiler setting or language
>>>>>>>>>>>> feature
>>>>>>>>>>>> to prevent objects produced from JSON being destroyed on
>>>>>>>>>>>> minification.
>>>>>>>>>>> 
>>>>>>>>>>> JSON Objects are not destroyed.  The code referencing their
>>>>>>>>>>> fields
>>>>>>>>>>> by
>>>>>>>>>>> name
>>>>>>>>>>> has those names changed.  Propose a way to determine that a data
>>>>>>>>>>> structure
>>>>>>>>>>> is external and what the compiler should generate and implement
>>>>>>>>>>> it.
>>>>>>>>>>> IMO,
>>>>>>>>>>> the answer is to create ValueObjects.  That is essentially
>>>>>>>>>>> typedefs
>>>>>>>>>>> and
>>>>>>>>>>> AFAIK, there is no way to automate typedef generation.
>>>>>>>>>>> 
>>>>>>>>>>> Also, you can turn off minification for the app as a whole.
>>>>>>>>>>> 
>>>>>>>>>>> Other ideas welcome,
>>>>>>>>>>> -Alex
>>>>>>>>>>> 
>>>>>>>>>>>> This remains a pain point for developing apps and having to
>>>>>>>>>>>> create
>>>>>>>>>>>> VOs
>>>>>>>>>>>> for every API is a drag.
>>>>>>>>>>>> 
>>>>>>>>>>>>> On Feb 5, 2018, at 10:21 AM, Alex Harui
>>>>>>>>>>>>> <[email protected] <mailto:[email protected]>>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On 2/4/18, 1:10 AM, "Gabe Harbs" <[email protected]
>>>>>>>>>>>>> <mailto:[email protected]>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Typo. I meant js-reease.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Yeah, at some later point in time someone should build Value
>>>>>>>>>>>>> Objects
>>>>>>>>>>>>> for
>>>>>>>>>>>>> the JSON and get js-release working.  Maybe after this
>>>>>>>>>>>>> release.
>>>>>>>>>>>>> I'm
>>>>>>>>>>>>> just
>>>>>>>>>>>>> trying to make the ASDoc useful.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I'm going to add Events to the class detail page and anchor
>>>>>>>>>>>>> links
>>>>>>>>>>>>> from
>>>>>>>>>>>>> the
>>>>>>>>>>>>> lists to the details and maybe a simple search-for-class
>>>>>>>>>>>>> feature,
>>>>>>>>>>>>> then I
>>>>>>>>>>>>> think it will be time for a release.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> -Alex
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Feb 4, 2018, at 8:08 AM, Alex Harui
>>>>>>>>>>>>>>> <[email protected] <mailto:[email protected]>>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 1. Why is bin-release not working?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Do you mean SWF support?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to