Time |
Nick |
Message |
14:04 |
meeting |
Meeting started Mon Apr 22 14:04:27 2013 UTC. The chair is erikos. Information about MeetBot at http://wiki.debian.org/MeetBot. |
14:04 |
|
Useful Commands: #action #agreed #help #info #idea #link #topic #endmeeting |
14:04 |
erikos |
#topic HTML activities |
14:05 |
|
Rogelio <Rogelio!~Rogelio 181.164.180.125> has joined #sugar-meeting |
14:05 |
erikos |
#link http://lists.sugarlabs.org/arc[…]April/042558.html |
14:05 |
|
dnarvaez: I opened the meeting logging for you |
14:06 |
dnarvaez |
erikos: thanks :) |
14:06 |
|
hi everyone |
14:06 |
erikos |
is here |
14:06 |
llaske |
hi Daniel, hi all |
14:06 |
bururez |
hi all |
14:06 |
IgnacioUy |
Hi :) |
14:06 |
garycmartin |
is here |
14:06 |
daroal |
Hi! |
14:06 |
Rogelio |
hi! |
14:06 |
pflores_ |
hi guys! |
14:06 |
dnarvaez |
lots of people, cool :) |
14:07 |
erikos |
manuq: was around as well... |
14:07 |
manuq |
yes I'm here |
14:07 |
SeanDaly |
here... |
14:07 |
gonzalo_odiard |
hello all! |
14:07 |
dnarvaez |
the idea was to discuss the three possibilities outlined in that email |
14:08 |
|
though we had already quite a bit of discussion about it on the mailing list |
14:08 |
|
is there anything people here would like to add (or ask) about those? |
14:08 |
IgnacioUy |
dnarvaez: I'm new.. ¿Html 5? |
14:08 |
quidam |
hi |
14:09 |
gonzalo_odiard |
IgnacioUy, please read the mails in sugar-devel ;) |
14:09 |
IgnacioUy |
gonzalo_odiard: ok thx. |
14:09 |
llaske |
Just to mention that there is lot of JavaScript frameworks mentioned in the lists and I'm afraid we don't have time/interest to test/compare all |
14:10 |
erikos |
llaske: it could be someones task to just do it and gives a summary to the list |
14:10 |
dnarvaez |
llaske: I agree but I'm not sure how to choose one :P |
14:10 |
|
they are so many that evaluating all woudl take more than implementign with one prrolly :) |
14:11 |
llaske |
I'm not sure we need to choose one ! |
14:11 |
dnarvaez |
llaske: you mean choose to *not* use one or? |
14:11 |
Rogelio |
IgnacioUy: http://lists.sugarlabs.org/arc[…]April/042558.html |
14:11 |
llaske |
Yes, that's the point. It's better to avoid using any framework. Most are just syntactic "Sugar" |
14:11 |
gonzalo_odiard |
just if we gain a lot by example implementing the graphics part |
14:12 |
dnarvaez |
llaske: yup, that's certainly one of the possible paths |
14:12 |
IgnacioUy |
Rogelio: I just read it. |
14:12 |
manuq |
I have started a research for components at https://github.com/manuq/components-test |
14:12 |
dnarvaez |
manuq are you getting an opinion about that with your research? |
14:12 |
gonzalo_odiard |
but by example use jquery is prety safe, and solve a lot of issues |
14:13 |
llaske |
Of course, jQuery is the most popular one |
14:14 |
erikos |
#link https://github.com/manuq/components-test research on components |
14:14 |
|
SeanDaly_ <SeanDaly_!~chatzilla 80.215.47.141> has joined #sugar-meeting |
14:15 |
manuq |
llaske: at list for the toolkit, you want to have a way to build and organize the different bits of html, css and js in a reusable way |
14:15 |
|
SeanDaly has quit IRC |
14:15 |
|
SeanDaly_ is now known as SeanDaly |
14:16 |
dnarvaez |
volojs would probably suffice for that |
14:16 |
llaske |
the toolkit should be a blackbox for the user so, building and organize is just an internal problem |
14:16 |
quidam |
manuq: reusable is a key for this, and it is not about saving time, but to get some uniformity |
14:16 |
manuq |
quidam: yes, both |
14:16 |
dnarvaez |
llaske: mmm you do need to expose an "interface" to the user to pull components together |
14:17 |
erikos |
manuq: quick check: in angular the timer does not work yet, right? |
14:17 |
manuq |
erikos: yeah, is unfinished |
14:17 |
|
angular is too different |
14:17 |
erikos |
cool, great work so far |
14:18 |
llaske |
the "interface" could be just some JavaScript function and objects. |
14:18 |
manuq |
dnarvaez: yes, volojs as you did in agora would suffice the components architecture |
14:18 |
|
nitika <nitika!~nitika 122.162.47.0> has joined #sugar-meeting |
14:19 |
dnarvaez |
llaske: I'm talking more of the components part. It could either be a command line tool like volo, or well, instructions to download a .js somewhere etc |
14:19 |
erikos |
dnarvaez: volojs as in organize packaging the activity, right? |
14:19 |
|
fimparatta <fimparatta!~fimparatt@r186-52-155-154.dialup.adsl.anteldata.net.uy> has joined #sugar-meeting |
14:20 |
dnarvaez |
erikos: yeah. Basically you create a template with something like "volo create sugar-activity-template helloworld" and then add/update components with "volo add my-cool-js-library" |
14:20 |
|
I think it would make things easier to bootstrap and ensure some consistency (updating the libraries will be easier than manuallu) |
14:21 |
llaske |
okay, creating an empty activity will not be very complex. We could do that just with copy/paste another activity |
14:21 |
dnarvaez |
it also makes it easier to pull in stuff like jquery if you want to use it |
14:21 |
manuq |
dnarvaez: very similar to Tj's components https://github.com/component/component |
14:21 |
erikos |
dnarvaez: yeah, and it is what Firefox OS is using as well, iirc |
14:22 |
dnarvaez |
llaske: surely it could be done by cut/paste too |
14:22 |
|
though you could do that even if we supported volojs |
14:22 |
llaske |
copy/paste is my favorite tool: no pre-requisite need :-) |
14:22 |
manuq |
there are other alternatives to volo as we said in the mailing list, but let's not go too deep with that, all do basically the same stuff |
14:22 |
dnarvaez |
it's not a strong dep |
14:22 |
|
IgnacioUy has left #sugar-meeting |
14:23 |
gonzalo_odiard |
i think we need separate the use case of components as modularization, and the widgets implementation |
14:23 |
dnarvaez |
manuq: yup, I guess it's more having something like volo or not, like llaske is suggesting |
14:23 |
llaske |
gonzalo_odiard: +1 |
14:24 |
dnarvaez |
gonzalo_odiard: want to elaborate on that? |
14:24 |
llaske |
complexity is more on widgets implementation than on modularization |
14:25 |
gonzalo_odiard |
dnarvaez, modularization is more low level, and we can decide on volo or similar easily. the widgets frameworks are big, and there are a lot of options |
14:25 |
dnarvaez |
I agree, we need to make a call about how to implement those widgets though |
14:26 |
gonzalo_odiard |
and later of soon, some will death, we need check what support they have |
14:26 |
dnarvaez |
gonzalo_odiard: yup, I agree |
14:26 |
llaske |
About widgets: let's talk about Toolbar, it's the first step |
14:26 |
walterbender |
the pieces are: toolbar, journal, collaboration... anything else? |
14:27 |
llaske |
Do you imagine something like Gtk: create JavaScript object to each Toolbar Item or do you imagine new HTML tag for toolbar ? |
14:27 |
gonzalo_odiard |
may be we can do a list of the issues we need to solve, modularization, ui widget, communication with backend, backend? |
14:27 |
dnarvaez |
llaske: we was talking about that with manuq |
14:27 |
llaske |
walterbender: copy/paste ? viewsource ? |
14:27 |
walterbender |
notifications |
14:28 |
dnarvaez |
llaske: I don't quite like that enyo is using js to create widgets |
14:28 |
|
llaske: I'd rather define them in html and attach js code to them |
14:28 |
gonzalo_odiard |
dnarvaez, yes, is a performance nightmare |
14:29 |
manuq |
exactly, going for MVC is good for me too |
14:29 |
gonzalo_odiard |
is easier and cleaner, but not good for performance |
14:30 |
llaske |
okay, of course my preference is for pure JavaScript like Enyo (instead of HTML) but your argument make sense |
14:30 |
dnarvaez |
it's going to be really hard to agree on this kind of things :) |
14:31 |
|
perhaps it make sense for someone to do some more research and then propose a plan on the ml |
14:31 |
manuq |
yes, I kind of started that, of course anyone can do its own and share thoughts |
14:31 |
dnarvaez |
and manuq is apparently on it already :) |
14:31 |
|
yup |
14:31 |
gonzalo_odiard |
nice, manuq :) |
14:32 |
dnarvaez |
taking a bit of a step back... |
14:32 |
|
there seem to be some agreement that we should go with WebKit for now? |
14:32 |
|
Cerlyn <Cerlyn!~cerlyn mail.globisgroup.com> has joined #sugar-meeting |
14:33 |
llaske |
But with a new way to communicate with JavaScript (avoiding console-message) |
14:33 |
walterbender |
there hasn't seemed to be consensus to move away from Webkit yet |
14:33 |
gonzalo_odiard |
dnarvaez, i think now we should go for html + webkit + backend. the most importan issue is solve communication |
14:33 |
dnarvaez |
do we need to support WebKit1? |
14:33 |
erikos |
dnarvaez: solution (1) in the meeting announcement |
14:34 |
dnarvaez |
erikos: yup |
14:34 |
|
or better, do we need to support existing version of Sugar? |
14:34 |
garycmartin |
gonzalo_odiard: +1 |
14:35 |
llaske |
dnarvaez: YES !!!! |
14:35 |
dnarvaez |
sigh :( |
14:35 |
walterbender |
dnarvaez: I am not sure |
14:35 |
gonzalo_odiard |
dnarvaez, what are the limitations of webkit1 in this area? |
14:35 |
dnarvaez |
gonzalo_odiard: as far as I can tell, there is no sane way to do client side communication in WebKit1 |
14:36 |
|
gonzalo_odiard: the only way I can think of is the websockets stuff we discussed |
14:36 |
|
with WebKit2 it can be done sanely client side I think |
14:36 |
gonzalo_odiard |
dnarvaez, i like the websockets idea too |
14:36 |
llaske |
dnarvaez: no "safe" way but there is some hacky way to do that: the PhoneGap one or the console-message |
14:36 |
dnarvaez |
so if we want to support WebKit1 is going to be more work |
14:36 |
erikos |
llaske: you have deployment background, your answer is to expect here |
14:36 |
manuq |
dnarvaez: I think we can use a WebKit2 webview, it doesn't matter if Browse activity uses WK1 |
14:37 |
dnarvaez |
llaske: nope you can't do phonegap on WebKit1 I think :( |
14:37 |
|
llaske: it's only console-message afaict |
14:37 |
manuq |
dnarvaez: WK1 and WK2 can live together, right? |
14:37 |
llaske |
My deployment background said: any solution is good if it works for the user :-) |
14:37 |
dnarvaez |
manuq: though it wouldnt work for old sugar right? |
14:37 |
|
oh wait |
14:38 |
|
I suppose at least fedora ships with webkit2 |
14:38 |
erikos |
quickly looks |
14:39 |
dnarvaez |
but that would only be latest sugar |
14:39 |
manuq |
yes at least in F19, I remember pbrobinson said webkit2 is in sugar on a stick |
14:39 |
dnarvaez |
llaske: would you be content with that? :P |
14:39 |
|
and does anyone else then llaske feel strongly that we should support old sugar? :) |
14:39 |
gonzalo_odiard |
no webkit2 on fedora 18 |
14:39 |
|
IgnacioUy <IgnacioUy!~ignacio@r190-132-43-111.dialup.mobile.ancel.net.uy> has joined #sugar-meeting |
14:39 |
llaske |
Hmmm, I think that we should provide an intermediate version that works today. |
14:40 |
|
About my own experience, Sugar 0.96 is just starting to be deployed ! |
14:40 |
erikos |
Gnome 3.8 switched to webkit2 |
14:40 |
llaske |
We can't wait 0.100 to provide a solution |
14:40 |
erikos |
so yes, Fedora 19 is the first one that should ship both |
14:41 |
walterbender |
llaske: actually, I think we'll see more Sugar 0.98 than Sugar 0.96 in the field, since XO 4.0 is shipping with 0.98 |
14:41 |
dnarvaez |
erikos: ok, so no webkit2 in 0.98 |
14:42 |
SeanDaly |
dnarvaez: by supporting old sugar you mean what, that existing Activities will run over HTML based Sugar? |
14:42 |
llaske |
Walter: Yes but Sugar 0.98 (OLPC 13.1.0) has yet some issue on the XO 1, it's why we choose to deploy 0.96 instead (OLPC 12.1.0) |
14:42 |
dnarvaez |
SeanDaly: that html activities will run on existing sugar versions |
14:43 |
|
SeanDaly: (we don't have a plan about an html based sugar yet, we are still only discussing html activities on gtk sugar) |
14:43 |
gonzalo_odiard |
anyway, i think we can define what is possible to do with sugar 0.96/8, may be no all is possible in a web act, but reading and writing the journal is a first stage |
14:43 |
|
IgnacioUy has left #sugar-meeting |
14:43 |
llaske |
You should be inspired by guys from PhoneGap/Cordoba: the find the way to run HTML5 activities on ANY operating system and device ! |
14:44 |
|
We should be inspired... |
14:44 |
dnarvaez |
I propose that we start from the 0.100 implementation, if people care about 0.98 it can be added one way or another (using console-message in the worst casee) |
14:44 |
manuq |
+1 |
14:44 |
gonzalo_odiard |
llaske, is not inspiration, is implementation the problem :) |
14:45 |
llaske |
dnarvaez: +1, we just need to isolate the Sugar interface part of the toolkit |
14:45 |
gonzalo_odiard |
then, we need port Browse to webkit2? |
14:45 |
dnarvaez |
llaske: yup |
14:45 |
manuq |
no need to, imh |
14:45 |
erikos |
dnarvaez: I am still not sure if webkit1 runs alongside webkit2 |
14:45 |
|
http://koji.fedoraproject.org/[…]o?packageID=10635 |
14:45 |
SeanDaly |
dnarvaez: oh ok clear... in that case i would say if HTML-based Activities unavailable for existing deployments, would be complicated to communicate |
14:45 |
dnarvaez |
manuq: gonzalo_odiard yeah not necessarily, might not be hard though |
14:46 |
walterbender |
SeanDaly: we already have that issue re GTK3 activities |
14:46 |
gonzalo_odiard |
SeanDaly, in fact is a new development |
14:46 |
walterbender |
SeanDaly: ASLO can help with making sure users don't download versions that they cannot run |
14:46 |
dnarvaez |
I will take care of posting a communication proposal |
14:46 |
|
or code :) |
14:46 |
erikos |
dnarvaez: yes, 0.100 implementation should be the first goal |
14:46 |
dnarvaez |
for 0.100 that is |
14:46 |
SeanDaly |
walterbender: yes I had gathered... |
14:46 |
erikos |
dnarvaez: I think backwards comp. is a soft goal here |
14:47 |
|
and we should not block hard on it |
14:47 |
dnarvaez |
erikos: yup agreed |
14:47 |
walterbender |
yes... let's get it correct on 0.100 |
14:47 |
llaske |
I'm sure we could support both existing and future deployment with few cost |
14:47 |
walterbender |
0.100 is going to be so great... everyone will want to upgrade :) |
14:47 |
dnarvaez |
hehe |
14:48 |
erikos |
back in 5 |
14:48 |
dnarvaez |
so we have more or less a plan on the shell integration |
14:48 |
walterbender |
now we need to go from ideas to code |
14:48 |
dnarvaez |
we have manuq researching the toolkit |
14:49 |
llaske |
target is 0.100 but we could support 0.96+ with some performance issue (console-message) |
14:49 |
dnarvaez |
llaske: yup, I think that's fine |
14:49 |
cjb |
hi all, just listening for now :) |
14:49 |
dnarvaez |
is someone planning to look at datastore/presence? |
14:49 |
|
it woudl really useful to have some kind of API proposal |
14:50 |
|
hey cjb |
14:50 |
cjb |
dnarvaez: have we picked an IPC mechanism? |
14:50 |
llaske |
just to be sure: the question is not to reimplement it but map it to existing Sugar API ? |
14:50 |
cjb |
datastore and presence probably come pretty quickly, but need to work out how they're going to be talked to |
14:50 |
|
llaske: I don't think it's desirable to reuse an existing Sugar API for these |
14:51 |
gonzalo_odiard |
we moved to webkit on sugar 0.96, then backward compatibility support will not be so far |
14:51 |
dnarvaez |
cjb: there has been some discussion about it on the mailing list, but we didn't pick one yet |
14:51 |
cjb |
because collaboration between pre-html5 (telepathy) and html5 won't work anyway |
14:52 |
walterbender |
if we can build something robust in html5 we may want to migrate even the old apps to it |
14:52 |
dnarvaez |
cjb: so you are saying we should implement new datasto |
14:52 |
llaske |
cjb: okay for telepathy but not true for DataStore |
14:52 |
dnarvaez |
cjb: datastore/collaboration for the html5 activities? |
14:52 |
cjb |
dnarvaez: yeah |
14:53 |
|
or at least, I'm saying that I don't think we should feel tied down by API compatibility |
14:53 |
llaske |
I'm not sure it's a good idea to reimplement datastore/telepathy using HTML5 stuff |
14:54 |
gonzalo_odiard |
we already decided go for the webkit route, then we will have a python activity running to do the bridge from python to javascript |
14:54 |
llaske |
Break journal compatibility ? What about backup and XS ? |
14:54 |
|
gonzalo_odiard: +1 |
14:54 |
cjb |
gonzalo_odiard: that doesn't sound like it would work on Android |
14:54 |
|
I'm not saying Android ought to be the primary use case or anything |
14:54 |
dnarvaez |
cjb: what I was thinking is to define a js API and somehow map it to the current services, but already thinking the implementation might be different in the future (or on other platforms) |
14:54 |
gonzalo_odiard |
cjb, we will need implement another bridge |
14:54 |
llaske |
cjb: Android is not the subject of this meeting :-) |
14:55 |
cjb |
llaske: disagree |
14:55 |
|
sdanielf <sdanielf!~dfrancis@r186-49-39-43.dialup.adsl.anteldata.net.uy> has joined #sugar-meeting |
14:55 |
|
daroal has quit IRC |
14:55 |
manuq |
hi sdanielf! |
14:55 |
cjb |
again, Android's not the primary platform, but it's on-topic to think about how the decisions we make would work for running HTML5 Sugar on other platforms |
14:55 |
sdanielf |
hi manuq, all |
14:56 |
|
daroal <daroal!~daroal unaffiliated/daroal> has joined #sugar-meeting |
14:56 |
dnarvaez |
I agree that we should keep the Android use case in mind |
14:56 |
cjb |
dnarvaez: sounds good |
14:56 |
llaske |
cjb: like gonzalo said, it's just a new bridge |
14:56 |
gonzalo_odiard |
cjb, anyway, we will not have the same apis on android for datastore or colaboration, right? |
14:56 |
|
kkthecoder has quit IRC |
14:56 |
cjb |
gonzalo_odiard: from the point of view of the HTML5 app? |
14:56 |
gonzalo_odiard |
cjb, no, on the os |
14:57 |
|
IgnacioUy <IgnacioUy!~ignacio@r190-132-43-111.dialup.mobile.ancel.net.uy> has joined #sugar-meeting |
14:57 |
dnarvaez |
llaske: well the API needs to be generic enough that you can bridge it to some other services on android |
14:57 |
cjb |
agreed |
14:57 |
gonzalo_odiard |
cjb, the html5 will talk with a bridge with the same api |
14:57 |
dnarvaez |
llaske: if it's strictly tied to the current services, it might not implementable somehwere else |
14:57 |
llaske |
dnarvaez: yes |
14:57 |
|
linsock has quit IRC |
14:57 |
cjb |
yeah, I'm just saying that Python shouldn't be part of the HTML5 activity spec |
14:57 |
|
one bridge of many is fine :) |
14:57 |
gonzalo_odiard |
cjb, ok |
14:58 |
llaske |
okay, we should write a generic API that work today on Python and tomorrow on Android |
14:58 |
gonzalo_odiard |
+1 |
14:58 |
cjb |
+1 |
14:58 |
manuq |
feels agreement |
14:59 |
llaske |
BTW, more easy to say that to do :-) need to have a good knowledge of today and tomorrow |
14:59 |
dnarvaez |
going back to my initial question, anyone that would take care of writing a proposal for it? :) |
14:59 |
|
llaske: yes, it's hard :) |
14:59 |
|
we can iterate on it though |
15:00 |
llaske |
Sorry I don't have a sufficient knowledge of Telepathy :-( |
15:00 |
gonzalo_odiard |
dnarvaez, any other big question to solve? |
15:00 |
dnarvaez |
llaske: want to take the ds one? :) |
15:00 |
gonzalo_odiard |
may be we can separate the tasks to research |
15:00 |
llaske |
Yes I can try do a proposal on it. |
15:00 |
gonzalo_odiard |
ui widgets |
15:00 |
manuq |
excellent |
15:01 |
gonzalo_odiard |
webkit2 migration |
15:01 |
dnarvaez |
nope I don't think I have other big questions in mind |
15:01 |
|
llaske: great |
15:01 |
manuq |
gonzalo_odiard: I think we are already on that |
15:01 |
dnarvaez |
manuq will solve UI widgets :P |
15:01 |
manuq |
maybe sdanielf can join me? |
15:01 |
sdanielf |
sure |
15:01 |
dnarvaez |
I will try to take a look to the collaboration stuff then, ipc is related really |
15:02 |
manuq |
sdanielf: excellent, let's talk later |
15:02 |
dnarvaez |
anyone have questions? |
15:02 |
walterbender |
so we have at least the basics covered :) |
15:02 |
dnarvaez |
something that would be great is to have people try to write html activities |
15:03 |
gonzalo_odiard |
may be we can define a new meeting in two weeks? |
15:03 |
sdanielf |
dnarvaez: What do you think about porting any simple activity? |
15:04 |
dnarvaez |
sdanielf: sure that would be great |
15:04 |
cjb |
in case anyone hasn't seen it, cscott's http://nell-colors.github.cscott.net/ may be helpful for reference |
15:04 |
walterbender |
is writing a simple html activity too... |
15:04 |
cjb |
(has a Sugar toolbar, does datastore using HTML5 localstorage) |
15:04 |
llaske |
I've already wrote 3 HTML5 activities :-) |
15:05 |
cjb |
https://github.com/cscott/nell-colors for the code |
15:05 |
llaske |
I will adapt them to the new framework |
15:05 |
dnarvaez |
gonzalo_odiard: I like ml discussion more because evryone can participate but a meeting will probably be necessary at some point |
15:05 |
manuq |
cjb: yeah, I was looking at cscott's neil-colors |
15:05 |
|
fimparatta has left #sugar-meeting |
15:05 |
|
IgnacioUy has left #sugar-meeting |
15:06 |
llaske |
walterbender: really ? |
15:06 |
walterbender |
llaske: I am trying in any case :P |
15:06 |
dnarvaez |
walterbender: release early :) |
15:06 |
walterbender |
dnarvaez: will do... |
15:07 |
dnarvaez |
ok if no one has other questions I think we are done with this meeting |
15:07 |
walterbender |
dnarvaez: thanks for organizing it |
15:07 |
cjb |
dnarvaez: thanks! |
15:07 |
llaske |
thanks to all |
15:07 |
manuq |
yes, and thanks all for discussing |
15:07 |
dnarvaez |
let's keep the threads on the mailing list going and if necessary let's have another meeting in a bit |
15:07 |
|
thanks :) |
15:08 |
daroal |
thank you all for such a focused meeting in such an extensive matter :-) |
15:08 |
manuq |
dnarvaez: yes as gonzalo_odiard said, a meeting in two weeks with the homework done would be great |
15:08 |
garycmartin |
Thanks all! |
15:08 |
gonzalo_odiard |
dnarvaez, good work! |
15:11 |
|
Rogelio has left #sugar-meeting |
15:12 |
|
suraj has quit IRC |
15:12 |
|
SeanDaly has quit IRC |
15:15 |
|
llaske has quit IRC |
15:15 |
|
nitika has left #sugar-meeting |
15:19 |
|
bururez has quit IRC |
15:26 |
erikos |
#endmeeting |
15:26 |
meeting |
Meeting ended Mon Apr 22 15:26:15 2013 UTC. Information about MeetBot at http://wiki.debian.org/MeetBot. (v 0.1.4) |
15:26 |
|
Minutes: http://meeting.sugarlabs.org/s[…]-22T14:04:27.html |
15:26 |
|
Log: http://meeting.sugarlabs.org/s[…]13-04-22T14:04:27 |