How many CDN's do you need for avatars?



  • Remember how I posted a question a while back about how to do something on Mono and the answer was "you can't" and it was a thing that Go supports natively?



  • No I do not.

    I admit that Mono was only really reliable up to .net 2.0 levels until recently, but guess what? A hell of a lot of companies have made a hell of a lot of quality products in .net 2.0.

    It is a PITA if you're using MonoGame, since .net 3.5 has a lot of features that would be super handy for a game engine, especially if you have a threaded physics engine.


  • Discourse touched me in a no-no place

    @blakeyrat said:

    But which is decided not to use for Discourse because...?

    IIRC, literally he just wanted to do something different. He talked about it on his blog once.

    He may even have said he wanted to go outside his comfort zone. Well, he succeeded.

    ETA: Blah blah :hanzo: and people were more accurate than how I remembered it etc.



  • Wasn't his reason for choosing ruby "it's no longer cool to use ruby"? What he failed to factor in is that there was never any other reason for using ruby apart from the "this is new let's try it out" factor.



  • @blakeyrat said:

    A hell of a lot of companies have made a hell of a lot of quality products in .net 2.0.

    A hell of a lot of companies have made a hell of a lot of quality products in FORTRAN77. That doesn't mean FORTRAN77 is good at concurrency.


  • Java Dev

    I'm pretty sure C# on linux still is mono. But it used to be shitty for a long time; as I understand nowadays it's actually good. Or at least more accepted.


  • FoxDev

    @PleegWat said:

    I'm pretty sure C# on linux still is mono.

    It's not the only player in town anymore:
    https://www.dotnetfoundation.org/netcore


  • Fake News

    @blakeyrat said:

    But which is decided not to use for Discourse because...?

    He made an aptly-named blog post Why Ruby?.

    TMJ;DR version (and I hold no claim to endorse these points, although I might have interpreted them a bit to filter out the longer blathering):

    Why no Microsoft-stack?

    1. Sticking to all-opensource licenses should save on lawyers and accounting departments as long as there's no mix of complicated ones.
    2. Supposedly it was too much hassle downloading Visual Studio, SQL Server, IIS, ... Open-source is free as in beer and hence anyone in the world can download everything to start developing Discourse without having to register a Microsoft account, find out which versions to download, etc.
    3. Jeff intended Discourse to be open-source for its entire stack, yet decent open-source .NET libraries were less often available because supposedly people in the .NET "ecosystem" don't feel like sharing their half-decent source code together with the ugly hacked-together parts. True open-source culture has no fear to share both good and shitty parts because they know that most of open-source is shitty. Jeff's conclusion: there's more choice in the non-.NET open-source libraries, so let's look out there and just pick the least-shittiest one (ED: HA!).

    Why Ruby specifically:

    Steve Yegge said so

    Why Ruby isn't a dealbreaker:

    • Yes, Ruby is slow, but if it was decent in 2006 then sure the improvements in hardware should make it blazingly fast
      in the future, right? (ED: Right?)
    • Ruby 1.0 was shitty, but we just tested with Ruby 2.0 and it's 20% faster! Imagine how much future improvements could be made!
    • Ruby is no longer for hipsters and yet people still use it. That has to mean something!

    Bonus point: the Ruby community is amazing!

    @blakeyrat said:

    I wonder if there's like one exact point in time at which he became shitty. Like after he determined the StackOverflow architecture, but before he started working on the gamification features...
    I believe gamification was allreadly present in the earliest versions of SO so it must have happened before that. I like to think that in the beginning he might have still listened to some of Joel Spolsky's advice...


  • FoxDev

    @JBert said:

    Supposedly it was too much hassle downloading Visual Studio, SQL Server, IIS, ...

    Just download and install VS2015 Community Edition; it'll install SQL Server Express and IIS Express, which are both good enough for development.


  • Fake News

    In case it wasn't clear enough: I was paraphrasing Jeff's article.

    Now you made me wonder: the article dates back from 2013 with Discourse's development starting in 2012. Are you sure VS Community edition was a one-stop solution back in 2012?



  • @blakeyrat said:

    Right; because Mono didn't exist back when they started Discourse. OH WAIT IT DID.

    But how up to par is Mono when compared to regular .NET? Back in 2012, could you run ASP.NET MVC 4 on Mono?

    Honest question, I don't know how well Mono had developed back then.

    And according to his "10-year-plan" he should anticipated the native C# compiler port to Lunix. Because it happened way before 10 years was up.
    Back in 2012, Ballmer was still CEO of Microsoft. His views on Linux were pretty clear: not gonna happen. It's not until when Nadella took over that MS started to focus more on the alternative platforms, which now results in things such as Powershell-SSH, DNX, Visual Studio Code on Mac, etc.

    Not even Jeff could have predicted that culture shift.



  • @JBert said:

    He made an aptly-named blog post Why Ruby?

    Yeah I don't really care. I was just calling him an idiot.



  • @AlexMedia said:

    But how up to par is Mono when compared to regular .NET? Back in 2012, could you run ASP.NET MVC 4 on Mono?

    The point isn't that Mono is good or bad, the point is that people say shit like that original post as if it didn't exist at all!!! That's the thing that pisses me off.

    Maybe Mono is excrement. Maybe it's a 4' pile of elephant dung. It's still a lie to say C# isn't cross-platform, and has been for a decade or more. And these people are on a tech forum! So it's almost more embarrassing if they literally don't even know Mono exists! (And when you talk to them, virtually always they say "oh yeah, I know about Mono.")

    It's like there's some "C# isn't cross-platform" brain-worm that's dug into all of these people's skulls and it forces them to say that all the time regardless of the facts.

    @AlexMedia said:

    Back in 2012, Ballmer was still CEO of Microsoft. His views on Linux were pretty clear: not gonna happen.

    That's somewhere between gibberish and bullshit.

    @AlexMedia said:

    It's not until when Nadella took over that MS started to focus more on the alternative platforms, which now results in things such as Powershell-SSH, DNX, Visual Studio Code on Mac, etc.

    There's no way those products were developed so quickly that they hadn't been started when Ballmer was still CEO, which of course doesn't matter because Ballmer didn't give a shit at that level. But whatever.

    .net and the CLR is and has always been an open standard, from like 2002. Nothing's stopped the open source community from making Mono 400 times BETTER than Microsoft's version except they're incompetent and can't find their ass with both hands. So if Mono sucked, that's their own damned fault. It's certainly not Ballmer's fault.



  • Why not Go or C++ or even Python, then? They all fit the first three points and are significantly faster than Ruby (although knowing TCotCDCK, that wouldn't be an issue).


  • FoxDev

    @JBert said:

    Now you made me wonder: the article dates back from 2013 with Discourse's development starting in 2012. Are you sure VS Community edition was a one-stop solution back in 2012?

    Fairly sure, yeah

    @AlexMedia said:

    But how up to par is Mono when compared to regular .NET? Back in 2012, could you run ASP.NET MVC 4 on Mono?

    Maybe not then, but I'm pretty sure you can now. And then there's ASP.NET 5, which can run on Microsoft .NET Core 5, which will have a native Linux version (and Windows and OSX of course).


  • Discourse touched me in a no-no place

    @blakeyrat said:

    I was just calling him an idiot.

    That's a cheap shot.

    Want some more ammo?


  • Discourse touched me in a no-no place

    @blakeyrat said:

    That all sums to, "use C#".

    C# is actually like Java1, in that it allows objects to cross between threads. That in turn means that the language implementation needs to worry about the complexity of the memory management where an object starts its life in one thread and ends it in another in a complicated pattern. It doesn't happen very often in good code, of course, but it could and that means bearing the cost. The GC in the CLR is good, so it's handled as well as possible, but it is possible to get quite a bit faster by being stricter and forbidding objects from migrating (since that doesn't hurt most code at all).

    Of course, it's not just that the code is Ruby. There's several layers of stupidity, each of which is dedicated to using more memory and more CPU and more I/O and more resources in general. Dropping just one stupid boatanchor decision wouldn't unfuck :disco:🐎. They've got years of not caring about things that they should care about to be undone, and very little commitment to actually doing so.

    1 Can't be bothered to hunt down more references. Arguing that there are better high-level APIs on top in C# won't change my argument; the piper is still being paid.



  • @PleegWat said:

    These days, I think they could've used C#VB.NET...



  • @dkf said:

    Of course, it's not just that the code is Ruby. There's several layers of stupidity, each of which is dedicated to using more memory and more CPU and more I/O and more resources in general. Dropping just one stupid boatanchor decision wouldn't unfuck :disco:🐎. They've got years of not caring about things that they should care about to be undone, and very little commitment to actually doing so.

    This. Very much this.

    Ruby is only a language, and the runtime can (or, at least, could, back in the 1.8.x series) be modified to run pretty damn fast if you're willing to lose total (read "footgun") flexibility in a couple of features. I know, because I've done it. It was fairly hard to do, but the payoff was significant.

    Ruby can also be compiled. Effectively, this involves source-level transformations to create code in C (or some other compiled language), which can then be run through a standard compiler. I know this because I've done this as well. It's not overly hard to do. The trivial way to do this pretty much requires throwing away eval, which most sane code shouldn't be using anyway.

    None of this will make brain-dead code less brain-dead. The way to solve the problem of brain-dead code is not to employ brain-dead programmers, and not to follow brain-dead designs.


  • Discourse touched me in a no-no place

    @tufty said:

    Ruby is only a language, and the runtime can (or, at least, could, back in the 1.8.x series) be modified to run pretty damn fast if you're willing to lose total (read "footgun") flexibility in a couple of features.

    My problem with Ruby is partially with the library, but much more with the way that many community-standard library packages work with it. Too many of them have tricky trade-offs that are hidden away and which really bite once you start to look at overall system resource utilisation. For example, a big object cache can work well in a single long-lived process provided the working set size isn't too large, but it is horribly expensive when mixed with maintaining a large fleet of relatively-short-lived session-management processes.

    The length of the stack traces coming out of RoR processes is indicative of a major layering problem. The trace is long by comparison with a JEE stack, for goodness' sake!



  • @dkf said:

    The length of the stack traces coming out of RoR processes is indicative of a major layering problem.

    I don't think it's so much symptomatic of a layering issue as of a different paradigm.

    Typically with Ruby, what you'll find is that you're seeing a lot of function calls across the same layer; it's a relatively flat object tree with many small functions, as opposed to the C++/Java model of deep object trees and fewer, but far more complex, functions.

    It's a fundamental difference in the way things are done, Ruby and languages like it give preference to lightweight extension of existing classes over the more heavyweight approach of subclass all the things taken by C++ / Java and the ilk.

    There is a performance hit, caused by the number of function calls, and its one of the major things I had to deal with when speeding up the Ruby VM (as of 1.8.x, due to the inherent dynamism of the language, Ruby did not cache functions - instead every function had to be re-interpreted at every call, in case there was an eval in there somewhere. Static analysis of code enables one to determine which bits of code can be safely cached, and the speedup even for for idiomatic code is very handy indeed.)


  • Discourse touched me in a no-no place

    @tufty said:

    the more heavyweight approach of subclass all the things taken by C++ / Java and the ilk.

    You're obviously talking about the stereotype here, not the reality. Don't let me prevent you from being wrong, but it turns out that modern Java practice (at least in JEE stacks) is a lot more similar to what you know from RoR than you might think; the large majority of JEE actually operates using composition and delegation, and there are tools that make doing this sort of thing very easy.

    Which isn't to say that I actually like such levels of complexity. It's very opaque when you're hunting down an unexpected failure in the binding layers, and when you're not in the middle of that, it produces truly dispiriting stack traces from your own code. The real issue is that vast quantity usually-irrelephant BS obscures the actual problems that are reported…



  • TIL java has moved on since I last touched it :)

    Filed under: 500 Server Error
    See also: Body is to similar to what you have already posted


  • Discourse touched me in a no-no place

    @tufty said:

    TIL java has moved on since I last touched it

    Well, “INHERIT ALL THE THINGS!” has been a known antipattern in many languages for quite a long time now.


Log in to reply