<    April 2017    >
Su Mo Tu We Th Fr Sa  
 2  3  4  5  6  7  8  
 9 10 11 12 13 14 15  
16 17 18 19 20 21 22  
23 24 25 26 27 28 29  
00:11 chatter29 joined
00:11 <chatter29> hey guys
00:11 <chatter29> allah is doing
00:11 <chatter29> sun is not doing allah is doing
00:12 <chatter29> to accept Islam say that i bear witness that there is no deity worthy of worship except Allah and Muhammad peace be upon him is his slave and messenger
00:18 wpcarro joined
00:26 refriedchicken joined
00:26 jkreeftmeijer joined
00:36 fantomik joined
00:37 jkreeftmeijer joined
00:42 jmcintosh joined
00:46 skrib joined
00:47 wpcarro joined
00:47 jkreeftmeijer joined
00:51 Cohedrin joined
00:51 milad joined
00:58 jkreeftmeijer joined
01:01 LW123__ joined
01:03 <LW123__> hey guys im reading through the programming elixir book and i've got a question here on one part. Under chapter 8 on maps, they talk about how you cant bind a value to a key during pattern matching. so you can do %{ 2 => state } = %{ 1 => :ok, 2 => :error }, but you can't do %{ item => :ok } = %{ 1 => :ok, 2 => :error }
01:03 <LW123__> is this because 2 is interpreted as an integer and not a variable?
01:04 <LW123__> and item has no type/variable assigned?
01:07 shymega joined
01:09 jkreeftmeijer joined
01:15 <asonge> LW123__: no
01:16 <asonge> LW123__: you can't pattern match on keys because of the complexity of the match. matching complexity has to be very well-bounded to behave well in the erlang ecosystem. imagine if you had a 60 element map and you were trying to pattern match 3 different elements out on the left hand side by value. best case complexity is O(n)
01:17 <asonge> it might actually be more than that.
01:17 <asonge> grabbing something by key is O(n log n) worst case, but very often O(log n)
01:18 <asonge> you just hash the key, and then you only have to iterate over how much the hashes collided (which in practice is very low)
01:18 <LW123__> sorry i wasn't questioning the design of it really, I just didn't understand what was happening under the hood -> So when the left side says %{ 2 => state }
01:19 <LW123__> what exactly is that doing in that scenario? Just stating index 2 will be the "state" ? or that state is an arbitrary value on the index 2 of the right side
01:19 jerel joined
01:19 jkreeftmeijer joined
01:19 <asonge> so, the compiler turns that into all the imperative instructions you're used to, and then "fails" the match if the key doesn't exist.
01:20 <LW123__> in the 1st scenario, the key is 2, which represents :error , yes?
01:21 <LW123__> I think I understand it better now after re-reading it and thinking more about how you would use this practically
01:21 <asonge> right, the key is 2. what the pattern match means is that 1) the right side is a map 2) the map has a key of 2 with some value called "state" 3) bind "state" to the value of the key 2.
01:22 <LW123__> gotcha
01:22 <LW123__> thank you so much asonge :) that helped tremendously
01:22 <LW123__> still green over here
01:22 <asonge> the thing about pattern matches is that the construction and destruction of a term have roughly the same shape, so there's a lot of symmetry
01:22 <asonge> but it's not total symmetry
01:23 <asonge> (also, if it's not clear, the "left hand side" of a match follows the same rules as the function head in a parameter, or the patterns being matched in case statements and receive statements)
01:23 <asonge> and a failed match just tries the next pattern in those other 2 cases, instead of raising and error and crashing
01:24 <LW123__> yeah that actually became clear when you explained it just now haha
01:24 <LW123__> it wasn't until i saw that that it clicked
01:24 <asonge> awesome
01:24 <asonge> it's a simple model that's amazingly expressive, but it doesn't have all the power that a normal expression has
01:25 jkreeftmeijer joined
01:28 chrismccord joined
01:36 jkreeftmeijer joined
01:39 tomterl joined
01:46 jkreeftmeijer joined
01:57 jkreeftmeijer joined
02:03 arquebus joined
02:08 chrismccord joined
02:08 jkreeftmeijer joined
02:19 MotherFl1 joined
02:30 wpcarro joined
02:39 milad joined
02:46 jkreeftmeijer joined
02:56 wpcarro joined
02:56 jkreeftmeijer joined
03:01 skrib joined
03:07 jkreeftmeijer joined
03:11 chrismccord joined
03:17 wpcarro joined
03:18 jkreeftmeijer joined
03:28 jkreeftmeijer joined
03:39 jkreeftmeijer joined
03:46 cschneid_ joined
03:50 jkreeftmeijer joined
03:57 zv joined
04:00 jkreeftmeijer joined
04:01 refriedchicken joined
04:02 elgenie joined
04:05 <ryanwinchester> does this make sense, or is it something that already has a good solution that i couldn't find on the googles? https://ryanwinchester.ca/posts/yielding-to-content-in-phoenix-templates
04:05 <ryanwinchester> feedback mucho appreciated
04:06 <ryanwinchester> couldn't think of a good thing to call it, went with yield =/
04:07 ssswitch joined
04:11 jkreeftmeijer joined
04:21 Cohedrin joined
04:22 jkreeftmeijer joined
04:27 milad joined
04:28 jkreeftmeijer joined
04:31 nomicflux joined
04:31 capin left
04:36 capin joined
04:43 jkreeftmeijer joined
04:44 wpcarro joined
04:49 jkreeftmeijer joined
04:49 capin joined
04:59 jkreeftmeijer joined
05:03 skrib joined
05:06 nomicflux joined
05:10 jkreeftmeijer joined
05:19 bloosi joined
05:20 jkreeftmeijer joined
05:28 Talltree joined
05:30 jkreeftmeijer joined
05:32 elgenie joined
05:36 jkreeftmeijer joined
05:38 jeffweiss joined
05:41 wsieroci joined
05:43 jkreeftmeijer joined
05:47 wpcarro joined
05:50 wsieroci joined
05:52 skrib joined
05:54 jkreeftmeijer joined
06:00 jkreeftmeijer joined
06:05 yourname_ joined
06:09 notdaniel joined
06:10 jkreeftmeijer joined
06:14 gvaughn joined
06:16 milad joined
06:17 justelex joined
06:19 JuanMiguel joined
06:26 jkreeftmeijer joined
06:36 meh` joined
06:37 jkreeftmeijer joined
06:47 jkreeftmeijer joined
06:56 elgenie joined
06:58 jkreeftmeijer joined
07:04 jkreeftmeijer joined
07:14 jkreeftmeijer joined
07:17 milad joined
07:19 meh` joined
07:24 jkreeftmeijer joined
07:25 jkreeftmeijer joined
07:34 tuacker joined
07:42 NeverDie_ joined
07:46 nd___ joined
07:47 cschneid_ joined
07:56 stephen_m joined
07:59 wpcarro joined
08:01 meh` joined
08:09 nahtnam joined
08:11 asabil joined
08:18 meh` joined
08:22 cschneid_ joined
08:27 DeadTrickster joined
08:27 josevalim joined
08:37 gmcabrita joined
08:40 PaReeOhNos joined
08:54 dimitarvp joined
08:58 Guest67 joined
08:58 jkreeftmeijer joined
09:04 PaReeOhNos joined
09:06 milad joined
09:07 Guest67 joined
09:11 meh` joined
09:12 MotherFl1 joined
09:20 MotherFl1 joined
09:27 milad joined
09:29 wsieroci joined
09:39 meh` joined
09:47 meh` joined
09:49 MotherFlojo joined
09:50 <smeevil_> o/
10:02 byte512 joined
10:11 wpcarro joined
10:11 lexmag joined
10:19 meh` joined
10:23 cschneid_ joined
10:25 jkreeftmeijer joined
10:25 wsieroci joined
10:26 PaReeOhNos joined
10:28 squallstter joined
11:00 PaReeOhNos joined
11:14 DisruptiveNL joined
11:19 MotherFlojo joined
11:20 meh` joined
11:22 <OliverMT> micmus: ping
11:30 asabil joined
11:31 DeadTrickster joined
11:33 m00dy joined
11:33 PaReeOhNos joined
11:46 jkreeftmeijer joined
11:50 wsieroci joined
11:52 jkreeftmeijer joined
12:06 lexmag joined
12:10 Gasher joined
12:18 dastagg joined
12:20 asabil joined
12:22 m00dy joined
12:23 wpcarro joined
12:23 PaReeOhNos joined
12:27 wsieroci joined
12:32 the_voice- joined
12:32 PaReeOhNos joined
12:33 vmoravec joined
12:35 meh` joined
12:36 Jellybob joined
12:36 BramD_ joined
12:38 masteinhauser joined
12:39 jamesdphillips_ joined
12:39 likestoplay joined
12:40 HashNuke joined
12:40 peanutlove_ joined
12:41 fishcakez joined
12:41 Miah_ joined
12:41 termos joined
12:42 SoreGums joined
12:42 jkreeftmeijer joined
12:43 chops joined
12:43 jorendorff joined
12:44 lbotos__ joined
12:46 HalcyonicStorm joined
12:47 ikanobori joined
12:48 z1mvader joined
12:48 nyaray joined
12:49 milad joined
12:50 filozof joined
12:51 dignifiedquire joined
12:55 kau joined
13:00 <meh`> http://sprunge.us/XGjD I'm getting this error `(ArgumentError) parameters must be of length 0 for query`, any advice on how to make that work?
13:00 <meh`> ^ with ecto
13:03 dimitarvp` joined
13:05 jhack joined
13:12 milad joined
13:14 ctp joined
13:19 jkreeftmeijer joined
13:20 meh` joined
13:26 Marouane joined
13:29 <micmus> meh`: postgres doesn't see parameters inside strings - it just becomes a string with char ?
13:29 <micmus> OliverMT: pong
13:29 <meh`> micmus, welp, thanks
13:30 fernandomm joined
13:38 PaReeOhNos joined
13:40 meh` joined
13:40 jkreeftmeijer joined
13:44 junsuijin joined
13:46 asabil joined
13:56 nomicflux joined
14:04 PaReeOhNos joined
14:05 gem joined
14:06 wsieroci_ joined
14:08 justelex joined
14:16 PaReeOhNos joined
14:19 Marouane joined
14:25 cschneid_ joined
14:36 wpcarro joined
14:37 MotherFlojo joined
14:37 JuanMiguel joined
14:40 lexmag joined
14:42 jkreeftmeijer joined
14:45 ssswitch joined
14:54 rkazak joined
15:00 dastagg joined
15:10 chrismccord joined
15:14 gvaughn joined
15:42 soud joined
15:43 <soud> Hi all, I have an Ecto/Phoenix related question. I have a Post and a Like model. A posts has a has_many relationship to likes. What's the best way to embed the _amount_ of likes in a post query? I'm struggeling to embed it in the returned struct
15:46 wpcarro joined
15:47 Or1on joined
15:47 tuacker joined
16:03 <ciawal> soud: use select
16:03 <ciawal> with a fragment
16:03 <ciawal> select: {model, fragment("SELECT COUNT…")}
16:03 <soud> I just realized I'm asking the wrong question, what I'm trying to achieve is "select count(likes.id) as likes, posts.*" using select
16:03 <soud> ah yes, that will work
16:05 jkreeftmeijer joined
16:05 chatter29 joined
16:06 Guest67 joined
16:06 chatter29 joined
16:06 <chatter29> hey guys
16:06 <chatter29> allah is doing
16:06 <chatter29> sun is not doing allah is doing
16:06 <chatter29> to accept Islam say that i bear witness that there is no deity worthy of worship except Allah and Muhammad peace be upon him is his slave and messenger
16:06 joaocrq joined
16:12 icanhazbroccoli joined
16:13 meandi_2 joined
16:13 wpcarro joined
16:14 jeznet3 joined
16:19 victor joined
16:20 PaReeOhNos joined
16:25 <soud> I'm struggeling to make this work, I got this now: https://bpaste.net/show/33366dea3bb3
16:25 <soud> which it doesn't like: ** (Postgrex.Error) ERROR 42P01 (undefined_table): missing FROM-clause entry for table "l"
16:26 wpcarro joined
16:27 ssswitch joined
16:32 <Nicd-> could we ban chatter29!*@*kiwiirc*?
16:39 lexmag joined
16:39 <mrus> Is there a way to match on a struct inside a case ... do?
16:39 lexmag joined
16:39 <mrus> e.g. case myfunction do\n %mystruct{} -> ...
16:39 <jer> mrus, sure; case thing do %{key1: value} ->
16:40 <mrus> jer: and without the actual content?
16:40 <mrus> I want to match on a specific struct
16:40 <jer> sure %mystruct{} -> will work
16:40 <mrus> oh hm
16:40 <mrus> So what would be the variable that I can use further on then?
16:40 nomicflux joined
16:41 <Nicd-> case %Struct{} = struct ->
16:41 <Nicd-> now it is in variable struct
16:41 <Nicd-> ehh, case blah blah do of course. then that match
16:41 asabil joined
16:42 <jer> you can do case struct do foo = %mystruct{} -> # use foo in here
16:42 <jer> or what Nicd- said :)
16:42 <mrus> oh, that is really nice! Thank you two for helping.
16:42 <jer> mrus, just fyi though; that's rather superfluous (what i posted anyway); as you could just use `struct` inside the match
16:43 <Nicd-> unless it's a function call
16:43 <jer> fair
16:45 <mrus> hm, so you mean like struct -> call_function(struct) ?
16:47 <Nicd-> I mean `case ... do %Struct{} = struct -> <now you can use struct here> end`
16:50 <mrus> ah yes, alright, then I got you right.
16:50 cschneid_ joined
16:52 nomicflux joined
16:53 hakunin joined
16:57 <mrus> just another question maybe someone could explain: `bla = Ecto.Changeset.change mystruct, data\n bla |> Repo.update` works perfectly. `Ecto.Changeset.change mystruct, data |> Repo.update` does not. How come?
17:01 <Nicd-> you need () with pipes
17:02 <Nicd-> it is parsed as Ecto.Changeset.change(mystruct, data |> Repo.update)
17:02 <mrus> interesting
17:02 <Nicd-> it is good practice to use () when you have arguments
17:02 <Nicd-> and I would suggest even when you don't
17:02 <mrus> ok
17:03 <Nicd-> like, foo() instead of foo and foo(1, 2) instead of foo 1, 2
17:03 <Nicd-> it helps with ambiguities
17:03 <Nicd-> (and readability)
17:03 <mrus> I like parantheses, I just tried to adjust my style to the examples I've seen in the Elixir community so far.
17:11 necronomicon joined
17:11 PaReeOhNos joined
17:12 mika__ joined
17:14 m00dy joined
17:17 steffkes joined
17:17 steffkes joined
17:19 ejpcmac joined
17:23 mozzarella joined
17:23 wsieroci joined
17:24 squallstter joined
17:28 mika__ joined
17:31 Marouane joined
17:34 cschneid_ joined
17:37 webdev007 joined
17:37 m00dy joined
17:40 m00dy joined
17:43 refriedchicken joined
17:44 craigp joined
17:46 ZippoWeb joined
17:52 m00dy joined
17:54 jkreeftmeijer joined
17:54 eddd joined
17:55 m00dy joined
17:57 PaReeOhNos joined
18:01 ssswitch joined
18:04 m00dy joined
18:08 JuanMiguel joined
18:15 refriedchicken66 joined
18:15 dimitarvp_ joined
18:17 m00dy joined
18:20 MotherFlojo joined
18:23 PaReeOhNos joined
18:35 lexmag joined
18:37 PaReeOhNos joined
18:40 Cohedrin joined
18:41 steffkes joined
18:41 steffkes joined
18:42 sillyotter joined
18:56 jkreeftmeijer joined
18:59 squallstter joined
19:06 wpcarro joined
19:07 ivan joined
19:13 harrow joined
19:19 milad joined
19:20 <qmm> someone mentioned they have three resources that they fetch from their web api and then combine them to be displayed to the user. instead of asynchronously sending three separate requests to the backend, wouldn't it make sense to create a single route for fetching what you need and then allowing the server to combine the data?
19:21 hakunin joined
19:23 <Nicd-> it depends on the situation. if it's not necessary to combine them in the backend (to optimize speed or bandwidth) it would make it simpler to send three requests
19:24 rschmukler joined
19:26 asabil joined
19:28 micmus joined
19:31 ejpcmac1 joined
19:34 <micmus> soud: if you have a virtual field in the schema to store the value, you could do something like:
19:34 <micmus> from p in Post, left_join: l in assoc(p, :likes), select: %{p | like_count: count(l.id)}
19:35 Nicd- joined
19:35 <benwilson512> micmus: I swear the more graphql I do w/ ecto the more I feel like I'm gonna end up writting like a meta-query planner
19:36 <micmus> benwilson512: something similar is on my todo list as well :P
19:36 <micmus> A low level query builder library that could be leveraged by ecto, but would be a bit more powerful
19:37 <benwilson512> yeah at a theoretical level you basically want a monadic
19:37 jtzero joined
19:37 <benwilson512> "here's various data things to get, and then functions to run after you have that data, GO"
19:37 <micmus> It becomes harder and harder to extend ecto itself further to things like subqueries, etc
19:37 <soud> micmus: thanks, I figured out a similiar solution by abusing the fact that there's a unloaded `likes` field and used that instead
19:37 <soud> might want to keep track of the likes by saving an integer in the post table as well
19:42 <soud> ah, the virtual field is a way better solution as it won't mess with my tests, nice thanks
19:44 ultra|lazer joined
19:52 vmoravec joined
19:54 PaReeOhN_ joined
19:58 ejpcmac joined
19:59 wpcarro joined
20:00 dustinfarris joined
20:02 PaReeOhNos joined
20:05 asabil joined
20:10 ejpcmac left
20:15 josevalim_ joined
20:17 wsieroci joined
20:19 fernandomm joined
20:29 PaReeOhNos joined
20:31 ssswitch joined
20:34 w1gz joined
20:47 griffinbyatt joined
20:48 wpcarro joined
20:57 jkreeftmeijer joined
21:01 wpcarro joined
21:04 nd___ joined
21:06 hashpuppy joined
21:08 Nicd-[m] joined
21:08 asabil_ joined
21:09 dj_goku joined
21:09 dj_goku joined
21:12 ethanis joined
21:13 wpcarro joined
21:18 steffkes joined
21:20 Nicd-[m] left
21:25 cschneid_ joined
21:27 josevalim_ joined
21:28 <josevalim_> MononcQc: "I agree with @vladdu in that if the bigger issue at hand is that it's not easy to move from gen_server to gen_statem when you need it, then we probably need a gen_server interface closer to gen_statem."
21:28 <josevalim_> MononcQc: isn't this basically what you have been proposing all along?
21:31 wpcarro joined
21:34 jerel joined
21:35 <josevalim_> I mean, your proposal is definitely walking in that direction
21:52 <OliverMT> is this something new in ecto 2.0?
21:52 <OliverMT> trying to use Ecto.DateTime.utc in a query
21:52 <OliverMT> value `#Ecto.DateTime<2017-04-30 21:50:30>` in `where` cannot be cast to type :naive_datetime in
21:55 jerel joined
21:58 <MononcQc> josevalim_, kind of yeah. I'm mostly worrying about keeping all behaviours fairly consistent in their approach
21:59 <MononcQc> so if you do that then of course a move from one to the other is simpler
21:59 <alisdair> josevalim_: can you explain why you think genstage isn't a state machine? it seems obvious to me that it is
21:59 <josevalim_> OliverMT: Ecto 2.1, you need to use the new types
21:59 <MononcQc> like ideally you don't need to teach new fancy shit, but you can add in states, state_timeout and postpone
21:59 <MononcQc> and then you got the whole thing
22:00 <josevalim_> alisdair: it is a state machine, i don't think it would be better with gen_statem though
22:00 <josevalim_> there is no moment i want to handle different messages for example based on my state
22:00 <alisdair> i think what is probably actually needed is a way to transition from a gen_statem to a gen_server or vice versa
22:00 hakunin joined
22:00 <alisdair> so a gen_server interface to gen_statem, not the opposite (which i think is what is being proposed, but it's hard for me to follow)
22:00 <MononcQc> handle_event(Type, Msg, _, Data) -> {next_state, smug_as_hell, Data}
22:01 bpmcd joined
22:01 <alisdair> josevalim_: not wanting to handle any messages is wanting to handle different messages based on state tho?
22:01 <josevalim_> alisdair: i can't think where this happens though
22:02 <alisdair> your core concern is that you want to do post-init work before accepting any messages, right?
22:03 <josevalim_> alisdair: no
22:03 <josevalim_> most concern is making sure we check point the state between callbacks
22:04 tuacker joined
22:04 <alisdair> okay, so you want to temporarily stop accepting messages while you transition state?
22:05 wpcarro joined
22:05 <alisdair> transactional message sets, basically?
22:12 wpcarro joined
22:13 Cohedrin joined
22:14 <micmus> alisdair: no, it's for when one message triggest multiple user callbacks
22:14 <micmus> and you want to preserve the state one of them returns if the later one errors
22:15 <micmus> so that it's properly preserved for logs, crash reports, etc
22:16 dastagg joined
22:17 elgenie joined
22:17 <alisdair> right i get that, but i think that's analogous to transactional multiple message sets or a state machine that limits messages in certain states
22:18 <micmus> but there's only a single message
22:19 <OliverMT> josevalim_: I remembered I am using timex in this app and just used that instead :)
22:21 <josevalim_> alisdair: it is a single message
22:21 <josevalim_> we have an atomic cancel_and_subscribe, we need to call handle_cancel and handle_subscribe
22:21 <josevalim_> there aren't multiple states, it just happens that one calls leads to two user callbacks being invoked
22:21 <josevalim_> everything is sync
22:21 MotherFlojo joined
22:22 <josevalim_> we never reach for th einbox
22:23 <micmus> josevalim_: would be great if you pitched in on https://github.com/ferd/erlang-history/issues/32 if you had some time - it's going to be important for Elixir if we get shell history into OTP, but I'm not 100% what would be the desired interface
22:27 yolimar joined
22:29 griffinbyatt joined
22:40 strykerkkd joined
22:42 wpcarro joined
22:46 mika__ joined
22:47 isubasti joined
22:48 sevenseacat joined
22:51 <MononcQc> micmus, I don't get why the ability to put the path you want is not something you think is good enough
22:52 <MononcQc> like anything else I do is constricting it further
22:52 <micmus> MononcQc: it's good enough for the end user, but not for the tool
22:52 <micmus> the end user should have the ability to override anything that is set
22:53 <micmus> but a tool should be able to give a sane default
22:53 <MononcQc> it is an arbitrary path. Like it is literally the most flexible setting there can be
22:53 <MononcQc> anything else I do restrains it further
22:54 <MononcQc> I don't get what more there can be than "put it wherever you want"
22:54 <MononcQc> I don't understand
22:55 bambanx joined
22:55 <micmus> It can be fine, but IMHO what I'm looking for is "put it where it needs to go on your own"
22:56 isubasti_ joined
22:56 <MononcQc> and where is that?
22:56 weaksauce joined
22:57 dj_goku joined
22:57 dj_goku joined
22:58 <micmus> right now, the code will put the logs in USER_CACHE/erlang-history, I'd like to be able to say that when you launch iex, the default is USER_CACHE/iex-history or similar
22:58 jmcintosh joined
22:58 <MononcQc> I don't get why you can't just wrap that logic yourself and put the whole path in
22:59 <MononcQc> like why is that unfathomable
22:59 jkreeftmeijer joined
22:59 <micmus> It totally is possible - it's just that logic of finding USER_CACHE is quite complex. I don't want to replicate it in bash
22:59 <MononcQc> (also we've had people yet at us in rebar3 before for putting stuff in .cache)
22:59 <MononcQc> (there is no such thing as "the right place")
23:00 <micmus> yeah, that's also true. On the other hand my home dir is 93 dotfiles right now :(
23:01 <micmus> dotfiles/dotdirs
23:01 <MononcQc> micmus, you → erl -eval 'io:format("~s~n", [filename:basedir(user_cache, "iex-history")]), halt(0).' -noshell
23:01 <MononcQc> /home/ferd/.cache/iex-history
23:02 <micmus> that would double the start time of the shell
23:02 <MononcQc> generate it at compile time when building the tool?
23:03 <micmus> I mean, the global config can used to deliver that or something good enough, so it would be fine. But it won't be great :P
23:05 <MononcQc> yeah. It's just that I find it hard to anticipate the needs of 3+ other communities
23:05 <MononcQc> elixir, lfe, alpaca, efene, erlang, etc.
23:08 <tristan__> whoa, user_cache
23:09 <MononcQc> it's new, can't be used in rebar3 :(
23:09 <tristan__> when was that added so we can stop doing manual ".cache"
23:09 <tristan__> :(
23:09 <tristan__> has user_config too!
23:09 <MononcQc> yes
23:13 fxrs joined
23:16 <micmus> It's there since 19
23:19 steffkes joined
23:19 steffkes joined
23:25 jkreeftmeijer joined
23:25 milad joined
23:33 elgenie joined
23:35 mika__ joined
23:36 jkreeftmeijer joined
23:36 bpmcd joined
23:37 scrogson joined
23:46 jkreeftmeijer joined
23:52 jkreeftmeijer joined