fluid-work IRC Logs-2012-08-14

[09:21:20 CDT(-0500)] <michelled> cindyli: when you are free, can we have a Floe planning meeting?

[09:22:53 CDT(-0500)] <michelled> alexn1: this is the wiki page I was referring to: http://wiki.fluidproject.org/display/fluid/Floe+Iteration+Plan

[09:23:41 CDT(-0500)] <alexn1> michelled: thanks for the link. (I found and was looking at page as well)

[09:30:53 CDT(-0500)] <cindyli> anytime, michelled

[09:31:54 CDT(-0500)] <michelled> now's good - anastasiac, alexn1 - good for you too?

[09:32:05 CDT(-0500)] <alexn1> michelled: yes !

[10:05:50 CDT(-0500)] <colinclark> kasper: http://issues.gpii.net/browse/GPII-29?focusedCommentId=10014#comment-10014

[10:20:57 CDT(-0500)] <thealphanerd> colinclark: you got a minute?

[10:21:02 CDT(-0500)] <colinclark> thealphanerd: yes

[10:21:10 CDT(-0500)] <thealphanerd> so I got basic aria working now

[10:21:22 CDT(-0500)] <colinclark> especially if you can point me to a TextMate 2 dark theme that doesn't totally suck

[10:21:32 CDT(-0500)] <thealphanerd> indeed I can

[10:21:51 CDT(-0500)] <thealphanerd> http://www.monokai.nl/blog/2006/07/15/textmate-color-theme/

[10:22:29 CDT(-0500)] <thealphanerd> keep in mind that you need to manually install the themes for textmate 2

[10:23:07 CDT(-0500)] <thealphanerd> ~/Library/Application Support/Avian/Pristine Copy/Themes

[10:25:15 CDT(-0500)] <thealphanerd> so is there an event for an aria button press/

[10:25:52 CDT(-0500)] <colinclark> thealphanerd: No. Why do you ask?

[10:25:57 CDT(-0500)] <colinclark> Remember, ARIA doesn't do anything

[10:26:01 CDT(-0500)] <colinclark> it just describes things

[10:26:11 CDT(-0500)] <thealphanerd> so you can move around the piano using aria now

[10:26:17 CDT(-0500)] <thealphanerd> and everything is labelled

[10:26:29 CDT(-0500)] <thealphanerd> BUT… there is no way to play the notes

[10:26:53 CDT(-0500)] <thealphanerd> you can "press" the button, but I have no idea how to make that do anything

[10:27:43 CDT(-0500)] <thealphanerd> the only solution I could think of would be to listen to keydown of space bar… and check what dom element is currently selected… but that seems hacky

[10:32:26 CDT(-0500)] <colinclark> I told you about that part

[10:32:43 CDT(-0500)] <colinclark> You need to use our jQuery keyboard accessibility plugin

[10:32:45 CDT(-0500)] <colinclark> remember?

[10:32:54 CDT(-0500)] <colinclark> fluid.activatable()?

[10:33:19 CDT(-0500)] <colinclark> then you just bind it up to whatever methods your click events are bound to

[10:33:51 CDT(-0500)] <thealphanerd> ahhhh

[10:33:55 CDT(-0500)] <thealphanerd> didn't remember (tongue)

[10:34:04 CDT(-0500)] <thealphanerd> ok so then that brinds me to the next question

[10:34:19 CDT(-0500)] <thealphanerd> I've got fluid.tabbable working

[10:34:39 CDT(-0500)] <thealphanerd> but I'm having no luck with fluid.selectable

[10:35:31 CDT(-0500)] <thealphanerd> I'm able to traverse the application with voiceover without it… but I couldn't get it to work last night.

[10:38:02 CDT(-0500)] <thealphanerd> I just pushed the latest changes to the aria branch

[10:40:24 CDT(-0500)] <colinclark> sorry, that sounded crankier than I had intended, thealphanerd (wink)

[10:40:29 CDT(-0500)] <colinclark> one of those days

[10:40:41 CDT(-0500)] <colinclark> So what's the problem with fluid.selectable()?

[10:45:04 CDT(-0500)] <colinclark> thealphanerd: This might be my favourite commit log yet: "silly me'"

[10:46:07 CDT(-0500)] <colinclark> thealphanerd: couple of comments

[10:46:09 CDT(-0500)] <colinclark> https://github.com/TheAlphaNerd/Piano/blob/aria/js/aria.js#L78

[10:46:29 CDT(-0500)] <colinclark> If you want to get an item from a jQuery, but continue to use it as a jQuery, you want the method .eq()

[10:46:41 CDT(-0500)] <colinclark> rather than unwrapping it and rewrapping it like you are doing here

[10:46:49 CDT(-0500)] <colinclark> So this line would read:

[10:47:01 CDT(-0500)] <colinclark> var instrumentType = that.container.children().eq(0);

[10:47:18 CDT(-0500)] <colinclark> So, what is this instrumentType variable, anyway?

[10:48:41 CDT(-0500)] <thealphanerd> colinclark: I purposely had it not being a jquery

[10:48:52 CDT(-0500)] <colinclark> but it is a jQuery

[10:48:55 CDT(-0500)] <thealphanerd> as I just want to grab the first div within

[10:49:01 CDT(-0500)] <colinclark> you unwrap it and then wrap it back up, all in one line

[10:49:24 CDT(-0500)] <thealphanerd> oh yeah...

[10:49:40 CDT(-0500)] <thealphanerd> so I wanted to make a query that could grab the first div… wether it be piano or grid

[10:49:46 CDT(-0500)] <thealphanerd> but just the first div

[10:49:53 CDT(-0500)] <thealphanerd> children return all of them though

[10:49:56 CDT(-0500)] <colinclark> children().eq(0) will get you the first child

[10:49:57 CDT(-0500)] <colinclark> as a jQuery

[10:50:19 CDT(-0500)] <thealphanerd> cool!

[10:50:34 CDT(-0500)] <thealphanerd> got it

[10:50:36 CDT(-0500)] <jessm> i missed standup and didn't login to IRC – slacker! here's what i'm up to: did a draft of the IDI equipment loan, spoke with James about a Floe preso we're scheduling, talked to Iris about some HR-related items

[10:50:42 CDT(-0500)] <colinclark> So, my sense is that you need to include a "selectablesSelector"

[10:51:05 CDT(-0500)] <colinclark> the Infusion demo has the case where all the children of the container are selectable

[10:51:18 CDT(-0500)] <colinclark> but, if I remember your markup correctly, you've actually got sub-children that should be selectable

[10:52:30 CDT(-0500)] <colinclark> http://wiki.fluidproject.org/display/fluid/Keyboard+Accessibility+Plugin+API#KeyboardAccessibilityPluginAPI-selectable

[10:55:19 CDT(-0500)] <colinclark> probably just selectableSelector: ".note" would do the trick

[10:56:13 CDT(-0500)] <colinclark> And then your commented-out onSelect and onUnselect options would bind to some method that displayed some kind of keyboard highlighting for the key

[10:56:22 CDT(-0500)] <colinclark> you can go with the default for now, but as you've probably already seen, it can be ugly

[10:56:25 CDT(-0500)] <thealphanerd> colinclark: brb

[10:57:53 CDT(-0500)] <colinclark> then you're gonna use "activatable" to fire noteOn and noteOff events

[11:04:56 CDT(-0500)] <thealphanerd> colinclark: ok that was something I meant to ask you… regarding those functions. so I use those to do something on selection. I guess it doesn't highlight by default

[11:05:58 CDT(-0500)] <thealphanerd> also what's the difference between selectableSelector and selectableElements?

[11:06:25 CDT(-0500)] <colinclark> The former is a selector--a string

[11:06:30 CDT(-0500)] <colinclark> the latter is a jQuery

[11:08:45 CDT(-0500)] <thealphanerd> ahhh

[11:09:01 CDT(-0500)] <thealphanerd> that makes sense

[11:09:09 CDT(-0500)] <thealphanerd> so selectable is working now

[11:09:23 CDT(-0500)] <colinclark> nice!

[11:09:36 CDT(-0500)] <colinclark> then just use activatable for actually pressing the key

[11:09:57 CDT(-0500)] <colinclark> I guess the next question will be if you want some kind of toggling behaviour

[11:10:05 CDT(-0500)] <colinclark> or "press for as long as you want it to play"

[11:10:24 CDT(-0500)] <colinclark> probably the former is easier, and polyphonic out of the box

[11:11:05 CDT(-0500)] <thealphanerd> well shift will still work for polyphony

[11:11:26 CDT(-0500)] <colinclark> cindyli1: Do you want to push my https://github.com/fluid-project/builder/pull/2 pull request to the Builder's project repo?

[11:12:22 CDT(-0500)] <thealphanerd> oh yeah… another issue that was going on. I can't seem to get it to traverse in the correct order. it always goes through the white notes first, then the black notes (I'm assuming it is based on the order that the elements were rendered in the dom)

[11:12:41 CDT(-0500)] <thealphanerd> now I could give each element a tab-index

[11:12:59 CDT(-0500)] <thealphanerd> but won't that have things getting weird once there are multiple pianos

[11:13:37 CDT(-0500)] <colinclark> yes, it goes in DOM order

[11:13:47 CDT(-0500)] <colinclark> and tabindex won't help you there

[11:14:02 CDT(-0500)] <colinclark> I THINK you should be able to do a little trick

[11:14:08 CDT(-0500)] <colinclark> Though I've never tried it

[11:14:32 CDT(-0500)] <colinclark> You'll have to manually grab each key and place it in an array in the order you want it to be navigated in

[11:14:50 CDT(-0500)] <colinclark> Or you could write some kind of sort comparator

[11:15:04 CDT(-0500)] <cindyli1> colinclark: sorry, i don't have push access to builder project repo. probably Justin_o can help with the push?

[11:15:06 CDT(-0500)] <colinclark> And then you should be able to pass that ordered array as your "selectableElements"

[11:15:14 CDT(-0500)] <colinclark> cindyli1: aha, okay, thanks

[11:15:14 CDT(-0500)] <thealphanerd> my concern would be that it might change the svg rendering

[11:15:23 CDT(-0500)] <colinclark> thealphanerd: How could it do that?

[11:15:35 CDT(-0500)] <thealphanerd> ohhh an array on top of the elemnts that already exist

[11:15:39 CDT(-0500)] <colinclark> yes

[11:15:56 CDT(-0500)] <colinclark> I'm not positive it will work

[11:15:58 CDT(-0500)] <colinclark> but it's worth a shot

[11:16:59 CDT(-0500)] <thealphanerd> colinclark: the list that I'm using that label the keys has everything in the right order

[11:17:14 CDT(-0500)] <Justin_o> cindyli1, colinclark: talking about the builder pull request?

[11:17:20 CDT(-0500)] <colinclark> Justin_o: yup

[11:17:35 CDT(-0500)] <colinclark> I think we should grant cindyli1 push access

[11:17:36 CDT(-0500)] <thealphanerd> it is a ul… and each li has the note number and proper name

[11:17:43 CDT(-0500)] <colinclark> given that she has worked substantially on it in the past

[11:17:57 CDT(-0500)] <Justin_o> colinclark: funny.. i had thought cindyli1 already had it

[11:18:18 CDT(-0500)] <colinclark> thealphanerd: Is it a list of actual DOM elements? Or jQuery elements? (either is fine)

[11:18:33 CDT(-0500)] <thealphanerd> actual dom element

[11:18:41 CDT(-0500)] <colinclark> great

[11:18:53 CDT(-0500)] <colinclark> try using that as your selectableElements

[11:18:59 CDT(-0500)] <colinclark> you'll have to wrap it as a jQuery, I'd guess

[11:19:00 CDT(-0500)] <colinclark> but who knows?

[11:19:01 CDT(-0500)] <cindyli1> Justin_o: i have on fluid studios, but not builder

[11:20:34 CDT(-0500)] <colinclark> Justin_o: You were asking about process for granting commit access to non-Infusion repositories

[11:20:43 CDT(-0500)] <Justin_o> colinclark: yep

[11:20:50 CDT(-0500)] <colinclark> I don't think we have a formal process for these less formal repositories

[11:21:10 CDT(-0500)] <Justin_o> colinclark: currently the builder is restricted to the committers team

