ChanServ changed the topic of #crystal-lang to: The Crystal programming language | http://crystal-lang.org | Crystal 0.31.1 | Fund Crystal's development: http://is.gd/X7PRtI | GH: https://github.com/crystal-lang/crystal | Docs: http://crystal-lang.org/docs/ | API: http://crystal-lang.org/api/ | Gitter: https://gitter.im/crystal-lang/crystal
<FromGitter> <ilanpillemer> Compilation time is what initiated the language apparently.
<FromGitter> <ilanpillemer> That's why for example unused imports are a compilation error. They discovered by doing that the compilation times were reduced by 40%
<FromGitter> <ilanpillemer> But yes.I had to learn how to do things that previously I would have just used a library.
<FromGitter> <ilanpillemer> Crystal is a breath of fresh air in that sense.
<FromGitter> <ilanpillemer> In one line I can do things that require a lot more work otherwise.
<FromGitter> <ilanpillemer> But compilation is slower.
<FromGitter> <ilanpillemer> Not sure about binary size. Haven't looked at that yet. What size are Crystal binaries and micro services?
<FromGitter> <ilanpillemer> On average. For a small API ?
<FromGitter> <tenebrousedge> big
<FromGitter> <ilanpillemer> So Go is for me 8mb for a small API micro service.
<FromGitter> <ilanpillemer> So I guess it's tradeoff on what the project is and what's it's used for.
<FromGitter> <tenebrousedge> I'm not sure what we consider a small micro service, but I would expect binaries to be larger, simply because the standard library is larger
<FromGitter> <tenebrousedge> Go is almost certainly better for systems programming
<FromGitter> <ilanpillemer> So when you compile do you always get the entire standard library or just what you use?
<FromGitter> <ilanpillemer> Go is targeting system programming
<FromGitter> <Blacksmoke16> You get a subset of the stdlib, plus extra stuff you include
<FromGitter> <Blacksmoke16> Search the repo for prelude.cr
<FromGitter> <ilanpillemer> Will do.
<FromGitter> <Blacksmoke16> Afaik that's the stuff that is there by default
<FromGitter> <ilanpillemer> Like a runtime?
Welog has quit [Ping timeout: 246 seconds]
dwdv has quit [Ping timeout: 245 seconds]
alex`` has quit [Ping timeout: 246 seconds]
gangstacat has quit [Quit: Ĝis!]
<FromGitter> <galvertez> i don't quite understand the purpose of https://github.com/crystal-lang/crystal/blob/0e2e1d067af09e7b1e4573a7258c433e3cf8fa17/src/http/server.cr#L448 ⏎ what does the channel do in this context?
<FromGitter> <galvertez> i see ⏎ ⏎ > Spawning a fiber and waiting for it to complete ⏎ https://crystal-lang.org/reference/guides/concurrency.html ⏎ i think that answers my question actually after reading it over a few times [https://gitter.im/crystal-lang/crystal?at=5d994daf9735874673031156]
<FromGitter> <galvertez> basically just says "we can't do anything until something comes through this channel" and subsequently focuses on the as yet unexecuted fiber?
f1refly has quit [Ping timeout: 252 seconds]
f1refly has joined #crystal-lang
chemist69 has quit [Ping timeout: 246 seconds]
chemist69 has joined #crystal-lang
return0e_ has joined #crystal-lang
return0e has quit [Ping timeout: 240 seconds]
_whitelogger has joined #crystal-lang
<FromGitter> <elorest> Where can I read about why `3/2 = 1.5` now?
<FromGitter> <elorest> Oh here it is. https://github.com/crystal-lang/crystal/pull/8120
<FromGitter> <elorest> I'm terrified of the bugs this could cause in projects that we don't even notice for a year. I guess I need to search all projects and deps for `/`
_whitelogger has joined #crystal-lang
teardown has quit [Read error: Connection reset by peer]
teardown has joined #crystal-lang
_whitelogger has joined #crystal-lang
_whitelogger has joined #crystal-lang
fyber has quit [Ping timeout: 276 seconds]
fyber has joined #crystal-lang
fyber has quit [Client Quit]
_whitelogger has joined #crystal-lang
dwdv has joined #crystal-lang
hightower2 has quit [Ping timeout: 276 seconds]
alex`` has joined #crystal-lang
alex`` has quit [Ping timeout: 240 seconds]
<FromGitter> <ImAHopelessDev_gitlab> i was testing out golang a couple days ago, i kept receiving weird errors, like *“declared and not used”*. the point where i had to stop because it was so frustrating
alex`` has joined #crystal-lang
<FromGitter> <bararchy> We are now live in production with our solution version which uses `-Dpreview_mt`
<FromGitter> <bararchy> :)
blassin7 has joined #crystal-lang
blassin has quit [Ping timeout: 268 seconds]
<FromGitter> <j8r> 🚀 :o
olbat[m] has quit [Remote host closed the connection]
beepdog has quit [Write error: Connection reset by peer]
ternarysolo has quit [Read error: Connection reset by peer]
erdnaxeli has quit [Remote host closed the connection]
<FromGitter> <ImAHopelessDev_gitlab> @bararchy 🚀
<FromGitter> <ImAHopelessDev_gitlab> @galvertez i'm not really sure, bew, or @j8r should be able to answer that. i'm not sure about channels
<FromGitter> <ImAHopelessDev_gitlab> https://crystal-lang.org/reference/guides/concurrency.html @galvertez this might help as well
<FromGitter> <ImAHopelessDev_gitlab> > Crystal has Channels inspired by CSP. They allow communicating data between fibers without sharing memory and without having to worry about locks, semaphores or other special structures.
<FromGitter> <ImAHopelessDev_gitlab> too low level for me, my brain gets lost when thinking about channels lol, i like fibers though
beepdog has joined #crystal-lang
olbat[m] has joined #crystal-lang
ternarysolo has joined #crystal-lang
erdnaxeli has joined #crystal-lang
DTZUZO has quit [Ping timeout: 276 seconds]
ht__ has joined #crystal-lang
hypercore has joined #crystal-lang
<hypercore> can i use graphql with crystal?
<hypercore> anyone else doing this?
<FromGitter> <tenebrousedge> I suspect there's a database adapter. I doubt whether there's an ORM
<hypercore> thanks
<hypercore> anyone know why i get "Error: undefined constant BaseSerializer" for "class ArticleSerializer < BaseSerializer"?
<hypercore> (lucky framework)
<FromGitter> <tenebrousedge> because BaseSerializer doesn't exist in the codebase any more, I would guess
<FromGitter> <tenebrousedge> that's the only reference in the repo
<hypercore> oh so the docs are just outdated?
<FromGitter> <tenebrousedge> that is my read on that
<hypercore> or has this class just not been implemented yet?
<hypercore> this issue says they want to add it, if i understand it correctly -> https://github.com/luckyframework/lucky/search?q=BaseSerializer&unscoped_q=BaseSerializer
<hypercore> oh do i need to upgrade my lucky version?
<FromGitter> <tenebrousedge> the upgrade notes are more recent than the issue
<hypercore> yeah i'm on 0.17.0, not 0.18.0
<hypercore> thanks!
<dwdv> How do I go from an iterator back to a string? In rust and dlang I do something along the lines of str.chars().map(...).collect()
<FromGitter> <tenebrousedge> `join` or `to_s`
<FromGitter> <tenebrousedge> or `reduce` or `stringbuilder`
DTZUZO has joined #crystal-lang
<dwdv> Thanks, `join` is doing what I want. `to_s` just wraps my iterator in a string though (`"Iterator::Map..."`). Need to read more docs on that one.
<FromGitter> <tenebrousedge> you have `icr` installed?
<dwdv> No.
<dwdv> Let's see what that is.
<FromGitter> <tenebrousedge> it's good stuff
<FromGitter> <tenebrousedge> not as nice as `pry`
<FromGitter> <tenebrousedge> and possibly not as nice as `crystal play`
<FromGitter> <tenebrousedge> but I usually prefer a REPL
<FromGitter> <tenebrousedge> ...otoh maybe I should get more use out of `crystal play`
<FromGitter> <vlazar> I'm using https://github.com/ziprandom/graphql-crystal but only very basic stuff. Don't know if there will be dragons.
<FromGitter> <tenebrousedge> probably. Dragons like crystals
<FromGitter> <Daniel-Worrall> I have a crystal play launch at start-up
<FromGitter> <Daniel-Worrall> It's nice
alex`` has quit [Quit: WeeChat 2.6]
alex`` has joined #crystal-lang
Raimondii has joined #crystal-lang
Raimondi has quit [Read error: Connection reset by peer]
Raimondii is now known as Raimondi
<FromGitter> <tenebrousedge> you would have to write a different implementation
<FromGitter> <tenebrousedge> what are you trying to do?
<sorcus> tenebrousedge: Store some words into `Set`.
<FromGitter> <tenebrousedge> "some" meaning 2^28 words
<FromGitter> <tenebrousedge> which is significantly larger than the corpus of English words
<FromGitter> <tenebrousedge> or any other language
<FromGitter> <tenebrousedge> I suspect there's a better way to do what you are trying to do
<sorcus> tenebrousedge: Sorry, my english is not my mother tongue.
<FromGitter> <ilanpillemer> thats an interesting implementation detail. what are the other bits used for if there are 32 bits?
<sorcus> tenebrousedge: I have a list of domains and i need to skip duplicates from another list. With `Array` it's very slow. With `Radix` too.
<FromGitter> <ilanpillemer> thanks! 👍
<FromGitter> <tenebrousedge> sorcus, could you use a Bloom filter?
<sorcus> tenebrousedge: there is an implimentation of this or i should write it myself?
<FromGitter> <tenebrousedge> I would first check to see if a probabilistic data structure would work for you. It's not in the STL, but there are a couple shards
<sorcus> tenebrousedge: Oh, t found some repos on Github. https://github.com/search?q=bloom+language%3ACrystal
<FromGitter> <ilanpillemer> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5d9a2b76fcf7602cc541b75d]
<FromGitter> <ilanpillemer> Still trying to understand the language here
<FromGitter> <ilanpillemer> hmm so 4 bytes are used for the pointer to entry and 28 bits for the index of that entry?
<FromGitter> <ilanpillemer> no thats not right..
tdc has quit [Ping timeout: 240 seconds]
dannyAAM has quit [Quit: znc.saru.moe : ZNC 1.6.2 - http://znc.in]
dannyAAM has joined #crystal-lang
<wmoxam> I'm having trouble compiling 0.31.x on OpenBSD https://gist.github.com/wmoxam/ec0c03fe56ee4454c1238cdfb3701ed4
<wmoxam> Am not sure how to best debug this :P
tdc has joined #crystal-lang
<FromGitter> <ilanpillemer> @tenebrousedge secret handshake in exercism was fun.
<FromGitter> <tenebrousedge> @ilanpillemer yeah? I'm not sure I've done that one
<FromGitter> <ilanpillemer> I suspect all the other people who have done it are doing the same course I am
<FromGitter> <tenebrousedge> probs
<FromGitter> <ilanpillemer> I looked at all of them, and prefer mine.
<FromGitter> <tenebrousedge> link?
<FromGitter> <tenebrousedge> actually none of them are doing your course
<FromGitter> <ilanpillemer> bruce tate must be
<FromGitter> <ilanpillemer> as he is the one who is giving it
<FromGitter> <tenebrousedge> well, fair enough
<FromGitter> <ilanpillemer> the others might not be
<FromGitter> <tenebrousedge> most of them are or have been mentors on the Crystal track
rohitpaulk has joined #crystal-lang
<FromGitter> <ilanpillemer> ok. so maybe only batate then
<FromGitter> <tenebrousedge> you're ahead of the game :)
<FromGitter> <ilanpillemer> or maybe no one else is doing the course.
<FromGitter> <ilanpillemer> lol
<FromGitter> <tenebrousedge> well, I'm probably going to follow in your footsteps, at least as far as the crystal exercises go, but I'm a bit busy today
<FromGitter> <ilanpillemer> yay
<FromGitter> <ilanpillemer> its fun to do with others
<FromGitter> <ilanpillemer> Do you do advent of code?
<FromGitter> <tenebrousedge> not as yet
Raimondi has quit [Ping timeout: 240 seconds]
<FromGitter> <ilanpillemer> can you declare module level variables?
<FromGitter> <tenebrousedge> @@var should work for both classes and modules
<FromGitter> <ilanpillemer> flatten is fun.. trying to use an accum
<FromGitter> <tenebrousedge> that's probably better
<FromGitter> <ilanpillemer> maybe.. I used to think that, but not so sure these days
<FromGitter> <tenebrousedge> I like my state isolated
<FromGitter> <ilanpillemer> generally I do too.. but sometimes its actually simpler to understand when you dont
<FromGitter> <ilanpillemer> I think it depends on the context
<FromGitter> <ilanpillemer> is there a cast command from a union after I have checked with typeof?
<FromGitter> <tenebrousedge> `as`
<FromGitter> <ilanpillemer> is there a way to check first which one of the Union it is?
absolutejam has joined #crystal-lang
<FromGitter> <ilanpillemer> is_a
<FromGitter> <tenebrousedge> yes
<FromGitter> <tenebrousedge> `case` statements can also be useful
<FromGitter> <tenebrousedge> also have you checked out Enums yet?
<FromGitter> <ilanpillemer> not yet, trying to do this with `case` `is_a?` and `as`
<FromGitter> <tenebrousedge> Enums are <3
<FromGitter> <ilanpillemer> is there a kind of each that ignores nils?
<FromGitter> <tenebrousedge> `compact_map`
<FromGitter> <tenebrousedge> or `select`
rohitpaulk has quit [Ping timeout: 264 seconds]
Raimondi has joined #crystal-lang
<FromGitter> <ImAHopelessDev_gitlab> okay back in action after updating crystal. man i was really depressed when my stuff wouldn't compile, i'm glad i got i tall fixed. actually, the arthritic overflow error prob just saved my @ss of really nasty bugs.
<FromGitter> <ImAHopelessDev_gitlab> compiler is my best friend
<FromGitter> <ilanpillemer> types
Raimondi has quit [Ping timeout: 240 seconds]
tdc has quit [Quit: Leaving]
<FromGitter> <ImAHopelessDev_gitlab> Created a new benchmark here https://github.com/girng/InlineStringLiteralsVsStringConstants if anyone was curious, thx for checking it out
<FromGitter> <Blacksmoke16> throwing exceptions is going to kill the perf
<FromGitter> <ImAHopelessDev_gitlab> should I try without them?
<FromGitter> <Blacksmoke16> prob
<FromGitter> <ilanpillemer> hashes are ordered?
<FromGitter> <tenebrousedge> yes, by insertion
<FromGitter> <ilanpillemer> wow
<FromGitter> <ilanpillemer> thats the complete opposite of Go
<FromGitter> <tenebrousedge> useful though
<FromGitter> <absolutejam_gitlab> I never really understood how Go's hashes are completely non-deterministic
<FromGitter> <absolutejam_gitlab> Like Python's used to be not in the order of the keys, but I think the keys always had the same order
<FromGitter> <absolutejam_gitlab> eg. ordered by the hashed value
<FromGitter> <ilanpillemer> not in Go
<FromGitter> <absolutejam_gitlab> I've had multiple runs of the same application spit out keys in a different order
<FromGitter> <ImAHopelessDev_gitlab> @Blacksmoke16 updated repo, wow, no bytes per operation with const strings
<FromGitter> <ilanpillemer> Its defined in the compiler. Each time you iterate it starts from a random point.
<FromGitter> <absolutejam_gitlab> Don't get me wrong, I think Go is great
<FromGitter> <absolutejam_gitlab> But it's just another Goism
<FromGitter> <ImAHopelessDev_gitlab> Goism?
<FromGitter> <ilanpillemer> I am not saying either way. Just that in Go you cannot depend on Map iteration order.
<FromGitter> <absolutejam_gitlab> Another 'feature' of the language
<FromGitter> <absolutejam_gitlab> Yeah, I know.
<FromGitter> <ilanpillemer> Apparently it gives more flexibility in implementations and also protects against some kind of security attacks.
<FromGitter> <absolutejam_gitlab> can't say fairer than that
<FromGitter> <ilanpillemer> maybe it allows for compiler optimisations?
<FromGitter> <ImAHopelessDev_gitlab> whenever i think of go, i think of "DECLARED BUT NOT USED YOU FILTHY ANIMAL, YOU ARE A TERRIBLE PROGRAMMER"
<FromGitter> <ImAHopelessDev_gitlab> so.. i go back to crystal :)
<FromGitter> <ilanpillemer> no thats not why
<FromGitter> <ilanpillemer> it sped up compilation times by 40%
<FromGitter> <absolutejam_gitlab> eh, if the compiler can detect if it's not used, why not just ignore it?
<FromGitter> <absolutejam_gitlab> unless you're explicitly importing for side-effects
<FromGitter> <ilanpillemer> it has to work out that its not used
<FromGitter> <absolutejam_gitlab> I mean, I quite like that it complains at you, but in development sometimes I comment shit out
<FromGitter> <ImAHopelessDev_gitlab> all i can say is, api for go is amazing.my reading comprehension is not very good, and i even understood a lot of stuff
<FromGitter> <ImAHopelessDev_gitlab> that's saying a lot, tbh.
<FromGitter> <ilanpillemer> yes. its annoying. but the reason is for compilation time speed ups
<FromGitter> <ImAHopelessDev_gitlab> api and doc descriptions* i mean
<FromGitter> <absolutejam_gitlab> I'd rather have those optimizations behind a build flag tho
Raimondi has joined #crystal-lang
<FromGitter> <absolutejam_gitlab> but Go is Go. Great but not flexible
<FromGitter> <absolutejam_gitlab> I mean, the language itself, not its uses
<FromGitter> <absolutejam_gitlab> flexible is probable the wrong word
<FromGitter> <ImAHopelessDev_gitlab> @absolutejam_gitlab i even googled that, and the SO question has like thousands of views, half a decade old, etc. lololol
<FromGitter> <absolutejam_gitlab> opinionated
ht__ has quit [Remote host closed the connection]
<FromGitter> <absolutejam_gitlab> But I also think Go's success is because it's so opinionated
<FromGitter> <ilanpillemer> its highly opinionated
<FromGitter> <ilanpillemer> there is normally only one way of doing anything
<FromGitter> <absolutejam_gitlab> Like you say, it's allowed for optimizations that are otherwise impossible
<FromGitter> <absolutejam_gitlab> like the Crystal compiler is a lot slower because it has to compile the world
<FromGitter> <ilanpillemer> they still dont have generics
<FromGitter> <ImAHopelessDev_gitlab> didn't they have a pr that tried to implement it, then it got shut down
<FromGitter> <ilanpillemer> they have had lots
<FromGitter> <ilanpillemer> there is a new one now being bashed around
<FromGitter> <absolutejam_gitlab> Go2 has generics confirmed though, right?
<FromGitter> <ilanpillemer> in theory
<FromGitter> <absolutejam_gitlab> Just no concrete implementation yet
<FromGitter> <ilanpillemer> yes. they create proposals and then people bash it and bash it. And it gets through extreme bashing then yes.
Raimondi has quit [Ping timeout: 240 seconds]
<FromGitter> <ImAHopelessDev_gitlab> what' sthe diff between a generic and a class?
<FromGitter> <ImAHopelessDev_gitlab> isn't a generic just a "customized" class?
<FromGitter> <absolutejam_gitlab> You're effectively templating a class definition based on a type you pass in
<FromGitter> <ilanpillemer> lets say you want to have one sort method that works on differenct classes?
<FromGitter> <ImAHopelessDev_gitlab> `string_box = MyBox(String).new("hello")` oh, `String`
<FromGitter> <ImAHopelessDev_gitlab> Yeah I see
<FromGitter> <ImAHopelessDev_gitlab> generics utilize classes to be generics
<FromGitter> <ImAHopelessDev_gitlab> that make sense??
<FromGitter> <ImAHopelessDev_gitlab> ohh so this is where `T` comes from
<FromGitter> <ilanpillemer> yes
<FromGitter> <ImAHopelessDev_gitlab> i havn't had a use case for generics yet but i prob will. if anything, i think it's kindacool. offers the developer more tools to do stuff with types
<FromGitter> <ImAHopelessDev_gitlab> why is go against them
<FromGitter> <ilanpillemer> Its not against them
<FromGitter> <ilanpillemer> They are trying to still find a way of doing them they like.
<FromGitter> <ilanpillemer> They are highly opinonated, and slow to make their opinions too!
<FromGitter> <ImAHopelessDev_gitlab> oh
<FromGitter> <ImAHopelessDev_gitlab> well, tbh rob pike is smart enough at this point i'm sure he could have implemented them by himself lol
<FromGitter> <tenebrousedge> I wonder how it will be to put some bacon jam on these steaks before I sous vide (https://anovaculinary.com/what-is-sous-vide/) them
dwdv has quit [Quit: quit]
<FromGitter> <tenebrousedge> maybe with some rosemary olive oil as well?
<FromGitter> <ImAHopelessDev_gitlab> do you need to use the stove's electricity for that
<FromGitter> <ImAHopelessDev_gitlab> or do you use the sous vide thing to heat it up
<FromGitter> <tenebrousedge> the sous vide thing has its own heater
<FromGitter> <tenebrousedge> it keeps the water bath within .1 degree
<FromGitter> <ilanpillemer> wow
<FromGitter> <ilanpillemer> restaurant quality steaks
<FromGitter> <tenebrousedge> yup, I got some nice ribeyes, and they're going to come out at 133 F
<FromGitter> <ImAHopelessDev_gitlab> nice
<FromGitter> <ImAHopelessDev_gitlab> so i justneed a pan?
<FromGitter> <ImAHopelessDev_gitlab> don't even need a stove
<FromGitter> <tenebrousedge> a blowtorch helps if you don't have a stove. I still like them crispy on the outside
<FromGitter> <ImAHopelessDev_gitlab> wish i could blowtorch the `/` off `//`
<FromGitter> <tenebrousedge> :P
<FromGitter> <ImAHopelessDev_gitlab> 😆
<FromGitter> <absolutejam_gitlab> huh?
<FromGitter> <ilanpillemer> I think its the integer division thing
<FromGitter> <ilanpillemer> the meetup exercism is cute
Raimondi has joined #crystal-lang
Raimondi has quit [Ping timeout: 240 seconds]
<FromGitter> <watzon> `//` is new in 0.31.0 isn't it? I think I looked for it a couple versions ago and didn't find it.
Raimondi has joined #crystal-lang
<FromGitter> <ImAHopelessDev_gitlab> yah
Raimondi has quit [Ping timeout: 240 seconds]
<oprypin> watzon, it's new in 0.27 :D
<oprypin> more properly working in 0.28
<FromGitter> <ilanpillemer> wow.. only two other people did the meetup exercism
<FromGitter> <tenebrousedge> not all of these problems have seen a lot of action
<FromGitter> <tenebrousedge> I guess I just became the only one to publish a solution to protein translation
<FromGitter> <ilanpillemer> :)
<FromGitter> <ilanpillemer> the other two solutions for meetup were very different
<FromGitter> <tenebrousedge> I like amscotti generally
<FromGitter> <ilanpillemer> he had some clever solution that is hard to understand
<FromGitter> <tenebrousedge> acronym is a trivial problem
<FromGitter> <ilanpillemer> there dont seem to be any problems that use stdin
<FromGitter> <ilanpillemer> and stdout
<FromGitter> <tenebrousedge> because those would be harder to test
<FromGitter> <ilanpillemer> I will need to understand how to use stdin for when I start on aoc
<FromGitter> <ilanpillemer> I am assuming there is some kind of streaming buffery thing
<FromGitter> <tenebrousedge> `puts` and `gets` are kinda your backbone
<FromGitter> <tenebrousedge> and yes, there's a lot of IO constructs
<FromGitter> <ilanpillemer> anyway.. to worry about after I finish exercism
<FromGitter> <ilanpillemer> enough for tonight.. more fun tomorrow night
<FromGitter> <tenebrousedge> kk
<FromGitter> <ilanpillemer> Crystal is such fun after the austerity of Go. It will be Go all day tomorrow for my day job.. and then some more Crystal for pleasure in the evening
Raimondi has joined #crystal-lang
Raimondi has quit [Ping timeout: 240 seconds]
<FromGitter> <tenebrousedge> It's a very flexible language. Do you care to take a look at my protein-encoding solution?
<FromGitter> <ilanpillemer> you have the link?
Raimondi has joined #crystal-lang
<FromGitter> <ilanpillemer> I will need to read this more carefully tomorrow.. looks fascinating.
<FromGitter> <tenebrousedge> I'm a big fan of using `StringScanner` and `Iterator` together. It's useful for the Forth problem, too
<FromGitter> <ilanpillemer> I will need to properly understand `StringScanner` and `Iterator` for when I start AoC
<FromGitter> <ilanpillemer> so I will definitely read your solution carefully
absolutejam has quit [Ping timeout: 240 seconds]
<FromGitter> <tenebrousedge> 👍
return0e_ has quit [Remote host closed the connection]