Threads for zzing

  1. 10

    I have mixed feelings about Tailwind.

    On one hand, I love it and use it in all my personal projects. I’m so productive with it, and it’s a real pleasure to use it.

    On the other hand, I will probably never suggest using it in a professional project. It’s too hard to defend it, and probably not worth the debate time.

    1. 10

      On the other hand, I will probably never suggest using it in a professional project. It’s too hard to defend it, and probably not worth the debate time.

      We started using it at work, and people that aren’t particularly front end developers end up loving it because of its productivity. That alone is worth it for the business case.

      1. 3

        Yes agreed. I have been using it in my LiveView app. But, when I explain it to my friend who is a front end developer he always just says, “but you can do all that with regular css and JavaScript (in relation to LiveView)”. And all I think is, “yes, but I don’t want to.”

        1. 1

          I hear you. I use it everywhere. I can’t suggest or even recommend it in a professional project—too many pieces of the puzzle for coherent UI are missing: the string-based nature of a styling system based entirely on classNames is hard to override in component trees and difficult to make type-safe

          Chakra-UI is pretty good and pretty similar to Tailwind at least as far as design tokens go, however I could not recommend Chakra because of their willingness to break compatibility with React 17 at the drop of a hat, with no warning or deprecation strategy, while React 18 was barely out of the oven.

          In my personal projects, my current approach is to build basic components with React-ARIA headless component library and styling them with Tailwind. It is really nice.

          1. 1

            I use the style attribute in my personal projects. For me, Tailwind does basically the same but with yet another syntax. If it gets more complex than what “style” can handle, it deserves a class name.

          1. 6

            They talk about Java language development without even once mentioning their most prominent competitor - C#.

            1. 1

              I am curious if they ever did fix the optimization issue in v8.

              1. 4

                I’ve got an issue with comparing the ruby/js/python repo issues to .net for two reasons: 1. What’s included in the base distribution of dotnet core is amazing compared to others. You don’t wonder what database connector/logging/filesystem/http/whatever library you’re going to use. They’re first party. (Yes, some of those effectively live in nuget, but I expect the advisories come under dotnet itself). Compare this to npm where every basic thing (childeexec?) is provided in 5 different flavours. 2. Dotnet community is still discovering open source as far as I can tell. Yes, there’s lots of stuff on nuget, but they’re mostly components rather than full apps with dependencies that you can find on pypi, npm, gems, etc. I’m pretty sure you could replace most of your system with things you can find in pypi.

                Since the article mostly concentrated on the backend, one thing they didn’t mention is Blazor. I’ve been playing with that recently and found it amazing and magical. It contains a dotnet->wasm compiler and templated page generator. That means I could create a static website that edits some xlsx files fully client side by using some generic c# library for the spreadsheet files, and it just works. It’s the first time in a long while I’ve been blown away by a new tech.

                1. 2

                  As far as I recall, unless this has changed, it doesn’t convert your code to wasm. It runs your code on a wasm implementation of .net.

                  1. 2

                    Correct. Your description is more precise. The page loads the dotnet.wasm bootstrap and the dlls. But the end result is that you can run the dotnet code with dom hooks completely client side.

                    1. 2

                      I would really love it if it was wasm completely though.

                1. 1

                  This is interesting because I agree with that I see and do UI design every time I touch html. I am a software developer who does front end mostly, but I can immediately notice when something is a pixel off.

                  1. 2

                    In fact that’s what I expected the article to be about, but I liked the real content of it just as much.

                  1. 0

                    Love the idea.

                    1. 21

                      I always thought that Greenspun’s tenth rule (Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp) ought to be updated for modern development practices, so here’s Hagelberg’s tenth rule: Any sufficiently complicated kubernetes deployment contains an ad-hoc informally-specified, bug-ridden, slow implementation of half of OTP.

                      1. 18

                        http://rvirding.blogspot.com/2008/01/virdings-first-rule-of-programming.html

                        Any sufficiently complicated concurrent program in another language contains an ad hoc informally-specified bug-ridden slow implementation of half of Erlang.

                        1. 4

                          I should have known! But a lot has happened since 2008, and I feel like k8s deserves to be called out specifically.

                        2. 6

                          The root of all of this is that the BEAM ecosystem represents a parallel evolutionary path (in many ways better) to what ended up becoming the dominant tooling in our industry.

                          For a lot of us, this means that when we need to use that neat tooling we end up having to fight with institutional inertia and dogma. I have a coworker–smart dude otherwise–that in their role as a devops just refuses to exploit the idea that our BEAM stuff doesn’t quite act like the generic python or node or whatever app you would use a “livestock not pets” approach on.

                          It’s annoying, but we deal with the world as it is.

                          1. 1

                            I have a coworker–smart dude otherwise–that in their role as a devops just refuses to exploit the idea that our BEAM stuff doesn’t quite act like the generic python or node or whatever app you would use a “livestock not pets” approach on.

                            Can you elaborate on this a little bit more - I am not certain what this means but it sounds good.

                          2. 2

                            I live in that rule at work, and quite agree with it.

                            1. 1

                              Where are Hagelberg’s rules 1-9?

                              (Yes, I’m aware)

                            1. 4

                              After discussing with the Steering Council, we are considering delaying the final release until December to allow for two more beta releases.

                              That’s disappointing. They couldn’t even keep up the yearly cadence for more than a single cycle. I wonder if they tried to tackle too much.

                              1. 15

                                I’d be far more disappointed if they released a low-quality release to meet an arbitrary release cadence. Agree it’s a shame, but it’s the right call.

                                1. 11

                                  Afaik this was partly just because 3.11 had a bunch of very fundamental changes that ended up resulting in more drastic bugs than expected.

                                  1. 3

                                    Don’t other projects that are trying to do a release cadence only promote big or numerous changes once they as a collective reach a certain stability?

                                1. 6

                                  It seems fears around recovery/device migration are a significant part of the rationale behind Apple’s passkeys implementation requiring iCloud Keychain sync https://twitter.com/rmondello/status/1534914697123667969 (referencing https://developer.apple.com/forums/thread/707539)

                                  n.b. Passkey is a generic term for FIDO/WebAuthn credentials, which PyPI’s 2FA supports in addition to TOTP. PyPI also require you to record a set of recovery codes and ask you to recite a code back during their 2FA setup process.

                                  1. 9

                                    It seems fears around recovery/device migration are a significant part of the rationale behind Apple’s passkeys implementation requiring iCloud

                                    Speaking as someone who worked in the hosting biz and had to deal with this stuff, fears around recovery and device migration are all too legitimate. “I lost my 2FA” was one of my most-loathed support requests. Usually it was “I used the authenticator app on my old phone and forgot to migrate”.

                                    As the article hints at, what makes MFA really viable is the hidden factor: human-to-human / human-to-organization relationships. Social relationships, not technical ones.

                                    I’m also not comfortable with $bigtech_corp setting itself up as a trusted intermediary for the same reason. $bigtech_corp tends to be all about lack of accountability and destroying legitimate social relationships.

                                    I have questions not answers, problems not solutions.

                                    1. 2

                                      Usually it was “I used the authenticator app on my old phone and forgot to migrate”.

                                      Or “my old phone is now toast and I forgot the authenticator was there and there goes all my access”

                                      Thankfully I had my core device codes backed up, but some stuff I just had to write off to no longer having access to because there wasn’t a support team to engage.

                                      1. 1

                                        I moved phones several years ago and had some but not all TFA codes migrate. Fortunately I noticed before I sent the old phone to recycling but jeez why was that a possible failure mode? All or none, ffs.

                                        1. 1

                                          That recovery thing was my biggest concern when getting my old SE repaired and the upgrade to the 13. It went well though, but I always think about those things.

                                      1. 21

                                        Even worse, Lenovo is claiming, rightly or wrongly, that this is a contractual obligation by MS. https://download.lenovo.com/pccbbs/mobiles_pdf/Enable_Secure_Boot_for_Linux_Secured-core_PCs.pdf

                                        1. 24

                                          Got to give Lenovo some credit for how they complied, though. They could have made it so you would have to go through a complicated process of adding the keys you need to boot anything other than Windows. But they put a simple toggle switch to enable the most common case (you are booting a Linux distribution that uses the Microsoft 3rd party shim for secure boot).

                                          1. 14

                                            Why are you disrupting the daily “Five minutes of hate for corporate America?”

                                            1. 14

                                              To be fair, that’d be corporate China you’d be hating on.

                                              1. 1

                                                Is M$ a Chinese company now?

                                                1. 17

                                                  Microsoft isn’t, but Lenovo is.

                                                  1. 1

                                                    And the complaint is about M$ forcing their crap onto a HW vendor. I cannot imagine Lenovo doing this on their own. There is no money in that.

                                                    1. 7

                                                      I mean, for all we know, Lenovo might be getting a good deal out of this as well – sure, there may be no money to be taken straight from customers for it, but that’s not the only source of money nor the only metric for a good deal. Just because it was a contractual obligation (if it was) doesn’t mean it was a bad deal or that Lenovo were forced to make it.

                                                      Not sayin’ you’re not right to suspect Microsoft being nasty here, just that I’ve found it best to distribute suspicion evenly (and in very generous amounts :-D) among corporate actors.

                                              2. 9

                                                Well, I will say that assuming this was actually a contractual obligation, the culpability is on Microsoft, and Lenovo did the best they could. I’m not letting Microsoft off the hook at all here.

                                                1. 0

                                                  Because some tech people still work at M$ for some reason. It’s mind boggling how legions of people who dedicate their life to understanding technology end up creating walled gardens.

                                                  1. 11

                                                    I don’t think it’s that mind boggling. Creating walled gardens is lucrative and M$ pays pretty okay.

                                                    1. 2

                                                      Ok. One shouldn’t be surprised by people being willing to do questionable things for money. But this is literally working on something that they are probably going to be working around one or two employers later.

                                                      Or is it different in the US? Is it like really simple to just call one of your friends at M$ and get them cooperating, unlike from EU?

                                                      1. 4

                                                        The overwhelming majority of developers in the world will not be effected by this. It’s not like a .NET developer is going to go out of their way to replace the OS on their work laptop.

                                                        1. 2

                                                          I have done exactly that and it’s great for me, and actually great for my company, to have at least one person who knows their way around a linux machine (my system dependencies better match cloud dependencies and build chains, if nothing else). And dotnet works really well natively on linux now.

                                                          I would hope that developers as a group are curious enough that this is pretty common. Realistically I’m sure that the “majority” will only ever use Windows but I like to think and hope it’s not the “overwhelming majority”.

                                                        2. 3

                                                          But this is literally working on something that they are probably going to be working around one or two employers later.

                                                          I think you’re wildly overestimating how many developers will ever voluntarily try to run linux on a laptop (as opposed to a server).

                                                          1. 5

                                                            While not fully representative, almost every year the Stack Overflow survey has Linux on personal machines around the 30% ballpark.

                                                      2. 3

                                                        It’s not like M$ is somehow worse than all the other big tech companies. I’m sure one could quibble over details, but at a high-level, I’d argue they are all basically the same in terms of walled-garden love.

                                                        1. 4

                                                          Sure, but M$ walling off the general purpose computer segment would affect me way more than Google with Apple claiming the phone segment. I make a living off Linux on my (and some of my clients’) productive general purpose computers after all.

                                                          And I am surprised that other devs don’t mind. I though the idea was that we are the ones who could always walk away and disrupt as much as we’d like.

                                                          If this continues, we won’t be able to install Linux and Kodi on a NUC to provide 4k video for the occasional movie screening in our favorite coffee. It would have to be Windows. Meaning, among other things, no SSH remote administration, license fees, reboots in the middle of the movie and so on.

                                                          We’d have to buy either underpowered RPis or some unlocked industrial devices at much higher price point.

                                                          Or my aunt’s laptop. She can’t afford a new one, so she has an old Lenovo with Linux. Making the device useful for couple more years. Do we just throw them away once the Windows support ends? Or do we run insecure and/or slow devices?

                                                          I kinda like how things are now. The freedom of compatible hardware and software without artificial barriers is just more productive.

                                                          1. 4

                                                            I generally agree with you, I think it’s a bad precedent and I don’t like where it’s going either.

                                                            Security being used to enforce stupid things is bad for everyone, not just us that want to run non-Windows.

                                                            The part I don’t really agree with is that Google or Apple’s or …’s influence is somehow not as bad, they are, just in different ways.

                                                            1. 1

                                                              I think that in the past couple of years the general awareness of embedded computing skyrocketed. Thanks to Arduino, RPi and many others.

                                                              I believe that I will get my Linux phone eventually. Who knows what happens from there?

                                                              PC lockdown is a trend in the other direction.

                                                        2. 1

                                                          For the record, I agree with the “unkind” assessment of my comment, but I was definitely not trolling.

                                                          I truly believe that people who help build these walled gardens should think about harm they are doing instead of just throwing arms up in the air “it’s just a job”.

                                                    2. 14

                                                      IMO this requirement is entirely reasonable. I think it’s more important for a company to provide strong defaults for the majority of its customers than to make things easy for competitors, and that shouldn’t change just because a company is the dominant player. Notice I said defaults, not forced restrictions. Booting an alternative OS is an esoteric task that only a tiny percentage of PC customers will ever do, and I think it’s fine to require such customers to tweak a security setting in their firmware, particularly since they don’t have to disable Secure Boot altogether. Defaults can never be perfect for everyone, but I think that having the strongest security by default for the majority of users is the right call here.

                                                      1. 10

                                                        I doubt that it would be legal in Norway: Lock-in mechanisms (innelåsende mekanismer), hereunder missing compatibility, is unfair according to Forbrukertilsynet.

                                                        If you don’t know Forbrukertilsynet, they were the first to forbid DRM on music, for similar reasons.

                                                        1. 4

                                                          Do they forbid DRM on video?

                                                          Regarding this article, I don’t think that this is a real lock-in mechanism. It is a simple toggle to enable the shim and also another toggle that can disable secure boot altogether. I don’t think it is a lock-in to require a few keypresses to change some settings when the default is argubly more secure.

                                                          1. 1

                                                            Yes, video shouldn’t be any different. Famously, as DVD-Jon found out, it’s not illegal to break DRM. Note that this is specifically about bought music and bought video.

                                                            I don’t think it is a lock-in to require a few keypresses to change some settings when the default is argubly more secure.

                                                            That sounds like a key point. But it also depends on their informational obligations: How many expectations are broken, and do you need to be Matthew Garrett to debug it? I don’t think I could have guessed “the 3rd party key” if I hadn’t read the news today. If you can’t do it with the knowledge that can be expected of a customer, well, that’s a dark pattern, which is also forbidden.

                                                            1. 4

                                                              I should add what I feel the law should be similar to the concept where they are required to allow it to be easily turned off so the user can actually own the machine, while at the same time be required to fix any issues that come up for that device during the lifetime + some extra duration of it (so no disabling of the functionality ten years later).

                                                              So installing your own operating system doesn’t violate the warranty, and the warranty of a fitness for purpose includes fixing any issues booting up the device using third party software - so if you have a disk with debian on it that boots on a few other contemporary machines but doesn’t on this particular laptop - or even better multiple separate machines all being this laptop - then they are required to fix it.

                                                              1. 4

                                                                I think EU might be slowly getting there with the sideloading mandate. I don’t think they will explicitly cover different OSes, but the wording might be loose enough for courts to pry it wide open. Also, FSFE is probably lobbying as much as possible to include the OSes explicitly.

                                                                1. 2

                                                                  I’m convinced they’re in as well, I’m not very hopeful. It’s going to include too many holes. If you think FSFE is lobbying, what do you think MS is doing? They’ve been proven that they abuse their monopoly and that they don’t stop on “lobbying” and go straight for bribe and corruption.

                                                                  EU might get the doors cracked a little. But wide open? I’m not hopeful.

                                                        2. 3

                                                          As the article states though, turning the 3rd-party signing key toggle on by default would not weaken the security model.

                                                          1. 3

                                                            I think requiring users to install their own security keys in order to install Linux would be unreasonable. But IMO, having to change one toggle switch in the BIOS is fine.

                                                            1. 3

                                                              Yeah, I mean, slippery slope and all, but the first time I installed Linux on my computer like 20 years ago I had to fiddle with way more BIOS settings than a toggle switch. As long as I don’t have to recite incantations at the EFI shell, this just falls under the old “tinker with your machine until you get to the login prompt” dance that I do about twice during a laptop’s useful life.

                                                        1. 2

                                                          I use it and quite frankly, not of these are issues for me.

                                                          The central part I use is the git itself - and I can move if I wanted to.

                                                          1. 2

                                                            It would be pretty cool if Git had a standard way to store and share pull requests (and issues?) though.

                                                            1. 13
                                                              git help request-pull
                                                              git help send-email
                                                              
                                                              1. 5

                                                                As much of an advocate of patch mails I am, for most people that just moves the problem - now the question becomes where do you store all those patch emails and make them easily searchable? Also, most mail archives don’t group long-running threads together in a way that spans multiple months or years. There’s also not an easy way to figure out which “issues” are still open, which are closed and who’s working on what, nor is there an easy way for people to subscribe only to updates to the issues they’re interested in.

                                                                1. 11

                                                                  Sourcehut has fantastic mailing lists with patch archival/search as a central feature. It integrates into the issue tracker, you can close tickets with special email headers.

                                                                2. 1

                                                                  It’s nice, but it leaves out all the interesting parts. (Interchange format, storage, replies…)

                                                                  I want something that is to request-pull as LFS is to HTTP.

                                                                  1. 4

                                                                    That’s what mailing lists are for.

                                                            1. 5

                                                              I don’t really care about the framework, but that logo as the top is really cute.

                                                              1. 3

                                                                Everywhere the Deno mascot shows up is extremely cute :) E.g. the ones here and this loading animation.

                                                                1. 2

                                                                  If someone makes a package that combines Deno and Go, its mascot will probably cause me to die of cute-overload.

                                                              1. 1

                                                                It does rather look nice for windowmaker.

                                                                1. 4

                                                                  I love the mention of cold fusion in the footnotes.

                                                                  1. 31

                                                                    This post can be summed up by “I prefer promise syntax.” The argument that try / catch sucks but somehow Promise.then().then().then().catch() is better or easier to understand is subjective at best. I’ve never met someone who has written a lot of JS who prefers promise syntax to async/await, but I guess there’s a lid for every pot.

                                                                    1. 9

                                                                      I prefer promises to async/await. Async/await is a bad, leaky abstraction. For anything non-trivial you have to fall back to promises (eg Promise.all). If I’m going to have promises anyway, I might as well just use them everywhere. The other thing is that async/await doesn’t compose at all while promises do.

                                                                      async/await also directs the programmer towards inefficient code by default by encouraging sequential async operations (I see people writing code like that often).

                                                                      1. 15

                                                                        Promises themselves are a bad abstraction though.

                                                                        • They’re invoked immediately so you can’t build up a pipeline are pass them around easily and this causes a lot of devs to thunk their promises
                                                                        • Catching errors was never required so errors are often swallowed or are rethrown in a way that it’s hard to debug
                                                                        • Cancelation had to be added way later than it should have been (and many folk had warned during the proposal phase) and as a result we have this bad API for AbortControllers
                                                                        • all vs allSettled should have been there from the get-go instead added of years later
                                                                        • Folks realized it’d be nice to have a do-like notation so async & await were rushed out without considering the ergonomics for the parallel APIs

                                                                        What JavaScript wanted was an asynchronous Task and could have been copied from established languages, but what we got was Promise. We’d be better off normalizing picking for our projects one of the Fluture library, fp-ts’s Task, Aff from PureScript, or whatever the API is called in effect-ts (they are all close to the same thing).

                                                                        1. 3

                                                                          Totally agree! It’s just that async/await is even worse, and all I have to fall back on is promises.

                                                                        2. 3

                                                                          Async/await are promises. It doesn’t have to be an either/or choice.

                                                                          1. 2

                                                                            That’s precisely the problem. Is there any value in a tiny bit of syntactic sugar that also encourages inefficient code? In my view, the value is negative.

                                                                            1. 1

                                                                              A lot of the code where this would be used is going to have branching logic and overall not be terribly long anyways, so the emphasis on inefficiency doesn’t really ring true to me.

                                                                              I will admit to not knowing the intricacies of javascript optimization, but I fail to see how using a syntactic sugar would impact it at all.

                                                                              This whole discussion sounds like like arguing between the do syntax and the bind operator in Haskell. I for one prefer my monads easier to read. As code should be for reading first and compilers second.

                                                                              The only thing I will concede is that I have seen developers try to break out of the asynchronous context by assigning variables in the synchronous context. This might be worse in rxjs though. The use of Promise directly does force one to read it as asynchronous compared to missing the async keyword.

                                                                          2. 2

                                                                            They are both silly and limited. They both rely on. Funny looking code. They both introduce disturbance the code execution thredline rather then logically allow the programmer to control when an arbitrary code block is executed. We have to really on somewhat funny syntax.

                                                                            Both of them are limited to “execute this on the side and when you are ready execute that. But there are no means of controling concurrency. If you want to do thousands of instances of something, both APIs become essentially fork bombs.

                                                                            Dijkstra wrote down a blueprint for intuitive concurrency (P() and V()) which has been used in many languages for decades. I don’t understand why we have those funny looking things instead of what is tried and true.

                                                                            Even python went down the path of async wait. The result is a gigantic divider on any python codebase that uses. Any and every little IO operation becomes subject to this great divide. Feels like each time a line if code with IO on it comes, there’s a gun pointed to the head asking: sync or async?

                                                                            1. 2

                                                                              Sure, I agree that both mechanisms are bad, it’s just that async/await is worse. I much prefer the approach to concurrency taken by Elixir/Erlang. I don’t think, however, that semaphores by themselves are the only mechanism we need.

                                                                              1. 1

                                                                                What do you need more than a semaphore and a method to fork execution in two? You could trivialy implement a pool with it.

                                                                              2. 1

                                                                                Dijkstra wrote down a blueprint for intuitive concurrency (P() and V()) which has been used in many languages for decades. I don’t understand why we have those funny looking things instead of what is tried and true.

                                                                                P/V models a specific concurrency primitive usually known as a semaphore, right? As far as I understand them, semaphores are a useful tool, but don’t represent a solution to concurrent programming in general — am I mistaken?

                                                                                1. 4

                                                                                  You can model any concurrency problem using semaphores. That doesn’t mean you want to.

                                                                                  1. 2

                                                                                    It has been very long since I have red the paper. I don’t remember if it explicitly mentioned that some means of parelelize execution is needed at some point or that was assumed. Fork() spawn(), thread.new(). Whatever it looks like. The problem with old school multi process or multi threading was not the API, but rather the overhead. There is no reason why such an API could not be used with say, green threads. Eventlet does just that.

                                                                              3. 8

                                                                                Yeah this whole article reads like the author wanted to say “I find async/await new and unsettling” without saying those words. And the parallel example feels like a strawman: why would async/await make you forget that you want to wrap parallel work in Promise.all?

                                                                                I think it’s fine to say “I prefer the old ways” without needing some objective justification.

                                                                                1. 1

                                                                                  I think it’s fine to say “I prefer the old ways” without needing some objective justification.

                                                                                  In a professional setting, you need objective decisions to convince people. It’s very difficult to use your own preferences to change the style of other authors.

                                                                                  1. 4

                                                                                    Totally. This article is not that, tho.

                                                                                2. 1

                                                                                  The post cannot be summed up that way.

                                                                                1. 4

                                                                                  These are not languages which I can step away from and come back to 10 years apart without having to remember things or reading updates.

                                                                                  I don’t know a single language that this wouldn’t apply to.

                                                                                  1. 4

                                                                                    C. Though, not functional.

                                                                                    1. 3

                                                                                      common lisp and sml are very much applicable. frozen standard, multiple confirming implementations, changes mostly in libraries. even smalltalk qualifies that way. it is not that people program pharo very differently from how they did squeak or older implementations.

                                                                                    1. 2

                                                                                      I don’t care for cloud providers for my own stuff, regardless of whether or not it would benefit from it. I like to get a service for a price, not a rate - as I don’t know where it will end. My scale is quite smaller.

                                                                                      1. 1

                                                                                        Same, I don’t need multi-region redundancy for which I then have to write stuff according to the AWS framework. I just get some box for a fixed price with a guaranteed performance and move on. (It’s still backed by redundant server hardware, 24/7 hotline, raid 10, so it’s not like you need AWS for that.)

                                                                                      1. 2

                                                                                        I had an interest a few years ago in concatenative languages. I once was interested in how one could transform them into a more traditional representation, because if you could do that you could also provide typechecking for it.

                                                                                        Imagine doing a typed forth where it knows what a certain thing is because it ends up being passed into a certain word that takes some type T.

                                                                                        1. 1

                                                                                          What do you mean by a more traditional representation? Like into applicative notation? If so, then there’s certainly a way to do that, but the resulting applicative programs would be quite verbose, and ML-based type systems do not support the impredicativity required to properly type check stack-polymorphic higher-order terms. The MLF type system appears to sufficient, though.

                                                                                          1. 1

                                                                                            Sorry I should have specified. I mean a more traditional language like C or what-not.

                                                                                        1. 4

                                                                                          Author here. Ask me anything :-)

                                                                                          1. 2

                                                                                            Realizing I have been out of the game (reading papers like this) for a few too many years…

                                                                                            The meta function fancy-S - what precisely does it mean “set of unquoted stack identifiers contained in e”.

                                                                                            For example why is S(i) = {}?

                                                                                            Sorry if some of this is in the previous post that I don’t have time to read just now.

                                                                                            1. 1

                                                                                              The fancy S meta function accepts an expression as an input and returns a set as an output, where the output set contains all stack identifiers contained in the expression, but not contained within a quote, where a quote is an expression contained in square brackets.

                                                                                              S(i) = {} means that the meta function returns an empty set when applied to an intrinsic. This is so because intrinsics do not contain stack identifiers.

                                                                                              Does that clarify it at all?

                                                                                              No need to apologize! There were no uses of set notation in the previous post, anyways.

                                                                                          1. 23

                                                                                            Counterpoint: After years of ThinkPads, I’m far happier with my M1 MacBook Air. It was like having a veil lifted on what a laptop should be. No parlour tricks or half-baked gimmicks (i.e. bay batteries) or things that just aren’t useful anymore (i.e. media bays), just straight up portability - hours of battery life for years with great performance. Is the keyboard not the best? Sure, but it’s perfectly usable and I never think “oh, this isn’t good” (That, and my ThinkPad keyboards also weren’t spectacular to begin with either. They’re good at best, but not exceptional, and the quality varied a LOT.

                                                                                            1. 4

                                                                                              What I really like about the mac (I don’t use one anymore) was the ability to have home/end/pgup/pgdn functionality associated with the cmd key and the arrows. It is so natural to me that I think it should be pretty standard to have say the fn key (usually there is one) and the arrows do that functionality. Insert is useless to me*, Delete can be substituted by fn-backspace.

                                                                                              * unless it is a full keyboard, then I can use ctrl-ins, shift-ins, and shift-delete.

                                                                                              1. 5

                                                                                                What I like about thinkpads is the robustnes. I just grab the thing by the screen or something and take it to kitchen to make pizza and read or watch stuff on it, then shove it into a backpack and go away for a week with it, and I never worry about damaging it.

                                                                                                Granted, I never bought a new thinkpad. That may be part of it.

                                                                                                1. 5

                                                                                                  What I like about thinkpads is the robustnes. I just grab the thing by the screen or something and take it to kitchen to make pizza and read or watch stuff on it, then shove it into a backpack and go away for a week with it, and I never worry about damaging it.

                                                                                                  This might have been true for X220s or other models from this era but you cannot do that with Lenovo Ultrabooks like an X1. In fact, the X1 shows a lot more chassis flex than any MacBook.

                                                                                                  1. 3

                                                                                                    Hell, the thick models of the time had severe chassis flex. I have a T42 that bends like a willow tree if you pick it up by a corner - enough it would cause damage to the GPU on the board.

                                                                                                    Not to mention that the plastics on the X220/T420/etc were prob the worst of any ThinkPad. My X230t feels like it’s falling apart plastics wise.

                                                                                                    1. 2

                                                                                                      Chassis flex is part of what made them so robust. Like modern cars vs the steel death traps of yore

                                                                                                      1. 1

                                                                                                        That is also true. I haven’t had a chance to have a new ThinkPad (whether it’s the T or X series). I always got myself a used one. Which is probably another reason I felt ok with abusing them.

                                                                                                      2. 1

                                                                                                        I am actually thinking about a new laptop. I primarily use a desktop these days, but use a laptop on go. It is an old macbook air (2013) running windows only - great performance still I have to say, but it has limits and there is a screen cable issue with it.

                                                                                                        The framework laptop looked interesting, but not sure if I should.

                                                                                                        1. 2

                                                                                                          I’m still using a 2014 Macbook Pro that’s holding up ok, but the battery (replaced once) is giving up the ghost.

                                                                                                        2. 1

                                                                                                          Macbooks are pretty sturdy overall, I don’t think that’s a thinkpad-specific thing. The thinkpads look more robust, so maybe that adds to the impression though

                                                                                                      3. 4

                                                                                                        The M1 is huge for me. I’m at a desktop most of the time, and use barriers for it to work alongside, and it is great. I haven’t had it long, but the battery life and lack of heat are such a relief. My previous laptop got hot, was loud, and had poor battery life (x1e). It took me a while to get it setup to my tastes, but UTM virtualized linux is amazing. It cut compiles of aarch64 stuff I’m working with from 3 hours to a bit over 10 minutes. I don’t love the keyboard as I use a split ergo day to day, but I’ll survive. The m1 solves some of the basic problems I’ve had with laptops for the past few years, and I’ve had previous apple laptops and I have one from 2014 still in use with only a battery replacement. I’ve used lenovos over the same period and I don’t remember them ever being without their own issues. The author mentioning the pinebook is confusing. The limited RAM and CPU would rule it out for me. I tried to use an 8GB RPi as a desktop and with a web browser it just wasn’t realistic for me. I thought I was limping along until my laptop was repaired and realized just how bad it was and how it cut my productivity.

                                                                                                        1. 2

                                                                                                          I refrained from buying this thing because I thought all the comments were an exaggeration, but the M1 is indeed a shocker. It’s the first Mac device since probably the early Macbook Airs that feels great in all the areas that matter, with none of the useless gimmicks in between (butterfly keyboards, the single-usb-port ones, touch bar, etc). Really glad they got “back to the basics” with this one

                                                                                                        2. 2

                                                                                                          Plus, if you’re a Vim user (or use an editor that supports Vim emulation), HOME/END/DELETE/etc aren’t even desirable keys on a keyboard; they’re just wasted space.

                                                                                                          Personally I like the tradeoffs modern laptops offer: more portability when you need it, and when you’re at home, you’re presented with a wealth of customizable keyboards (down to the switches) that modern standalone keyboard manufacturers offer.

                                                                                                          If you’re really crazy, the Moonlander is even portable!

                                                                                                          1. 2

                                                                                                            Speak for yourself. I’m a vim user and I still prefer to use PgUp/PgDn - but I am actually ok with the placement left and right of the up arrow. It’s not ideal, but ok.

                                                                                                            Also I use enough text input in non-editors, so looking at only and IDE is kinda useles.. What about terminals, I scroll back all the time there?

                                                                                                            1. 3

                                                                                                              What about terminals, I scroll back all the time there?

                                                                                                              Are you aware of ^A and ^E?

                                                                                                              1. 1

                                                                                                                I find that highly unergonomic and not a proper replacement.

                                                                                                            2. 2

                                                                                                              The Moonlander is absolutely gigantic compared to some DIY travel split keyboards!

                                                                                                            3. 2

                                                                                                              Counterpoint: After years of ThinkPads, I’m far happier with my M1 MacBook Air.

                                                                                                              I wanted to write the same. After working with an M1 machine I cannot return to x86 laptops, the MacBook Air is so much better than any ThinkPad I used in the past (including X1 Carbon’s) that it is almost unfair to compare them. Also, I know what I’m getting with the MacBook, with a ThinkPad on the other hand, it’s like playing the lottery. Especially displays on ThinkPads ranged from garbage to adequate for the same model. But as a customer you had no influence on which display panel would eventually be built in, it might be a decent one, maybe not. The same goes for SSDs.

                                                                                                              1. 2

                                                                                                                The inability to get >16GB RAM in a MacBook anything drove me back to ThinkPad in 2018, after holding out for almost 2 years past the point where I really should have purchased a 32GB laptop, in hopes they’d be introduced on the Mac side.

                                                                                                                Especially displays on ThinkPads ranged from garbage to adequate for the same model. But as a customer you had no influence on which display panel would eventually be built in

                                                                                                                This has me unlikely to re-buy a ThinkPad on the next round. (I’m still living with my 2018 model.) I lucked out with mine compared to a coworker. And by all indications, it’s more of a lottery now, for both keyboard and display.

                                                                                                                I’m still not certain to return to the MacBook universe. But I’m probably done with Lenovo unless things really flip. I feel like I’m on borrowed time with a 4 year-old T480 and I’m really hoping it continues to serve my needs long enough for me to see what Framework does with their second gen and (hopefully) like it.

                                                                                                              2. 1

                                                                                                                That, and my ThinkPad keyboards also weren’t spectacular to begin with either. They’re good at best, but not exceptional, and the quality varied a LOT.

                                                                                                                Not sure which you tried, but I think people praise the last generation of non-chiclet Thinkpad keyboards way too much. The generations before that (ending with X201/T400) are the ones truly worthy of praise. The 7-row thing isn’t even that important to me but I find the tactility and sturdiness of those keyboards puts them in a class of their own.

                                                                                                                Some other benefits of old Thinkpads for completeness:

                                                                                                                • They cost about 1/10 what MacBooks cost, which makes me worry much less about losing my backpack or getting mugged. Also makes it practical to have multiple laptops in different locations or as backups.
                                                                                                                • Nice flat surface to write on when the laptop is closed
                                                                                                                • Taller screen means less hunched posture
                                                                                                                • Much broader software compatibility
                                                                                                                • More secure for certain threat models

                                                                                                                There are of course a lot of draw backs and overall increasing downside as the good generations get older and computing demands increase.

                                                                                                                1. 1

                                                                                                                  I used an X201 as my daily driver for a few years, plus I have many older models. So I’m a little tired of the default narrative of /g/ et al.

                                                                                                                  I can’t address all the claims because of how specific/ they are, but I will say: The X201 is fine, but it’s not noticeably better than say, my X230t’s or my X40’s. (My X40’s is a bit weird feeling in the era around the enter key, which I chalk up to age/abuse in its former life, so I won’t hold that against it.)

                                                                                                                  1. 1

                                                                                                                    personal preference I guess. FWIW I think the X40 keyboard is at least as good as X201.

                                                                                                                2. 1

                                                                                                                  I like my MacBook too! The author is mourning the dearth of high-end laptops that come in many different shapes and sizes though. It’s not that complicated: Apple has the sales volume to essentially monopolize the entire high-end laptop market, because it owns the chips and the OS preferred by most high-end users. And Apple only makes a few models at a time.

                                                                                                                  Some day, another company will challenge Apple in the high-end laptop market – maybe Samsung since they have the chip and OS expertise, or Microsoft since they already came pretty close with the Surface. And then there will be some variety again.

                                                                                                                  1. 1

                                                                                                                    I don’t think that’s quite the correct assessment, because workstation laptops absolutely exist and sell well. As have gaming laptops, which took off and can usually be built on the same platform as a workstation. I suspect he’s chuffed that they don’t have things like media bays anymore, when the situation and context around laptops have changed significant to discount them.