1. 6

    Avoid meshes if you can. You’ll want n access points, where n is an integer and depends on the area to cover. Connect those access points to the upstream using cabled ethernet.

    Mesh is fine if you want coverage, not so fine if you want capacity in a saturated environment. Every packet has to be sent more than once across the air, and the impact of that is worse than a doubling because if the way radio time is shared.

    Clueful friends of mine tend to use either Ubiquiti or Mikrotik. One has Cisco Aironets brought home from work when they replaced them with new radios. I have Mikrotik hardware myself, the oldest is 10+ years old at this point and still receiving OS upgrades. If you consider Mikrotik, look for metal hardware, not plastic. The metal is built to last.

    My own policy is to use those slow old APs forever, and to say that if something wants 100Mbps or more then that device needs an ethernet cable. That’s been a good policy for me in practice. For example it’s kept the WLAN free of bandwidth hogs, even if those hogs (like a few giant rsync jobs I run) aren’t time sensitive.

    1. 2

      [I asked an extended version of this in a different reply in this thread]

      Is there anything special you need to do to enable switching amongst the various access points as you wander around the house?

      1. 1

        Enable, no, but there are things you can do to improve quality of service. I use a Mikrotik feature called capsman, I understand that Ubiquiti and Cisco Aironet provide the same functionality. (I don’t know about other vendors, those three are just what friends of mine use.)

        The only thing to watch out for is really that you have to purchase APs from one vendor if you want the nice roaming. If you mix brands, TCP connections will be interrupted when you move through the house, and a moving station may remain connected to an AP for as long a that’s possible, not just for as long as that AP is the best choice.

      2. 1

        You’ll want n access points, where n is an integer and depends on the area to cover. Connect those access points to the upstream using cabled ethernet.

        If I could get ethernet to everywhere I want wifi, I wouldn’t need the wifi.

        1. 1

          That’s true of course, but isn’t it rather beyond the point? The goal is to get ethernet to enough points that the entire area has a good WLAN signal.

          When I installed my cables I strictly needed two APs, but I got three instead in order to simplify the cabling. More APs, but less work pulling cables.

        2. 1

          I don’t know if you’d call the environment saturated here in an urban road but mesh is working nicely. No dropouts, fast, covers everything, cheap. What sort of environment would cause it trouble?

          1. 2

            At one point 27 different WLANs were visible in what’s now our kitchen, two of them often with a great deal of traffic, and intuitively I think there was some other noise source, not sure what. That was usually good, occasionally saturated, and bulk transfer throughput would drop deep, even as low as 1Mbps. I cabled and now I don’t need pay attention to the spectral graph.

            I’ve worked in an office where over 50 WLANs from various departments and companies in the same building were visible. Some people did >100-gigabyte file transfers over our WLAN, so I expect our WLAN bothered the other companies as much as their us. The spectral graph was pure black.

            1. 1

              As of right now, I see 21 networks from a Macbook in my living room. 2 of those are even hotspots from the street, run by competing phone companies. It doesn’t help that many ISPs offer “homespots,” where customers who rent their router create several SSIDs – one for the user, and one for other customers of that ISP to use as a hotspot. So I guess mesh is not a good idea where I am.

              1. 2

                Well, most people don’t have a lot of guests who transmit a lot of traffic, so maybe?

                Still, I haven’t regretted the cable I had installed. Remember that you can simplify the problem, you don’t have to install the cable along the most difficult route.

        1. 2

          It’s been mentioned in passing a few times in here, but I wanted to call it out specifically: @pytest.mark.parametrize is great. The syntax takes a little getting used to (you have to feed it a string of comma-separated parameter names) but other than that it works as expected. As a bonus, you can stack multiple @pytest.mark.parameterize decorators on a test to get a cartesian product of test cases.

          1. 3

            I’ve been using Nix (NixOS?) as a replacement for Homebrew and so far it’s been pretty good. Not the best learning curve but so far I’ve been able to install the packages I need (although getting git installed with shell completion took up the better part of an afternoon…). The main reason I like it over Homebrew is that every time I go to install a package I’m not rolling the dice on how long the operation will take. Homebrew operations seem to take 5 seconds or 15 minutes depending on whether it needs to recompile openSSL or not, and you can’t predict this before you run brew install… Good to know that from the packager’s side it’s a bit more tricky.

            1. 1

              iPhone Fits-In-Your-Hand (SE). I thought about giving in and buying a 7 over the holidays but decided to stick with this until it dies or they release another phone this size.

              1. 6

                I find it curious that the Blink team at Google takes this action in order to prevent various other teams at Google from doing harmful user-agent sniffing to block browsers they don’t like. Google certainly isn’t the only ones, but they’re some of the biggest user-agent sniffing abusers.

                FWIW, I think it’s a good step, nobody needs to know I’m on Ubuntu Linux using X11 on an x86_64 CPU running Firefox 74 with Gecko 20100101. At most, the Firefox/74 part is relevant, but even that has limited value.

                1. 14

                  They still want to know that. The mail contains a link to the proposed “user agent client hints” RFC, which splits the user agent into multiple more standardized headers the server has to request, making “user-agent sniffing” more effective.

                  1. 4

                    Oh. That’s sad. I read through a bit of the RFC now, and yeah, I don’t see why corporations wouldn’t just ask for everything and have slightly more reliable fingerprinting while still blocking browsers they don’t like. I don’t see how the proposed replacement isn’t also “an abundant source of compatibility issues … resulting in browsers lying about themselves … and sites (including Google properties) being broken in some browsers for no good reason”.

                    What possible use case could a website have for knowing whether I’m on ARM or Risc-V or x86 or x86_64 other than fingerprinting? How is it responsible to let the server ask for the exact model of device you’re using?

                    The spec even contains wording like “To set the Sec-CH-Platform header for a request, given a request (r), user agents MUST: […] Let value be a Structured Header object whose value is the user agent’s platform brand and version”, so there’s not even any space for a browser to offer an anti-fingerprinting setting and still claim to be compliant.

                    1. 4

                      What possible use case could a website have for knowing whether I’m on ARM or Risc-V or x86 or x86_64 other than fingerprinting?

                      Software download links.

                      How is it responsible to let the server ask for the exact model of device you’re using?

                      … Okay, I’ve got nothing. At least the W3C has the presence of mind to ask the same question. This is literally “Issue 1” in the spec.

                      1. 3

                        Okay, I’ve got nothing.

                        I have a use case for it. I’ve a server which users run on a intranet (typically either just an access point, or a mobile phone hotspot), with web browsers running on random personal tablets/mobile devices. Given that the users are generally not technical, they’d probably be able to identify a connected device as “iPad” versus “Samsung S10” if I can show that in the web app (or at least ask around to figure out whose device it is), but will not be able to do much with e.g an IP address.

                        Obviously pretty niche. I have more secure solutions planned for this, however I’d like to keep the low barrier to entry that knowing the hardware type from user agent provides in addition to those.

                      2. 2

                        What possible use case could a website have for knowing whether I’m on ARM or Risc-V or x86 or x86_64 other than fingerprinting?

                        Benchmarking and profiling. If your site performance starts tanking on one kind of processor on phones in the Philippines, you probably want to know that to see what you can do about it.

                        Additionally, you can build a website with a certain performance budget when you know what your market minimally has. See the Steam Hardware and Software Survey for an example of this in the desktop videogame world.

                        Finally, if you generally know what kinds of devices your customers are using, you can buy a bunch of those for your QA lab to make sure users are getting good real-world performance.

                    2. 7

                      Gecko 20100101

                      Amusingly, this date is a static string — it is already frozen for compatibility reasons.

                      1. 2

                        Any site that offers you/administrators a “login history” view benefits from somewhat accurate information. Knowing the CPU type or window system probably doesn’t help much, but knowing it’s Firefox on Ubuntu combined with a location lookup from your IP is certainly a reasonable description to identify if it’s you or someone else using the account.

                        1. 2

                          There are terms I’d certainly like sites to know if I’m using a minority browser or a minority platform, though. Yes, there are downsides because of the risk of fingerprinting, but it’s good to remind sites that people like me exist.

                          1. 1

                            Though the audience here will play the world’s tiniest violin regarding for those affected the technical impact aspect may be of interest.

                            The version numbering is useful low-hanging-fruit method in the ad-tech industry to catch fraud. A lot of bad actors use either just old browsers[1] or skew browser usage ratios; though of course most ‘fraud’ detection methods are native and just assume anything older than two major releases is fraud and ignore details such as LTS releases.

                            [1] persuade the user to install a ‘useful’ tool and it sits as a background task burning ads or as a replacement for the users regular browser (never updated)

                          1. 2

                            I was happy to see GoatCounter come up recently, as I keep thinking “you know, all these cookie warnings are only needed if you use third-party analytics” and was wondering if someone offered analytics without that. I hope this gives them a boost!

                            1. 4

                              Sublime may not have the tight integration you’d get from other IDEs, but it does have the advantage of being fast. It’s been effectively jank-free since I switched to it several years ago. If VS Code isn’t powerful enough then Sublime + plugins probably won’t be either, but I did want to at least give it a mention.

                              1. 1

                                Sublime (with anaconda, terminus) and use of pudb (in a separate terminal window) for stepping through code.

                                Bias: This is my spare-time coding setup on a 5-6 year old laptop, feel like I’d invest in an IDE if I was writing python more regularly.

                              1. 7

                                I feel like the original post (and some of the subsequent discussion here) is full of armchair quarterbacking and general smugness, even though I do sympathize with the fact that computers are ridiculously faster than 10 years ago but somehow seem slower (Dan Luu dives into that a bit if you’re interested). That said, I don’t think the problem is frameworks-upon-frameworks or leaky abstractions or that modern developers don’t have a Mel-like total understanding of every transistor on their system.

                                My view of the problem is that developers are reluctant to acknowledge that, as a complex system, software will always run in a degraded mode. If you acknowledge that things can’t be perfect, you can shift the discussion to how much you want to spend to approach perfection. Conversely, you can then think about where you want to spend your time with that budget.

                                1. 1

                                  I’m going for the first time but don’t have any specific plans. Hoping to wander around and check out cool stuff.

                                  1. 2

                                    Looking forward to it! I’ll be doing Rust after I started with it on AoC last year. One annoyance I found with AoC 2018 (maybe it’s every year, I didn’t check) was heavy reliance on fiddly text parsing. I don’t design puzzles, let alone language-agnostic programming puzzles, so it might be that this is just how it has to be done. Still, I just wish there was less emphasis on text parsing and more on problem solving.

                                    1. 9

                                      Every time I read Paul Graham I think back to Dabblers and Blowhards from 2005 (which unfortunately has some sexist overtones, but a lot of the essay still holds). This quote in particular sticks out:

                                      [A]fter a while, you begin to notice that all the essays are an elaborate set of mirrors set up to reflect different facets of the author, in a big distributed act of participatory narcissism.

                                      The whole genre reminds me of the the wooly business books one comes across at airports (“Management secrets of Gengis Khan”, the “Lexus and the Olive Tree”) that milk a bad analogy for two hundred pages to arrive at the conclusion that people just like the author are pretty great.

                                      1. 5

                                        I don’t know why the author is writing in hypotheticals, rad-hard ICs have been in production for decades now. A quick search yields an ARM core that offers reasonable performance for a thousand bucks.

                                        1. 6

                                          I keep telling you! Like the Phoenix, FORTH will rise from the ashes, and take us into the skies!

                                          1. 4

                                            In particular, there is, right this moment, working CPU rolling over Martian terrain in the form of RAD750 (PowerPC ISA) inside Curiosity rover. It has worked on Mars for more than 7 years since 2012.

                                          1. 3

                                            A long time ago I set up Chrome Remote Desktop on a GCP VM so I could browse Facebook without it tracking me. It was kind of fun, but the biggest annoyance was having to log into the GCP console to start the VMs when I needed them. Cool to find out about Apache Guacamole.

                                            1. 11

                                              I love dhall as a non turing complete config language.

                                              1. 3

                                                Sort of related: I had no idea what Dhall was for but recently listened to the CoRecursive podcast with the creator and found it interesting https://podcasts.google.com/?feed=aHR0cHM6Ly9jb3JlY3Vyc2l2ZS5jb20vZmVlZA&episode=Y2I0NmZhNmZjOTQ5NGY1OTkxZWE2ZDZkNzU2MDM0Mjk&hl=en&ved=2ahUKEwjlo8OLnu_lAhUGrVkKHXOiAOkQieUEegQIABAG&ep=6&at=1573924629200

                                                The CoRecursive site isn’t working for some reason so I shared the google podcasts link instead.

                                                1. 2

                                                  This episode of CoRecursive mentions this SERadio podcast episode about Dhall too: https://www.se-radio.net/2019/08/episode-375-gabriel-gonzalez-on-configuration/

                                                2. 3

                                                  Yeah! Starlark (mentioned in the article as well) is also not Turing complete. It’s a dialect of Python which makes it a bit easier to adopt if you’re familiar with Python. I’m using the Rust implementation for a small personal project that needs configuring.

                                                1. 1

                                                  While most times progress bars and splash screens are good, occasionally they get in the way of what’s important: https://lwn.net/Articles/299483/

                                                  “We hate splash screens. By the time you see it, we want to be done.” The development time that distributions spend on splash screens is much more than the Intel team spent on booting fast enough not to need one.

                                                  1. 4

                                                    From my perspective as a software tools guy, Python 3 has never been useful. I don’t use Unicode at all, as a rule. I’m using it now when I do Python, because Py2 is going out of date, particularly the libraries. But it’s thoroughly an uninteresting shift that has not brought me any value.

                                                    1. 16

                                                      You don’t really control if your programs use unicode, your users do. Things like people’s names, URLs, filenames, addresses, etc will contain unicode.

                                                      1. 1

                                                        You don’t really control if your programs use unicode, your users do. Things like people’s names, URLs, filenames, addresses, etc will contain unicode.

                                                        These have been irrelevant for my work so far. My interactions with unicode have purely been unrelated to work.

                                                        1. 1

                                                          None of my users use Unicode. And I don’t use it. It’s nice to be future ready when one finally does. But I don’t think it’s a driving reason to change a bunch of stuff.

                                                          I use python3 because that’s when I started using stuff. I think it’s good to design for Unicode, but it I had started with 2, I would stay there.

                                                          I have little snippets of java and JavaScript and whatever that still run 20 years later. I would be annoyed if they stopped working because of something I viewed as not required.

                                                          1. 5

                                                            I keep track of every submission to Hacker News, Lobste.rs, and /r/Programming, and based on the titles alone, the percentage of titles with codepoints higher than 127 are

                                                            • HN: 15.97%
                                                            • Lobste.rs: 5.34%
                                                            • Proggit: 7.20%

                                                            All of these sites are explicitely English-speaking, all are based in the US, but they still have a significant amount of Unicode in their content.

                                                            1. 2

                                                              None of my users use Unicode. And I don’t use it. It’s nice to be future ready when one finally does. But I don’t think it’s a driving reason to change a bunch of stuff.

                                                              Maybe it’s not for you, but in general unicode in Python 2 was a fertile source of bugs. I regularly encountered it in both other people’s programs and my own. Even though I tried to do the right thing, it was often hard and simple mistakes slip in.

                                                              And yeah, I agree it’s annoying and that for some people it’s just useless “churn” and that sucks :-( But for a lot of us there is real value, too.

                                                          2. 2

                                                            it’s thoroughly an uninteresting shift

                                                            Doch, Unicode ist unglaublich nützlich!

                                                          1. 12

                                                            So the article seems to talk about big and slow companies and inertia as the underlying reason. I’m sure that’s true for some, but as I’ve written before, for Mercurial it’s just a ginormous pile of hard work. We’re not a big and bureaucratic organisation, but we do have a big commitment to backwards compat (maybe that’s inertia?). Nevertheless, Mercurial has been slowly migrating to Python 3 for about 10 years, in a way.

                                                            It’s just a lot of work and I get frustrated with people who seem to say “why don’t you just…” Well, we didn’t “just”, because it wasn’t a matter of “just”.

                                                            1. 5

                                                              I think it’s really unfortunate that mercurial was hard-hit by the 2to3 changes, but I’m happy the work to migrate is being undertaken.

                                                              1. 4

                                                                Yep, seems like another example of Windows XP: it will stay around as long as the community supports it because the cost of moving is too high to otherwise justify. OSS communities need to have a very clear policy (and perhaps a bit more draconian than Python here) about not supporting versions beyond X years old. Ubuntu is the canonical good example here: 5 years for LTS and that’s it. Simple and easy for all to predict and plan for.

                                                                1. 3

                                                                  Ubuntu is the canonical good example

                                                                  nice

                                                              1. 1

                                                                One wonders how they intend to handle the implied ping to GOOG servers with each page to look up performance.

                                                                1. 1

                                                                  There might be a way to do it similarly to how Safe Browsing v4 is implemented: a device-local cache combined with a lookup service for exceptions. https://blog.trailofbits.com/2019/10/30/how-safe-browsing-fails-to-protect-user-privacy/ is the best description I’ve found (even though it’s critical of the technique).

                                                                1. 9

                                                                  I paid off all of my loans and have some savings for emergency. So, I’m going to look into investing in some stocks. I am a total newbie when it comes to investment. So, I don’t want to start it without knowing what I am getting into.

                                                                  On technical side, I am going to try Google’s Sentiment Analysis APIs for one of my private projects.

                                                                  1. 11

                                                                    I work in finance, and most people who actively manage portfolios buy passive stuff (like ETFs or low-fee funds) for themselves with their “important” money.

                                                                    With then some amount of play money they often invest in the latest fad like cannabis stocks or some other bullshit, and they usually lose as much as they gain on average.

                                                                    Point is, keep it boring, with fees <70 basis points if you just want to leave your money alone for a decade or two. Don’t stock pick unless you would be willing drop the same amount on blackjack or poker.

                                                                    1. 2

                                                                      Robo-advisors (like Schwab or Betterment) offer a compelling solution, investing your moneys in index funds (passive stuff), rebalancing automatically and in certain situations, ‘tax-harvesting’ on losses.

                                                                      Still not an excuse to not understand what’s going on, but reduces labor (and potential mistakes).

                                                                      1. 2

                                                                        My problem with robo advisors for taxable investment accounts is that they have a certain amount of lock in - transferring shares out in kind creates a mess that’s fairly difficult to manage by hand. TLH/rebalancing is also quite easy to do manually once or twice a year on a small ETF or mutual fund portfolio.

                                                                      2. 1

                                                                        I like the idea of keeping it boring. Like I said, I am really new to investment. So, stocks might not be the only options I want to pursue. Also, I am not making a lot of money right now but I though it would be a good idea to do some study when I have time. Thanks for you suggestions.

                                                                        1. 3

                                                                          One piece of advice that got my attention was to contribute to your employer 401k program - specifically contribute as much as your employer would match. That way you know you’re getting a 100% return on that money, which is basically unmatched anywhere else. The catch is that contributing more than what your employer matches actually brings that % return down.

                                                                          The idea that marginal returns are what matters was particularly powerful to me - basically paying down your credit card debt at 18% interest rate is equivalent to investing in a stock with 18% return. So unless you can guarantee that you can get an 18%+ return on your investment, you may as well just “invest” in paying off your credit card.

                                                                          1. 1

                                                                            I am contributing to my 401k as much as my employer matches right now. I plan to increase my contribution in future though.

                                                                      3. 3

                                                                        Some books I recommend

                                                                        I agree with the no stock picking / buy an index advice even though these are about stock picking :) I’ve heard Mastering the Market Cycle book is a good introduction to investing.

                                                                        1. 3

                                                                          Congratulations!

                                                                          This is a ~16 page book that I recommend for new investors. It packs a bunch of useful advice in a very short volume: https://www.etf.com/docs/IfYouCan.pdf

                                                                          Past that, the Boglegeads wiki and forum has a wealth of information and people who can help if you want to learn more or ask about your specific situation.

                                                                          1. 3

                                                                            As a novice myself I found A Random Walk Down Wall Street refreshing.

                                                                            1. 2

                                                                              Thanks for the recommendation. I will definitely check it out.

                                                                            2. 2

                                                                              Good work getting to debt free!

                                                                              1. 1

                                                                                Thanks. I did not have huge debt. It was mostly student loan and my car installment. Still, it was a huge relief.

                                                                              2. 2

                                                                                Congrats on paying off your loans! One piece of advice (among the hundreds of unsolicited pieces of advice you’ll get when talking about investment online) is to only buy risky¹ investments with money that you don’t need to survive with. If you imagine that pile of money disappearing, would you still be able to pay for food, rent, and other daily expenses? It’s also prudent to plan for the occasional emergency expense such as last-minute travel for a funeral. You obviously can’t plan for everything (nor should you), but you don’t want to be put in a position where you have to sell stocks at a loss to pay for a plane ticket.

                                                                                ¹ “risky” in this context means anything that only makes sense as a long-term multi-year investment, such as stocks

                                                                                1. 2

                                                                                  Congrats on paying off all your loans!

                                                                                  1. 2

                                                                                    On the off-chance that you end up looking at peer-to-peer investment sites like LendingClub and Prosper, be aware that your money stays locked up for years in those loans. With LendingClub you may be able to sell some of your loan investments on a third party site (FolioFN) but Prosper does not have this. You won’t be able to get your money out easily (or at all) if you need it - you’ll get it back (hopefully with a profit) in a trickle as loans are (hopefully) repaid. I see these platforms now as essentially a medium term bet on economic stability, and I am personally not a sophisticated enough investor (or maybe I’m just too risk averse) to make that bet. I’m gradually withdrawing my investments as they’re repaid (that’s not intended as investment advice 😀)

                                                                                  1. 9

                                                                                    My personal favorite obscure stdlib bits:

                                                                                    • distutils.utils.strtobool(). Converts the strings y, yes, t, true, on and 1 to True, and n, no, f, false, off and 0 to False. Ridiculous for existing, ridiculous for being so en_US-centric, and ridiculous for being in a module titled distutils.utils (the utilities for the utilities?), but I’ve found it useful for the occasional personal script.
                                                                                    • bisect.bisect_left() and bisect.bisect_right(). Python has a complete binary search algorithm implemented as a library. I used this once when I had a sorted list of times and actions, and I wanted to know which action was currently the “valid” one.