00:17.25 | *** join/#flow3 boonkerz (~boonkerz@pd95c8e64.dip0.t-ipconnect.de) |
00:33.53 | *** join/#flow3 Wrack (~eric@f052224241.adsl.alicedsl.de) |
00:54.56 | *** join/#flow3 ghost1 (~ghost1@c-76-109-234-53.hsd1.fl.comcast.net) |
02:03.03 | *** join/#flow3 boonkerz (~boonkerz@p4FC30F44.dip.t-dialin.net) |
02:17.38 | *** join/#flow3 boonkerz (~boonkerz@pd95c8e64.dip0.t-ipconnect.de) |
04:38.50 | *** join/#flow3 cognifloyd (~techguruf@c-67-172-253-220.hsd1.ut.comcast.net) |
05:24.37 | *** join/#flow3 ger^kallisti (~kyrill@dslb-188-110-053-233.pools.arcor-ip.net) |
05:50.02 | *** join/#flow3 fischli (~fischerb@data.fischer-ing.de) |
06:23.53 | *** join/#flow3 mgoldbeck (~Adium@host-93-104-226-234.customer.m-online.net) |
07:21.21 | *** join/#flow3 Matze-TD (~Matze-TD@mail.techdivision.com) |
07:24.25 | *** join/#flow3 cubert_ (~cubert@p50805D3C.dip.t-dialin.net) |
07:37.59 | Matze-TD | i've got a model and it's repository, now i would like to save an object persistent. $repository->add($object) should save it persistent right? but there is nothing in database and there is no error |
07:38.19 | Matze-TD | i trigger the controller with a functional Test |
07:38.40 | *** join/#flow3 afoeder_ (~afoeder@p4FD64551.dip0.t-ipconnect.de) |
07:45.41 | *** join/#flow3 Allisone (~Allisone@e178011182.adsl.alicedsl.de) |
07:45.50 | *** part/#flow3 Allisone (~Allisone@e178011182.adsl.alicedsl.de) |
07:46.47 | afoeder_ | mooorning :) |
07:47.12 | Matze-TD | hi |
07:47.44 | Matze-TD | probably you can help me :D i've got a persistence problem |
07:48.05 | afoeder | I'll try; go ahead |
07:48.23 | Matze-TD | i've got a model, and it's repository. so with $repository->add($object) i would like to save this object persitent in database |
07:48.41 | Matze-TD | but there is nothing in DB and won't get an error |
07:48.55 | Matze-TD | i trigger the controller with a functional test |
07:49.05 | afoeder | try an additional $repository->update() |
07:49.16 | Matze-TD | after adding? |
07:49.20 | afoeder | yep |
07:49.31 | afoeder | that may help; but I still also don't know what the *right* approach is. |
07:49.46 | *** join/#flow3 sewo (~sewo@e178011182.adsl.alicedsl.de) |
07:49.51 | *** part/#flow3 sewo (~sewo@e178011182.adsl.alicedsl.de) |
07:50.05 | *** join/#flow3 sewo (~sewo@e178011182.adsl.alicedsl.de) |
07:50.21 | sewo | hello |
07:50.52 | *** join/#flow3 liwo_ (~liwo@f052039123.adsl.alicedsl.de) |
07:55.28 | Matze-TD | afoeder: hmm $repository->update(); does nothing. there is still no object in db |
07:56.36 | afoeder | hm... |
08:06.56 | *** join/#flow3 foertel (~foertel@217.19.187.106) |
08:27.25 | *** join/#flow3 fb|michael (~tuerk@HSI-KBW-085-216-081-040.hsi.kabelbw.de) |
08:39.18 | *** join/#flow3 foertel1 (~foertel@83.170.89.157) |
08:40.59 | *** join/#flow3 Kirab (~kira.back@p578ba9b1.dip0.t-ipconnect.de) |
08:44.57 | *** join/#flow3 foertel (~foertel@217.19.187.106) |
08:57.55 | sewo | I have a question about flashMessages, or maybe about Sessions… |
08:57.56 | sewo | in a index.html I have <f:flashMessages /> |
08:57.56 | sewo | when a user authenticates, I call $this->authenticationManager->authenticate(); $this->addFlashMessage('bla'); $this->redirect('index', 'Login'); which renders the index.html stuff with the 'bla' message |
08:57.56 | sewo | but when I call $this->authenticationManager->logout(); $this->addFlashMessage('blub'); $this->redirect('index', 'Login'); I don't get the flashMessage 'blub' rendered, is it because the session is destroyed and with it the flashMessage container ? |
08:58.16 | *** join/#flow3 Kollode (~patrick@designnet.work.de) |
09:00.40 | *** join/#flow3 nd____ (~nd@mnhm-4d006067.pool.mediaWays.net) |
09:02.18 | *** join/#flow3 ger^kallisti (~kyrill@dslb-188-110-053-233.pools.arcor-ip.net) |
09:04.11 | *** join/#flow3 aertmann (~aertmann@109.202.148.90) |
09:37.57 | *** join/#flow3 mneuhaus (~mneuhaus@ip-176-198-96-65.unitymediagroup.de) |
09:38.16 | *** part/#flow3 mneuhaus (~mneuhaus@ip-176-198-96-65.unitymediagroup.de) |
09:39.54 | *** join/#flow3 nd_____ (~nd@mnhm-4d006067.pool.mediaWays.net) |
09:41.06 | *** join/#flow3 ger^kallisti_ (~kyrill@dslb-188-110-053-233.pools.arcor-ip.net) |
09:42.34 | *** join/#flow3 SpareParts (~ondriq_h@195.168.42.50) |
09:44.49 | *** join/#flow3 Number-5 (~typobot@li200-166.members.linode.com) |
09:46.07 | *** join/#flow3 Kirab (~kira.back@p578ba9b1.dip0.t-ipconnect.de) |
10:12.26 | ChristianM | sewo indeed that is the case |
10:12.41 | ChristianM | on logout the session is destroyed and the flashmessage container resides in the sesion |
10:12.53 | sewo | what can I do ? |
10:13.09 | sewo | to still get some feedback for the user |
10:13.43 | sewo | or do I always have to redirect to /render a special logout view |
10:13.54 | afoeder | I'd even say destroying the session due to ->logout() is a "side effect" |
10:14.11 | ChristianM | afoeder, mmm yes at least there should be a solution |
10:15.25 | ChristianM | sewo atm you need to do some workaround probably |
10:15.58 | afoeder | another thing; I have an object that needs DI; so I can't use __construct, but initializeObject; hence I can't instanciate is with `new`, but with the OM, right? |
10:16.51 | sewo | ok, thank you for the clearing this :D |
10:19.12 | ChristianM | afoeder why would DI prevent __construct? |
10:19.30 | ChristianM | normally you don't need the OM, you can just new the object |
10:19.42 | ChristianM | proxy class building will take of the rest |
10:20.02 | afoeder | because the injected prop's are not yet present at __construct |
10:20.28 | afoeder | this is a) my observation and b) what I remember having heard :-) |
10:20.36 | ChristianM | ah you need them in __construct? |
10:20.41 | afoeder | yep :) |
10:20.43 | afoeder | :-p |
10:20.49 | afoeder | (should have said that :) |
10:20.57 | ChristianM | nope, right, that won't work |
10:21.17 | afoeder | it's just a helper object that provides some stuff based on the input of __construct |
10:22.40 | ChristianM | I think I would need to see the usecase to decide what is the best way, but yeah, using the injected properties in __construct won't work |
10:23.33 | afoeder | well, it's pretty simple; I'd like to create a Rating package |
10:23.42 | afoeder | that allows rating stuff (star rating, you know) |
10:23.46 | ChristianM | you could use the OM to grab the dependencies and accept them in __construct |
10:24.29 | afoeder | https://github.com/afoeder/FLOW3-Rating/blob/master/Classes/Domain/Model/AggregateRating.php |
10:24.42 | afoeder | (it's not the most recent build, but you might get the idea |
10:25.00 | ChristianM | or create a factory that gets the stuff injected and instanciates the helper with the properties it has |
10:25.11 | afoeder | an AggregateRating should serve as "helper object" that is aware of the best possible rating, the worst possible, the amount of rating and the value. |
10:25.53 | ChristianM | I see |
10:26.12 | afoeder | and I came up needing the ReflectionService |
10:26.36 | ChristianM | I would say make a factory that accepts the collection and generates the helper Aggregate |
10:26.36 | afoeder | to know what implementation the expected Rating is of |
10:31.11 | *** join/#flow3 boonkerz (~boonkerz@pd95c8e64.dip0.t-ipconnect.de) |
10:31.25 | *** join/#flow3 foertel (~foertel@217.19.187.106) |
10:43.59 | afoeder | hm, I wonder I can't get the annotated @return value via reflection... |
10:44.04 | afoeder | isn't that intended? |
10:51.23 | Matze-TD | afoeder: you remember my persistence problem this morning? i didn't know that for testing there is an extra settings.yaml for database configuration. so that was the problem |
10:52.01 | afoeder | well, the additional settings.yaml isn't taken into account if it's inactive |
10:52.18 | afoeder | and, by default, it shouldn't be active |
10:53.07 | Matze-TD | ok i'm not sure about it, perhaps someone in my team activated it |
10:53.34 | afoeder | with "activated" I meant ... configured; used; ... |
10:53.46 | Matze-TD | but i got new question. if i add the same database settings for testing like in development, and i run a test, all tables in database will disapper |
10:54.15 | afoeder | well, maybe that's the reason for different data ^^ |
10:54.25 | afoeder | different database data |
10:55.07 | afoeder | probably the database is tidied up after Testing; that's why you maybe *must* provide other data than in production... |
10:55.08 | Matze-TD | ok, so for testing persistent models i have to set up a new database |
10:55.38 | afoeder | sounds making sense (but remember: I don't know surely) |
10:56.19 | Matze-TD | ok thank you very much, i should tweet something again :D |
11:10.33 | ChristianM | Matze-TD that is the caes |
11:10.40 | ChristianM | you need a different database for testing |
11:10.54 | ChristianM | it will be put into a defined state and cleared afterwards |
11:11.37 | Matze-TD | thank you :) |
11:24.44 | afoeder | I don |
11:24.58 | afoeder | 't get it... doesn't the annotation parser parse for @return occurence? |
11:25.43 | kdambekalns | <PROTECTED> |
11:26.19 | afoeder | I need to check what type a particular method returns. |
11:27.31 | afoeder | (more concrete: the method could maybe being annotated with @return \Doctrine\Common\Collections\Collection<\Rating\Domain\Model\Rating> |
11:28.36 | afoeder | and I need to make decisions dependant on what type the collection member is. |
11:29.49 | kdambekalns | ah, no. we don't use @return for anything, so it's not even analyzed/cached |
11:30.10 | afoeder | ahaa... ok... |
11:30.27 | kdambekalns | you could use getMethodTagsValues() from the ReflectionService and see if you can reuse the code that parses "typed collection" strings… |
11:30.37 | afoeder | yes, well, getDocComment() |
11:31.07 | afoeder | from Reflection works fine; a simple regex for /@return\s... should do the trick |
11:31.37 | afoeder | I already began to examine this; but couldn't believe the annotation parser doesn't look for it on itself |
11:33.17 | kdambekalns | helpful should be Utility\TypeHandling::parseType() and some more of the methods… |
11:33.45 | afoeder | noooooouuuuh.... ->getMethodTagsValues exactly works as you said and I need °_° There they went, the last two hours :) |
11:34.05 | afoeder | why did I overlook that :-/ |
11:35.15 | *** join/#flow3 mneuhaus (~mneuhaus@p5487ACA7.dip.t-dialin.net) |
11:35.23 | *** part/#flow3 mneuhaus (~mneuhaus@p5487ACA7.dip.t-dialin.net) |
11:39.29 | *** join/#flow3 fb|michael (~tuerk@HSI-KBW-085-216-081-040.hsi.kabelbw.de) |
11:43.48 | *** join/#flow3 foertel (~foertel@217.19.187.106) |
12:21.04 | afoeder | hm... is it possible to create something like a for-i construct in Fluid? |
12:23.11 | ChristianM | what should happen then? |
12:23.32 | afoeder | just loop for e.g. 5 times |
12:23.32 | ChristianM | you could hardcode an array directly in the template... |
12:23.36 | afoeder | (star rating, you know? ;-) |
12:24.02 | ChristianM | <for each="{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5}" ... |
12:24.15 | afoeder | yeah, but "5" comes from out there |
12:24.35 | afoeder | (whereas "out there" is a variable) ;-) |
12:24.39 | ChristianM | I see |
12:25.33 | ChristianM | nope, then you need your own viewhelper |
12:25.58 | ChristianM | maybe a <afoeder:do times="" ... |
12:26.28 | afoeder | yes, just started... I'll attach it to the rating package and it's not that generic |
12:26.55 | ChristianM | ;) |
12:32.38 | fischli | what's wrong with <for each="{myarray}" ... |
12:33.23 | afoeder | I don't have an array there |
12:33.40 | afoeder | consider I have only "1 to 5" |
12:33.57 | fischli | why don't you build one as a dummy to get your counter |
12:34.26 | afoeder | yep, "building one" is what I currently do: via a VH |
12:36.15 | fischli | why not assigning this dummy array to your fluid template instead of doing it by a new VH |
12:36.45 | fischli | lots of why's and what's ;-) |
12:36.50 | afoeder | separation of concerns ;-) But I agree; I'll attach it to the model |
12:37.18 | fischli | ok |
12:37.26 | afoeder | the model tells the boundaries, the model also cann tell the boundarie'd array. |
12:37.45 | fischli | yep |
12:37.56 | afoeder | in case you missed it: I'd like to build a Rating package (star rating) |
12:38.34 | fischli | got it ;-) |
12:39.56 | *** join/#flow3 pumatertion (~Adium@p5099c158.dip0.t-ipconnect.de) |
12:48.08 | *** join/#flow3 rosieres (~rosieres@a89-183-6-8.net-htp.de) |
12:52.39 | afoeder | has anybody already had an eye for this one, maybe? http://schema.org/AggregateRating |
12:52.41 | rosieres | Hi, I´m new to flow and planning my first project with it. This project will generate millions of records and billions of relations. Which Database model would you recommend ? I Think a mysql Database is very quick too slow. Thank for your opinion in advance . . . |
12:53.13 | afoeder | (I especially mean the schema.org stuff at all) |
13:18.16 | afoeder | and here we go: https://github.com/afoeder/FLOW3-Rating/ |
13:18.17 | afoeder | :) |
13:28.30 | Matze-TD | I got my own User Model. Now i need a authentification. Whats an easy way to solve it. Creating my own AuthMangager by implementing the AuthentificationManagerInterface? |
13:31.40 | afoeder | Matze-TD, take the existing UsernamePasswordAuthenticationProvicer |
13:31.48 | *** join/#flow3 ghost1 (~ghost1@38.104.90.194) |
13:32.10 | Matze-TD | thanks, i'll checkout this |
13:33.09 | afoeder | check the documentation about that; there's a fantastic chapter. |
13:33.23 | *** join/#flow3 ghost1 (~ghost1@38.104.90.194) |
13:51.49 | Matze-TD | hmm I'm a bit confused about the authentification |
13:52.24 | Matze-TD | i got no webforms and i got my own user model |
14:07.07 | *** join/#flow3 sorenmalling (~sorenmall@109.202.148.90) |
14:12.54 | *** join/#flow3 soc42 (~soc42@HSI-KBW-46-237-193-8.hsi.kabel-badenwuerttemberg.de) |
14:13.50 | *** join/#flow3 ger^kallisti_ (~kyrill@178-26-82-236-dynip.superkabel.de) |
14:21.34 | *** join/#flow3 ger^kallisti_ (~kyrill@178-26-82-236-dynip.superkabel.de) |
14:23.02 | Matze-TD | so for a authentication i need an account, but if i have my own user-model the user-model is the account. A simple solution would be to relate my user-model with an account? |
14:23.40 | afoeder | well, an account *is bound* to a user model. |
14:24.04 | afoeder | a FLOW3 account does have a property "party" which relates to a \TYPO3\Party instance |
14:24.34 | afoeder | you might inherit your own user model from \TYPO3\Party\Domain\Model\AbstractParty |
14:24.37 | afoeder | (that's what I did) |
14:24.52 | Matze-TD | ah ok |
14:25.13 | *** join/#flow3 ger^kallisti_ (~kyrill@178-26-82-236-dynip.superkabel.de) |
14:27.47 | Matze-TD | now my user model extends the AbstractParty Model |
14:27.52 | Matze-TD | so it's now an account? |
14:28.10 | afoeder | no, you have to $account->setParty($this) |
14:28.15 | afoeder | (if $this is your user model ;-) |
14:28.21 | Matze-TD | aha |
14:29.37 | Matze-TD | so i have to create an account for every user model object? |
14:30.16 | afoeder | well, hm; you see, an *account* is what users use to log in. |
14:30.55 | afoeder | they log into their *account*, not into their user model or profile or whatever |
14:31.18 | afoeder | so, every User (model) that needs to log in needs an own Account, that's correct. |
14:31.38 | afoeder | (at least iirc) |
14:32.09 | *** join/#flow3 ger^kallisti (~kyrill@178-26-82-236-dynip.superkabel.de) |
14:32.10 | *** part/#flow3 pumatertion (~Adium@p5099c158.dip0.t-ipconnect.de) |
14:32.11 | Matze-TD | so the usermodel doesn't need for example a password attribute because the account has it |
14:32.32 | kdambekalns | rosieres: sounds interesting… what are you about to store? only thing i can imagine to generate such massive amounts of data is genome or google :) |
14:32.33 | Matze-TD | ? |
14:32.50 | ChristianM | Matze-TD yep, that is all part of the account |
14:32.51 | kdambekalns | Matze-TD: yes, users have no credentials |
14:33.37 | Matze-TD | also the unique identifier, for example the loginname? |
14:34.07 | ChristianM | yep |
14:35.05 | Matze-TD | ok so if i implement a user registration where the user object will be created i have to create a new account for this user object? |
14:36.00 | *** join/#flow3 cubert_ (~cubert@p50805D3C.dip.t-dialin.net) |
14:36.35 | ChristianM | right |
14:37.08 | ChristianM | you can use the AccountFactory |
14:59.08 | *** join/#flow3 boonkerz (~boonkerz@p4FC30B99.dip.t-dialin.net) |
15:03.21 | *** join/#flow3 Wrack (~eric@g225146211.adsl.alicedsl.de) |
15:27.47 | *** join/#flow3 boonkerz_ (~boonkerz@p4FC30B99.dip.t-dialin.net) |
15:32.14 | Matze-TD | ok now every user is party of an account, if i get the login data of the user not by post data i have to implement my own Token which implements the TokenInterface right? |
15:32.29 | ChristianM | right |
15:40.56 | *** join/#flow3 sherold (~sherold@p57AEEE48.dip.t-dialin.net) |
15:41.02 | Matze-TD | ok i have to implement my own Token with implements the TokenInterface, but in my application the logindata of the user will not come with a post request |
15:41.23 | Matze-TD | but the interface defines for the updateCredentials a request |
15:52.05 | ChristianM | how do you plan to authenticate? |
15:54.41 | Matze-TD | My application is a REST webservice and i have no influence about the data i'll get |
15:55.11 | ChristianM | ok, but then it IS a request you get |
15:55.20 | ChristianM | (maybe not post, but that doesn't matter) |
15:55.24 | Matze-TD | ah ok |
15:55.53 | afoeder | but Matze-TD, however; just out of curiosity; how do the users authenticate in your case? |
15:56.37 | Matze-TD | i thought the it should be a POST request like in the guide |
15:57.01 | ChristianM | nope |
15:57.15 | ChristianM | the request includes everything passed in this request |
15:58.38 | ChristianM | see eg.Typo3OrgSsoToken.php |
16:07.14 | *** part/#flow3 fischli (~fischerb@data.fischer-ing.de) |
16:09.05 | *** join/#flow3 kevin_ (~kevin@76.14.75.242) |
16:12.08 | afoeder | Marketing: https://github.com/afoeder/FLOW3-Rating :) |
16:19.52 | *** part/#flow3 Codemonkey1988 (~Adium@ip-95-223-46-116.unitymediagroup.de) |
16:37.04 | rosieres | kdambekalns: There´s one more ;-) but you can guess, i´m not really allowed to talk about the main idea at all. My problem is that millions of unique records could be generated within a year ( perhaps not in the first, but in the following ). and each record can have ten till up to a thousand unique child records . Therefore I´m thinking of mongoDB... what do you say ? What´s going on with the flow3 mongoDB connector ?-> http://forge.typo3 |
16:37.05 | rosieres | .org/projects/package-mongodb ... Don´t see if it´s already done or working . . . greets |
16:38.42 | *** join/#flow3 boonkerz_ (~boonkerz@pd95c8e64.dip0.t-ipconnect.de) |
16:38.43 | ChristianM | I think the couchDB implementation has more progress, maybe you want to look into that |
16:40.00 | rosieres | ChristianM: I´ll have a look at it . . .thanks |
16:40.26 | kdambekalns | don't know anything about the mongodb, but the couchdb thing is in production use for a large data set at "Rossmann" |
16:40.53 | afoeder | might become even larger due to Schlecker :-P |
16:44.52 | *** join/#flow3 sewo (~sewo@e178011182.adsl.alicedsl.de) |
16:44.53 | *** join/#flow3 Allisone (~Allisone@e178011182.adsl.alicedsl.de) |
16:45.12 | *** part/#flow3 Allisone (~Allisone@e178011182.adsl.alicedsl.de) |
16:45.16 | *** part/#flow3 sewo (~sewo@e178011182.adsl.alicedsl.de) |
16:46.00 | *** join/#flow3 sewo (~sewo@e178011182.adsl.alicedsl.de) |
16:46.07 | *** part/#flow3 sewo (~sewo@e178011182.adsl.alicedsl.de) |
17:21.46 | *** part/#flow3 afoeder (~afoeder@p4FD64551.dip0.t-ipconnect.de) |
17:45.18 | *** join/#flow3 Kollode (~Kollode@d226019.adsl.hansenet.de) |
18:01.10 | *** join/#flow3 gammpamm (~gammpamm@HSI-KBW-46-237-239-50.hsi.kabel-badenwuerttemberg.de) |
18:42.14 | *** join/#flow3 Kollode1 (~Kollode@f054052125.adsl.alicedsl.de) |
18:54.24 | *** join/#flow3 foertel (~foertel@217.19.187.106) |
19:10.15 | *** join/#flow3 Wrack (~eric@g225146211.adsl.alicedsl.de) |
19:26.44 | *** join/#flow3 ger^kallisti_ (~kyrill@178-26-95-19-dynip.superkabel.de) |
19:45.08 | *** join/#flow3 nd____ (~nd@mnhm-4d01a4cb.pool.mediaWays.net) |
19:53.19 | *** join/#flow3 mgoldbeck (~Adium@dslb-088-064-018-093.pools.arcor-ip.net) |
20:13.18 | *** join/#flow3 Codemonkey1988 (~Tim@ip-95-223-40-184.unitymediagroup.de) |
20:18.00 | Codemonkey1988 | Hi, is there a way to validate a model, in the controller before adding it to the database? |
20:26.14 | jwa | Codemonkey1988: a model is usually validated before it's actually initialized |
20:26.27 | jwa | unless you don't have any @Validate annotations on it |
20:28.14 | Codemonkey1988 | I have, and I'm not shure, if I'm doing it right, but I have some data that should be stored in the database. So I created a new instance of my model and added the data. But now I want to know, if all data, that I have added is valid to the given annotations |
20:29.07 | Codemonkey1988 | I created the model just with "new ....". Is there any better way to do it? |
20:39.05 | *** join/#flow3 Torsten85 (~textual@ip-95-222-156-104.unitymediagroup.de) |
20:42.36 | jwa | Codemonkey1988: well that doesn't do any validation |
20:44.48 | Codemonkey1988 | I know, but is there a way to validate that object by caling some method? |
20:46.04 | *** join/#flow3 ger^kallisti (~kyrill@178-26-95-19-dynip.superkabel.de) |
20:48.17 | jwa | Codemonkey1988: dunno, sorry |
20:49.00 | Codemonkey1988 | okay, but thanks anyway |
21:05.51 | *** join/#flow3 ger^kallisti_ (~kyrill@178-26-82-236-dynip.superkabel.de) |
21:42.42 | *** join/#flow3 mgoldbeck (~Adium@dslb-088-064-018-093.pools.arcor-ip.net) |
22:11.03 | *** join/#flow3 beberlei (~twitter@koln-5d81914b.pool.mediaWays.net) |
22:29.50 | *** join/#flow3 mneuhaus (~mneuhaus@ip-176-198-96-65.unitymediagroup.de) |
22:29.56 | *** part/#flow3 mneuhaus (~mneuhaus@ip-176-198-96-65.unitymediagroup.de) |
22:41.03 | *** join/#flow3 ghost1 (~ghost1@c-76-109-234-53.hsd1.fl.comcast.net) |