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

IRC log for #mojo, 2015-12-09

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

All times shown according to UTC.

Time Nick Message
00:00 voldemortensen joined #mojo
00:00 sri lol http://www.databasesoup.com/2015/12/meet-newest-member-of-postgresql.html
00:01 vanHoesel joined #mojo
00:02 Zoffix heh
00:19 voldemortensen joined #mojo
00:38 tinita joined #mojo
01:09 good_news_everyon joined #mojo
01:09 good_news_everyon [mojo] kraih tagged v6.36 at 003001c: http://git.io/vRQIp
01:09 good_news_everyon left #mojo
01:10 good_news_everyon joined #mojo
01:10 good_news_everyon [mojo] kraih pushed 1 new commit to master: http://git.io/vRQLC
01:10 good_news_everyon mojo/master 782df33 Sebastian Riedel: bump version
01:10 good_news_everyon left #mojo
01:21 Zoffix joined #mojo
02:36 d4rkie joined #mojo
03:02 noganex_ joined #mojo
03:26 voldemortensen joined #mojo
03:59 noganex joined #mojo
04:03 kaare joined #mojo
04:08 inokenty-w joined #mojo
04:25 sri jberger:so, chicago is getting google fiber :o
04:25 d4rkie joined #mojo
04:26 preaction yeah, in like 20 years :p the politicians and the unions have to wet their beaks first
04:54 jberger :o
04:55 jberger And I just signed two years with Comcast
05:04 * jberger requests email updates
05:10 atom joined #mojo
05:12 atom I'm trying to use Mojolicious::Plugin::Proxy.... how does this "get '/foo' => sub { shift->proxy_to('http://mojolicio.us/') };"  look in the non-lite application?
05:12 atom I thought $r->get('/foo')->proxy_to('http://mojolicio.us/'); would work, but it does not
05:24 genio atom: I haven't tried it, but it seems to me it should be    $r->get('/foo' => sub { shift->proxy_to('http://mojolicio.us') });
05:24 genio or something like that
05:26 d4rkie joined #mojo
05:33 atom you're totally right
05:34 atom that does work :)
05:52 haarg joined #mojo
06:27 Zx3 joined #mojo
06:28 d4rkie joined #mojo
06:37 jwang joined #mojo
06:48 absolut_todd joined #mojo
06:55 kivilahtio joined #mojo
07:41 sugar_ joined #mojo
08:08 mattp joined #mojo
08:16 d4rkie joined #mojo
08:23 AndrewIsh joined #mojo
08:24 Vandal joined #mojo
08:27 trone joined #mojo
08:35 cpan_mojo Mojo-Webqq-1.6.5 by SJDY https://metacpan.org/release/SJDY/Mojo-Webqq-1.6.5
08:38 eseyman joined #mojo
08:42 berov joined #mojo
08:51 osfabibisi joined #mojo
09:07 cpan_mojo Mojo-Webqq-1.6.6 by SJDY https://metacpan.org/release/SJDY/Mojo-Webqq-1.6.6
09:24 mib_2y44br joined #mojo
09:27 berov joined #mojo
09:36 dod joined #mojo
09:37 melo joined #mojo
09:51 melo1 joined #mojo
09:51 punter joined #mojo
09:56 Adura joined #mojo
10:26 jontaylor joined #mojo
10:39 berov left #mojo
10:40 berov joined #mojo
10:52 CandyAngel OKay.. with this telnet Mojo::IOLoop::Client thing, do I need to start my workers in the main app process?
10:52 CandyAngel I still can't figure out how to do a connection in just the worker process -.-
11:11 Zoffix joined #mojo
11:19 stephan48 CandyAngel: did you try listening for the worker event?
11:19 stephan48 it will only emit on workers
11:21 stephan48 CandyAngel: http://paste.stejau.de/eeacb5df13a9
11:22 stephan48 i am using something like that in an application of mine
11:23 kes joined #mojo
11:25 stephan48 it will fire per worker exactly once
11:27 CandyAngel OKie, I will try that. Thankies
11:28 CandyAngel I'm back on this one because as I started to write the interface to another system, it went down :P
11:28 CandyAngel But the other system has a web interface that returns XML so it'll be much easier to deal with :)
11:30 stephan48 using that mechanism to install some logic for preventing duplicate jobs to be inserted
11:30 CandyAngel COolies
11:30 CandyAngel I need to to establish an Mojo::IOLoop::Client and authenticate for a specific system because I can only have 1 authenticated session at a time
11:31 CandyAngel need it to*
11:31 CandyAngel From my wireshark logs, I think it sends a "go ahead" command when Minion can write the next request so that will be handy
11:32 CandyAngel So ideally, it would dequeue only when it sees that (maybe from an event I fire?)
11:32 CandyAngel I'll deal with that when I get there :P
11:33 stephan48 need to go now
11:33 stephan48 have fun :)
11:33 CandyAngel Okie
11:33 CandyAngel Thanks for you help :)
11:52 d4rkie joined #mojo
11:54 CandyAngel Well.. that puts a dampener on things. I can't install Minion::Backend::SQLite >.< Yay segfaults
11:54 CandyAngel Or cross-thread requests or something
12:11 neilhwatson joined #mojo
12:22 CandyAngel Okay, I'm doing this back-to-front or something. My plan won't work as the background worker doesn't know what system it is going to be connecting to (which is the queue name)
12:24 stephan48 can't you retrieve the queue names?
12:25 stephan48 i see
12:25 CandyAngel Not in the "worker" event. Only Minion::Command::worker knows what queues the worker it creates will get jobs from
12:25 stephan48 mh.
12:26 McA joined #mojo
12:26 CandyAngel Perhaps it would be better if the app created the connections and workers, and dequeued jobs whenever that client was ready to deal with a request..
12:44 CandyAngel Though I'd still need a way of letting IOLoop::Client deal with the telnet stuff, while not passing to another worker until the current one if finished with it -.-
12:44 CandyAngel one is finished*
12:54 CandyAngel Pretty sure I need to subclass some stuff for this to work :P
13:09 kes joined #mojo
13:21 d4rkie joined #mojo
13:21 d4rkie joined #mojo
13:59 d4rkie joined #mojo
14:15 CandyAngel Yeah, I'm not seeing any way of doing this without subclassing
14:21 gryphon joined #mojo
14:23 CandyAngel Unless I can limit an Mojo app to only one connection at a time and launch one for each system
14:33 kaare joined #mojo
14:38 preaction CandyAngel: you could make a simple mojo app that uses websockets to maintain a telnet connection, then make your webapp connect to that app to do it
14:51 CandyAngel I'm not sure what you mean. So the simple app connects to the telnet server and listens for websocket connection from the webapp?
14:51 preaction right
14:52 CandyAngel And.. limit the number of websocket connections it can open? Only one thing will be able to "control" the telnet thing at a time
14:52 CandyAngel It isn't always a "run this transaction, get result, finish"
14:52 CandyAngel Sometimes I need to send a "fetch the next page" too
14:53 CandyAngel It's not just telnet, it's emulated terminal over telnet
14:53 preaction at that point you can put an api on top of it, so do it however you need
14:53 CandyAngel TNVIP 7804 :P
14:54 preaction the individual clients (your web app) don't need to talk exactly the commands in exactly the right way. the telnet controller app can do what it needs how it needs
14:55 CandyAngel Hm
14:55 CandyAngel Okay, so how about an app that only accepts one connection and is "always running"
14:57 bpmedley joined #mojo
14:57 CandyAngel And then I can make HTTP requests and it does whatever with the telnet server to get the data and return some JSON stuff?
14:58 CandyAngel One each of those "intermediaries" on some different ports..
14:59 preaction or websockets, so you can send new pages of data as you receive them, instead of requiring the client to ask for more
14:59 CandyAngel Couldn't I just grab all the pages before I return? I guess that would timeout sometimes though.. hmm
15:01 preaction that's why a websocket: send pages as you get them
15:01 preaction send command to server, read page, send page to client, request next page from server, read page, send page to client, request next page from server, etc...
15:02 CandyAngel And finally, close the socket?
15:03 sri has anyone looked into how that problem can be solved with other job queues?
15:04 CandyAngel As in, aside from Minion?
15:04 sri yes
15:04 CandyAngel Please bear in mind that I'm not even supposed to have Perl on this computer.. I can't just install whatever I want
15:05 sri that would be the first thing i do, look how others have solved the problem, and adapt a solution to the software stack i'm currently using
15:15 CandyAngel Mhm
15:31 voldemortensen joined #mojo
15:46 CandyAngel I'm pretty sure I can do it if I just make my own worker command so it emits the system (i.e. queue) for the 'worker' event
15:47 CandyAngel Then the background worker holds the connection open and handles one job at a time
15:49 CandyAngel And the data it gets is just in its return thing
15:54 HtbaaPi does anyone have an example of running a minion worker with Upstart?
15:54 HtbaaPi I got hypnotoad working because it daemonizes itself, but when starting the worker service for minion it hangs. It does start though
15:55 CandyAngel Or I subclass Minion, whichever :P
15:58 HtbaaPi http://kvz.io/blog/2009/12/15/run-nodejs-as-a-service-on-ubuntu-karmic/ that helped! :-)
15:59 asarch joined #mojo
16:00 CandyAngel Actually, I'd need to make my own worker command *and* monkey_patch Minion
16:05 disputin joined #mojo
16:06 CandyAngel >.>
16:07 CandyAngel <.<
16:07 CandyAngel There we go :)
16:07 preaction that sounds like a horrible idea :(
16:07 preaction but, if it works, i guess?
16:07 CandyAngel I made my own worker command that emits 'worker' (again) with the queues
16:08 sri that could have been a native minion feature
16:08 CandyAngel So $minion->on (worker => sub{}) can set up the connection
16:08 sri but nobody said anything when i asked
16:08 CandyAngel What could have?
16:09 sri making the queues used by a worker public
16:09 CandyAngel The worker doesn't know what queues it has
16:09 sri but it could have
16:11 CandyAngel Welll.. I didn't know I needed it until 3 hours ago
16:12 CandyAngel And you've batted my ideas back (for good reasons) enough that I'm more hesitant to suggest them :P
16:13 CandyAngel Making 'queues' an attribute of Minion::Worker is easy enough though, I could probably patch it myself
16:13 CandyAngel Though I've seen how fast you work, you'd be like.. writing the commit message right now :P
16:18 sri i don't think it fits in anymore
16:18 CandyAngel What do you mean?
16:18 sri at least not without a breaking change... which i don't really want to make at this time
16:18 sri queues is an option of the dequeue method now, having an attribute too is ugly
16:19 CandyAngel With the option being an override of the attribute?
16:20 CandyAngel Or a merge..
16:21 sri would be the first such attribute, i don't like it
16:21 CandyAngel Okie
16:21 sri it's tacked on, not designed well
16:21 sri like i said, this should have been done differently from the start
16:22 CandyAngel And this is why I still haven't written my OpenHMD::OO module :P
16:22 CandyAngel I'm so worried I'm going to make a bad API I've just not started >.<
16:22 CandyAngel Err
16:22 CandyAngel Not saying this is a bad API
16:22 CandyAngel Before anyone thinks that!
16:23 sri oh, i didn't say the current api is bad
16:24 sri i'm not even convinced your use case is valid, just that tacking on an attribute would be ugly
16:25 sri in fact, i bet there's a more sane solution here
16:25 sri and that one of the other job queues has already solved it with some sort of design pattern
16:25 lluad joined #mojo
16:27 * CandyAngel shrugs
16:28 CandyAngel I don't think I know Mojo well enough to port it even if I found one
16:28 CandyAngel So here's what I am going to do
16:28 CandyAngel Make a Mojo app that deals with the remote server
16:29 CandyAngel Minion job will have the system (which will be translated through config to what port the other app for that server is on)
16:29 CandyAngel And do it that way
16:29 CandyAngel Then i have the "one at a time" ness of Minion
16:31 CandyAngel Without it needed to know what queue it is dealing with
16:31 CandyAngel needing*
16:34 tempire left #mojo
16:34 tempire joined #mojo
16:37 cpan_mojo Minion-Notifier-0.01 by JBERGER https://metacpan.org/release/JBERGER/Minion-Notifier-0.01
16:39 jberger I ended up having a bunch of emitted event flavors
16:40 jberger but what's interesting is that there is a race condition between submitting a job and getting its id back and then subscibing to the finish event for that job (job:$id)
16:40 jberger I haven't tripped on it yet, and it only affects very fast jobs, but yeah
16:42 vanHoesel joined #mojo
16:46 CandyAngel I'd still need to write my own worker command though. "sleep 1" will kill throughput with -j1 but anything else would make it try to issue requests concurrently
16:48 CandyAngel Actuallllly.. I'm just not going to use Mojolicious for this. Thanks for all the suggestions though
17:01 disputin joined #mojo
17:04 CandyAngel Now to go home and use Mojolicious for what it is supposed to be used for :P
17:06 jberger CandyAngel: you could make a tcp pass-through app
17:06 jberger and start that with daemon
17:06 jberger and your minions talk to that
17:13 sri CandyAngel: you don't even need a custom worker command if i understand correctly, just lazily establish the one connection to the backend in the dequeue event if the task matches, and then have one worker with -j 1 that only watches that one queue
17:17 sri and when i say "lazily establish", i mean like $job->app->defaults->{telnet} ||= Whatever->new
17:18 sri then it's persistent in the worker process, and the job process will inherit it
17:25 dod joined #mojo
17:39 dod joined #mojo
18:52 ashimema Toadfarm + Mojo::JSON::MaybeXS question
18:52 ashimema I've got into the habbit of using -MMojo::JSON::MaybeXS $(which morbo) whilst in development
18:53 ashimema and am now writing my Toadfarm based init script
18:53 ashimema obviously in init form I won't be running -MMojo::blah from the command line..
18:54 Grinnz_ ashimema: there's another example in the docs now which may be more applicable
18:54 ashimema Can I just add the use statment to the top of the init script
18:54 ashimema is that the PERL5OPT= example
18:54 Grinnz_ if the init script is perl, yeah using it at the top would owkr
18:54 Grinnz_ work*
18:54 ashimema makes sense.. only just spotted it
18:55 ashimema Toadfarm init scripts.. so perl..
18:55 CandyAngel sri: By having -j1, the worker will wait for a second between processing each job: https://github.com/kraih/minion/blob/master/lib/Minion/Command/minion/worker.pm#L52
18:56 ashimema I have no idea how I tested this back when..
18:56 ashimema just remember it being a nightmare issue for me ;)
18:56 Grinnz_ however... i would set it in PERL5OPT though tbh, in case something starts a new process of perl (not sure if anything would)
18:57 CandyAngel sri: I think I get what you are saying with the lazy connection though. If I pass the system as an argument, which is the same as the queue name, it can connect on the first job it sees
18:57 CandyAngel I'm not sure if it will play nicely with forking though. I completely forgot workers did that for each job >.<
19:01 ashimema Grinnz_: so you'd do something along the lines of adding a /etc/profile.d/perl.sh with 'export PERL5OPT=-MMojo::JSON::MaybeXS' as the content?
19:01 CandyAngel While I don't think it does, the server could issue telnet commands (like, changing settings) while the worker is talking to it in the fork
19:01 Grinnz_ thats one way
19:01 ashimema that 'should' get picked up by the init script early enough ~
19:01 CandyAngel While the job is talking to it, I mean
19:02 Grinnz_ i'm not very experienced in systems deployment
19:02 ashimema that sounded like you had another, possibly more sane, way ;)
19:02 ashimema lol..
19:02 ashimema ok
19:03 Grinnz_ i mean, you can just "use" it in the init script, and set $ENV{PERL5OPT} in case perl is re-run
19:03 preaction ashimema: you could add "use Mojo::JSON::MaybeXS" to your init script, is what Grinnz_ is saying
19:05 ashimema so.. for the slightly dim..
19:05 ashimema why does just having the use statement not work for a mojo app script?
19:06 preaction it will
19:06 preaction as long as it's loaded before mojolicious. that's what we're saying
19:07 preaction the script that does Mojolicious::Command->start_app('myapp')
19:08 ashimema hmm.. ok
19:08 stryx` joined #mojo
19:09 ashimema my script is mounted via toadfarm.. and I have a feeling it loads Mojolicious before anything else..
19:10 ashimema will have a play.
19:10 ashimema :q
19:14 disputin joined #mojo
19:26 Adurah joined #mojo
19:55 woz joined #mojo
19:57 woz Has anyone got any advice on using Mojo::UserAgent to send SOAP requests?
19:58 jberger no mojo-specific advice, but there is an mstpan on SOAP if you just need to get started
19:58 jberger woz: http://shadow.cat/blog/matt-s-trout/mstpan-13/
19:59 woz Thanks Joel
20:00 jberger np
20:00 bwf joined #mojo
20:00 woz Ah, so I've already got code working with SOAP::Lite
20:00 genio https://github.com/genio/www-salesforce-nb/blob/master/lib/WWW/Salesforce.pm#L630   If you're going to make your own XML and not deal with WSDLs etc, it's just as simple as any other request.  Headers and XML are all you need to worry about
20:01 woz I wanted to switch to Mojo for testing
20:02 woz I want to fire a gazillion (approximately) request at a time non-blocking
20:02 Grinnz SOAP::Lite can only use LWP afaik
20:03 woz Yeah exactly
20:03 woz Thanks Genio, that looks useful!
20:03 woz Trying to figure out the POST syntax
20:03 jberger woz: from a transport standpoint if you can get the message and headers out of SOAP::Lite you can push it over to Mojo::UserAgent no problem
20:04 genio https://github.com/genio/www-salesforce-nb/blob/master/lib/WWW/Salesforce/SOAP.pm  simple building of the XML SOAP envelope
20:04 jberger or build the request yourself as genio says
20:04 woz You say that, but how do I post the XML payload
20:04 jberger $ua->post($url => $payload)
20:05 woz That easy? Damn :-)
20:05 jberger genio / woz: you might find it easier to template the xml using Mojo::Template
20:05 jberger (which is a lot like ep, but not EXACTLY)
20:05 miller joined #mojo
20:06 genio and you should be able to build your own SOAP::Transport::MojoHTML or something based on https://metacpan.org/source/PHRED/SOAP-Lite-1.19/lib/SOAP/Transport/HTTP.pm
20:07 genio But SOAP::Lite is such a pain, I'd suggest either doing it yourself or the suggestions in the mstpan jberger linked
20:08 genio jberger: Yea, when I get time to work on the salesforce api again I plan on doing more work on the SOAP portion of the API and using templates
20:08 t joined #mojo
20:09 woz Soap::lite works fine already. I just want to switch to non-blocking posts for load testing
20:09 t Some of my colleagues and I were wondering why daemon isn't a daemon?
20:09 woz Which I can't do with soap::lite
20:09 woz But I can't figure out the post syntax with mojo as it's not a form
20:10 Grinnz I would rather implement a mojo equivalent of https://metacpan.org/pod/XML::Compile::Transport::SOAPHTTP_AnyEvent than try to make one for SOAP::Lite which most likely does not have any understanding of async
20:10 jberger woz: http://mojolicio.us/perldoc/Mojo/UserAgent#post
20:10 jberger I guess it isn't real obvious
20:11 jberger but the 'Hi' string is just post data
20:11 Grinnz ah yeah, the "form" and "json" are generators, a regular string there is used as-is
20:13 woz Aha! Thanks!!
20:14 woz I've looked at that page a dozen times in the last hour, and complete missed example without form/json
20:15 sri t: you mean daemonized automatically?
20:15 DFox I mean daemon. Not running in a session
20:16 sri it confuses too many people
20:16 DFox perl app.pl daemon stays in the foreground
20:16 DFox Calling a daemon that isn't a daemon is a tad bit more no?
20:16 sri not really, you're the first to ever bring it up
20:16 DFox ha really?
20:16 DFox Whelp, not a biggie we were just discussing it.
20:17 sri thing is, nobody wants to daemonize the daemon command
20:17 sri it's just how things have evolved
20:17 sri the production server (hypnotoad) does automatically daemonize
20:18 DFox right, cool thanks.
20:18 sri the commands are mostly used for testing and services like heroku, where you want the server to stay in the foreground
20:19 DFox gotcha, thanks for the explanation
20:19 sri you'll notice that the daemon and prefork commands don't even have a --daemonize flag, it's that rare for people to want to do that :)
20:22 woz joined #mojo
20:22 sri i suppose we could rename the command to something else, there would be a mismatch with Mojo::Server::Daemon though
20:22 cpan_mojo Minion-Notifier-0.02 by JBERGER https://metacpan.org/release/JBERGER/Minion-Notifier-0.02
20:23 miller_ joined #mojo
20:23 sri the Mojo::Server::Daemon name on the other hand does fit though, since it's a base class for building more advanced http daemons
20:24 sri DFox: something more for you to discuss! how do you keep the names consistent *and* correct :)
20:25 DFox oh man
20:25 DFox aint nobody got time for that.
20:28 cpan_mojo Minion-Notifier-0.03 by JBERGER https://metacpan.org/release/JBERGER/Minion-Notifier-0.03
20:28 trone joined #mojo
20:30 preaction i've become of the opinion that it's better for daemonization to be handled by a specific system, like daemontools, so that not everything had to be able to daemonize itself
20:33 Grinnz_ and then there's daemon tools, which is a freeware disc image software
20:34 DFox Difference daemon I believe
20:35 DFox I always assumed daemon tools was a demonic reference.
20:35 preaction yeah. the bsd daemontools used to top the google search, but now it's the iso mounter daemon tools
20:37 jberger presented without comment: https://community.scaleway.com/t/freebsd-a-motion-to-deny/781
20:38 Grinnz_ ehehe
20:38 DFox haha
20:39 pink_mist lol, even when I specifically ddg for 'bsd daemon tools', I get "DAEMON Tools Alternatives for BSD" which is the cd thingie much higher than any bsd daemontools result
20:46 preaction ... lame. daemontools really isn't used enough...
20:48 woz joined #mojo
20:48 woz Woohoo! Got it working. Thanks all.
21:03 ZoffixMobile joined #mojo
21:13 preaction woo!
21:13 woz joined #mojo
21:15 jberger woz++
21:16 dod joined #mojo
21:21 orev joined #mojo
21:24 gryphon joined #mojo
21:25 orev what is the correct way to exit/stop further execution of a route?  in a regular script I might do 'exit', but I don't want to exit the whole app, just the processing of that route
21:26 orev I want to do this from inside a helper that is called from the route
21:26 neilhwatson joined #mojo
21:30 orev I can always check the return code from the helper, just curious if there was another more mojo way
21:40 jberger so in a simple controller action (or route callback) you can simply return early
21:40 jberger return $c->render(text => 'returned early);
21:41 jberger doing this from a helper is a little harder, but not so bad with a little planning
21:42 PryMar56 joined #mojo
21:43 jberger helper check_auth => sub { my ($c, $name, $pass) = @_; return 1 if check_pass($name, $auth); $c->render(text => 'not authorized', status => 401); return 0 };
21:43 jberger then in your action do:
21:43 jberger return unless $c->check_auth($name, $pass);
21:44 jberger so the helper sets up the response on failure, all you need to do is return from the controller on failure
21:44 jberger orev: ^^
21:45 orev I see
21:45 orev so basically checking the return code in the route, just doing it in a succinct way
21:46 jberger yep
21:46 jberger helpers are the bridge between your controllers and your model logic
21:46 jberger (general reminder)
21:54 orev does it make sense to have all subs as helpers?  I'm kind of using a helper for anything I would normally use a sub for right now
21:55 jberger use it where you need access to the controller or the app
21:55 jberger but want to abstract it out
21:55 jberger model logic should generally not BE helpers but be connected to the app via helpers
21:55 jberger in my example the check_pass function is a kind of model logic
21:57 orev I'm basically doing check_pass against ldap, so there are a bunch more steps involved (connect, check, disconnect).  should all of those steps be part of 1 helper, or separate helpers?
21:58 sri here's also a more complete mvc example https://github.com/kraih/mojo-pg/tree/master/examples/blog
21:58 jberger orev: I'd think most of that should be elsewhere
21:59 jberger just as subs in another package or class
21:59 orev I'm doing a lite app right now.  was thinking of using a seprate package in the file
21:59 jberger (do you like how I guessed the true intention of the question :-P)
22:00 orev yes, people with some intuition on irc are rare.  too many people are 'use strict'
22:00 jberger orev: so you can do any of those in a lite app: helper, sub, inline package (or class) or even import from another file
22:01 sri use strict
22:01 jberger Bareword "sri" not allowed while "strict subs" in use
22:01 orev -Dpedant_level=999
22:21 miller_ joined #mojo
22:32 trone joined #mojo
22:49 miller_ joined #mojo
23:17 phillipadsmith joined #mojo
23:19 harleypig joined #mojo
23:19 disputin joined #mojo
23:32 Zoffix joined #mojo
23:39 asarch joined #mojo
23:43 disputin joined #mojo
23:43 disputin joined #mojo
23:51 disputin joined #mojo

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