1. 5

    DRM is better called “Digital Restrictions Management”. It doesn’t let me manage my rights; often it infringes upon my rights because some corp somewhere believes that because I want to “consume” their “content”, they should have carte blanche to mess around with my computer.

    Approving EME was a colossal betrayal of the open web and its users, and one I’m angry about to this day.

    1. 2

      N-O-D-E’s stuff is good fun, especially the SBCs crammed into increasingly small spaces. I wish there were better keyboards to pair them with, though. I think you’d really want to get something like a Planck keyboard or a 40% to make it usable.

      1. 3

        Look at those old Netscape UIs. We had many fewer pixels, and yet had room to label the buttons and raise them so they’re obviously clickable.

        1. 2

          It was never a question of pixels. The main reason why the bevel & emboss type of design disappeared was that if you have 10 nested GUI elements which are all raised, it starts to look silly. That and GUI fashion which is basically designer and manager moods that have nothing to do with usability.

          1. 2

            They’re beautiful, aren’t they?

          1. 1

            If you’re not pointing at specific revisions, you’re going to have a bad time.

            It sounds like the author is reaching for something like Nix, but hasn’t seen it yet.

            1. 2

              Trying to learn Haskell, for the third time. It’s hard for me :P

              I think I’m good with the syntax all up to Monads/Applicative. I understand the concept and use of Monads, but now I’m stuck on understanding “Applicative” and how they differ.

              1. 3

                Possibly useful: Applicative is less powerful than Monad. (Every Monad is Applicative, not every Applicative is a Monad.)

                Compare the types of (<*>) and (=<<) ((=<<) = flip (>>=)):

                (<*>) :: Applicative m => m (a -> b) -> m a -> m b
                (=<<) :: Monad m => (a -> m b) -> m a -> m b
                

                If you look at the first argument of each, Applicative has a function inside the m, whereas Monad has a function that can see the a and then choose which m b to return. That is, Applicatives can’t have dependencies where you choose a later effect based on the data in an earlier effect. Monads can.

                I wound up working through the examples from Applicative programming with effects with pencil and paper, and that really helped my understanding.

                There’s another procedure for learning a typeclass that I find useful:

                1. Work out what things you have that fit the abstraction. What types have an Applicative instance? (e.g., Maybe, (->) r, [], Const r (needs Monoid r), …). Implement the instances. Look for things that are Applicative but not Monad.
                2. Working with only the tools provided by the typeclass, work out what the abstraction allows you to say (e.g., liftA2..liftAN, (<*), (*>), sequence :: Applicative f => [f a] -> f [a], …)
              1. 4

                He doesn’t really say that “Python makes thinking in code easier”. He says that he thinks in Python, which obviously he does, being the guy who invented the language and all; it doesn’t apply to everybody. I probably think more in OCaml than anything else, so even when I’m writing JS it throws me off if I see a function being used before being defined.

                “You primarily write your code to communicate with other coders, and, to a lesser extent, to impose your will on the computer.” —Guido van Rossum

                That’s just another way of saying

                “Programs are meant to be read by humans, and only incidentally for computers to execute.” —Donald Knuth

                I don’t know, I didn’t find this post very interesting. It’s just gushing over Python.

                1. 2

                  “Programs are meant to be read by humans, and only incidentally for computers to execute.”

                  From the preface to the First Edition of SICP: https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-7.html

                  1. 1

                    In linguistics, there’s this thing called the Sapir-Worf Hypothesis, which occasionally gets abused by programming language people with pet theories… but in very simple terms yes, of course language affects thought. But how and why? That’s when it always gets very speculative and confusing, since it’s hard to do controlled experiments.

                    Maybe a bit of a tangent, but… I’ve seen both of those quotes before, and I agree that Guido’s is derivative of Don’s. But there’s something that bothers me about the basic formulation. It is provocative in sort of a cheap way, because it is untrue. It is a deliberate reversal of the plain truth of the matter. Knuth’s value statement wasn’t even a true description of how programming was practiced when Knuth wrote it, which is why he wrote it. It’s been getting less true ever since. Maybe it would be a good thing if we all agreed to act as if it were true… but we’ll never know. It’s just mathematics envy. Nobody outside academia gets paid to write code to be read by humans. Even hard-core theorists who like to imagine that programs are primarily mathematical objects (which ‘only incidentally’ even have implementations at all) have their tidy abstractions ignored by everyone outside their narrow sub-fields when it turns out the implementations aren’t performant.

                    1. 4

                      Nobody outside academia gets paid to write code to be read by humans.

                      Ironically, in my experience code written by academians is often unreadable, while at my job before anybody merges changes to the projects we maintain, we have somebody who was not involved with writing the changes (and thus has no context for whatever feature was added) review them as a sanity check, I’m literally paid to write code to be read by humans.

                      1. 1

                        Sure, code review is a normal practice for many businesses, and is often done in greater quantity (and sometimes better quality) than academic peer review. But don’t fool yourself – you’re getting paid to write code that will be run on a computer. ‘Incidentally’, your changes will be reviewed by some humans, and no doubt for good reasons. But just for a thought experiment, imagine how many merge requests you could author containing beautiful-but-broken code before you’d be looking for another job.

                        Readable code is a very good thing, but it’s no substitute for code that actually runs and gets something done. Ideally we’d always have both at the same time, but the real world priority is pretty clear.

                  1. 3

                    I can’t believe that this song about IPv6 is from 2007. We should be well-and-truly off IPv4 by now, or it’s going to become even more like digital land than it already is.

                    1. 2

                      Internet’s a pile of hacks, so we’ll probably just add one more: many ISPs are already sharing v4 IPs between different customers, and I don’t see any rush toward v6… Also, what will we do with all those non-upgradable devices that only work with ipv4? ¯_(ツ)_/¯

                      1. 5

                        They’ll go into the pile (which is hopefully at a recycler) with our old Macbooks that can’t be fixed/upgraded, our DVD burners, and our 10 base 2 network cards.

                        We’ve kicked this can down the road for a long time, and now the mixed-metaphor can-kicking-debt collectors are coming.

                    1. 11

                      http://suckless.org/ might be a useful point of comparison and contrast.

                      1. 14

                        But does it support i.e. Visual Studio?

                        “i.e.” means id est i.e., “that is”. You want “e.g.”, exempli gratia i.e., “for example”.

                        1. 6

                          For those who have trouble remembering, you can use an English mnemonic:

                          i.e. “in essence,”

                          e.g. “for eggzample,”

                          1. 2

                            Thanks!

                          1. 3

                            A missed opportunity to support 3 colors selection: none / light-on-dark / dark-on-light

                            1. 3

                              In general, negative variables (NO_FOO, disable_bar) are not a good idea for extensibility.

                              Other missed opportunity: because the site wants programs to check if NO_COLOR is set to any value, there’s no scope to do something like NO_COLOR=prog1,prog2,progN.

                              General principle: don’t slap the first idea on a webpage and say “let’s make a standard”.

                            1. 6

                              A shame, because people who want a bit of colour or a lot of colour can’t express their preference with this env-var.

                              Why not COLOR={none/some/lots/unicorn-vomit}?

                              1. 14

                                I suspect anything more complicated than an opt-out would involve endless subjective bike shedding and have even less uniform an implementation.

                                Also, it should be NO_COLOUR obviously!

                                1. 2

                                  Nice try, but the language of the internet is American and not English ;-)

                                  1. 2

                                    The language of the world wide web is misspelled American English, to be precise. Just look at the HTTP headers your browser sends to see to what it is that I am a Referer. ;)

                                2. 1

                                  That would’ve been cool, but I suspect it would’ve been far less likely to take off. With the current NO_COLOR design, libraries for handling color can automatically just return the original text instead of the text with color control codes if NO_COLOR exists unless explicitly overridden. Applications which don’t use libraries generally already check if stdout is a tty; they could just change isatty(STDOUT_FILENO) to isatty(STDOUT_FILENO) && !getenv("NO_COLOR") (assuming they already have ways to override that check).

                                  Your best bet is probably to enable NO_COLOR and then, for the pieces of software you want color output from, configure them explicitly.

                                1. 14

                                  Advice: avoid reading the comments.

                                  1. 5

                                    What a ride. These people are fanatics.

                                    1. 3

                                      There is one I sort of agree with, which is that the downside is fragmentation with every bank implementing their own thing and then trying to force use of it. So instead of today where there’s a small number of widely-deployed options for mobile payment and most people have access to a way to do one of them, you’ll have to either go back to using a physical card, or else hunt around for the one place that works with the FirstBankOfEastPodunkPay™ app because that bank refuses to authorize any other mobile payment system.

                                      1. 15

                                        In Germany, that’s not an issue, there’s already a payment system they’re going to use.

                                        Basically, the banks cooperatively developed a card and payment system (over 15 years ago, actually), which is now girocard/EC, which ends up with only 0.125% total end-to-end fees¹, chip+PIN since 2004 and very fast transactions. Obviously, this is much cheaper for the banks and merchants than VISA or MasterCard, and was the reason why for many years merchants such as ALDI only accepted this system.

                                        Girocard/EC also has an NFC standard, girogo, also with significantly lower fees than PayPass or PayWave, and is supported with basically all terminals in Germany.

                                        Girocard/EC is extremely popular, 3-4 times more popular than VISA/MasterCard credit/debit cards in Germany, and basically everyone has them.

                                        So it’s quite likely we’ll just end up with German banks simply using the payment network they already own ;)


                                        1. comparatively, VISA/MasterCard used to be around 2-3%, now forced by the EU to lower those to 0.2%, cash payments end up around 0.2% at the scale of merchants due to processing, transport, etc. This actually led to some places, such as official agencies in some cities, only taking girocard/EC payment, not any other cards nor cash.
                                        1. 8

                                          So it’s quite likely we’ll just end up with German banks simply using the payment network they already own ;)

                                          Sorry, but banking/payment in Germany sucks. If you are at bank A, you have to pay a fee if you use an ATM of bank B. This often led to the bizarre situation (my wife is German and we lived in Germany for 5 years) where Germans have to go to another ATM to avoid transaction fees, while I can get cash anywhere with my Dutch card without extra fees. In the Netherlands there is also one system, but you never pay fees, regardless of which bank’s ATM you use.

                                          Unrelated, but don’t get me started on card payments in Germany. All the small shops, like bakeries expect you to pay cash. In supermarkets, you can pay with a card, but very often they don’t use PINs. But you have to hand over your card and literally sign a paper sheet, and then the cashier compares your signature to that on your card. Except for the internet banks (such as ING), the internet banking sites are absolutely horrible. At some point we were with Sparkasse and the password for internet banking was literally a 4-digit PIN. Transferring money from one account to another can take days. For every small thing (like ‘unlocking’ payment in more countries) you had to go to a bank office.

                                          Meanwhile we are back in The Netherlands. I never carry cash and I don’t even need a wallet, because I can pay contactless everywhere with my phone, watch, or card. Transfers are (nearly) immediate. We split the bills and pay them with ‘Tikkie’ over WhatsApp/iMessage.

                                          1. 4

                                            I’ve been getting back into using cash lately. I can’t trust the data collecters not to abuse my payment history, and if switching to cash slows its decline a little bit, that’s great.

                                            1. 4

                                              If you are at bank A, you have to pay a fee if you use an ATM of bank B.

                                              They pretty much bundled up into 3 networks now, so you have a 1:3 chance to run into the right shop. Or you share your money transactions with the whole world by using a credit card that is now often “free” with German accounts as well, getting the same trade-off you have with foreign credit cards (free ATMs, no privacy due to the card issuer).

                                              Credit cards weren’t popular in Germany for a long time due to their excessive fees, so merchants didn’t support them. EC (the local system) was better, but cash is still the only free option. EU regulations forced credit card issuers to drop their fees to more attractive levels and suddenly they’re getting supported by everybody. who would have thought?

                                              In supermarkets, you can pay with a card, but very often they don’t use PINs.

                                              The background to that is that signatures are used for offline transactions which work with less effort in the backend. Getting less common these days because supermarkets carry more risk on them compared to online transactions (that use PINs), so it’s really just a fallback when the terminal can’t connect to the servers. Contactless options are increasingly accepted without any authentication at all below a certain value (20-50€, depending on the bank).

                                              Transferring money from one account to another can take days.

                                              Transfers now have to clear next bank day (Mo-Fr) at the latest, but usually happen faster. I last encountered transfers that take days in 2005 or so.

                                              I can pay contactless everywhere with my phone, watch, or card

                                              Given that some of the experiences you report sound rather outdated to me, I wonder if you’re comparing apples to apples here. There were no cards, watches or phones that could have paid contactless in 2005.

                                              1. 0

                                                I don’t think they are outdated. I lived in Germany until August last year and this is based on my experiences in Germany (Baden Württemberg) from 2013-2018.

                                                1. 2

                                                  Maybe you were just with a shitty bank? I’m sure the netherlands also have shitty banks, but I literally haven’t had any of your experiences ever since using cards or transfers for payment, and that was since 2014.

                                                  1. 2

                                                    I live in Berlin and this is also my experience. It is getting marginally better, some places are starting to accept cards, but you cannot rely on your EC card or Visa/Mastercard to get around.

                                                    Online banking is still a joke, but has been getting better, probably due to some pressure from competitors like Number26.

                                                    I also don’t understand how so many people here don’t want to use cards because of privacy reasons, but they are happy to give their private data to Facebook and it’s companies (whatsapp, instagram, etc).

                                                    1. 2

                                                      I also don’t understand how so many people here don’t want to use cards because of privacy reasons, but they are happy to give their private data to Facebook and it’s companies (whatsapp, instagram, etc).

                                                      Why are you assuming they are using these services?

                                                      1. 2

                                                        I am not assuming, I am known from people I talk to. I didn’t mean to answer the person in this thread that mentioned that.

                                                      2. 2

                                                        I also don’t understand how so many people here don’t want to use cards because of privacy reasons, but they are happy to give their private data to Facebook and it’s companies (whatsapp, instagram, etc).

                                                        For what it’s worth (since I brought up privacy upthread), I’m not using Facebook’s services, and very limited Google services despite working there (and I soothe my privacy concerns with that I can see how the sausage is made)

                                                  2. 3

                                                    As a German living in the Netherlands now, I agree with all of the above.

                                                    1. 2

                                                      But you have to hand over your card and literally sign a paper sheet, and then the cashier compares your signature to that on your card.

                                                      That’s actually technically not allowed, the merchants still do it because they’re cheap, but it means 100% of the risk is on the merchant.

                                                      For every small thing (like ‘unlocking’ payment in more countries) you had to go to a bank office.

                                                      Never had that, was at a bank office 3 times in my life, once when the account was opened, once when it was turned from a child to an adult account, and once when I moved across states.

                                                      Transferring money from one account to another can take days

                                                      Literally wrong, as per SEPA rules 24 hours has been the max for years, and thanks to SEPA-ICT almost all banks offer up to 15’000€ in under 15 seconds, and I’m using this quite frequently.

                                                      I never carry cash and I don’t even need a wallet, because I can pay contactless everywhere with my phone, watch, or card. Transfers are (nearly) immediate

                                                      And you pay 2% extra for everything, as that’s the fees mastercard/VISA collect, which ends up for an average household being a 40€/month fee. If this wasn’t a hidden fee, but actually visible to you, pretty much no one would use it anymore.

                                                      1. 1

                                                        No, I am not paying 2% extra. I am literally paying what the product/bill costs, no extra cost. Apple Pay is not associated to our credit card, but directly to the bank account (debit card). In fact, I can even switch on the fly from which of the (possible) 20 IBANs the debit card/Apple Pay should subtract from.

                                                        I don’t care that I am indirectly paying for it, because everyone is. There is no difference in cost for me in using or not using Apple Pay.

                                                        1. 2

                                                          And that’s exactly the tragedy of the commons: everyone only looking out for their own benefit, and as result, everyone being worse off.

                                                          It makes sense for you, personally, but for us, as society, it’s absolutely the wrong solution. And it’s the reason why this can’t be fixed by the market, but has to be fixed through laws, e.g. by banning credit card fees, or creating an EU-funded card network directly.

                                                          Alternatively, we could have a law forcing people to pay the fee associated with their payment method directly – you’d also suddenly start using cheaper card systems or cash again if you’d save 2% on everything.

                                                        2. 1

                                                          That’s actually technically not allowed, the merchants still do it because they’re cheap, but it means 100% of the risk is on the merchant.

                                                          I don’t know if it’s not allowed but happens to me at least every week.

                                                          Never had that, was at a bank office 3 times in my life, once when the account was opened, once when it was turned from a child to an adult account, and once when I moved across states.

                                                          I currently have my account blocked because I pressed the wrong button on the UI. Have to go to the bank now.

                                                          Literally wrong, as per SEPA rules 24 hours has been the max for years, and thanks to SEPA-ICT almost all banks offer up to 15’000€ in under 15 seconds, and I’m using this quite frequently.

                                                          I don’t think it’s 24 hours, it’s a business day and only counts before 15:00 or something like that. But this is true, if you transfer before 15:00 it will be on the other account the next day.

                                                          And you pay 2% extra for everything, as that’s the fees mastercard/VISA collect, which ends up for an average household being a 40€/month fee. If this wasn’t a hidden fee, but actually visible to you, pretty much no one would use it anymore.

                                                          I don’t think this is how prices work. If they didn’t have that 2% fee do you think merchants would just lower their prices? Or they would use it for profit or some other investment? I think it would just mean the money would go somewhere else but it’s not certain it would go to the customer.

                                                          1. 1

                                                            If they didn’t have that 2% fee do you think merchants would just lower their prices?

                                                            Look at the price pressure on the German market, and you’ll realize, yes they would.

                                                            Profit margins in grocery in most countries are in the double digits, some German grocery store chains have profit margins in the sub-single-digit range. The market is heavily fought over, and if a merchant could reduce their price even a half percent in any possible way, they would.

                                                1. 4

                                                  punkt phones may be an option.

                                                  1. 4

                                                    Why would you build one of those on top of AOSP?

                                                    1. 2

                                                      Because there is no alternative; the baseband based dumbphone OSes went away in LTE, so now pretty much everything that’s a dumbphone, let alone a featurephone, is running Android.

                                                      1. 1

                                                        Well, that’s just sad.

                                                    2. 3

                                                      I have one of these too, and while the hardware is really nice to hold and use, the software has been incredibly buggy. (not to mention that you really have to consider whether nothing but phone calls and texting are enough for you) There was a recent software update that purports to have fixed most issues, but I haven’t had a chance to really put it through its paces yet.

                                                      1. 6

                                                        It’s silly that this is using Android, and has 4G, since it seems to only to phone/sms.

                                                        1. 3

                                                          This.

                                                          It seems interesting at first glance, and it looks like they nailed the desire for minimality. Then you look at what’s below minimality and you find it’s not minimal at all :)

                                                          1. 3

                                                            Having 4G is probably good to be future-proof. Taiwan for example has sunset GSM in 2018 and in 2019 UMTS was completely turned off, with LTE the only remaining option. Other countries are following suit over time.

                                                            1. 3

                                                              It’s also for the tethering. If you want to be intentional about internet usage, what better than having to get out a purpose built device?

                                                            2. 1

                                                              IIRC the MP02 didn’t support group texting when it launched, but they said they might support it with a future software update. Does it support group texting now?

                                                              1. 1

                                                                I can’t say, I’ve never tried group texting. Sorry.

                                                            3. 2

                                                              It’d be perfect if it came with a QWERTY keyboard (and shipped to India).

                                                            1. 20

                                                              Before I clicked, I thought to myself, “what is Google going to sneak in this time?”

                                                              Our long-term goal is to define badging for high-quality experiences, which may include signals beyond just speed.

                                                              Ah, there it is. Badges for the Google-approved, and warning badges for the rest.

                                                              1. 7

                                                                This certainly goes too far – there should be a concept of content neutrality, or experience neutrality: browsers are a conduit, and more importantly, the interface we user to interact with a growing number of services. There should be ethical guidelines around designing browser features, as it offers a growing surface for abuse.

                                                                1. 7

                                                                  I see what you’re saying, and I wish we still used the old term “User Agent”, since they are meant to be agents for the user, not for the browser vendors.

                                                                  1. 2

                                                                    Ha, that’s a great way to put it!

                                                                    1. 1

                                                                      It is telling that the User-Agent string is basically a giant amalgamation of brands now :)

                                                                1. 7

                                                                  I really liked this article. Having gotten in functional programming with Elm for the last 2 years, the nonEmpty type is brilliant, and I’m going to re-implement it in Elm. The tie in of language theoretic security was a nice touch. I’ve been promoting that at work for a while.

                                                                  it’s extremely easy to forget.

                                                                  Anything that can be forgotten by a developer, will be forgotten.

                                                                  A better solution is to choose a data structure that disallows duplicate keys by construction

                                                                  “Making Impossible States Impossible” by Richard Feldman is a talk on effectively the same concept.

                                                                  1. 8

                                                                    However, sometimes it is quite annoying to conflate the type and structure of the list with the fact that it is nonempty. For example the functions from Data.List don’t work with the NonEmpty type. I think the paper on “departed proofs” linked near the bottom points to a different approach where various claims about a value are represented as separate proof objects.

                                                                    1. 3

                                                                      In this instance, the fact that both [] (lists) and NonEmpty are instances of Foldable will help: http://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Foldable.html

                                                                    2. 2

                                                                      I ran across a case of the nonempty approach in File.Select.files the other day:

                                                                      Notice that the function that turns the resulting files into a message takes two arguments: the first file selected and then a list of the other selected files. This guarantees that one file (or more) is available. This way you do not have to handle “no files loaded” in your code. That can never happen!

                                                                      1. 1

                                                                        Nice find! I’ve actually used that before but hadn’t made the connection, haha.

                                                                    1. 4

                                                                      The semver requirement puts this in direct contradiction with the Package Version Policy used in the Haskell ecosystem. I suspect other ecosystems have their own versioning policy, and “semver or the highway” is needlessly constrictive.

                                                                      1. 3

                                                                        I have in a nix overlay a nix expression that builds an emacs with everything I want, including all the supporting programs (git etc) being hardcoded paths to the nix store. It is inspired by BAUER.

                                                                        1. 2

                                                                          Can pboy be found in any distribution? If not, have you been thinking about adding it?

                                                                          Edit: Oops, I realised I asked the same exact question the last time. To rephrase it then, have there been any updates on this front?

                                                                          1. 2

                                                                            Haha! Yeah I have to apologise, I still haven’t gotten around to creating any .deb or .rpm of it. But thanks for reminding me, that alone will make me bump it up on my priority list!

                                                                            Edit: I think some kind soul created an aur package for it last time? I’ll check and see if we can have it updated to the current version.

                                                                            1. 2

                                                                              Finally got around to updating it :) Someone had already tested the upgrade so I just checked if it built locally.

                                                                              1. 1

                                                                                I notice you have nix support in your repo. A mid-term compromise might be to make an easy nix-env -i-style command? nix-on-other-distros is a pretty nice experience, though it’s still something of a barrier to entry.

                                                                            1. 3

                                                                              bb is a classic, and while I would have been sad had you clobbered the name by mistake, I’m sadder that you intentionally did it :(. A name like bbtop might have worked too.

                                                                              For those who don’t know the demo, here’s a video with sound, and the demo page is on sourceforge.

                                                                              1. 1

                                                                                bb is a classic

                                                                                It’s great.

                                                                                A name like bbtop might have worked too.

                                                                                But bb is shorter and more convenient :/ I had to compromise. Plus who watches bb more than once (in a while)?