[11:21:23 CDT(-0500)] <colinclark> Aha

[11:21:35 CDT(-0500)] <colinclark> interesting

[11:21:57 CDT(-0500)] <colinclark> So the argument here, I guess, is that the Builder, while being in a different repo, is integral to Infusion

[11:22:11 CDT(-0500)] <colinclark> I'm actually playing with the idea that the new build scripts will also be in a separate repository

[11:22:13 CDT(-0500)] <colinclark> so this is interesting

[11:23:02 CDT(-0500)] <Justin_o> colinclark: so just some minor background.. github restricts access based on teams..

[11:23:47 CDT(-0500)] <Justin_o> colinclark: we currently have 2 teams with push access: Committers and ops

[11:23:47 CDT(-0500)] <colinclark> I guess the key question is whether or not the Builder actually counts as what I was calling an "informal repository"

[11:23:49 CDT(-0500)] <thealphanerd> so colinclark this is one thing that I'm trying to wrap my head around. if I change the selectable items to no longer being the rect elements… will I need to make both the rect elements and the other selectable elements activatable?

[11:24:00 CDT(-0500)] <colinclark> And perhaps it's not

[11:24:02 CDT(-0500)] <thealphanerd> becuase as it is right now everything can be traversed via aria no problem

[11:24:21 CDT(-0500)] <colinclark> The selectable items needs to be the rect elements

[11:24:35 CDT(-0500)] <colinclark> what else could be selectable or activatable except the rects?

[11:24:39 CDT(-0500)] <colinclark> since they are the keys

[11:24:55 CDT(-0500)] <thealphanerd> well I thought you were implying to use another element to force the order

[11:25:01 CDT(-0500)] * thealphanerd is confused now

[11:25:21 CDT(-0500)] <colinclark> No, I'm saying make yourself an array that contains your selectable items-the rects-in a sorted order

[11:25:39 CDT(-0500)] <thealphanerd> ohhhh in javascript land

[11:25:48 CDT(-0500)] <colinclark> unfortunately in that land, yes

[11:26:00 CDT(-0500)] <thealphanerd> why is that unfortunate?

[11:26:17 CDT(-0500)] <colinclark> (smile)

[11:26:25 CDT(-0500)] <colinclark> well, it'd be nicer to do it in configuration

[11:26:28 CDT(-0500)] <colinclark> or not have to do them

[11:27:01 CDT(-0500)] <thealphanerd> indeed it would

[11:27:27 CDT(-0500)] <thealphanerd> I did do a read yesterday that made me want to refactor all my rendering

[11:27:51 CDT(-0500)] <thealphanerd> http://bost.ocks.org/mike/join/

[11:28:12 CDT(-0500)] <thealphanerd> had no idea you could do these "data joins" with d3

[11:29:24 CDT(-0500)] <colinclark> So, Justin_o, maybe it's best to treat the Builder like it's a formal repo--a formal part of Infusion

[11:29:32 CDT(-0500)] <thealphanerd> d3 can run constantly rendering based on a data set…

[11:29:51 CDT(-0500)] <Justin_o> colinclark: okay.. makes sense

[11:29:52 CDT(-0500)] <colinclark> Justin_o: in which case, can you look at and push my pull request based on cindyli1's expert comments?

[11:30:17 CDT(-0500)] <Justin_o> colinclark: sure.. will do

[11:39:52 CDT(-0500)] <anastasiac> michelled, one down: https://github.com/acheetham/OER-Commons/tree/708

[11:44:25 CDT(-0500)] <Justin_o> colinclark: I commented on the pull request, maybe it's time to switch the builder to use a built version of infusion for it's own dependencies.

[11:53:26 CDT(-0500)] <colinclark> Justin_o: Yes

[11:53:30 CDT(-0500)] <colinclark> It's also time to retire the Builder (wink)

[11:53:51 CDT(-0500)] <Justin_o> colinclark: not arguing with that

[11:56:21 CDT(-0500)] <colinclark> Justin_o: I filed a JIRA for your comment http://issues.fluidproject.org/browse/FLUID-4757

[11:58:17 CDT(-0500)] <thealphanerd> so colinclark I have an array holding the jqueryies for each note in the order they should be selected

[11:58:41 CDT(-0500)] <Justin_o> colinclark: thanks

[11:58:44 CDT(-0500)] <colinclark> thealphanerd: ok

[11:58:53 CDT(-0500)] <thealphanerd> now how do I pass that to selectable

[11:59:12 CDT(-0500)] <thealphanerd> it says a set of nodes… is that different than an array?

[11:59:26 CDT(-0500)] <thealphanerd> fr selectableElement… I guess it is expecting a jquery

[11:59:30 CDT(-0500)] <colinclark> According to the documentation, selectableElements requires a jQuery

[11:59:33 CDT(-0500)] <colinclark> I don't know if it's true or not

[11:59:44 CDT(-0500)] <thealphanerd> I tried to give it an array of jqueries

[11:59:45 CDT(-0500)] <colinclark> But, assuming you've got this

[11:59:45 CDT(-0500)] <alexn> michelled: I created those Assembla tickets you asked me for. these are ISKME tickets 710-714

[11:59:50 CDT(-0500)] <thealphanerd> and the result was an error thrown

[11:59:55 CDT(-0500)] <colinclark> var sortedArray;

[12:00:01 CDT(-0500)] <thealphanerd> sayning the array doesn't have the method .fluid

[12:00:04 CDT(-0500)] <colinclark> $(sortedArray) should wrap it for you

[12:00:29 CDT(-0500)] <colinclark> and then you'll pass that as the value to your selectableElements option

[12:02:47 CDT(-0500)] <thealphanerd> no dice

[12:02:51 CDT(-0500)] <thealphanerd> doesn't throw an error

[12:02:56 CDT(-0500)] <thealphanerd> but doesn't make elements selectable

[12:03:19 CDT(-0500)] <thealphanerd> should I call fluid.each on the array, and make each element selectable individually?

[12:03:39 CDT(-0500)] <colinclark> no

[12:07:25 CDT(-0500)] <colinclark> thealphanerd: What is the value of "note" in your call to fluid.each inside that.noteArray?

[12:07:45 CDT(-0500)] <thealphanerd> note is an array [noteNumber, noteName]

[12:08:00 CDT(-0500)] <thealphanerd> aka [60, c4]

[12:08:28 CDT(-0500)] <colinclark> I guess it's a completely related question why these are stored as a tuple instead of in an object (wink)

[12:08:58 CDT(-0500)]

<colinclark> such as

Unknown macro: { number}

[12:09:23 CDT(-0500)] <thealphanerd> this is what is used to populate list that gives the aria names

[12:09:40 CDT(-0500)] <colinclark> So what does this do, in the end? Is nothing selectable, or are they just selectable in the wrong order?

[12:09:47 CDT(-0500)] <thealphanerd> not selectable

[12:09:55 CDT(-0500)] <colinclark> when you get a chance, you should probably fix that, along with not storing DOM Elements in the model

[12:10:00 CDT(-0500)] <colinclark> ok

[12:10:18 CDT(-0500)] <colinclark> so, for better style, let's refactor this a bit

[12:10:22 CDT(-0500)] <colinclark> use fluid.transform()

[12:10:22 CDT(-0500)] <thealphanerd> where should I store the dom elements then?

[12:10:31 CDT(-0500)] <colinclark> thealphanerd: Somewhere other than in the model

[12:10:42 CDT(-0500)] <thealphanerd> ok

[12:10:49 CDT(-0500)] <thealphanerd> so it could just be like that.domNotes

[12:10:50 CDT(-0500)] <thealphanerd> ?

[12:10:55 CDT(-0500)] <colinclark> yes

[12:10:57 CDT(-0500)] <colinclark> something like that

[12:11:27 CDT(-0500)] <thealphanerd> ok that's done

[12:11:31 CDT(-0500)] <colinclark> When you're transforming one array structure into another, you should use fluid.transform(). I'll paste you an example

[12:11:53 CDT(-0500)] <anastasiac> michelled, another one down: https://github.com/acheetham/OER-Commons/tree/706

[12:12:04 CDT(-0500)] <michelled> thx anastasiac!

[12:13:00 CDT(-0500)] <Justin_o> colinclark, cindyli1: I pushed the builder changes up

[12:13:22 CDT(-0500)] <thealphanerd> oh wait… colinclark, I just remembered why I have it as an array and not an object

[12:13:56 CDT(-0500)] <thealphanerd> http://pastebin.com/KMYWQzmj

[12:15:38 CDT(-0500)] <colinclark> thealphanerd: Can you elaborate?

[12:15:50 CDT(-0500)] <colinclark> Here's a suggested improvement to your code: http://pastebin.com/nBDsXJgv

[12:16:00 CDT(-0500)] <colinclark> There are a few key things to note:

[12:16:18 CDT(-0500)] <colinclark> 1. I broke out this code into a separate, free function and gave it a name that describes what it actually does.

[12:16:43 CDT(-0500)] <colinclark> 2. I use fluid.transform() to transform your notes model into an array of DOM elements

[12:17:16 CDT(-0500)] <colinclark> 3. As a guess, I'm unwrapping the elements before placing them in this new array

[12:17:28 CDT(-0500)] <anastasiac> michelled, hold off on 706: doesn't work in IE8

[12:17:35 CDT(-0500)] <colinclark> you'll need to wrap the whole array up again as a jQuery, which I didn't do

[12:18:53 CDT(-0500)] <thealphanerd> colinclark: should that be a free function when I implement it?

[12:19:11 CDT(-0500)] <colinclark> Yes

[12:19:30 CDT(-0500)] <colinclark> You should start to get into the discipline of creating more free functions, rather than methods that just randomly do stuff with "that"

[12:19:31 CDT(-0500)] <thealphanerd> and where would I decalre the free function?

[12:19:40 CDT(-0500)] <colinclark> wherever you like

[12:19:59 CDT(-0500)] <colinclark> If it's a function that's specific to a particular thing--like say the instrument, you might define it near the bottom of your instrument.js file

[12:20:10 CDT(-0500)] <thealphanerd> ok ok ok

[12:20:13 CDT(-0500)] <colinclark> AMMM.instrument.blah = function () { };

[12:20:18 CDT(-0500)] <thealphanerd> this is all making sense

[12:20:28 CDT(-0500)] <thealphanerd> that way I can break out the stuff from grid / piano that are pretty uch identitcle

[12:20:31 CDT(-0500)] <colinclark> (wink)

[12:20:37 CDT(-0500)] <colinclark> yes

[12:20:38 CDT(-0500)] <thealphanerd> such as drawing the svg element

[12:20:42 CDT(-0500)] <thealphanerd> send it a container / model

[12:20:45 CDT(-0500)] <thealphanerd> and do it from there

[12:20:51 CDT(-0500)] <colinclark> yes!

[12:21:01 CDT(-0500)] <colinclark> no more cut and paste!

[12:21:03 CDT(-0500)] <thealphanerd> that makes a lot of sense

[12:21:07 CDT(-0500)] <anastasiac> michelled, 706 is fine, it was just a cache issue

[12:21:07 CDT(-0500)] <colinclark> cool

[12:21:47 CDT(-0500)] <thealphanerd> so I guess the internal methods of a component should really only exist if it is very very very specific to that component

[12:21:51 CDT(-0500)] <thealphanerd> such as pre / post init

[12:22:36 CDT(-0500)] <colinclark> michelled: I guess the fascinating aspect of exploring our Captionator fork isn't so much the code we commented out

[12:22:42 CDT(-0500)] <colinclark> as the non-standard functionality we added

[12:25:28 CDT(-0500)] <colinclark> thealphanerd: I think it's less about specificity to the component...

[12:25:34 CDT(-0500)] <colinclark> and more about usefulness to users

[12:25:46 CDT(-0500)] <thealphanerd> ahhh

[12:25:55 CDT(-0500)] <colinclark> in other words, does it present an "interface" for people to use and control the component with?

[12:25:57 CDT(-0500)] <thealphanerd> functions that they may want to use outside the scope of its original intent

[12:26:19 CDT(-0500)] <colinclark> There's no reason, in fact, that methods on a component can't be defined by using other free functions

[12:26:21 CDT(-0500)] <colinclark> that's often the case

