I've spent the past couple weeks thinking about what framework I want to use to build static sites. I've primarily used Middleman, or Jekyll when working with collaborators (think of Middleman as Jekyll but with no restrictions -- i.e. You don't have to use Liquid and you can write plain old Ruby objects and include them as with a typical full-stack app).
I used to do Ruby because of Rails work...now I do my work exclusively in Python and Node. I thought it'd be worthwhile to move to a new framework just so I don't have to juggle so many languages on a daily basis. Lektor (Python) is exciting and I'll check it out as a way to build client sites...but it's not quite as flexible as Middleman (to be fair, Lektor is very new)...Pelican looks good as well...but for now, I think Middleman hits the perfect spot for speed of deployment and hackability (it recently extricated itself from sprockets so that you can incorporate webpack.js or whatever asset build system you like), even accounting for Middleman's and Ruby's slow speed of execution versus the hugely popular Hugo (static framework in Go)
The truth of it is, is that once you've picked up Ruby, nothing feels quite as nice as a scripting glue language. I haven't kept up much with updates to the language...all I know is that yesterday, I finally updated my Ruby environment manager (rbenv)...it had been 2 years...and changed my system Ruby to 2.3.1 (from 2.1.5)...I had to update a few version numbers for dependencies, but otherwise, all of my old projects worked with barely a hitch...and it took me no time to get into writing custom plugins for my next Middleman site.
It does seem that the excitement over Rails and Ruby has ebbed, if you look at Github stats and Stackoverflow's latest survey. I am curious to see where the language can go from here, or how it can make a strong niche for itself besides Rails. but of all the "old" languages that I sometimes have to come back to, Ruby has been the most welcoming.
> The truth of it is, is that once you've picked up Ruby, nothing feels quite as nice as a scripting glue language.
I today agree. Ruby is amazing as a light scripting language - heck, I think it's pretty great as an all-around language, but quick glue scripts are where it really shines.
I wouldn't be sad to see it fade in popularity if it weren't for the fact that the language(s) and/or ecosystems eclipsing it are so, well, lame. For a profession that demands so much careful, reasoned thought software engineers as a whole can be incredibly irrational.
> the language(s) and/or ecosystems eclipsing it are so, well, lame. For a profession that demands so much careful, reasoned thought software engineers as a whole can be incredibly irrational.
How do you reconcile an unsupported "lame" without being "irrational"? Do you have technical reasons they're lame?
I don't have time to go into much depth right now, but basically the ascendent languages don't seem to offer many compelling technical advantages. For example, I've yet to hear a compelling reason why JS makes a better serverside language than Ruby for most use cases. To be fair, Node and some of the JS libraries for a long time offered advantages over the Ruby ecosystem for things like websockets (EventMachine used to swallow stack traces in a really annoying way). But that has more to do with the ecosystem than the languages themselves.
I think part of the problem had to do with how dominant Rails was/is in Ruby. I wish a framework that better catered to emerging app design trends had gotten traction in Rubyland in, say, 2012.
As for specific complaints about JS, well, it's a perfectly fine language, but I don't think it's an improvement in any way over Ruby. It has a number of quirks and compromises - prototype inheritance, basically no support for modules, clumsy typing, to name a few - which people have been patching over and working around in lots of different ways over the years. You end up with a forest of different solutions to things that wouldn't have been a problem in other languages. Now some fairly dramatic changes are being introduced, which is probably good, but it means the ecosystem is even more complicated. Working with the JS ecosystem feels like working with a poorly maintained legacy codebase - there are lots of places where people have come up with workarounds to things that shouldn't have been a problem in the first place; it makes you tired just thinking about all the mental energy spent solving all the little unnecessary problems.
How do you do NLP stuff in Ruby? I thought Python was the go-to dynamic interpreted language for that work what with recent efforts by SpaCy and of course NLTK modules and Sci.py and Num.py ? What do you know that I don't. I'd love to be able to do stylometrics/topic-modelling/part-of-speech analysis/word vectors/… in Ruby -- please show me the way :)
> how it can make a strong niche for itself besides Rails.
You anwered your own question ;-) Ruby works great for static (web)sites including books, presentations, etc and for all kind of "text" and "small data" processing. Not sure if Jekyll is already the "new Rails" - for example, I've put together a Jekyll theme site called Dr. Jekyll's [1] listing more than 100+ themes. I've also started a bookshelf (imprint) called Yuki & Moto Press [2] for books on Ruby published with Jekyll (and Octobook). Cheers. [1] http://drjekyllthemes.github.io [2] http://yukimotopress.github.io
elixir looks awesome, but there's no need to overstate its case - tons of languages really cared about beautiful code and a pleasant ecosystem. clojure was perhaps the best in that respect; there was a lot of effort made to have consistent and pretty libraries. f# seems like it's shaping up nicely too, though it still has some rough edges (but then again, so does ruby!). pyret does "beautiful code" even better than ruby does; if it had a good command line implementation and ecosystem it might have been my new favourite scripting and general-purpose language by now. elm puts a lot of love and effort into both the language and the libraries, and in particular has some of the most user-friendly error messages i've ever seen. and that's just the languages i'm familiar with; i'm sure others can chime in with lots more.
This sentiment is being repeated over and over and one can't help but notice it. But I'm really really really reluctant to switch from Ruby for yet another language/ecosystem unless it were to something industrial-strength like Haskell. What is so amazing about Elixir?
For me those really are the killer features for Elixir. I know most people will point to Elixir's support for concurrency and the whole GenServer thing that it gets from Erlang when discussing why Elixir is interesting. And those aspects of the language/ecosystem really are awesome. But being able to nearly eliminate explicit conditionals with guard clauses is just so damn cool I can barely stand it. And the |> operator is something I desperately wish Ruby had. I like Elixir a lot because it seems to put a huge emphasis on making my job as a programmer suck less without sacrificing other things in the process.
Try Phoenix with Elixir. Really similar to Rails with Ruby on the surface, and surface similarities are all you will really worry about for static pages.
Views (called Templates in Phoenix) are compiled as strings and cached by the CPU automatically so you get really nice scaling out of the box, with no effort on your part.
It's similar to Rails in Rails' ideas, but not in its ecosystem. The most powerful thing of Rails is not MVC, or convention over configuration, but the vast, vast ecosystem.
At the beginning of my work day, I open Emacs with Cider installed, and start a JVM inside there using Cider (M-x cider-jack-in), and do all my work in the same JVM all day.
Because we make heavy use of immutability, it's easy to completely tear down all our existing namespaces and the single global variable representing the app, reload all namespaces and their functions, recreate a new app instance, and start it. And I bound all this to Cmd-R in Emacs.
So any time I make a change to our web app during development, I just hit Cmd-R and it reloads the entire app in about 0.2 seconds. I don't even notice it, honestly.
This is better than what we used to do, which was to poll the disk for changes to any files, and reload them when they've changed. That was much harder on the disk, and half the time I'm saving, I'm not ready for its code to be reloaded yet anyway.
For tests, we just use Cider's built-in features, which let us either run the tests whose code changed, or all tests, depending on what we want to test.
That's definitely on my list, at least to learn it for expanding my knowledge of language design. It's hard to imagine moving away from Python and all of its scientific packages.
(I really do hope I never have to build another full-stack web app, either in Rails, Django, or whatever...unless it's to put food on the table)
I can relate. As I find myself doing more front-end work, it seems natural to be using JS on the backend as well, but I simply don't enjoy it as much. Not just the language, but the design and UX of all the popular libraries as well.
yes, really nice. I see there is a Discourse benchmark script, each Rails/Ruby project (like for example GitLab) could benefit from having this benchmark run with each minor version increment.
I think you're looking in the wrong place, `BasicObject` has no `respond_to?` so you'd need to trace the `rand_random` execution to see what ends up calling `respond_to?` on your `BasicObject` instance. Poking through github I'm guessing it's `rb_funcallv_public` but I may be missing something(s).
But that's just it; I would have thought the NoMethodError would have been around the missing "respond_to?" - like it was in 2.2.3 - not around a missing "begin".
I assume you mean at https://github.com/ruby/ruby/blob/v2_3_0/vm_method.c#L1915-L.... Agreed it's weird that rb_respond_to will now return true for objects where respond_to is undefined. Though I guess I can see upsides to doing so, and it would require something pretty weird to result in "wrong" behavior.
The case I ran into was in a Rails 4.1 app where ActiveSupport::Duration (which subclassed BasicObject) was used like this: "rand(10.minutes)". That raised an exception in 2.3.0 but worked fine in 2.2.3. The fix was simple - "rand(10.minutes.to_i)". But still, I don't understand it.
Heh...I also ran into an issue with ActiveSupport::Duration, though in my case when passed as the only argument to a method with a signature along the lines of `f(time = 30, [star][star]options)`, with the error involving #to_hash. Since newer versions of ActiveSupport fix it, I didn't look into it too careful (just called #to_i). I'm glad you did!
I'm surprised that I haven't seen anything about that respond_to? change in the blogs; maybe I've just missed it. I might blog this, although I hate ending a post with "gosh I don't know about this one". Makes me feel like I haven't done all my homework.
As someone that really appreciates overlayed comparative graphs has anyone visualised some common benchmarks yet
*edit: interesting HN site bug, I hit edit to update some autocorrect mistakes and rather than updating my comment it added a fresh one - but not the second time. Interesting.
That is fast, I barely started using 2.3.0 in my projects. Not following closely what is added but have impression that rate of change in ruby land is picked up significantly.
They're on a predictable cycle: minor version release every December 25. (so 2.4.0 final will be released December 25, 2016; which is why they're calling it "early" as the many features may need more testing)
I used to do Ruby because of Rails work...now I do my work exclusively in Python and Node. I thought it'd be worthwhile to move to a new framework just so I don't have to juggle so many languages on a daily basis. Lektor (Python) is exciting and I'll check it out as a way to build client sites...but it's not quite as flexible as Middleman (to be fair, Lektor is very new)...Pelican looks good as well...but for now, I think Middleman hits the perfect spot for speed of deployment and hackability (it recently extricated itself from sprockets so that you can incorporate webpack.js or whatever asset build system you like), even accounting for Middleman's and Ruby's slow speed of execution versus the hugely popular Hugo (static framework in Go)
The truth of it is, is that once you've picked up Ruby, nothing feels quite as nice as a scripting glue language. I haven't kept up much with updates to the language...all I know is that yesterday, I finally updated my Ruby environment manager (rbenv)...it had been 2 years...and changed my system Ruby to 2.3.1 (from 2.1.5)...I had to update a few version numbers for dependencies, but otherwise, all of my old projects worked with barely a hitch...and it took me no time to get into writing custom plugins for my next Middleman site.
It does seem that the excitement over Rails and Ruby has ebbed, if you look at Github stats and Stackoverflow's latest survey. I am curious to see where the language can go from here, or how it can make a strong niche for itself besides Rails. but of all the "old" languages that I sometimes have to come back to, Ruby has been the most welcoming.