< Back to the archive

Like what you see? Subscribe here and get it every week in your inbox!

Issue #25 - August 25, 2019

Here are the top threads of the week, happy reading!

Top comment by seagullz

Jeff Erickson's Algorithms text is a great resource: http://jeffe.cs.illinois.edu/teaching/algorithms/

The entire book -- including the portions labeled Models of Computation, Director's cut, and Extended Dance Remix -- presents accessible introduction to much of the CS theory landscape.

Someone already praised the shorter book titled "Algorithms" by Dasgupta et al, and I second it. Tim Roughgarden's "Algorithms Illuminated" series is in this genre too.

I'd also recommend the MIT lecture notes on Mathematics for CS: https://courses.csail.mit.edu/6.042/spring18/mcs.pdf This is distinctive for its intuitive explanations with essential, approachable formalism. The exercises are fine too, if you are really mean it.

Sipser's book on the Theory of Computation is great and the one by Hopcroft et al is also very good (as suggested by others). But the most beginner-friendly (or, light on math) coverage of this area is apparently in Peter Linz's book "Introduction to Formal Languages and Automata". An alternative flavor in the treatment of much of the same topics is in this free book: http://cs.brown.edu/people/jsavage/book/

Top comment by Fnoord

I recommend multiple layers. Why? Because some devices/apps will circumvent one of these layers one way or another.

