Hi,

Here is the log of the chatroom at http://farsides.com/chat/ (or 
irc://irc.freenode.net/#farsides) for the 2011-04-29.


2011-04-29 01:02:05+0000 dachary (dachary) is now online
2011-04-29 01:59:34+0000 dachary (dachary) is now online
2011-04-29 06:39:22+0000 antoviaque (antoviaque) is now online
2011-04-29 07:40:39+0000 <antoviaque> hi all : )
2011-04-29 07:54:49+0000 tartarugafeliz (tartarugafeliz) is now online
2011-04-29 08:46:23+0000 dachary (dachary) is now online
2011-04-29 09:37:11+0000 <dachary> \o
2011-04-29 09:37:41+0000 <antoviaque> I'm trying to add the like/send button on 
the invite view : )
2011-04-29 09:39:56+0000 <antoviaque> btw is there a way to see it with the 
?skin parameter? I found http://plebia.org:4923/static/?skin=invitation_owner 
but not the one where the user enters the list of emails/usernames
2011-04-29 09:41:42+0000 <antoviaque> dachary: 
2011-04-29 09:41:43+0000 <dachary> hum
2011-04-29 09:42:18+0000 <dachary> http://plebia.org:4923/static/?skin=advertise
2011-04-29 09:42:46+0000 <dachary> I had to chose a name different than 
invitation antoviaque
2011-04-29 09:42:51+0000 <dachary> to avoid confusion
2011-04-29 09:42:57+0000 <dachary> and make sure you would not guess it ;-)
2011-04-29 09:43:11+0000 <dachary> tartarugafeliz: good morning young lady
2011-04-29 09:43:22+0000 <tartarugafeliz> good morning!! :D
2011-04-29 09:43:36+0000 <antoviaque> dachary: ah, thanks, I like puzzles ;p
2011-04-29 09:44:26+0000 <antoviaque> ah, yes, i'm stupid, i tried all but that 
one : )
2011-04-29 09:44:33+0000 <antoviaque> thanks
2011-04-29 09:47:21+0000 <dachary> yw :-)
2011-04-29 09:50:24+0000 <dachary> I discussed with a skilled Symfony developer 
yesterday. He pledged to assist (and I trust he will) with wisdom and advices 
should we decide for this framework for the e-commerce part of cardstories. I 
describe the business model and he said that would be straightforward with a 
few carefully chosen components.
2011-04-29 09:50:27+0000 <dachary> antoviaque: ^
2011-04-29 09:51:20+0000 <antoviaque> dachary: uh, cool
2011-04-29 09:51:57+0000 <antoviaque> you know I worked at Sensio for two 
weeks? *trembles from the bad memory* ;p
2011-04-29 09:52:35+0000 <antoviaque> And you would want to work on it when we 
reach that stage? : )
2011-04-29 09:52:58+0000 <dachary> :-) I remember, yes. I figure you would be 
favorable to symfony because you have had a little practice.
2011-04-29 09:54:17+0000 <dachary> I would want to, yes, but not alone. I would 
want to code & understand but not be the lead. Because there will be an endless 
list of things to change, improve etc. And I know I'll eventually get bored.
2011-04-29 09:54:40+0000 <dachary> I'm told there are well integrated unit 
tests. 
2011-04-29 09:55:25+0000 <dachary> What really makes *all* the difference is 
knowing that I can rely on a reliable and wise and skilled developer. I would 
work on cake php with such an assistance ;-)
2011-04-29 09:56:05+0000 <antoviaque> ok - yes, with this kind of framework it 
can really be a huge difference : )
2011-04-29 09:56:14+0000 <dachary> (actually I did some cakephp in the past... 
only to discover the developer who claimed to know it had no clue)
2011-04-29 09:56:42+0000 <antoviaque> ahahah
2011-04-29 10:27:29+0000 tempuramerino (tempuramerino) is now online
2011-04-29 10:35:21+0000 <dachary> antoviaque: regarding the disk IO problem 
that drove me nuts yesterday, I was able to reproduce it with 
2011-04-29 10:36:02+0000 <dachary> mkdir -p /tmp/data ; fio --runtime=300 
--time_based --name=random-read --rw=randread --size=128m 
--directory=/scratch/loic
2011-04-29 10:36:14+0000 <dachary> mkdir -p /tmp/data ; fio --runtime=300 
--time_based --name=random-read --rw=randread --size=128m --directory=/tmp/data
2011-04-29 10:37:41+0000 <antoviaque> what was the disk io issue exactly?
2011-04-29 10:39:24+0000 <antoviaque> Starting with the easy part of the FB 
integration btw: http://plebia.org:4923/static/?skin=advertise : )
2011-04-29 10:45:27+0000 <antoviaque> btw I need to pass the URL of the game to 
the FB inviter. What's the best approach to pass this as an iframe parameter ?
2011-04-29 10:45:29+0000 <antoviaque> dachary: 
2011-04-29 10:50:29+0000 <dachary> mangare
2011-04-29 10:50:40+0000 <dachary> bbl
2011-04-29 10:55:12+0000 antoviaque1 (antoviaque1) is now online
2011-04-29 10:55:20+0000 <antoviaque1> bon ap : )
2011-04-29 10:56:07+0000 <antoviaque1> other question for when you come back :D 
2011-04-29 11:00:13+0000 <antoviaque1> I need to add meta-data when serving 
games URLs ( http://ogp.me/ ), which will provide the information to display 
for a given game invite when the URL is shared - what's the best way to do 
that? We can't rely on JS to populate the fields here, so we would need to 
serve the HTML from the server...
2011-04-29 11:45:18+0000 <dachary> back
2011-04-29 11:46:30+0000 <dachary> I need to complete my report and I'll get 
back in a few minutes
2011-04-29 11:46:33+0000 <antoviaque1> I'm also starting to look at oauth 
authentification (FB) - should I rather add a proxy or look at the auth module?
2011-04-29 11:46:36+0000 <antoviaque1> ok!
2011-04-29 11:47:05+0000 antoviaque (antoviaque) is now online
2011-04-29 11:52:59+0000 * antoviaque thinks loic is going to regret saying 
that he didn't get enough questions
2011-04-29 11:53:01+0000 <antoviaque> :P
2011-04-29 12:16:06+0000 <dachary> antoviaque: :-D
2011-04-29 12:16:46+0000 <dachary> btw I need to pass the URL of the game to 
the FB inviter. What's the best approach to pass this as an iframe parameter ?
2011-04-29 12:16:55+0000 <dachary> I'm looking into this now
2011-04-29 12:18:31+0000 <dachary> antoviaque: I'm pleased to answer your 
questions actually ;-)
2011-04-29 12:20:44+0000 <antoviaque> kewl :D
2011-04-29 12:20:52+0000 <antoviaque> Others will come then ;p
2011-04-29 12:22:10+0000 <dachary> passing the URL you mean like adding url=XXX 
to the iframe query string ? 
2011-04-29 12:22:16+0000 <antoviaque> yep
2011-04-29 12:23:27+0000 <dachary> 
http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fplebia.org%3A4923%2Fstatic%2F%3Fgame_id%3D3&layout=standard&width=450&show_faces=false&action=recommend&colorscheme=light&font&height=80&url=foobar
 ? 
