1. 8

    You see, one of the biggest problems with a Linux distro or any large system is bootstrapping. At some point you get to the point where you need a previous version of your tooling to build the current version. This is not really desirable as it ultimately can become a very difficult to break build loop. Because of this, xbps-src is in fact not a binary, it is a collection of very intricate shell scripts that use standard tooling available on almost any Linux distribution to bootstrap a compiler, build chroot, and XBPS itself.

    It’s cool that their build system is a bunch of shell scripts that will run on any Linux distro. I wrote about some related stuff here in January [1]:

    • Alpine’s abuild script is also a pure shell script – a pure busybox ash script! But it doesn’t run on anything besides Alpine.
    • Debootstrap is a shell script that also only runs on Debian (as far as I know). I believe building Debian packages (as opposed to the base image) requires a lot of native / non-shell tools.
    • Aboriginal Linux is a bunch of pure shell scripts as well.

    So it sounds like I should download xbps-src and try it out with Oil :)

    However, I also don’t think the bootstrapping issue is as big a deal as he thinks? Because you want/need some kind of isolation anyway. You don’t want your build platform leaking into your binaries, i.e. a Void package built under Debian or Alpine should not be different than a Void package built under Void.

    The usual solution for Alpine is to download an Alpine image and build packages there; likewise for Debian you download a Debian image. And this image can generally be a chroot – i.e. you don’t need a dedicated piece of hardware (or a VM, or a Docker container). (However I wish that Alpine would make the chroot story more straightforward. It doesn’t feel “first class”.)

    Without the chroot or similar to pin down the versions of your build toolchain, I think it’s hard to solve the “reproducibility” issue. I don’t know exactly how Void Linux does it, but I am a bit confused by the description. You still need two stages to build, and it’s natural to use your own distro as the first stage, rather than some other distro.

    Linux From Scratch has the steps “preparing the host system”, “constructing a temporary system”, and “building LFS”.

    http://www.linuxfromscratch.org/lfs/view/stable/

    [1] Success with Aboriginal, Alpine, and Debian http://www.oilshell.org/blog/2018/01/15.html

    1. 6

      Void’s build system uses isolation to build packages. From readme [1]:

      xbps-src requires an utility to chroot and bind mount existing directories into a masterdir that is used as its main chroot directory. xbps-src supports multiple utilities to accomplish this task:

      • xbps-uunshare(1) - XBPS utility that uses user_namespaces(7) (part of xbps, default).
      • xbps-uchroot(1) - XBPS utility that uses namespaces and must be setgid (part of xbps).
      • proot(1) - utility that implements chroot/bind mounts in user space, see https://proot-me.github.io/.

      NOTE: you don’t need to be root to use xbps-src, use your preferred chroot style as explained below.

      I’m very slowly developing a Linux distribution using xbps-src. I can build a (still quite useless) squashfs image without root privileges [2].

      [1] https://github.com/voidlinux/void-packages/blob/master/README.md

      [2] https://github.com/hadrianw/tomatoaster

      1. 4

        Wow totally unrelated but “an utility” sounds so wrong. I didn’t realize there were words starting with vowels that don’t use “an.” Apparently it’s words starting with vowel sounds that get an “an.” Utility, as well as words like user and euphemism, phonetically start with a y sound and therefore don’t use “an.” Crazy that I knew that intuitively, but until I read “an utility” just now I would have said “an” goes before words starting with vowels. I had thought “an hour” and a few other h words were the only exceptions. Weird.

      2. 5

        The bootstrap process is done by building a meta-package base-chroot (https://github.com/voidlinux/void-packages/blob/master/srcpkgs/base-chroot/template) and its dependencies using the tools available on the host. After the bootstrap xbps-src uses base-chroot to create clean/void environment which can be used to build all the packages available.

        1. 1

          OK thanks for the info. I guess my point is that this is very much like other Linux distros, including Alpine, and even Debian.

          At least this is true in theory – I don’t see that Void necessarily has a unique take on bootstrapping. But in practice it might be better, because with the distros I’ve tried this area feels a little like undocumented black magic that only the core devs know about.

          I have used: https://github.com/alpinelinux/alpine-chroot-install

          But I haven’t yet rebuild a lot of packages under it.

          1. 2

            Voids take reminds me more of netbsd here, which isn’t a huge surprise given who started it.

        2. 3

          Also if anyone is interested in trying Void build scripts with OSH let me know :-)

          https://github.com/oilshell/oil/issues/92

          I’m not familiar with Void Linux, but it sounds BSD-ish and interesting.

          1. 2

            I’ve actually been using fpm to do a lot of my packing as of late, rather then dealing with deb scripts and RPM spec files. fpm does things amazingly well for most use cases.

          1. 5

            See Vala (programming language) on Wikipedia. It’s a language for GNOME that’s C#-like and compiles to C. I would like to recommend to the author to ask a native speaker to proof-read the book. It’s quite readable, but the lack of articles is a bit distracting (I know this is hard).

            1. 2

              Also worth noting is that it compiles to C with GObject at the center of it’s object system. It has it’s benefits like quite easy interfacing with dynamic languages, but for me GObject is too crazy. Maybe I’m prejudiced, but it’s like painfully manual C++ although more dynamic. At this point for me it would be better idea to just write in C++.

              However Vala hides all this, so mostly one sees good parts.

              1. 1

                Yes, but I don’t want to throw technical details at first without even writting a simple hello, world program.

                Yes. Hence I submitted link over here. Someone who has good experience with Vala can take a look.

              1. 8

                I’m working on the long overdue refactoring of my text editor [0] code base. Currently I’m reimplementing underlying data structure [1] of file buffer. I’m prone to over-analyzing.

                Apropos over-analyzing: After I read the post about BF interpreter in Zig I thought about programming languages. I’m wondering why something like Pascal’s Subranges [4] is not more present in modern programming languages. I like where Wuffs’ [5] is going, but wonder if it would be also a good fit for a general purpose language.

                I was thinking about a language that could look like something like this:

                struct Buf {
                    len int<0:.size> = 0// len is an integer within 0 to .size, by default 0
                    size int<0:> = 0 // size is an integer within 0 to INT_MAX, by default 0
                    // data is a pointer to array of chars with write bounds to .size and read bounds to .len
                    data *[<:.size>]<:.len>char = null // by default null
                }
                
                var x Buf
                x.data = &[28]char // allocate 28 char array
                print(x.size) // 28
                print(x.len) // 0
                //print(x.data[0]) // error
                x.data[0] = 'a'
                print(x.len) // 1
                print(x.data[0]) // a
                

                Is the reason for lack of such language features is that it’s prohibitive in cost of compilation? I think that it would be all checked at compile time. When compiler would be unable to prove safe access (initialized data) it would require adding a run-time check like in Wuffs. Bounds could be also added to function parameters.

                [0] https://github.com/hadrianw/werf

                [1] https://gist.github.com/hadrianw/4447052496bd019ea4a8eea7fef868af

                [3] https://lobste.rs/s/vjh6ni/how_zig_do

                [4] http://wiki.freepascal.org/Subranges

                [5] https://github.com/google/wuffs/blob/master/doc/wuffs-the-language.md

                1. 2

                  If I’m understanding correctly, you want to describe what range of data is allowed in a way that’s checked at compile time or a runtime check is automatically generated. Ada does that with range types among many other things. The Clay language adds those features, linear types, and singleton types to a C-like, system language. Modula-2 and Modula-3 had subranges, too. The former was probably fast given it’s a Wirth language originally compiled on a PDP-11/45. Latter tried to avoid bloat in other languages like C++. Aside from Ada and Clay, I can’t remember if others were checked statically or always at runtime. The Design-by-Contract languages can do that property plus more with compile- vs run-time implementation-dependent. Wuffs’ looks like it falls in the DbC category. Thanks for that link.

                  1. 1

                    Thanks for the links.

                    I was thinking about Ada lately. But thought that mostly it’s under GPL without linking exception. But it’s not the case: https://news.ycombinator.com/item?id=16588483#16599489

                    Clay seems dead.

                    I have to read more on DbC.

                    Wuffs is quite low level. It does not emit bounds checks, only checks if it can prove that access is safe. Programmer has to add them himself. It may get tedious, but it’s then already easier than in C.

                    I think that more languages should consider arrays or strings as first class objects. So bounds checks should happen less - not on every access. I know that with generators it’s often the case - the check is only at the beginning. Compilers should also optimize operations on strings/arrays (maybe they are already). For example concatenation like:

                    foo = bar + baz + qux
                    foo += str(23)
                    

                    Should be done as single allocation and copying.

                    1. 1

                      Every language is dead when nobody uses it. ;) The language was academic project that got used experimentally by Wittie a bit but otherwise isn’t developed. Doesn’t mean there’s not stuff worth imitating. The Ada language is certainly the best design-wise if you want safety or maintainability all the way. The linked comment confirms last night’s suspicions that GPL version is something they threw together on the side: it’s a pain to install. I got GNAT (compiler not IDE) but not SPARK working so far. Will try again soon.

                      The Design by Contract started with Meyer’s Eiffel Method in the 1980’s. It’s top contender with Ada given its IDE, test generation from specs, proving of specs, etc. You can embed contracts into other languages in functions or OOP constructors/destructors, through. Here’s an overview of the approach describing benefits. hwayne also did a write-up comparing several languages, including D. If a language has metaprogramming, in theory one could flip a switch on which are compile-time, runtime checks, and/or tests.

                      Far as compiler optimization, well that’s just mostly about how much work is put into the compiler. Since so much went into C ecosystem, I advise people making new languages to stay compatible with C or even produce C. In this case, the language would have an option to output C to go through a compiler like LLVM that can probably handle that. I have no idea what the various safe languages can do in terms of optimization, though.

                1. 13

                  This post was fantastic! Super well written and super interesting. I really liked the strategy of showing the same code over and over again with minute changes.

                  1. 7

                    Thanks! I worry about that being too repetitive, but I do really prefer it when the steps are shown methodically and not elided… it’s just too easy to skip the wrong thing, thinking “oh everyone knows that bit” but maybe some people don’t and suddenly you’ve lost a chunk of people.

                    1. 6

                      It’s great. It’s like watching a video of someone coding, but with advantages of a text medium.

                      I also never thought of a Brainfuck interpreter as a good Hello World type of a project. It’s actually quite a practical example - memory initialization, strings, basic io, parsing, error handling. Now that I think about it, I would like to explore the same for Rust, Pony and some Lisp variants.

                      1. 3

                        It was a great writeup. Brainfuck is only drawback given it’s intentionally designed to give folks a headache. I used to recommend folks do these examples on p-code or Forth for easier to follow interpreter or just more useful. Be interesting to see p-code or Forth done like this Zig write-up in Zig itself or another language.

                  1. 2

                    eBPF is a very cool technology. LWN did a great introduction about it [1]. The tooling is getting mature with BCC.

                    I for one think about how eBPF bytecode and verifier could be used outside of Linux kernel. It’s a thin and easily JIT-able architecture, designed to run untrusted code.

                    [1] https://lwn.net/Articles/740157/

                    1. 3

                      I’m so glad I moved to my own domain, own email, own calendar, own contacts, own backup, own you-name-it server. I replaced every conceivable cloud provider that I was consuming and to this day I am very glad that I took the time to do it because it’s shit like this that I get to chuckle at.

                      I highly encourage anyone who depends on any cloud provider to ask yourself this: do I like the service I’m being provided? Are there alternatives I could run myself? It’s questions like these that led me to obtain the experience I needed to land a job.

                      1. 1

                        Could you expand?

                        Where do you host your services? How much time did it take for you to set it up? How much maintenance does it need? Also did you have any problems with mobile?

                        Lately outside of mail I’m thinking about photos hosting. I would like to tag photos and a camera icons dedicated to certain tags.

                        1. 2

                          Sorry, let me clarify one point: I do rely on one cloud provider: DigitalOcean. I run my email, contacts, and calendar services within a droplet on DigitalOcean. I routinely have backups scpd from the VPS to my local machine which has a 8 TB RAID setup, which is where I backup other things as well. I also run my own webdav service which allows me to sync up documents between my laptop and iPhone.

                          I could technically avoid the reliance on DigitalOcean if I purchased my own hardware and placed it into a colocated datacenter, but that would be costly, and it kind of goes a bit beyond the idea of no cloud provider dependency. I’m fine with relying on DigitalOcean because I know that I have backups in case I need to switch to a different provider.

                          I also purchase CDs and import them to iTunes then sync them onto my iPhone. The frustrations of dealing with bad LTE coverage led me to make this choice a long time ago, and I’ve been happy ever since.

                          1. 1

                            I am on fastmail and it works just fine. Comes with mail, contacts, calendar and cloud storage.

                            1. 1

                              But that’s not what OP meant, is it? Replacing one provider with another is not “my own domain, own email, own calendar, own contacts, own backup, own you-name-it server”. Also he said: “I replaced every conceivable cloud provider”.

                              1. 1

                                I think there is a big difference between fastmail and google, namely that fastmail is not an ad company and you pay for your mail/calendar etc.

                        1. 3

                          I’m also very happy with the (relative) easy of use OpenBSD.

                          I missed the existence of Void. Is there any real advantage over Debian besides no-systemd?

                          1. 8

                            To each its own poison. But I like void because

                            • It is a rolling distro, if you are into that kind of stuff.
                            • It has packages for openbsd programs variants e.g. netcat, ksh and doas.
                            • the default network setup uses dhcpcd hooks and wpa_supplicant, so you can avoid networkmanager
                            • it has a muslc variant, but many packages are not available for that
                            • $ fortune -o void

                            The tools for package cross compile and image building are pretty awesome too.

                            1. 3

                              While there are more packages for the glibc variant than the musl variant, I would not characterise this as “not many packages”. Musl is quite well supported and it’s really only a relatively small number of things which are missing.

                              1. 2

                                Thanks!, will try it next time when OpenBSD isn’t suitable.

                              2. 6

                                Void has good support for ZFS, which I appreciate (unlike say Arch where there’s only unofficial support and where the integration is far from ideal). Void also has an option to use musl libc rather than glibc.

                                1. 5

                                  Void has great build system. It builds packages using user namespaces (or chroot on older kernels) so builds are isolated and can run without higher privileges. Build system is also quite hackable and I heard that it’s easy to add new packages.

                                  1. 1

                                    Never tried adding a package, but modifying a package in my local build repository was painless. (specifically dwm and st)

                                  2. 3

                                    Things I find enjoyable about Void:

                                    • Rolling release makes upgrades less harrowing (you catch small problems quickly and early)
                                    • High quality packages compared to other minimalist Linux distros
                                    • Truly minimalist. The fish shell package uses Python for a few things but does not have an explicit Python dependency. The system doesn’t even come with a crond (which is fine, the few scripts I have running that need one I just put in a script with a sleep).
                                    • Has a well maintained musl-libc version. I’m running musl void on a media PC right now, and when I have nothing running but X, the entire system uses ~120MB of RAM (which is fantastic because the system isn’t too powerful).

                                    That said, my go-to is FreeBSD (haven’t gotten a chance to try OpenBSD yet, but it’s high on my list).

                                    1. 1

                                      I’d use void, but I prefer rc.d a lot. It’s why I like FreeBSD. It’s so great to use daemon_option= to do stuff like having a firewall for client only, to easily run multiple uwsgi applications, multiple instances, with different, of tor (for relays, doesn’t really make sense for client), use the dnscrypt_proxy_resolver to set the resolver, set general flags, etc.

                                      For so many services all one needs to do is to set a couple of basic options and it’s just nice to have that in a central point where it makes sense. It’s so much easier to see how configuration relates if it’s at one single point. I know it doesn’t make sense for all things, but when I have a server, running a few services working together it’s perfect. Also somehow for the desktop it feels nicer, because it can be used a bit like how GUI system management tools are used.

                                      In Linux land one has Alpine, but I am not sure how well it works on a desktop. Void and Alpine have a lot in common, even though Alpine seems more targeted at server and is used a lot for containers.

                                      For advantages: If you like runit, LibreSSL and simplicity you might like it more than Debian.

                                      However I am using FreeBSD these days, because I’d consider it closer to Linux in other areas, than OpenBSD. These days there is nothing that prevents me from switching to OpenBSD or DragonFly though. So it’s about choosing which advantages/disadvantages you choose. OpenBSD is simpler, DragonFly is faster and has recent Intel drivers, etc.

                                      For security: On the desktop I think other than me doing something stupid, the by far biggest attack vector is a bug in the browser or other desktop client application, and I think neither OS will safe me from that on its own. Now that’s not to say it’s meaningless or that mitigations don’t work or that it’s the same on servers, but it’s more that this is my threat model for the system and use case.

                                    1. 4

                                      At a glance it seems okay, but I guarantee those colour choices will look like crap on a light background. For most (all?) testing frameworks I’ve used that output in colour, I always have to find the “no colour” option or else I can’t read it.

                                      1. 2

                                        I support I sort of consider it the user’s responsiblility to have configured a color scheme where most colors are readable. However, it would be both easy and a good idea to make it possible to configure the color scheme (at least from the source code), and I should probably add an option to output without colors (and enable that option by default when the output is not a TTY).

                                        1. 3

                                          I use solarized light, and nearly everyone these days uses some form of dark colour scheme. The output from the Catch2 testing framework, for example, is mostly unreadable with the colour choices. In other cases, I’ve run across similar problems.

                                          If you’re going to offer colour output, I think you need to have an option to turn it off. (And I see that you’ve added #ifndefs around them.) If/when this ever gets a main function to manage test suites (most serious ones do), don’t forget the --color=no option.

                                          1. 2

                                            I added support for theming first because that was very easy to add.

                                            I just pushed a commit to add support for –no-color (and which disables color when stdout is not a TTY and such): https://github.com/mortie/snow/commit/c41d869c613a3a587279c6f833f74c609cb3bbf5

                                            The commit after that adds support for the NO_COLOR environment variable mentioned by @mulander.

                                          2. 3

                                            @jcs created http://no-color.org/ to propagate a consistent option to disable colors.

                                            1. 2

                                              Looks like I get to be the first software to support NO_COLOR on that list :)

                                          3. 1

                                            I always wanted a terminal which would automatically corrected colors based on contrast. At least a separate color scheme for default background color.

                                            It should not be that hard, maybe I could add PoC using suckless’s st to my overly long TODO list…

                                            1. 1

                                              It’s actually quite readable in black on white. Though I agree with the general sentiment, and it’s probably quite a bit worse on a yellowish background.

                                            1. 1

                                              Goddammit what we need for rapid-development cross platform apps is wall of text describing what we need Flutter on desktop.

                                              1. 1

                                                Could you expand on why Flutter? It can be a wall of text.

                                                1. 2

                                                  Not necessarily flutter itself, but something quite like it. Something to use to build tooling and applications. What I’m looking for is:

                                                  • A sensible, easily-learned syntax and semantics for existing working programmers who aren’t interested in learning category theory in order to do IO. With types that are apparent by reading source, and some sort of “generics”. Examples: TypeScript, Dart, Kotlin, AS3, Java, etc.
                                                  • Garbage collection or Swift-level automagic memory management that you’re not either constantly fighting with or leaking.
                                                  • Support for some form of “dev mode” where code can be reloaded without restarting the whole program where possible, and debugged, inspected, poked-with-a-stick
                                                  • Support for “prod-mode” generating self-contained executables.
                                                  • A good built-in library, including:
                                                    • Networking
                                                    • Some form of local storage
                                                    • A cross-platform high-performance scene graph that targets native drawing APIs and/or OpenGL / DX / Vulcan / Metal
                                                    • A sensible component framework built atop said scene graph. Like Adobe Flex was, for if you just want to get something up quick in a window.
                                                    • The ability to give up cross-platform support for some of your classes and access native widgets if you feel the need to write 3 UIs without having to give up a cross-platform app core.
                                                  • Support for Windows, Mac, and Linux. Actual support, not just “you can kind of make it work with MINGW or LoW”. This includes a downloadable binary, not some crap-shoot local compilation that gives you weird errors if you’re missing some dependency nobody mentioned and the package manager can’t get for some reason.
                                              1. 7

                                                In Poland (and probably many other countries) there are recycled rags for floor cleaning. The linked image is what I have in mind when I hear a word “szmata” (a rag in Polish).

                                                It looks gray, but really is quite colorful. When you take it in your hands and look at it very closely you will see that really nothing’s gray. Image’s resolution is not good enough to see it, but when you zoom in you can see part of the effect. When you mix the rainbow you are left with mud.

                                                That’s how even more colorful syntax highlighting looks like for me. I recognize shapes easier than colors. If identifiers do not have different enough shapes, maybe it could be helpful to add more shapes to them? Like this identifier is a triangle, that is a star, and yet another is a small house. That’s what probably is behind common mathematics notation. Using Latin and Greek letters give you more easily recognizable shapes. Of course too much of them and you will also end up with mud, but probably much later.

                                                I prefer to have very desaturated syntax highlighting scheme. I think it is a bit helpful. When you write something and it immediately changes you can quickly see if you made a typo. I like highlighting of all uses of an identifier under cursor. It’s a fast way to orient yourself with the code. It gives less noise and highly unique shape.

                                                1. 16

                                                  99.9999999% of pushnotification are pure shit exactly like advertisement. Why one should be better than the other ?

                                                  1. 5

                                                    Hmm, every single push notification I get on my phone is useful (new podcast published, new chat message from people I care about, period ticket for public transport has expired). Every web push notification is similar (someone pinged me in IRC, someone sent me a message on Telegram). If 99.999% of the push notifications you receive are shit, you have failed as an administrator of your personal devices.

                                                    1. 17

                                                      you have failed as an administrator of your personal devices

                                                      it’s quite the industry fail that this is even a role that exists.

                                                      1. 2

                                                        I administrate pretty aggressively as well, but I found it only manageable, at least on Android, if you start by blocking all notifications, and then opt in very selectively. Specifically, I have every app’s notifications blacklisted in the main Android settings, and then I have selectively enabled notifications from only two (Signal and Messages).

                                                        Before I discovered you could do that, I found curating notifications to be too much of a game of whack-a-mole that repeatedly wasted my time and energy. Even when I’d get into a state where I was happy with the notifications I was getting, it was always temporary, because many apps will add new types of notifications when the app auto-updates, and opt you in to them by default. Then you have to try to dig through each app’s settings menu (each one different and seemingly deliberately complicated) to figure out where this new notification is coming from. Examples from the past few months of apps that have done this: Twitter, Google Maps, Maps.me. After this happened repeatedly, I got tired of it and just blacklisted them all. If they weren’t so aggressively trying to spam me, I wouldn’t mind notifications from some (e.g. I found some of the Google Maps transit notifications useful), but not at the cost of every other app update adding a new kind of notification to advertise McDonald’s locations to me.

                                                        1. 1

                                                          I have somehow never installed any notification-spammy Android apps. Well, almost — SoundHound occasionally shows some junk, but it’s so rare I haven’t even bothered to disable it.

                                                          The notification I see the most is “tap to update Firefox Nightly” :D

                                                        2. 2

                                                          Note that you added an important qualifier, that you receive. This is a subset of all notifications.

                                                          1. 2

                                                            I mean 100% of the push notification they ask me for permission and that I refuse. I should never have refuse something that I did not wanted first

                                                          2. 3

                                                            90% of everything is crap. 90% of HTML’s img tag usage is crap.

                                                            Those statements are not very useful by themselves. User have to limit number of sites that he uses or a browser, with optional extension, has to filter all the sites.

                                                            If I ever implement my idea of a search engine that doesn’t index ad serving and maybe also JavaScript serving sites then I will see if that kind of web is useful.

                                                            1. 1

                                                              Starting to hear neil postman’s ghost wail “I told you so”.

                                                            1. 3

                                                              Hi @pushcx, can you possibly update the rule to include indication of any working eligibility for particular countries. The majority of “remote OK” US jobs don’t hire outside the US.

                                                              1. 1

                                                                Great idea. How would you phrase this? I don’t feel like I know hiring well enough to use the right phrase to convey this succinctly.

                                                                1. 2

                                                                  Maybe something like: “location with indication if remote is OK and where it’s OK” would be a good start?

                                                                  There could be also a few simple examples of a good offer:

                                                                  Foo Software Ltd., TCL/TK developer for accounting software, remote OK anywhere in the world except France, 2.4kg of gold monthly.

                                                                  1. 2

                                                                    I like @hawski’s concision, but a more explicit treatment may be:

                                                                    Please include any remote working restrictions such as time zone, contract type and eligibility - many companies can only make permanent hires within their home country, which is problematic for overseas candidates.

                                                                1. 4

                                                                  My newborn daughter took most of my time as I took my parental leave from June.

                                                                  I continued rework of structures of my graphical mouse driven text editor werf under a separate project that was supposed to compare performance of different text editor structures on real life editing patterns, taken from the most edited file in Linux kernel git repository - text-vs. I finished the text editing routines, but did not yet integrate it back. It’s C, Xlib, cairo and fontconfig.

                                                                  I started more projects or experiments:

                                                                  Some kind of a game with learning of modern OpenGL in mind. Nothing to see here. C, SDL 2, OpenGL 3.3.

                                                                  2d path tracer - single square hard coded light source and that’s it. Maybe calling it a path tracer is too much of a stretch, but it’s a thing that I wanted to explore for years. C and SDL 1.2. Nothing to see here either.

                                                                  Tomatoaster a ChromeOS-architecture like Linux distribution. I’m mainly interested in replicating atomic updates using two read only rootfs partitions. I’m using Void Linux packages and build system to make a rootfs image. Along the development I did a few pull requests to the Void Linux project which was a first for me. My script can build an image that is runnable under qemu on modern kernels without root privileges. It’s not a particularly interesting image, but it’s able to just run Firefox in bare X session. Next I want to do a proper image with boot loader.

                                                                  Dumbenchmark - a benchmark that I wanted to use to check the performance of several VPS providers. Measuring compile time of certain Linux kernel. Also indexing of sources and full text search through built index with SQLite FTS5. The last part was kind of exploratory for my search engine project that will index only pages without ads. Shell and C.

                                                                  I also did exploration in the web dev sphere. I did those on my Chromebook so I did not manage to push them to any repositories yet. One is a continuous calendar with free form editing. The other is a toy that uses web workers to do a poor man’s version of Unix pipes - it did not work on Firefox, because of some inexplicable reason.

                                                                  I should probably stick with one and finish it. Maybe getting some kind of help would be useful. Will see how it goes in the new year.

                                                                  1. 34

                                                                    There are a few points that make sites that rely on “distributed expertise” fail with time:

                                                                    1. Stagnant population. You see this a lot with moribund wikis. The original wiki fell victim to this. There aren’t enough newly-interested people to keep investing their time in the site.
                                                                    2. Lack of expertise. As people become more experienced and knowledgeable, they also tend to get more demanding jobs, hobbies, and families, and thus are less willing to spend time answering questions with no reward.
                                                                    3. Rules lawyering. Gamification (a term that seems to have died out as people realized its flaws, maybe) means that a site is a game. Games get exploited: people become experts on the rules and develop strategies to maximize performance, or they become so strict that it’s no longer fun for casual players.

                                                                    StackOverflow has all of these problems. Its devotees are a stagnant, self-selecting subgroup who earned a lot of points back when it was easy to earn points answering questions like “What is the difference between git pull and git fetch?” (8931 upvotes) or “How to redirect to another webpage?” (7262 upvotes). The ones who are still participating are primarily experts in StackOverflow, not in technologies. Any new blood is likely to be immediately put off by having their question closed because it’s a “duplicate” of an old question that’s just different enough to not answer their question, and that results in an opportunity cost: all of their potential future value is lost to the site.

                                                                    These structural problems were obvious at the beginning of the site, but were dismissed by most participants and moderators at that time. It’ll be interesting to see if they manage to find a business model after the recent layoffs.

                                                                    1. 16

                                                                      Games get exploited: people become experts on the rules and develop strategies to maximize performance

                                                                      Better explained by the concept of https://en.wikipedia.org/wiki/Perverse_incentive

                                                                      You start by rewarding an easy to measure outcome that is mostly indicative for the hard to measure outcome you really want, then you stand back and watch how those smart upright apes find ways to reach the former while skirting the latter.

                                                                      1. 14

                                                                        I followed Atwood and Spolsky during the startup of SO, and I think they’d thought through the implications as best as they could.

                                                                        We “know” gamification is bad now, partly because SO, through its undeniable success, proved it.

                                                                        The site and concept may be moribund now, but for a while they were successful. We should all be so lucky with the things we create.

                                                                        1. 4

                                                                          I’m wondering if halving points once a year or so would somehow help with some of those issues.

                                                                          1. 4

                                                                            I have thought about “decaying” karma, so that each point has a half-life. The biggest issue with that combined with StackOverflow as it currently stands is that it would lead, over time, to karma deflation. After all, you can’t very well ask “How to redirect to another webpage?” again, so the roughly 36k karma earned by that question and the 125k+ earned by its answers couldn’t be replaced—just as nobody starting on the site today can ever hope to catch people who earned those cheap points when the site was young.

                                                                            1. 2

                                                                              nobody starting on the site today can ever hope to catch people who earned those cheap points when the site was young.

                                                                              I wonder if some sort of redistributive scheme could work: on a monthly basis, remove 1% of everyone’s points & reällocate to all those who’ve been active over the past month.

                                                                              1. 1

                                                                                If karma is no longer working, why not axe it?

                                                                                If it drives out those who are merely responding to gamification, perhaps that is for the better.

                                                                          1. 2

                                                                            There are usually numbers and special characters required where passwords expire. Then it ends with this required number being incremented with wraparound near N. Where N is remembered passwords count to prevent reuse. Also I heard about changing passwords N times few days before expiration, so you can use then the same password.

                                                                            1. 4

                                                                              I use quite a number of SoPines and Pine64s running Armbian everyday for work. Hardware support has been great (including the HDMI and XFCE desktop), so I’d recommend that combination.

                                                                              I haven’t used their Pinebook yet, but I assume it’s equally good.

                                                                              1. 3

                                                                                Does the SoC have open source GPU drivers? I’ve seen on the Pine A64 page that it runs mainline kernel, but I’m not sure if that includes the GPU driver.

                                                                                EDIT:

                                                                                I found it in their FAQ. It has Mali 400 MP2 GPU. So I guess it’s not horrible, but not good either.

                                                                                1. 3

                                                                                  For open GPU you need etnaviv at this point, so i.MX6 or similar

                                                                                2. 2

                                                                                  Good to know. I assume this is with the legacy 3.10 kernel, not mainline. Reading up on the situation, I don’t see a reason to believe Allwinner will continue to support the hardware or update the supported kernel. I don’t know how I feel about that. On the other hand, even the Pinebook barely costs anything compared to the various Chromebooks. The 2gb RAM maximum and low resolution eliminate it as a daily driver for me, but at that price I might just get one for the hell of it.

                                                                                  1. 2

                                                                                    Yes, we’re using the 3.10 kernel.

                                                                                    1. 2

                                                                                      There is documentation for Allwinner SoC (at least H3) available to all, but chapter describing configuration of HDMI output even when listed in index, is missing. Documentation for graphics chip is the same sad story.

                                                                                  1. 6

                                                                                    I own an Acer Chromebook 13 with a nVidia Tegra K1 SoC. I written up my experiences here: https://hawski.com/reviews/#acer-chromebook-13

                                                                                    To sum it up: 13 hours of battery was and is amazing. I charge it every 2-3 days. But video drivers suck and it will probably never be fixed. Also after it will be EOL-ed I suppose that I will not be able to install full Linux on it. Maybe it’s more that it’s nVidia than ARM, but I will probably not risk next laptop with an ARM.

                                                                                    Other SoCs have it better from what I’ve heard. However AFAIK there are no good open source GPU drivers for ARM SoCs. Same issue as in phones. That’s why next time I would want to get something with x86.

                                                                                    But lately I think that maybe it’s better to have good desktop (maybe some mini-itx) and a cheap chromebook with android apps to access it on the go. Also I feel that I would be more productive limiting my screen time - reading more books, making paper notes, but that’s a separate issue.

                                                                                    1. 1

                                                                                      This certainly looks cool and is a nice problem to think about. But. When I see a website that has placeholder images I usually notice it. I notice it, because it almost always feel slower. I wonder how many times it would be straight up faster just to load a damn image the first time.

                                                                                      I also never know at first if the blurred blob was supposed to be there or is something still loading. The loading seems to always be when I am supposed to see the image already, instead when I’m a viewport height from seeing if.

                                                                                      Do browsers download images for static HTML all at once or do they defer it if the page is very high and there are lots of images? If not, why they don’t do it?

                                                                                      1. 1

                                                                                        A lot of websites (hello Medium) use shitty javascript that doesn’t actually load the image until it scrolls into view. This is arguably desirable, but less lazy loading would result in much less pop. (For bonus sweetness, this means if you print a page without scrolling to the end, you only see placeholders. Awesome!)

                                                                                        To answer your question, most browsers should fetch all the images up front so long as there’s an actual img tag to fetch.

                                                                                      1. 10

                                                                                        It would be a standard rant on open offices, but suggested alternatives are interesting. Especially the Eudaimonia Machine (author spells it without second ‘i’ - Eudamonia, Google suggests otherwise). Notice that the chamber is not a particular room, it’s a kind of the room. If I understand it correctly from other sources, every worker gets one for himself.

                                                                                        I found a nice post about Eudaimonia. It proposes:

                                                                                        • Getting rid of the library and combining it with the Office and the Salon.

                                                                                        • Turning the rooms into floors. Ground floor  (open for the public) — Gallery and Salon. Middle floor — Office. Top floor — Chambers with skylights.

                                                                                        1. 2

                                                                                          A great thing. If you have the time/will/energy you could de-yellow the chassis to make it complete ;).

                                                                                          1. 6

                                                                                            Here’s a wayback to instructions for mixing up a batch of Retr0brite if you are interested.