[12:26:31 CDT(-0500)] <colinclark> so really, methods are there to provide means of controlling a particular instance

[12:26:42 CDT(-0500)] <colinclark> but they should be composed of simpler, smaller free functions

[12:26:49 CDT(-0500)] <colinclark> which can be reused in many contexts

[12:28:24 CDT(-0500)] <thealphanerd> that makes sense

[12:28:34 CDT(-0500)] <thealphanerd> I will need to take some time to figure out when it makes sense to do so

[12:29:07 CDT(-0500)] <thealphanerd> btw I refactored… so instrument.aria.model.renderedNotes is now an array of objects

[12:33:30 CDT(-0500)] <colinclark> nice

[12:35:07 CDT(-0500)] <thealphanerd> colinclark: success!!!!

[12:35:42 CDT(-0500)] <thealphanerd> http://pastebin.com/fdrvF8u6

[12:36:25 CDT(-0500)] <colinclark> great, thealphanerd!

[12:36:39 CDT(-0500)] <thealphanerd> although… it is selecting in the correct order for fluid… but it is still not selecting in the correct order with voice over

[12:38:46 CDT(-0500)] <colinclark> what does VoiceOver do?

[12:42:43 CDT(-0500)] <thealphanerd> voiceOver is the built in osx screen reader

[12:56:40 CDT(-0500)] <colinclark> thealphanerd: umm

[12:56:43 CDT(-0500)] <colinclark> thanks (wink)

[12:56:56 CDT(-0500)] <colinclark> now that you've schooled me in assistive technology…

[12:57:08 CDT(-0500)] <colinclark> What does VoiceOver do on your page, specifically? (smile)

[12:57:09 CDT(-0500)] <thealphanerd> lol

[12:57:17 CDT(-0500)] <thealphanerd> well if I use voice over

[12:57:27 CDT(-0500)] <thealphanerd> I can find the piano as an application via landmarks

[12:57:33 CDT(-0500)] <thealphanerd> it is also the first item selected

[12:57:58 CDT(-0500)] <thealphanerd> I can then go into it via ctl + opt + shift + down

[12:58:17 CDT(-0500)] <thealphanerd> then can go through the notes with ctl + opt + right / left

[12:58:23 CDT(-0500)] <thealphanerd> it will name the notes as I go through

[12:58:33 CDT(-0500)] <thealphanerd> but it will do the white notes first, then the black notes (order in dom)

[12:58:52 CDT(-0500)] <colinclark> yeah, you're navigating the elements by hand in DOM order

[12:59:04 CDT(-0500)] <colinclark> It's been so long since I've used VoiceOver for this kind of thing

[12:59:22 CDT(-0500)] <colinclark> but typically, when you get focus inside an element with a role of application, it will free up the arrow keys

[12:59:29 CDT(-0500)] <colinclark> at which point you can navigate directly using right and left

[12:59:39 CDT(-0500)] <colinclark> and that will be controlled by JavaScript, and thus not in DOM order

[13:00:05 CDT(-0500)] <thealphanerd> the only issue

[13:00:16 CDT(-0500)] <thealphanerd> is that navigated using left and right is not recognized by voiceover

[13:00:25 CDT(-0500)] <colinclark> it should be

[13:00:41 CDT(-0500)] <thealphanerd> so the select event is firing

[13:00:46 CDT(-0500)] <thealphanerd> but the elements are not selected

[13:00:56 CDT(-0500)] <colinclark> right

[13:01:02 CDT(-0500)] <colinclark> They shouldn't be directly selectable in this way

[13:01:12 CDT(-0500)] <colinclark> they're automatically taken out of the tab order

[13:02:02 CDT(-0500)] <thealphanerd> but voiceover doesn't recognize the left and right movement unless you use the voice Over specific Dom traversal

[13:02:08 CDT(-0500)] <thealphanerd> I have to run for 30 minutes or so

[13:02:11 CDT(-0500)] <thealphanerd> will you still be around?

[13:02:47 CDT(-0500)] <thealphanerd> you can see the latest code on github right now

[13:02:49 CDT(-0500)] <thealphanerd> see ya in a bit

[13:03:10 CDT(-0500)] <colinclark> I'll be around

[13:03:20 CDT(-0500)] <thealphanerd> using voice over does properly select each svg element though

[13:03:28 CDT(-0500)] <thealphanerd> I'd like moving left and right to emulate that functionality

[13:03:41 CDT(-0500)] <logiclord_> yura1: Hi

[13:04:06 CDT(-0500)] <yura1> logiclord_: hi

[13:05:46 CDT(-0500)] <logiclord_> yura1: I was trying asynctest http://pastebin.com/q4u4wwie

[13:05:58 CDT(-0500)] <logiclord_> but test seems to go on for ever

[13:07:56 CDT(-0500)] <yura> oh ya logiclord_ you dont need to call stop when using asyncTest

[13:08:35 CDT(-0500)] <yura> logiclord_: also your tests should be inside the listener too, otherwise they will run like before with tests runnning before your component is even initalized

[13:14:31 CDT(-0500)] <yura> perhaps something like this http://pastebin.com/cUJuWfwu , logiclord

[13:16:07 CDT(-0500)] <logiclord> yes it worked for individual test but i have used epubReader in some tests like epubReader.locate('bookContainer').fluid('activate');

[13:16:17 CDT(-0500)] <logiclord> how should I wait for that

[13:16:18 CDT(-0500)] <logiclord> ?

[13:20:11 CDT(-0500)] <logiclord_> yura: for cases like http://pastebin.com/pWVHCztH

[13:23:16 CDT(-0500)] <yura> so logiclord_ you need to only call start at the very last point in time when you are ok with jqunit to continue with the rest of the tests

[13:23:26 CDT(-0500)] <yura> calling assert after start will get you in trouble

[13:25:02 CDT(-0500)] <yura> logiclord_: so something like this http://pastebin.com/aveLsYsW

[13:25:51 CDT(-0500)] <logiclord_> yura: It worked (smile)

[13:26:09 CDT(-0500)] <yura> logiclord_: awesome

[13:26:33 CDT(-0500)] <logiclord_> yura: I was also not able to simulate UI option change via jquery

[13:26:54 CDT(-0500)] <logiclord_> I tried to debug in console live

[13:27:09 CDT(-0500)] <logiclord_> like fire jquery operations to change values of drop etc

[13:27:14 CDT(-0500)] <logiclord_> and click save but

[13:27:22 CDT(-0500)] <logiclord_> everything just gets reset

[13:28:15 CDT(-0500)] <yura> logiclord_: was that for your new tabs of UI Options or the ones that already existed ?

[13:28:29 CDT(-0500)] <logiclord_> for both

[13:28:35 CDT(-0500)] <logiclord_> yura: ^

[13:29:30 CDT(-0500)] <logiclord_> yura: If i manually change input value and simulate save by click event it works but not vice versa

[13:30:09 CDT(-0500)] <yura> logiclord_: do you have it in code somewhere maybe i could take a look ?

[13:31:05 CDT(-0500)] <logiclord_> yura: last test case http://pastebin.com/E5XnWN8f

[13:31:21 CDT(-0500)] <yura> logiclord_: oh try this:

[13:31:40 CDT(-0500)] <yura> wherever you have .val(...)

[13:31:50 CDT(-0500)] <yura> replace it with .val(…).change()

[13:32:01 CDT(-0500)] <logiclord_> it event based

[13:32:01 CDT(-0500)] <yura> i bet it will make you happy

[13:32:32 CDT(-0500)] <yura> so like this http://pastebin.com/BzyyyQdW

[13:33:12 CDT(-0500)] <yura> logiclord_: ^ basically, you need to call change event when you change a value on an input or select so it actually "register"

[13:33:24 CDT(-0500)] <yura> registers

[13:34:26 CDT(-0500)] <logiclord_> yura: yes it does (big grin)

[13:34:32 CDT(-0500)] <yura> alright

[13:34:33 CDT(-0500)] <yura> (smile)

[13:35:01 CDT(-0500)] <logiclord_> thanks. all unit testing doubts cleared I will write few more cases before the final deadline

[13:35:33 CDT(-0500)] <yura> logiclord_: this is great, thanks for your effort (smile) see if you can refactor the common code in the tests too

[13:36:45 CDT(-0500)] <logiclord_> yura: I was planning to create utils method for bookmark and notes form

[13:36:52 CDT(-0500)] <yura> cool

[13:40:28 CDT(-0500)] <logiclord_> yura: Is there any wiki page or something where I can document about API's

[13:40:30 CDT(-0500)] <logiclord_> ?

[13:40:39 CDT(-0500)] <logiclord_> or should I put it on github

[13:40:40 CDT(-0500)] <logiclord_> ?

[13:41:18 CDT(-0500)] <yura> logiclord_: I would put it in github at this point , a good readme file would work very well too

[13:59:34 CDT(-0500)] <jhung> justin_o: ping

[13:59:43 CDT(-0500)] <Justin_o> hello

[14:00:40 CDT(-0500)] <jhung> Can you help me jog my memory of a conversation we had a week ago about the Decapod workflow? Did we end up deciding to put all Decapod "work" files into a user-specified location?

[14:03:16 CDT(-0500)] <Justin_o> jhung: that's something we were thinking.. the user could decide where they would like it to be saved.. i think we had to do some research though to see if there was a reasonable way to obtain the file structure information.. e.g. using the browser's file system dialog to pick a directory

[14:05:45 CDT(-0500)] <alexn1> michelled: here is a tiny change for one of the OER Commons blockers https://github.com/anvk/OER-Commons/compare/ISKME:a11y-uio...anvk:707

[14:05:54 CDT(-0500)] <alexn1> michelled: if you could review it please

[14:06:29 CDT(-0500)] <michelled> thx alexn1

[14:07:00 CDT(-0500)] <michelled> alexn1: please put the link to the branch on the wiki page

[14:07:15 CDT(-0500)] <alexn1> michelled: will do

[14:07:56 CDT(-0500)] <jhung> justin_o: okay. I think we should investigate do some thinking about this for Decapod 0.7 since we may need to manage sessions somehow.

[14:08:17 CDT(-0500)] <Justin_o> jhung: okay.. makes sense

[14:12:54 CDT(-0500)] <alexn1> michelled, cindyli1, anastasiac: I also created a message in Assembla about issues in rebuilding index for a local instance of OER Commons http://www.assembla.com/spaces/iskme/messages/2241033

[14:17:40 CDT(-0500)] <thealphanerd> colinclark: you around

[14:17:40 CDT(-0500)] <thealphanerd> ?

[14:17:46 CDT(-0500)] <colinclark> yup

[14:19:07 CDT(-0500)] <thealphanerd> so I'm trying to remember

[14:19:25 CDT(-0500)] <thealphanerd> you programmatically selected elements from the piano one of the last times we were together

[14:19:35 CDT(-0500)] <thealphanerd> to get the "blue" highlight

[14:20:50 CDT(-0500)] <colinclark> yes

[14:20:54 CDT(-0500)] <colinclark> it looks like your code isn't working

[14:21:02 CDT(-0500)] <colinclark> best as I can tell, anyway

[14:21:09 CDT(-0500)] <thealphanerd> what about it is not working for you?

[14:21:14 CDT(-0500)] <colinclark> nothing

[14:21:21 CDT(-0500)] <colinclark> I can tab to the container, that's it

[14:21:24 CDT(-0500)] <colinclark> no selections

[14:21:28 CDT(-0500)] <thealphanerd> check the console

[14:21:33 CDT(-0500)] <thealphanerd> it prints the notes it is selecting

[14:21:33 CDT(-0500)] <colinclark> Nothing

[14:21:42 CDT(-0500)] <colinclark> Are you sure you pushed up the latest changes?

[14:22:16 CDT(-0500)] <thealphanerd> yeah

[14:22:25 CDT(-0500)] <colinclark> thealphanerd: Can you play around with this page for a bit with VoiceOver? http://fluidproject.org/releases/1.4/demos/keyboard-a11y/html/keyboard.html

[14:22:26 CDT(-0500)] <thealphanerd> I have the selected notes printing to the console

[14:22:31 CDT(-0500)] <colinclark> And you'll see how the arrow keys work and everything?

[14:22:48 CDT(-0500)] <colinclark> As for getting it to do anything, it just wouldn't work for me