2011-04-29 12:23:48+0000 <antoviaque> exactly
2011-04-29 12:23:59+0000 * dachary thinking
2011-04-29 12:25:59+0000 <dachary> in this case the url would be the permalink 
of the game http://plebia.org:4923/static/?game_id=XX&player_id=nickname
2011-04-29 12:26:03+0000 <dachary> right ? 
2011-04-29 12:26:16+0000 <dachary> hum
2011-04-29 12:26:17+0000 <dachary> no
2011-04-29 12:26:19+0000 <dachary> just the game_id
2011-04-29 12:26:21+0000 <antoviaque> without the nickname, since different 
people will see it
2011-04-29 12:26:22+0000 <antoviaque> yep
2011-04-29 12:26:26+0000 <dachary> http://plebia.org:4923/static/?game_id=XX
2011-04-29 12:26:50+0000 <antoviaque> then it will use oauth when people arrive 
to identify them
2011-04-29 12:28:32+0000 <dachary> I would write, in the HTML, 
http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fplebia.org%3A4923%2Fstatic%2F%3Fgame_id%3D3&layout=standard&width=450&show_faces=false&action=recommend&colorscheme=light&font&height=80&url={URL}
2011-04-29 12:29:31+0000 <dachary> and I will modify cardtories js to rewrite 
{URL} with an URLencoded URL to the game in each iframe src attribute 
2011-04-29 12:29:49+0000 <dachary> would that be good for you antoviaque ? 
2011-04-29 12:30:00+0000 <antoviaque> would be perfect yep
2011-04-29 12:31:01+0000 <antoviaque> maybe {GAME_URL} in case we need to have 
different urls?
2011-04-29 12:35:09+0000 <antoviaque> dachary: 
2011-04-29 12:36:33+0000 <dachary> yes
2011-04-29 12:36:38+0000 * dachary writing a ticket
2011-04-29 12:38:31+0000 <dachary> http://cardstori.es/trac/ticket/15
2011-04-29 12:38:44+0000 <antoviaque> antoviaque: Btw it's the first time I use 
git - so far I've put my changes to a 'fbintegration' branch. What's best to 
publish? Just make the git repository accessible on a URL?
2011-04-29 12:38:51+0000 <antoviaque> gargl, I write to myself ;p
2011-04-29 12:38:53+0000 <antoviaque> dachary: 
2011-04-29 12:39:06+0000 <dachary> ?
2011-04-29 12:39:12+0000 <dachary> ahahah
2011-04-29 12:39:41+0000 <dachary> yes, just make sure your git can be read 
somwhere 
2011-04-29 12:42:38+0000 <antoviaque> ever considered github? I know you don't 
like to externalize data, but I'm more thinking of the pull requests management 
features
2011-04-29 12:44:14+0000 <antoviaque> that part sucks from a user experience 
perspective in launchpad, I've always been curious about how it's done in github
2011-04-29 12:45:24+0000 <dachary> you are welcome to mirror the repository on 
github or gitorious, of course !
2011-04-29 12:45:54+0000 <dachary> the beauty of git is that you don't have to 
worry about where repositories are hosted
2011-04-29 12:46:26+0000 <antoviaque> yup, I like this part
2011-04-29 12:46:45+0000 <antoviaque> gitorious = free software?
2011-04-29 12:46:50+0000 <dachary> i will keep track of the repositories
2011-04-29 12:46:55+0000 <dachary> yes, gitorious is free
2011-04-29 12:47:15+0000 <dachary> I considered installing it but it's complex 
and ruby based. 
2011-04-29 12:54:51+0000 <antoviaque> i can imagine
2011-04-29 13:04:23+0000 <antoviaque> https://gitorious.org/cardstories
2011-04-29 13:04:29+0000 <antoviaque> I added you as an administrator
2011-04-29 13:08:52+0000 <antoviaque> It seems good - missing an issue tracker 
compared to github, but the user experience is good
2011-04-29 13:12:11+0000 <dachary> I recorded the URL
2011-04-29 13:16:56+0000 * antoviaque is trying to figure out how the pull 
requests process works there
2011-04-29 13:21:35+0000 <dachary> pull requests ? 
2011-04-29 13:21:47+0000 <dachary> hum
2011-04-29 13:21:53+0000 <dachary> I don't think you ever pull
2011-04-29 13:21:57+0000 <dachary> you push to gitorious
2011-04-29 13:22:00+0000 <antoviaque> It's missing a few things compared to 
github (inline comments of merge requests, ticket system integration, etc.), 
but seems fine - https://gitorious.org/cardstories/cardstories/merge_requests/1
2011-04-29 13:22:02+0000 <dachary> no ? 
2011-04-29 13:22:11+0000 <dachary> :-D
2011-04-29 13:22:16+0000 <dachary> ok
2011-04-29 13:22:21+0000 <antoviaque> ;p
2011-04-29 13:22:30+0000 <dachary> Don't mind me today, I'm only half human.
2011-04-29 13:22:36+0000 <antoviaque> ahahah
2011-04-29 13:25:22+0000 <antoviaque> Btw will you get a chance to look at my 
other questions ? Otherwise I'll put them as tickets if you want
2011-04-29 13:37:28+0000 <dachary> I confess I went back to finish the post 
http://dachary.org/?p=407 and discuss it with sim & sylvain. I've obsessed 
about it. 
2011-04-29 13:37:34+0000 <dachary> I'm back now
2011-04-29 13:37:39+0000 <dachary> looking at the other questions
2011-04-29 13:38:15+0000 <antoviaque> no worries - I don't mind if I don't get 
the answers immediately : )
2011-04-29 13:38:19+0000 <antoviaque> It's more to not forget
2011-04-29 13:38:23+0000 <antoviaque> thanks : )
2011-04-29 13:38:58+0000 <dachary> I need to add meta-data when serving games 
URLs ( http://ogp.me/ ), which will provide the information to display for a 
given game invite when the URL is shared - what's the best way to do that? We 
can't rely on JS to populate the fields here, so we would need to serve the 
HTML from the server...
2011-04-29 13:39:08+0000 * dachary trying to understand
2011-04-29 13:40:09+0000 <antoviaque> When an URL is passed to FB, FB 
revetreives the shared URL to get additional info from metadata in the HTML 
returned by the URL
2011-04-29 13:40:21+0000 <antoviaque> (thumbnail, title, description...)
2011-04-29 13:40:33+0000 <dachary> hum
2011-04-29 13:42:21+0000 <dachary> interesting problem
2011-04-29 13:44:40+0000 <dachary> I can see how to hack it easily. Not sure 
how to properly do it.
2011-04-29 13:45:38+0000 <dachary> hack it : the static pages are served by the 
game server. It could rework them to add game related information using a 
template system from twisted.web
2011-04-29 13:46:40+0000 <dachary> however, it would break the separation 
between the webservice that's pure JSON based and turn it into a CMS. Although 
small... it's a slipery slope.
2011-04-29 13:47:35+0000 <antoviaque> yup
2011-04-29 13:48:18+0000 <dachary> the HTML page could be created when the game 
is created instead of being created on the fly
2011-04-29 13:48:27+0000 <antoviaque> this tends to advocate toward hiding the 
webservice behind a proxy, no? That could help with oauth too, no?
2011-04-29 13:49:20+0000 <dachary> I think it would make sense to create an 
HTML export of the game that complies with http://ogp.me/. 
2011-04-29 13:49:59+0000 <dachary> I'll think about it. 
2011-04-29 13:50:04+0000 <antoviaque> ok
2011-04-29 13:50:13+0000 <dachary> First tell me more about what you want to do 
with oauth ? 
2011-04-29 13:51:33+0000 <dachary> FYI, I wrote a twisted based oauth client 
for opensocial, I know what it could do in this context (i.e. update the user 
metadata on the network, request the list of friends...) 
2011-04-29 13:51:44+0000 <dachary> antoviaque: ^
2011-04-29 13:52:31+0000 <antoviaque> When a player comes from facebook.com 
(referer), follow this use case 
http://developers.facebook.com/docs/reference/dialogs/oauth/ and then 
correspond with the faceboook servers to get the login details using the token
2011-04-29 13:52:53+0000 <antoviaque> to skip the name() view
2011-04-29 13:53:11+0000 <antoviaque> and provide the webservice with the right 
user id
2011-04-29 13:53:40+0000 <antoviaque> dachary: cool, is it on a url somewhere?
2011-04-29 13:54:28+0000 <dachary> 
http://opensocial.pokersource.info/pokersocial/
2011-04-29 13:54:35+0000 <antoviaque> (correspond with the faceboook servers => 
server side of course)
2011-04-29 13:55:11+0000 <dachary> using 
http://opensocial.pokersource.info/opensocial-python-client/
2011-04-29 13:55:44+0000 <dachary> if using oauth I will copy/paste from there
2011-04-29 13:56:00+0000 * dachary reading the use case
2011-04-29 14:01:43+0000 <antoviaque> ok - but why not a pure oauth library? To 
allow to integrate with opensocial more easily?
2011-04-29 14:02:12+0000 <antoviaque> Or because it's already done? ;p
2011-04-29 14:05:01+0000 <dachary> *this* is the purest oauth library you can 
find...
2011-04-29 14:05:12+0000 <dachary> oh
2011-04-29 14:05:13+0000 <dachary> sorry
2011-04-29 14:05:26+0000 <dachary> I will copy/paste from 
http://opensocial.pokersource.info/pokersocial/
2011-04-29 14:06:07+0000 <dachary> not from 
http://opensocial.pokersource.info/opensocial-python-client/ which is just the 
supporting library you need to know about if trying to make sense of 
http://opensocial.pokersource.info/pokersocial/
2011-04-29 14:07:50+0000 <antoviaque> yup - the first answer was actually 
answering my question, you understood right the first time : )
2011-04-29 14:08:06+0000 <dachary> antoviaque: where can I find the list of 
resources cardstories server can access once authorized ? ( I'm at 
http://developers.facebook.com/docs/reference/dialogs/oauth/ )
2011-04-29 14:08:32+0000 <dachary> ah
2011-04-29 14:08:34+0000 <dachary> got it
2011-04-29 14:08:41+0000 <dachary> 
http://developers.facebook.com/docs/reference/api
2011-04-29 14:08:49+0000 <antoviaque> yup
2011-04-29 14:08:53+0000 <dachary>  
https://graph.facebook.com/me?access_token=ACCESS_TOKEN 
2011-04-29 14:08:55+0000 <dachary> etc
2011-04-29 14:09:16+0000 <dachary> 
http://developers.facebook.com/docs/reference/api
2011-04-29 14:09:26+0000 <dachary> I can't access this URL, it asks for a login
2011-04-29 14:09:57+0000 <antoviaque> 
http://developers.facebook.com/docs/reference/api asks you to login?
2011-04-29 14:10:16+0000 <dachary> yes
2011-04-29 14:10:22+0000 <antoviaque> my god
2011-04-29 14:10:39+0000 <dachary> anyway, I get the idea from the example at 
http://developers.facebook.com/docs/authentication/ Server-side Flow
2011-04-29 14:11:01+0000 <dachary> as long as your token is valid, it will 
provide you with a JSON result containing the information you asked for
2011-04-29 14:11:09+0000 <antoviaque> It's true... Bunch of idiots
2011-04-29 14:11:29+0000 <antoviaque> yes, exactly
2011-04-29 14:13:35+0000 <dachary> I see how it should be done
2011-04-29 14:14:55+0000 <antoviaque> how would you want to proceed?
2011-04-29 14:16:53+0000 <dachary> it depends on what you plan to do with that 
2011-04-29 14:17:29+0000 <dachary> I'm unclear about the workflow you have in 
mind
2011-04-29 14:17:53+0000 <antoviaque> To start only authentication + retreiving 
the email could be a start
2011-04-29 14:17:56+0000 <antoviaque> well
2011-04-29 14:18:24+0000 <dachary> could it be used to retrieve the list of 
friends ? 
2011-04-29 14:19:04+0000 <dachary> antoviaque: ^
2011-04-29 14:19:18+0000 <antoviaque> The idea is that when someone invites 
people on Facebook (by posting the link to a game), they would click on the 
link, then instead of being prompted for a user name/email it would get the 
oauth token to fetch the email
2011-04-29 14:19:27+0000 <antoviaque> Potentially yes, but to start no
2011-04-29 14:19:44+0000 <dachary> I mean is it possible at all ? 
2011-04-29 14:19:51+0000 <dachary> to get the list of friends with oauth
2011-04-29 14:20:05+0000 <antoviaque> Ah yes, it is possible
2011-04-29 14:20:15+0000 <antoviaque> but right now we don't need it
2011-04-29 14:20:30+0000 <dachary> understood
2011-04-29 14:20:40+0000 <dachary> is it possible to retrieve a unique ID for a 
user ? 
2011-04-29 14:21:33+0000 <dachary> antoviaque: 
2011-04-29 14:21:36+0000 <antoviaque> yes
2011-04-29 14:21:43+0000 <antoviaque> a numerical id
2011-04-29 14:21:45+0000 <dachary> ok
2011-04-29 14:21:50+0000 <antoviaque> {    "id": "220439",    "name": "Bret 
Taylor",    "first_name": "Bret",    "last_name": "Taylor",    "link": 
"http://www.facebook.com/btaylor";,    "username": "btaylor",    "gender": 
"male",    "locale": "en_US" }
2011-04-29 14:22:15+0000 <dachary> it's essentiall the same as facebook connect 
? why use oauth instead of facebook connect ? 
2011-04-29 14:22:25+0000 <dachary> I don't know about facebook connect really
2011-04-29 14:22:33+0000 <dachary> is there a link where I can read about it ? 
2011-04-29 14:22:34+0000 <antoviaque> Facebook connect now uses oauth
2011-04-29 14:22:39+0000 <dachary> ah
2011-04-29 14:22:43+0000 <dachary> ok
2011-04-29 14:22:47+0000 <dachary> so it is the same
2011-04-29 14:22:56+0000 <antoviaque> yes
2011-04-29 14:23:22+0000 * dachary trying to get the global picture ;-)
2011-04-29 14:24:02+0000 <antoviaque> yes, it's hard with fb - especially given 
that they change their minds all the time and the docs are nver really up to 
date ;p
2011-04-29 14:27:33+0000 <dachary> http://cardstori.es/trac/ticket/16
2011-04-29 14:29:06+0000 <dachary> Unless it's inconvenient, I would say it's 
better to retrieve the token client side only. 
2011-04-29 14:29:42+0000 <antoviaque> but then it gives no security?
2011-04-29 14:29:45+0000 <dachary> So that the server use the token given to it 
to retrieve the id 
2011-04-29 14:29:53+0000 <antoviaque> ahh
2011-04-29 14:30:02+0000 <dachary> the client would &token=TOKEN
2011-04-29 14:30:07+0000 <dachary> in each ajax call
2011-04-29 14:30:11+0000 <antoviaque> then good yup
2011-04-29 14:30:24+0000 <antoviaque> it avoids adding something in between
2011-04-29 14:30:26+0000 <dachary> the server would then issue a oauth request 
to fb to ack that the token is still valid and proceed
2011-04-29 14:30:40+0000 <antoviaque> yep
2011-04-29 14:30:57+0000 <antoviaque> it's really another mindset, I need to 
get used to it
2011-04-29 14:31:03+0000 <dachary> the 2 step confirmation does not require a 
server transaction, I think. It serves no useful purpose.
2011-04-29 14:31:26+0000 <antoviaque> I understand
2011-04-29 14:31:35+0000 <dachary> it's actually very similar to being 
authenticated in any framework, I don't feel lost ;-)
2011-04-29 14:32:20+0000 <dachary> I can take care of the server side of things.
2011-04-29 14:33:05+0000 <antoviaque> And I add the retreival of the token on 
the client side?
2011-04-29 14:33:06+0000 <dachary> it's going to be a drop in replacement of 
auth.py
2011-04-29 14:33:21+0000 <antoviaque> Cool, thanks a lot : )
2011-04-29 14:33:38+0000 <antoviaque> It will save me some trouble :D
2011-04-29 14:34:01+0000 <dachary> Yes. It would be difficult for you to start 
with this.
2011-04-29 14:34:17+0000 <dachary> Improving will be easier. Boostrapping is a 
little tricky.
2011-04-29 14:34:36+0000 <dachary> the deferred will make your head spin
2011-04-29 14:34:55+0000 <antoviaque> ahahah - yes, I prefer to go 
progressively : )
2011-04-29 14:35:25+0000 <dachary> back to the  http://ogp.me/
2011-04-29 14:38:47+0000 <dachary> antoviaque: how do you feel about static 
files being created at the same time as the game ? 
2011-04-29 14:40:04+0000 <dachary> I'm thinking that it would also provide a 
way to archive the completed games
2011-04-29 14:40:05+0000 <antoviaque> It would do the trick I think - I can't 
think of a scenario it wouldn't cover
2011-04-29 14:40:22+0000 <dachary> a game that has been completed won't change
2011-04-29 14:40:52+0000 <dachary> if it is dumped into a page with no ajax, it 
can be served & mirrored as static files
2011-04-29 14:40:56+0000 <dachary> I like that
2011-04-29 14:41:00+0000 <antoviaque> But how would you serve them? They need 
to be the same as the url players will click on, so how would that part work?
2011-04-29 14:41:46+0000 <dachary> static/28394.html 
2011-04-29 14:41:48+0000 <dachary> for instance
2011-04-29 14:42:18+0000 <dachary> when displaying the lobby of completed 
games, the server will fill the links with static pages instead of calls to the 
webservice
2011-04-29 14:42:27+0000 <dachary> no ajax
2011-04-29 14:42:54+0000 <antoviaque> Hmm, but then it would be a different url 
to actually play? not sure I get it
2011-04-29 14:43:32+0000 <dachary> let say it would still be possible to 
retrieve a completed game using the ?game_id=234
2011-04-29 14:44:12+0000 <dachary> but there would also be a static URL 
displaying the results of the completed game and this url would be used when 
displaying the "Finished" tab of the lobby 
2011-04-29 14:44:18+0000 <dachary> am I making sense ? antoviaque ^
2011-04-29 14:45:09+0000 <antoviaque> But you would have to share 
static/28394.html to allow the retreival of the metadata,no?
2011-04-29 14:45:15+0000 <dachary> should a robot try to index all the games, 
that will make a *HUGE* difference in the workload of the server. It will be 
dealing only with on going games. Not games that are completed.
2011-04-29 14:45:27+0000 <dachary> share ? 
2011-04-29 14:46:03+0000 <dachary> antoviaque: I'm not talking about *all* the 
pages. Just the static pages.
2011-04-29 14:46:10+0000 <dachary> of the completed games.
2011-04-29 14:46:35+0000 <dachary> On going games are another problem. I don't 
have a solution yet with regard to metadata
2011-04-29 14:46:47+0000 <dachary> on going => in progress
2011-04-29 14:46:48+0000 <antoviaque> ah - you're not talking about ogp.me 
anymore
2011-04-29 14:46:51+0000 <antoviaque> now I get it
2011-04-29 14:47:06+0000 <dachary> I am talking about ogp.me for completed games
2011-04-29 14:47:19+0000 <antoviaque> yup, that part works
2011-04-29 14:47:45+0000 <dachary> it makes sense to have a static page with 
the ogp.me meta data for completed games, not only because of ogp but also 
because of archiving & relieving the load of the server
2011-04-29 14:48:28+0000 <antoviaque> yup
2011-04-29 14:48:32+0000 <antoviaque> it would be better to have only one URL 
for indexation, but other than that seems good
2011-04-29 14:48:49+0000 <antoviaque> indexing
2011-04-29 14:49:45+0000 <dachary> what about this :
2011-04-29 14:49:54+0000 <antoviaque> (people may start sharing one while they 
play, and another URL once it's completed, thus splitting page 
rank/likes/bookmarks...)
2011-04-29 14:51:14+0000 <dachary> when a game is created, a static page is 
also created : static/203/the-sentence.html (same page as index.html currently 
). This page has the ogp metadata & all. It is used to play the game /203/ 
replacing ?game_id
2011-04-29 14:52:08+0000 <dachary> when a game is completed, the static page is 
updated. It has the same content only it contains a JSON describing the state 
of the game and the JS of cardstories will notice it and never do any ajax 
call. 
2011-04-29 14:52:26+0000 <antoviaque> ah, interesting
2011-04-29 14:52:36+0000 <dachary> if the display needs to be changed, all 
pages must be redrawn / redumped
2011-04-29 14:52:50+0000 <antoviaque> Because I was also thinking that there 
may be some dynamic elements displayed on the completed view in the future - 
maybe an account name, ranking, etc. So for search engines it's good but 
players may still need a dynamic view
2011-04-29 14:53:26+0000 <dachary> it can be dynamic
2011-04-29 14:53:32+0000 <antoviaque> I like this idea, it's sexy optimisation 
: )
2011-04-29 14:53:33+0000 <dachary> it does not need to
2011-04-29 14:53:36+0000 <antoviaque> yup
2011-04-29 14:53:55+0000 <dachary> from the point of view of the game server, 
there is no need. And embedding the game results in the dumped page saves this.
2011-04-29 14:55:35+0000 <dachary> I have a good feeling about dumping pages. 
But maybe I'm trying hard to find excuses to do that in a way that does not 
mimic the CMS logic. Maybe it's better to acknowledge that ogp needs a CMS 
logic. 
2011-04-29 14:55:57+0000 <dachary> I'll try to approach this from the point of 
view of the integration into symfony
2011-04-29 14:56:14+0000 <dachary> I'll leave this train of thought (static 
pages) for now.
2011-04-29 14:56:49+0000 <dachary> Let say symfony wants to be ogp compliant. 
2011-04-29 14:57:52+0000 <dachary> when serving a page, symfony replaces 
placeholders in the view. It will need to retrieve some data from the game in 
order to fill the og:title (with the sentence presumably)
2011-04-29 14:58:41+0000 <dachary> it's php therefore it will 
open("cardstori.es?game_id=234&action=game"), jsonparse the result and 
substitute the fields. 
2011-04-29 14:58:53+0000 <dachary> you will be ogp compliant using the CMS
2011-04-29 14:59:00+0000 <antoviaque> (yes - and the card for the thumbnail)
2011-04-29 15:00:01+0000 <dachary> that makes a lot more sense than dumping 
pages, don't you think ? 
2011-04-29 15:00:35+0000 <antoviaque> that was my first approach yes
2011-04-29 15:00:48+0000 <dachary> I should have listened :-(
2011-04-29 15:01:53+0000 <antoviaque> but it adds another layer, and I'm not 
used to the "pure webservice server-side" approach, so I'm not really able to 
say what's best here
2011-04-29 15:02:10+0000 <dachary> I don't feel too bad : you did not hint your 
thoughts, I missed nothing ;-)
2011-04-29 15:03:00+0000 <antoviaque> I did! :p
2011-04-29 15:03:05+0000 <dachary> you did ? 
2011-04-29 15:03:05+0000 <antoviaque> (03:48:28 PM) antoviaque: this tends to 
advocate toward hiding the webservice behind a proxy, no? That could help with 
oauth too, no?
2011-04-29 15:03:27+0000 <antoviaque> not very clear, I admit : )
2011-04-29 15:03:42+0000 <dachary> :-)
2011-04-29 15:03:51+0000 <dachary> the CMS would not be a proxy there
2011-04-29 15:04:19+0000 <antoviaque> For the static pages, it would
2011-04-29 15:04:45+0000 <dachary> hum
2011-04-29 15:04:49+0000 <dachary> I don't follow
2011-04-29 15:05:08+0000 <dachary> I see no proxy action here
2011-04-29 15:05:18+0000 <dachary> HTML delivered by the CMS
2011-04-29 15:05:24+0000 <dachary> ajax requests served by the game server
2011-04-29 15:05:42+0000 <dachary> both directly, noone is sitting in between
2011-04-29 15:05:52+0000 <antoviaque> hmm
2011-04-29 15:06:02+0000 <dachary> the CMS requires information from the game 
server to build the HTML page
2011-04-29 15:06:14+0000 <dachary> to create the ogp
2011-04-29 15:06:38+0000 <dachary> but it's using it as a websrevice, it's not 
shadowing the server behind himself
2011-04-29 15:07:07+0000 <dachary> and once the ogp fields are completed, the 
game is played without the CMS doing anything else
2011-04-29 15:07:10+0000 <antoviaque> uhuh, yes, you're right - it's not what I 
had in mind
2011-04-29 15:07:48+0000 <dachary> as it is, the game can be done from start to 
finish without reloading the HTML page
2011-04-29 15:08:44+0000 <dachary> it would actually be a catastrophy to use a 
CMS as a proxy, because it would not stand the long poll 
2011-04-29 15:09:59+0000 <dachary> anyway, bottom line is : if you want ogp 
we're probably better of trying to setup symfony sooner rather than later
2011-04-29 15:11:35+0000 <dachary> antoviaque: I think we've discussed & 
resolved all the questions you had for me. Am I missing anything ? 
2011-04-29 15:12:05+0000 <antoviaque> I think so yep : )
2011-04-29 15:12:39+0000 <antoviaque> And yes for symfony... Gargl!
2011-04-29 15:12:45+0000 <antoviaque> thanks a lot for your help!
2011-04-29 15:13:03+0000 <dachary> my pleasure
2011-04-29 15:13:33+0000 <dachary> The pieces of the puzzle start to fit 
together ;-)
2011-04-29 15:16:11+0000 <dachary> antoviaque: did you take a look at the 
symfony / facebook plugins or whatever ? 
2011-04-29 15:18:30+0000 <antoviaque> no - you think it would be better than 
getting the token client side?
2011-04-29 15:21:04+0000 <dachary> I don't know
2011-04-29 15:21:20+0000 <dachary> symfony will need to know about the user and 
its authentication
2011-04-29 15:21:40+0000 <dachary> therefore there is an intersection with the 
topic we discussed
2011-04-29 15:22:58+0000 <antoviaque> (btw http://cardstori.es/trac/ticket/17 )
2011-04-29 15:23:37+0000 * antoviaque looking at symfony
2011-04-29 15:24:24+0000 <antoviaque> symfony2? http://symfony.com/
2011-04-29 15:24:50+0000 <dachary> I suppose so
2011-04-29 15:26:54+0000 <antoviaque> "Be warned that Symfony 2.0 is not stable 
yet; use it with caution (current version is Beta 1)."
2011-04-29 15:27:10+0000 <antoviaque> 
http://www.symfony-project.org/plugins/sfFacebookConnectPlugin => only for 
symfony1
2011-04-29 15:27:30+0000 <dachary> if symfony has a facebook integration that 
shows a "i like" on a given page + collects the user data granted by facebook 
connect and let you say : "you need to login to proceed", it may very well be 
the case that we have to do nothing at all.
2011-04-29 15:36:46+0000 <antoviaque> hmm, 
http://www.symfony-project.org/plugins/sfFacebookConnectPlugin uses the old 
method, not oauth
2011-04-29 15:40:50+0000 * antoviaque looking at 
https://github.com/ruudk/OAuthBundle
2011-04-29 15:41:10+0000 <antoviaque> seems better - oauth, symfony2, and even 
twitter
2011-04-29 15:45:35+0000 <antoviaque> ah, more active: 
https://github.com/FriendsOfSymfony (found through http://symfony2bundles.org/ )
2011-04-29 15:49:55+0000 <dachary> I asked my symfony friend for advice
2011-04-29 15:50:13+0000 <dachary> that will cross reference your search
2011-04-29 15:50:24+0000 <antoviaque> ah cool
2011-04-29 15:50:25+0000 <antoviaque> thx
2011-04-29 16:01:12+0000 <dachary> 
http://www.symfony-project.org/plugins/sfFacebookConnectPlugin 
2011-04-29 16:01:21+0000 <dachary> il me dit celui la
2011-04-29 16:01:23+0000 <dachary> bon
2011-04-29 16:01:31+0000 <dachary> il a encore plus mal aux cheveux que moi
2011-04-29 16:02:26+0000 <dachary> je lui ai demandé s'il l'avait utilisé
2011-04-29 16:04:17+0000 <antoviaque> dachary: I'm thinking of putting the TODO 
from http://dachary.org/?p=313 and http://dachary.org/?p=377 in the tracker, 
that would allow me to make sure I've understood and reviewed everything, and 
update it with Deborah. What do you think?
2011-04-29 16:05:12+0000 <dachary> OAuthBundle ? 
2011-04-29 16:05:20+0000 <dachary> has fbconnect too ? 
2011-04-29 16:05:39+0000 <dachary> antoviaque: ok for the TOD
2011-04-29 16:05:40+0000 <dachary> O
2011-04-29 16:07:24+0000 <antoviaque> can you ask about the  
https://github.com/FriendsOfSymfony bundles (ie 
https://github.com/FriendsOfSymfony/FacebookBundle ) ?
2011-04-29 16:07:45+0000 <antoviaque> I still have to dig, but on first 
impression it looks more like the future
2011-04-29 16:08:06+0000 <dachary> I did
2011-04-29 16:08:35+0000 <dachary> He said he never tried to interface with 
facebook
2011-04-29 16:08:41+0000 <antoviaque> Oauthbundle had facebook oauth login yep
2011-04-29 16:09:01+0000 <antoviaque> but it's much less active than 
https://github.com/FriendsOfSymfony/FacebookBundle
2011-04-29 16:13:14+0000 <dachary> antoviaque: join #symfony-dev
2011-04-29 16:13:43+0000 <antoviaque> done
2011-04-29 16:13:43+0000 <dachary> http://www.joiz.ch/ uses FacebookBundle
2011-04-29 16:15:10+0000 <antoviaque> seems to work then : )
2011-04-29 16:15:25+0000 <dachary> antoviaque: you should exercise it
2011-04-29 16:15:35+0000 <dachary> it's not because a web site looks pretty 
that it works ;-)
2011-04-29 16:15:44+0000 <antoviaque> I did ;p
2011-04-29 16:15:59+0000 <antoviaque> I'm logged through FB
2011-04-29 16:16:34+0000 <dachary> are your user preferences registered ? 
2011-04-29 16:16:46+0000 <dachary> did it get your email ? 
2011-04-29 16:16:53+0000 <antoviaque> It got my name
2011-04-29 16:17:09+0000 <antoviaque> my avatar and my location
2011-04-29 16:17:12+0000 <dachary> do you have a profile or something ? 
2011-04-29 16:17:20+0000 <antoviaque> http://www.joiz.ch/profile/7637895e001bc5
2011-04-29 16:18:06+0000 <dachary> http://cl.ly/1W2O1E1d3E2l15310h1y
2011-04-29 16:18:48+0000 <antoviaque> noooo
2011-04-29 16:18:49+0000 <antoviaque> ;p
2011-04-29 16:19:05+0000 <dachary> lsmith on symphony gave me the link 
2011-04-29 16:19:22+0000 <dachary> he might now how much work was done to get 
there
2011-04-29 16:20:04+0000 <dachary> trouble with not publishing is that there is 
no telling if what we see is an easy adaptation of the bundle or a 2 weeks work 
from a skilled symfony dev ;-)
2011-04-29 16:20:38+0000 <dachary> ca fournit aussi like ? 
2011-04-29 16:20:40+0000 <antoviaque> ahah, yes ;p
2011-04-29 16:20:55+0000 <antoviaque> for like you don't need FB Connect
2011-04-29 16:20:55+0000 <dachary> it provides like also ? 
2011-04-29 16:21:09+0000 * dachary exhausted
2011-04-29 16:21:13+0000 <antoviaque> It's just the iframe to include
2011-04-29 16:21:23+0000 <dachary> ah right
2011-04-29 16:21:58+0000 <dachary> well, since the plugin retrieves the name + 
location, it will also retrieve the email, right ? 
2011-04-29 16:22:07+0000 <antoviaque> yes
2011-04-29 16:22:15+0000 <antoviaque> likely ;p
2011-04-29 16:22:22+0000 <antoviaque> it's the same type of exchange
2011-04-29 16:22:26+0000 <dachary> ok
2011-04-29 16:22:33+0000 <dachary> then it changes the picture quite a bit
2011-04-29 16:23:30+0000 <dachary> assuming symfony sets a cookie when you 
login with a session id, cardstories server can retrieve the cookie, lookup the 
user id from a sql table in symfony and be done with it.
2011-04-29 16:23:43+0000 <dachary> I already have the code to do exactly this.
2011-04-29 16:24:03+0000 <dachary> antoviaque: does this seem a viable solution 
to you ? 
2011-04-29 16:24:08+0000 antoviaque (antoviaque) is now online
2011-04-29 16:24:18+0000 <dachary> then it changes the picture quite a bit
2011-04-29 16:24:23+0000 <dachary> assuming symfony sets a cookie when you 
login with a session id, cardstories server can retrieve the cookie, lookup the 
user id from a sql table in symfony and be done with it.
2011-04-29 16:24:27+0000 <dachary> I already have the code to do exactly this.
2011-04-29 16:24:31+0000 <dachary> antoviaque: does this seem a viable solution 
to you ? 
2011-04-29 16:24:56+0000 <antoviaque> It seems to be, but I need to dig symfony 
a bit more to see how it would work exactly
2011-04-29 16:25:21+0000 <dachary> I have a good feeling about this
2011-04-29 16:25:46+0000 <dachary> because you're using tools that are used by 
a massive amount of people to do something very similar to what you're after
2011-04-29 16:26:17+0000 <dachary> i'll ask my friend about the session table
2011-04-29 16:27:04+0000 <antoviaque> cf #symfony-dev for details on the FB 
integration with FacebookBundle
2011-04-29 16:29:37+0000 <dachary> il est en train de parler du dev de 
facebookbundle ou bien de son integration ? c'est pas clair
2011-04-29 16:29:59+0000 <dachary> is he talking about the development ofthe 
bundle or the integration in the site, its not clear
2011-04-29 16:30:30+0000 <antoviaque> yes, that's why I asked about replicating 
the same result
2011-04-29 16:35:12+0000 <antoviaque> I'm going to try installing symfony + 
HelloBundle to get a better feel
2011-04-29 16:37:59+0000 <dachary> my friend tells me that we should avoid 
symfony2 if we're looking for stability and stay with 1.4 (facebookbundle 
requires symfony2)
2011-04-29 16:38:34+0000 <antoviaque> yup, symfony2 is in beta1 (apparently 
since this week)
2011-04-29 16:38:58+0000 <antoviaque> But the thing is, with Facebook there 
isn't such as thing as stability...
2011-04-29 16:39:15+0000 <dachary> the "bleeding edge" spirit is frightening
2011-04-29 16:39:40+0000 <antoviaque> What you want the most is a library which 
is active enough to follow the inexpected evolutions of the API
2011-04-29 16:39:50+0000 <dachary> if the 
http://www.symfony-project.org/plugins/sfFacebookConnectPlugin plugin does the 
work... 
2011-04-29 16:40:18+0000 <dachary> I asked my friend about this tradeoff
2011-04-29 16:40:31+0000 <dachary> the old way is broken or does it still work 
? 
2011-04-29 16:40:47+0000 <dachary> did they dare to *break* compatibility ? 
2011-04-29 16:40:57+0000 <dachary> I would not be suprised
2011-04-29 16:41:00+0000 <antoviaque> It's deprecated, so it will stop working 
sooner or later
2011-04-29 16:41:06+0000 <antoviaque> they break it all the time
2011-04-29 16:41:37+0000 <antoviaque> but let me have another look at this 
plugin
2011-04-29 16:41:46+0000 <dachary> it's a tough choice
2011-04-29 16:42:15+0000 <dachary> I think we should keep away from bleeding 
edge
2011-04-29 16:42:24+0000 <dachary> only we need facebook to allow for this ;-)
2011-04-29 16:43:19+0000 <dachary> He adds (rightfully) that we could also rely 
on OAuth plugin to do the work ourselves if it comes to that.
2011-04-29 16:43:33+0000 <antoviaque> yup
2011-04-29 16:48:47+0000 <dachary> I asked my friend about retrieving the  user 
id from the session cookie
2011-04-29 16:49:15+0000 <dachary> I think my friend would be most useful if we 
use 1.4 because he is familiar with it and will recognize the pitfalls
2011-04-29 16:49:22+0000 <dachary> that votes in favor
2011-04-29 16:52:48+0000 <antoviaque> but he didn't implement a FB app - while 
lsmith contributes to FacebookBundle and implemented what we want to do *keeps 
looking at FacebookConnectPlugin*
2011-04-29 16:56:33+0000 <dachary> yes
2011-04-29 16:56:35+0000 <dachary> tough choice
2011-04-29 16:57:21+0000 <dachary> that being said, the FB side of things si 
slim and amounts primarily to integrate facebook connect properly
2011-04-29 17:01:05+0000 <antoviaque> Yes, facebook connect + graph API (or 
REST in the case of sfFacebookConnectPlugin )
2011-04-29 17:08:19+0000 <antoviaque> Hmmm
2011-04-29 17:08:31+0000 <antoviaque> I'm really hesitating 
2011-04-29 17:08:56+0000 <antoviaque> My gut feeling says FacebookBundle
2011-04-29 17:09:12+0000 <antoviaque> But you say symfony1 so I don't know
2011-04-29 17:11:12+0000 <antoviaque> I think I'd rather try out 
FacebookBundle, and revert to sfFacebookConnectPlugin if blocked, rather than 
the other way round. At least in this scenario I'd learn about symfony2, which 
would be useful later on - while learning about symfony1 if we have to switch 
to FacebookBundle would be useless. But I'm really not sure.
2011-04-29 17:24:26+0000 <dachary> symfony 1 is 2 years old
2011-04-29 17:24:53+0000 <dachary> there is no version in between
2011-04-29 17:25:07+0000 <dachary> antoviaque: what do you make of this ? 
2011-04-29 17:26:02+0000 <antoviaque> not sure - but since it's developed 
mainly by Sensio, I guess they switched their new development projets to 
symfony2 
2011-04-29 17:27:21+0000 <antoviaque> but they should have at least got some 
bug fixes... weird
2011-04-29 17:29:57+0000 <dachary> people answer on symfony dev are working 
full time on symfony
2011-04-29 17:30:52+0000 <antoviaque> I've seen the recommendation to use sf2 ;p
2011-04-29 17:36:56+0000 antoviaque1 (antoviaque1) is now online
2011-04-29 18:01:13+0000 antoviaque (antoviaque) is now online
2011-04-29 19:15:32+0000 <dachary> antoviaque: I saw my symfony friend and is 
advised against symfony2.
2011-04-29 19:15:47+0000 <dachary> he said that what we want to do can be done 
in a week
2011-04-29 19:15:49+0000 <dachary> with 1.4
2011-04-29 19:16:03+0000 <dachary> there is no telling how long it will take 
with symfony2
2011-04-29 19:39:34+0000 <antoviaque> did he say why?
2011-04-29 19:39:56+0000 <antoviaque> one week seem a long time for something 
like this, no?
2011-04-29 19:55:15+0000 <dachary> one week to setup the ecommerce part of 
cardstories ? 
2011-04-29 19:55:24+0000 <dachary> including the fb auth
2011-04-29 20:12:19+0000 <antoviaque> ah, I thought you were just talking about 
fb auth
2011-04-29 20:17:09+0000 <antoviaque> he explained the reasoning for sticking 
to symfony1?
2011-04-29 20:25:04+0000 <antoviaque> not stable enough?
2011-04-29 20:46:29+0000 <dachary> antoviaque: he can predict how long things 
will take with 1.4
2011-04-29 20:46:32+0000 <dachary> he can't with 2
2011-04-29 20:46:47+0000 <dachary> he says many things changed and a number of 
plugins are not available yet
2011-04-29 20:47:02+0000 <dachary> in short he said he would be unsure and 
probably blocked
2011-04-29 20:47:19+0000 <antoviaque> I see
2011-04-29 20:47:41+0000 <antoviaque> hmm, ok then, I'll try installing a sf1, 
I'll see what it gives
2011-04-29 20:48:23+0000 <dachary> I will let you ponder this wisdom. I'll try 
to adapt cardstories to the symfony sessions tomorrow. It's the same for 1 and 
2. I won't be wasting my time either way.
2011-04-29 20:48:48+0000 <dachary> I hate the symfony installation. I hate CMS 
in general. But I make an effort ;-) http://cardstori.es/symfony/web/
2011-04-29 20:49:55+0000 <dachary> actually what irritated me most is not the 
mindless instructions and the 230498 command lines you need to enter because 
apt-get install is not ready
2011-04-29 20:50:05+0000 <dachary> I got tricked into using fastcgi fpm 
2011-04-29 20:50:21+0000 <dachary> which failed to work AND display any error 
message
2011-04-29 20:50:49+0000 <dachary> and I made my second discovery of the day : 
there is no need, and will never be no need for fastcgi
2011-04-29 20:51:01+0000 <dachary> run an apache instead, behind a reverse 
proxy 
2011-04-29 21:14:11+0000 dachary (dachary) is now online
2011-04-29 21:15:52+0000 <dachary> back
2011-04-29 21:16:34+0000 <dachary> antoviaque: my symfony friend proposes that 
I work with him on monday to sort things out
2011-04-29 21:17:10+0000 <dachary> I'll try to negotiate with my current 
employer to shift from monday to tuesday and take advantage of his offer
2011-04-29 21:35:11+0000 <antoviaque> Oh, that's really cool of him (and of 
you!)
2011-04-29 21:35:45+0000 <antoviaque> Do you want to make this a paid task?
2011-04-29 21:36:34+0000 <antoviaque> Checking to make sure I don't abuse your 
good will 
2011-04-29 21:44:35+0000 tempuramerino (tempuramerino) is now online
2011-04-29 22:34:44+0000 <dachary> 
http://www.symfony-project.org/jobeet/1_4/Doctrine/en/02
2011-04-29 22:35:01+0000 <dachary> antoviaque: I recognize your user stories, 
same graphics ;-)
2011-04-29 22:37:16+0000 <antoviaque> ahah
2011-04-29 22:52:05+0000 <antoviaque> brb - updated my ubuntu, let's see what 
all this fuss about unity is about
2011-04-29 23:15:03+0000 antoviaque (antoviaque) is now online
2011-04-29 23:21:37+0000 tempuramerino (tempuramerino) is now online
2011-04-29 23:24:57+0000 <antoviaque> ok it's really sh... *installs gnome3*
_______________________________________________
Farsides mailing list - [email protected]

Wiki:  http://farsides.com/
List:  http://farsides.com/ml/
Forum: http://farsides.com/forum/
Ideas: http://farsides.com/ideas/
Chat:  http://farsides.com/chat/

Reply via email to