RX14 changed the topic of #crystal-lang to: The Crystal programming language | http://crystal-lang.org | Crystal 0.20.1 | Fund Crystal's development: http://is.gd/X7PRtI | Paste > 3 lines of text to https://gist.github.com | GH: https://github.com/crystal-lang/crystal | Docs: http://crystal-lang.org/docs/ | API: http://crystal-lang.org/api/ | Logs: http://irclog.whitequark.org/crystal-lang
<FromGitter> <raydf> @andreaTP , if you're in desktop, or maybe in the mobile app look at the activity tab of this gitter channel, you'll see the main contributors working live fixing issues and adding new features almost daily. Also there's a great community creating shards for different needs.
soveran has joined #crystal-lang
soveran has quit [Changing host]
soveran has joined #crystal-lang
soveran has quit [Ping timeout: 260 seconds]
<splitty_> Does `return` return from the innermost or outermost loop?
akwiatkowski has quit [Ping timeout: 264 seconds]
matp has quit [Quit: ZZzzzZz...]
snapcase has quit [Ping timeout: 240 seconds]
_whitelogger_ has joined #crystal-lang
twisterghost has quit [*.net *.split]
<FromGitter> <cjgajard> splitty_, `return` ends a method execution instanstaneosly. `break` stops the innermost loop. example: https://carc.in/#/r/1hi9
twisterghost has joined #crystal-lang
<splitty_> Thanks cjgajard
<splitty_> Does anyone know how to pop a value from the stack and store it in a variable using inline asm? LD
<splitty_> :D*
snapcase has joined #crystal-lang
<splitty_> Is it possible to use generics with a single method instead with the whole struct/class?
Marco____ has joined #crystal-lang
<Marco____> hey, I'm trying to use crystal on Fedora 25, but I think the problem is that fedora only bundles boehm gc 7.4
<Marco____> by any chance, has anyone packaged crystal for fedora/in general with the right version of boehm gc statically linked or bundled together?
<FromGitter> <cjgajard> splitty_, yes, https://crystal-lang.org/docs/syntax_and_semantics/type_restrictions.html#free-variables (read the "Free variables" section)
Marco____ has quit [Quit: Page closed]
soveran has joined #crystal-lang
ponga has quit []
soveran has quit [Ping timeout: 268 seconds]
pawnbox has joined #crystal-lang
pawnbox has quit [Remote host closed the connection]
Marco_ has joined #crystal-lang
<Marco_> It turns out that you can pull just updated Boehm GC packages from Fedora Rawhide. I added the instructions here: https://github.com/crystal-lang/crystal/wiki/All-required-libraries
mgarciaisaia has joined #crystal-lang
mgarciaisaia has quit [Ping timeout: 246 seconds]
mgarciaisaia has joined #crystal-lang
mgarciaisaia has quit [Client Quit]
pawnbox has joined #crystal-lang
<FromGitter> <cjgajard> thanks!
Marco_ has quit [Quit: Page closed]
soveran has joined #crystal-lang
soveran has quit [Ping timeout: 256 seconds]
matp has joined #crystal-lang
soveran has joined #crystal-lang
soveran has quit [Ping timeout: 256 seconds]
lacour has quit [Quit: Leaving]
gewo has quit [Ping timeout: 258 seconds]
txdv has joined #crystal-lang
soveran has joined #crystal-lang
vivus-ignis has joined #crystal-lang
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #crystal-lang
soveran has quit [Ping timeout: 256 seconds]
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #crystal-lang
<FromGitter> <andreaTP> Just to clarify a typo yesterday, Actors memory footprint is 300 bytes not KB
<FromGitter> <sdogruyol> that's cool :D
<txdv> what actor?
<FromGitter> <sdogruyol> @txdv Erlang Actor
soveran has joined #crystal-lang
<FromGitter> <andreaTP> Even Akka ones is similar
pawnbox has quit [Ping timeout: 252 seconds]
pawnbox has joined #crystal-lang
akwiatkowski has joined #crystal-lang
pawnbox has quit [Remote host closed the connection]
mark_66 has joined #crystal-lang
DTZUZU2 has quit [Ping timeout: 250 seconds]
dtzu has quit [Ping timeout: 250 seconds]
vivus-ignis has quit [Ping timeout: 258 seconds]
pawnbox has joined #crystal-lang
vivus-ignis has joined #crystal-lang
vivus-ignis has quit [Ping timeout: 248 seconds]
_whitelogger has joined #crystal-lang
Raimondii has joined #crystal-lang
pawnbox has quit [Remote host closed the connection]
Raimondi has quit [Ping timeout: 244 seconds]
Raimondii is now known as Raimondi
DTZUZU2 has joined #crystal-lang
dtzu has joined #crystal-lang
aurelien has joined #crystal-lang
<aurelien> Hello Crystal!
pawnbox has joined #crystal-lang
<FromGitter> <sdogruyol> @aurelien hello
<aurelien> what is the best way to comment block in .cr?
* aurelien hope secretly that have been improved from ruby =begin =end to something more design 8-D
pawnbox has quit [Remote host closed the connection]
<FromGitter> <sdogruyol> i use # for all
<aurelien> ok
<RX14> I think it's much nicer to select blocks and toggle commenting in your editor, instead of having a block comment syntax
<aurelien> RX14: that is right ... emacs do that. But, maybe since there is a go side in crystal maybe the *//* and // was usuable too
<RX14> I don't think there's any of go
<RX14> s syntax in crystal
<crystal-gh> [crystal] asterite closed pull request #3747: Allow 'private macro' inside classes (master...feature/macro/private) https://github.com/crystal-lang/crystal/pull/3747
<FromGitter> <barisbalic> Is there any way of contacting the owner of crystalshards.xyz? There's no contact details on the page, and no obvious repo in github
<crystal-gh> [crystal] asterite closed pull request #3727: Fixes #3715 and the same problem with forall and comment (master...fix-non-stable-format) https://github.com/crystal-lang/crystal/pull/3727
gewo has joined #crystal-lang
dtzu has quit [Ping timeout: 264 seconds]
<FromGitter> <barisbalic> @RX14 wow, I must have mispelled crystalshards when I searched. That was dumb, sorry.
<RX14> no I knew who's github account it was on
<RX14> i had trouble finding the repo originally too
<RX14> I had to ask @sdogruyol
<FromGitter> <barisbalic> @RX14 ah okay, good I feel a little less dumb
<travis-ci> crystal-lang/crystal#e7d09e0 (master - fix non stable formatting): The build passed. https://travis-ci.org/crystal-lang/crystal/builds/186039884
pawnbox has joined #crystal-lang
Philpax has joined #crystal-lang
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #crystal-lang
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #crystal-lang
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #crystal-lang
vivus-ignis has joined #crystal-lang
<aurelien> is it possible to write chef recipe in crystal?
<crystal-gh> [crystal] asterite pushed 3 new commits to master: https://github.com/crystal-lang/crystal/compare/e7d09e06b37d...76ee0cb76f50
<crystal-gh> crystal/master 95f0732 Ary Borenszweig: String: make `String.new(capacity)` safe by checking returned bytesize
<crystal-gh> crystal/master 76ee0cb Ary Borenszweig: String: let `String.new(capacity)` realloc buffer if bytesize is less than requested capacity
<crystal-gh> crystal/master 039f77b Ary Borenszweig: Char#_tos: remove extra 0 byte written
<aurelien> which part of go is in crystal?
<aurelien> https://en.wikipedia.org/wiki/Crystal_(programming_language) Influenced by Ruby / C / Rust / Go / C# / Python
<Papierkorb> The fiber/channel stuff maybe?
<Papierkorb> Though they probably got that from Erlang. oh well.
<RX14> i don't think fiber/channel is from erlang
<RX14> i'm pretty sure it's from go
<Papierkorb> don't they have something like that?
<FromGitter> <barisbalic> It is from go
<RX14> erlang has actors
<FromGitter> <barisbalic> @Papierkorb erlang has actors
<RX14> they're different iirc
<RX14> well, based on what @andreaTP said about them
<FromGitter> <barisbalic> Yes, there's no channels for edample
<FromGitter> <barisbalic> Processes can send messages directly to each other
<Papierkorb> ah okay
<aurelien> ok, thanks
<RX14> I think crystal is more opinionated than ruby too, I guess you could say thats from go
<RX14> but the most obvious thing is the concurrency model
<Papierkorb> more opinionated in which way RX14?
<aurelien> is there a documentation page about the crystal model?
<RX14> crystal concurrency model?
<aurelien> no ... sorry ... just what is crystal, why and which side of each language it use ...
Philpax has quit [Ping timeout: 248 seconds]
<FromGitter> <Gebriel> hey there
<FromGitter> <barisbalic> @Papierkorb it has code formatting tools for one thing
<FromGitter> <Gebriel> is there a guide or book to study crystal
<RX14> aurelien, well thats pretty complex
<FromGitter> <Gebriel> without ruby knowledge
<RX14> @Gebriel the best reference is https://crystal-lang.org/docs/ for learning the language
<aurelien> RX14: certainly, but that would be pretty cool to light the dark corner of knowledge
<RX14> aurelien, well it's basically ruby-inspired syntax with static typing, heavily ruby-inspired stdlib, and go concurrency
<RX14> the type inference system is unique to crystal I'm pretty sure
<FromGitter> <barisbalic> I'd say the stdlib is actually nicer
<travis-ci> crystal-lang/crystal#e7ef694 (master - Fix typo): The build passed. https://travis-ci.org/crystal-lang/crystal/builds/186038843
<RX14> yeah it's ruby inspired
<FromGitter> <barisbalic> I guess it has the benefit of coming after ruby, but it's well thought out, and things have saner interfaces (http/client for example)
<RX14> but cleaned up
<RX14> both in the stdlib and syntax
<RX14> for example you need () around method arguments which isn't true for ruby
<aurelien> wow so this https://en.wikipedia.org/wiki/Type_inference is not anymore hypothetical language but crystal response
<RX14> I mean when defining methods
<RX14> when calling methods you don't need ()
<RX14> aurelien, type inferrence hasn't been theoretical for about 20 years
<aurelien> ok
pawnbox has quit [Ping timeout: 250 seconds]
<RX14> there's only one place where you need to specify types, and that's for instance and class variables
<travis-ci> crystal-lang/crystal#76ee0cb (master - String: let `String.new(capacity)` realloc buffer if bytesize is less than requested capacity): The build passed. https://travis-ci.org/crystal-lang/crystal/builds/186057467
<RX14> but a lot of the time they can be inferred too
<FromGitter> <barisbalic> Dem overloads
mgarciaisaia has joined #crystal-lang
<RX14> i could argue that you don't need overloads
<RX14> you could just change method names ;)
<aurelien> is there a way to use crystal in chef recipes?
<RX14> i doubt it
<RX14> well actually i've never used chef
<RX14> so i have no idea
<aurelien> what do you use?
<aurelien> I mean rather than chef? ansible? puppet? home backed script?
<RX14> I own a grand total of 1 server
<RX14> which I use docker on
<RX14> so i guess dockerfiles + docker-compose would be the closest replacement
scottj has joined #crystal-lang
<RX14> or do you mean you want to use chef to deploy crystal?
<RX14> i'm very sure thats possible
<aurelien> certainly possible
<aurelien> no I need to use chef at works
<aurelien> and i do not wish to use ruby
<aurelien> reading about crystal, i was thinking that it would be close enough to ruby to do the job and seems so powerful that it would be cool to learn
<Papierkorb> What's wrong with ruby?
<txdv> its slow
<txdv> hard to use if you are dealing with bits and bytes
<txdv> has no static typing
<aurelien> maybe not close enough to system when you come from bash and C
<Papierkorb> It's not meant to be used for things that need speed, ruby is fast enough for many things, and way too slow for many others
<Papierkorb> But for something like chef, where ruby most of the time waits for a system() command to finish, what's wrong with ruby?
<txdv> nothing
<txdv> i love ruby when speed is not important
<RX14> if anything you might want to write the odd script in crystal
<RX14> and call it from chef
<RX14> but not replace the whole DSL
<aurelien> crystal works fine on Parabola!
<aurelien> and the command is close to go :-)
<aurelien> which ruby have not
<txdv> parabola?
<aurelien> Parabola GNU / Linux-libre ... FAIF distro ... the free side of Archlinux
<FromGitter> <barisbalic> @RX14 im not saying overloads are needed, but they are nice
<RX14> yep they sure are
<Papierkorb> One of the things I miss in ruby is method overloading...
<Papierkorb> (yadda yadda dynamic typing)
nek_ has joined #crystal-lang
<nek_> Hello all. I have a question about the language design of Crystal. Is it OK to ask here?
<FromGitter> <asterite> Hi nek_. Sure! :-)
<nek_> Thank you! In this comment, you said that Crystal is influenced by Go: https://crystal-lang.org/2016/06/14/crystal-0.18.0-released.html#comment-2732771703
<nek_> My question is: what the part of Crystal is from Go?
<nek_> I suppose it's channels, but I can't find the document about it.
<FromGitter> <asterite> Yes, CSP, the concurrency model
* aurelien ... feel not alone -_-
<FromGitter> <asterite> I don't know if there's a document that says "Go's concurrency model" because it's CSP, which I'm not sure only Go uses
<aurelien> nek_ on my side I have find the command from the terminal that run as go ... for the moment
pawnbox has joined #crystal-lang
<FromGitter> <andreaTP> @asterite even Clojure use them by default
go|dfish has quit [Quit: SIGQUIT]
go|dfish has joined #crystal-lang
<nek_> Thank you for the answer!!!
nek_ has quit [Quit: Page closed]
oddmunds has quit [Quit: WeeChat 1.4]
<crystal-gh> [crystal] MakeNowJust opened pull request #3751: Reset location after block yielding in macro expansion (master...fix/macro-yield-location) https://github.com/crystal-lang/crystal/pull/3751
bmcginty has quit [Ping timeout: 250 seconds]
pawnbox has quit [Remote host closed the connection]
bmcginty has joined #crystal-lang
gcds has joined #crystal-lang
<gcds> Hello, how I can call parent method of class which I extend?
<RX14> calling super should work
soveran has quit [Remote host closed the connection]
<gcds> oh ok :)
<splitty_> Hey, where is malloc implemented?
<RX14> crystal by default uses libgc's malloc
<splitty_> I'm writing a kernel in Crystal, so I can't call Pointer(T).malloc
<splitty_> I have a custom malloc function which uses my heap allocator, but I don't know where to put it so the compiler detects it
<RX14> uhh
<RX14> for calling .new?
<splitty_> RX14, I'm getting
<splitty_> main_module:(.text+0xa3d): undefined reference to `malloc'
<splitty_> main_module:(.text+0xa6c): undefined reference to `memset'
<splitty_> My code is ptr = Pointer(UInt16).malloc 16_u64
<RX14> you need to define a GC
<splitty_> Okay, how would I do that so the compiler recognizes it?
<splitty_> I'm not familiar with the internals of the Crystal compiler/runtime
<RX14> well i've never done it before but this is the simplest implementation https://github.com/crystal-lang/crystal/blob/master/src/gc/null.cr
<RX14> you should `require "gc"` then `require "./your_gc"`
<RX14> which is adapted from gc/null whcih i linked
<splitty_> Thank you, that seems to be exactly what I want :)
<RX14> you can probably put the `require "gc"` inside your gc definition
<RX14> and again, i've never done it but it probably works
pawnbox has joined #crystal-lang
<splitty_> We'll see in a moment :P
<gcds> is it possible to override private method from parent class? :D
pawnbox has quit [Remote host closed the connection]
<splitty_> RX14, how would I cast a Pointer(T) to a Void* ?
<RX14> pointer.as(Void*)
<splitty_> Thx
<RX14> or .as(Pointer(Void))
<RX14> it's just the former is much nicer to write
<RX14> the * syntax is simply an alias, it means the same thing
<splitty_> RX14, can't cast (Pointer(UInt8) | Nil) to Pointer(UInt8)
<RX14> well it seems your pointer isn't always a pointer
<splitty_> Yep the Heap allocation can fail
<RX14> then you need to handle that case
<splitty_> Does the static analysis make this possible as soon as I return early in the nil case?
<RX14> if you use `return unless foo` foo won't be nil after that
<RX14> because `return` has type NoReturn
<splitty_> RX14, I'm doing this now: https://puu.sh/sXFMg/76858c2c40.png
<splitty_> Doesn't seem sufficient though
<RX14> uhh no
<RX14> hmm
<RX14> i would do your equivalent of a kernel panic instead of returning
<splitty_> btw, thanks for the 'return unless foo'. I was always using 'return if foo.is_a? Nil'
<splitty_> RX14, yeah that makes sense
dtzu has joined #crystal-lang
<RX14> you should be able to mark a method as noreturn manually
<RX14> then just print + stop the processor i guess?
<RX14> hopefully later on you can enter a stage where you can unwind the stack
<RX14> then raise becomes possible
<splitty_> RX14, the Crystal compiler always surprises me.. in a negative way
<splitty_> Error undefined constant ::TypeCastError
<splitty_> That's incredibly helpful
<RX14> well
<splitty_> Considering I don't have a file or a line number.. :D
<RX14> it isn't really built for use without the stdlib
<splitty_> Yeah
ponga has joined #crystal-lang
<RX14> you'll need to define TypeCastError I guess
<splitty_> I did type casts before and didn't have any issues with it
<splitty_> RX14, this is the code for my GC: https://puu.sh/sXG6B/51ade49923.png
<splitty_> Maybe you see something obvious there ^&
<RX14> it's the .as call which needs TypeCastError
<RX14> try uting .as?
<RX14> which will return nil on a type cast error
<RX14> instead of raising
<splitty_> That can't possibly work though, because then I'd have the problem I had before again, wouldn't I?
<RX14> well
<RX14> not really
<RX14> because then you have Void* | Nil
<RX14> when you can panic unless block
<RX14> it's ugly I know
<splitty_> hmm
<RX14> but if you get stack unwinding working you can implement your own Exception class
<RX14> then all this mess goes away
<RX14> or actually
<RX14> here's a point
<RX14> implement exception now
<RX14> don't do any unwinding
<RX14> and just panic
<RX14> class Exception
<RX14> def self.new(message, cause)
<RX14> panic
<RX14> end
<RX14> end
<RX14> then subclass all these core exceptions: https://github.com/crystal-lang/crystal/blob/master/src/exception.cr
<RX14> then you can use `raise` to mean kernel panic here with this message
<splitty_> So, if my understand of that is right, I'd do Heap.alloc(size).as?(Void*)
<splitty_> And then raise if block.is_a? Nil
p0p0pr37 has quit [Remote host closed the connection]
<RX14> actually if you implemented TypeCastError you could just do
<RX14> block = Heap.kalloc(size)
<RX14> raise unless block
<RX14> block.as(Void*)
<RX14> .as will never really raise as the available types are always compatible
<RX14> you just get a panic if your allocation fails
<splitty_> Would class TypeCastError < Exception end suffice?
<RX14> should do
<RX14> actually not
<RX14> you need to add the new method
<RX14> the definition in the stdlib should suffice
<splitty_> I guess I can call super.new then?
<splitty_> Oh
<RX14> it's just because subclasses don't inherit constructors iirc
<BlaXpirit> splitty_, no, super is not the superclass, it's the ... supermethod
<RX14> yeah where the super method here is Exception's initialize
<RX14> which should kernel panic
<splitty_> Okay so I'd just call super?
<RX14> actually it might be better to define self.new() on exception
<RX14> def self.new(*args); kernel panic; end
<splitty_> oops I forgot to inherit Exception
<RX14> that might work
<RX14> oh yeah
<splitty_> Do I have to import something to make raise work?
<RX14> that should work to my eye
<RX14> do you get an error using raise?
<splitty_> I'm getting undefined local variable or method 'raise'
<RX14> ohh
<splitty_> The joy of doing OS dev haha
<RX14> this looks like the files
<RX14> ok
<RX14> new plan
<splitty_> Oy vey
<RX14> just define all the applicable raise methods to kernel panic
<RX14> and stub out TypeCastError to be a struct
<RX14> which takes the initialize arguments and does nothing
<splitty_> hmm
<splitty_> I implemented __crystal_personality, __crystal_raise, raise, raise(Exception), raise(String) and __crystal_raise_string
<splitty_> Now it finds raise, but I'm having another problem now
<RX14> do you need __crystal_personality?
<RX14> i'm not all to sure how the unwinding works
<splitty_> Not sure. Can't hurt. In Rust I always defined the personality function when writing OSes
<RX14> oh...
<splitty_> Oh please no :/
<splitty_> undefined constant ::String::Builder
<splitty_> Now, this is a problem. :D
<RX14> oh dear
<RX14> yes the compiler uses the stdlib quite a bit
<splitty_> Let's see..
<splitty_> I don't see Strings used here
<splitty_> Why would it want me to implement ::String::Builder
<RX14> however, now you've defined GC.malloc you might in fact be able to import the whole of string
<RX14> probably not
<splitty_> Nope
<splitty_> while requiring "c/stdlib": can't find file 'c/stdlib' relative to '/opt/crystal/src'
<RX14> yeah that wont work
<RX14> .as probably uses ::String::Builder to build it's error message
<splitty_> I'm using as quite a lot in my code and it never does this
<splitty_> Only here, for some reason
<RX14> interesting
<splitty_> Honestly though, I might be able to implement String::Builder
<Papierkorb> The third OS in Crystal?
<splitty_> The was a second one?
<splitty_> I only know about one other OS
<RX14> maybe it would just be better to use .as? after all
<splitty_> Maybe ^^
<Papierkorb> to the best of my knowledge, mine was the first splitty_
<Papierkorb> Another one in the last weeks by someone
<splitty_> Papierkorb, is it on GitHub?
<Papierkorb> Nope
<splitty_> Ah that's why I didn't know about it :P
<Papierkorb> It "lives" only in my private git
<splitty_> Chronium started it but I pretty much implemented everything, because Chronium is lazy :D
<Papierkorb> Mine was in long mode, I borrowed some .asm files from the rust tutorial os
<splitty_> Ha, I borrowed my Heap from my Rust OS :D
<Papierkorb> That I wrote myself, buddy allocation algorithm
<splitty_> Interesting
<Papierkorb> was surprisingly fast
<splitty_> I don't get where the dependency on ::String::Builder comes from..
<splitty_> RX14, that shouldn't happen with as?, should it?
<RX14> well
<RX14> .as can create a TypeCastError
<splitty_> I'm now using `.as?` though
<RX14> which uses a StringInterpolation node to create the TypeCastError message
<RX14> and the codegen for the StringInterpolation uses String::Builder
<RX14> and i'm not sure
<RX14> but i don't think so
<RX14> nope
<splitty_> It also still wants me to define TypeCastError
<splitty_> Strange
<Papierkorb> splitty_: I did not implement String::Builder, I only used a skeleton String class by taking the original one and throwing everything out that uses IO or Builder
<RX14> i don't think so
soveran has joined #crystal-lang
<RX14> Papierkorb, if you use .as and the compiler decides the type cast could fail, then you need to define String::Builder
<Papierkorb> Sure it was less convenient, but the TTY.print method simply accepted multiple arguments instead, which was good enough for me
<RX14> this is the call which requires String::Builder
<gcds> Guys I have question regarding extending class methods... I have extend class replaced method but in parent class method which should call my replaced method is not called...
<splitty_> RX14, I'm just gonna drop the as stuff and return a null pointer if the heap allocation fails
<Papierkorb> RX14: I didn't need it, either that was different in september (git logs ftw), or I worked around it
<Papierkorb> But I only added the "real" classes later on and carefully. Worked except for complex classes like Array or Hash :|
<RX14> Papierkorb, well you must not have hit n .as which codegeneed that
<RX14> or actually
<FromGitter> <raydf> Hello everyone
<RX14> i think that might be new
<FromGitter> <raydf> is there any way to convert a parameters array to an splat of args?
<RX14> because maybe the line number at which the type cast failed was only added recently
<RX14> that must be it
<Papierkorb> RX14: searching for it shows that I only used .as with pointer types
<RX14> this is when it was changes
soveran has quit [Ping timeout: 256 seconds]
<Papierkorb> I began much later: `Mon Sep 19 23:06:59 2016 +0200`
<RX14> well
<RX14> you never hit that case in the compiler I guess
<Papierkorb> yip :)
<Papierkorb> Anyway, I stopped dev'ing that when the joys of Crystal didn't outweight its issues (for that use-case) anymore
<FromGitter> <raydf> found it
<FromGitter> <raydf> Tuples.from(Array)
<Papierkorb> But I'm still interested in doing other low-level things with it. The biggest roadblocks are 1) IO 2) no GC. If you have both you can again do whatever you want without too much hassle
<Papierkorb> Which are given (mostly) for services in microkernel systems
<splitty_> Error in src/heap.cr:51: Bug: no target defs
<splitty_> What's that o_O
<splitty_> brb, eating
<RX14> sounds like a compiler bug to me
<splitty_> Awesome
<splitty_> Well I think I know what's happening
<RX14> a call with no targets
<RX14> if you can trace the code from here
matp_ has joined #crystal-lang
<splitty_> That's so strange..
matp has quit [Ping timeout: 260 seconds]
<RX14> where's heap.cr:51
<splitty_> @@instance.as(Heap).kalloc size
<splitty_> @@instance is a Heap?
<RX14> which makes the raise code be generated
<RX14> so
<RX14> oh
<RX14> here's why
<RX14> you need a .build method that yields
<splitty_> Oh?
<RX14> yield/no yield differentiates methods
<RX14> it probably codegenned a yielding one
<RX14> well
<RX14> one with a block
<splitty_> Nothing changed when I made self.build yield a String.new
<RX14> you need to yield a String::Builder
<splitty_> wut
<splitty_> Oh
<splitty_> Well
<splitty_> I thought I had to yield a String
<splitty_> Because the signature was def self.build(capacity : Int = 64) : String
<RX14> no it creates a new builder, yields the builder, the creates a string from the builder
<splitty_> Okay...
<splitty_> def self.build(capacity : Int = 64) : String
<splitty_> end
<splitty_> String.new
<splitty_> yield String::Builder.new String.new
<splitty_> This doesn't work either
<RX14> well no because that doesn't compile?
<splitty_> Why wouldn't it compile?
<RX14> you're calling self.new(String)
<RX14> which doesn't return a String::Builder
<splitty_> The error messaged should be a little more clear..
<RX14> what was the error?
<RX14> still the Bug: one?
<splitty_> Yes
<splitty_> And I can't make it go away
<splitty_> If I return a String::Builder.new from String::Builder.new(String) it still doesn't change anything
<FromGitter> <asterite> gcds: can you show some code?
<RX14> oh actually
<RX14> thats interesting
<RX14> it doesn't use the block version
<RX14> never minmd
<gcds> FromGitter: Sorry I still not used to Crystal global instances and stuff it was called somewhere before my replaced method was called...
<FromGitter> gcds, I'm a bot, *bleep, bloop*. I relay messages between here and https://gitter.im/crystal-lang/crystal
<gcds> asterite: Sorry I still not used to Crystal global instances and stuff it was called somewhere before my replaced method was called...
<RX14> splitty_, your code should work...
<splitty_> Right? :P
<splitty_> I have no idea what that bug thing is
<splitty_> Like, that exact line of code worked fine before
<splitty_> I don't know what changed.
<RX14> .new, << and to_s should be all you need
<splitty_> I have all of those implemented
<RX14> you do
<splitty_> Currently looks like this: https://puu.sh/sXJ1v/514977f72b.png
<RX14> try removing the .new(String)?
<splitty_> Still Bug: no target defs
<RX14> and that goes away when you remove the .as?
<RX14> if you do
<RX14> instance = @@instance
<RX14> panic unless instance
<splitty_> hmm let me see
<splitty_> I'll change the Heap a little so that Heap can't be null
<splitty_> nil*
<splitty_> That's silly anyway
<splitty_> Ah damn I can't change that
<splitty_> Awesome! Thank you
<splitty_> That fixed it
<splitty_> Now I only need to define memset... somewhere
<RX14> if you want to get string interpolation working you'll have to debug that again
<RX14> you'll be able to add some puts debugging to the compiler and work that out I think
<RX14> which exact call fails
<splitty_> Yeah that should be no problem
<Yxhuvud> memset? isn't that a llvm builtin?
<splitty_> RX14, do you happen to know where memset is defined?
<Papierkorb> splitty_: https://gist.github.com/Papierkorb/dd40c8ac2722505d18600710abc04040 Here's my memory management code
<splitty_> Yxhuvud, yes but I'm writing a kernel
<RX14> memeset?
<RX14> why do you need that?
<splitty_> RX14, to set my dank memes
<RX14> my typos :/
<splitty_> ^^
<Papierkorb> sdogruyol, to you too if you're still interested in the memory allocator
<splitty_> I need it because it's needed for malloc
<Papierkorb> It's not
<RX14> those intrinsics should work
<splitty_> Nice, thank you
<Papierkorb> splitty_: malloc allocates memory, it does not initialize it
<splitty_> Papierkorb, I know. malloc complains about needing __crystal_malloc and memset though
<RX14> what?
<Papierkorb> splitty_: ... you don't have malloc() yet if you didn't define it yourself
<splitty_> Papierkorb, I defined it myself. I think we're misunderstanding each other here.
<splitty_> Papierkorb, ptr = Pointer(UInt16).malloc 16_u64
<splitty_> This is my code.
<splitty_> Now if I run this
<splitty_> I'm getting two error messages
<splitty_> main_module:(.text+0xa3d): undefined reference to `malloc'
<splitty_> main_module:(.text+0xa6c): undefined reference to `memset'
<splitty_> Now that I have implemented malloc
<Papierkorb> Well malloc() should be no more than a call to your allocator
<splitty_> I need to implement memset. I still have a memset function, but it isn't recognized by the compiler
<splitty_> Papierkorb, theoretically, yes. But practically there's the crazy GC stuff involved
<Papierkorb> splitty_: memset isn't too hard, you can borrow it from my code if you want ^
mark_66 has quit [Remote host closed the connection]
<Papierkorb> You neither have the GC
<splitty_> As I said, I already have it, I just need the compiler to recognize it, but thanks anyway :D
<RX14> thats...
Sharcho has joined #crystal-lang
<RX14> strange
<RX14> memset should be defined in the compiler
<RX14> using llvm.memset.p0i8.i32
<RX14> which is an intrinsic
<splitty_> Well in my Rust kernel I had to override the intrinsics too
<splitty_> RX14, how do global paths work?
<RX14> what?
<Sharcho> Just a heads up that https://github.com/crystal-lang/crystal/issues/2553 needs to be dealt with before the end of year to avoid the apt repositories from being inaccessible.
<splitty_> If I define memset I can't call my 'real' memset in ./memory.cr anymore
<splitty_> In Rust I can do ::memset to get a global path to memset
<RX14> oh
<RX14> yeah you can use :: to anchor your path in crystal too
<splitty_> Well I tried that, I got 'unexpected token: ::'
<RX14> show me?
<splitty_> fun memset (dest : Void*, val : UInt8, len : UInt32, align : UInt32, is_volatile : Bool)
<splitty_> end
<splitty_> ::memset dest, val, len
<splitty_> Probably doing it wrong
<RX14> yeah...
<splitty_> Bear with me, I started writing Crystal code yesterday :P
<RX14> you'll have to move memset to a module
<RX14> you can only ancor types
<splitty_> Ah, I see
<RX14> if a top-level method goes out of scope there's no way to call it i'm pretty sure
Sharcho has quit [Quit: Leaving]
<RX14> so you'll have to move it to a module
<splitty_> RX14, could you give me an example please?
<splitty_> I moved the memory functions to a module
<splitty_> How do call memset inside of the Memory module now?
<splitty_> Tried ::Memory::memset, Memory::memset and Memory.memset
<RX14> def self.memset in the module
<RX14> then Module.memset
<splitty_> Oh okay
<splitty_> Syntax error in src/lib/intrinsics.cr:5: expecting token '=', not '.'
<splitty_> Memory.memset dest, val, len
<RX14> can you show me the whole code
<RX14> of both the definition and call
<splitty_> The definition in lib/memory.cr: https://puu.sh/sXK2B/139a750957.png
<splitty_> The usage in lib/intrinsics.cr: https://puu.sh/sXK3D/50985bd0a1.png
<RX14> try removing the space between the memset and ()
<RX14> in the instrinsics.cr
<splitty_> Doesn't change anything
<RX14> thats super weird
<splitty_> Well, better than BUG: No target defs
<RX14> add () around the memeset call on line 5
<RX14> and screenshot it again
<splitty_> Still doesn't compile
<RX14> ohh
<RX14> i see why
<RX14> thats a lib
<splitty_> Yep
<RX14> yeah libs are for binding external functions
<splitty_> Oh
<RX14> C bindings
<RX14> if you remove the lib
<RX14> that will work
<splitty_> Well all I'm trying to do is mimic
<splitty_> fun memset = "llvm.memset.p0i8.i32"(dest : Void*, val : UInt8, len : UInt32, align : UInt32, is_volatile : Bool)
<splitty_> And make it use my own memset function
<RX14> there are different syntax rules inside lib
<splitty_> So that the compiler can finally link it and make malloc work
<RX14> splitty_, the compiler doesn't use that memset definition
<RX14> thats simply a binding for the standard library
<splitty_> Oh
<RX14> the compiler uses the llvm instrinsic directly
soveran has joined #crystal-lang
<splitty_> So where should I define it so that the following compiler error goes away:
<splitty_> main_module:(.text+0xa6c): undefined reference to `memset'
<RX14> which seems to just be generating a call to a function called memset
<RX14> so define a top level function called memset using fun
<RX14> and the linker will find it
<RX14> i think
gcds has quit [Quit: Page closed]
<RX14> i mean literally remove the lib and place fun memset on the top level
<RX14> and it'll work i think
<splitty_> Makes sense. How would I define memset though?
<splitty_> Currently
<splitty_> I'm doing it like this: def memset(dst : Pointer(_), c : UInt8, n : USize) : Pointer
<splitty_> In a fun, the Pointer(_) doesn't work
<splitty_> I could change it to Void*, but how would I set values then?
<splitty_> Afaik I can't set anything because my Pointer(T) requires the []= value to be T
<splitty_> And there's no T such that T is typeof(Void)
<RX14> def = define mangled function
<RX14> fun = define unmangled function
<RX14> the lniker is failing to find "memset"
<RX14> so you just need to define fun memset
<splitty_> Without any content? Just fun memset?
<splitty_> o_O
<RX14> no
<RX14> and make it call your memset
<RX14> or
<RX14> define your memset inside that fun
<splitty_> Yeah that's my issue.
<splitty_> I don't know how I would make memset work inside a fun
<splitty_> Because of what I described above
soveran has quit [Ping timeout: 256 seconds]
<splitty_> Let's say I write it like this: fun memset(dst : Void*, c : UInt8, n : USize) : Void*
<splitty_> Then I couldn't actually set any values
<RX14> cast it to a UInt8* i should think
<RX14> or
<RX14> well
<RX14> define it as a UInt8*
<RX14> i think it'll link regardless
<splitty_> Yay it compiles
<splitty_> Now I just need to find out why it panics
<RX14> its progress
<splitty_> Yep
<RX14> define your panic function with __FILE__ arg
<RX14> and print it
<RX14> so you can see where it was called from
<splitty_> hahaha
<splitty_> RX14, it's called from lib/panic.cr
<RX14> oh
<splitty_> Oh nevermind
<RX14> oh?
<splitty_> I guess I'll have to pass __FILE__, I just printed it in panic.cr...
<RX14> oh i didn't explain the __FILE__ syntax correctly
<RX14> def foo(file = __FILE__)
<RX14> end
<RX14> where file will become the __FILE__ of the caller
<RX14> you can pass it down callchains too
<splitty_> Nice!
<splitty_> Are there also macros for line number, etc?
pawnbox has joined #crystal-lang
<RX14> uhh i think so
<RX14> __LINE__ might work
<RX14> yup
<RX14> they're used here
<RX14> for reference
<RX14> __END_LINE__ is for blocks
<FromGitter> <raydf> @bcardiff , how can i use crystal-db for dynamically generated queries?, in crystal-pg you were able to pass an array of params instead of an splat.
<splitty_> Nice, __LINE__ works. Now I just need to implement to_s for Int :D
vivus-ignis has quit [Quit: vivus-ignis]
vivus-ignis has joined #crystal-lang
vivus-ignis has quit [Client Quit]
vivus-ignis has joined #crystal-lang
<splitty_> How do I specify the prelude?
<splitty_> --prelude=path/to/prelude/prelude.cr doesn't work
<RX14> uhh
<RX14> interesting
olek_poz has joined #crystal-lang
<RX14> i think it has to be on the require path
<RX14> ok
<RX14> if you can require the value for prelude
<RX14> it works
<RX14> you'll need to specify an absolute or relative path
<RX14> so
<RX14> ./
dtzu has quit [Ping timeout: 258 seconds]
<splitty_> Well I do --prelude=./kernel/src/lib/prelude.cr
<RX14> interesting
<Papierkorb> RX14: --prelude only searches the compilers search path, nothing else
<splitty_> huh
<RX14> well
akwiatkowski has quit [Ping timeout: 264 seconds]
<RX14> it says just Require.new(prelude)
<RX14> where prelude is the prelude given on the commandline
<Papierkorb> Never worked for me :D
<splitty_> Yeah doesn't seem to be working
<Papierkorb> splitty_: Use the empty prelude and require your "real" prelude in your main.cr or however you call it
<RX14> yeah that seems to be the only option
<splitty_> That's how I'm doing it at the moment
<splitty_> Was just wondering whether there's a better way :P
<Papierkorb> And will still work for some time to come too
<RX14> its weird it doesn't work
soveran has joined #crystal-lang
<Papierkorb> RX14: Is the search path not initialized when it resolves the prelude path?
<RX14> maybe so
<RX14> well actually
<RX14> it seems to just add the node
<RX14> same as any require
<RX14> no idea
<RX14> actually
soveran has quit [Ping timeout: 256 seconds]
<crystal-gh> [crystal] asterite closed pull request #3702: Implement String#split with block (master...gh-string-split-block) https://github.com/crystal-lang/crystal/pull/3702
pawnbox has quit [Remote host closed the connection]
vivus-ignis has quit [Quit: vivus-ignis]
vivus-ignis has joined #crystal-lang
<splitty_> Is there something like a stringify macro?
<splitty_> Something that turns an identifier into a string
<Papierkorb> macro stringify(content) {{ content.stringify }} end
<splitty_> Thank you
<BlaXpirit> splitty_, well actually it's just "asdfg".id.stringify
<BlaXpirit> so just .stringify
<splitty_> And that works in a kernel, too? Or does it need a proper runtime
<BlaXpirit> splitty_, um macros are entirely compile time, how would that need a runtime
<BlaXpirit> they do need a runtime but at compile time :p crazy stuff
<splitty_> Yes the macro is compile time. I just wasn't sure whether stringify needs a runtime :P
<BlaXpirit> anything inside {{ }} can't be runtime
<RX14> no because it is itself a macro
<splitty_> Ah, that's nice :(
<splitty_> :)*
<RX14> the string value of the constant will be inserted at compile time
<RX14> you cannot call it on a variable
<splitty_> The kernel is getting more usable
<splitty_> I now have a macro-based test framework
<Papierkorb> You can simply use `spec` ...
<RX14> really?
<splitty_> That works?
<RX14> i doubt it
<Papierkorb> Oh you run that in the kernel?
<RX14> yep
<Papierkorb> I didn't do it, much more time waste on waiting for qemu (and building everything before) than having a thin wrapper to run the kernel code directly
<splitty_> Well it's important to know that everything still works after tinkering with the kernel
<Papierkorb> I did write tests, I just ran them in userland on linux
<splitty_> Oh, okay
vivus-ignis has quit [Quit: vivus-ignis]
vivus-ignis has joined #crystal-lang
soveran has joined #crystal-lang
<travis-ci> crystal-lang/crystal#b8f0151 (master - Let String#split_by_empty_separator yield results): The build passed. https://travis-ci.org/crystal-lang/crystal/builds/186139888
soveran has quit [Ping timeout: 256 seconds]
<Yxhuvud> splitty: hmm, do you know of 'crystal tool format'?
<Yxhuvud> or do you just dislike the results? :)
<splitty_> Yxhuvud, I didn't know of crystal tool format
<splitty_> For Rust I have rustfmt installed which automatically formats my files
<splitty_> The Crystal integration with VS code doesn't support that yet
<RX14> if only everyone used the formatter...
<BlaXpirit> if it didn't make my code look worse, sure
dtzu has joined #crystal-lang
<RX14> it doesn't...
<RX14> it's much much better to be consistent than to stick to your own sense of style
dtzu has quit [Read error: Connection reset by peer]
DTZUZU2 has quit [Ping timeout: 252 seconds]
matp_ has quit [Remote host closed the connection]
matp has joined #crystal-lang
<crystal-gh> [crystal] petehuang opened pull request #3752: Improve docs to require equal length size (master...patch-1) https://github.com/crystal-lang/crystal/pull/3752
<FromGitter> <andreaTP> @RX14 you are right but it isn't mentioned anywhere
<FromGitter> <andreaTP> So newcomers.like me aren't aware
<RX14> about what sorry? whats the context here?
<FromGitter> <andreaTP> The formatter
<FromGitter> <andreaTP> I mean
<RX14> oh
<RX14> yeah
<RX14> thats a good point
<RX14> you think it should be mentioned in the docs?
<RX14> i wouldn't know where to mention it though
<RX14> maybe a section on the compiler commandline?
<RX14> you should make an issue for that
<FromGitter> <andreaTP> I should probably a section mentioning formatter shards and the rest of the command line utils
<FromGitter> <andreaTP> That I'm not aware already ;-)
<FromGitter> <fridgerator> I just learned about formatter a couple of days ago
<FromGitter> <fridgerator> maybe in the 'Coding Style' in the docs?
<FromGitter> <fridgerator> would be a good place to put it?
<BlaXpirit> fridgerator, sounds good
<BlaXpirit> but yeah it's a tough choice. maybe not worth being put on top of that page, while at the bottom nobody's gonna find it
<BlaXpirit> oh well, i vote for top of page anyway
<FromGitter> <fridgerator> or in its own section within 'Conventions'? not sure
<BlaXpirit> nah
DTZUZU2 has joined #crystal-lang
dtzu has joined #crystal-lang
ponga has quit [Quit: Connection closed for inactivity]
<FromGitter> <raydf> Hi again
<FromGitter> <raydf> what kind of error is this? ⏎ ⏎ ```Bug: trying to downcast DB::ResultSet+ <- PG::ResultSet``` [https://gitter.im/crystal-lang/crystal?at=585c326ec5a4e0233bbb8597]
<Yxhuvud> I think it is a compiler bug.
<FromGitter> <raydf> ok, thanks, let's see if i can reduce it
bjz has joined #crystal-lang
mooe has joined #crystal-lang
soveran has joined #crystal-lang
soveran has quit [Ping timeout: 256 seconds]
<splitty_> How would I stringify the content of a variable?
<splitty_> If I pass 123 to a macro and use {{ value.stringify }} I'm getting "123", but if I pass a variable foo with a value of 123 to it, it prints x. Is there a way to resolve the variable before stringifying it?
<FromGitter> <luislavena> @andreaTP perhaps an addition to the coding style guide similar to the documenting code section: https://crystal-lang.org/docs/conventions/coding_style.html
<FromGitter> <luislavena> @splitty_ macros are resolved a compile time, not runtime. if you want to convert a value to a string, you might need to invoke `.to_s` method on that object/instance.
<splitty_> Okay, thanks luislavena. I don't have to_s implemented yet, gonna have to do it differently then
<FromGitter> <luislavena> @splitty_ sometimes is best to show a piece of code and explain what are you trying to obtain as result for us to provide alternatives. I just based my response in your specific question, but perhaps are alternative ways to achieve the results.
<splitty_> luislavena, I'm writing an operating system in Crystal. If that would've been possible, that would've saved me some time, but I guess I'll just have to implement to_s for Int then.
<RX14> splitty_, you might want to require https://github.com/crystal-lang/crystal/blob/master/src/class.cr
<RX14> then you can use thing.class.name
<RX14> it really doesn't seem to have any deps
<splitty_> Oh that's pretty cool, thanks RX14
<splitty_> RX14, I'm gonna copy it though. It could change in the future and that would unexpectedly break my kernel
<RX14> yeah well so could the syntax
<RX14> so
<splitty_> hmm right
<RX14> i guess copying it would make it sort of consistent
<RX14> actually writing your own stdlib
<RX14> so
<RX14> like editing the require path to include your code as the stdlib
<RX14> providing your own prelude.cr etc
<splitty_> Yeah
<RX14> actually maybe thats too much effort
<RX14> and it probably doesn't give you too much gain
<RX14> i'd just require it for now
<splitty_> I also remove the inspect method, I'm not gonna need that for anything
<splitty_> removed*
<splitty_> I'm very happy with that prelude :D Not too bad for the second day
<RX14> so
<RX14> are you aiming for a specific architecture?
<RX14> like microkernel or what
<RX14> or is it too early
<splitty_> Currently I'm only writing i686 code to simplify things. But the way the kernel is structured allows for implementing other architectures effortlessly.
<splitty_> Oh I thought CPU architecture
<splitty_> Actually I'm not sure yet
<RX14> so what need to be done for 64bit support?
<splitty_> I'd just have to get a basic 64-bit GDT going and enter long mode
<splitty_> That's pretty easy to do
<RX14> ok
<RX14> well i hope that once you're over this initial hump of sort of bootstrapping your stdlib to match up with the compiler's expectation of the old stdlib you can be productive in crystal
<splitty_> yeah that would be cool ^^
<splitty_> yeah that would be cool ^^
<splitty_> oops
vivus-ignis has quit [Ping timeout: 260 seconds]
mgarciaisaia has quit [Quit: Leaving.]
<FromGitter> <petehuang> regular contributors: how do you all keep track of the various enhancements, bug fixes, RFCs in progress? issues section is kind of a catch-all right now, but hard to see the current status of everything
<RX14> I just watch the issues section
<RX14> and I guess remember it all
<RX14> basically the answer is we don't plan
<RX14> so there's no need
<RX14> well I don't plan at least :/
<RX14> if you want a more positive view, we'll be planning a new roadmap for 2017 soon
<RX14> so then there's be some concrete goals
<splitty_> Hmm...
<FromGitter> <petehuang> i'm not necessarily concerned about planning, more about organizing: what enhancements are out there, which have recommended solutions (and just need implementation now), what bugs are unaddressed, etc.
<splitty_> RX14, if I memset the 8 bytes of a UInt64 to 0_u8, the value should be 0_u64, right?
<RX14> well thats basically the role of github issue tags @petehuang
<RX14> splitty_, yes
<splitty_> Something is really wrong here :D
<RX14> code?
<splitty_> I'm calling this with a size of 8
<splitty_> Then casting the result of a Pointer(UInt64)
<splitty_> And then I'm checking assert_eq ptr.value, 0_u64
<splitty_> Oh my god
<splitty_> RX14, nevermind
<splitty_> Yeah I'm stupid.
<splitty_> My assert_eq macro was f*cked up
<FromGitter> <petehuang> @RX14 i hear you, but with 270+ issues isn't it hard for people (esp. new) to see what's going on?
<RX14> yup
<FromGitter> <petehuang> @RX14 maybe its because i'm new and it's not actually a problem
<RX14> i mean half the issues aren't even tagged https://github.com/crystal-lang/crystal/issues
<RX14> no it's a problem
<RX14> and its not been solved
<FromGitter> <petehuang> and i also don't mean to just poke holes and not offer solutions, by the way. just don't want to overstep either
<RX14> well it's not as bad as I make it out to be really
<RX14> issues are pretty much like anarchy
<RX14> "what do I want to fix today"
<RX14> i think creating a tagging scheme and enforcing proper taggin of issues would be quite beneficial
<RX14> for example having a bot to enforce issues get tagged on time
<RX14> crystal's community is still pretty small
<RX14> so it's just starting to be a problem
<FromGitter> <petehuang> understood...let me keep reading all the issues and get a deeper sense
<FromGitter> <petehuang> thanks for the input
<splitty_> RX14, I'm having a bit of a problem with inline assembly
<splitty_> fun outb(port : UInt16, val : UInt8)
<splitty_> asm("outb %1, %0" :: "dN"(port), "a"(val))
<splitty_> end
<splitty_> error: couldn't allocate input reg for constraint 'd'
<RX14> oops
bjz has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
<RX14> I don't see the "d" constraint in the LLVM ir docs
<splitty_> Oh yeah, thanks
<splitty_> I was still thinking in terms of C inline assembly
<splitty_> With m it works
<RX14> nice
p0p0pr37 has joined #crystal-lang
bjz has joined #crystal-lang
<splitty_> RX14, I can't wrap my head around the LLVM inline assembly :D
<splitty_> asm("outb $0, $1" :: "m"(port), "r"(val))
<splitty_> m is a memory address
<splitty_> r is a register
<RX14> well i know nothing about inline assembly
<RX14> so I can't help
<RX14> all I know is where to direct you
<splitty_> Oh I think I'll have to explicitly request the %al register
<splitty_> Figured it out
DTZUZU has joined #crystal-lang
DTZUZU2 has quit [Ping timeout: 265 seconds]
<RX14> nice
<RX14> I really should make issues for all the ideas I have for crystal
soveran has joined #crystal-lang
bjz has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
mooe has quit [Quit: Connection closed for inactivity]
soveran has quit [Ping timeout: 250 seconds]
bjz has joined #crystal-lang
<FromGitter> <petehuang> @RX14 you should!
<RX14> i forgot it already...
bjz has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
bjz has joined #crystal-lang
DTZUZU has quit [Quit: WeeChat 1.5]
<splitty_> RX14, if you have WhatsApp or Telegram, just send a memo to yourself whenever you have an idea
<splitty_> Works pretty well
<RX14> i have a trello
<RX14> which is what I would use
<splitty_> Yeah, that'd work too
<splitty_> I personally find it to be kinda discouraging, having to write everything down
<splitty_> So I just take my mobile, send a voice message to myself and explain to myself what I was gonna do
<splitty_> Now that I think about it, that seems kinda weird
<splitty_> But it works! :P
<RX14> i find it harder to articulate out loud clearly outside a conversation
<splitty_> Likewise. But if you start doing it then it'll quickly feel normal
<splitty_> Anyway
<splitty_> Good night :D
splitty_ is now known as [sleep]splitty_
vikaton has joined #crystal-lang
bjz has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
olek_poz has quit [Ping timeout: 264 seconds]
bjz has joined #crystal-lang
<Papierkorb> No one else uses sticky notes?