[14:24:11 CDT(-0500)] <thealphanerd> weird

[14:24:20 CDT(-0500)] <thealphanerd> so gallery viewer works with arrow keys / tab

[14:24:27 CDT(-0500)] <thealphanerd> but doesn't work properly with voiceOver

[14:25:31 CDT(-0500)] <thealphanerd> oh wait it does and doesn't at the same time

[14:27:09 CDT(-0500)] <thealphanerd> if you use the voice over commands to traverse the page you cannot select the gallery viewer items

[14:27:28 CDT(-0500)] <thealphanerd> but if you just use tab and arrows the screen reader never ready the text

[14:29:52 CDT(-0500)] <thealphanerd> not ready… reads

[14:40:48 CDT(-0500)] <colinclark> worked pretty nicely for me

[14:41:03 CDT(-0500)] <colinclark> I wonder if Mountain Lion has fundamentally changed some of VoiceOver's interactions?

[14:41:21 CDT(-0500)] <colinclark> On Lion with VO, I could tab to the container with the images, and arrow around each one

[14:41:22 CDT(-0500)] <thealphanerd> i have a lion machine I can check it on

[14:41:29 CDT(-0500)] <thealphanerd> I can do that

[14:41:39 CDT(-0500)] <colinclark> Each one was read with a label, like "grapes"

[14:41:40 CDT(-0500)] <thealphanerd> voice over has its own commands though

[14:41:50 CDT(-0500)] <thealphanerd> cntl - option - left / right

[14:41:53 CDT(-0500)] <thealphanerd> to traverse the dom

[14:41:55 CDT(-0500)] <colinclark> Right

[14:41:58 CDT(-0500)] <colinclark> that's a different mode

[14:43:03 CDT(-0500)] <colinclark> That's for navigating landmarks on the page

[14:43:19 CDT(-0500)] <colinclark> once you get to a landmark, the arrow keys work as usual

[14:43:37 CDT(-0500)] <thealphanerd> ok

[14:43:41 CDT(-0500)] <thealphanerd> because in my piano

[14:43:58 CDT(-0500)] <thealphanerd> with each note being an aria button… you can use that mode to go between them all

[14:46:28 CDT(-0500)] <thealphanerd> so with mine

[14:46:30 CDT(-0500)] <thealphanerd> if you hit tab

[14:46:33 CDT(-0500)] <thealphanerd> and highlight the keyboard

[14:46:38 CDT(-0500)] <thealphanerd> left and right is doing nothing?

[14:46:42 CDT(-0500)] <thealphanerd> on aria branch

[14:46:55 CDT(-0500)] <colinclark> nothing for me, no

[14:47:24 CDT(-0500)] <thealphanerd> strange

[14:49:34 CDT(-0500)] <colinclark> wait a second

[14:51:11 CDT(-0500)] <colinclark> it does work in Chrome and Safari

[14:51:18 CDT(-0500)] <colinclark> I don't know if I had a caching issue or something

[14:51:21 CDT(-0500)] <colinclark> Nothing in Firefox

[14:51:36 CDT(-0500)] <thealphanerd> voiceOver wasn't working at all in firefox for me

[14:51:42 CDT(-0500)] <thealphanerd> so I havn't tested firefox yet

[14:51:49 CDT(-0500)] <thealphanerd> no firefox support for voiceover

[14:51:50 CDT(-0500)] <colinclark> VoiceOver doesn't work with Firefox

[14:51:55 CDT(-0500)] <colinclark> and not fully reliably in Chrome, either

[14:52:16 CDT(-0500)] <colinclark> Early Aurora builds are starting to get VoiceOver support

[14:52:18 CDT(-0500)] <colinclark> but it'll be a while

[14:52:32 CDT(-0500)] <thealphanerd> fair enough

[14:52:35 CDT(-0500)] <thealphanerd> that being said

[14:52:37 CDT(-0500)] <colinclark> Apple was for a while actively preventing third-party browsers from supporting VoiceOver

[14:52:52 CDT(-0500)] <colinclark> I think you may have some subtle SVG engine issues going on here, but it's hard to tell

[14:52:54 CDT(-0500)] <thealphanerd> do you remember how we programatically selected the svg element as if it were tabbed?

[14:54:02 CDT(-0500)] <colinclark> we called focus()

[14:55:36 CDT(-0500)] <thealphanerd> ahh

[14:55:39 CDT(-0500)] <thealphanerd> ok so that works now

[14:55:40 CDT(-0500)] <thealphanerd> yay

[14:55:58 CDT(-0500)] <thealphanerd> that makes it work with the screen reader too

[14:56:00 CDT(-0500)] <thealphanerd> !

[14:56:24 CDT(-0500)] <thealphanerd> try now

[14:57:34 CDT(-0500)] <thealphanerd> but you are right that it isn't working at all with firefox

[14:58:25 CDT(-0500)] <thealphanerd> the selectable command isn't working

[14:58:32 CDT(-0500)] <thealphanerd> as each note has a tab index of -1

[14:59:09 CDT(-0500)] <colinclark> each note should have a tab index of -1

[14:59:14 CDT(-0500)] <colinclark> That's the whole point

[14:59:22 CDT(-0500)] <colinclark> You don't tab to the elements within the container

[14:59:29 CDT(-0500)] <colinclark> the container is "atomic"

[14:59:38 CDT(-0500)] <colinclark> you can tab to it and out of it

[14:59:56 CDT(-0500)] <colinclark> from there, the arrow keys do the work of programmatically focusing the container's children

[15:00:07 CDT(-0500)] <thealphanerd> oh wait

[15:00:09 CDT(-0500)] <thealphanerd> you are right

[15:00:19 CDT(-0500)] <thealphanerd> so I don't know then

[15:00:30 CDT(-0500)] <thealphanerd> if you pull the change I just made

[15:00:34 CDT(-0500)] <thealphanerd> you will see it work

[15:02:33 CDT(-0500)] <colinclark> I don't understand why you've done what you've done

[15:02:39 CDT(-0500)] <colinclark> or, for that matter, why you think it didn't work before?

[15:02:56 CDT(-0500)] <colinclark> I think, first of all, you should simplify things a little bit (wink)

[15:03:00 CDT(-0500)] <colinclark> Stop using VoiceOver.

[15:03:08 CDT(-0500)] <colinclark> Get it to work without a screen reader first

[15:03:17 CDT(-0500)] <colinclark> So, without VoiceOver, how is it that it doesn't work?

[15:04:07 CDT(-0500)] <jhung> Justin_o: I've been thinking...

[15:04:49 CDT(-0500)] <thealphanerd> colinclark: it is working without voiceover now (well in chrome / safar)

[15:04:50 CDT(-0500)] <Justin_o> jhung: yep

[15:04:51 CDT(-0500)] <jhung> I think for Deca 0.7 we should consider dropping the Image Manager.

[15:04:58 CDT(-0500)] <colinclark> thealphanerd: Okay, great

[15:04:58 CDT(-0500)] <thealphanerd> you can tab to the piano

[15:05:02 CDT(-0500)] <thealphanerd> and then go left to right

[15:05:05 CDT(-0500)] <colinclark> great

[15:05:08 CDT(-0500)] <thealphanerd> and it will focus on the keys in the correct order

[15:05:09 CDT(-0500)] <colinclark> can you activate the keys?

[15:05:09 CDT(-0500)] <Justin_o> jhung: okay.. is that for capture?

[15:05:16 CDT(-0500)] <colinclark> Is there styling for those keys?

[15:05:17 CDT(-0500)] <thealphanerd> I am working on activate now

[15:05:20 CDT(-0500)] <colinclark> great

[15:05:32 CDT(-0500)] <thealphanerd> colinclark: not doing any styling… stuck with the focus() outline

[15:05:39 CDT(-0500)] <colinclark> do some nice styling

[15:05:41 CDT(-0500)] <jhung> Yes Justin_o. This would mean it's up to the user to maintain order of images, delete/insert/etc.

[15:05:43 CDT(-0500)] <colinclark> you'll like it much better

[15:06:09 CDT(-0500)] <jhung> The capture UI will essentially be a single button that saves images to the file system justin_o.

[15:06:09 CDT(-0500)] <thealphanerd> is it wrong that I like the focus stling (wink)

[15:06:14 CDT(-0500)] <colinclark> lol

[15:06:16 CDT(-0500)] <colinclark> no

[15:06:19 CDT(-0500)] <colinclark> to each his own

[15:06:22 CDT(-0500)] <Justin_o> jhung: i guess that should be fine.. we should just output them numbered and then they can change the name to fix them in the file system

[15:06:36 CDT(-0500)] <thealphanerd> colinclark: the svg elements do not have an outline ability

[15:06:47 CDT(-0500)] <thealphanerd> so if I wanted to style it… i'd have to do something to the fill

[15:06:49 CDT(-0500)] <jhung> justin_o, exactly. I was thinking we may even be able to use a UI already built for gphoto.

[15:07:02 CDT(-0500)] <colinclark> you can probably put a border on them, though

[15:07:03 CDT(-0500)] <thealphanerd> the easiest way would be to play with the chroma or something I guess

[15:07:09 CDT(-0500)] <thealphanerd> border looks like crap

[15:07:18 CDT(-0500)] <thealphanerd> already played with it

[15:07:31 CDT(-0500)] <thealphanerd> becuase of the overlapping svg elements… looks not so hot

[15:07:31 CDT(-0500)] <colinclark> border on what?

[15:07:46 CDT(-0500)] <thealphanerd> I played with changing the css of the note

[15:07:54 CDT(-0500)] <thealphanerd> to change the color / width of border

[15:08:00 CDT(-0500)] <thealphanerd> looked really sloppy

[15:08:08 CDT(-0500)] <Justin_o> jhung: interesting..so we wouldn't build the capture ui at all? how would that work for stereo capture though

[15:08:12 CDT(-0500)] <colinclark> I'd probably put a border on the G when tab focus is on it

[15:08:16 CDT(-0500)] <colinclark> on the <g>, I mean

[15:08:25 CDT(-0500)] <colinclark> and then use the same sort of technique you use for mouse highlighting

[15:08:32 CDT(-0500)] <colinclark> only you'll probably want two colours

[15:08:51 CDT(-0500)] <colinclark> one for focus and one for activation

[15:08:57 CDT(-0500)] <jhung> Justin_o not sure yet. Hopefully it's just a matter of telling the UI tool to use a different camera.

[15:09:00 CDT(-0500)] <colinclark> on the <rects>

[15:09:04 CDT(-0500)] <colinclark> just an idea, thealphanerd

[15:09:31 CDT(-0500)] <thealphanerd> colinclark: definitely an idea worth exploring

[15:09:45 CDT(-0500)] <thealphanerd> ima get activateable working

[15:09:48 CDT(-0500)] <thealphanerd> then play with styling

[15:09:50 CDT(-0500)] <colinclark> smart man

[15:09:58 CDT(-0500)] <colinclark> michelled: My testing shows that WebKit's <track> rendering features are pretty rudimentary at this point

[15:10:11 CDT(-0500)] <Justin_o> jhung: hmmm

[15:10:30 CDT(-0500)] <Justin_o> and then we'd build a dewarp interface which would be vary similar to export i take it

[15:10:35 CDT(-0500)] <thealphanerd> do I call activatable on the main container or on each child?

[15:10:54 CDT(-0500)] <jhung> exactly justin_o.

[15:10:56 CDT(-0500)] <colinclark> check what the demo does, thealphanerd

[15:11:06 CDT(-0500)] <jhung> This helps us focus on Decapod specific UIs.

[15:11:07 CDT(-0500)] <Justin_o> jhung: okay.. well if it works i guess that's fine

[15:11:13 CDT(-0500)] <Justin_o> jhung: right

[15:11:18 CDT(-0500)] <colinclark> michelled: No styling, whether it's inline in the WebVTT file or outside in a CSS file using the ::cue pseudo element selector.

[15:11:20 CDT(-0500)] <jhung> We may need to make a Calibration UI too.

[15:11:33 CDT(-0500)] <colinclark> Nor do the built-in positioning commands seem to work in WebVTT

[15:11:34 CDT(-0500)] <jhung> So something needs to get cut Justin_o

