Wow. Seems like if your content is too popular and doesn’t make them ad revenue, they want you to gtfo. “This ain’t no charity, this is YouTube! The ads must flow.” Am I wrong?

    On the other hand, this PeerTube thing seems pretty cool.


      When you put it that way it’s a little harder to hold this against YouTube - you’re right: they ain’t a charity. However, typically for YouTube, they seem to have handled it badly.


        What prompts you to come up with an uncharitable explanation when a bug is a reasonable explanation? Do you see statements to that effect, a wave of YouTube removing, say, the billion hours of amateur video that never get viewed, something?


          It would be ok if they forcefully enabled ads on popular channels “to cover bandwidth costs”, but they ban and don’t say what is the reason.

        1. 1

          I never used Haml, but I use Slim (which looks similar) and have lots of frustration with it.

          • I just constantly don’t know what will be end result (html). Either I don’t remember exact syntax features (such as inline tags, variants of verbatim and how it should be indented, where ruby code is evaluated in attributes and where not), or these features interact in ambiguous ways (1, 2, 3) (these are mostly bugs but root cause is syntax requiring handling tons of corner cases)
          • Indentation-based syntax works for Python and Haskell where usually you don’t have 20 levels of nesting and long blocks. In HTML you have insane nesting and long blocks all the time, and constantly need to re-nest blocks.

          Adding Markdown to this feels like nightmare. I don’t know, maybe Haml is better designed than Slim. I have similar experience with yaml, it’s also indentation-based and has lots of syntax sugar. Had the same problems and frustration with it.

          Editing erb templates (with help of editor extensions) feels so relieving after Slim.

          1. 3

            I would never mix Slim and Markdown. It would be simply impossible to differentiate one from another. Haml and Markdown have not that many clashes in syntax.

          1. 0

            Their blog already punishes me for violating correct order of reading text (scrolling up, when I must always only scroll down) by covering text with panel of half screen height. I definitely don’t want AI that classifies people as “good” or “bad” created by this company.

            1. 1

              *dbm was very popular in Perl in the age of CGI scripts and guestbooks. Pstore’s Python counterpart, shelve, is quite popular too.

              When I first learned Ruby, I was surprised with extensive linear algebra features in standard library (Matrix and Vector classes), however it does not support sparsity and not sure about performance and memory consumption, especially compared to Numpy.

              1. 1

                Great! Found there one source file I wanted from old repository that author deleted on Github few years ago. 2-3 years ago I was unable to find it nowhere.

                Update: seems that author restored this repository on github and softwareheritage snapshotted it in February 2018.

                1. 2

                  Once you subscribe to a mailing list, new messages flow into your client and are available for searching. Hooray! But what about messages sent before you joined the list? Furthermore, how do you “link” to old messages from newer ones?

                  This is the same problem that killed xmpp, irc and other older instant messengers, when newer messengers appeared (whatsapp, slack, etc). Older messengers were just forwarding messages, newer treat chat more like document edited by multiple users. Mailing list archives are afterthought, just like xep-0313. NNTP, mentioned in article, has this feature, but has lots of other problems.

                  1. 1

                    So, all browsers now are using deprecated API to implement WebGL? And WebGL is not fringe API for demos, even Google Maps now uses it. Or Safari will have WebMetal?

                    And all this is just to bring stupid AAA interactive movies about masculine men with guns to Mac? They should rename “iMac” to “XMacDarkWarryorMaster” and add red LEDs then.

                    OpenGL is not API for games, not even for “less than AAA” games, not even 3D, it’s universal API for any graphics, everything from image editors to data plots. Making it “deprecated” because it has bad fit for Far Cry 6: Battle Royale? Strange strategy.

                    1. 11

                      Really not happy about this. I mean, I recognize that mac gaming is a tiny sliver market anyway, but this essentially will kill the desktop mac games market, although it’ll mean ports from mobile will get much easier.

                      But really, is that what we want? Thank god for Bootcamp I guess?

                      1. 5

                        OpenGL already seems to be an afterthought for most game developers. It’s basically only a Linux/Mac target in practice, no? For Windows, game devs usually target DirectX, and for PS4 and Xbox, there isn’t even OpenGL support. Games today sometimes even run better on Mac using DirectX under Wine compared to using the native macOS OpenGL, although that admittedly makes them less accessible to the average user.

                        1. 2

                          But Wine’s DirectX uses OpenGL as backend.

                        2. 1

                          I assume the major game engines like unity, unreal, and cry, will just emit a Metal taget, like they do for directx and opengl currently? Also, isn’t Vulkan supposed to take over? It seems like OpenGL is just going to die off.

                          1. 2

                            That’s a big assumption. Said engine makers would need to feel confident enough that there will be ROI for them to spend those man hours and dollars that could more profitably be spent on supporting the next next next gen nvidia card or the Playstation 20 :)

                            1. 5

                              Well, MoltenVK is a thing apparently, so I guess if Vulkan does take over, maybe it won’t be /too/ bad as a macos target?

                              EDIT: also looks like (based on very quick searching) that unity and unreal both support Metal as a target already. Being that ios also uses metal, I assume they likely have a vested interest in supporting it there.

                              1. 2

                                You’re clearly way more knowledgeable in this space than I and yeah MoltenVK looks like a thing. Maybe it’s all for the good, I dunno :)

                              2. 3

                                They already do for iOS - Mac OS is trivial after that. It’s no problem for Unity or Epic. It does hurt the little guy with their own engine, however.

                            2. 1

                              It’s not going to stop working, they’re just marking it as no-longer a priority that may stop working in a future update. I can’t imagine anybody is going to be forced to update to whatever future version of MacOS does not include OGL by default. If it’s that important to the industry, people other than Apple will pick up the implementation work. Most professional tools already support Metal and Vulcan, and it seems pretty clear to me that on all platforms, the trend away from OGL is going to continue. Vendors of various rendering and scenegraph libraries can work with their customers to determine what backends they need to support.

                              1. 2

                                Truthfully I’m kind of out of step with that end of things. I was just thinking in terms of all the open source I’ve seen through the years that wanted OpenGL on OSX.

                                Maybe all of it’s been ported to Vulcan or Metal? I dunno.

                            1. 4

                              Author is concerned mostly about Java tools (client code generation, specification generation from annotations) and lack of “hypermedia” support. Hypermedia is not a big deal, is there any real-world API that uses this approach?

                              Lack of forward compatibility, though, might be a problem with OpenAPI itself. API specifications in it describe only current version of protocol and you can’t define forward compatibility rules, such as “if enum has other value, treat it as this value”. At least “object” keys are non-required by default, just like in json schema, this enables forward compatibility. The problem might be not only with enums, but with anyOf/oneOf, which can be treated as generalization of enums (sum types).

                              For “robustness principle” to work, API specification should enable writer to be conservative (i.e. don’t allow non-listed values in enums) and readers to be liberal (i.e. substitute default values for unknown enum values). This is not supported by OpenAPI.

                              People think the YAML file is the new XSD

                              Note that “new XSD” is json schema and not Swagger/OpenAPI (OpenAPI uses some subsets of json schema in its format). YAML is used only as syntax sugar over json, primary data model of all this is json.

                              Nobody reads the documentation anymore

                              I don’t understand this argument at all. Swagger is a tool for generating API documentation. Client generation is afterthought, it’s documentation tool primarily.

                              1. 3

                                Hypermedia is not a big deal, is there any real-world API that uses this approach?

                                Github’s REST API uses hypermedia extensively, in the various “*_url” properties and RFC 6570 URI template values.

                              1. 1

                                But why everyone blame npm and “micro-libraries” as the main problem in js? Aren’t all other languages (except C/C++) has the same way of dealing with dependencies? Even in conservative Java installing hundreds of packages from Maven is norm.

                                1. 10

                                  Something to consider is that JavaScript has an extreme audience. People who barely consider themselves programmers, because they mostly do design use it, or people just doing tiny modifications. Nearly everyone building a web application in any kind of language, framework, etc. uses it.

                                  I think the reason there is so much bad stuff in JavaScript is not only something rooted in language design. JavaScript isn’t so much worse than other popular bad languages, it just has a larger base having even more horrible programmers and a lot of them also build some form of frameworks.

                                  Don’t get me wrong, JavaScript is not a great language by any stretch, but blaming the ecosystem of a language who certainly has at least a few of the bright minds designing and implementing (working at/with Google, Mozilla and Joyent for example) it should not result in something so much more unstable.

                                  Of course this doesn’t mean that it’s not about the language at all either. It’s just that I have yet to see a language where there isn’t a group writing micro-libraries, doing bad infrastructure, doing mostly worst-practice, finding ways, to work around protections to not shoot yourself in the foot, etc. Yes, even in Python, Rust, Go, Haskell and LISP that exists.

                                  Maybe it’s just that JavaScript has been around for ages, many learned it do so some animated text, they wrote how they did it, there is a ton of bad resources and people that didn’t really learn the language and there is a lot of users/developers that also don’t care enough, after all it’s just front-end. Validation happens on the server and one wants to do the same sending off some form and loading something with a button, updating some semi-global state anyway.

                                  JavaScript is used from people programming services and systems with it (Joyent, et al.) to a hobby web designer. I think that different approaches also lead to very different views on what is right and what isn’t. Looking at how it started and how the standards-committee has to react to it going into backend, application and even systems programming direction probably is a hard task and it’s probably a great example of how things get (even) worse when trying to be the perfect thing for everything, resulting in the worst.

                                  On a related note: I think the issue the community, if you even can call it like that (there are more communities around frameworks rather than the language itself, which is different from many other scripting languages) doesn’t seem to look at their own history too much, resulting in mistakes to be repeated, often “fixing” a thing by destroying another, sometimes even in different framework-layers. For example some things that people learned to be bad in plain JavaScript and HTML get repeated and later learned to be bad using some framework. So one starts over and builds a new framework working around exactly that problem, overlooking other - or intentionally leaving them out, because it wasn’t part of the use case.

                                  1. 2

                                    there are more communities around frameworks rather than the language itself, which is different from many other scripting languages

                                    In general I tend to agree, but at least at some time ago I am pretty sure the Rails community was larger than the Ruby community. The Django community in Python also seems to be quite big vocal, but probably not larger than its language community given that the Python community is overall way more diversified and less focused on one particular use of the language.

                                  2. 9

                                    A lot of Java frameworks predate maven - e.g. Spring was distributed as a single enormous jar up until version 3 or so, partly because they didn’t expect everyone to be using maven. I think there’s still a cultural hangover from that today, with Java libraries ending up much bigger than those in newer languages that have had good package management from early on (e.g. Rust).

                                    1. 5

                                      Even including all transitive libraries, my (quite large) Android app Quasseldroid has 21 real dependencies. That’s for a ~65kLOC project.

                                      In JS land, even my smallest projects have over 300 transitive dependencies.

                                      It’s absolutely not the same.

                                      1. 3

                                        In technical terms, npm does not differ much from how python does package management. Culturally, however, there are a big difference in how package development is approached. Javascript has the famous left-pad package (story). It provided a single function to left-pad a string with spaces or zeroes. Lots of javascript libraries are like it, providing a single use case.

                                        Python packages on the other hand usually handle a series of cases or technical area - HTTP requests, cryptography or, in the case of left-pad, string manipulation in general. Python also has PEP8 and other community standards that mean code is (likely to be) more homogeneous. I am using python here as that is what I know best.

                                        1. 1

                                          Because npn micro-libraries tends to be much worse than most other languages.

                                          1. 1

                                            It’s a problem there too.

                                          1. 24

                                            Digital interfaces are becoming simpler and more streamlined because that’s what users need and want.

                                            No, because nowadays’ big web/mobile companies want that. Compare Instagram to old-school photo sharing services such as Flickr. Instagram don’t want you to share photos, to add tags to them to make them searchable, to be able to see your own photo archive. They want you to open app every 5 minutes like junkie, scroll feed and occasionally post your face. It’s not a service for photographers, it’s slot machine. Minimalist design is political choice. Minimal usually means dumbed-down. Computers are too hard, use phone instead, it’s simpler. Less buttons, less choices. Consume content. Scroll feeds. See ads.

                                            That’s one of the reasons this “brutalist” design becoming popular: as a protest against web that became TV.

                                            1. 4

                                              When I was young, I was all about Prolog. I got a copy of Logic and Prolog by Richard Spencer-Smith and Stony Brook Prolog for the Amiga from Aminet and just went to town.

                                              Now, sadly, there just isn’t much use for Prolog in what I do, and so I don’t use it anymore, and honestly never did professionally. It was, in a very true sense, a childhood summer romance that I occasionally try to recapture.

                                              1. 1

                                                It’s completely unknown in the world of CRUD web apps, but I think it might be still used in niche areas.

                                                SPARQL has similarities to prolog/datalog, but not exactly.

                                              1. 1

                                                TIL there’s python package manager which creates virtualenvs automatically. Never heard about it before. But PyPA instead of PyPI? Or PyPA is a layer on top of PyPI? Python packaging systems change so fast.

                                                1. 6

                                                  PyPA is the Python Packaging Authority, the people who maintain PyPI, tools like pip and setuptools, and make sure they all work nicely together.

                                                1. 5

                                                  Excuse me, have you heard about our lord and savior nix?

                                                  More seriously, the Haskell build environment is clearly a problem. I tried using a stackage nix overlay for a while, it was quite a long setup, and having to rebuild the entire package for each update was too much demanding for my 7-year-old computer. I saw some bazel-based setups but haven’t tried myself…

                                                  Stackage is really great, but I agree the stack tool could be more user friendly. But in the end, I still use stack and have to delete randomly my .stack directory every once in a while.

                                                  Rants are usually fun, but we could also talk what makes the racket build-system great and see how we could transpose that and slowly derive to a similar system.

                                                  [Edit] BTW, cabal != cabal-install. “ I came to Stack to avoid Cabal.” => stack actually use cabal.

                                                  1. 1

                                                    I thought stack is invented to avoid cabal install, it’s the same as ruby’s gem install vs bundle (which uses gem internally). So i’m not sure what are use cases for stack install.

                                                    Nix is the same bundler, but for system-level packages, which is great and unifying, but I don’t understand why use it if your project and its dependencies are mostly in haskell.

                                                  1. 8

                                                    Things like this are why I laugh whenever people claim javascript is “taking over”.

                                                    Even fucking php has const’s that are actually constant.

                                                    1. 3

                                                      Honestly the only people that believe JavaScript is taking over are people who haven’t used anything else.

                                                      1. 2

                                                        And yet it’s everywhere. If any language is really “taking over”, it’s JS. It’s mandatory in the browser, and it’s optional almost everywhere else.

                                                        1. 1

                                                          That’s why it’s so big. If you want to learn only one language it has to be JS.

                                                          1. 1

                                                            You think javascript is mandatory to make a website or web app?

                                                        2. 2

                                                          But this feature (preventing mutation of mutable structures recursively) is uncommon. So far I’ve seen it only in PHP and Rust. What other languages has it too?

                                                          1. 3

                                                            recursive mutation is not even the issue, const in JavaScript just means “I will not reassign this reference” so even the top-level value is mutable. You can const a=[]; a.push({});

                                                            1. 1

                                                              If top-level mutation prevention can be implemented, then all levels down is not that hard, I think. But I can’t imagine how to do it in languages with pass-everything-by-reference semantics, and most languages have such semantics (js, java, python, ruby, etc).

                                                              Some of such languages has “constant binding” feature too, i.e. java’s final, which lots of users find useless, and still I see lots of final in java code. Clojure has let which is similar to having only const in js, and it also can’t prevent mutation of underlying objects:

                                                              => (let [a (java.util.LinkedList.)] (.add a "foo") a)

                                                              So while mutation by calling methods can’t be prevented at all in js, and it’s not surprising behavior, mutation of captured var bindings can be prevented and I think it’s useful. Lots of gotchas in js happen when closures accidentally mutate captured vars (or when captured environment mutate them).

                                                              Languages with multiple passing semantics such as PHP, which have by-value and by-reference passed function args, or Rust which have & and &mut, can have mutation prevention. In Rust you can see if object method does not mutate object if it has &self and not &mut self, for example. BTW, I written lots of PHP code and still don’t understand its semantics, it’s feels on the same level of complexity as Rust.

                                                            2. 1

                                                              Its not so much about whether you can have an immutable structure, it’s whether you think you can.

                                                              Before PHP’s const or define() supported e.g. constant arrays, you couldn’t assign them - it would error at compile time (which is effectively runtime for php).

                                                            3. 1

                                                              It’s not uncommon for things with undesirable qualities to emerge as the dominant entity in their domain. The flaws of JavaScript should not be assumed to correlate with its rate of adoption, whether or not they should.

                                                              1. 0

                                                                Do you laugh because despite all of this Javascript is arguably actuslly taking over (for whatever that means), while PHP, with its real consts, is slowly fading away?

                                                                1. -1

                                                                  would this be the same javascript community that was just recently ass fucked in public because they needed a third party module to pad strings, or the one that needed a third party module to determine if a number is even?

                                                                  I use php but I’m not attached to it. I also write shell regularly and I’ve used some Lua, a bit of java even. I’d like to try D soon.

                                                                  Even then I’ll use php or shell or lua or whatever where it’s appropriate.

                                                                  The javascript community has no such concept. That’s why you end up with ridiculous nodejs “alternatives” for things that could be achieved out of the box with a little shell on most *nix systems.

                                                              1. 3

                                                                At least const prevents mutating binding when variable is captured by closures. You’ll get “TypeError: Assignment to constant variable.” if you try to rebind it inside closure. Mutable variables captured by closures are common gotcha in js: this is why let is added to language too (var is hoisted to function level, causing confusion).

                                                                1. 3

                                                                  I didn’t realise that third-party clients were still usable for Twitter, since they seemed to disable most API functionality around 2010 (i.e. once they’d become popular, due in no small part to their “openness” for integrations/clients/bots/etc.). In other words, Embrace/Extend/Extinguish.

                                                                  1. 1

                                                                    I believe existing clients were grandfathered in.

                                                                    The client I use is a fork of ttytter and it’s possible to install and use the streaming API from it (I’m not sure if that’s an API that will be shut off).

                                                                    1. 1

                                                                      Yes, this is primary measure against alternative clients (if it’s still applies): new oauth tokens are just denied once client gets some number of logged in users.

                                                                      Push notifications are far from being an essential feature. It’s more facebookish thing for “slot machine-like” behavior everyone is talking about now, intended to use with official client. I think users of alternative clients are usually against flood of notifications.

                                                                    1. 4

                                                                      Javascript is poor language but its runtime environment is great:

                                                                      • Drawing things is accomplished by manipulating tree of data and loading appearance rules, not by onPaint
                                                                      • Elements of this tree are just data records, not shady OOP objects incapsulating mystery state and having 10 inheritance parents
                                                                      • Easy text layouting and vector graphics
                                                                      • Works on all major operating systems
                                                                      • Running apps off network storage

                                                                      This is why iOS and Android developers (mentioned in article) think that js is way better and simpler. Swift and Kotlin are surely better designed than JS, but environments are terrible there, not much better than WinAPI and MFC.

                                                                      This is also why Electron is popular, despite existence of PyQt/PySide.

                                                                      1. 2

                                                                        But what is that promised trick?

                                                                        At that level of required functionality you need full javascript AST parser and HTML parser, not regexps.

                                                                        1. 1

                                                                          The forgotten “loop” feature in programming languages.