00:07
trapped has quit [Ping timeout: 272 seconds]
00:11
Ven has quit [Read error: Connection reset by peer]
00:11
Ven has joined #crystal-lang
00:19
nakilon has quit [Ping timeout: 272 seconds]
00:23
BlaXpirit has quit [Quit: Konversation]
00:24
zodiak has joined #crystal-lang
00:26
Ven has quit [Read error: Connection reset by peer]
00:33
Ven has joined #crystal-lang
00:37
McDougal has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
00:39
McDougal has joined #crystal-lang
00:41
Ven has quit [Read error: Connection reset by peer]
00:47
Ven has joined #crystal-lang
00:59
Ven has quit [Read error: Connection reset by peer]
01:01
Ven has joined #crystal-lang
01:11
Ven has quit [Read error: Connection reset by peer]
01:13
Ven has joined #crystal-lang
01:26
Ven has quit [Read error: Connection reset by peer]
01:29
Ven has joined #crystal-lang
01:38
NeverDie has quit [Ping timeout: 240 seconds]
01:41
Ven has quit [Read error: Connection reset by peer]
01:44
Ven has joined #crystal-lang
01:45
NeverDie has joined #crystal-lang
01:56
Ven has quit [Read error: Connection reset by peer]
01:59
Ven has joined #crystal-lang
02:03
nakilon has joined #crystal-lang
02:08
nakilon has quit [Ping timeout: 240 seconds]
02:09
blue_deref has quit [Quit: bbn]
02:10
blue_deref has joined #crystal-lang
02:11
Ven has quit [Read error: Connection reset by peer]
02:13
Ven has joined #crystal-lang
02:16
McDougal has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
02:16
McDougal has joined #crystal-lang
02:26
Ven has quit [Read error: Connection reset by peer]
02:27
leafybas_ has quit [Remote host closed the connection]
02:29
Ven has joined #crystal-lang
02:36
Ven has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
02:41
aemadrid has quit [Remote host closed the connection]
02:41
ponga has quit [Remote host closed the connection]
02:41
mroth has quit [Remote host closed the connection]
03:19
buggs has quit [Quit: WeeChat 0.4.2]
03:35
lokulin has joined #crystal-lang
03:51
nakilon has joined #crystal-lang
03:56
nakilon has quit [Ping timeout: 252 seconds]
04:02
jwaldrip has quit [Quit: Be back later ...]
04:08
jwaldrip has joined #crystal-lang
04:12
jwaldrip has quit [Ping timeout: 260 seconds]
04:27
leafybas_ has joined #crystal-lang
04:32
zz_Cidan is now known as Cidan
04:32
leafybas_ has quit [Ping timeout: 250 seconds]
04:34
Cidan is now known as zz_Cidan
04:35
zz_Cidan is now known as Cidan
04:52
McDougal has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
04:52
McDougal has joined #crystal-lang
04:58
NeverDie has quit [Read error: Connection reset by peer]
05:02
NeverDie has joined #crystal-lang
05:17
Cidan is now known as zz_Cidan
05:29
leafybas_ has joined #crystal-lang
05:33
leafybas_ has quit [Ping timeout: 244 seconds]
06:57
ponga has joined #crystal-lang
07:18
blue_deref has quit [Quit: bbn]
07:28
nakilon has joined #crystal-lang
07:33
nakilon has quit [Ping timeout: 260 seconds]
08:51
jwaldrip has joined #crystal-lang
08:51
jwaldrip has quit [Remote host closed the connection]
09:06
trapped has joined #crystal-lang
09:13
BlaXpirit has joined #crystal-lang
09:30
leafybas_ has joined #crystal-lang
09:34
leafybas_ has quit [Ping timeout: 244 seconds]
10:07
hangyas has joined #crystal-lang
10:12
pawnbox_ has joined #crystal-lang
10:34
pawnbox_ has quit [Remote host closed the connection]
10:45
nakilon has joined #crystal-lang
11:02
<
nakilon >
Error: SHA256 mismatch
11:03
leafybas_ has joined #crystal-lang
11:26
<
nakilon >
had to do brew uninstall
11:29
<
nakilon >
what do I use instead of Set.new? a Hash?
11:30
<
BlaXpirit >
nakilon, what do you want to do?
11:30
<
BlaXpirit >
>> Set.new
11:30
<
BlaXpirit >
right, right
11:30
<
BlaXpirit >
>> Set(Int).new
11:30
<
BlaXpirit >
>> Set(Int32).new
11:30
<
nakilon >
nice that it exists -- I just didn't see it in crystal-lang.org/docs
11:31
<
nakilon >
still not sure where can I "see all the types I may use while coding in Crystal"
11:38
<
nakilon >
in Ruby I have a code smth like this: my_function(some_arg, l1, l2, l3), where l1, l2, l3 are lambdas
11:38
<
nakilon >
how do I do it in Crystal properly?
11:38
<
nakilon >
and with minimal effort
11:39
<
nakilon >
Syntax error in ./main.cr:38: unterminated parenthesized expression --- f [start, ""], (lambda do |(state, _)|
11:40
<
nakilon >
oh maybe it's because of |()| -- i remmeber it didn't work in Crystal
11:43
Ven_ has joined #crystal-lang
11:45
<
nakilon >
yay, I cna't use _ as identifier? (
11:49
<
RX14 >
>> 1.tap { |_| puts _ }
11:49
<
RX14 >
>> 1.tap { |a| puts a }
11:49
<
RX14 >
>> 1.tap { |a| a }
11:49
<
RX14 >
>> 1.tap { |_| _ }
11:50
<
RX14 >
I used _ as "ignored variable" in blocks
11:50
<
RX14 >
for any variable i didn't actually use
11:50
<
nakilon >
RX14, I use it also for temp vars, that aren't used anymore alrady 5 chars of code after that point
11:51
<
nakilon >
now would use 't' ..D
11:51
<
RX14 >
nakilon, hmmn, I have no idea what's going on there
11:53
<
RX14 >
you need brackets in the function call it looks like
11:53
<
RX14 >
might be a bug
11:53
<
nakilon >
passing lambda to function also works
11:53
<
RX14 >
nakilon, yeah, you just need to use brackets when calling the function
11:54
<
nakilon >
should I report?
11:54
Philpax has joined #crystal-lang
11:54
<
RX14 >
might as well
11:54
<
RX14 >
probably not
11:56
* nakilon
didn't work with Crystal for 2-3 months, so is not sure about syntax anymore anyhow
11:57
Philpax has quit [Client Quit]
11:59
Ven_ has quit [Read error: Connection reset by peer]
12:01
<
RX14 >
i feel like making something in crystal
12:01
Ven_ has joined #crystal-lang
12:03
ponga has quit [Remote host closed the connection]
12:04
nakilon_ has joined #crystal-lang
12:07
nakilon has quit [Ping timeout: 246 seconds]
12:12
mroth has joined #crystal-lang
12:13
Ven_ has quit [Read error: Connection reset by peer]
12:14
Ven_ has joined #crystal-lang
12:20
aemadrid has joined #crystal-lang
12:29
Ven_ has quit [Read error: Connection reset by peer]
12:30
Ven_ has joined #crystal-lang
12:45
Ven_ has quit [Read error: Connection reset by peer]
12:45
Ven__ has joined #crystal-lang
12:45
leafybas_ has quit [Remote host closed the connection]
12:53
Ven__ has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
13:06
ponga has joined #crystal-lang
13:43
hangyas has quit [Quit: hangyas]
13:58
<
jokke >
can i raise a method missing error from a method_missing macro?
14:01
leafybas_ has joined #crystal-lang
14:07
A124 has joined #crystal-lang
14:27
leafybas_ has quit [Remote host closed the connection]
14:41
Ven has joined #crystal-lang
14:44
Ven has quit [Read error: Connection reset by peer]
14:44
Ven has joined #crystal-lang
15:14
ponga has quit [Quit: Connection closed for inactivity]
15:14
Ven has quit [Read error: Connection reset by peer]
15:20
Ven has joined #crystal-lang
15:25
<
jhass >
jokke: dunno, I'd probably just use {{raise}}
15:26
<
jhass >
nakilon_: looks like a parser bug, yeah
15:30
Ven has quit [Read error: Connection reset by peer]
15:30
Ven has joined #crystal-lang
15:43
leafybas_ has joined #crystal-lang
15:45
Ven has quit [Read error: Connection reset by peer]
15:45
Ven has joined #crystal-lang
15:47
leafybas_ has quit [Ping timeout: 240 seconds]
16:00
Ven has quit [Read error: Connection reset by peer]
16:00
Ven has joined #crystal-lang
16:03
<
nakilon_ >
Proc([] of (Array | String), Bool).new{ |t| state, _ = t -- expecting token 'CONST', not '[]'
16:06
<
nakilon_ >
what's wrong with my syntax?
16:10
<
BlaXpirit >
nakilon_, uhhhhhhhhhh
16:10
<
BlaXpirit >
does Proc([1,2,3]) make sense to you?
16:15
Ven has quit [Read error: Connection reset by peer]
16:16
Ven has joined #crystal-lang
16:17
<
nakilon_ >
BlaXpirit, I want a lambda that accepts an array of two elements (array and string) and returns bool
16:17
<
BlaXpirit >
nakilon_, coming from ruby? -_-
16:18
<
BlaXpirit >
what purpose does this array serve in your process of thought?
16:18
<
nakilon_ >
from ruby
16:18
<
nakilon_ >
it's a "state of the game" for A.I.
16:19
<
nakilon_ >
my ruby program finds solution in 5-10 minutes, and I want faster
16:19
<
BlaXpirit >
what you have is not applicable to Crystal on multiple levels, i don't know where to begin
16:20
<
nakilon_ >
the deep walking function should teke the initial state and several lambdas that describe data transformation
16:20
<
nakilon_ >
how is it not applicable? _Oo
16:20
<
jhass >
[] of ... is the equivalent to Array(...).new
16:20
<
jhass >
notice the .new
16:22
Ven has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
16:22
<
nakilon_ >
i'm feeling have no clue in Crystal type definitions ..\ for example, the ruby lambda is 'lambda do |(state, _)|', where state is an array and _ is a string, that I'll omit in that lambda but it doesn't matter, since the deep-walking function should know what the lambda is doing
16:23
<
nakilon_ >
it should know here only that it returns bool
16:23
<
nakilon_ >
so I do in crystal : '->(t : Array){' and get 'cannot be used as a Proc argument type yet, use a more specific type'
16:23
<
jhass >
so, do that
16:23
<
jhass >
don't use Array
16:23
<
jhass >
use Array(Whatever)
16:24
<
BlaXpirit >
i'm afraid this is not just an array of some type
16:24
<
BlaXpirit >
just an attempt at misuse
16:24
<
BlaXpirit >
nakilon_, have you read the introduction/documentation to Crystal?
16:24
<
nakilon_ >
I thought this means I should switch to Proc.new syntax, so I do 'Proc.new(([] of Array | String), Bool){' and get 'can't use Array(T) in unions yet, use a more specific type'
16:25
<
jhass >
no, it doesn't mean that
16:25
<
jhass >
it means what it says, use a more specific type in place of the generic
16:25
<
nakilon_ >
->(t : Array of Array | String){ --- expecting token 'IDENT', not 'Array'
16:25
<
BlaXpirit >
nakilon_, have you read the introduction/documentation to Crystal?
16:25
<
nakilon_ >
BlaXpirit, had
16:26
NeverDie has joined #crystal-lang
16:26
<
nakilon_ >
I see no chapter on complex types definitions
16:26
<
jhass >
Array of ... doesn't make any sense
16:26
<
BlaXpirit >
well you're just putting random words together and trying to apply sloppy practices from ruby
16:27
<
jhass >
I just gave you an example above
16:27
<
jhass >
Array(Whatever)
16:27
<
nakilon_ >
every C/C++ book has a chapter on those things how to build complex definitions
16:27
<
jhass >
or Array(Array(????)|String)
16:27
<
jhass >
note the ???? are because I can't guess what you want there
16:28
<
nakilon_ >
hmmm that array is a nested of array of arrays ..D just a minute
16:29
<
jhass >
alias MyDataStuff = Array(MyDataStuff)|String if I had to guess from your vague description
16:29
<
jhass >
-> (t : MyDataStuff)
16:30
<
nakilon_ >
seems like ->(t : Array(Array(Array(Array(Symbol | Int32))) | String)){ did the job -- i'll look into further exceptions
16:30
<
jhass >
at least make an alias for that
16:30
<
nakilon_ >
alias is like typedef? cool
16:31
<
jhass >
but you're probably far better off with doing a (couple of) wrapper structs for your data
16:32
<
jhass >
There's also a Matrix class, but I'll stop guessing whatever your datastructure looks like now
16:33
<
BlaXpirit >
I'm pretty sure the outermost is actually {Array(...), String}
16:33
<
BlaXpirit >
but whatever
16:38
pawnbox_ has joined #crystal-lang
16:40
blue_deref has joined #crystal-lang
16:41
pawnbox_ has quit [Remote host closed the connection]
16:59
zz_Cidan is now known as Cidan
17:02
leafybas_ has joined #crystal-lang
17:07
leafybas_ has quit [Ping timeout: 260 seconds]
17:11
NeverDie has joined #crystal-lang
17:11
Locke23rus has joined #crystal-lang
17:11
Locke23rus has quit [Remote host closed the connection]
17:14
NeverDie_ has joined #crystal-lang
17:15
NeverDie has quit [Ping timeout: 240 seconds]
17:15
NeverDie_ has quit [Client Quit]
17:15
NeverDie has joined #crystal-lang
17:17
NeverDie has quit [Max SendQ exceeded]
17:17
NeverDie has joined #crystal-lang
17:19
<
crystal-gh >
crystal/master 235f134 Ary Borenszweig: Fixed #1875: parser bug related to call, fun literal and do
17:22
Cidan is now known as zz_Cidan
17:30
<
nakilon_ >
alias State = Array(Array(Tuple(Symbol, Int32, Int32)))
17:30
<
nakilon_ >
->(state : State,
17:31
<
nakilon_ >
state.flat_map do |col| -- in ./main.cr:47: instantiating 'Hash(Int32 | Symbol, Array(Array(Int32 | Symbol)))#each()'
17:31
<
nakilon_ >
it thinks about my tuple as about heterogenuos array
17:32
<
nakilon_ >
and then .map(&.last).sort says it can't - Int32#<(other : Symbol)
17:32
<
jhass >
please provide a runnable example that reproduces
17:34
<
nakilon_ >
yeah i've described the problem with mistake
17:35
<
nakilon_ >
problem is somewhere around .map
17:38
<
nakilon_ >
[color, i] is (Int32 | Symbol)
17:38
<
nakilon_ >
seems like .last of it is that tye to, so the .map(&.last) isn't sortable array
17:41
<
RX14 >
nakilon_, why not use a record instead of a tuple
17:42
<
nakilon_ >
RX14, what is that?
17:42
<
jhass >
nakilon_: you're not passing tuples. I'm a bit surprised it passes through the type restriction
17:43
<
nakilon_ >
jhass, when initializing 'start'?
17:43
<
RX14 >
tbh that code is unreadable
17:43
<
RX14 >
and I can't be assed to try
17:43
<
nakilon_ >
sorry for not solving bubble sort algorithms
17:44
<
jhass >
no idea where n is supposed to come from
17:44
<
nakilon_ >
just a second
17:47
<
nakilon_ >
seems working; weird, that it doesn't see 'n' in my code too, while it's declared higher
17:47
<
RX14 >
this is a record BTW
17:47
<
RX14 >
but i guess tuples are better here
17:50
<
nakilon_ >
RX14, thx for the link
17:53
<
nakilon_ >
yay, flatten(n) isn't yet implemented (
17:58
<
nakilon_ >
is there a nice way to translate '.tap &method(:puts)' to crystal?
17:59
<
RX14 >
.tap &.puts?
17:59
<
RX14 >
>> "a".tap &.puts
18:00
<
RX14 >
>> "a".tap { |a| puts a }
18:01
<
RX14 >
>> "a".tap &puts
18:01
<
nakilon_ >
and what about .with_index?
18:01
<
nakilon_ >
state.flat_map.with_index do
18:02
<
RX14 >
>> "a".tap puts
18:02
<
nakilon_ >
how do I translate this?
18:03
<
nakilon_ >
i see this method in specs, but: 'Array(Array({Symbol, Int32, Int32}))#flat_map' is expected to be invoked with a block, but no block was given
18:03
leafybas_ has joined #crystal-lang
18:04
<
nakilon_ >
looks like .flatten isn't an iterator
18:04
<
nakilon_ >
i mean flat_map
18:07
<
RX14 >
nakilon_, well, it could be
18:08
leafybas_ has quit [Ping timeout: 272 seconds]
18:12
<
nakilon_ >
seems like Tuple is immutable _<>
18:14
<
RX14 >
>> [1, 2].with_index.flat_map
18:14
<
nakilon_ >
and seems like .concat can't concat complex types
18:14
<
RX14 >
>> [1, 2].each_index.flat_map
18:14
<
DeBot >
RX14: 'Array::IndexIterator(Int32)#flat_map' is expected to be invoked with a block, but no block was given -
http://carc.in/#/r/m3z
18:16
<
nakilon_ >
also about above: undefined method 'with_index' for Array(Array({Symbol, Int32, Int32}))
18:16
<
RX14 >
and it only returns the index
18:16
<
RX14 >
not the object
18:17
<
RX14 >
yeah, doesn't look possible
18:24
<
nakilon_ >
forget about my gist )
18:27
leafybas_ has joined #crystal-lang
18:50
<
nakilon_ >
without 'next [] ...' it doesn't faik
18:50
<
nakilon_ >
oh, nesting i guess
18:54
<
nakilon_ >
seems like 'next [] of Array(State | String) if col.empty?' works, but there is warning: Assertion failed: ((i >= FTy->getNumParams() || FTy->getParamType(i) == Args[i]->getType()) && "Calling a function with a bad signature!"), function init, file /tmp/llvm20150726-4892-1fwslb7/llvm-3.6.2.src/lib/IR/Instructions.cpp, line 281.
18:55
<
RX14 >
sounds like a bug to me
19:08
NeverDie has joined #crystal-lang
19:09
NeverDie has quit [Max SendQ exceeded]
19:10
NeverDie has joined #crystal-lang
19:12
<
nakilon_ >
someone explain me why this differs:
19:13
<
nakilon_ >
ruby vs crystal, String#scan
19:13
<
RX14 >
>> "asdf" * 0
19:17
<
nakilon_ >
i guess i use matchdata incorrectly
19:17
<
nakilon_ >
this is not good, that behaviour diffes
19:28
<
nakilon_ >
yay, we don't allow to enlarge Arrays by []= to the far index?
19:29
<
nakilon_ >
>> a = [1]; a[3] = 2
19:29
<
nakilon_ >
I do this to make arrays transposable
19:30
<
nakilon_ >
jhass, can you comment this please?
19:32
<
jhass >
crystal arrays do not autogrow, that is intentional
19:33
<
nakilon_ >
what should I do instead?
19:33
<
jhass >
append elements explicitly
19:33
<
nakilon_ >
max = large.map(&.size).max
19:33
<
nakilon_ >
large.each{ |col| col[max - 1] = col[max - 1] }
19:33
<
jhass >
maybe on of the #fill APIs work too, I don't remember
19:33
<
jhass >
that's... reverse?
19:34
<
nakilon_ >
that's adding Nils to the end of lines until array becomes transposable
19:34
<
nakilon_ >
for example, for printing
19:38
<
nakilon_ >
yay, no overload matches 'Array(Int32)#fill' with types Nil, Range(Int32, Int32)
19:38
<
jhass >
you need to create your array to allow nils if you want to allow nils
19:38
<
nakilon_ >
how do I append nil? ..(
19:39
<
jhass >
the initial type must allow it
19:40
<
nakilon_ >
then it's not only simple vector isn't autogrowing, but the whole array would need another instance for my case (
19:40
<
nakilon_ >
probbaly
19:41
<
nakilon_ >
or actually I can fill it not nils but smth already known
19:43
A124 has quit [Quit: '']
19:44
A124 has joined #crystal-lang
19:45
zz_Cidan is now known as Cidan
19:52
Cidan is now known as zz_Cidan
19:59
<
nakilon_ >
in my case it results in large.each{ |col| col.concat [{:"", 0}] * (max - col.size); }
19:59
<
nakilon_ >
and when I print that array it smells like: t[0] == :"" ? " " :
20:01
<
nakilon_ >
damn, I made this program in 6 hours and translating for already the same amount of time ..D
20:26
buggs has joined #crystal-lang
20:26
<
nakilon_ >
works only few times faster than Ruby ..( I guess I miss something important
20:27
<
CompanionCube >
did you build with --release
20:29
<
jokke >
jhass: what do you think: Is this is a bug or a feature?
20:29
<
jokke >
>> "foo".match(/foo(bar)?/).not_nil![1]
20:29
<
CompanionCube >
nakilon_, ^
20:30
<
jokke >
imho that should return nil
20:30
<
jokke >
because the capture group does exist
20:30
<
jokke >
it's just empty
20:31
<
jhass >
>> "foo".match(/foo(bar)?/)
20:31
<
jhass >
>> "foo".[/foo(bar)?/, 1]
20:31
<
DeBot >
jhass: Syntax error in eval:21: expecting any of these tokens: IDENT, +, -, *, /, %, |, &, ^, **, <<, <, <=, ==, !=, =~, !~, >>, >, >=, <=>, ||, &&, ===, [], []=, []?, ! (not '[') -
http://carc.in/#/r/m4c
20:31
<
jhass >
>> "foo"[/foo(bar)?/, 1]
20:31
<
jhass >
>> "foo"[/foo(bar)?/, 1]?
20:32
<
jokke >
note where the nil assertion is failing
20:32
<
jhass >
we only have #[], making it nilable would be annoying
20:32
<
jhass >
so we also have #[]?
20:33
<
jhass >
the compiler doesn't magically know that if you pass 1 to #[] it's an optional group and nilable
20:33
<
jokke >
yeah i guess it would be annoying
20:33
Ven has joined #crystal-lang
20:33
<
jokke >
ok what about ""?
20:33
<
jhass >
we had that, it was bad
20:33
<
jokke >
that'd be even more annoying
20:34
<
jokke >
ok thanks for your input
20:34
<
jokke >
i'm writing a standalone router for crystal btw!
20:34
<
jokke >
that's how i stumbled across this
20:35
<
jokke >
"/foo/:bar(/:baz)"
20:35
<
jokke >
params["baz"]
20:45
<
nakilon_ >
CompanionCube, tried with --release now
20:45
<
CompanionCube >
faster?
20:45
<
nakilon_ >
$ crystal build --release main.cr $ time ./main
20:46
<
nakilon_ >
I didn't spot the difference ..\
20:46
<
CompanionCube >
odd, because that turns on optimizations
20:47
<
nakilon_ >
i'll measure time without --release
20:51
<
nakilon_ >
almost all lines had to be rewritten (
20:51
<
nakilon_ >
the most annoying part was no splatting in blocks
20:54
<
nakilon_ >
CompanionCube, 5m56.764s vs 4m38.665s
20:54
<
CompanionCube >
that's a decent difference
20:56
<
CompanionCube >
51s saved by a flag
20:56
<
nakilon_ >
only 20%
20:57
<
nakilon_ >
with that compile time increased by 10 or 20 seconds
20:58
<
nakilon_ >
from... <1s ?
21:00
<
nakilon_ >
and it's 3m53.233s in Ruby!
21:02
Ven has quit [Read error: Connection reset by peer]
21:02
Ven_ has joined #crystal-lang
21:03
Ven_ has quit [Read error: Connection reset by peer]
21:03
Ven has joined #crystal-lang
21:04
BlaXpirit has quit [Quit: Konversation]
21:06
BlaXpirit has joined #crystal-lang
21:10
McDougal has joined #crystal-lang
21:27
leafybas_ has quit [Remote host closed the connection]
21:28
leafybas_ has joined #crystal-lang
21:31
BlaXpirit has quit [Remote host closed the connection]
21:31
Ven has quit [Read error: Connection reset by peer]
21:31
BlaXpirit has joined #crystal-lang
21:32
Ven has joined #crystal-lang
21:46
Ven has quit [Read error: Connection reset by peer]
21:52
Ven has joined #crystal-lang
21:56
Ven has quit [Client Quit]
22:02
Ven has joined #crystal-lang
22:12
Ven has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
22:15
McDougal has joined #crystal-lang
22:16
McDougal has left #crystal-lang [#crystal-lang]
22:20
Ven has joined #crystal-lang
22:20
Ven has quit [Client Quit]