[15:11:44 CDT(-0500)] <Justin_o> jhung: i guess i'm a little leery because i don't know what the gphoto ui's are like

[15:12:04 CDT(-0500)] <jhung> justin_o yeah, same here. I'll do some research and find out.

[15:12:15 CDT(-0500)] <Justin_o> jhung: okay.. sounds good

[15:12:21 CDT(-0500)] <colinclark> thealphanerd: If I remember correctly, it can be done either way

[15:12:38 CDT(-0500)] <colinclark> But I don't see any reason why you wouldn't want it to bubble up to the container and handle it there

[15:12:41 CDT(-0500)] <colinclark> a little more efficient

[15:12:42 CDT(-0500)] <michelled> colinclark: that's unfortunate. is there an way to check for those features pragmatically?

[15:12:53 CDT(-0500)] <colinclark> michelled: I have no idea; it's a good question

[15:13:13 CDT(-0500)] <michelled> I guess if we can, we'll have to make the polyfill very fine grained

[15:13:30 CDT(-0500)] <colinclark> it suggests that we've got to wait a while before we can live without a polyfill on any browser

[15:13:40 CDT(-0500)] <colinclark> I guess with Google, you never know

[15:14:00 CDT(-0500)] <colinclark> Apple is a little slower with Safari releases, and it's clear that their implementation is more stable

[15:14:02 CDT(-0500)] <colinclark> though I'm not quite sure why

[15:15:49 CDT(-0500)] <michelled> Safari has better track support?

[15:16:22 CDT(-0500)] <colinclark> It's functionally the same, as best as I can tell

[15:16:31 CDT(-0500)] <colinclark> Chrome just crashes pretty frequently when the feature is turned on

[15:16:39 CDT(-0500)] <michelled> oh, surprising

[15:18:04 CDT(-0500)] <colinclark> I've seen more "Oh, Snap" pages today than I perhaps ever have

[15:22:20 CDT(-0500)] <thealphanerd> colinclark: so I've got activatable working… is there any way to tell when a user releases the activatable key?

[15:22:28 CDT(-0500)] <thealphanerd> other than just setting an event binder on the space bar

[15:22:41 CDT(-0500)] <colinclark> nope, not that I know of

[15:23:19 CDT(-0500)] <thealphanerd> hmm

[15:23:19 CDT(-0500)] <thealphanerd> ok

[15:24:06 CDT(-0500)] <colinclark> The keyboard-a11y plugin listens for keydown events

[15:24:17 CDT(-0500)] <colinclark> You could, if you wanted, listen for key up as well

[15:24:36 CDT(-0500)] <colinclark> You'll have to do it by hand, but that's probably not terribly much work

[15:25:17 CDT(-0500)] <colinclark> But keep in mind your shift key interaction won't be the most convenient for users who don't have sticky keys activated

[15:25:38 CDT(-0500)] <colinclark> since they'll actually have to do the work of pressing two keys

[15:25:52 CDT(-0500)] <colinclark> many users will have sticky keys activated

[15:26:07 CDT(-0500)] <colinclark> meaning the key will stay down, either for a period of time or until they press it again

[15:26:39 CDT(-0500)] <colinclark> So, you have to ask yourself, "what interaction makes the most sense for the keyboard?"

[15:26:51 CDT(-0500)] <colinclark> My sense, for this particular style, is that a toggle-based approach is probably better

[15:27:03 CDT(-0500)] <colinclark> For the alphabet mapping, press and hold seems appropriate

[15:27:18 CDT(-0500)] <colinclark> but in this case, when these things claim to be buttons, etc., you're probably best to make them work like toggle buttons

[15:27:30 CDT(-0500)] <colinclark> i.e. Press once to activate, and again to disable

[15:27:33 CDT(-0500)] <colinclark> But it's up to you

[15:27:48 CDT(-0500)] <colinclark> or, to put it another way, up to your users (smile)

[15:28:00 CDT(-0500)] <colinclark> you're too late now to do much in the way of real user testing, which is too bad

[15:28:04 CDT(-0500)] <colinclark> so you'll have to go with your gut

[15:40:20 CDT(-0500)] <thealphanerd> colinclark: toggle is working

[15:40:22 CDT(-0500)] <thealphanerd> pull latest code

[15:40:27 CDT(-0500)] <colinclark> cool

[15:41:48 CDT(-0500)] <thealphanerd> I'm going to work on getting the keyboard alphabet mapping working as well… but I think for this mode toggle makes the most sense ( for now)

[15:43:09 CDT(-0500)] <colinclark> looks like they can only be activated once, and then they stop working, thealphanerd

[15:43:16 CDT(-0500)] <thealphanerd> just noticed that myself

[15:43:20 CDT(-0500)] <thealphanerd> splice is not working for some reason

[15:43:22 CDT(-0500)] <thealphanerd> lookign in to that

[15:43:25 CDT(-0500)] <alexn1> michelled: could you please take a look at this branch and let me know what you think https://github.com/anvk/videoPlayer/compare/fluid-project:demo...anvk:FLUID-4661

[15:45:21 CDT(-0500)] <thealphanerd> fixed and pushed

[15:46:00 CDT(-0500)] <thealphanerd> colinclark: what is nice… is that holding shift works

[15:47:31 CDT(-0500)] <thealphanerd> I think I have an idea for a solution though to make this more enjoyable to play

[15:48:04 CDT(-0500)] <thealphanerd> maybe I should set an event binder to another key… that just kills all playing notes

[15:48:07 CDT(-0500)] <thealphanerd> like escape

[15:48:12 CDT(-0500)] <colinclark> that would be nice

[15:48:20 CDT(-0500)] <thealphanerd> shift still works

[15:52:31 CDT(-0500)] <colinclark> I think it works very nicely

[15:52:43 CDT(-0500)] <colinclark> and adding the escape key makes a lot of sense, too

[15:53:34 CDT(-0500)] <colinclark> you should break out your handler into a public method on this object

[15:54:07 CDT(-0500)] <colinclark> except it should take as its argument a note Node, not just the event

[15:55:18 CDT(-0500)] <colinclark> And at some point, you desperately need to start using the Infusion DOM binder on your components instead of using all these calls to jQuery find and hard-coded IDs, etc.

[15:55:21 CDT(-0500)] <colinclark> one for the TODO list

[15:57:05 CDT(-0500)] <thealphanerd> infusion DOM binder?

[15:59:57 CDT(-0500)] <colinclark> yes (smile)

[16:00:11 CDT(-0500)] <colinclark> http://wiki.fluidproject.org/display/fluid/DOM+Binder

[16:00:21 CDT(-0500)] <colinclark> Components should never hard-code stuff like IDs in their markup

[16:00:37 CDT(-0500)] <colinclark> This code you've written outputs invalid markup

[16:00:55 CDT(-0500)] <colinclark> since you'll end up, with multiple keyboards on the page, having multiple elements with the same ID

[16:01:20 CDT(-0500)] <colinclark> At some point, you'll want to clean up how your component manages containers

[16:01:41 CDT(-0500)] <colinclark> and make sure you always reference the DOM via selectors that you've defined in your View's "selectors" options block

[16:01:47 CDT(-0500)] <colinclark> That way

[16:01:57 CDT(-0500)] <colinclark> a) you won't accidentally slip out of your container

[16:02:18 CDT(-0500)] <colinclark> b) you won't hard-code the means by which things are looked up in the DOM, meaning users can actually modify the way your stuff is rendered

[16:02:23 CDT(-0500)] <thealphanerd> ohhh make the selectors in the defaults

[16:02:23 CDT(-0500)] <colinclark> without having to rewrite your code

[16:02:27 CDT(-0500)] <thealphanerd> rather than calling to find

[16:02:27 CDT(-0500)] <colinclark> which is currently the case

[16:02:29 CDT(-0500)] <colinclark> yes

[16:02:35 CDT(-0500)] <thealphanerd> that's a pretty easy change

[16:02:43 CDT(-0500)] <colinclark> yeah, you'll want to go a little deeper at some point

[16:02:49 CDT(-0500)] <thealphanerd> it would then be that.selecter.foobar

[16:02:58 CDT(-0500)] <colinclark> getting rid of this stuff where you look in the markup for an element with a certain class or ID

[16:02:59 CDT(-0500)] <colinclark> etc.

[16:03:13 CDT(-0500)] <colinclark> that.locate("notes")

[16:03:16 CDT(-0500)] <thealphanerd> well I was aware of that

[16:03:20 CDT(-0500)] <thealphanerd> to a degree

[16:03:27 CDT(-0500)] <thealphanerd> which is why I always called .find on that.container

[16:03:28 CDT(-0500)] <colinclark> it ends up making your code a lot simpler, too

[16:03:40 CDT(-0500)] <thealphanerd> but that seems a lot more logical

[16:03:51 CDT(-0500)] <thealphanerd> btw if you pull again I refactored the handler

[16:03:58 CDT(-0500)] <thealphanerd> I think that is what you were talking about

[16:04:30 CDT(-0500)] <colinclark> let's see

[16:05:13 CDT(-0500)] <colinclark> thealphanerd: nice work, dude

[16:05:15 CDT(-0500)] <colinclark> that's exactly it

[16:05:20 CDT(-0500)] <colinclark> I might give the method a different name...

[16:05:26 CDT(-0500)] <colinclark> since something starting with "on" sounds like an event

[16:05:29 CDT(-0500)] <colinclark> but these are details

[16:05:33 CDT(-0500)] <thealphanerd> fair enough

[16:05:40 CDT(-0500)] <thealphanerd> I'm going to get this escape thing working

[16:05:45 CDT(-0500)] <thealphanerd> and then we have the basic aria support in

[16:05:56 CDT(-0500)] <thealphanerd> and I can try and get arpeggiator working for thursday

[16:06:06 CDT(-0500)] <thealphanerd> then can refactor between then and monday

[16:06:41 CDT(-0500)] <thealphanerd> that d3 data stuff could realllly simplify how I render everything

[16:06:48 CDT(-0500)] <thealphanerd> did you take a look at that data join article

[20:03:14 CDT(-0500)] <thealphanerd> colinclark: how you doing

[20:03:20 CDT(-0500)] <colinclark> ok

[20:03:26 CDT(-0500)] <thealphanerd> hows the cat?

[20:03:32 CDT(-0500)] <colinclark> he died on friday

[20:03:36 CDT(-0500)] <thealphanerd> (sad)

[20:03:39 CDT(-0500)] <thealphanerd> I'm so sorry

[20:03:39 CDT(-0500)] <colinclark> yeah

[20:03:40 CDT(-0500)] <colinclark> (sad)

[20:03:49 CDT(-0500)] <colinclark> thanks

[20:04:07 CDT(-0500)] <thealphanerd> (sad)

[20:04:29 CDT(-0500)] <thealphanerd> at least he/she's not suffering anymore

[20:04:44 CDT(-0500)] <thealphanerd> but I'll change the subject...

[20:04:45 CDT(-0500)] <colinclark> he

[20:04:49 CDT(-0500)] <colinclark> yes, that's a relief

[20:04:58 CDT(-0500)] <thealphanerd> if you pull the latest changes… I got the escape thing working

[20:05:23 CDT(-0500)] <thealphanerd> its actually kinda nice

[20:06:35 CDT(-0500)] <thealphanerd> so can you think of a reason its not working at all in firefox?

[20:16:31 CDT(-0500)] <colinclark> Funny you ask

[20:16:36 CDT(-0500)] <colinclark> I'm deep in the midst of debugging it

[20:16:58 CDT(-0500)] <colinclark> thealphanerd: The bad news is that I think it's sheer luck that it works at all

[20:17:01 CDT(-0500)] <colinclark> in WebKit

[20:17:16 CDT(-0500)] <thealphanerd> eeek

[20:17:21 CDT(-0500)] <thealphanerd> is my code that bad :o

[20:17:24 CDT(-0500)] <colinclark> no no

[20:17:26 CDT(-0500)] <colinclark> it's not your code

[20:17:38 CDT(-0500)] <colinclark> I think SVG might be evil (tongue)

[20:17:50 CDT(-0500)] <colinclark> It's actually sort of bumming me out

[20:17:53 CDT(-0500)] <colinclark> SVG is so cool

[20:17:59 CDT(-0500)] <colinclark> super flexible and the like

