1. 5

    I am continually impressed by the quality of the guix website, and I think that if other GNU sites caught up to its design and clarity, the GNU project would be in a much better place.

    1. 6

      The Guile and Emacs websites are pretty nice.

    1. 7

      Has anyone submitted anything in the past? What’s the most comfortable framework for making games in Lisp/Scheme/etc? I ask as a curious person who is looking for a hygienic framework for creating games in. My issue is finding something that’s easy to cross-compile for other platforms (eg. I use Linux, but would want to compile for Windows friends). I have been mulling over Lua/love2d for a while but never committed since I would prefer a Lisp environment.

      1. 13

        You might like https://fennel-lang.org/

        1. 15

          I have participated in every one since 2018 using Fennel. The easiest way to get started IMO is using TIC-80 which has built-in support for Fennel and lets you publish your games to play in the browser, so no downloads are required: https://tic80.com

          Targeting love2d is another popular choice tho. It’s a lot more complex than TIC-80 but it also offers a lot more flexibility: https://love2d.org It’s harder to get love2d games to run in the browser but still really easy to cross-compile from Linux to Windows.

          (disclaimer: Fennel lead developer here)

          1. 4

            There’s even a starter kit for Love2D and Fennel

            https://gitlab.com/alexjgriffith/min-love2d-fennel

        2. 7

          Hello, jam organizer here. There have been lots of submissions from a variety of different Lisps in the past. You can check out the past jams on our wiki. Fennel seems to be a popular choice each jam, but I can’t say much more than that, as I am a diehard Common Lisp user :) For Common Lisp, there are a lot of partial solutions, as most people seem to be focused on building extremely general game engines rather than focused engines for a particular game/genre. This is expected in a way, as Common Lisp is extrememly performant, and there is no reason we need to be confined to C++ etc with Unity/Unreal/Godot…it just isn’t there yet though. I have been working towards that for a good 10 years now…but nothing worth announcing yet…anyway have fun regardless of which dialect you decide on!

          1. 1

            Thank you! I appreciate the insight. I have indeed looked at Godot in the past but felt it was too much for me to take on. I definitely want to try something out in Common Lisp, so the wiki you linked looks like a great place for me to start doing some research. Thank you for organizing this event!

          2. 5

            For 2D in Common Lisp, popular choices are Sketch and trivial-gamekit (apologies for self-plug). I, as an author of the latter framework, use travis/appveyor/github actions CI solutions to make builds for different platforms. If there would be any interest, I probably can arrange github action for building gamekit-based stuff for Linux and Windows. But otherwise, there exist examples for how to do that with travis and appveyor.

            1. 4

              Thank you! I don’t mind the self-plug, in fact I’m more inclined to check out your project for responding to my question! I will totally look into your library to see how it works now!

            2. 5

              Perhaps you might like CHICKEN; it is straightforward to compile static binaries, and cross-compiling to Windows (mingw) from Linux is also supported. There’s hypergiant, a game development toolkit, and on IRC you’ll find a few people interested in game writing too. In CHICKEN 4 we used to have a love2d-inspired framework called doodle, which shouldn’t be too hard to port to CHICKEN 5.

              1. 2

                I have been doing a bit of practice with Chicken and trying to get familiar with that environment. The cross-compiling is very appealing to me and I was actively looking at hypergiant. I might have to give that another shot!

            1. 11

              Gross, right? m4 is great for macros and includes. Not super fun for general programming. But, like immigrants, it gets the job done.

              Uh… what?

              1. 22

                I think it’s a reference to a lyric from Hamilton?

                [LAFAYETTE] Immigrants:

                [HAMILTON/LAFAYETTE] We get the job done

                https://genius.com/7862398

                1. 2

                  Huh. Cool!

                2. 9

                  I don’t know what’s more offensive: making light of the exploitation of immigrant labor, or referencing Hamilton.

                  1. 3
                    1. 1

                      Immigrants work hard?

                      1. 1

                        I think he is referencing the fact that immigrants are in many places known to be very hard workers and will “get the job done”.

                      1. 9

                        Interesting:

                        Unlike many other HAT projects, CaribouLite utilizes the SMI (Secondary Memory Interface) present on all the 40-pin RPI versions. This interface is not thoroughly documented by both Raspberry-Pi documentation and Broadcomm’s reference manuals. An amazing work done by https://iosoft.blog/2020/07/16/raspberry-pi-smi/ (code in https://github.com/jbentham/rpi) in hacking this interface contributes to CaribouLite’s technical feasibility. A deeper overview of the interface is provided by G.J. Van Loo, 2017 https://github.com/cariboulabs/cariboulite/blob/main/docs/Secondary%20Memory%20Interface.pdf. The SMI interface allows exchanging up to ~500Mbit/s between the RPI and the HAT, and yet, the results vary between the different versions of RPI. The results further depend on the specific RPI version’s DMA speeds.

                        1. 2

                          Whoa that is news!

                        1. 84

                          The network is the people, not a domain name. #lobsters is staying with Libera.Chat.

                          1. 6

                            freenode has taken over the #lobsters namespace*. I was in the channel directing people to the current place, but I’ve left to avoid any appearance of sanctioning freenode’s channel. Given how long we were present there may be some confusion, so I wanted to leave an explicit comment that, no, there is nothing on freenode that is in any way affiliated with any aspect of this website.

                            • Along with hundreds of others. And removed every banmask, which they’ll learn to regret pretty quickly.
                            1. 4

                              So basically Libera.Chat is an old-fashioned permanent netsplit, where every channel in the original network is also available there? I haven’t seen those in over twenty years!

                              1. 18

                                where every channel in the original network is also available there?

                                No. Communities that want to move to Libera will have to create the channels there as well, nothing is created/moved “automatically”.

                                1. 14

                                  I don’t think it’s like that; I will be shutting down all the freenode channels I operate as soon as the matrix bridge to Libera is operational. There will be stragglers, but I don’t know of any channels which are seriously considering remaining on freenode.

                                  1. 4

                                    Can you please explain why Matrix is such a killer feature for you? I keep seeing it mentioned, but I don’t know much about it, particularly how it is better/different than other chat technologies that have come and gone over the years (e.g. jabber).

                                    1. 5

                                      I use Matrix to bridge all my other cats together. I can get Signal, Telegram, Hangouts and Matrix all in one place (FB too until I abandoned that).

                                      My Google voice I recently moved to jmp.chat/XMPP and sadly the XMPP bridges to Matrix are lacking. I’ve started looking at biforst, but it’s super early alpha.

                                      1. 5

                                        I personally don’t care much about Matrix, but in the channels I operate, we have a decent contingent of users connecting from Matrix because they prefer not to have to set up a bouncer to get messages when they’re disconnected. For my own use, the bouncer setup is way better, but I’m trying to be accommodating for the preference of others.

                                        In theory, the idea of truly federated chat is awesome, but in practice everyone uses the flagship server and setting up your own homeserver is intensely unpleasant. So they have a long way to go to actually achieve the benefits of decentralization really.

                                        1. 1

                                          IMO the benefits are here if you use it as a glorified IRC bouncer. Yes I know there are plenty of those already but I’m too lazy to host one and I don’t want to pay for one.

                                          1. 2

                                            I agree it’s a serviceable bouncer, but the benefits of decentralization have nothing to do with that.

                                        2. 1

                                          Simple answer for me: Matrix is the IRC bouncer I always wanted but never had the discipline to keep running successfully.

                                          Persistent presence on all the channels I care about. Huge win.

                                  1. 11

                                    As mainly a Go and Rust programmer, I’m all for generics. But I would love some people in this github issue to travel back in time and talk to their past-self, when their past-self was explaining that “we don’t need generic in go”, “generics make the language hard to approach, and not as simple as Go is designed for”. (I’m paraphrasing)

                                    Anyway, I love this idea, this is good news. As my father used to tell me as a kid: “only morons never change their mind.

                                    1. 6

                                      My first foray into Go was in 2009 or 2010 when the first version became public. Couple years after that I was actually paid for writing it, building some pretty cool microservices that are still being used at my previous employer (maybe).

                                      I didn’t ever accept Go not having or needing generics. It was blindingly obvious from the start! The 63th time I had to write a Sort implementation or doing a map/reduce operation I was already bleeding from my retinas, staring at what felt like a completely moronic attitude at programming language design, feeling just abject despair at the boneheadedness of its designers. “Yeah, we aren’t sure how to do them”, they said. Well, I don’t know, Java had them, how about you ask the same guy who implemented them for Java (Philip Wadler). And that’s what they did!

                                      I am glad the Go designers reduced their ultimatum from a never to a maybe, because this is finally a programming language worth taking seriously.

                                      1. 8

                                        the Go team’s position has never been “never”. This is a proposal for adding generics from a member of the Go team from 2010: https://go.googlesource.com/proposal/+/master/design/15292/2010-06-type-functions.md

                                        their positions were generally of the form “let’s use the language for a bit before we add generics, cause they change a lot” and “all the proposals so far have been for some reason bad”. The idea that the Go team has a history of saying Go will never have generics is not true and has never been true.

                                        1. 2

                                          You’re right, it was not the Go team itself that presented this attitude! It was the community that developed a cargo cult of sorts around it. That was the weirdest part – the language authors were neutral, if slightly reserved, about generics, but the community for some strange reason had this die-hard anti-generics stance that made no sense at the time.

                                          1. 2

                                            True. The weird rejection of the idea of generics has largely been a community thing, not the core team. I have issues with some element’s of Go’s design (mainly around the lack of sum types necessitating all kinds of silly hackery), but the Go team themselves have always been pragmatic and non-dogmatic.

                                      1. 1

                                        You can use apple mail on Linux in the browser in the form of iCloud.com, surprised they didn’t mention this route.

                                        1. 8

                                          The author uses Gmail, not iCloud, as their mail provider. Mail.app is a generic IMAP/POP3/ActiveSync client.

                                          1. 2

                                            I use Apple Notes on iOS and then Notes in icloud.com on Linux. I haven’t found anything that works better. Ok, maybe beorg/mobileorg, but it’s not as effortless on mobile. Notes is damn near perfect.

                                            Does anyone know if there are any alternatives?

                                            1. 1

                                              It is also fully IMAP accessible, like most providers.

                                              iCloud contacts and Calendar are also accessible via carddav and caldav respectively. Though you need to generate an API access token on iCloud.com.

                                              I actually have really good experiences running my own Carddav and Caldav servers on iOS and MacOS. (God, I sound like such a shill these last few days! - macs are good but I really do prefer the commandline and tiling window manager ecosystem of Linux, personally)

                                              1. 2

                                                I actually have really good experiences running my own Carddav and Caldav servers on iOS and MacOS.

                                                Same here. It also works fine on Android. It’s a pain with Thunderbird though and I haven’t really found anything on Windows that works well with them.

                                                One of the huge things that Apple did for usability (and that Android somewhat copied) was to separate system services from the UI. The address book, calendar, spell checker, and so on are all system services that any application can use. On Windows, Office implements its own ones of these and I get the impression that there was a lot of pressure from the Office team 20 years ago to prevent Windows from implementing them and enabling competitions. Cocoa’s NSTextView is a joy to use and includes a complete (and completely configurable) typesetting engine that lets you flow text however you want, replace the hypenation engine, and so on. Windows’ rich text control is awful in comparison. As a result, everyone who needs anything nontrivial implements their own version and the UI is massively fragmented.

                                            1. 5

                                              It’s true that to add a new case you need to alter the switch statement. It’s still a very small thing to do, and it’s much simpler and easier to understand than the absurd inversion-of-control approach the author proposed.

                                              On the other hand, in languages with type classes you would be able to modify the branching logic without touching the original piece of code.

                                              1. 2

                                                Curious why you would consider ad-hoc polymorphism an acceptable solution but scoff at class-based OOP polymorphism as a solution?

                                                1. 1

                                                  It depends on n. If n is large class-based subtype polymorphism is a good solution, but for simple situations like these… I don’t know. I think Martin is generalizing here, but the example in the article is not the best one.

                                              1. 5

                                                I saw “Eclipse” and immediately felt a wave of sadness, but then I looked at the screenshots and it appears that they’ve done a good job of reproducing the overall UI from version 1. So nice work, probably the least-ugly Eclipse-based application I’ve ever seen!

                                                1. 14

                                                  Eclipse Theia is a fork of Visual Studio Code.

                                                  1. 2

                                                    Oh I see, so that’s why! Thanks, I had no idea that existed!

                                                1. 10

                                                  First they ignore you, then they ridicule you, then they make clumsy imitations of your features while claiming they came up with them.

                                                  1. 14

                                                    I don’t think they’ll ever again miss the point so spectacularly as when they added Option tho.

                                                    1. 4

                                                      Same question as I have for the parent: for someone not following what happens in Java and hasn’t come across any articles about this: what’s wrong with Java’s Option?

                                                      1. 9

                                                        My interpretation: Option is what you use when you have non-nullable references, but you want a Nothing value. But in Java, all references are nullable per default, so what does the Option provide? Now you have two Null values: null and Nothing. Ok, then you use NonNull<Option<A>> in concert with your IDE. But that is clumsy.

                                                        The proper solution would probably involve a new binding syntax, which would be non-nullable by default.

                                                        1. 6

                                                          The solution would be to add a type specifier or operator which creates explicitly non-nullable types and support that at language level because we can’t go back in time to make non-nullable a language default.

                                                          1. 7

                                                            I think C# is making good progress in that regard. Expect a badly copied version of that in Java 34, I guess.

                                                          2. 5

                                                            People always bring this up in discussions about Optional, it’s not a problem in practice. I’ve never seen someone try to return null on a method that returns an Optional and if I did it wouldn’t pass code review.

                                                            The proper solution, which is planned, is to change it to a “primitive object” that has no identity and cannot be null. This seems to be coming relatively soon considering Valhalla has been in the works for a while and this JEP popped up recently.

                                                            1. 3

                                                              primitive object

                                                              I wonder what will be the final name of this.

                                                              has no identity

                                                              I always found this Java-self-invented lingo pretty weird – if it’s possible to ask “is this identical to that”, it has identity. I think Java devs mixing up “same reference” with “identical” caused this confusion.

                                                              1. 2

                                                                Primitive object seems to be the final name, they started with value objects, moved to inline object, and then settled on primitive object. I’m not a huge fan of it but there was some rationalization on the mailing lists.

                                                                I always found this Java-self-invented lingo pretty weird – if it’s possible to ask “is this identical to that”, it has identity. I think Java devs mixing up “same reference” with “identical” caused this confusion.

                                                                This isn’t unique to Java, C# and Python use identity in the same fashion: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/objects#object-identity-vs-value-equality https://docs.python.org/3/reference/expressions.html#is-not

                                                                1. 1

                                                                  I guess it’s no coincidence that all those languages have problems with identity/equality around floating points.

                                                                  (Which is not about floating points in particular, but they serve as a nice canary to indicate that their approach to equality/identity is broken.)

                                                          3. 5

                                                            Multiple methods are implemented incorrectly and violate monad laws, causing weird behavior around null. But that is “works as intended”, because Java is “pragmatic”.

                                                            A minor nitpick is that Optional is not marked Serializable, making everyone’s life a bit more miserable than it had to be. (The explanation they gave for that was bullshit for various reasons.)

                                                            1. 3

                                                              I believe they forgot to make Optional be iterable, which breaks a lot of the properties it has in other languages.

                                                              1. 4

                                                                You can use Optional.stream(), which you can iterate.

                                                          4. 1

                                                            For those not following along, what are the issues with Java records?

                                                          1. 13

                                                            I remember when generics were being added to Java in 2004. All the why on earth do we need this, etc. At that point there weren’t many mainstream languages with true generics, you had C++ which had templates but wasn’t the same, then there was Ada and Eiffel, more niche…

                                                            It totally revolutionized Java as a language for the better. C# added generics as well a year later and I would bet that having generics is what made them such popular languages.

                                                            Go will significantly improve due to this, it will not be the same after that. Generic data structures, higher order functions, oh my! I will definitely return to Go after a long hiatus after this is out :)

                                                            1. 4

                                                              Eh, this is something I’ve always wondered: if I release software under the AGPL/GPLV3, does that bind only the licensees and not me, given that I own the copyright? I could develop proprietary enterprise features and not be obliged to release their sources, right, but not be bound by the license. This is allowed, right? So in theory I could have the following business model:

                                                              1. The software is free software under AGPL
                                                              2. I register a trademark for the software, so others can’t redistribute the software under the same name without explicit permissions
                                                              3. I offer closed source proprietary “enterprise features” that don’t really respect the AGPL, but I don’t have to
                                                              4. I can also offer commercial proprietary licenses to users that don’t want to license under the AGPL

                                                              Right, this is a bit lawful evil, and it wouldn’t be my ideal business model. I would prefer offering services and support (hosted SaaS offerings etc.) instead of this but the model above is definitely easier to make money with, if it’s legal.

                                                              1. 10

                                                                Eh, this is something I’ve always wondered: if I release software under the AGPL/GPLV3, does that bind only the licensees and not me, given that I own the copyright? I could develop proprietary enterprise features and not be obliged to release their sources, right, but not be bound by the license. This is allowed, right?

                                                                Yes, but there’s a big catch: if you have accepted contributions from third parties who licensed their changes under the GPL and retain copyright, those changes virally “infect” your own code within the project, too. So you can distribute a project under a GPL-family license and change the license terms at your pleasure, if and only if you never accept outside contributions. And that’s a good thing IMO.

                                                                1. 1

                                                                  Yes, right, that’s the caveat. Suppose I get contributors to sign some sort of CLA granting me the copyright? Again, lawful evil, but that would be the way around it?

                                                                  For this very reason, CLAs are evil incarnate, because such contributors would essentially be working for me for free.

                                                                  The only “CLAs” I’ve ever signed are the FSF ones. The FSF is probably the only entity in the world to which I’d gladly transfer my copyright.

                                                              1. 20

                                                                The compsci tag probably covers this, I think?

                                                                1. 0

                                                                  I don’t really see “CompSci” as covering an article about the polynomial time algorithm for identifying whether a number is prime, but maybe that view is coloured by being a PhD in math who has ended up doing a lot of computing.

                                                                  1. 13

                                                                    If that isn’t computer science, I don’t know what is. Granted, that’s closer to maths than most of it, but it’s still stereotypically computer science.

                                                                    1. 3

                                                                      That sounds very much like computer science to me.

                                                                      1. 3

                                                                        IMHO as soon as you’re determining the time or space an algorithm requires, you’re in the realm of CompSci. After all, those metrics only work in a framework where you compute :-)

                                                                        (but that may be my German-colored view of CompSci, which is rooted in math and depending on the department, in math only, unlike other regions where CompSci has a closer relationship to electrical engineering)

                                                                    1. 5

                                                                      This article nicely illustrates how easy the git email flow is for developers/contributors, but how about for maintainers?

                                                                      For instance, how do I easily apply a patch sent to me, if I use the gmail/fastmail web interface? If web-mail is frowned upon, does it work if I use thunderbird/outlook/something-else? Or does it basically require me to use mutt?

                                                                      How about managing different patches from different sources at the same time? Github conveniently suggests you create a local copy of the PR’ed branch, meaning you can easily change between different PRs. How does this work with git email flow? Do I just create those branches myself, or is there an easier way to do it?

                                                                      What about very large patches? I recently applied a code formatter to a project I contribute to, resulting in a 4MB diff. Not all email clients/servers handle arbitrarily large files well.

                                                                      I’ve seen enough descriptions about how git-send-email works from a contributors perspective, but I would really appreciate it, if someone would write down how they then receive and review patches in this flow.

                                                                      1. 6

                                                                        Although his workflow is obviously not representative of most maintainers, Greg K-H’s writeup was nonetheless fascinating.

                                                                        1. 1

                                                                          That does indeed look fascinating, and like it addresses some of my questions. Will take a closer look later.

                                                                        2. 6

                                                                          As long as your e-mail client/interface doesn’t somehow mangle the original message, the simplest solution would probably be to simply copy the message as a whole and then run something like xsel -ob | git am in the repository. I’d reckon this is much easier than setting up some more UNIX-like e-mail client.

                                                                          1. 3

                                                                            For instance, how do I easily apply a patch sent to me, if I use the gmail/fastmail web interface? If web-mail is frowned upon, does it work if I use thunderbird/outlook/something-else? Or does it basically require me to use mutt?

                                                                            You can certainly use mutt or Gnus if you want. Most projects using git-by-email use mailing lists, some are fancy with download buttons to get the patches. Most of the time you can pass the output of curl fetching the mailing list page directly to patch. Quoting the manual

                                                                            patch tries to skip any leading garbage, apply the diff, and then skip any trailing garbage. Thus you could feed an article or message containing a diff listing to patch, and it should work.

                                                                            I’ve done this as recently as this week, when I found an interesting patch to u-boot.

                                                                            If a mailing list or other web view isn’t available, then you can either set one up (patchwork is the defacto standard) or find a client that doesn’t break plaintext emails. Last I checked, receiving patches via Gmail’s web interface was difficult (but sometimes possible if you hunt down the “raw message” link), I haven’t checked Fastmail. If you don’t want to use a TUI or GUI email client, you can configure getmail to only fetch emails from specific folders or labels, and that will create mbox files you can use with git am.

                                                                            How about managing different patches from different sources at the same time? Github conveniently suggests you create a local copy of the PR’ed branch, meaning you can easily change between different PRs. How does this work with git email flow? Do I just create those branches myself, or is there an easier way to do it?

                                                                            Branches are lightweight, create them for however many things you want to work on at the same time. I usually don’t use branches at all, instead using stgit, and just import patches and push and pop them as needed.

                                                                            What about very large patches? I recently applied a code formatter to a project I contribute to, resulting in a 4MB diff. Not all email clients/servers handle arbitrarily large files well.

                                                                            You can breakup that work into smaller chunks, to avoid too much disruption to other patches that might be in flight. Nothing stops you from linking to an external patch, though I would probably prefer instructions on how to run the tool myself, and just forgo the patch in that case.

                                                                            1. 3

                                                                              What about very large patches?

                                                                              git request-pull can be used for this purpose, it generates emails with a URL from which the reviewer can pull the changes. It’s generally used for subsystem maintainers in large projects to merge their (independent) histories upstream, but it can also be used to handle large changes which would be unwieldly in patch form.

                                                                              1. 2
                                                                                1. 1

                                                                                  I wondered about the same thing. After a very long unfruitful search on the internet, @fkooman pointed me to git am - Apply a series of patches from a mailbox, which pretty much takes care of everything. It would have been helpful if git-send-email.io had a pointer to that, or maybe I missed it..

                                                                                1. 12

                                                                                  Ah, of course, in Emacs one would just do C-x v d to open VC Directory Mode, go to the first removed file, hit M to mark (i.e. select) all files with the similar status to mark all files that have been deleted. Then C-x v u (vc-revert) to undelete those files.

                                                                                  edit: the joke

                                                                                  1. 3

                                                                                    I think this guide is otherwise good, but I think it should start at the package-initialize section, anything else before that are just matters of taste and are tangential to the point of the guide, i.e. configuring a Common Lisp editing environment. Not to mention it refers the user to enable displaying line numbers, which is an Emacs anti-pattern.

                                                                                    I bet people are going to ask why it is an anti-pattern, so here goes. Disclaimer: I know many people are used to have line numbers visible in other editors, and such a preference is usually deeply personal, so I’m trying my best to not sound patronizing here.

                                                                                    In Emacs, you usually shouldn’t need to navigate by line number, because Emacs should be able to take you to those places automatically. For instance, compilation errors, Emacs has the built-in compile-mode which will automatically create a global keybinding to next-error (which would be M-g g), and that takes you directly to the offending line. Similarly, if you’re used to jumping to a function you see at a point before the position of the cursor, you should use functions like beginning-of-defun (bound to C-M-a). See the relevant section in the GNU Emacs FAQ.

                                                                                    Besides, line numbers can occupy significant horizontal space. So by not using them, you gain lots of needed horizontal space, and can keep more buffers open side-by-side.

                                                                                    1. 1

                                                                                      Plus, at least last time I used them, line numbers slow Emacs down significantly. That’s what made me originally stop using them and before long I didn’t miss them at all.

                                                                                      1. 1

                                                                                        Sorry, the keybinding for next-error is actually M-g M-n. M-g g is goto-line.

                                                                                      1. 14

                                                                                        The growing bloat on the web really kills websites for me. One recent example is the new reddit design, which made me quit it altogether (among other reasons).

                                                                                        Why does it always need to be lazyloading Ajax-crap? JS-generated transitions are always horrible and clunky. Let’s hope there will be a move towards a more sustainable and suckless direction at some point in the future.

                                                                                        You don’t need Javascript in many many cases, and if you do, a few kB will do just fine. And you don’t especially need it for overloaded UI-orchestration past the UI-model the browser provides and is optimized for.

                                                                                        1. 6

                                                                                          old.reddit.com still works fine; say about the new UI what you want, but at least they’re not forcing it upon you.

                                                                                          1. 3

                                                                                            The new Reddit redesign is such a disaster. After clicking on a post, I frequently find myself scrolling the background (the list of posts) rather than scrolling through comments in the post itself. It frequently takes many seconds for the website to respond to clicks on ridiculously powerful hardware. Scrolling through subreddits with many image posts bogs down the site completely, probably because infinite scrolling + lots of images and gifs + no technical competence is a predictable disaster. Searching in subreddits literally doesn’t work; when I search something, more often than not, the site will just say ‘No results found for “”’.

                                                                                            I obviously mostly use the old website (which is also a design disaster in many ways, but at least it works). I just don’t understand how a team could see the result that is the redesigned website and be happy with it.

                                                                                            1. 6

                                                                                              You bring up really good points and explained the problem well! It’s especially shocking when you browse the modern web with an older computer. I booted my old Mac mini from 2008 and was really sad to see that it was impossible to browse the web without massive lag and problems (text-only and light sites were just fine). Do we really want to waste all our advances by just keeping up with more and more useless cruft that brings essentially zero benefit to the end-user?

                                                                                              A good case is YouTube: They’ve stuffed their video pages with megabytes of Javascript, Canvases, AJAX-magic and whatnot, and even though it’s probably 4 orders of magnitude heavier than the video page from 10-13 years ago, it essentially does the same thing, while actually being worse at it, because it’s often unbearably sluggish and clunky. I often press the “back” button in my browser to return to the previous video, only to find out that their “history-emulation” in Javascript failed to keep up.

                                                                                              1. 6

                                                                                                I just don’t understand how a team could see the result that is the redesigned website and be happy with it.

                                                                                                There are millions of web programmers in the world. I doubt 95-99% of them would ever be an engineer if not for the current job market offering good career prospects, rather than being an engineer at heart.

                                                                                                The rush and the satisfaction of doing a good piece of engineering just doesn’t resonate with these people. Working in a company with hip factor, perks, following js-trend-du-jour because it’s trendy rather than for its technical merits, and a pay check. This is what the majority of the developers (specialy web developers due to lower entry barrier) care about. Never do they stop 5 minutes and think: “why are we doing this? what value does this provide to society? What are the advantages and disadvantages of switching a legacy product with a new flashy one with a material design UI, even if 1000 times slower?”. These essential questions don’t matter for the bulk of web developers. What matters is a pay check and a quasi-religious sense of belonging to the users of this or that stack, preferably one generous handing out t-shirts (see hacktober fest fiasco) and/or stickers.

                                                                                                Why writing a clean, elegant piece of software in C or pascal, well though with strong theoretchical foundations, if you can hack together a buggy, yet flashy version with deno and get thousands of github stars? Who cares about code elegance… pfff… github stars man! That’s where is at!

                                                                                                1. 9

                                                                                                  I can replace the word “web” with “C” and substitute the relevant misgivings with those from a 80’s die-hard assembler/ALGOL/Lisp programmer to make it sound like it was from 1991. Your comment would still be just as ridiculous as it is now.

                                                                                                  1. 5

                                                                                                    s/ridiculous/true/

                                                                                                    :-P

                                                                                                    1. 2

                                                                                                      I strongly disagree with you there. C vs assembly actually provides a lot of benefits with minimal losses in regard to performance, and back in the 90’s, we didn’t have this hipster-culture around it that we see today with web-development. @pm is spot-on with his analysis, in my opinion.

                                                                                              1. 1

                                                                                                w.r.t the lack of package management for Guile, have you looked at akku.scm?

                                                                                                1. 2

                                                                                                  Yeah. And guild hall as well. Akku is the more promising one, but I think the problem is it will take some years it gains the momentum of something like Quicklisp. That’s probably a never though. For Guile I think Guix is the best option since with it you can combine C builds effortlessly, but for scheme in general Akku seems very, very promising.

                                                                                                  Huh, I totally forgot to mention in the blog entry that CHICKEN is also a fantastic scheme implementation. Guile is a bit easier on the developer, but if you look close enough, they both are very practical though CHICKEN is more standalone, and I think there are some German companies actually using it in production.

                                                                                                  1. 1

                                                                                                    I love CHICKEN as a Scheme implementation. The package manager there feels quite a bit more like Quicklisp than, say, Akku. Gerbil/Gambit is another Scheme I’m fond of, though it lacks the community aspect I associate with CHICKEN.

                                                                                                1. 4

                                                                                                  Small error in this: It says the latest Scheme version is R6RS, when R7RS-small has been finished for years. Not intending to bring up the R6RS/R7RS debate, just wondering if it was a typo or such.

                                                                                                  1. 4

                                                                                                    Yeah I totally forgot about R7RS, I was just trying to compare specification sizes in terms of pages. R7RS is even smaller at 20-somrthing pages, but the point was the two orders of magnitude in page count.

                                                                                                  1. 3