<FromGitter>
<Blacksmoke16> guess it just doesnt work for variables
rocx has quit [Remote host closed the connection]
rocx has joined #crystal-lang
Vexatos has quit [Quit: ZNC Quit]
<FromGitter>
<asterite> Matthew Berry I think I tried your emulator, I downloaded link's awakening. But I found it really hard to find the keys to use it. I had to go to the source code. It would be nice if a more natural choice was used, or if it's documented on the command line. Also, the arguments to the program were not intuitive to me, and there's no --help. But other than that, it worked flawlessly!
Vexatos has joined #crystal-lang
f1reflyylmao has joined #crystal-lang
f1refly has quit [Ping timeout: 240 seconds]
<FromGitter>
<Blacksmoke16> naming question, a type that stores structs related to a given annotation type
<FromGitter>
<Blacksmoke16> `ConfigurationAnnotations` or `AnnotationConfigurations`
<FromGitter>
<Blacksmoke16> stores structs related to each annotation on a given property/method/type, i.e. `custom_configurations[MyAnn].id == 1 && custom_configurations[OtherAnn].name == "Jim"`
<FromGitter>
<Blacksmoke16> im leaning towards the latter as i think it reads a bit better as im storing the configurations related to an annotation
rocx has quit [Ping timeout: 260 seconds]
<FromGitter>
<mattrberry> @asterite Thank you for the feedback! Updating the readme with keybinding information is definitely on my ever-growing list of todo's, but I'll bump it up a bit :) If you still care, you can just pass the path to the rom as the only argument and it should work fine! As for keybindings, up/down/left/right is e/d/s/f and b/a/select/start is j/k/l/; ⏎ It's *very* tuned to my own preferences and it only really
<FromGitter>
... makes sense on qwerty 😬 If you don't like those binding, though, the a/b keys on your keyboard work as expected, as do the arrow keys! ⏎ Maybe someday I'll get around to allowing custom keybindings :)
<FromGitter>
<mattrberry> Thank you for all of your work on the language btw (:
alexherbo2 has joined #crystal-lang
alexherbo2 has quit [Ping timeout: 264 seconds]
alexherbo2 has joined #crystal-lang
<FromGitter>
<neutrinog> @Blacksmoke16 ⏎ ⏎ > `ConfigurationAnnotations` or `AnnotationConfigurations` ⏎ ⏎ Definitely `AnnotationConfigurations`. The former sounds like you are adding annotations to your structs. [https://gitter.im/crystal-lang/crystal?at=5f114d8100ae3b3d99f641c5]
sorcus has quit [Ping timeout: 272 seconds]
sorcus has joined #crystal-lang
<raz>
Blacksmoke16: your podcast was confusing. from the Rather::Elaborate::Athena::Class::Hierarchies i would've sworn your brain was shaped by a terrible java childhood. TIL it was actually eve online and php :D
<raz>
(j/k, athena is great, just from the style i had always thought of you as a java guy ;))
sagax has quit [Read error: Connection reset by peer]
rocx has joined #crystal-lang
<FromGitter>
<Blacksmoke16> :p, blame crystal for not having imports for that ha
<FromGitter>
<Blacksmoke16> not really a way around the long names w/o alises or some import system, i know private includes were thought of in the past as a workaround, id love ES6 styel
<FromGitter>
<Blacksmoke16> @neutrinog, cool thats what i went with
<FromGitter>
<Blacksmoke16> only time i used java was during a course in college, i.e. pretty basic stuff ha
lanodan has quit [Ping timeout: 260 seconds]
<raz>
yea nah it's fine. rails is also like that to a degree, nothing wrong with it. was just that and the whole CI thing that reminded me a lot of java ;) - but i guess these are ultimately more inspirations from symfony
<raz>
DI
<FromGitter>
<Blacksmoke16> indeed, deff brings something new into the ecosystem
<raz>
yup, it's good to have it both. the minimal frameworks (sinatra/flask style), the magic ones (lucky), and the more enterprisey ones (amber, athena)
<raz>
whereas athena is actually somewhat in the middle between first and last style, depending on where it goes (full stack with tight ORM-integration etc. or more the "set of building blocks" route)
<FromGitter>
<Blacksmoke16> ofc idea's been that you could use the components in other frameworks as well
<FromGitter>
<Blacksmoke16> like the serializer, or validator (when its done) etc
<FromGitter>
<Blacksmoke16> current thing im working on related to that naming is pretty cool, also would be useable by other projects/frameworks
<raz>
yup that might be cool. not sure how realistic it is, but we'll see. everyone just has too much NIH. like in ruby-land in theory everything could/should be a stack of rack middlewares. but in reality there's only a few that are useful and everyone rather bakes their rails/sinatra/roda/etc-specific plugins
<raz>
yea, if usage without the rest of athena is a supported use-case then a quick example for that would also be great
<FromGitter>
<j8r> I'm afraid all si macro-fu won't really fit bigger projects
<raz>
(that also tends to help athena adoption itself, as people like me often want only "one piece" at first - but then might start to like it)
<FromGitter>
<j8r> amber projects are slow to compile, not sure athena will be faster
<raz>
hm yea, my web dev-builds are currently at ~10s.
<raz>
that's about the limit i can tolerate
<raz>
not yet sure what to do when it gets even slower
<FromGitter>
<Blacksmoke16> raz: yea this part can be used on its own, would require your project to define the logic to build the hash tho, i.e. iterate over the types/defs/ivars that would have the annotations and then instantiate the wrapping type
<raz>
Blacksmoke16: yup the use-case for me would basically be: "i want to make my own annotation and have to execute stuff at declaration time and/or runtime and/or possibly triggered by conditions/events". i can either look into how to do that in raw crystal myself orrrr... well, or maybe there's some kind of generic framework that hides most of those nasty macros from me :D
<raz>
i think in my app jennifer takes the lions share of compile time anyway (but haven't tested it)
<FromGitter>
<Blacksmoke16> large unions slow things down more than how i use macros i think
<FromGitter>
<Blacksmoke16> my macro usage is essentially just iterate over stuff and create structs
<raz>
crystal just needs to grow some kind of incremental compilation at some point. but i know it's a hard problem
<FromGitter>
<Blacksmoke16> we shall see
duane has joined #crystal-lang
melthelesbian has quit []
melthelesbian has joined #crystal-lang
lanodan has joined #crystal-lang
duane has quit [Ping timeout: 256 seconds]
duane has joined #crystal-lang
duane has quit [Ping timeout: 246 seconds]
duane has joined #crystal-lang
duane has quit [Ping timeout: 256 seconds]
duane has joined #crystal-lang
duane has quit [Remote host closed the connection]
duane has joined #crystal-lang
sagax has joined #crystal-lang
rocx has quit [Remote host closed the connection]
rocx has joined #crystal-lang
alexherbo2 has quit [Ping timeout: 265 seconds]
Human_G33k has quit [Quit: Leaving]
alexherbo2 has joined #crystal-lang
alexherbo2 has quit [Ping timeout: 240 seconds]
postmodern has quit [Quit: Leaving]
<FromGitter>
<j8r> This can sound strange: I would like to change all reference to `SomeModule` (and `SomeModule.` ofc) to `SomeModule_1` - I don't think it is easily doable?
<FromGitter>
<Blacksmoke16> find replace?
<FromGitter>
<j8r> Ideally, I'd like to modify the AST generated by the Crystal compiler to do this
<FromGitter>
<j8r> sure, I can use string manipulation but then I'm basically doing a worse subset of the Crystal compiler, kind of
<FromGitter>
<j8r> That's also a way to create a formatter
<FromGitter>
<j8r> `Crystal::Lexer`could help me...
<FromGitter>
<j8r> that's what Ameba use (quite logically)
<FromGitter>
<Blacksmoke16> whats the use case?
alexherbo2 has joined #crystal-lang
<FromGitter>
<j8r> An idea: instead of trying complex dependencies solving, why not just using an other module name each time a library needs another one in a different X version?
<FromGitter>
<Blacksmoke16> got an example?
<FromGitter>
<j8r> that of course implies that a shard is properly namespaced in a common module
<FromGitter>
<j8r> my app requires for example a shard S at version 0.2.0, but a shard T depend on this later at the version 0.1.0
<FromGitter>
<j8r> also, the main use case is to use the latest library without being stuck to older one
<raz>
like 8 different ways to do it, everyone doing it differently, webpack agreeing with nothing
<raz>
half of my js stuff is imported, the other is required. and i'm sure i have at least 3 variants of each.
<FromGitter>
<Blacksmoke16> or id even be ok with how PHP does it, like `use MyApp::Namespace::Foo::Bar` then use `Bar` without FQN, or `use MyApp::Namespace::Other::Bar as OtherBar;`
<FromGitter>
<Blacksmoke16> would make working with namespaces easier imo
<raz>
nah i disagree with that one. i once thought it was a good idea, python also has that
<raz>
but... i can't remember ever running into a namespace conflict
<raz>
but i do vividly remember plenty times of wondering to which "export" some javascript pkg was assigned and how the heck to access it
<FromGitter>
<Blacksmoke16> part of it is helping with that, but other is making it so you dont need to use the FQN of the type everywhere, you import it once then can use it without the namespace
<FromGitter>
<Blacksmoke16> to be clear im just talking about the syntax of the `import` command, not really the full system of `export` and all that stuff...
<raz>
yea, well, i'm not a fan of the "pollute my namespace with your pkg locals" either.
<raz>
i can see why you'd like that (Athena::Cough::Cough) :D
<FromGitter>
<Blacksmoke16> only way to avoid not using `MyApp::Namespace::Path::SomeType.new` is via an alias, which isnt really ideal either
<FromGitter>
<Blacksmoke16> i mean yea, is a downside of namespacing atm, even tho its a good practice
<raz>
yea, i'm not a fan of sometimes long-winded way to refer to things
<raz>
but haven't really seen better alternatives yet, only worse
<raz>
if you allow people to alias their stuff, they do it. and get confused. and everyone is sad.
<FromGitter>
<Blacksmoke16> mhm, esp how its tied in to the doc generation
<FromGitter>
<Blacksmoke16> part of why i namespace things so much, so docs are easier to read/navigate
<raz>
yes, it makes a lot of sense. i'm inclined to think it boils down to an editor problem. editors should be smart in collapsing/autocompleting such things
<FromGitter>
<Blacksmoke16> private alises are kinda a workaround to the `use ...` setup
<raz>
the next generation will probably be. well, if there is one (considering AI can already write python code by itself)
<FromGitter>
<Blacksmoke16> :shrug:
<raz>
yup aliases can kinda work. but the places where you need them, they kinda feel bad.
<raz>
like, in your class-files, you are in your namespace anyway, so rarely a problem there
<raz>
and the users of your classes tend to need to refer to something long only once or in few places. making an alias for that is also not really helping (at least in most cases that come to my mind - might be missing some)
<FromGitter>
<Blacksmoke16> yea without tooling to say auto maintain a list of private aliases at the top of the file its prob not worth the effort
<raz>
yup. the only place where Deep::And::Long::Names have bothered me so far was with Enums (or consts)
<raz>
crystal is fairly smart about allowing symbols for enums in most places (but not all)
<raz>
but yea... there's only so much it can do without becoming ambiguous
<FromGitter>
<Blacksmoke16> thats another one of my wants ha, removed symbols and have them be solely for that
<raz>
yup, we talked about that in here a while ago
<raz>
i'm on your side! :D
<raz>
but i think the consensus was "it's hard". so not before 1.0...
<FromGitter>
<j8r> IMO ES6 imports are better than Python's
<FromGitter>
<Blacksmoke16> PHP style might be better for crystal lang, save needing to add like `default` keywords and stuff
<raz>
yea in principle they are (python is a trainwreck anyway, still not sure how it ever got so popular)
<raz>
problem with ES6 is that you're never dealing with pure ES6. it's always an entangled pile of ES4-ES7, typescript, babel, webpack, npm/yarn and what not
<FromGitter>
<j8r> where for me `from x import y` and `import x.y as y` is the same
<FromGitter>
<j8r> raz: maybe, depends. I will launch a game, an will require the user to have an up-to-date browser (moderately). But for a big website, you're right
<raz>
j8r: well yes, if you're lucky enough to have a pure env then it can be good. typescript is actually a really nice language.
<FromGitter>
<j8r> One pros of Ruby/Crystal is to easily grep through code
<raz>
oh yes, greppability is a good point!
<FromGitter>
<j8r> because import something as other, the result may be to have different same for the same thing in different part of the code - and even libs
<raz>
yep, exactly
<raz>
plus everyone comes up with their own names for stuff
<raz>
so you see "ssl.frobnicate()" all over the code. and never know "is it just what he calls openssl? or his own ssl thing?"
<raz>
(contrived example)
<raz>
even better when the same names are re-used for different things in different files
<FromGitter>
<j8r> right
<raz>
an explicit Foo::Bar.new somewhere on the screen goes a long way
<FromGitter>
<Blacksmoke16> gets fun if two libs define a `Foo::Bar` tho
<FromGitter>
<Blacksmoke16> unlikely but possible
<raz>
yea, that's the big sasquatch everyone scares the younglings with
<raz>
but in reality it just never happens
<FromGitter>
<Blacksmoke16> i saw two shards using same top level namespace
<raz>
sometimes you have to put an ::IO somewhere instead of IO, because clash... but...
<FromGitter>
<Blacksmoke16> cant recall what they were tho
<raz>
well, use only one of them. or if you really need them, file bug
<FromGitter>
<Blacksmoke16> indeed
rocx has joined #crystal-lang
<FromGitter>
<j8r> IMO a library should be automatically namespaced
<FromGitter>
<j8r> like, a shard called `foo` should always be `Foo::WhatEver`.
<raz>
it.does.java.like.domain.by?
<raz>
oh
<FromGitter>
<j8r> or `Foo.some_class_method`
<raz>
yea but there could still be multiple Foo's
<FromGitter>
<Blacksmoke16> it is when you use `crystal init`
<FromGitter>
<j8r> yep but no
<FromGitter>
<j8r> because you can't have 2 libs with the same name in shards.yml
<FromGitter>
<j8r> or just call it `foo2` then ;)
<raz>
hmm ah got it
<raz>
yea that could work. would just need an exception for monkeypatching
<FromGitter>
<j8r> For now, if there is a name class - we can't do anything. With auto name spacing, no problem
<FromGitter>
<j8r> for monkey patching, the library can use `::` in front, like `class ::HTTP::Server; end`
<raz>
hmm yup yup. might be nice. but remains a red herring to me. cause i never had a problem with that to begin with :D
<FromGitter>
<j8r> that's common to have not properly namespaces shards
<FromGitter>
<j8r> like one defining just `class Server`, instead of `class Foo::Server`
<raz>
well, that seems like it would be noticed quickly, and no one would use such a shard
<raz>
(or file a bug if it's an otherwise useful one)
<FromGitter>
<j8r> lol, counter-example: Kemal haha
<FromGitter>
<Blacksmoke16> doesnt kemal do that,
<FromGitter>
<Blacksmoke16> yea
<raz>
kemal doesn't count
<raz>
kemal is our friend
<raz>
soon he'll be gone, so we should be nice to him
<FromGitter>
<j8r> top level `get` prevent any `def get` to be called :/
<FromGitter>
<j8r> It was a first iteration, I look it like that - and that's nice!
<raz>
yes. and yes he smells a little. but about half of the crystal community started with crystal because kemal
<FromGitter>
<j8r> and amber may I add
<raz>
yea not sure where amber will go. crystal is kinda in the rails2 days, where there was still a battle with ramaze and other forgotten names
<raz>
the winner hasn't... crystalized yet ;)
<FromGitter>
<j8r> haha
<FromGitter>
<manveru> raz: yo :)
<FromGitter>
<Blacksmoke16> kemal has the downside of being older than most frameworks
<FromGitter>
<Blacksmoke16> i.e. so some features prob didnt even exist when it was created, and at this point prob is unlikely to be refactored
<raz>
haha!
<raz>
manveru: no offense intended at all! sorry, lol
<raz>
(i actually have no idea what the status of ramaze is nowadays, it was just one of the names that came to mind)
<FromGitter>
<manveru> no worries, i enjoy crystal these days :)
<FromGitter>
<manveru> and i don't do web stuff if i can avoid it...
<raz>
yay, we have all the good people on board
<FromGitter>
<j8r> is raz a short-cut of ramaze? :3
<raz>
Blacksmoke16: yes, same for amber. they deserve respect for breaking the ground. but obv the younger frameworks have it easier
<raz>
j8r: nah, it doesn't really stand for anything (just a random nick-choice made ages ago)
<FromGitter>
<j8r> my take on this is, a framework leveraging the power of Crystal is the way to go.
<FromGitter>
<j8r> which is not really/harder to do in other languages
<FromGitter>
<j8r> Like fibers, but likely macros and type system.
<FromGitter>
<j8r> Otherwise, using Crystal may not provide a huge benefit over others
<raz>
yup. i mean, they all do, in their own way. but the thinner/more modular the better. that's why i'm a fan of gripen. very lean DSL, feels like i'm writing code in crystal rather than in a framework
<raz>
it's basically kemal done right for me (sorry kemal :( )
<FromGitter>
<j8r> thanks raz :)
<FromGitter>
<Blacksmoke16> :0 :pitchfork: :P
<FromGitter>
<j8r> yeah, that's the idea. I mean, amber and kemal are nice, but vs Rails and sinatra? If the dev does not care much about perf, not sure what the big selling point
<raz>
hehe, well, i also like athena. in terms of ruby analogies i'd put gripen next to sinatra, athena closer to rails
<FromGitter>
<j8r> I'm quite impressed of athena, that's a good example of using Crystal's powerful meta-programming
<bougyman>
I wonder what a roda port to crystal would take?
<bougyman>
It's my preferred api / web builder in ruby.
<raz>
+1 roda is <3
<bougyman>
is there a 'rack' for crystal?
<raz>
well, yes, HTTP::Server has middlewares
<bougyman>
well roda uses Rack:: all over.
<raz>
not sure to what degree they are used in the crystal frameworks
<raz>
bougyman: my feeling is if you like roda you'll also like gripen (worth a peek). it doesn't have the fanvy nested routing, but feels lean in a similar way
<bougyman>
yeah, gripen is looking a lot like roda
<raz>
also not sure how well a full blown roda would map to crystal (with static typing etc.). gripen might actually be the best middleground.
<FromGitter>
<mixflame> is there any information on how to make crystal server into a daemon, and act as a system service with the usual start/restart/stop commands
<oprypin>
mixflame, it's just systemd
<FromGitter>
<mixflame> ah yeah I think I read that
<FromGitter>
<mixflame> do I provide anything in my app to help? or the admin just uses systemd to run it
<oprypin>
usually nothing needed to change in your app