1. 2

    I tried using qTox & uTox with a friend a couple of years back. Mostly worked, but audio chat broke (became one way or both streams died) after a few minutes or if you tried to transfer files.

    I’ll have a look at it again, see if it’s improved :)

    1. 1

      It crashed my Gentoo machine way back when. Good times.

    1. 4

      This circumvents Microsoft’s anti-hijacking protections that the company built into Windows 10 to ensure malware couldn’t hijack default apps. Microsoft tells us this is not supported in Windows

      Uhhh…

      1. 21

        Beware companies claiming they do something for the security of their users when it also affects their bottom line. Security, “anti-hijacking” and related terms are often used manipulatively (especially in EULAs!).

        Restricting browser defaults choice is not an effective security feature for protecting user security or privacy:

        1. Situation: viewing malware sites and suffering a drive-by-attack: I have no reason to believe Edge to be better (on average) than other major browsers.
        2. Situation: malware addons: I have no reason to believe Edge to be better (on average) than other major browsers, all addon sites have reports of malware addons or addon authors turning bad (eg selling control of their successful addon).
        3. Situation: malware already running on your computer, wants to change your default browser: by this point it’s too late, making ‘changing the default browser’ more obscure is not an effective defence of a user’s security or privacy.

        Making it harder for users to change browser (and directly suggesting they do not do it with a little info box when they try, as Win10 does) is an effective method of enforcing market security. That’s not user security.

        You start to get a sense of manipulation when you read Microsoft’s statements about edge and privacy::

        Like all modern browsers, Microsoft Edge lets you collect and store specific data on your device, like cookies, and lets you send information to us, like browsing history, to make the experience as rich, fast, and personal as possible.

        That’s straight out false. Not “all modern browsers” send information like “browsing history” to their makers. Notice how they have designed this sentence to make it feel normal and acceptable.

        Whenever we collect data, we want to make sure it’s the right choice for you.

        Uhuh. Is that the only reason you share data? Somehow you must be making money off this, otherwise you wouldn’t be doing it, right?

        https://privacy.microsoft.com/en-ca/privacystatement

        For example, we share your content with third parties when you tell us to do so, such as when you send an email to a friend, share photos and documents on OneDrive, or link accounts with another service.

        Manipulative writing by business’ like this makes me ill. In a different content (eg flyers in your letterbox) this style of writing would be considered scam material.

        1. 12

          Mozilla has been trying to convince Microsoft to improve its default browser settings in Windows since its open letter to Microsoft in 2015. Nothing has changed, and Windows 11 is now making it even harder to switch default browsers.

          Microsoft and anti-competitive practises go hand in hand, nothing to be surprised about.

          1. 4

            Was more concerned about the obvious security implications! If ff can do it, what is stopping malware from doing it?

            1. 15

              Likewise if Edge can bypass the mechanisms in the background, what’s stopping malware from doing it? Or apparently Firefox 😆😭

              1. 4

                Yep. I’m in a slightly weird position here: I think Microsoft is right to lock down that API; I just think they’re wrong for unlocking it for Edge. So I’d prefer neither Mozilla nor Edge could pull this stunt.

                1. 2

                  Theoretically the mechanism could check that the software performing the bypass comes from microsoft (via cryptographic signature) and is therefore “safe”. It is possible for microsoft to allow Edge to bypass it and nothing else.

                  I’m actually sort of surprised they didn’t, but I guess doing it properly would have taken more work.

                  1. 2

                    Or perhaps it was a silent protest by the engineers involved to allow firefox to do this.

                2. 6

                  Nothing, of course, which isn’t too surprising, as this is pretty unlikely to have ever been about malware in the first place. If it had been, we’d have seen a real, secure API exposed to developers, whereas this is barely security by obscurity.

                  1. 4

                    Nothing is stopping malware engineers from adding associations; SetUserFTA has been available for years.

              1. 2

                This looks like a fantastic addition to the PCEngines lineup! I’ve got an APU2 that I love and has been rock solid. Also, not sure if they still do, but when you order from them they used to include some local chocolate in the box :)

                1. 1

                  Ditto, my APU2 is doing really well. Next time I’m involved at small/med business network setup: I’m going to be recommending a PCengines + OpenWRT, they give me so much less headache than everything else and because they’re x86 they should have a really long software update lifetime. Either that or a SFF computer with multiple network cards and OpenWRT.

                  (Fun semi-relevant story: recently got the bottom of a VOIP and long-lived TCP connection issue at a few clients’ sites. Traditional no-one-believes-the-bug-is-on-their-side problem that none of the existing companies knew how to investigate. Turns out it was a NAT implementation bug on the ADSL routers. Bug was fixed in a firmware update released a few months after the equipment was installed some ten years ago :P)

                  1. 1

                    Did it involve silently dropping entries from the NAT table without sending an RST to the affected endpoints? Because… I have run into that way too many times, and yet each time it’s completely baffling until I realize “ahhhhh dang it’s this nonsense again”

                    1. 2

                      IIRC: The NAT tables in the router still looked OK. The end points still thought their connection were alive and packets would still flow LAN->WAN, but no longer the other way around. I knew this because SSH sessions would randomly “hang”, but if you manually reconnected then all of your typing into tmux during the hang period would still be there.

                      1. 1

                        Yikes! That’s even worse than I’d thought :(

                        1. 2

                          All the good networking problems are small and sinister :)

                          NAT is one of things I never expected to break, so it took me a long time to get to the bottom of the problem. It felt very good to finally get rid of the strange, unexplained & arbitrary networking problems it caused (eg logging/reporting appliances mysteriously going offline, phone outages at other sites using different phone systems but same ADSL router, web pages occasionally not loading properly).

                          There is nothing worse than the magical combination of “strange networking issues” and “parts of this network are controlled by other parties”, I lucked out and the issue was in something I was able to access & fix.

                1. 2

                  This is an interesting parallel to currently game upscaling products (DLSS & FSR). Imperfect, but ours eyes and brains are a bit gullible when it comes to resolution (whether spatial or colour-depth wise).

                  1. 7

                    Machine-generated code is not a derivative work

                    What? You can’t make blanket statements about any or all machine algorithms, that’s completely the wrong way to think about the problem. If I write a program that reads code and then prints it out again… I can claim the code is machine generated and thus I don’t have to worry about copyright infringement?

                    $ cat sourcecode_to_major_company_product.c > non_derivative_work.c
                    

                    There is lots of grey area that you could use make good arguments about authorship and derivatives for the output of machine algorithms, but instead the article’s take on the problem is just as absolutist and polarised as my cat example above.

                    If a “machine algorithm” creates what look like new works: then you could argue they’re not derivatives. You could argue that the new works are the output of a mind that learned themes & ideas whilst reading the other works, rather than just regurgitating pieces back in a way that would be marked as plagiarism if done by a human.

                    If a “machine algorithm” creates what looks like a scrapbook of prior works: it’s a derivative just as much as if a person made the same using cut and paste. How could you prove any different? It takes many “machine algorithms” to achieve the cut and paste in your text editor and operating system anyway.

                    In real life: any machine algorithm, no matter how good, is going to output a combination of “original” work and “plagiarised” work in varying mixtures. You then need a human to judge these individual outputs, just like we judge individual essays as plagiarised or not. You cannot make blanket assumptions like “all work by algorithm X is not plagiarism” just as you can’t make blanket assumptions that “all essays by John Smith are not plagiarism”.

                    1. 4

                      Surprisingly my custom extra-compact userChrome.css is still somehow usable.

                      I miss the orange line I put on the active tab. It was probably overkill but the current ‘slightly lighter’ bg for active tab is far too subtle, especially in sunlight. What I could previously determine at a glance now requires a royal hunt. I’ll have to get cracking on my rules again.

                      /* Let's do this over again, damn you firefox */
                      
                      /* 2020-06-14 Tabs on bottom! */
                      #nav-bar         {-moz-box-ordinal-group: 1 !important;} /*url bar*/
                      #PersonalToolbar {-moz-box-ordinal-group: 2 !important;} /*bookmarks?*/
                      #titlebar        {-moz-box-ordinal-group: 3 !important;} /*aka tabbar*/
                      
                      :root
                      {
                      	--toolbarbutton-inner-padding: 0px 3px !important;
                      	--toolbarbutton-outer-padding: 0px !important;
                      	--toolbarbutton-height: 20px !important;
                      	--tab-min-height: 20px !important;
                      	--tab-min-width: 30px !important;
                      	--urlbar-height: 20px !important;
                      	--urlbar-toolbar-height: 20px !important;
                      	--urlbar-container-height: 20px !important;
                      }
                      #titlebar
                      {
                      	height: 20px;
                      }
                      #nav-bar
                      {
                      	height: 25px;
                      	margin-top: -5px; /*Hack, but it works*/
                      }
                      .tab-line
                      {
                         background-color: orange !important;
                      }
                      
                      
                      /*** Megabar Styler General - version 2020-04-19 ***/
                      
                        /*** General Preferences ***/
                        :root {
                          /* Number of pixels of enlargement when URL bar is focused */
                          --mbarstyler-popout-pixels: 0px; /* [0px - 7px] */
                          /* Top Bar Display or Not */
                          --mbarstyler-top-bar-display: none; /* [block,none] */
                          /* Rows to show without scrolling */
                          --mbarstyler-max-rows-without-scrolling: 12;
                          /* Bottom border for each result row */
                          --mbarstyler-bottom-border-width: 0px; /* [0px or 1px] */
                          /* Match display style */
                          --mbarstyler-match-weight: 700; /* [400,700] */
                          --mbarstyler-match-background-opacity: 0.0; /* [0.0,0.05,0.1] */
                        }
                      
                        /*** URL bar enlargement or lack thereof ***/
                        /* Compute new position, width, and padding */
                        #urlbar[breakout][breakout-extend] {
                          top: calc(5px - var(--mbarstyler-popout-pixels)) !important;
                          left: calc(0px - var(--mbarstyler-popout-pixels)) !important;
                          width: calc(100% + (2 * var(--mbarstyler-popout-pixels))) !important;
                          padding: var(--mbarstyler-popout-pixels) !important;
                        }
                        [uidensity="compact"] #urlbar[breakout][breakout-extend] {
                          top: calc(3px - var(--mbarstyler-popout-pixels)) !important;
                        }
                        [uidensity="touch"] #urlbar[breakout][breakout-extend] {
                          top: calc(4px - var(--mbarstyler-popout-pixels)) !important;
                        }
                      
                        /* Prevent shift of URL bar contents */
                        #urlbar[breakout][breakout-extend] > #urlbar-input-container {
                          height: var(--urlbar-height) !important;
                          padding: 0 !important;
                        }
                      
                        /* Do not animate */
                        #urlbar[breakout][breakout-extend] > #urlbar-background {
                          animation: none !important;;
                        }
                      
                        /* Remove shadows */
                        #urlbar[breakout][breakout-extend] > #urlbar-background {
                          box-shadow: none !important;
                        }
                      
                        /*** Top "Blue Bar" Display ***/
                      
                        .urlbarView-row:first-of-type {
                          display: var(--mbarstyler-top-bar-display) !important;
                        }
                      
                        /*** Font Sizes and Scrolling ***/
                      
                        /* Set max-height for items visible without scrolling */
                        #urlbarView-results, #urlbar-results {
                          height: unset !important;
                          overflow-y: auto !important; 
                        }
                      
                        /* Clean up extra spacing at the top and bottom */  
                        #urlbar-results {
                          padding-top: 0 !important;
                          padding-bottom: 0 !important;
                        }
                      
                        /* Match Styling Like Fx43-47 */
                        [lwt-popup-darktext] .urlbarView-row:not([selected]) .urlbarView-title strong,
                        [lwt-popup-darktext] .urlbarView-row:not([selected]) .urlbarView-url strong {
                          box-shadow: inset 0 0 1px 1px rgba(0, 0, 0, calc(var(--mbarstyler-match-background-opacity) * 2));
                          background-color: rgba(0, 0, 0, var(--mbarstyler-match-background-opacity));
                          border-radius: 2px;
                      
                        }
                      
                        [lwt-popup-brighttext] .urlbarView-row:not([selected]) .urlbarView-title strong,
                        [lwt-popup-brighttext] .urlbarView-row:not([selected]) .urlbarView-url strong {
                          box-shadow: inset 0 0 1px 1px rgba(255, 255, 255, calc(var(--mbarstyler-match-background-opacity) * 2));
                          background-color: rgba(255, 255, 255, var(--mbarstyler-match-background-opacity));
                          border-radius: 2px;
                        }
                      
                      /*** End of: Megabar Styler General ***/
                      

                      (I’m having troubles finding the source of “Megabar Style general” now, my search-fu is not working. I noticed that many of these Firefox CSS repos seem to come and go, maybe this one has been deleted?)

                      (EDIT: you will probably also have to set firefox’s UI to ‘compact’ for my style above to work)

                      1. 2

                        My own UI fixes escaped this change unscathed, which is a rather pleasant surprise for once. :-)

                        1. 1

                          Ooh. Are the vertical tabs done entirely via the CSS?

                          It’s probably a bad sign, but I initially though the garbage can icon was an Internet Archive favicon :P

                          1. 2

                            Ooh. Are the vertical tabs done entirely via the CSS?

                            No, most of the userChrome.css effort is spent on getting rid of Mozilla’s tab “ideas”, not on the added vertical tabs, for which I’m using Sidebery, the best vertical tab extension at the moment.

                            garbage can icon was an Internet Archive favicon

                            Haha, no, it’s a chef’s hat. ;-)

                      1. 2

                        Thunderbird + birdtray, so it can be minimised to tray without closing.

                        I wrote a quick and dirty review of several options a few years back:

                        https://halestrom.net/darksleep/blog/031_browser_loss/#emailclients

                        Summary:

                        • Trojita: beautiful, but limited to one email account/server
                        • Claws mail: beautiful, but no HTML email composition support (I need to send inline photos/diagrams all the time and colour important parts of emails because otherwise vendors don’t read past the first sentence. Life in ASCII only suits a select group.)
                        • Thunderbird: no tray icon support without 3rd party tools. Weird corner cases. But it supports everything (TM) so it’s the only option I have that does what I need.
                        • Seamonkey: the better version of Thunderbird that I always used to use. It looks like the Seamonkey project has stayed alive, I might go back and see how things are going (hopefully bookmark syncing words?).
                        1. 3

                          I once played a platformer game that looked like this (circa 2010?). The whole window looked like white noise, but the walls moved/changed at a different rate to the background & the character. It was quite interesting and not uncomfortable to play.

                          In particular I remember that after every time I played it: my eyes would see the rest of the world as super-smooth for the next few minutes. It was a weird and interesting effect.

                          I’ve been trying to find this game again for years. Was it win32? Was it flash? :(

                          1. 7

                            Hmm, was it Lost in the Static, as inspired by that guy doing the 300 mechanics website?

                            1. 1

                              Yes, thankyou Relax! Greatly appreciated.

                            2. 1

                              I remember playing the FKR games by NAL on Yoyogames back when that site still was a thing. FKR5 especially is interesting since it it never clears the frame buffer but instead continues to partially draw on top of it. It demonstrates how incredible our capability for visual understanding really is.

                            1. 4

                              Firefox’s lack of alsa support is the sole reason I still have chromium installed on my machines.

                              1. 1

                                Have you tried apulse?

                                1. 3

                                  I settled for pipewire.

                                  Pulse apps work, jack apps work.

                                  1. 1

                                    I tried using that, seems to break on suspend+resume, requiring me to kill and restart firefox.

                                  2. 1

                                    Just curious, what sorts of things does ALSA support allow you to do?

                                    1. 3

                                      I have a usb dac + amp setup I use for listening to music — one of those fancy ones that does 32bit audio at 384khz. It says 384khz on the LED screen when I use alsa but 44.1khz if I use pulseaudio. I don’t think I can tell the difference, but it has a convenient volume control knob and I like using it to listen to music or video links, and the volume setting is usually quite high so I really do not want unexpected audio to come out of it.

                                      I also have a separate wireless dect headset that I use for zoom/googlemeet/teams/WebEx/etc. My attached Bluetooth pretends to be an audio device for my iPhone so I can use it for telephone calls. When I’m not in calls it is on a cradle and it auto-mutes so unexpected audio is less traumatic than with the dac.

                                      The motherboard has an on-board audio I have hooked up to a tiny travel speaker. I use this as my ringer device in Skype and I have some scripts that put notifications on it for things that don’t understand wanting a different audio for ringing and teleconference.

                                      Getting this to work with Alsa has been fairly straightforward but I don’t know how to make pulseaudio do anything except send the sound to the wrong device for a few minutes while I click around a menu looking for which of the hundred or so “Firefox” streams is the meeting I’m trying to join. (I have Firefox treetabs with nearly a thousand tabs open at the moment. Probably a hundred of which have an ad on them trying to open an audio stream — which thankfully Firefox automutes but it still shows up in pulseaudio “just in case”)

                                      That being said, I am open to the possibility I’m using pulseaudio wrong, and there is some feature valuable enough to be worth figuring it out, so just curious, why do you use pulseaudio?

                                      1. 3

                                        PA can do a lot of that, but its interface is a bit… weird. (As you’ve discovered) If you ever want to try again, pipewire is pretty much replacing PA and it’s pretty sane. It allows you to use the jack tools and connection graph which makes all the reconnecting close to instant and you get full control over the links. And you can operate on stream names in scripting rather than weird interface IDs. For BT the big item is full control over the profile / codec of the device, which pulse doesn’t really do.

                                        It exposes alsa, pulse and jack interface at the same time, so pretty much everything is still compatible. It’s still fresh enough that you want the latest release rather than the distro version though. Pulse is on its way out, so I wouldn’t invest too much time into it now

                                        1. 2

                                          Thanks for replying.

                                          I’ve read this and some of the deeper pages, but to be honest it still seems quite mysterious to me. Do you have any good resources?

                                        2. 1

                                          I really do not want unexpected audio to come out of it.

                                          What did you mean by this? Under what circumstances might a USB DAC+Amp play unexpected audio?

                                          For context, I have the same setup as you (USB DAC+Amp+volume control) and it sometimes outputs noise. I’ve been trying to debug it for months with no luck so I’m just looking for ideas at this point.

                                          1. 3

                                            I mean I want to be explicit when I want audio to come out of the big speakers, as in by environment variable or something, rather than playing something, pausing, then navigating some menu to change the audio, then resuming.

                                            That sounds terrible. I have a line in modprobe.d/ to set the index= and enabled= options of reach of the usb sound devices. I also set the index on my motherboard audio the same way. I don’t have any other special settings. As I mentioned, I don’t use pulseaudio, but I also don’t have jackd or anything like that either.

                                            Have you poked around /proc/asound/cardX/pcm*/ to see if what linux is sending matches what your device is decoding? How have you verified this isn’t on the analog side?

                                            1. 2

                                              Thank you for the advice and for sharing more information about your setup. I have not looked at /proc yet - I shall spend some time this weekend going down that rabbit hole.

                                        3. 1

                                          In my case, the main feature of ALSA that pulse lacks is the ability to play audio reliably without randomly telling me that my sound card no longer exists two to three times a week.

                                      1. 2

                                        Ubiquiti: I have 5 unifi AP ACs at work for the last 6 months, mixed bag. Very nice wifi performance when they work, pretty appearance when mounted on walls, PoE powered. One unit was warrantied a few weeks back (tripping PoE in a loop, not booting) and the rest are having weird behaviours with their built-in guest network feature. Every few minutes all packets from clients on the guest network (and only the guest network) stop routing anywhere. We use ICMP redirects in our environment, so I wonder if that’s playing with their traffic inspection rules. I’m going to try putting OpenWRT on them (I think they might be a supported target), that will make me happier (and let me do easier packet caps to work out the causes of future problems, without having to hookup of external capt equipment south of a PoE injector!).

                                        Home: PCengines APU2 + openwrt for the past year, it has been amazing. Rock solid reliability (much better than all of the SOHO routers I have used over the years, both stock firmware and OpenWRT). No crashes, oddities or mysterious miasmas.

                                        Sadly the APU2 is expensive, around $200AUD with case, mSata SSD and shipping. Given that it’s essentially a low-power x86 box with multiple intel gigabit NICs: check what old computers you have handy and see if they will fill the role. At the time the only units I had that were small enough for my target location were unfortunately pre-2011 computers (Core 2 duos I think?), which according to my calcs at the time would use most of $200AUD idling for three years :P

                                        I’m also using a cheap mediatek wifi router (running OpenWRT) as a wifi AP. It does not provide amazing wifi performance and I have had issued in the past with the wifi conking out (requiring a restart of the interface and/or a reboot); but it seems to have been going ok the past few months. Ideally I’d put an mPCIE wifi card in my APU2, but I stole the last good one I had to use in my laptop. I’m too cheap for anything else, I spent all my Timtam money on the APU2.

                                        1. 5

                                          This combative response from Netgate raised increased scrutiny from many sources, which uncovered surprising elements of Macy’s own past. He and his wife Nicole had been arrested in 2008 after two years spent attempting to illegally evict tenants from a small San Francisco apartment building the pair had bought.

                                          This article is very interesting, but this part makes me really uneasy… Why is the criminal past of some developer relevant? He obviously did something wrong, and paid his debt to society for it. This article reads “this guy wrote shitty code, no wonder, he was a criminal!”

                                          It sounds like he did a “piss-poor job”, as Bruce Willis would say, and it also seemed that the review process was a little flawed. (But let’s give credit the FreeBSD people, they’re doing a great job for a group of volunteers with little resources) I just don’t see how his previous penal convictions have anything to do with it. Does this guy now has to carry this burden for his entire life?

                                          1. 3

                                            I think the two sentences you quoted contain the answer to why it’s relevant:

                                            This combative response from Netgate raised increased scrutiny from many sources

                                            Normally, when there’s a contribution to an open source project, (hopefully) there’s some review, issues are found, the parties work together to address them, and things land in a mutual effort to improve the project. This time, there was a contribution. (Serious!) Issues were found. The people who found the issues pitched in to help fix them and bring the contribution up to the standards of the project. The company sponsoring the contribution went nuts and started accusing the reviewers/other contributors of “releasing 0days”, etc.

                                            This combative response to the code review made people dig in and look, wonder if the developer was himself a bad actor, and find past behavior that might be consistent with being a bad actor. It got reported.

                                            I don’t think it got reported as a disproportionately large part of the story, if you look at the whole article. I think it was mainly mentioned here because it had been brought up in public discussions already, and I thought the author of this piece did a good job giving it context.

                                            1. 1

                                              Culture perhaps? Some parts of the world follow the motto “once a criminal, always a criminal”. Harder to get employment, requirement to disclose, disqualified from voting, etc. I believe Americans have different tiers of this depending on where you live, eg “felon” (?)

                                              I also got the impression that the criminal history was mentioned by the article as supporting evidence for him being bad at things in general. I don’t like that. If you are going to mention the bad parts of someone’s past then you need to look at the motivations & context for those bad parts (and then analyse whether they relate to now); not leave it hanging with a feeling of bad guy does bad things.

                                              It was however nice the article talked about the successes of the author too. I am glad they did that.

                                            1. 2

                                              I’ve been contemplating alternative ways of describing resizable UI layouts, primarily around tracking which elements are ‘fixed’ in size and which can ‘resize’ when the window is resized. I wanted to track everything in the X & Y directions to make sure there is only one resizable object per axis left, otherwise you have to start using guess work when the window is resized.

                                              This rectcutting concept might solve that problem. Everything that’s cut is fixed size and the area/item that is left over can be the resizable item. I’ll have to think this through to see if separability of X & Y matters or not.

                                              Thankyou for posting this Mr Sock.

                                              1. 4

                                                Wait, that’s the swtich-case from C.

                                                1. 5

                                                  As far as I know, that only deals with specific values. Python’s let you match on structure, with things like checking for isinstance, hasattr, len, and key in map. It also features guards.

                                                  1. 4

                                                    Not quite, this could cause confusion: https://brennan.io/2021/02/09/so-python/

                                                    See the PEP for some examples: https://www.python.org/dev/peps/pep-0622/

                                                    It’s more like a rust’s match or an elixir’s case than a C’s switch.

                                                    1. 1

                                                      Based off the title I was expecting something like in-language regexp like stuff. Indeed it looks like switch case support (but probably with more matching flexibility than C).

                                                      Python never ceases to amaze me. So complex in some ways, so simple in others.

                                                      1. 4

                                                        Pattern matching is a well-known and pre-eminent feature in many other languages. In statically-typed languages it even has an exhaustivity check which tells you if you didn’t cover all cases. E.g. check out this function that implements fizzbuzz in OCaml:

                                                        let fizzbuzz n = match n mod 3, n mod 5 with
                                                          | 0, 0 -> "FizzBuzz"
                                                          | 0, _ -> "Fizz"
                                                          | _, 0 -> "Buzz"
                                                        

                                                        It compiles with a warning (which can be set to error):

                                                        Warning 8: this pattern-matching is not exhaustive.
                                                        Here is an example of a case that is not matched:
                                                        (1, 1)
                                                        

                                                        If you add a final case:

                                                          | _ -> string_of_int n
                                                        

                                                        It compiles successfully. As it happens, when implementing fizzbuzz we need to handle the case where the number is not a multiple of 3 or 5. And the compiler catches that.

                                                    1. 3

                                                      My condolences to the author. Data loss sucks.

                                                      In hindsight its always easier to see flaws in your plans.

                                                      1. 3

                                                        A course I’m taking this semester entalied project in which we built and tested a Wi-Fi antenna from “household” materials. It was super fun and if you’re looking for a side project right now this I can recommend this a lot!

                                                        1. 3

                                                          I made a helical wifi antenna whilst in a rural mountainside in Greece. I managed to get a working link (~2MBit/s down) with a public-use AP in a village about 1.2km away. https://halestrom.net/darksleep/blog/032_helix_wifi/

                                                          Before I made this: I had read about cantennas and wok-fi, but had little luck trying to work out how to recreate them. I didn’t have good access to the right shape of cookware where I was and not even much in the way of advanced tools. I thought of converting an umbrella into a big semi-parabolic reflector (by covering the fabric in aluminium foil + sticky tape), but I couldn’t think of a good way to get rid of the metal frame. Metal-free umbrelllas do exist, but they’re expensive and kind of defeat the purpose.

                                                          In the article I link above I also adventure in making yagis for wifi (and why they didn’t work).

                                                        1. 4

                                                          Real computers have the hardware equivalent of “sleep 0.01; // dunno why but makes it work” everywhere in them.

                                                          I rarely venture outside CMOS (HC) families, but I’ve heard all sorts of fun stories about compatibility with older logic processes. I know of voltage margins and slew tolerances, but never thought of propagation delays needing to be slower to avoid breaking things.

                                                          1. 6

                                                            That’s not a ‘store’, that’s a ‘database’. I can’t see stuff in it, I can’t buy stuff from it, it doesn’t provide any legally/financially required paper trails, etc. Choosing to include current stock level but not including the transactions themselves is arbitrary.

                                                            If you want to reduce your store database even further: sell omnipotent singular integers. Price is the value of the integer, and there is only one of each (positive) integer available, so once it’s sold you delete (or add) it to the database. Choose the number of bits for integer size that takes your fancy (slightly above your highest probable sale value could work).

                                                            Fundamentally: stores are required to be heavily interconnected with lots of things. An isolated store component is not a store, it needs to be connected to visualisations (list, search), user-editing (transactions), user verification, and admin-editing at an absolute minimum.

                                                            1. 1

                                                              I can’t see stuff in it, I can’t buy stuff from it,

                                                              It’s up to the client to decide how to render the items.

                                                              it doesn’t provide any legally/financially required paper trails, etc. Choosing to include current stock level but not including the transactions themselves is arbitrary.

                                                              I just didn’t think that’d be important, since banks track this information. Why duplicate it?

                                                              If you want to reduce your store database even further: sell omnipotent singular integers. Price is the value of the integer, and there is only one of each (positive) integer available, so once it’s sold you delete (or add) it to the database. Choose the number of bits for integer size that takes your fancy (slightly above your highest probable sale value could work).

                                                              This is essentially what I proposed? Except the “price is the value of the integer”, because many things can be priced the same.

                                                              Fundamentally […]

                                                              I would say no, just listing what is available is all that’s needed. User verification should be taken care of by another service. Editing is an entirely different aspect too.


                                                              All in all great comments :)!

                                                            1. 3

                                                              I understand the motivation for decentralised social networks, but I don’t understand the motivation behind the rest of this stuff. All of the summaries seem very complicated – why wouldn’t I just write my game in a central/traditional manner?

                                                              1. 6

                                                                The same motive, I believe. You might write a centralised game, but then you can shut it down without prior notice. If the game was decentralized, I would be able to take my marbles elsewhere even if you started blackmailing.

                                                                On the one hand, it’s not very likely that many people would or should run their infrastructure, services etc. It would be inefficient and time-consuming and people have other interests.

                                                                On the other hand, personally this entire federation universe looks to me a bit like romanticized version of some cyberpunk novel. People running their own nodes, a vast variety of different hardware and software and everything around it exists, and still within it there lives a network, or networks of many different goals and worldviews and modes and paradigms and it all coexists. Kinda like the early web but on more then just the data level. Beautiful chaos.

                                                                Reality is different though so it’s just a bunch of software though.

                                                                1. 5

                                                                  The “game” aspect is only one layer listed here, but it’s the layer that really requires all the others. It would be great to have… it’s the kind of thing that excites and motivates me, and especially “worldbuilding with friends” (one only need look at minecraft to see how desired such type systems are). However, as the Fantasary entry mentions, the “game” (virtual worlds, really) is the driver for the rest of the technology. In order to pull it off, all these other layers are needed.

                                                                  But even if the virtual worlds part fails, all of these other layers which were necessary are still useful. It’s still useful to have a distributed programming environment that works well in mutually suspicious systems, to have distributed debugging tools for it that support time travel. It’s still useful to have tooling that can serialize a running object graph and wake it back up while maintaining its authority structure. It’s still useful to have portable and encrypted storage foundations. It’s still useful to have distributed small-world finance tooling to allow for communities to support each other. All of that stuff still turns out to be useful, even if the distributed virtual worlds part doesn’t take off.

                                                                  But hey, it could!

                                                                1. 2

                                                                  As of today, Linux Journal is back, and operating under the ownership of That Green Website Media.

                                                                  That doesn’t bode well.

                                                                  Many years back I subscribed (after their digital-only change). Initially I found a lot of the articles interesting, but after about a year I wasn’t interested any more.

                                                                  To make an interesting magazine you need to (1) find interesting topics and (2) write something interesting about them. I found that most of their content became (1) find any software and (2) write anything about it.

                                                                  1. 2

                                                                    I use linux on most devices I own. I read loads of paper magazines. Even I can’t really see why I’d want to read a linux magazine…