[20:18:14 CDT(-0500)] <colinclark> I'm just not sure anyone has successfully done this with SVG

[20:18:48 CDT(-0500)] <thealphanerd> interesting

[20:19:21 CDT(-0500)] <thealphanerd> perhaps we should have a discussion with some of the people over in #ksvg and possibly some of the folks at mozilla

[20:19:27 CDT(-0500)] <thealphanerd> about how to make svg accessible

[20:22:11 CDT(-0500)] <colinclark> Well, sadly the last I saw from David Bolter was that he didn't want to support SVG's model for focusability

[20:22:20 CDT(-0500)] <colinclark> his point I completely agree with

[20:22:42 CDT(-0500)] <colinclark> but it doesn't help us much

[20:22:43 CDT(-0500)] <colinclark> https://bugzilla.mozilla.org/show_bug.cgi?id=409404#c12

[20:23:09 CDT(-0500)] <colinclark> Reading between the lines, I think Gecko's SVG renderer is not 100% awesome

[20:24:09 CDT(-0500)] <thealphanerd> I find it so funy that there are so many things broken with svg

[20:24:15 CDT(-0500)] <thealphanerd> and its been around for so freaking long

[20:24:52 CDT(-0500)] <colinclark> I think that's why so many things are broken (smile)

[20:25:08 CDT(-0500)] <colinclark> I was looking at the events spec for SVG and it was credited to someone at Netscape

[20:25:11 CDT(-0500)] <colinclark> which tells you how old it is

[20:25:56 CDT(-0500)] <thealphanerd> lol

[20:26:03 CDT(-0500)] <thealphanerd> but it is so great

[20:26:05 CDT(-0500)] <thealphanerd> in theory

[20:26:18 CDT(-0500)] <colinclark> okay, I have it working in Firefox

[20:26:21 CDT(-0500)] <colinclark> woot

[20:26:26 CDT(-0500)] <thealphanerd> how how how/

[20:26:26 CDT(-0500)] <thealphanerd> ?

[20:26:31 CDT(-0500)] <colinclark> and in webkit, too

[20:26:34 CDT(-0500)] <colinclark> well, it's all a bit funny

[20:27:38 CDT(-0500)] <thealphanerd> interesting how recent that patch is

[20:28:15 CDT(-0500)] <colinclark> yes

[20:28:19 CDT(-0500)] <colinclark> Okay, so here it is

[20:28:28 CDT(-0500)] <colinclark> SVG elements just don't seem to be reliably focusable

[20:28:52 CDT(-0500)] <colinclark> In Firefox, they're not at all

[20:28:55 CDT(-0500)] <colinclark> best as I can tell, anyway

[20:29:08 CDT(-0500)] <colinclark> In WebKit, you've found a hack

[20:29:20 CDT(-0500)] <colinclark> calling focus() inside the event handler for a previous focus() event seems to work

[20:29:26 CDT(-0500)] <colinclark> it actually throws an error in Firefox

[20:29:33 CDT(-0500)] <colinclark> it's sheer luck that it works

[20:29:44 CDT(-0500)] <colinclark> interestingly, if you put it in a setTimeout() call, it does what I thought it would do

[20:29:54 CDT(-0500)] <colinclark> which is fall into a recursive event handling loop

[20:30:09 CDT(-0500)] <colinclark> The answer, I think, is that we have to give up on focusing SVG elements

[20:30:15 CDT(-0500)] <colinclark> luckily, we have a few tools

[20:30:47 CDT(-0500)] <thealphanerd> what a setTimeout() call?

[20:31:17 CDT(-0500)] <colinclark> it causes the main thread to pause briefly, so that the function it is passed is executed asynchronously

[20:32:04 CDT(-0500)] <colinclark> So, in the case where the key can't get focus, this event handler has a problem: https://github.com/TheAlphaNerd/Piano/blob/aria/js/aria.js#L140

[20:32:29 CDT(-0500)] <colinclark> it still gets called, but its event.target is the Piano's container, not the key

[20:32:38 CDT(-0500)] <colinclark> which makes sense, because the key doesn't have focus

[20:33:40 CDT(-0500)] <thealphanerd> well fwiw… the keys are still focusable to assistive technologies because of the aria tagging

[20:33:52 CDT(-0500)] <thealphanerd> but what was the solution you found?

[20:34:52 CDT(-0500)] <colinclark> the ARIA probably isn't enough to make them focusable

[20:34:53 CDT(-0500)] <colinclark> but anyway

[20:34:58 CDT(-0500)] <colinclark> let me push this up to a branch so it's easier to see

[20:35:26 CDT(-0500)] <thealphanerd> sure thing

[20:35:28 CDT(-0500)] <thealphanerd> thanks so much

[20:42:06 CDT(-0500)] <colinclark> thealphanerd: These are the key lines

[20:42:07 CDT(-0500)] <colinclark> https://github.com/colinbdclark/Piano/blob/aria-no-focus/js/aria.js#L128-131

[20:42:28 CDT(-0500)] <colinclark> and these: https://github.com/colinbdclark/Piano/blob/aria-no-focus/js/aria.js#L112-125

[20:42:53 CDT(-0500)] <colinclark> So, I switched to the ordinary-function-call style of using the keyboard plugin, rather than the jQuery-style

[20:43:05 CDT(-0500)] <colinclark> No real reason, except I was having problems the other way around

[20:43:09 CDT(-0500)] <colinclark> probably user error

[20:43:26 CDT(-0500)] <colinclark> anyway, you'll notice that when I call "selectable", I store the return value from it

[20:43:36 CDT(-0500)] <colinclark> which provides us with some state about what's been selected

[20:44:09 CDT(-0500)] <colinclark> and then at line 129, the activatable event actually looks up the currently-selected note

[20:44:51 CDT(-0500)] <colinclark> So this approach will require you to draw your own highlights

[20:45:05 CDT(-0500)] <colinclark> since you can't depend on the default focus indicator since, again, the keys never actually get focus

[20:45:14 CDT(-0500)] <colinclark> I believe it will also break AT support

[20:45:30 CDT(-0500)] <colinclark> we will have to use the obscure and little-used "aria-activedescendent" attribute

[20:45:53 CDT(-0500)] <thealphanerd> AT support?

[20:47:08 CDT(-0500)] <colinclark> assistive technology

[20:47:12 CDT(-0500)] <colinclark> screen readers will hate this

[20:47:23 CDT(-0500)] <colinclark> i'll try active descendent and see if we can get it to work again

[20:47:48 CDT(-0500)] <thealphanerd> ahh

[20:48:34 CDT(-0500)] <thealphanerd> is it better to use fluid.tabbable ?

[20:48:40 CDT(-0500)] <thealphanerd> rather than foo.fluid

[20:50:02 CDT(-0500)] <colinclark> it really makes no difference

[20:50:29 CDT(-0500)] <thealphanerd> and your declaration of selectables

[20:50:41 CDT(-0500)] <thealphanerd> should that variable be declared at the top of the function?

[20:50:44 CDT(-0500)] <colinclark> I had to switch over due to problems that were probably just me being dumb

[20:50:46 CDT(-0500)] <thealphanerd> and then assigned inline where you want?

[20:51:07 CDT(-0500)] <colinclark> thealphanerd: it depends if you're a Crockfordist or not

[20:51:11 CDT(-0500)] <thealphanerd> lolol

[20:51:17 CDT(-0500)] <thealphanerd> I've been doing everything that way

[20:51:21 CDT(-0500)] <thealphanerd> I took crockford very seriously

[20:51:22 CDT(-0500)] <colinclark> Bosmon would highly disapprove

[20:51:35 CDT(-0500)] <colinclark> I've been doing it a fair bit in Flocking, but I realize how generally pointless it is

[20:51:35 CDT(-0500)] <thealphanerd> he's just so cunning

[20:51:38 CDT(-0500)] <colinclark> (smile)

[20:51:42 CDT(-0500)] <colinclark> Some of Crockford is very real

[20:51:54 CDT(-0500)] <thealphanerd> some is evangelist

[20:52:00 CDT(-0500)] <thealphanerd> hence jslint vs jshint

[20:52:04 CDT(-0500)] <colinclark> some of it is just his silly style preferences, amplified to the point where he tries to scare everyone into doing it his way

[20:52:10 CDT(-0500)] <colinclark> I think less evangelist

[20:52:12 CDT(-0500)] <colinclark> more evil

[20:52:17 CDT(-0500)] <thealphanerd> you know which one I freaking HATE

[20:52:20 CDT(-0500)] <thealphanerd> if / else

[20:52:26 CDT(-0500)] <colinclark> He was a nice guy when I met him

[20:52:27 CDT(-0500)] <thealphanerd> I love having else on its own line

[20:52:29 CDT(-0500)] <thealphanerd> } else

[20:52:31 CDT(-0500)] <thealphanerd> BLEGH

[20:52:37 CDT(-0500)] <colinclark> but he's a classic dork

[20:52:43 CDT(-0500)] <colinclark> (tongue)

[20:52:46 CDT(-0500)] <colinclark> That's the thing about style

[20:52:55 CDT(-0500)] <colinclark> everyone has their own

[20:53:03 CDT(-0500)] <colinclark> I say, pick someone else's and we can all hate them

[20:53:06 CDT(-0500)] <colinclark> so, in that spirit

[20:53:16 CDT(-0500)] <colinclark> yes, vars should be declared at the top

[20:53:39 CDT(-0500)] <colinclark> thealphanerd: this text mate theme is great, after a few tweaks

[20:53:46 CDT(-0500)] <colinclark> I guess it's not possible to "dim" the file browser at all?

[20:53:49 CDT(-0500)] <thealphanerd> what did you tweak?

[20:53:59 CDT(-0500)] <thealphanerd> I think it is possible to do anything now

[20:54:03 CDT(-0500)] <thealphanerd> with the source on github

[20:54:31 CDT(-0500)] <thealphanerd> I've had multiple builds a day

[20:54:43 CDT(-0500)] <Bosmon> I love it too, thealphanerd

[20:54:51 CDT(-0500)] <Bosmon> Thankfully with jshint, we don't need to argue about that any more

[20:54:56 CDT(-0500)] <colinclark> urg

[20:55:14 CDT(-0500)] <colinclark> Until someone writes a "renderer" for code style

[20:55:18 CDT(-0500)] <colinclark> we will always argue (tongue)

[20:55:40 CDT(-0500)] <colinclark> Why hasn't anyone done that? With a few git hooks and the like

[20:55:56 CDT(-0500)] <Bosmon> In theory.... I guess noone is ever going to agree about my spacing for the ternary operator : P

[20:55:58 CDT(-0500)] <thealphanerd> Bosmon: https://github.com/rondevera/jslintmate/

[20:56:58 CDT(-0500)] <thealphanerd> if you are on mountain lion you will need to manually update the linters

[20:57:14 CDT(-0500)] <Bosmon> If I am on mountain lion!!

[20:57:20 CDT(-0500)] <Bosmon> What kind of person do you take me for : P

[20:57:34 CDT(-0500)] <colinclark> lol

[20:57:59 CDT(-0500)] <thealphanerd> I am sadly unsure how to read that

[20:58:08 CDT(-0500)] <colinclark> Bosmon: Our favourite Mac OS X text editor has just been released as open source, in protest of Apple's increasing fascism

[20:58:10 CDT(-0500)] <Bosmon> Here's a clue - I'm still running XP on my laptop (smile)

[20:58:14 CDT(-0500)] <colinclark> perhaps some day it will be ported to Windows

[20:58:39 CDT(-0500)] <thealphanerd> Bosmon: is it XP performance edition?

[20:58:47 CDT(-0500)] <Bosmon> I doubt it

[20:58:53 CDT(-0500)] <Bosmon> I guess Apple will start to ban it then

[20:59:23 CDT(-0500)] <Bosmon> Especially on all those platforms where user-installed software isn't allowed : P

[20:59:29 CDT(-0500)] <Bosmon> It's going to be a funny world soon

[20:59:34 CDT(-0500)] <colinclark> indeed it will

[20:59:43 CDT(-0500)] <Bosmon> I was telling colinclark how I had to root my droid just to be able to back it up

[20:59:53 CDT(-0500)] <Bosmon> And then unroot it again so I could return it without voiding my warranty : P

