These are chat archives for canjs/canjs

12th
Aug 2016
Andrei Balmus
@abalmush
Aug 12 2016 07:45
Interesting bug with arrow function :)
this-bug.gif
Julian
@pYr0x
Aug 12 2016 08:30
:D
Christopher Oliphant
@RALifeCoach
Aug 12 2016 11:54
@pYr0x I appreciate all the work you have put into this. Here is my dilemma. The code I am creating will be used as components for an existing CMS. While 100K isn’t that big, if I have 10 of these components on the page, I now have 1MB of JS. I now have the complete can library on my page 10 times. The CMS also merges the JS code into a single file and minimizes. That is going to mean duplicate defininitions and potential conflicts. Even without combining the JS into a single file, there is a likelihood of duplicate code and conflicts.
Julian
@pYr0x
Aug 12 2016 12:36
nonono
why do you have 10 components, 10 times built?
Christopher Oliphant
@RALifeCoach
Aug 12 2016 12:37
Because these are components. They can be selected, deselected, rearranged by the author in the CMS
Julian
@pYr0x
Aug 12 2016 12:37
1 html, 1 main.js that includes all the components used on this site
then use bundle
Christopher Oliphant
@RALifeCoach
Aug 12 2016 12:37
On one page the author may choose components A, B, D
On another page, B, C and F
pls read the docs
i posted these links yesterday too
Christopher Oliphant
@RALifeCoach
Aug 12 2016 12:40
But we can’t use CanJS to build a page - the page comes from the CMS
Julian
@pYr0x
Aug 12 2016 12:40
?
can you provide a simple app
or show us the app
Christopher Oliphant
@RALifeCoach
Aug 12 2016 12:41
We use a tool from Adobe called AEM or CQ as our CMS.
Julian
@pYr0x
Aug 12 2016 12:41
u have to bundle the components and it shares canjs
Christopher Oliphant
@RALifeCoach
Aug 12 2016 12:41
In the tool the user selects components and adds them to the page.
Julian
@pYr0x
Aug 12 2016 12:41
so you dont have 10 times canjs included
Mohamed Cherif Bouchelaghem
@cherifGsoul
Aug 12 2016 12:41
@RALifeCoach do your components work on the backend part of the cms or frontend part of the cms?
where do you need them?
Christopher Oliphant
@RALifeCoach
Aug 12 2016 12:42
The components are used on the front end, although the CMS editor also renders them if it can.
Julian
@pYr0x
Aug 12 2016 12:43
so require the component if it is needed
you can do that by steal
and for the build use bundle
what you want is Progressive Loading
System.import("site/login").then(function(){
        $("#main").login();
      });
Christopher Oliphant
@RALifeCoach
Aug 12 2016 12:46
@pYr0x let me try that with your builtit app and see how it would work in our CMS
thats a progressive loaded app
Christopher Oliphant
@RALifeCoach
Aug 12 2016 12:50
Okay - A whole aspect of CanJs to learn. This product becomes more and more impressive as I continue to work with it.
Julian
@pYr0x
Aug 12 2016 12:56
;)
Christopher Oliphant
@RALifeCoach
Aug 12 2016 13:01
@pYr0x In the CMS I want to be able to say, “Give me component A”, “Now give me Component B”. But there is only one app. It would need to know about all components. Then when I ask for Component A, I would select the app and tell it to show Component A. When I want Component B, I would again ask for the app and tell it to show Component B. Am I understanding this correctly?
Christopher Oliphant
@RALifeCoach
Aug 12 2016 13:08
BTW, we may end up with hundreds of components.
Julian
@pYr0x
Aug 12 2016 13:17
thats one way
you can also get an json object from the server with the available components and load them dynamicly
you maybe dont have to write them all hardcoded into your app
Christopher Oliphant
@RALifeCoach
Aug 12 2016 13:19
By using System.import(‘component’)…?
Julian
@pYr0x
Aug 12 2016 13:19
yep
you can use wildcards in build
stealjs/steal-tools#507
but we have an issue with that
Christopher Oliphant
@RALifeCoach
Aug 12 2016 13:22
Do I run steal-tools to build the bundle? (I am curious how that would appear in the dist folder.) How do I specify side bundle versus bundle?
Julian
@pYr0x
Aug 12 2016 13:36
yes you always have to run steal-tools
you can specify all in your package.json
or in the build config
as you wish
Christopher Oliphant
@RALifeCoach
Aug 12 2016 13:50
I first created app.js with nothing in it. I specified my component in the meta as you indicated in one of the links you sent me. That created a tiny app.js file and nothing else.
So then I added an import for the component. But that only created a single file. Here are the pertenent sections from my package.son.
  "main": "app",
  "scripts": {
    "build": "steal-tools",
    "start": "http-server -p 8091"
  },
  "system": {
    "main": "",
    "directories": {
      "lib": "src"
    },
    "npmIgnore": [
      "devDependencies"
    ],
    "system": {
      "bundle": [
        "player-bio/components/player-bio"
      ],
      "meta": {
        "player-bio/components/player-bio": {
          "sideBundle" : true
        }
      }
    },
    "envs": {
      "build-development": {},
      "window-development": {},
      "window-production": {}
    }
  },
