jwhite
Peter Sutton is an anthropologist and linguist (>50 years); Keryn Walshe is an archaeologist (>35 years). Peter Sutton in particular has spent large amounts of time living with indigenous people in the far north. Their book describes many deficiencies in Dark Emu, and also gives a huge amount of interesting information about how aboriginal people lived, and the way they curated the land and the food resources available to them.
https://www.amazon.com/Farmers-Hunter-gatherers-Dark-Emu-Deb...
But also: something changed in the 16th century: do you contend that the monarchs suddenly got uglier to the point that artists didn't want to paint them anymore?
Compare to Germany: weeks behind SK but already more than three times as many cases, new case rate in the last few days of 2500-4500 (SK's max: 851), daily deaths in the last few days 10-29 and heading north. Actually the death rate must reflect an amazing health care system given 30k cases, but it's early days for Germany. Their pipeline is very full, agreed I wouldn't want to make a prediction there.
EDIT: sensitivity.
The Nullarbor is a vast, arid, unpopulated plain over 1000km wide. I think the comment was meant to suggest that infrastructure projects like this are challenging in Australia, because the distances involved make them expensive, but the low population density makes them much less profitable than in places like the US and Europe with high population densities.
Many tourists from other parts of the world come to Australia thinking they can "just drive" from Melbourne to Cairns or Perth to Adelaide, not realizing how much of an undertaking that is because they don't have a good sense of the distances involved.
Wouldn't this also have been considered as part of the decision to ban Huawei? And yet the administration proceeded anyway.
Something that might be worth noting: two minutes of googling didn't turn up the author's age, but I recall seeing this photo on his website when I bought it some time after it was published in 2008: https://hcsw.org/contact.php
Here's a more up-to-date photo: https://hoytech.com/about
It's possible he was quite young when it was published. If that's the case, then I think the book is all the more a towering achievement. It's abrasive, and it smells a bit of 2000s forum fanboy discussions, but mature people should be able to read past the more opinionated parts and find the gems in the technical treatment.
The telecom bubble and crash was almost a side-effect. The telco executives saw the web taking off and used it to justify wildly over-inflated projections of traffic demand growth, and then began building out debt-financed networks to meet it. When the traffic didn't materialize (partly because the dotcom bubble burst), they had a bunch of overcapacity not generating revenue to service the debt that financed it, and that killed them.
Many embedded programmers come from a background that doesn't expose them to those sorts of ideas though.
I haven't had the time to learn it yet, though I would like to.
Contrast that to Haskell's ghci interpreter, which is slower (last time I checked) than the same code built on the command line with ghc, the compiler. But I would still consider Haskell a compiled language, not an interpreted one, since you never run code in production under ghci, you always ship your binaries.
I suppose it's about perception. To me "interpreter" refers to a language implementation strategy. It's fuzzy, I know, since there is some continuum between interpreting an AST directly, compiling the AST to bytecode and running the bytecode on a VM, JIT compiling the bytecode to machine code on the fly, and compiling offline direct to machine code (like C/Go/Rust). To some ears, "interpreted" can sound synonymous with "slow", which is I guess what prompted my comment.
Finally, to me the place where you can enter expressions to try out your program interactively is the REPL, not the interpreter.
Anyway, thanks for explaining your position to me. (Also, good to know Python dev environments have improved, but I guess it's to be expected, 10 years is a long time :-) .)
I've also noticed that reading in the office attracts strange looks sometimes. I don't know what to do about that. Reading research papers and text books related to what one is working on should be encouraged in a knowledge profession, yet I almost never see colleagues doing it. I guess if your hands aren't on the keyboard those JIRA tickets won't get closed.
I also got my start on pre-GUI computers (a VIC-20, specifically).
I only skimmed so far, but this quote stuck out:
"Programming is fundamentally a way to save human labor, and that includes our own labor."
I'm continually amazed at how many software engineers seem to miss this point.
https://www.gnu.org/software/bash/manual/html_node/Shell-Par...
That's the sort of thing that turned me off. I still tend to avoid those nooks and crannies, although they are sometimes useful. I'm not an expert.
I'm not sure about Unix shells being inspired by C semantics. I actually started out on csh or tcsh, I forget which, two decades ago. I'm not sure that making a shell language "C-like" is a useful goal, and those two shells both fell out of favour because they have many flaws. I switched to bash quite quickly.
- I used to spend a lot of time stuffing things into variables and then trying to operate on those, which is how you do things in imperative languages. Shell is better thought of in dataflow terms, i.e. pipelines. So I started using pipelines more and more.
- The corollary is that you start thinking more about data (passing between pipeline stages) and less about control flow.
- Compare an if statement in C, for example, to an if statement in a functional language. In C an if statement has no value per se, but in functional languages if "statements" are actually expressions that have a value:
f :: A -> String f x = if isFoo x then "foo" else "other"
In shell an if statement is just another command, so you can do things with its "value", i.e. its stdout:
if do_test
then
cat file1.txt
else
cat file2.txt
fi | grep pattern
Because I was so used to thinking of if statements as just control flow, I never used to think of piping them to another command like that.Also if you think carefully, that last pipe to "grep pattern" has the flavour of partial evaluation in functional programming.
- I tend to think more in terms of building up an execution environment these days, in the same way that lexical scope works in regular programming languages. In shell, of course, that means command invocations, sub-shells, etc., because the shell doesn't really have good lexical scoping. The simplest example I can think of is executing some commands in another working directory with a sub-shell:
(
cd $dir
run_test > "${f}.log"
)
You could compare it to RAII in C++ or with- style macros like WITH-OPEN-FILE in Common Lisp.Those are just some examples.
EDIT: Also, have a read of the links in chubot's post: https://news.ycombinator.com/item?id=14012453 . That's the sort of mentality that will change your approach to shell programming.
Would you care to give a link to your guide? I'd be interested to read it.
It took a lot of pushing from a mentor for me to finally click with the overarching principles of shell and see how to master it and become productive with it. He really forced me into it as well, I wasn't a willing pupil for quite some time, but he kept persisting and finally I started listening to him. I'm so glad I did. I've never read any book or tutorial or guide that teaches what he taught me either, despite searching several times. Also, I don't think I could have learned to master shell if I hadn't learned functional programming first. The day I realised how amenable shell is to higher-order thinking was a real epiphany.
These days shell is a really important tool in my toolkit, and I can see just how much some of my colleagues are held back by not knowing it.
Anyway, I really enjoyed the video, it was a nice exposition.
Just being a SoC has another advantage: reduced part count, so you can fit more functionality onto a smaller PCBA.
Another commenter mentioned the Cyclone V and Zynq SoCs. My day job is in the telco industry. The equipment vendors we sell to are always pushing for higher and higher densities in their chassis and line cards, and it drives a lot of our design decisions. Chips like the Cyclone V and Zynq help a lot in achieving those aims. Our PCBAs have shrunk dramatically (with increasing functionality) over the last decade.
The continual pressure to reduce costs and power consumption also leads to choices like minimizing the other available system resources (e.g. clocks, memory bandwidth, RAM, flash), which can end up reducing the effectiveness of a GPU.
As with everything in engineering, there are many different problem domains, each with unique constraints dictating different solutions.
I have interviewed candidates like this (not web, embedded systems) who talked a lot about the in-house frameworks of their previous employers, and could sketch how they would solve a problem in that environment in hand-waving terms, but couldn't implement strlen() (which would be much closer to the kind of coding they would have to do in our environment).