I use Pi-Hole plus WireGuard to route all my devices through my home broadband connection (so even on a hotel/train WiFi, when on LTE, etc). I forward it to Unbound which uses DNSSEC and DNSCrypt. I'm using an EdgeRouter Lite for that purpose. It does add a little bit of latency, but I don't mind, as it also increases my privacy on the insecure link. It also works on say a smart TV or an official Android device (I use a rooted Android device with microG which doesn't implement GAds). My partner sees barely any ads at home due to this setup (I did not bother to setup WireGuard on her smartphone as of yet).

On each individual client device I also use a layer 7 firewall ("personal firewall"). On macOS I use Little Snitch and LuLu. On Linux I use OpenSnitch. I don't use Windows, but if I would I'd at least remove all the tracking stuff (for example with O&O ShutUp). On Android, I don't use a layer 7 firewall which is my bad.

For browser, on every OS I use a configured Firefox (which I did NOT document; my bad!) with a bunch of addons. uBlock Origin (mainly to manually block "you are blocking ads" notices). I use uMatrix, Cookie AutoDelete, Smart Referer, Privacy Badger, Decentraleyes, HTTPS Everywhere, containers for Amazon/Facebook/Google (would like to add Microsoft), CanvasBlocker, Tracking Token Stripper, Forget Me Not, Terms of Service; Didn’t Read, and Buster: Captcha Solver for Humans.

uMatrix will break the web. However it is more user-friendly than NoScript ever was. You are going to have to configure such. For websites you regularly use, you can save the temporary changes, or just not use such bloated websites. Also, I recommend the addon Dark Reader and the feature Reader Mode.

To test your setup on your browser, try ipleak.net. One of the things I configured in Firefox, is to disable WebRTC. I don't use an addon for that.

Top comment by smacktoward



   The Master does his job
   and then stops.
   He understands that the universe
   is forever out of control,
   and that trying to dominate events
   goes against the current of the Tao.
   Because he believes in himself,
   he doesn't try to convince others.
   Because he is content with himself,
   he doesn't need others' approval.
   Because he accepts himself,
   the whole world accepts him.
Tao Te Ching, Stephen Mitchell translation (http://taoteching.org.uk/index.php?c=30&a=Stephen+Mitchell)

Top comment by mattkevan

Bandcamp. It’s awesome for discovering new music.

I love exploring weird micro-genres while working, so the discover feature can keep me going for days while going deep into a particular style. 19A0s dreamwave, vaportrap, Chinese traditional vs dubstep, baroquecore - it’s all there!

Neither Spotify or Apple Music allow searches by deep genre tags - ‘electronic’ is not enough - or by record label, which is frustrating as I often want to explore other artists on the same label. For example, listening to the entire Ghost Box back catalogue.

Top comment by pmyteh

I've mostly worked in public-sector bureaucracies, not software companies, so my experiences won't line up exactly. In each case, the rule has been strictly pro-rata.

I've generally felt that the company has had the good end of that deal, especially for the higher fractions (0.6/0.8 of full time): productivity seems to me to be non-linear, and trading off the end-of-the-week burnout for a little more payroll admin and management sounds great. Where the fraction is much smaller, the increase in coordination costs probably means that it's more finely balanced.

The other point I'd make is that less than pro-rata will sound unfair to your part-timers, whether the intentions and justification are good or not. And defending that isn't a hill I'd die on: in skilled jobs staff goodwill is a precious commodity not to be squandered.

There may also be legal issues: I suspect that lower rates for part-timers would be unlawful indirect sex discrimination in the UK (the part-time workforce being female to a much greater extent) but that may well not be true where you are.

Top comment by memset

I think you may benefit from thinking more concretely about what you want to do. It is one thing to say "not-programming" - which is very broad, so broad that it is not terribly helpful - and quite another to say "I'd like to make a living as a jazz musician" or "a biology researcher" or any number of other things. Start there: what do you want to run towards, rather than what you are running away from.

Second, there are many possible career paths which are adjacent to programming, and which would use your technical skills, but not as part of your day-to-day. This could be project management, product management, technical writing, or even engineering people management. As before, if you have an idea of a specific function in your organization that you would find interesting, and which would make use of your talents as a programmer, then this may be an easier route than starting from scratch.

When it comes to any of these functions, my advice would be to: (1) Find small ways to demonstrate your interest in aptitude for those skills. For example, work with your product manager to write a product brief ("Hey, can I take a crack at it and ask for your feedback? I'd love to learn how to do this kind of thing.") And, (2) if you are able, express to your current manager that you'd be interested in learning additional skills and possibly making a - deliberate, smooth - career transition.

If you pursue a degree - be it in business, or any other field - realize that you would likely be competing for jobs with others who have 10 years of experience in the field, rather than new college hires. This is not an impossible thing! But this does require a strong narrative, and your ability to articulate why you made a career change and what specifically you can offer based on your previous work experience in the unrelated field.

My overall point would be to really take some time to sketch out what you would want to do (in the affirmative), why it is interesting to you, and how specifically (not in a hand-wavy sense, but "here is a specific task that I could do more effectively and here is why") your current skills would have a multiplier effect on your new path.

Best of luck to you!

Top comment by conception

So, no one has touched on a technical limitation. Bluetooth sucks for going through water. (If you like The Maths http://www1.lsbu.ac.uk/water/microwave_water.html )

Guess what people are mainly made of?

So, if you are standing between a BT transmitter and a BT receiver a lot of magic needs to happen to get the data moving between the two.

People love Airpods. People often put their phones in their pockets. A lot of water in the way.

If you notice BT being particularly terrible, look for how water might be blocking the signal.

This, of course, isn't the cause of all BT problems, but knowing this fundamental really helps troubleshoot when you run into a lot of them.

Top comment by lubujackson

Your curiosity, professional or personal, probably has little bearing on what they tell you. The wording you use doesn't matter - exit interviews are always framed as "what we could have done better/could do better in the future?" but it is rarely so innocent in reality, and people know this. At best, companies use divulged complaints as a basis for negotiation retain the employee (what if we raised your salary to match your offer? What if we reassigned you to a different manager?) but often it is simply used get the employee to sign a waiver relieving to company of any legal blame. And a likely outcome is that their complaint about their boss gets passed along and it bites them in the ass when they need a referral down the road. So what advantage do they have for being honest? In what way could it possibly benefit THEM to tell you anything?

To be honest, a company should always know or be able to figure out the real answer to this question if it their own doing. Either the employee got a better job or the writing was on the wall. If you as a company have people leaving and no one knows why, you don't ask the leaving people you ask the people who are staying - Bob is leaving, is there anything we can do to improve YOUR experience? When they are out the door it is too late, so focus on the employees that are there.

Top comment by caymanjim

The simple answer is that they don't. It's a false premise.

Developers who are specifically targeting systems with limited memory will try to produce small binaries. If you're talking about a distribution like Ubuntu, though, it's simply not a concern. At all. Applications are built to do whatever it is that they need to do, and whatever size they end up being is how big they are, almost without exception.

The reason CLI binaries are small is that ALL binaries are small. They are compiled, and any resources they need are stored externally in other files. They use shared libraries, making the code even smaller through re-use.

I have 1785 programs in /usr/bin on my Ubuntu server, and all but 10 of them are under 5M. The ones that are larger are only big for unusual reasons (e.g. mysql_embedded).

I'm not sure what you're referring to when you talk about usability. Are you saying that my 1.1MB nginx lacks some utility? And that it lacks it because someone was worried about the size of the binary? That's simply false to the point of being nonsensical.

One of the biggest binaries I use is the Postgres server, at a hefty 6.5MB. Is Postgres missing features that affect its usability?

Top comment by rowanG077

I'm noticing a frequent problem with a handful of construction workers. Rather than constructing for the 80% of what a building must do, they think of all the possibilities that go wrong and start from the edge cases inwards, which individually represent a small piece of the whole.

I would rather they deliver a building and just let it collapse when an edge case occurs.

Working in the manner they do is causing them to miss deadlines with nothing to show. I'd be ok if they missed deadlines but a building could already be used for 50% and it's well documented what it doesn't do, but we're getting to the finish line with no useable building yet.