[21:00:17 CDT(-0500)] <thealphanerd> sadly… for most users… the closed echo system isn't the worst thing

[21:00:34 CDT(-0500)] <thealphanerd> it's a terrible balance between what is best for most end users, and what is best for productivity

[21:00:57 CDT(-0500)] <colinclark> one imagine that it's not such a black and white economy

[21:01:12 CDT(-0500)] <colinclark> user experience vs. user freedom or flexibility

[21:01:19 CDT(-0500)] <colinclark> "one imagines," i meant to say

[21:01:50 CDT(-0500)] <Bosmon> The market consistently shows that the users' demand for freedom always wins out in the end

[21:02:09 CDT(-0500)] <Bosmon> Which is why Google vs Apple is going to end up just the same way as Microsoft vs Apple

[21:02:37 CDT(-0500)] <Bosmon> We will end up with the traditional rather shittier, less well designed product that gives its users slightly more choices : P

[21:04:02 CDT(-0500)] <Bosmon> Perhaps by 2050, Linux will be sufficiently non-obnoxious to break the cycle...

[21:04:53 CDT(-0500)] <colinclark> yay GNOME Shell!

[21:04:57 CDT(-0500)] <Bosmon> It's a shame all the minorities got crushed so quickly again this time

[21:05:00 CDT(-0500)] <Bosmon> Such as.... WEB OSS

[21:05:18 CDT(-0500)] <colinclark> thealphanerd: NVDA seems pretty happy with this aria-activedescendant scheme

[21:05:36 CDT(-0500)] <colinclark> and so I can navigate the piano in Firefox with a screen reader quite well

[21:06:10 CDT(-0500)] <thealphanerd> in the correct order?

[21:07:17 CDT(-0500)] <colinclark> yup

[21:07:21 CDT(-0500)] <colinclark> Not so happy in Chrome

[21:08:00 CDT(-0500)] <colinclark> I guess the fascinating thing is that the whole approach is, as we guessed it might be, not very ideal

[21:09:02 CDT(-0500)] <thealphanerd> colinclark: could a solution not be to check what the result of selctable is

[21:09:03 CDT(-0500)] <Bosmon> Can you characterise the approach?

[21:09:14 CDT(-0500)] <colinclark> Bosmon: yes

[21:09:16 CDT(-0500)] <colinclark> 1. SVG is evil

[21:09:18 CDT(-0500)] <thealphanerd> and have to different functions that could be called

[21:09:42 CDT(-0500)] <colinclark> 2. Best as I can tell, SVG elements can't be reliably focused

[21:09:47 CDT(-0500)] <Bosmon> Wow

[21:09:52 CDT(-0500)] <Bosmon> That's pretty horrible

[21:10:04 CDT(-0500)] <Bosmon> What is your response?

[21:10:10 CDT(-0500)] <Bosmon> Will you make a ..... SHADDOW DOMM?

[21:10:44 CDT(-0500)] <colinclark> 2a. thealphanerd has a classic focus problem hack where in WebKit only, he can force elements to be focusable by calling focus() again in the event handler to fluid.selectable (ie. call focus inside a focus handler)

[21:11:07 CDT(-0500)] <colinclark> 2b. using the "aria-activedescendant" technique seems to be a much more promising solution

[21:11:11 CDT(-0500)] <colinclark> So

[21:12:05 CDT(-0500)] <colinclark> 3. The technique I'm experimenting with is to never focus anything, but rather continually adjust the aria-activedescendant attribute of the container to point to the currently "focused" key.

[21:12:12 CDT(-0500)] <thealphanerd> colin… I was also taking a peak at the network graph… and there are 4 commits from my aria branch that havn't been merged into aria-nofocus yet

[21:12:15 CDT(-0500)] <thealphanerd> to enable escape

[21:12:24 CDT(-0500)] <colinclark> thealphanerd: yeah

[21:12:28 CDT(-0500)] <colinclark> call me lazy

[21:12:34 CDT(-0500)] <thealphanerd> hehe

[21:12:41 CDT(-0500)] <thealphanerd> I'm super duper anal about my merging

[21:12:41 CDT(-0500)] <colinclark> note I haven't issued a pull request (wink)

[21:13:11 CDT(-0500)] <thealphanerd> indeed I have

[21:13:14 CDT(-0500)] <thealphanerd> but that note didn't focus

[21:13:16 CDT(-0500)] <thealphanerd> ba dum dum

[21:13:20 CDT(-0500)] <colinclark> (smile)

[21:13:48 CDT(-0500)] <thealphanerd> colinclark: I have to run for 15 - 20 minutes

[21:13:51 CDT(-0500)] <thealphanerd> are you still going to be around?

[21:13:52 CDT(-0500)] <colinclark> yup

[21:14:00 CDT(-0500)] <colinclark> i don't know for sure

[21:14:05 CDT(-0500)] <thealphanerd> no problem

[21:14:09 CDT(-0500)] <colinclark> I'll play around with this a bit longer

[21:14:17 CDT(-0500)] <thealphanerd> if you do go could you give me an update of where you left things at?

[21:14:18 CDT(-0500)] <colinclark> I might get you a pull request, or it might have to wait until tomorrow

[21:14:21 CDT(-0500)] <colinclark> yup

[21:14:32 CDT(-0500)] <thealphanerd> I may fetch your commits anyways

[21:14:40 CDT(-0500)] <thealphanerd> I have your fork setup as a remote

[21:15:03 CDT(-0500)] <thealphanerd> so with all this tabability issues

[21:15:25 CDT(-0500)] <Bosmon> What can be observed, when using aria-activedescendent to point to an SVG node?

[21:15:29 CDT(-0500)] <thealphanerd> I think I would be better off spending my time working on keyboard binding

[21:15:29 CDT(-0500)] <thealphanerd> rather than arpeggiator

[21:15:46 CDT(-0500)] <colinclark> Bosmon: With NVDA/FF, it works quite nicely

[21:16:12 CDT(-0500)] <colinclark> less so with Chrome, which clearly isn't exposing the active descendant information to MSAA

[21:16:27 CDT(-0500)] <colinclark> And sort of confusingly poor in VoiceOver

[21:16:30 CDT(-0500)] <colinclark> which may be VO's fault

[21:16:47 CDT(-0500)] <colinclark> thealphanerd: If it were me, I'd keep going...

[21:16:55 CDT(-0500)] <colinclark> Try some basic arpeggiator functionality

[21:17:02 CDT(-0500)] <colinclark> I'll see if I can get the tricky keyboard stuff debugged

[21:17:07 CDT(-0500)] <colinclark> and you can do the work of actually implementing it

[21:17:20 CDT(-0500)] <thealphanerd> well I was thinking about keyboard to note binding

[21:17:23 CDT(-0500)] <thealphanerd> not the aria stuff

[21:17:23 CDT(-0500)] <colinclark> then it's GSoC-approved

[21:17:53 CDT(-0500)] <thealphanerd> should I go through and squash your commits (tongue)

[21:17:59 CDT(-0500)] <colinclark> I suspect you have a much better story about how this is an "inclusive" music maker if it does something even vaguely "automagic" as you called it.

[21:18:09 CDT(-0500)] <colinclark> it's up to you, but i might try some arpeggiation

[21:18:23 CDT(-0500)] <colinclark> I guess the most interesting point of all of this, Bosmon, is that the "traditional" ARIA techniques really aren't suitable from a UX perspective for a musical keyboard

[21:18:34 CDT(-0500)] <colinclark> I sent thealphanerd down the most literal path I could...

[21:18:51 CDT(-0500)] <colinclark> give each key on the keyboard an aria role of "button"

[21:19:13 CDT(-0500)] <colinclark> since it's SVG, not a DOM element, he created a kind of "shadow DOM" containing labels for each key

[21:19:22 CDT(-0500)] <colinclark> associated using aria-labelledby

[21:19:33 CDT(-0500)] <colinclark> when it works, it does exactly what you'd expect

[21:19:34 CDT(-0500)] <thealphanerd> which might I add works with voice-over

[21:19:45 CDT(-0500)] <colinclark> "C4 button"

[21:19:46 CDT(-0500)] <thealphanerd> unfortunately firefox doesn't work with voice over at all

[21:19:47 CDT(-0500)] <thealphanerd> LOL

[21:19:50 CDT(-0500)] <colinclark> "C sharp 4 button"

[21:20:05 CDT(-0500)] <colinclark> which makes for a somewhat annoying commentary while attempting to make music

[21:20:16 CDT(-0500)] <colinclark> I actually think that the best solution, which simplifies things a lot...

[21:20:23 CDT(-0500)] <colinclark> is to put a big description on the keyboard

[21:20:26 CDT(-0500)] <colinclark> using aria-described by

[21:20:37 CDT(-0500)] <thealphanerd> and have the notes bound to the keyboard keys

[21:20:44 CDT(-0500)] <colinclark> and then use sound effects for each key transition

[21:20:50 CDT(-0500)] <colinclark> maybe another flocking synth just making little clicks

[21:21:04 CDT(-0500)] <colinclark> each time you arrow up or down

[21:21:28 CDT(-0500)] <colinclark> so the user has some sense that something is happening

[21:21:48 CDT(-0500)] <colinclark> it's very hard to recreate tactile affordances on a computer screen

[21:22:14 CDT(-0500)] <thealphanerd> colinclark: I gotta run I'll be back very soon

[21:22:16 CDT(-0500)] <colinclark> where, at a real keyboard, you'd have some spatial and tactile sense of where you were on the keyboard, and where you were moving relative to other notes

[21:22:17 CDT(-0500)] <colinclark> thealphanerd: up

[21:22:19 CDT(-0500)] <colinclark> y

[21:22:21 CDT(-0500)] <colinclark> u

[21:22:21 CDT(-0500)] <colinclark> p

[21:24:02 CDT(-0500)] <Bosmon> U P: UP!

[21:33:46 CDT(-0500)] <Bosmon> Some success with updating us to the new qunit...

[21:34:10 CDT(-0500)] <Bosmon> A few things have come loose - the main issue is that the "markup fixture" which previously had the id of "main" now has to have the id of "qunit-fixture"

[21:34:23 CDT(-0500)] <Bosmon> I am all in favour of this proper namespacing : P

[21:41:21 CDT(-0500)] <colinclark> Bosmon: Great

[21:41:28 CDT(-0500)] <colinclark> I remember having to make a very similar change to this years ago

[22:01:54 CDT(-0500)] <thealphanerd> and I'm back

[22:02:15 CDT(-0500)] <thealphanerd> colinclark: still around?

[22:02:21 CDT(-0500)] <colinclark> yup

[22:02:56 CDT(-0500)] <thealphanerd> so where were we

[22:02:57 CDT(-0500)] <thealphanerd> (big grin)

[22:03:00 CDT(-0500)] <colinclark> Firefox's ARIA support is just so notably better than every else's

[22:03:23 CDT(-0500)] <thealphanerd> I guess I need to install nvda to test it

[22:03:30 CDT(-0500)] <thealphanerd> its funny cause I thought it was working perfectly

[22:03:43 CDT(-0500)] <thealphanerd> as my code appeared flawless in chrome + voiceOver

[22:03:50 CDT(-0500)] <thealphanerd> these computers…. hurting my head

[22:04:11 CDT(-0500)] <colinclark> Sure, flawless

[22:04:20 CDT(-0500)] <colinclark> With a big gaping hack that could just stop working any day

[22:04:29 CDT(-0500)] <colinclark> Or worse yet, through your code into an infinite recursion

[22:04:31 CDT(-0500)] <colinclark> (wink)

[22:04:45 CDT(-0500)] <thealphanerd> ruhroh

[22:05:03 CDT(-0500)] <thealphanerd> I would have made an excellent north korean engineer

[22:06:56 CDT(-0500)] <colinclark> So, I don't have it working beautifully

[22:07:10 CDT(-0500)] <colinclark> Chrome seems to just be a bust when it comes to aria-activedescendant

[22:07:18 CDT(-0500)] <colinclark> on either platform

[22:07:40 CDT(-0500)] <colinclark> But you should rest assured that no one uses Chrome with an assistive technology (tongue)

[22:08:11 CDT(-0500)] <colinclark> Safari with VoiceOver and Firefox with NVDA work pretty nicely

[22:09:07 CDT(-0500)] <thealphanerd> interesting