Julian
@pYr0x
Aug 12 2016 13:53
why do you add sidebundle and bundle at the same time?
Christopher Oliphant
@RALifeCoach
Aug 12 2016 13:54
Desperation?
I tried with just meta and that didn’t work. Let me try again.
Julian
@pYr0x
Aug 12 2016 13:54
either ... or
where are your dependencies?
they are missing
Christopher Oliphant
@RALifeCoach
Aug 12 2016 13:56
I just didn’t include them. Here they are
  "dependencies": {
    "jquery": "^2.2.4",
    "jspath": "^0.3.3",
    "can-component": "^3.0.0-pre.14",
    "can-connect": "^0.5.5",
    "can-define": "^0.7.15",
    "can-list": "^3.0.0-pre.6",
    "can-map": "^3.0.0-pre.8",
    "can-route": "^3.0.0-pre.13",
    "can-set": "^0.5.6",
    "can-stache": "^3.0.0-pre.13",
    "can-view-model": "^3.0.0-pre.4",
    "steal": "^0.16.33",
    "steal-stache": "^3.0.0-pre.3"
  },
  "devDependencies": {
    "can-fixture": "^0.4.0-pre.9",
    "jasmine-core": "^2.3.4",
    "jasmine-expect": "^1.22.3",
    "jasmine-jquery": "^2.1.1",
    "karma": "^0.13.11",
    "karma-chrome-launcher": "^0.2.0",
    "karma-coverage": "^0.5.2",
    "karma-jasmine": "^0.3.6",
    "karma-jasmine-matchers": "^0.1.3",
    "karma-junit-reporter": "^0.3.7",
    "karma-junit-sonarqube-reporter": "0.0.1",
    "karma-phantomjs-launcher": "^0.2.1",
    "phantomjs": "^1.9.18",
    "steal-tools": "^0.16.6"
  }
Julian
@pYr0x
Aug 12 2016 13:56
and you do your build look like?
Christopher Oliphant
@RALifeCoach
Aug 12 2016 13:57
Do I need a build.js when building from npm?
Julian
@pYr0x
Aug 12 2016 13:57
???
Christopher Oliphant
@RALifeCoach
Aug 12 2016 13:58
npm run build
which runs steal-tools
But here is my build.js file
var stealTools = require('steal-tools');

