The web in a box - a next generation web framework for the Perl programming language

IRC log for #mojo, 2017-08-07

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

All times shown according to UTC.

Time Nick Message
00:04 gordonfish- sweval: use Mojo::DOM; my $dom=Mojo::DOM->new(); $dom->parse('<text bbox="104.958,686.152,107.456,698.678" font="Arial" size="12.526"> </text>'); [ $dom->all_text ]; # adv_
00:05 gordonfish- Bah no perlbot in here
00:05 gordonfish Running that in a pm window with perlbot printed: [" "]
00:06 gordonfish With ->text it printed: [""]
00:15 Grinnz gordonfish: ->text on the main dom node wouldn't contain anything, so
00:15 Grinnz root node i should say
00:17 gordonfish Oh right, I meant to write $dom->at()->text/all_text, thanks
00:19 gordonfish In that case, both [$dom->at('text')->text] and [$dom->at('text')->all_text] yield [" "]
00:34 adv_ how can i find pages? like <page id="1" bbox="0.000,0.000,612.000,792.000" rotate="0">
00:35 adv_ thanks gordonfish
00:36 Grinnz $dom->at('page#1')
00:37 Grinnz or my $collection = $dom->find('page')
00:39 adv_ Grinnz, that gets the childs too
00:39 adv_ i just want that line
00:39 adv_ children* lol
00:54 adv_ ->text yields nothing
00:54 adv_ all_text gets children
00:56 Grinnz ?
00:56 Grinnz thats what they're documented to do, yes
00:57 Grinnz you asked "how can i find pages?", nothing about where the text might be
00:58 adv_ i meant the html text of page
00:59 mib_zt080x joined #mojo
00:59 Grinnz neither ->text nor ->all_text returns html
01:00 adv_ yeah tried at and find too, without them
01:07 Grinnz ->at and ->find are for retrieving one node or a collection of nodes respectively
01:07 Grinnz you usually need to do something else with those nodes
01:08 Grinnz don't know what you're trying to do so
01:11 adv_ Grinnz, i want to retrieve this line <page id="1" bbox="0.000,0.000,612.000,792.000" rotate="0"> from an xml doc
01:17 Grinnz that "line" is the opening part of a tag
01:18 Grinnz $dom->at('page#1')->content('') will give you the opening and closing tag
01:23 adv_ thanks Grinnz
02:14 noganex_ joined #mojo
02:36 gordonfish Or <tag/> if the dom is xml If dom is xml (starts with <?xml ...>)
02:36 gordonfish s/If dom is xml //
02:36 purl Hmm.  No matches for that, gordonfish.
02:37 gordonfish errm
02:37 gordonfish are you related to perlbot by any chanse?
02:37 gordonfish chance
02:37 gordonfish (sorry for the types, it's 107 outside
02:37 arcanez purl: you?
02:37 purl I am a (modified) flooterbuck infobot, and my owner is perigrin.  Download source at http://flooterbuck.sourceforge.net/ or edenc's bitch or espertinho or bugado or stupid. or the mongodb of irc bots or Nuclear Biological Chemical or a big metal dummy. or he mongodb of irc bots or a big fat liar or my favorite robot or delightful today or a nasty woman
02:37 gordonfish typos
02:38 arcanez 107F? that's hot
02:38 gordonfish whoa... bots these days
02:38 gordonfish arcanez: Indeed
02:40 arcanez I'm in PHX and it's not even that hot here
02:42 jabberwok arcanez:  you know the folks at Phoenix.pm?  i used to be a regular there in the 90s
02:45 arcanez nope
02:46 jabberwok k .-- they do still meet regularly in Scottsdale and even post presentation movies on youtube, fwiw.
03:40 jberger Wanna talk hot? https://cloud.jberger.pl/s/n6V5A5pD0knwr5U
03:41 arcanez Hawaii?
03:41 purl i guess Hawaii is very big on spam, for some reason that i never quite figured out.
05:19 _sfiguser joined #mojo
05:46 karjala joined #mojo
06:11 aborazmeh joined #mojo
07:00 jberger Yeah
07:00 * jberger hugs purl
07:00 * purl nibbles jberger's elbow
07:07 arcanez lol
07:15 bianca joined #mojo
07:23 Vandal joined #mojo
07:36 ashimema sorry.. I'm likely being dim.. but can someone who understands Mojo::Pg well explain to me how/if it keeps a connection alive when listening to a channel?
07:38 ashimema I seem to lose notifications..
07:39 prg joined #mojo
07:40 ashimema sometimes my call to notify fails with a db connection error.. which I think can be solved by adding a ping into Mojo::Pg::Pubsub::_db, but other times I can see the nofity going into the db, but never come out again on the listening controller
07:45 petru joined #mojo
08:16 sri ashimema: it's not exactly battletested, therr may very well be bugs
08:17 ashimema I'm more than happy to do the battle testing ;)
08:17 ashimema hence asking the questions.. so long as I'm not getting too annoying.
08:17 * ashimema has been looking at the node library for inspiration and they seem to have the pubsub in a connection retry loop to make sure it's always alive
08:18 ashimema though my reading of node isn't alway 100% accurate.. not having the background
08:18 sri under heavy load there shouldn't be a problem with connection timeouts and the like, but yea, i guess a lot of idling might cause problems
08:18 ashimema I think it's the idling in my case
08:19 ashimema low load whilst in morbo and only myself and one dev lightly testing
08:19 sri the DBD::Pg api for notifications is not great
08:20 sri so, making it reliable might take creative hacks, like sending a regular ping message to the mojo.pubsub channel or so
08:20 * ashimema has looked that deep yet.. still just getting to grips with how I think the code is meant to work at the Mojo::Pg end.. you guys are leagues ahead of my perl most of the time
08:20 sri well, it's meant to maintain a connection at all times
08:21 ashimema DBD::Pg or Mojo:Pg?
08:21 sri Mojo::Pg::PubSub
08:22 ashimema this line is what we're using for that right: https://metacpan.org/source/SRI/Mojo-Pg-4.01/lib/Mojo/Pg/PubSub.pm#L52
08:22 ashimema the 'close' event
08:22 bobkare I have some old code that uses DBD::Pg notifies and idled for a long time, it ran in a loop and every minute or so it would run a ping query against the database to see if the connection was still good.
08:24 sri bobkare: actually not a bad idea
08:25 sri since we have an ioloop running
08:25 ashimema that's what I was thinking :)
08:25 ashimema I have the feeling that close even often doesn't get fired
08:26 sri Mojo::IOLoop->recurring(60 => sub { $self->_db->ping })
08:26 ashimema I can't see any way of detecting a close to trigger it without some sort of ping loop or simlar
08:30 ashimema also.. am I right in my reading.. that if you want to use the pubsub attribute and the db method at the same time you need a minimum of 2 connections?
08:30 sri correct
08:30 ashimema for max_connections that is
08:30 sri wrong
08:31 ashimema oh..
08:31 sri pubsub connection never goes into the cache
08:32 ashimema is that where the weaken comes into play (weaken is right at the border of my perl knowledge.. an area I'm actively tryingto get a better understadning of now)
08:33 sri not really, just avoids a circular ref on the closures
08:34 sri which perl couldn't "garbage collect" when the objects get destroyed
08:34 ashimema ok
08:34 ashimema so wouldn't https://metacpan.org/source/SRI/Mojo-Pg-4.01/lib/Mojo/Pg/PubSub.pm#L42 grab a connection from the pool and hold onto it then?
08:34 sri correct
08:35 ashimema so you will need at least max_connections=2 then surely.. cause otherwise pubsub grabs the only connection from the pool
08:35 sri maybe add a "$self->{ping} ||= Mojo::IOLoop->recurring(60 => sub { $self->_db->ping });" below that
08:35 ashimema do feel free to cal me an idiot (with qualification)
08:35 sri no you don't
08:35 purl Oh yes I do
08:36 sri you can have as many connections as you like
08:36 sri max_connections only says how many will be kept open when they are put back in the queue
08:36 ashimema ohh...
08:36 ashimema light bulb moment.. thanks
08:36 sri same as Mojo::UserAgent::max_connections
08:37 sri a common misunderstanding, and i would rename the attributes if i could
08:37 ashimema max_connections isn't a hard max.. it's more of a max_cached
08:37 ashimema thanks... that really helps my understanding
08:47 nic joined #mojo
08:50 ashimema that ping doesn't do an automatic reconnect does it.. so we'd also need to add a line to bring up the connection if the ping fails.. right?
08:50 * ashimema will grab master and give this a go
09:00 sri the question is if the ping will make the close event fire
09:00 sri only if that's not the case would we need a manual reconnect on failed ping
09:03 inokenty joined #mojo
09:09 ashimema cheers
09:11 * ashimema will try to write a test that introduces a kaos monkey into the db connection ;)
09:11 ashimema thanks for all the guidance this morning sri.. very helpful
09:13 karjala joined #mojo
09:16 howitdo joined #mojo
09:20 irqq joined #mojo
09:44 _sfiguser hello all, guys i'm not a pro web dev... and i'm concerned about security... for what concerns security how should sessions and authentication should be managed ?
09:44 _sfiguser also file upload, how can i do some sanitization with mojo ?
10:35 bianca joined #mojo
10:47 bianca joined #mojo
10:51 tchaves joined #mojo
10:58 bianca joined #mojo
11:03 karjala joined #mojo
11:15 batman _sfiguser: the $c->session("whatever") value cannot be modified inside the web browser, but it's not encrypted, so don't store any secret information the session cookie, or any other cookie
11:15 batman usually you store a user id, email or something else that can be used to look up user data on the server side.
11:16 batman not sure what you mean about "sanitation", regarding uploads.
11:17 yukikimoto joined #mojo
11:17 batman "cannot be modified" = the client need to know your server secret or be able to crack checksums in some other clever way. this means that you must set $app->secrets([....]) to something clever
11:18 _sfiguser batman, ok what are common choices for app->secrets ?
11:19 batman just some looooong random value, that is stored somewhere between app restarts
11:19 batman if you just do sha1_sum(rand), then all your users will be logged out between app restarts
11:20 marcus Anyone know if llikhatskiy is still doing perl things?
11:21 batman _sfiguser: i usually do some variation of `perl -MMojo::Util=sha1_sum -MTime::HiRes=time -le'print sha1_sum($$, time, "kasndljkansd")'` to generate a secret
11:32 _sfiguser batman, is there any tutorial on session management and how to do it with mojo  ?
11:32 _sfiguser marcus, who is llikhatskiy ?
11:33 marcus 2https://metacpan.org/author/LIKHATSKI
11:34 batman _sfiguser: there's really not much to know, but have a look here: http://mojolicious.org/perldoc/Mojolicious/Guides/Tutorial#Sessions
11:41 bianca joined #mojo
11:43 gregf_ joined #mojo
12:45 bianca joined #mojo
12:58 Pyritic joined #mojo
13:09 * sri wonders if amd will make a real comeback with their new cpu lineup
13:10 gizmomathboy joined #mojo
13:22 _sfiguser joined #mojo
13:30 mishanti1 Seems like it. Ryzen is pretty amazing, and now AMD has even managed to onboard multiple brands in making proper support for it in their motherboards.
13:30 mishanti1 Long time coming though. AMD has not exactly been able to keep up with Intel the last 10+ years.
13:34 gryphon joined #mojo
13:34 coolo joined #mojo
13:42 tchaves joined #mojo
14:02 sri yea, big question will be if it's just intel getting lazy, or amd getting better
14:08 mishanti1 Intel has definitly become lazy. They have really been owning both consumer and business segments for a long time, and I guess that has affected them.
14:08 mishanti1 But it's cool though, pushes AMD forward and mabe Intel will ramp up again.
14:11 mishanti1 Coffee Lake seems like a nice new release though.
14:14 mcsnolte joined #mojo
14:19 sri kaby lake was pretty damn lazy
14:21 sri at least intel will finally be forced to bump up the number of pcie lanes
14:50 petru joined #mojo
14:55 bianca joined #mojo
14:56 sri hmm, guess i want to make a change to Minion::foreground
14:56 sri it currently does not report if a job throws an exception
14:58 sri guess it would make sense to rethrow actual exceptions
14:58 sri or it could check the actual state, and throw the result if it is failed
14:58 sri to handle $job->fail(...)
15:06 sri oh, this looks like a very useful extension to the irc protocol :o https://blog.irccloud.com/reply-threads/
15:09 haarg ew
15:10 sri i actually use irc for work... and having a history with threading would be so useful
15:20 PopeFelix Grinnz, I'll check out that plugin. Thanks.
15:21 PopeFelix sri, yes, that would be useful, but at that point, what's the difference between that and email threads?
15:22 sri real-time communication
15:23 PopeFelix I suppose
15:26 haarg i really dislike adding threading to a conversational medium
15:28 mishanti1 Works pretty well in Slack.
15:29 haarg i know more people who dislike it in slack than the other way around
15:32 karjala joined #mojo
15:32 mishanti1 Guess we know different kinds of people.
15:41 sri i just want it for my irc history
15:42 sri but i guess it's not very realistic anyway, irc is unlikely to change in a significant way
15:49 sri ok, this is better https://github.com/kraih/minion/commit/6b7bf06584731289e2584c2b11295862fb485ac0
15:49 sri kinda sucked when a job that fails looks like it passed
16:05 _sfiguser ok i understand... this API https://metacpan.org/pod/Mojolicious::Sessions but i don't know how to manage it, i lack web dev experience... to what should i set cookie ? where should i store in order to be secure ?  where can i find these infos ?
16:12 vroomanj joined #mojo
16:14 vroomanj Hello. I've been looking around and can't find the answer. Is it possible to name a cookie using Mojolicious::Lite? Or do I need to use Mojo::Base for something like that? It seems Mojolicious::Sessions might require a Mojo::Base app?
16:16 howitdo joined #mojo
16:17 Grinnz full apps are "Mojolicious" not Mojo::Base, and you can do anything in Mojolicious::Lite that you can do in a full app
16:17 Grinnz Lite is just a wrapper
16:18 Grinnz app->sessions is the Sessions object in a Lite app
16:18 vroomanj Grinnz: Hmmm...
16:18 vroomanj Grinnz: Ahhh! That might have been my issue. Thanks :)
16:19 vroomanj Somehow I didn't stumble across that in my Googling. Perhaps it should have been obvious :P
16:23 bianca joined #mojo
16:24 petru joined #mojo
16:24 marty joined #mojo
16:25 * sri opens https://github.com/kraih/mojo/issues/1119
16:25 sri one more doc task
16:51 _sfiguser where can i find an example of  mojolicious application in order to understand how i should manage sessions and authentication ?
16:51 _sfiguser also should i hash the passwords to store them in a db  ? in which way ?
16:51 _sfiguser i mean with which algorithm ?
17:00 [vlad] hello again _sfiguser
17:00 sam joined #mojo
17:00 [vlad] https://duckduckgo.com/?t=disconnect&amp;x=%2Fhtml&amp;q=mojolicious+authentication&amp;ia=images
17:00 [vlad] also https://metacpan.org/pod/Mojolicious::Plugin::Authentication might be useful
17:01 Pyritic joined #mojo
17:01 [vlad] https://metacpan.org/search?size=20&amp;q=Mojo+auth has a lot of choices too
17:12 pink_mist I thought most people specifically said Mojolicious::Plugin::Authentication was completely useless
17:13 Janos joined #mojo
17:14 [vlad] i have no clue i have never used it
17:14 [vlad] i auth from the db
17:15 preaction it's not completely useless, but it has a bunch of limitationss
17:16 preaction and apparently they moved to gitlab...?
17:17 preaction actually, my patch got merged, so in theory it's useful beyond its own features: https://github.com/benvanstaveren/Mojolicious-Plugin-Authentication/pull/17 if you have some other kind of auth, you can still use this plugin to communicate internally about auth
17:27 howitdo joined #mojo
17:28 PryMar56 joined #mojo
17:38 * sri finally got around to reviewing https://github.com/kraih/mojo/pull/1118 in more detail
17:40 bianca joined #mojo
17:49 sri i don't think this section should exist :/ https://github.com/kraih/mojo/pull/1118/files#r131717008
17:50 sri subclassing Test::Mojo is just the wrong approach
17:50 sri for simple tests we have the $location_is approach, and for reusable modules there's Test::Mojo::WithRoles
17:59 sri it's one of those cases where imo roles are the only sensible solution
18:05 petru joined #mojo
18:06 * sri was thinking of just adding Role::Tiny as a new optional dep, and supporting "use Test::Mojo 'Foo';" natively
18:06 sri jberger has the Test::Mojo::Role namespace blocked though, so can't do it now
18:10 sri and that's why we try to avoid 3rd party modules from taking overly generic namespaces :S
18:27 sam joined #mojo
18:46 gryphon joined #mojo
18:59 bianca joined #mojo
19:06 rick_soc joined #mojo
19:08 castaway joined #mojo
19:09 rick_soc hello o/
19:12 rick_soc Trying out RenderFile plugin, having a small problem
19:13 rick_soc it's throwing this error "You cannot provide both "format" and "content_type" option" but I'm not specifying content_type.  I tried it without format too and it still throws that error.
19:15 pink_mist doesn't look like a Mojolicious error, so you'd need to ask the plugin author I believe
19:16 rick_soc Yea the error matches a similar description in the plugin readme, which I'm correctly honoring.  bummer
19:17 rick_soc What is the alternative way to invoke a file download from a controller, without having to move the file to a public accessible location first?
19:17 pink_mist can't you just $c->reply->static(...) or $c->reply->asset(...)?
19:18 Grinnz the last time i looked at RenderFile i didn't see the point, iirc
19:18 Grinnz https://metacpan.org/pod/Mojolicious::Guides::Rendering#Serving-static-files
19:18 pink_mist https://metacpan.org/pod/Mojolicious::Plugin::DefaultHelpers#reply-%3Easset
19:18 pink_mist and
19:18 pink_mist https://metacpan.org/pod/Mojolicious::Plugin::DefaultHelpers#reply-%3Estatic
19:18 pink_mist s/and/or/
19:18 irqq joined #mojo
19:23 rick_soc If I understand the "serving static files", it is serving a publicly accessible file
19:23 pink_mist see the next subsection
19:23 pink_mist which shows an asset
19:24 rick_soc The asset example also uses a publicly accessible file
19:24 pink_mist the asset shows /etc/passwd
19:24 pink_mist ffs
19:24 pink_mist that's NOT publicly accessible
19:25 rick_soc Sorry I was on the 2nd link
19:26 pink_mist but no, if you looked at my links, you'd see that $c->reply->static() is not limited to paths in the public dir as long as you ../../ out of it
19:26 pink_mist but I'd still suggest asset instead
19:27 Grinnz "For somewhat static content, like cached JSON data or temporary files"
19:33 irqq_ joined #mojo
19:36 bianca joined #mojo
19:45 rick_soc thanks, working great now
19:54 bianca joined #mojo
19:57 mcsnolte joined #mojo
20:23 marty joined #mojo
20:36 sri please review the latest version https://github.com/kraih/mojo/pull/1118
20:36 sri i'm close to giving it my +1
20:52 Pyritic joined #mojo
21:16 stryx` joined #mojo
21:24 _sfiguser joined #mojo
21:34 kgoess joined #mojo
21:39 kgoess if a request header is too long (over 8192 bytes), Mojo::Headers->parse sets limit=1 and returns early, but still hands the request to your app code
21:40 kgoess where is one expected to handle that?
21:42 Grinnz kgoess: https://metacpan.org/pod/Mojo::Message#is_limit_exceeded
21:42 Grinnz $c->req->is_limit_exceeded
21:42 kgoess right, so check that in every single route endpoint?
21:42 Grinnz I check it in a global under route, yeah
21:43 Grinnz it mostly depends what sort of error you want to return if it's true
21:43 kgoess "in a global under route", can you point me to an example?
21:43 Grinnz https://metacpan.org/pod/distribution/Mojolicious/lib/Mojolicious/Guides/Routing.pod#Under
21:44 kgoess oh!
21:44 Grinnz make an under route for '/' which returns 1 if is_limit_exceeded is false, and otherwise renders something and returns false
21:44 Grinnz and attach all routes to that
21:44 kgoess thanks!
21:57 petru joined #mojo
22:11 petru joined #mojo
22:34 mib_nnlb3t joined #mojo
22:35 mib_nnlb3t Good day
22:35 purl every day's a holiday, every meal's a feast
22:36 mib_nnlb3t Hi, this is the first time I write here.
22:37 mib_nnlb3t forgive me if I don't do the right questions to the right people
22:38 mib_nnlb3t My first question is: How can I start Mojolicious as a simple process, not a daemon?
22:39 mib_nnlb3t Ok, next question
22:39 purl that would be whether I stab you in the head
22:40 sri what's a "simple process"?
22:40 mib_nnlb3t Hi!
22:40 Grinnz please ignore purl, just a bot
22:40 mib_nnlb3t a process with a parent
22:41 sri that will do http://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#Built-in-web-server
22:41 Grinnz mib_nnlb3t: a "daemon" in mojolicious terms is simple. it doesn't background or anything
22:42 mib_nnlb3t Let me explain a bit better what i want to do.
22:43 sri btw. technically all daemons have a parent process
22:43 mib_nnlb3t yes, but i do not want it to be init
22:44 mib_nnlb3t I want that if I kill the parent I kill mojolicious.
22:44 sri yes, then you got your answer already
22:45 Grinnz the only built in web server that daemonizes itself is hypnotoad, so if you're using daemon, prefork, or morbo, it won't do that
22:48 mib_nnlb3t Ok, thank you, I haven't tested it myself. My college told me it was a daemon, and I thought it made sense, having that name.
22:49 Grinnz it's a different meaning of "daemon"
22:49 mib_nnlb3t in what sense?
22:50 Grinnz it's meant to run continuously and act on its own, but it doesn't isolate from the parent process
22:50 mib_nnlb3t What he told me is that even when he killed the parent process, mojolicius still run on it's own
22:51 Grinnz that shouldn't happen unless the process hangs
22:52 mib_nnlb3t Well, nevermind I'll check it myself. I do not even know how he started mojolicious.
22:52 Grinnz you can background the invocation though
22:52 mib_nnlb3t yes
22:53 Grinnz anyway this is the daemonizing code, and it's only invoked by hypnotoad: https://metacpan.org/source/SRI/Mojolicious-7.39/lib/Mojo/Server.pm#L28-39
22:53 mib_nnlb3t Thanks a lot.
22:54 mib_nnlb3t I tried to chat a couple of times , but there was nobodie there. I started to think I was the only person using Mojolicious.
22:56 Grinnz IRC is asynchronous, generally its best to just ask your question and someone may come along in an hour that knows the asnwer
22:56 Grinnz this channel is sometimes active sometimes not
22:56 mib_nnlb3t Ok. :D
22:58 mib_nnlb3t I remember using IRC back in the 90' I started to think this sort of help was somekind of a joke, considering perl's age.
22:58 Grinnz lots of opensource communities still use IRC for community support, particularly on freenode
22:59 arcanez perl 5.26 just came on in May
22:59 mib_nnlb3t and the dinosaur pet of Mojo .. did't help
22:59 Grinnz haha
22:59 Grinnz I don't think that's what the mascot was supposed to mean
22:59 mib_nnlb3t I took it that way.
23:00 mib_nnlb3t Well, i have choosen perl, because i needed an interpreted language for prototyping
23:01 Grinnz https://github.com/kraih/mojo/commits/master https://perl5.git.perl.org/perl.git/ perl and mojo are both quite active in development :)
23:01 mib_nnlb3t I tested ruby ... python ... and I realized that perl can do more
23:02 mib_nnlb3t every 'new' script language is based on perl. UMHO
23:02 Grinnz perl was based on a lot of things, too, but it certainly inspires some of the newer ones
23:04 mib_nnlb3t Yes, grinnz, and Mojo seems to be very modern, I liked it better than ruby.
23:05 mib_nnlb3t Just two questions more.
23:06 mib_nnlb3t I miss some code for internacionalization, some for user login ...
23:07 mib_nnlb3t Though it's easy to do it by my own... Is there any recomended plugin or extension to these characteristics?
23:09 mib_nnlb3t Where can I find more information? Is there any book ... or any other source of info I should pay attention?
23:09 Grinnz https://metacpan.org/pod/Mojolicious::Plugin::I18N
23:09 arcanez http://mojolicious.org/
23:09 Grinnz for user login, i usually roll that sort of thing myself, but there are some plugins related to it that may or may not be helpful
23:10 Grinnz just search metacpan and see what there is
23:10 mib_nnlb3t Ok.
23:11 mib_nnlb3t I didn't like I18N, I thought it was to complex and I didn't even know if it was something an experienced perl programmer would use
23:12 Grinnz can't say. I don't do anything in that area
23:13 mib_nnlb3t Well thanks a lot for your help Ginnz.
23:14 mib_nnlb3t I'll come back more often here. I hope I can help someone in the future.

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