Camelia, the Perl 6 bug

IRC log for #mojo, 2012-09-17

| Channels | #mojo index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
00:15 tempire Imptoved is improved but with a harder edge
02:02 vel joined #mojo
02:16 mandreacchio joined #mojo
02:18 Foxcool joined #mojo
02:47 noganex_ joined #mojo
03:16 mandreacchio joined #mojo
03:33 mandreacchio_ joined #mojo
03:37 memowe joined #mojo
04:26 dross joined #mojo
04:27 dross lo'
04:48 * dross yawns
05:18 * dross taps
05:18 dross I wish this channel would be move alive :|
05:34 * crab waves a claw experimentally
05:39 * dross flogs crab with his kangaroo tail
05:39 dross crabs are very tasty :3
05:41 crab hmm, i never realised that people might make food-related jokes about my nick.
05:42 dross well given I'm a furry, I tend to make all sorts of jokes :3
05:53 baton8 joined #mojo
06:02 mandreacchio joined #mojo
06:05 spleenjack joined #mojo
06:05 * dross ponders a content management system written in Mojo
06:05 dross plus mongodb
06:06 dross completely database oriented, optional caching
06:07 crab memowe wrote something like that, iirc.
06:08 crab it might have been called contenticious
06:09 dross crab: the ones I seen were all file based
06:10 dross besides :3 I'm bringing myself up to date with NOSQL databases, so I need to do all this for myself
06:10 dross as a crazy devop, I am master of all :3
06:11 dross I only wish I were a bit more artistic
06:12 dross I created a website once which was... artistic, but I've never since created something which didn't look tech/purpose oriented, which was back in 01'
06:33 crab i created a website once which was artistic, but they threw me in jail for a year.
06:36 dross :3
06:36 dross crab: well you know, many people would be disturbed with tons of crab porn
06:41 dross hmm
06:42 dross $r->get('*')->to('dynamic#pagegen');
06:42 dross if there a default? >.>
06:42 dross unless I say ' /' then it won't catch for /
06:43 crab so say /
06:43 dross but I want to catch everything :)
06:43 dross with one line
06:43 crab or /(*blah)
06:44 crab right, /(*blah) will match everything
06:44 pingup3rl joined #mojo
06:45 dross crab: I mean with just one line :)
06:45 dross both / and /foo
06:45 dross right now I've two lines, one /, the other /*
06:45 dross the other /admin
06:48 mandreacchio joined #mojo
06:49 fhelmber_ joined #mojo
06:51 crab hm.
06:53 crab get '/(*blah)' => {blah => ''} => ... will match both / and /anything
06:53 dross odd
06:53 crab what's odd about it?
06:55 throughnothing I have an app using Mojo::Plugin::Config, and when i use Test::Mojo->new('MyApp'); everything seems fine, but if i test it using Test::Mojo->new( MyApp->new ), I get an error from Plugin::Config, seems like it can't find the config file or something
06:55 throughnothing Use of uninitialized value $_[0] in substitution (s///) at ... File/Basename.pm
06:55 throughnothing line 342
06:56 throughnothing fileparse(): need a valid pathname at Mojolicious/Plugin/Config.pm line 42.
06:56 throughnothing but i don't get that when using Test::Mojo->new('MyApp'), strangely
07:01 dross crab: how would I do it though something like this?
07:01 dross $r->get('/(*blah)')->to('example#welcome');
07:02 dross it gives me a 'page not found ... yet!' when I do /
07:05 l3l1p joined #mojo
07:07 crab ...->get('/(*blah)', blah => '')...
07:07 crab you're specifying a default value for blah, that's all. see routing guide.
07:08 dross $r->get('/(*blah)', blah => '')->to('example#welcome');
07:08 dross doesn't work for /
07:11 crab oh, bah. route vs get again.
07:11 Vandal joined #mojo
07:13 crab probably you just pass {blah => ''} to get
07:13 crab yes, that works.
07:14 crab so just put {} around the default value.
07:14 crab ->route('/(*blah)', blah => '')->via('get') vs. ->get('/(*blah)', {blah => ''})
07:15 dross that works :3
07:15 dross ah
07:17 crab that little asymetry always bites me.
07:18 dross $r->route('/(*blah)', blah => '')->to('example#welcome');
07:18 dross that doesn't catch /
07:18 dross :/
07:19 dross err
07:19 dross I mean it doesn't catch /asdasd
07:19 dross or /blah
07:20 dross oh wait, changed the thing around, removed {} and now it won't do / :)
07:21 crab sigh.
07:21 crab just ignore me. everything i've said today is wrong.
07:21 crab read the routing guide.
07:21 dross :)
07:22 dross the get() section worked just fine though
07:22 crab it's actually ->route('/(*blah)')->to(..., blah => '')
07:22 dross ah
07:22 dross that works! thanks
07:23 dross now to play with mongodb and mojo
07:23 Averna joined #mojo
07:23 dross I can just fetch things out of the database to use as templates
07:23 Britzel joined #mojo
07:24 crab can you indeed.
07:25 dross silly people and their file system based CMSs :/
07:28 JiYu joined #mojo
07:35 kmx I was investigating why morbo autoreload feature is crashing my strawberry perl 5.16.1/32bit and it turns that there are two thread-unsafe pieces (you probably know that fork - used by morbo - is emulated by threads on perl@MSWin)
07:36 kmx First (crashing reliably) is Mojo::Reactor::EV and the second one (crashing not reliably but often) is IO::Socket::SSL (which leads to net::SSLeay)
07:37 kmx So conclusion is to set: MOJO_NO_TLS=1 + MOJO_REACTOR=Mojo::Reactor::Poll
07:38 pau4o joined #mojo
07:38 kmx just a note: the crashes happen on active perl as well
07:39 dross > implying windows development matters :3
07:39 dross kmx: make sure you file a bug report
07:39 kmx Well in fact it is not a bug in Mojo
07:40 kmx As for Net::SSLeay I try to track down what is the problem
07:42 kmx On Mojo side maybe in morbo forcing MOJO_REACTOR=Mojo::Reactor::Poll when running on MS Windows
07:46 kmx The workaround for thread-unsafety with Net::SSLeay it to "use Net::SSLeay" or "IO::Socket::SSL" in the main thread (which means before morbo starts forking);
07:50 kmx kmx: so it turns out that Net::SSLeay is quite ok as for the thread-safety but IO::Socket::SSL is somehow fragile
07:52 crab good job tracking them down
07:53 kmx proof of concept crash test: perl -Mthreads -e "threads->new(sub {require IO::Socket::SSL})->join for(1..500)"
07:53 dross :)
07:53 kmx crashes on all my Win32 perls, does not crash on my Linux boxes
07:54 dross does it crash on win64 per?
07:54 dross *perl
07:54 dross (sheer curiosity)
07:55 kmx 64bit strawberry 5.16.1 - crashed
07:55 dross ah
07:56 dross still, creating a ticket would be good. Those two features could be disabled for Windows until there's a fix on the upstream
07:56 dross user experience and what not
07:57 kmx I'll create a ticket for IO::Socket::SSL
07:58 kmx + workaround request for morbo (or I'll wait for sri here and ask him whether he would agree to put those two workadrounds in morbo)
07:59 dross kmx: what about hypnotoad?
08:01 kmx hypnotoad does not work on Windows (in fact it is disabled)
08:01 dross ah
08:02 kmx hypnotoad is based on fork() which is somehow emulated on Windows but the emulation is definitely not good enough for production
08:02 * dross only develops and deploys on *nix only
08:03 kmx IMHO for Windows some kind of multithreaded server (using perl's threads) is the way to go
08:04 dross probably the only reason to build a threaded server, for portability
08:06 kmx It could be definitely implemented portable using perl's threads but for UNIX users is there are less pains using  fork() approach (like morbo + hypnotoad)
08:09 mandreacchio joined #mojo
08:10 dross I think there should be another daemon written strictly for using threads
08:11 dross anyway, I need to get some sleep, g'night.
08:12 crab you should write a threaded server when you wake up tomorrow.
08:13 jamesw there should be a win32 equivalent of starman, ideally
08:14 mandreacchio joined #mojo
08:16 dross jamesw: indeed
08:20 Kwa left #mojo
08:20 Kwa joined #mojo
08:28 AmeliePoulain joined #mojo
08:37 ladnaV joined #mojo
08:40 pingup3rl joined #mojo
08:42 Vandal joined #mojo
09:23 arpadszasz joined #mojo
09:28 batman joined #mojo
09:29 marcus Hope everybody has a mojolicious day
09:31 memowe :)
09:36 sri kmx: i'm generally not a fan of "just create a ticket for it without discussion here"
09:39 sri in fact if ($^O eq 'MSWin32') { blocks make me angry
09:39 sri we once had a lot of them, it took so much hard work to get rid of them
09:40 sri there is pretty much no chance i would add new ones
09:43 sri marcus, crab, tempire: vote! https://github.com/kraih/mojo/pull/384
09:50 andrefs joined #mojo
09:54 kmx sri: I see your point, as you can read in the ticket I am ready to be rejected
09:57 sri we are shipping Morbo with support for both now over a year, wonder why nobody noticed that before
09:57 kmx sri: more important question than my ticket is how far we/you want Mojo to be perl threads friendly
09:58 sri kmx: is Mojo not threads friendly?
09:58 kmx sri: Mojo itself is thread-safe but at some point you load external modules (here IO::Socket::SSL + EV) which might not be
09:59 kmx sri: for example IO::Socket::SSl seems to work fine with perl threads if it loaded in the main thread before other threads are created
10:00 arthas joined #mojo
10:02 sri kmx: i'm actually pretty sure Morbo preloads IO::Socket::SSL in the main thread
10:02 sri Mojo::Server::Daemon > Mojo::IOLoop > Mojo::IOLoop::Server > IO::Socket::SSL
10:03 kmx sri: I think that Mojo::Server::Daemon is loaded via require after the fork
10:03 sri nope
10:04 sri https://github.com/kraih/mojo/blob/​master/lib/Mojo/Server/Morbo.pm#L8
10:05 asarch joined #mojo
10:05 kmx sri: you are right
10:05 sri marcus++ # voting
10:06 sri i've added another sentence to my comment btw. in case someone stumbles over it again in the future
10:09 sri i'm actually surprised EV installs on windows :)
10:09 kmx sri: I will test if IO::Socket::SSL part of the workaround can be left out (unfortunately I am not now at my devel PC)
10:10 kmx sri: mee too :) at it must a dependency of "something" as I am not aware I ever needed EV
10:10 sri i guess it falls back to select() on windows
10:11 sri btw. we plan to get rid of Mojo::Reactor::EV in the future
10:12 sri (for something better)
10:13 sri EV should be preloaded as well btw, i suppose it may simply not be thread-safe
10:14 kitt_vl joined #mojo
10:15 sri oh i know
10:15 sri we depend on fork support in EV
10:15 sri it prolly doesn't recognize the fake windows fork
10:17 kmx sri: yes setting MOJO_REACTOR to Mojo::Reactor::Poll is the most important hack for Windows morbo users which accidentally got EV installed in their perl
10:19 Lucas1 joined #mojo
10:27 kmx sri: I confirm that IO::Socket::SSL part of the hack is not necessary (tested on strawberry perl 5.16.1/32bit) only setting ENV{MOJO_REACTOR} = 'Mojo::Reactor::Poll' part is necessary
10:27 sri \o/
10:27 sri kmx++
10:28 kmx sri: for it is fine just to set proper env variable before starting morbo but it might be worth at least documenting for other Windows morbo users
10:29 sri well, we plan to get rid of native EV support anyway
10:32 sri kmx: where would you document it?
10:33 sri (if someone was building a thread based hypnotoad with the daemon, it would affect them as well)
10:33 sri or even the user agent i suppose
10:35 kmx sri: I would propose at least morbo's POD but you are right it might have larger impact
10:38 pingup3rl joined #mojo
10:46 Netfeed fascinating with perl development in windows, i've always seen that as something *nix more or less
10:52 daxim joined #mojo
11:10 cosmincx joined #mojo
11:20 Foxcool joined #mojo
11:29 pingup3rl joined #mojo
11:36 arpadszasz joined #mojo
11:45 pingup3rl joined #mojo
12:06 * sri wonders why anyone trapped with a windows dev box would use a windows perl instead of cygwin
12:06 * sri also wonders if hypnotoad works on cygwin
12:08 * tempire sleeps
12:08 daxim false premise: people who use windows don't feel trapped
12:08 daxim perl beginners want to try out coding without installing half another OS
12:09 stephan48 sri: cygwin isnt much nicer
12:09 stephan48 and its a pain to install
12:09 Netfeed if you now are forced to develop on windows, why would you not choose the .net env? it seems pretty sweet if you want to go windows only
12:09 vishwanathms joined #mojo
12:09 vishwanathms_ joined #mojo
12:11 daxim that's a weird/unrealistic notion.  someone imposes windows on you, *but* you can choose the development language/environment?
12:12 Netfeed well, doesn't java work "as good" in windows as in *nix?
12:14 daxim in theory
12:15 daxim in a previous job in a java shop (2004 era) all java devs preferred windows, they said eclipse and stuff is easier to set up
12:16 Netfeed really? i just unpack eclipse somewhere and create a /usr/bin/java link for some other java dir and it's good to go?
12:16 Netfeed more or less :)
12:21 Netfeed but i use eclipse more as a fancy editor then anything else
12:23 al i'm partially rendering multiple templates that use the same layout on the same page
12:24 al the layout has content_for 'body' sections that get filled by the various templates
12:24 al when rendering the 2nd and any subsequent templates, the content_for 'body's get appended to the previous ones
12:25 al i solved that by using $body instead of 'body' and using render_partial(body => rand())
12:25 crab haha
12:25 al works fine, i'm just wondering if there's a more elegant solution i'm missing
12:37 crab hmm, i don't think so
12:43 sri http://mojolicio.us/perldoc/Mojolic​ious/Plugin/DefaultHelpers#content
12:44 nic Apparently the oracle db now runs 'better' on Windows
12:45 nic Strawberry Perl on Windows is v nice
12:45 good_news_everyone joined #mojo
12:45 good_news_everyone [mojo] kraih pushed 1 new commit to master: http://git.io/ywXJHg
12:45 good_news_everyone [mojo/master] better descriptions for content and content_for helpers - Sebastian Riedel
12:45 good_news_everyone left #mojo
13:09 kitt_vl joined #mojo
13:10 biz joined #mojo
13:13 al crab, ok, thanks :>
13:14 marcus sri: hmm, something changed in UserAgent post recently? One of our apis is suddenly getting empty post bodies.
13:14 sri marcus: not that i know of
13:14 sri marcus: version?
13:14 purl well, version is bumped at release only
13:15 al ah, content instead of content_for should do the trick?
13:15 marcus sri: I know it works in v3.0 and is broken in .42
13:15 marcus sri: will test a bit more now
13:16 sri marcus: also in .41?
13:16 sri i've removed some code from Mojo::Transaction::HTTP that seemed useless in .42, maybe it wasn't :)
13:17 marcus sri: seems it's $url->query that has changed behavior
13:18 al mh, no, 2nd call for content 'body' => apparently doesn't overwrite the first one
13:18 judofyr joined #mojo
13:19 sri al: then you're doing something else wrong
13:20 sri marcus: that would be unrelated
13:20 * sri only cares about the .42 specific changes ;p
13:22 marcus sri: seems it happened between 35 and 40
13:24 sri not much happened between those releases
13:25 marcus guess it's probably   - Improved Mojo::URL and Mojo::Parameters performance. seems it's now modifying rather than setting parameter
13:25 sri only parses on demand now
13:25 sri but i don't see how that would cause a bug
13:26 sri the old behavior may have hidden a bug in your app
13:26 sri like... it cleaned up a bad query string
13:27 sri marcus: shouldn't be too hard for you to create a test case though
13:27 HtbaaPi ehm, inside a controller, doing something like $self->cookie('foobar', {path => '/'}); for retrival, why does it return the controller object?
13:27 marcus sri: yeah, it looks like that might be it. Guess fixing it in solarbeam is the best approach.
13:28 * sri wonders what solarbeam is
13:28 Netfeed sri: http://bulbapedia.bulbagarden.​net/wiki/SolarBeam_%28move%29 <-- a pokemon move!
13:29 sri HtbaaPi: cookie with name and value is a *set*
13:29 sri Netfeed: i see!
13:30 HtbaaPi sri: so If I want to set a cookie on path /, I should do $self->cookie('foobar' => 'baz', {path => '/'});?
13:30 sri HtbaaPi: that's what the documentation says
13:30 HtbaaPi and when retrieving, should I not pass the path?
13:30 sri why would you pass a pass for retrival?
13:30 sri makes no sense
13:31 sri request cookies have no path
13:31 judofyr sri: just confusing that my $foo = $url->query; $url->query(…) modifies $foo. but that's the life of custom setters :)
13:31 HtbaaPi because I'm accessing the cookie from another path
13:31 marcus sri: https://github.com/judofyr/solarbeam
13:31 HtbaaPi a path is stored in the cookie..
13:32 sri HtbaaPi: browsers only send the cookie name and value to the server, nothing else
13:32 Jason_ joined #mojo
13:33 gryphon joined #mojo
13:33 sri judofyr: clone the query object
13:33 judofyr sri: yeah, we fixed it by calling ->to_string and using that
13:33 HtbaaPi sri: but why can't I access the same cookie in another action (different path)?
13:33 sri HtbaaPi: that's not a question i could answer
13:35 HtbaaPi all I do is set a cookie (like described) and retrieve it as $self->cookie('foobar'); but I get nada
13:35 sri then the right question would be "why doesn't the browser send the cookie?"
13:36 judofyr HtbaaPi: WebKit dev tools and Firebug can show you the brower's cookie jar
13:36 judofyr and the path that's been set
13:36 HtbaaPi the cookie is being set on a different url, e.g. /foobar but should be read on /bar. Firefox shows that the path is /foobar
13:38 HtbaaPi ah fixed
13:38 judofyr what was the problem?
13:38 HtbaaPi now that the path has been set to / it works fine. Somehow thought I needed to specify a path when retrieving the cookie
13:38 sri :)
13:39 sri looking at what goes over the wire often helps understanding that stuff
13:39 sri MOJO_DAEMON_DEBUG=1
13:39 HtbaaPi just one final question, cookies in Mojolicious are 'dump' in the sense that you need to serialize the input yourself?
13:39 HtbaaPi just need to store a list of numbers
13:39 sri yes, the session serializes for you
13:40 judofyr cookies are strings, session is JSON
13:41 HtbaaPi ok, clear
13:41 al https://gist.github.com/3737324 - here the 2nd call to content 'body' doesn't seem to do anything
13:41 sri you're welcome to make a plugin for a cookie helper that also serializes ;)
13:42 HtbaaPi I though it did because of this in the documentation: my @values = $c->cookie('foo')
13:42 HtbaaPi so, what does that do :P
13:42 sri there can be multiple cookies with the same name
13:43 mire_ joined #mojo
13:43 HtbaaPi ah, ok... though those were unique. Or does it depend on its path?
13:44 HtbaaPi *thought
13:45 sri browsers don't support it i believe
13:45 sri but i'm not sure
13:45 jnap joined #mojo
13:46 judofyr HTTP + multi values = mess (cookies, headers)
13:46 sri indeed
13:46 HtbaaPi hmm well learned another thing today I guess :-). Thanks for the help folks
13:47 judofyr sri: do any browsers send multiple headers?
13:47 sri dunno
13:48 sri i've heard about chrome doing it sometimes
13:49 sri al: oh, my bad
13:50 sri you can't override the value
13:50 sri it's a feature for template inheritance... of course
13:54 al sri, so using some nonce as content key is an acceptable solution?
13:54 sri if it's acceptable to you
13:55 al sure ;)
13:55 al thanks
14:03 ryozi joined #mojo
14:04 good_news_everyone joined #mojo
14:04 good_news_everyone [mojo] kraih pushed 1 new commit to master: http://git.io/39CBSg
14:04 good_news_everyone [mojo/master] simplify content and content_for helpers - Sebastian Riedel
14:04 good_news_everyone left #mojo
14:07 baton8 joined #mojo
14:08 biz joined #mojo
14:15 crab joined #mojo
14:39 Leandr joined #mojo
14:46 andrefs joined #mojo
14:47 knshaum joined #mojo
14:51 vervain joined #mojo
14:58 labrown joined #mojo
15:12 arthas joined #mojo
15:16 Britzel joined #mojo
15:30 andrefs joined #mojo
15:49 xaka joined #mojo
15:53 judofyr_ joined #mojo
15:59 ladnaV joined #mojo
16:09 arpadszasz joined #mojo
16:10 dams joined #mojo
16:11 dams left #mojo
16:13 abra joined #mojo
16:16 sri hmm, that was not the weeds finale i expected
16:22 jzawodn joined #mojo
16:39 judofyr joined #mojo
16:51 batman joined #mojo
17:06 rem_lex|pivo joined #mojo
17:26 gryphon Is there a way to set routes in mojo such that any dash will become an underscore? For example, if I've got /thing/stuff-and-things for a URL, and I'd like that to map to controller "thing" and action "stuff_and_things", but do this for all URLs of the pattern?
17:26 gryphon Basically, a simple regex on URLs before it gets to the routes?
17:27 gryphon ATM, we've got $r->route('/:controller/:action') which handles what we need perfectly except for translating dashes to underscores.
17:42 jnap joined #mojo
17:53 tolid_air joined #mojo
18:46 sri al: just thought of a better solution for just one block http://hastebin.com/raw/bidenanoqo
18:49 sri just in case you missed the layout section of the guides :)
18:50 sri gryphon: i'm almost certain there's a url rewriting recipe somewhere in the guides too
18:52 tolid_air joined #mojo
18:52 sri possibly multiple
18:56 davido joined #mojo
19:04 alester joined #mojo
19:13 vel joined #mojo
19:30 biz joined #mojo
19:33 marcus nggh
19:33 arpadszasz joined #mojo
19:43 dvinciguerra garu: hi
19:55 dvinciguerra anyone having a problem with params in Mojolicious::Lite?
19:55 davido joined #mojo
20:05 xaka joined #mojo
20:51 davido joined #mojo
21:06 memowe joined #mojo
21:28 bpmedley dvinciguerra: Works great for me.
21:38 lukep joined #mojo
21:53 pingup3rl joined #mojo
21:53 dvinciguerra bpmedley: I'm create an app and when a run it's starts ok...
21:55 dvinciguerra When I access '/' route it's run and I can get params normally but in other routes, it breaks and params comes empty!
21:57 Adura Long version work?
21:57 dvinciguerra I think that I doing some "shit", because I get it on my Ubuntu and windows too.
21:58 dvinciguerra Adura: excuse me?
21:59 Adura There's a longer way of accessing query values.
21:59 Adura Something I did in my regular Mojolicious app clobbered param, so I used the long version.
22:01 Adura $self->req->url->query->param('foo')
22:02 dvinciguerra I tried but not using this way...
22:02 Adura Just a possible workaround for you.
22:03 dvinciguerra let's try ;-]
22:04 Adura In Lite... that $self is... app, I don't know.
22:06 dvinciguerra I never have this problem. :-\
22:06 Adura I screwed around with routes too much and clobbered param somehow, hah.
22:09 dvinciguerra No, empty again... =\
22:09 Adura I don't know... then.
22:11 dvinciguerra I will post my code on pastebin!
22:11 dvinciguerra wait please!
22:12 Adura Well, I may not be able to help.
22:12 Adura Just suggesting things.
22:14 jnap_ joined #mojo
22:18 biz joined #mojo
22:22 dvinciguerra Adura: ok
22:24 dvinciguerra If you can take a look... and say if you see something wrong...
22:24 dvinciguerra https://gist.github.com/3740148
22:35 inokenty dvinciguerra: I think the problem in name 'data'
22:35 dvinciguerra really?
22:35 inokenty Try to use something other
22:35 inokenty input name="value" for example
22:35 Adura joined #mojo
22:36 dvinciguerra ok...
22:37 sri inokenty: it does look a bit odd, but i don't think get/post params interfere with reserved stash values
22:41 dvinciguerra sri: It sounds me that all hashes like param, stash, ... are cleaned. :\
22:44 dvinciguerra look at error... http://imageshack.us/f/196/servererror.png/
22:45 inokenty <input type="text" name"data" />
22:45 inokenty Here
22:45 inokenty You forgot '='
22:46 dvinciguerra Ohhhh shit... it's not possible!
22:51 dvinciguerra ok guys now it works!
22:54 dvinciguerra Sorry for spend your time! :\
23:11 jnap joined #mojo
23:18 jnap_ joined #mojo
23:31 mandreacchio joined #mojo
23:44 al sri, thanks! but i'm actually using multiple blocks :>
23:46 pingup3rl joined #mojo

| Channels | #mojo index | Today | | Search | Google Search | Plain-Text | summary