// prod 1
stealTools.build({
    main: 'src/app',
    config: __dirname + '/package.json!npm',
    jsonOptions: {
        transform: function (load, data) {
            if (data.system) {
                if (data.system.npmIgnore) {
                    delete data.system.npmIgnore;
                }
                if (data.system.npmAlgorithm) {
                    delete data.system.npmAlgorithm;
                }
                if (data.system.configDependencies && data.system.configDependencies.indexOf('live-reload') > -1) {
                    data.system.configDependencies.splice(data.system.configDependencies.indexOf('live-reload'), 1);
                }
            }

            return data;
        }
    }
}, {
    bundleSteal: false,
    minify: true
});
pretty much the file you used in buildit
Julian
@pYr0x
Aug 12 2016 13:59
pls use steal 1.0 beta
not 0.16
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:00
right - sorry - I missed that
Julian
@pYr0x
Aug 12 2016 14:00
npm run build runs the build.js!
no it doesnt
you package.json is wrong
"build": "node build",
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:02
I’ll make that change
steal-tools 1.0 takes a while to install...
Julian
@pYr0x
Aug 12 2016 14:03
pls make sure it is steal-tools beta
on my pc yesterday it will install the pre version
look into the node_modules folder and search for steal and steal-tools and look into the package.json if the version is right
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:03
Here is the entry in my package.son "steal-tools": "1.0.0-beta.3”
It’s still installing
Julian
@pYr0x
Aug 12 2016 14:04
it should but please confirm that it is the right version
also install steal 1.0 beta
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:04
{
  "name": "steal-tools",
  "description": "Futuristic build tools for ES6 Module applications.",
  "version": "1.0.0-beta.3",
  "author": {
    "name": "Bitovi",
    "email": "contact@bitovi.com",
    "url": "http://bitovi.com/"
  },
Julian
@pYr0x
Aug 12 2016 14:05
k
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:06
and updated steal
{
  "name": "steal",
  "description": "Gets JavaScript.",
  "version": "1.0.0-beta.3",
  "author": {
    "name": "Bitovi",
    "email": "contact@bitovi.com",
    "url": "http://bitovi.com/"
  },
I ran the build. There is still only one file. Which is quite small.
it didn’t build the component, just the main app
should I add the meta to the build.js file?
Julian
@pYr0x
Aug 12 2016 14:10
you can try
how is the path to the component, pls post the whole path
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:12
Yeah!!!
Now to get it to run...
Julian
@pYr0x
Aug 12 2016 14:13
ok
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:14
@pYr0x You are amazing. I wouldn’t be anywhere close to this far along without you. I really want to thank-you for taking so much of your time to help me along.
Julian
@pYr0x
Aug 12 2016 14:20
you are welcome
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:29
I have the app.js correct and it executes System.import and imports the component. It then adds the component to the page
    $('#main').append(stache('<pgat-player-bio></pgat-player-bio>'));
But the component doesn’t run.
I see the component in the browser but nothing within the component
Julian
@pYr0x
Aug 12 2016 14:44
you append incorrectly
stache return a renderer function
you have to call it with an object
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:47
rebuilding…
that also did not work
import stache from 'can-stache';

System.import('dist/bundles/src/player-bio/components/player-bio').then(function (){
    let template = stache('<pgat-player-bio></pgat-player-bio>');

    $('#main').append(template({}));
});
Julian
@pYr0x
Aug 12 2016 14:49
why dist/bundles/src/player-bio/components/player-bio
?
System.import('APPNAME/player-bio/components/player-bio')
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:49
That's the file the build created
Julian
@pYr0x
Aug 12 2016 14:50
in dev mode it works?
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:50
It was working a few days ago - and I haven’t touched the code since then
Julian
@pYr0x
Aug 12 2016 14:51
any error in console?
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:51
at a minimum I should see the stache template in some form
Julian
@pYr0x
Aug 12 2016 14:51
did the callback run ? make a console.log
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:52
I beleive it to have run - the stache has been added to #main
Julian
@pYr0x
Aug 12 2016 14:53
hm
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:53
the console.log confirmed it
Julian
@pYr0x
Aug 12 2016 14:53
how look the component in dist/bundels/....
pls paste the code
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:54
import Component from 'can-component';
import DefineMap from 'can-define/map/map';
import $ from 'jquery';
import template from './player-bio.stache!';
import PlayerList from '../models/players-model';
import PlayerBio from '../models/player-bio-model';
import PlayerResults from '../models/player-results-model';
import PlayerStats from '../models/player-stats-model';
import PlayerStat186 from '../models/player-stat186-model';
require('./player-bio.less');
require('./player-bio-ad');
require('can-view-model');

var PlayerViewModel = DefineMap.extend({
    name: {
        type: 'string',
        value: 'Select Player'
    },
    personalInfo: {
        value: Object,
        Type: PlayerBio
    },
    personalResults: {
        value: Object,
        Type: PlayerResults
    },
    personalStats: {
        value: Object,
        Type: PlayerStats
    },
    personalStat186: {
        value: Object,
        Type: PlayerStat186
    },
    playerList: {
        value: Array,
        Type: PlayerList
    },
    showMetric: {
        type: 'boolean',
        value: false
    }
});

Component.extend({
    tag: 'pgat-player-bio',
    template,
    ViewModel: PlayerViewModel,
    events: {
        inserted: function () {
            PlayerList.get({ id: 'id' }).then($.proxy((data)=>{
                this.onPlayersData(data);
            }, this));
        },
        '.switcher click': function () {
            this.viewModel.showMetric = !this.viewModel.showMetric;
        },
        '.dropdown-icon click': function () {
            $('.dropdown').removeClass('hidden');
            $('.dropdown-content').removeClass('hidden');
        },
        '.player-select click': function (element) {
            $('.dropdown').addClass('hidden');
            $('.dropdown-content').addClass('hidden');
            var playerId = $(element).attr('data-id');
            PlayerBio.get({ id: playerId }).then($.proxy((data)=>{
                this.onPlayerBioData(data);
            }, this));
            PlayerResults.get({
                id: playerId,
                year: '2016'
            }).then($.proxy((data)=>{
                this.onPlayerResultsData(data);
            }, this));
            PlayerStats.get({
                id: playerId,
                year: '2016'
            }).then($.proxy((data)=>{
                this.onPlayerStatsData(data);
            }, this));
            PlayerStat186.get({
                id: playerId
            }).then($.proxy((data)=>{
                this.onPlayerStat186Data(data);
            }, this));
        },

        onPlayerBioData: function (playerBio) {
            playerBio.countryCode = this.players[playerBio.playerId].countryCode;
            this.viewModel.name = playerBio.name;
            this.viewModel.personalInfo = playerBio;
        },

        onPlayerResultsData: function (playerResults) {
            this.viewModel.personalResults = playerResults;
        },

        onPlayersData: function (playerList) {
            this.players = {};
            playerList.forEach((player)=>{
                this.players[player.playerId] = player;
            });
            this.viewModel.playerList = playerList;
        },

        onPlayerStat186Data: function (playerStat186) {
            this.viewModel.personalStat186 = playerStat186;
        },

        onPlayerStatsData: function (playerStats) {
            this.viewModel.personalStats = playerStats;
        }
    }
});

the template is:
```

<div class="player-bio">
<div class="player-image">
{{#personalInfo.playerId}}
<img src="http://i.pgatour.com/image/upload/t_headshot_244x324/headshots_{{personalInfo.playerId}}.png" />
{{/personalInfo.playerId}}
</div>
<div class="box-central">
<div class="box-top">
<span class="player-name">{{name}}</span>
<span class="dropdown-icon glyphicon glyphicon-menu-down"></span>
<div class="dropdown hidden">
<div class="dropdown-content hidden">
<ul>
{{#playerList}}
<li>
<div class="player-select" data-id="{{playerId}}">{{playerName}}</div>
</li>
{{/playerList}}
</ul>
</div>
</div>
<div>
{{#personalInfo.countryCode}}
<span class="flag flag-24x24 {{personalInfo.countryCode}}"></span>
{{else}}
<span class="flag flag-24x24 UNKNOWN"></span>
{{/personalInfo.countryCode}}
</div>
<span class="social-icon glyphicon glyphicon-new-window"></span>
</div>
<div class="box-left">
<div class="box-left-upper">
<div class="sponsor">
sponsor
</div>
<span class="metric-toggle">
{{#showMetric}}
<span class="on">
METRIC ON
<b class="switcher"></b>
</span>
{{else}}
<span class="off">
METRIC OFF
<b class="switcher"></b>
</span>
{{/showMetric}}
</span>
</div>
<div class="box-left-lower">
<div class="row-1">
{{#personalInfo.height}}
<div class="height">
{{#showMetric}}
<div class="height-data">{{personalInfo.heightMetric}}</div>
{{else}}
<div class="height-data">{{personalInfo.height}}</div>
{{/showMetric}}
<div class="height-title">height</div>
</div>
{{/personalInfo.height}}
{{#personalInfo.age}}
<div class="age">
<div class="age-data">{{personalInfo.age}}</div>
<div class="age-title">age</div>
</div>
{{/personalInfo.age}}
{{#personalInfo.school}}
<div class="school">
<div class="school-data">{{personalInfo.school}}</div>
<div class="school-title">college</div>
</div>
{{/personalInfo.school}}
{{#personalInfo.weight}}
<div class="weight">
{{#showMetric}}
<div class="weight-data">{{personalInfo.weightMetric}}</div>
{{else}}
<div class="weight-data">{{personalInfo.weight}}</div>
{{/showMetric}}
<div class="weight-title">weight</div>
</div>
{{/personalInfo.weight}}
{{#personalInfo.turnedPro}}
<div class="turned-pro">
<div class="turned-pro-data">{{personalInfo.turnedPro}}</div>
<div class="turned-pro-title">turned pro</div>
</div>
{{/personalInfo.turnedPro}}

Julian
@pYr0x
Aug 12 2016 14:55
but thats not the builted file?
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:55
etc...
no - that’s the source
Julian
@pYr0x
Aug 12 2016 14:55
i want the build component file
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:56
how do I send a file using bitter?
so 1. i would check if in DEV mode i works..
without building with steal
  1. i would ckeck if the insertevent is called on the component
  1. check any errors in console.log
Christopher Oliphant
@RALifeCoach
Aug 12 2016 14:57
I have pasted the file to that link
I will check the inserted
I doubt it has run - again - no errors in console log
Julian
@pYr0x
Aug 12 2016 14:59
where is the link?
Christopher Oliphant
@RALifeCoach
Aug 12 2016 15:00
No - inserted was not called
Julian
@pYr0x
Aug 12 2016 15:02
can you make a console.log before var PlayerViewModel = DefineMap.extend({
in your component
to see if the module is running
Christopher Oliphant
@RALifeCoach
Aug 12 2016 15:03
no it is not running
Julian
@pYr0x
Aug 12 2016 15:05
so the module is not running
Christopher Oliphant
@RALifeCoach
Aug 12 2016 15:05
that is correct
Julian
@pYr0x
Aug 12 2016 15:06
maybe you need a return value in the module
Christopher Oliphant
@RALifeCoach
Aug 12 2016 15:07
yes, that’s what I am considering as well
I figured the export default would have done it, but no luck
and no console errors
Julian
@pYr0x
Aug 12 2016 15:23
hm
Christopher Oliphant
@RALifeCoach
Aug 12 2016 15:23
agreed
Julian
@pYr0x
Aug 12 2016 15:23
i think you have to make a sample app that i can clone
Christopher Oliphant
@RALifeCoach
Aug 12 2016 15:24
okay - I will do that
Christopher Oliphant
@RALifeCoach
Aug 12 2016 17:48
@pYr0x any progress?
Julian
@pYr0x
Aug 12 2016 18:00
.i am now ar home
At
Christopher Oliphant
@RALifeCoach
Aug 12 2016 18:00
Okay
Julian
@pYr0x
Aug 12 2016 18:00
i will have a look
Christopher Oliphant
@RALifeCoach
Aug 12 2016 18:01
Great. I stripped down the code I was testing. It’s getting a strange error during build - missing when/es6-shim/Promise.
Julian
@pYr0x
Aug 12 2016 18:02
Ok
lets see
Matthew Phillips
@matthewp
Aug 12 2016 18:29
@RALifeCoach in generally I would, in the future, not wait until you've created a full app to think about production builds
Usually you run into errors when you have a huge amount of code that's never been built/run in prod, and it's hard to debug when something not working
Use continuous deployments if possible, start building and testing prod early in the process
Christopher Oliphant
@RALifeCoach
Aug 12 2016 18:32
@matthewp Your point is valid and I should have started thinking about building sooner. But I am far from having a full app. This is one tiny component out of an initial 20 components we are looking at.
Christopher Oliphant
@RALifeCoach
Aug 12 2016 18:44
And I still have unit testing to figure out - we use karma and jasmine
Christopher Oliphant
@RALifeCoach
Aug 12 2016 18:54
@pYr0x Are you making any headway?
Julian
@pYr0x
Aug 12 2016 19:58
i am still on working get the app working
Julian
@pYr0x
Aug 12 2016 20:21
RALifeCoach/for-justin#1
made a PR
i updated can-connect. the build is not working with the can-connect stuff
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:22
Nice find.
Julian
@pYr0x
Aug 12 2016 20:22
i comment it out. if you comment it in, you will get an error on dev.html
but i dont know your can-connect stuff
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:23
Have you created an issue regarding can-connect?
Julian
@pYr0x
Aug 12 2016 20:23
steal.js:140 Potentially unhandled rejection [1] TypeError: connection.addInstanceReference is not a function
i dont know if the error is your fault, by handling can-connect wrong
and you can't mix es6 with commonjs imports
in steal
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:28
When did I mix es6 and commonJS?
Julian
@pYr0x
Aug 12 2016 20:28
see the PR
in the model
and player-bio.js
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:29
import & require?
Julian
@pYr0x
Aug 12 2016 20:29
zes
yes
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:29
okay - thanks
Who should I ask about can-connect?
Julian
@pYr0x
Aug 12 2016 20:30
read the docs
the new docs
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:31
I did read those docs and did have the connect working
Julian
@pYr0x
Aug 12 2016 20:31
nope
it is broken with the new can-connect
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:32
The connect was working outside of the build process
Julian
@pYr0x
Aug 12 2016 20:32
no
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:32
Oh - the new can-connect
Julian
@pYr0x
Aug 12 2016 20:32
on the dev.html it is not woking too
merge my PR and test
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:33
okay - it was working in the prior version, I’ll see what I can do to get it working again
I have merged. I’ll run the test
Julian
@pYr0x
Aug 12 2016 20:33
maybe add the /store behaviour
but really i am not familiar with can-connect
so i cant help you with that
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:34
Who is?
Julian
@pYr0x
Aug 12 2016 20:34
justin
but before asking, pls read the docs
it is never too late to read the docs
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:34
Thanks, I’ll do my best before reaching out to him
I have read and re-read those docs
Julian
@pYr0x
Aug 12 2016 20:35
me too..
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:35
I find them very difficult to convert the words I read into the ideas I am trying to create
Was the build working for you?
Julian
@pYr0x
Aug 12 2016 20:36
i think you have to work with can-connect and then you understand
yep
build was woring without the can-connect stuff
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:36
I merged and pulled, ran npm install and npm run build
Julian
@pYr0x
Aug 12 2016 20:36
deleting node_modules and install again
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:36
okay
Julian
@pYr0x
Aug 12 2016 20:37
do you also made a git pull?
:)
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:38
yes I did a git pull
Julian
@pYr0x
Aug 12 2016 20:38
ok
Christopher Oliphant
@RALifeCoach
Aug 12 2016 20:38
but it was a fair question
Julian
@pYr0x
Aug 12 2016 20:38
:)