ChanServ changed the topic of #crystal-lang to: The Crystal programming language | http://crystal-lang.org | Crystal 0.30.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> <c-cube> yeah but then you still need to know about `.get` ;)
<FromGitter> <c-cube> I think I'd need a kind of task pool to ⏎ ⏎ 1) limit the amount of concurrency ⏎ 2) provide a `.join` method to wait for all the tasks to be done [https://gitter.im/crystal-lang/crystal?at=5d8178bbbda39316949e6b7d]
<FromGitter> <c-cube> ah, https://github.com/UlisseMini/pool
<FromGitter> <asterite> future was an experiment. My advice is to not use it, it might go away in the future (no pun intended)
<FromGitter> <asterite> same with the other ones, can't remember their names
<FromGitter> <c-cube> when I read examples of concurrent code, there seems to lack a way of waiting for tasks to be done, which is what future provides?
<FromGitter> <c-cube> the alternative of writing custom channel logic every time seems error prone
<FromGitter> <wontruefree> @fridgerator yeah I am excited. More info to come just waiting on a bio and abstract to post.
<FromGitter> <wontruefree> But we should be locking in a sponsor
<FromGitter> <c-cube> btw @asterite I may appear as complaining a lot, sorry; I'm super impressed by the ideas and implem behind crystal and I badly want to use it :)
return0e has quit [Read error: Connection reset by peer]
return0e has joined #crystal-lang
rohitpaulk has joined #crystal-lang
<FromGitter> <c-cube> (I could also talk about IO needing to be split into reader/writer halves… :p)
* FromGitter * tenebrousedge narrows eyes
<FromGitter> <c-cube> 😂
<FromGitter> <c-cube> well, sometimes you only offer or require half of the API (like, printers only need a `IO::Writer` basically, and `each_line` a `IO::Reader`)
return0e has quit [Read error: Connection reset by peer]
return0e has joined #crystal-lang
<FromGitter> <c-cube> it's a very common distinctions (eg in Go and rust)
rohitpaulk has quit [Ping timeout: 276 seconds]
return0e has quit [Read error: Connection reset by peer]
return0e has joined #crystal-lang
return0e has quit [Read error: Connection reset by peer]
f1reflyylmao has joined #crystal-lang
return0e has joined #crystal-lang
f1refly has quit [Ping timeout: 264 seconds]
chemist69 has quit [Ping timeout: 245 seconds]
chemist69 has joined #crystal-lang
gangstacat has quit [Quit: Ĝis!]
_whitelogger has joined #crystal-lang
gangstacat has joined #crystal-lang
ht_ has joined #crystal-lang
ht_ has quit [Quit: ht_]
absolutejam has joined #crystal-lang
absolutejam has quit [Ping timeout: 246 seconds]
absolutejam has joined #crystal-lang
rohitpaulk has joined #crystal-lang
rohitpaulk has quit [Remote host closed the connection]
chemist69 has quit [Ping timeout: 245 seconds]
chemist69 has joined #crystal-lang
chemist69 has quit [Ping timeout: 276 seconds]
<FromGitter> <andrius> is there kind of `includes?` operation for JSON::Any? I want to check is hash a part of JSON package: https://play.crystal-lang.org/#/r/7l6p
chemist69 has joined #crystal-lang
mjblack has quit [Ping timeout: 244 seconds]
lkw has quit [Read error: Connection reset by peer]
mjblack has joined #crystal-lang
<FromGitter> <watzon> @andrius you can check if a key exists by using `#has_key?`
<FromGitter> <watzon> You should also be able to use `#dig`
<FromGitter> <watzon> You may need to create some kind of recursive method to check for a complete match though
<FromGitter> <naqvis> @straight-shoota I am able to build shardbox-web image. Tested this on Gnu-Debian-9-stretch(4 vCPUs, 16 GB memory) . ⏎ ⏎ ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5d81e9e404053c5b3d793941]
return0e has quit [Read error: Connection reset by peer]
return0e has joined #crystal-lang
return0e has quit [Read error: Connection reset by peer]
return0e has joined #crystal-lang
return0e has quit [Remote host closed the connection]
return0e has joined #crystal-lang
absolutejam has quit [Ping timeout: 268 seconds]
absolutejam has joined #crystal-lang
<FromGitter> <naqvis> @andrius https://play.crystal-lang.org/#/r/7l8p
<FromGitter> <andrius> I still have to learn crystal :) Thank you a lot, I were started building recursive calls
<FromGitter> <naqvis> np
<FromGitter> <andrius> this piece of code will do exactly what I want in my scope
<FromGitter> <naqvis> aah
absolutejam has quit [Ping timeout: 246 seconds]
_whitelogger has joined #crystal-lang
<FromGitter> <stronny> @wontruefree interesting, I could give a talk, but it's gonna be after midnight in Europe, not sure yet.
absolutejam has joined #crystal-lang
<FromGitter> <sonic182_twitter> Hi I'm trying to build from source and I'm getting this error -> ⏎ ⏎ ```code paste, see link``` ⏎ ⏎ I have followed the steps here https://crystal-lang.org/reference/installation/from_source_repository.html and required libraries ( BOEHM GC too) ... [https://gitter.im/crystal-lang/crystal?at=5d820888a7a5cc473310a6c3]
<FromGitter> <sonic182_twitter> Ubuntu 18, Oh I think I got it, I missed this installation `apt install libgc-dev`
<FromGitter> <sonic182_twitter> It still fails mmm...
<FromGitter> <sonic182_twitter> Forget it, I installed the missing libs and I think it's ok now ⏎ ⏎ ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5d820d11ab4244767bbecb6d]
<FromGitter> <straight-shoota> @naqvis Thanks for checking. It builds locally for me as well, but not in the docker image.
<FromGitter> <naqvis> you mean dnd?
<FromGitter> <naqvis> I tested that by building image using provided Dockerfile
absolutejam has quit [Ping timeout: 276 seconds]
absolutejam has joined #crystal-lang
<FromGitter> <naqvis> @andrius https://play.crystal-lang.org/#/r/7lb5
<FromGitter> <sonic182_twitter> Google group is dead in favor of forum isn't it?
<FromGitter> <wsdjeg> hi, spacevim author here, I want to add crystal support in spacevim (https://spacevim.org), does this language support windows os?
<FromGitter> <Blacksmoke16> not currently, is a WIP
<FromGitter> <wsdjeg> so, which PR or issue to subscribe?
<FromGitter> <tenebrousedge> @wsdjeg thank you for spacevim, by the way
<FromGitter> <naqvis> @wsdjeg thank you for excellent work on spacevim, big fan 👏
<FromGitter> <Blacksmoke16> the first one being the main one
<FromGitter> <wsdjeg> @naqvis @tenebrousedge welcome, do you use that project?
<FromGitter> <naqvis> yeah
<FromGitter> <wsdjeg> ok, @Blacksmoke16 thanks, I will look into it.
<FromGitter> <tenebrousedge> often, but not exclusively
<FromGitter> <wsdjeg> ok, :)
HumanGeek has quit [Remote host closed the connection]
<FromGitter> <wsdjeg> crystal supported in spacevim will be done in https://github.com/SpaceVim/SpaceVim/pull/3067
HumanGeek has joined #crystal-lang
<FromGitter> <Daniel-Worrall> There's WSL support for Crystal, which is how I use Scry in VSC on Windows. You could try that route.
<FromGitter> <andrius> @naqvis thank you. My implementation is different: https://play.crystal-lang.org/#/r/7lam
<FromGitter> <naqvis> neat
tdc has joined #crystal-lang
HumanGeek has quit [Remote host closed the connection]
ht_ has joined #crystal-lang
ht_ has quit [Quit: ht_]
ht_ has joined #crystal-lang
absolutejam has quit [Ping timeout: 265 seconds]
<FromGitter> <phortx> Hi :) I'm a big fan of crystal and the upcoming webframeworks. I started programming crystal several times but always stopped it due to bad IDE support. I'm using JetBrains IDEs and currently there is no working crystal-plugin :( Are there any plans to bring crystal support to jetbrains IDEs?
<FromGitter> <tenebrousedge> I think you'd have to ask JetBrains
<FromGitter> <Daniel-Worrall> There's a LSP plugin for JetBrains iirc
<FromGitter> <Daniel-Worrall> and a very bad crystal plugin
<FromGitter> <Blacksmoke16> sublime text with the crystal plugin is pretty good
<FromGitter> <phortx> I don't want to change my IDE/editor :/ ... tried the crystal plugin vor jetbrains, but it's crappy.
<FromGitter> <Blacksmoke16> well guess you're out of luck then :/
<FromGitter> <phortx> hm too bad
<FromGitter> <Blacksmoke16> did you try just using rubymine?
<FromGitter> <Blacksmoke16> might get away with doing some customization of `*.cr` files based on Ruby syntax
<FromGitter> <phortx> I only have rubymine, but that doesn't work very well
<FromGitter> <phortx> I hoped there are plans to bring support to jetbrains :)
<FromGitter> <Daniel-Worrall> Last time I used Rubymine (a year ago?), it doesn't support some of the plugins that make crystal support better
<FromGitter> <Blacksmoke16> that would be up to jetbrains
<FromGitter> <Daniel-Worrall> There's no plans here, but JetBrains may attempt it once 1.0 is out
<FromGitter> <Blacksmoke16> or you could always make some PRs to the crystal plugin 😉
<FromGitter> <phortx> @Daniel-Worrall are there any plans when crystal 1.0 will come?
<FromGitter> <Daniel-Worrall> /shrug
<FromGitter> <phortx> @Blacksmoke16 I considered that, but lacking of time currently. Maybe in the future
<FromGitter> <Daniel-Worrall> Once the roadmap is done?
<FromGitter> <phortx> ok :D
<FromGitter> <Daniel-Worrall> I think Windows is a prereq for 1.0
<FromGitter> <Daniel-Worrall> omg, 0.31 brings anon block args
<FromGitter> <Daniel-Worrall> I've been doing something that needed that a week ago, I wish I knew
absolutejam has joined #crystal-lang
absolutejam has quit [Ping timeout: 245 seconds]
<FromGitter> <asterite> @phortx to be honest I don't think there's a way to have an IDE with features such as autocompletion in Crystal, mainly because you are not forced to type everything. In a way this is similar to Ruby, I don't know if you have autocompletion in Ruby IDEs...
<FromGitter> <c-cube> if the IDE (or LSP server) can do type inference, then it can do completion!
<FromGitter> <asterite> @Daniel-Worrall anon block args is just a syntax thing, you can already do it by writing `&block` but not using `block` in the method body
<FromGitter> <c-cube> (completion in languages with type inference works)
<FromGitter> <Daniel-Worrall> Oh, I misread then
<FromGitter> <asterite> @c-cube type inference for a large project (for example the compiler) takes like 4~5 seconds, I can't see how will that work
<FromGitter> <c-cube> well you need a compiler which accept partially wrong ASTs, and that works incrementally
<FromGitter> <asterite> also, a crystal file doesn't know its dependencies. If you want to autocomplete a method body and that method is not called in that file, the compiler has no idea what types will come into the method. You'll probably have to tell your IDE what's your "main" file
<FromGitter> <Daniel-Worrall> I thought it meant arguments of the block `T -> K`
<FromGitter> <c-cube> yeah, it wouldn't be perfect, but if you do `foo.ea<tab>` it can look into what methods `foo` might have
<FromGitter> <asterite> and how would it know what type `foo` is?
<FromGitter> <stronny> that depends on what `foo` is
<FromGitter> <Daniel-Worrall> main files could be infered from `shard.yml`
<FromGitter> <asterite> def bar(foo); foo.| <- what to autocomplete here?
<Stephie> @asterite it's definitely possible, just difficult
<FromGitter> <c-cube> the methods of object :)
<Stephie> even ruby IDEs have autocomplete
<FromGitter> <c-cube> it's a best effort task
<Stephie> yeah
<Stephie> it might not be 100% accurate
<FromGitter> <c-cube> and if you have inferred from other methods the type of a variable, you can provide better completion
<FromGitter> <asterite> I see
<FromGitter> <stronny> idk, last time I was using an IDE was turbo pascal times
<FromGitter> <asterite> Yeah, it's probably possible then but super hard
<Stephie> yeah
<FromGitter> <stronny> since then mcedit is all I need
<Stephie> i don't know if anyone will ever do it but
<Stephie> you can probably get fairly close with heuristics
<FromGitter> <c-cube> @asterite if you ever write typescript, give a try to writing it in vscode, it's pretty amazing
<FromGitter> <c-cube> (with union types and this kind of stuff)
<Stephie> it doesn't have the same level of type inference
<FromGitter> <tenebrousedge> seconded, typescript + vscode is wild
<Stephie> union types aren't the problem
<FromGitter> <asterite> can you omit types in typescript?
<Stephie> not sure
<Stephie> it might infer them as `any`
<Stephie> since, TS can fall back to that
<FromGitter> <tenebrousedge> usually you avoid `any`, but yes, typescript has inference
<FromGitter> <c-cube> I tend to annotate, but it does infer within a method's body, which is already hard; and it does the completion properly when you reason by case on unions (same as Kotlin actually, which has a very good IDE)
<FromGitter> <asterite> I mean, can you do `function(s) { ...}` without saying what the type of `s` is?
<FromGitter> <c-cube> it'll be inferred as any, I think
<Stephie> @asterite having a good IDE experience with methods which *do* have type restrictions would be a good - and doable - first step for a language server
<FromGitter> <asterite> ah, there's a playground. If you type something as `any` (or omit the type) I don't get any autocompletion for that object properties.
<FromGitter> <stronny> https://tabnine.com/blog/deep/
<FromGitter> <c-cube> even if you know `s : String` and you call `s.scan(p)`, you get some restrictions over `p`, like `p : String | Regex` more or less
<FromGitter> <asterite> Also in typescript to use something from another module you need to explicitly import it
<FromGitter> <kinxer> Yeah, I think the way to go is to provide completion for types that are annotated.
<FromGitter> <asterite> writing an IDE for typescript is so much easier
<Stephie> i don't think thats a big problem in practice ary
<Stephie> the global namespace
<FromGitter> <c-cube> https://github.com/Microsoft/TypeScript/issues/15114 seems like they don't want global inference tho
<FromGitter> <bew> *thinking* if we had interfaces that works without having to include them in the target type, we could type all args and be good with it, no?
<Stephie> you could do it without that, honestly
<Stephie> but, thats not the point
<Stephie> I'd rather not view this as "100% accurate completion with mandated type restrictions" vs "nothing"
<Stephie> you should get progressive compile time, and completion benefits as you add more types
<Stephie> the building blocks for that are not in crystal yet
<Stephie> but they must be laid before 1.0
<Stephie> so that it can be realised afterwards
<Stephie> (basically, cast args to type restrictions meaning you can't call methods the type restriction does not over)
<Stephie> cover*
<Stephie> I know brian wants to do that too
<Stephie> just, needs to be prioritized
<Stephie> (i think it's more important than MT or windows...)
<Stephie> (and has immediate benefits, like being able to typecheck uncalled methods)
<FromGitter> <c-cube> +1 that it's important, it's a significant factor in productivity
rohitpaulk has joined #crystal-lang
rohitpaulk has quit [Ping timeout: 268 seconds]
dannyAAM has quit [Quit: znc.saru.moe : ZNC 1.6.2 - http://znc.in]
dannyAAM has joined #crystal-lang
alex`` has joined #crystal-lang
ht_ has quit [Remote host closed the connection]
<FromGitter> <bestwebua> Hello! Something like Ruby instance_variable_set exists in Crystal?
ht_ has joined #crystal-lang
<FromGitter> <Blacksmoke16> whats the use case vs like `obj.my_ivar = 123`?
absolutejam has joined #crystal-lang
<FromGitter> <Blacksmoke16> either way, unless you make something yourself, the answer is no @bestwebua
<FromGitter> <bestwebua> @Blacksmoke16 , the use case is minimize code in class initializer using each with instance_variable_set
<FromGitter> <Blacksmoke16> got an example?
<FromGitter> <Blacksmoke16> might be interested in https://crystal-lang.org/api/master/Object.html#setter(*names)-macro ?
<FromGitter> <bestwebua> @Blacksmoke16 , example below: ⏎ ⏎ ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5d8285cbc77f285fb19f7ee1]
<Stephie> @bestwebua but that's more code than just writing out @attr_1 = "default_value_1"...
<Stephie> but, to answer your question
<Stephie> no there is no instance_variable_set
<Stephie> and it's not possible to add it
<FromGitter> <bestwebua> Thanks, Stephie
<Stephie> np :)
<FromGitter> <Blacksmoke16> it is possible via macro loop and a case statement
<FromGitter> <Blacksmoke16> but yea in crystal would be best to do like
<FromGitter> <Blacksmoke16> ```class Foo ⏎ property attr_1 : String = "default value 1" ⏎ end``` [https://gitter.im/crystal-lang/crystal?at=5d82873fab4244767bc2ab4a]
<FromGitter> <Blacksmoke16> or something along those lines
<FromGitter> <Blacksmoke16> which would define a getter/setter for it
<FromGitter> <Blacksmoke16> could even use a macro to define a bunch of those
<FromGitter> <bestwebua> Thank you, @Blacksmoke16 I will try it.
<FromGitter> <Blacksmoke16> i can give in example in a few
<FromGitter> <Blacksmoke16> https://play.crystal-lang.org/#/r/7ld4
<FromGitter> <bestwebua> wow, thx!!! look great
<FromGitter> <Blacksmoke16> not sure what the benefit of it would be tho
<FromGitter> <Blacksmoke16> but is an option :p
<Stephie> yay i'm back up to date on github issues again...
<FromGitter> <c-cube> are you RX14? :)
ht_ has quit [Remote host closed the connection]
HumanGeek has joined #crystal-lang
HumanGeek has quit [Remote host closed the connection]
HumanGeek has joined #crystal-lang
<Stephie> yeah :)
<FromGitter> <bew> huh Stephie.same?(RX14) is true?
<Stephie> yeah...
<FromGitter> <bew> okay, well hi :}
<FromGitter> <c-cube> thanks for the PR reviews
<Stephie> who are you on github again @c-cube?
<FromGitter> <watzon> Wait, RX14 -> Stephie?
<FromGitter> <c-cube> well, I'
<FromGitter> <watzon> What happened to the other username?
<FromGitter> <bew> c-cube on github too
<Stephie> as far as I know I haven't deleted the letters yet
<FromGitter> <bew> @c-cube edits in gitter aren't propagated to irc
<Stephie> well, oops,
<FromGitter> <c-cube> ah yeah, damn. I'm c-cube
<Stephie> guess I just didn't notice the new face :)
<Stephie> hey
<FromGitter> <c-cube> o/
<FromGitter> <c-cube> I was using IRC as companion_cube but most people are on gitter so it's a bit more convenient :/
<Stephie> ahhh, i remember that name a bit
<FromGitter> <c-cube> I'm wonder what background people here are from; are there only rubyists?
<Stephie> hahaha
<Stephie> plenty of non-rubyists
<Stephie> I used ruby a bit before crystal
<Stephie> but not, a lot
<Stephie> I came to crystal with far more typed languages experience than ruby
<FromGitter> <tenebrousedge> I would call myself a Rubyist, I guess
<FromGitter> <c-cube> ah, good to know, what languages @Stephie?
<Stephie> gosh, it's hard to remember
<Stephie> mostly C# and java?
<Stephie> some groovy
<Stephie> groovy is neat tbh
<Stephie> then like, smatterings of experience in random typed and untyped languages
<FromGitter> <c-cube> I guess crystal feels more dynamic than what I'm used to, but it still colors mistakes in red, which is what matters to me ;)
<FromGitter> <c-cube> very excited to finally see something as expressive as python, but safer and faster
<FromGitter> <tenebrousedge> I want Crystal to replace Go >__> but python would be neat too
<Stephie> yeah, crystal is actually more type robust than most static languages
<Stephie> almost all static languages
<FromGitter> <c-cube> seems like it should be at least as fast as Go, eventually
<Stephie> yet, it feels dynamic
<FromGitter> <c-cube> well I'm used to OCaml and a bit of rust, so, not really; but it's pretty damn well typed still
<Stephie> yeah, it's as type safe as those, to me
<Stephie> i guess, less so if you care about side effects
<Stephie> i guess i think about type safety in terms of what's a runtime vs what's a compile-time error
<Stephie> and rust and crystal are fairly well matched there
<FromGitter> <c-cube> that's a good approximation, I think.
<FromGitter> <c-cube> no nullPtrException is a sign of modernity!
<Stephie> yeah, definitely that
<FromGitter> <c-cube> (the place where rust might be safer, is multi-threading, though)
<Stephie> npes are disgusting
<Stephie> yeah, fair enough
<FromGitter> <tenebrousedge> billion dollar mistake, wasn't it called?
<FromGitter> <c-cube> seems a bit worrying that `spawn` is going to be allowed to go on a different thread by default
<FromGitter> <c-cube> @tenebrousedge yep…
<FromGitter> <c-cube> and yet Go used it
<Stephie> why?
<FromGitter> <tenebrousedge> why what?
<Stephie> @c-cube conceptually fibers have always executed at the same time as each other
<Stephie> if you rely on what is a fiber switch point and what is not you're really doing it wrong
<Stephie> and when you introduce a debug call and stderr blocks, you're gonna regret it
<Stephie> even on a single thread
<Stephie> so yes, everything should be SMP by default
<FromGitter> <c-cube> doesn't it mean that a lot of things will have to be protected behind a mutex? or maybe just avoid sharing, and use channels, I guess…
alex`` has quit [Ping timeout: 265 seconds]
absolutejam has quit [Ping timeout: 268 seconds]
<FromGitter> <nsuchy> How do I generate a HMAC SHA-256 of a String?
<Stephie> @c-cube yeah, thats the general idea
<Stephie> channels and mutexes and try and be immutable
<FromGitter> <nsuchy> looks like crystal has openssl library
<FromGitter> <nsuchy> after googling how to do in ruby
HumanGeek has quit [Ping timeout: 268 seconds]
HumanG33k has joined #crystal-lang
<FromGitter> <c-cube> well I guess it's also possible to use `atomic` to write shared concurrency primitives if one needs to
<Stephie> @c-cube i'm sure we'll have a bunch of shared concurrency primitives for the stdlib soon enough
<FromGitter> <watzon> @c-cube if you look at the benchmarks Crystal is already faster than go in most places
<FromGitter> <watzon> @nsuchy use `OpenSSL::Cipher`
<FromGitter> <watzon> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5d82bd778521b34d914e08f4]
<FromGitter> <watzon> That should do it I believe
<FromGitter> <c-cube> this begs for a block method 😁
<FromGitter> <Daniel-Worrall> He wants hmac which takes a secret.
<FromGitter> <Daniel-Worrall> `OpenSSL::HMAC.hexdigest (:sha256, secret, content)`
<FromGitter> <Daniel-Worrall> @nsuchy
<FromGitter> <Daniel-Worrall> And you only need `require "openssl/hmac"`
<FromGitter> <nsuchy> sorry stepped away from keyboard
<FromGitter> <nsuchy> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5d82c37828c1df0ed655f09e]
<FromGitter> <nsuchy> I get an index out of bounds error
<FromGitter> <nsuchy> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5d82c3892438b53a64d775bc]
<FromGitter> <Blacksmoke16> whats the point of hmacing it before bcrypt?
<FromGitter> <nsuchy> @Blacksmoke16 I'm integrating with a legacy system
<FromGitter> <nsuchy> BlestaCP HMACs the password
<FromGitter> <nsuchy> then bcrypts the HMAC
<FromGitter> <Blacksmoke16> fair enough
<FromGitter> <nsuchy> "bcrypt HMAC SHA-256 ⏎ Blesta uses bcrypt to store passwords for authentication. The bcrypt algorithm is a slow-computing algorithm that is designed to take a small, but significant amount of time to generate a result. This makes it computationally inefficient to brute-force.The amount of work involved in computing the bcrypt result is controlled by the Blesta.hash_work configuration setting. ⏎ ⏎ Before a
<FromGitter> ... password is hashed using bcrypt, however, it is hashed using HMAC SHA-256. The HMAC SHA-256 process produces a 256-bit (64-hexadecimal character) string, which is then hashed using bcrypt. This extra step provides additional security for short passwords, extremely long passwords (see denial of service), and dictionary attacks." [https://gitter.im/crystal-lang/crystal?at=5d82c3ef5ab936169418008f]
<FromGitter> <nsuchy> I'm just reproducing it
<FromGitter> <nsuchy> Integrating login between production and blesta, we pull the password hash directly from MySQL through our VLAN
<FromGitter> <nsuchy> But of course I need to be able to work with the hash content
<FromGitter> <nsuchy> as shown above
<FromGitter> <nsuchy> the code gives me an error
<FromGitter> <nsuchy> :(
<FromGitter> <Blacksmoke16> :/