[22:09:10 CDT(-0500)] <thealphanerd> fair enough

[22:09:13 CDT(-0500)] <thealphanerd> can't get em all

[22:09:27 CDT(-0500)] <colinclark> Safari is a touch quirky, and I can't quite pin it down

[22:09:55 CDT(-0500)] <thealphanerd> so this raises the question

[22:09:57 CDT(-0500)] <colinclark> what troubles me is how beautifully this example works in Safari: http://test.cita.illinois.edu/aria/radio/radio2.php

[22:10:09 CDT(-0500)] <colinclark> I'm probably just too tired to see what I've missed

[22:10:41 CDT(-0500)] <thealphanerd> fair enough

[22:10:54 CDT(-0500)] <thealphanerd> do you want to give me a pastie of where you are at rihgth now

[22:10:59 CDT(-0500)] <thealphanerd> and I can maybe take a hack at it?

[22:11:26 CDT(-0500)] <thealphanerd> I'm going to put in a couple hours

[22:11:53 CDT(-0500)] <colinclark> sure, i'll just push this code up

[22:12:16 CDT(-0500)] <colinclark> you still had all kinds of stray roles floating around in various places

[22:12:19 CDT(-0500)] <colinclark> including "control group"

[22:14:27 CDT(-0500)] <colinclark> okay, my changes are up there, thealphanerd

[22:14:31 CDT(-0500)] <thealphanerd> awesome

[22:14:42 CDT(-0500)] <thealphanerd> colinclark: do you think we'll have time on thursday to do a full code review

[22:14:53 CDT(-0500)] <thealphanerd> and I make make notes of all the things I can refactor

[22:15:05 CDT(-0500)] <colinclark> that illinois.edu page I sent you is probably the best and most definitive source to see how aria should be working with active descendant in Safari with VO

[22:15:14 CDT(-0500)] <colinclark> or on any browser and screen reader combination

[22:15:33 CDT(-0500)] <colinclark> So if you find yourself continuing to fiddle with it, that's the place to go to sanity check

[22:16:03 CDT(-0500)] <colinclark> At the moment, I seem to still need to use Ctrl-Option-Shift-Down to start interacting with the piano region

[22:16:10 CDT(-0500)] <colinclark> but from there, arrows and space/enter work nicely

[22:16:34 CDT(-0500)] <thealphanerd> ah I noticed that before

[22:16:41 CDT(-0500)] <thealphanerd> it shouldn't be doing that I take it?

[22:16:41 CDT(-0500)] <colinclark> You've got some styling issues with Safari where it is trying to highlight your hidden labels--I'm assuming there are good tricks to handle that

[22:16:47 CDT(-0500)] <colinclark> I don't know

[22:17:00 CDT(-0500)] <colinclark> It doesn't on the illinois example

[22:17:14 CDT(-0500)] <colinclark> but I'm realizing how out of date my hands-on experience with ARIA really is

[22:17:14 CDT(-0500)] <thealphanerd> damn svg

[22:17:16 CDT(-0500)] <colinclark> so this has been fun

[22:17:22 CDT(-0500)] <colinclark> and a learning experience

[22:17:58 CDT(-0500)] <thealphanerd> I should have just used styled buttons (tongue)

[22:19:17 CDT(-0500)] <colinclark> well, SVG is pretty cool

[22:19:20 CDT(-0500)] <colinclark> you got some things for free

[22:19:25 CDT(-0500)] <colinclark> other things, they cost more

[22:19:27 CDT(-0500)] <colinclark> https://github.com/fluid-project/infusion/blob/master/src/webapp/framework/fss/css/fss-layout.css#L416-426

[22:19:40 CDT(-0500)] <colinclark> That's the FSS styles we've defined for various types of hiding

[22:19:46 CDT(-0500)] <colinclark> one of those might do the trick for you

[22:20:08 CDT(-0500)] <thealphanerd> btw… I know it is in poor forum

[22:20:17 CDT(-0500)] <thealphanerd> but I made the gui hidden from aria

[22:20:19 CDT(-0500)] <thealphanerd> for usability

[22:20:32 CDT(-0500)] <colinclark> jerk (tongue)

[22:20:35 CDT(-0500)] <thealphanerd> datgui was just a mess for the screen reader

[22:20:38 CDT(-0500)] <thealphanerd> but I read the spec

[22:20:44 CDT(-0500)] <colinclark> datgui sucks

[22:20:47 CDT(-0500)] <thealphanerd> and they said it is fine to do if it is for ease of use

[22:20:51 CDT(-0500)] <thealphanerd> datgui does suck

[22:21:14 CDT(-0500)] <colinclark> you'll have a hard time justifying an "equivalent experience"

[22:21:26 CDT(-0500)] <colinclark> but, hey, you've only got so much time

[22:21:37 CDT(-0500)] <colinclark> and yes, i have time for a Thursday code review

[22:21:50 CDT(-0500)] <thealphanerd> I was thinking of adding a secondary drop down

[22:21:53 CDT(-0500)] <thealphanerd> in addition to dat gui

[22:22:10 CDT(-0500)] <thealphanerd> that allows you to send update commands

[22:22:48 CDT(-0500)] <thealphanerd> and print out the consoles response to a div underneath

[22:23:04 CDT(-0500)] <thealphanerd> but I don't know if it is worth digging in to before monday

[22:23:10 CDT(-0500)] <colinclark> probably not

[22:23:16 CDT(-0500)] <colinclark> make a cool arpeggiator (smile)

[22:23:21 CDT(-0500)] <thealphanerd> will do (big grin)

[22:23:27 CDT(-0500)] <thealphanerd> I really like the idea

[22:23:27 CDT(-0500)] <colinclark> or even a kind of boring one

[22:23:36 CDT(-0500)] <thealphanerd> of killing the current accessibility mode

[22:23:45 CDT(-0500)] <thealphanerd> and using the keyboard navigation to select key

[22:23:54 CDT(-0500)] <thealphanerd> and making keyboard bindings to play the keys on the keyboard

[22:24:09 CDT(-0500)] <thealphanerd> but one step at a time I guess

[22:24:22 CDT(-0500)] <colinclark> yeah, i like that idea, too

[22:24:41 CDT(-0500)] <thealphanerd> just having an aria-descibed by that can be generated by the model

[22:24:45 CDT(-0500)] <thealphanerd> to describe how to interact

[22:24:59 CDT(-0500)] <colinclark> yup, i suspect that's the right way to do it

[22:25:15 CDT(-0500)] <colinclark> the only problem is that you'll probably find that the screen reader doesn't want to give up your letter keys

[22:25:18 CDT(-0500)] <thealphanerd> BUT with that being said… that does not mean that htese problems with aria / svg should be ignored

[22:25:40 CDT(-0500)] <colinclark> well, yeah

[22:25:52 CDT(-0500)] <colinclark> though the current interaction is working nicely, it is very annoying

[22:25:59 CDT(-0500)] <colinclark> finding another might be good, some day

[22:26:08 CDT(-0500)] <thealphanerd> is there an aria tag to turn off reading the label?

[22:26:08 CDT(-0500)] <colinclark> the nice thing about this approach is that you can clearly show you did it

[22:26:17 CDT(-0500)] <colinclark> no

[22:26:24 CDT(-0500)] <colinclark> in the traditional, serious way

[22:26:33 CDT(-0500)] <colinclark> now you can request feedback for doing it a better way

[22:26:39 CDT(-0500)] <colinclark> and go for it, whenever you get the chance

[22:27:13 CDT(-0500)] <thealphanerd> I'm 100% still working on this after

[22:27:19 CDT(-0500)] <thealphanerd> I want to get the multi-touch working

[22:27:31 CDT(-0500)] <thealphanerd> and me and another guy are working on that node monome stuff

[22:27:47 CDT(-0500)] <colinclark> yep

[22:27:50 CDT(-0500)] <thealphanerd> so the grid will easily translate into an in browser monome clone that works perfectly

[22:27:53 CDT(-0500)] <colinclark> that's great

[22:27:59 CDT(-0500)] <thealphanerd> phortran

[22:28:03 CDT(-0500)] <thealphanerd> the guy who was in here before

[22:28:18 CDT(-0500)] <thealphanerd> but I really want to work with him on making that app work with aria

[22:28:38 CDT(-0500)] <thealphanerd> it could become an abstraction on top of all sorts of dsp tools

[22:28:50 CDT(-0500)] <thealphanerd> max / pd / supercollider / ableton

[22:29:07 CDT(-0500)] <thealphanerd> make accessible dom elements that can control and modify all the above

[22:29:38 CDT(-0500)] <colinclark> If it helps any, thealphanerd, I just did a quick test with NVDA and it seems to surrender all the keys when it's in "application mode"

[22:29:41 CDT(-0500)] <colinclark> which isn't really the name

[22:29:55 CDT(-0500)] <colinclark> so you could probably do something nice with that approach

[22:30:39 CDT(-0500)] <thealphanerd> so aria-describedby is handled identically to aria-labelledby correct/

[22:31:58 CDT(-0500)] <thealphanerd> ha

[22:32:03 CDT(-0500)] <thealphanerd> I think I just figured out our solution

[22:32:14 CDT(-0500)] <thealphanerd> if left and right are going to select keys

[22:32:17 CDT(-0500)] <thealphanerd> rather than notes

[22:32:25 CDT(-0500)] <thealphanerd> it doesn't need to traverse the notes at all

[22:32:54 CDT(-0500)] <thealphanerd> rather it could traverse a ul of the keys

[22:33:15 CDT(-0500)] <thealphanerd> it could even be put into a drop down now that I think about it

[22:33:37 CDT(-0500)] <thealphanerd> but when a key is selected the notes from that key could become a different color

[22:33:59 CDT(-0500)] <thealphanerd> that way we don't even need screen readers to pop through the notes

[22:34:12 CDT(-0500)] <colinclark> yup, that's probably possible

[22:34:33 CDT(-0500)] <colinclark> i'm off to bed

[22:34:37 CDT(-0500)] <thealphanerd> probably a good idea

[22:34:38 CDT(-0500)] <colinclark> good luck with it (smile)

[22:34:44 CDT(-0500)] <thealphanerd> so I'm going to focus on the arpeggiator for now

[22:34:51 CDT(-0500)] <colinclark> cool

[22:34:53 CDT(-0500)] <thealphanerd> and then try changing the aria stuff

[22:35:12 CDT(-0500)] <thealphanerd> I'm sorry I wasn't able to get to this stuff earlier

[22:35:40 CDT(-0500)] <colinclark> 'sokay

[22:35:43 CDT(-0500)] <colinclark> lots to do

[22:35:47 CDT(-0500)] <thealphanerd> but wow… I feel like I've taken in so much

[22:35:57 CDT(-0500)] <thealphanerd> and you've been a fantastic mentor!

[22:36:37 CDT(-0500)] <colinclark> aw, shucks

[22:36:37 CDT(-0500)] <colinclark> thanks

[22:36:42 CDT(-0500)] <colinclark> you've done a great job

[22:37:11 CDT(-0500)] <colinclark> and it's a cool project

[22:38:14 CDT(-0500)] <thealphanerd> what I find more interesting than the project

[22:38:33 CDT(-0500)] <thealphanerd> is all the little edge cases it has turned up

[22:39:03 CDT(-0500)] <thealphanerd> anyways

[22:39:06 CDT(-0500)] <thealphanerd> I won't keep you

[22:39:15 CDT(-0500)] <thealphanerd> did we set a time for thursday

[22:39:19 CDT(-0500)] <colinclark> nope

[22:39:26 CDT(-0500)] <thealphanerd> earlier or later?

[22:39:30 CDT(-0500)] <thealphanerd> what's better for you

[22:39:31 CDT(-0500)] <colinclark> according to my calendar, it's free all day

[22:39:35 CDT(-0500)] <colinclark> bizarre

[22:39:52 CDT(-0500)] <colinclark> pick your time

[22:40:00 CDT(-0500)] <thealphanerd> 1?

[22:40:15 CDT(-0500)] <colinclark> sure

[22:40:16 CDT(-0500)] <colinclark> booked

[22:40:24 CDT(-0500)] <colinclark> see you then

[22:40:30 CDT(-0500)] <thealphanerd> awesome!