I will just add a comment on an aspect of using emacs that no one else mentioned: (1) I find that I must bind caps-lock to control, and (2) as far as I can tell, no operating system does this in a way that really works besides OSX. So now I am stuck using OSX because I use emacs. When I use a GNU/Linux machine, I do it by ssh-ing in over the network from an OSX machine. I think you may find this to be something you have to deal with as well.
Entropy is expected information. That is, given a random variable, if you compute the expected value (the sum of the values weighted by their probability) of the information of an event (the log base 2 of the multiplicative inverse of the probability of the event), you get the formula for entropy.
Here it is explained at length: "An Intuitive Explanation of the Information Entropy of a Random Variable, Or: How to Play Twenty Questions": http://danielwilkerson.com/entropy.html
Fasting puts your cells into a "clean out the junk" mode that is quite powerful for deleting stuff, including cancer. That is, rather that being passive, fasting is quite active and uniquely potent. I had a lump in my throat near my vocal chords that I was told was a standard response to acid reflux and was inoperable. It was there for 15 years and hurt whenever I would sing. I did a 20 day fast last summer and just happened to have it examined and photographed before and after. Before the fast it was there and after it was completely gone.
Starvation, Stress Resistance, and Cancer
Roberta Buono, Valter D. Longo
Dysregulated metabolism is one of the emerging hallmarks of cancer cells.
Differential stress resistance (DSR) and differential stress sensitization (DSS) responses are the mechanisms caused by fasting and fasting-mimicking diet (FMDs) to promote protection of normal cells and induce cancer cell death.
Fasting-dependent reduction in glucose and IGF-1 mediates part of the DSR and DSS effects.
Fasting and FMDs have the potential for applications in both cancer prevention and treatment.
____
Either Longo or another fasting researcher pointed out that you can make a level of chemotherapy where none of the rats that are not fasting live and where all of the rats that are fasting live. So fasting is a powerful alteration of cells that makes them tolerate chemotherapy much better.
You might want to contact Alan Goldhamer of TrueNorth Health Center. They have almost four decades of experience getting fantastic results by fasting people (about 20K so far), such as curing cancers, Lupus, Diabetes, etc. See https://youtu.be/42QAyVkAS_0?t=71 or this https://www.youtube.com/watch?v=xuebTcdLIKY
The below is from a friend of mine who an M.D. told me has read so much about biomedicine that "it's as if he went to graduate school":
For general information on fasting, I recommend reading or watching Dr. Jason Fung. He is a nephrologist from Canada. His book The Obesity Code (I have read it) is selling well, but you can get the same information by watching YouTube videos, which I preferred to his book. My favorite were his early lectures that are less flashy “The Aetiology of Obesity Part 1 of 6: A New Hope” https://www.youtube.com/watch?v=YpllomiDMX0 However, if a six hour graduate lecture series is more than you want to sign on for, any of the more recent videos at www.dietdoctor.com will provide the basics.
In addition to Dr. Fung, a number of doctors are publishing articles and videos about fasting and cancer:
Some of this is very biochemistry based and is just tons of detail saying “fasting and/or a ketogenic diet will fight cancer.” Spending the time to understand the biochemistry of the disease and visualizing what you want your body to do will help your body heal. While this sounds very touchy, feely and like voodoo medicine to a traditionally trained biochemist, the research is strong on the ability of the mental imagery to have a therapeutic benefit. (Again, I cite Dr. Rosenthal, neuroscientist, as a higher authority).
Math major here: this is wrong. The expression 1/0 is NOT A NUMBER, even if you allow positive infinity or negative infinity. In particular, it is most certainly not 0.
Note that infinity would be a fine answer IF MATHEMATICS COULD BE CONSISTENTLY EXTENDED to define it to be so, but this cannot be done (see below). Note that using infinity does not "break" mathematics (as some have suggested below) otherwise mathematicians would not use infinity at all.
If we have an expression that is not a number, such as 1/0, you can sometimes consistently define it to be something, such as a number or positive infinity or negative infinity, IF THAT WOULD BE CONSISTENT with the rest of mathematics. Let's see an example of the standard means of getting a consistent definition of exponentiation starting with its definition on positive integers and extending eventually to a definition for on a much bigger set, the rationals (ratios of signed integers).
We define 2 ^ N (exponentiation, "two raised to the power of N") for N a positive integer to be 2 multiplied by itself N times. For example: 2 ^ 1 = 2; 2 ^ 2 = 4; 2 ^ 3 = 8.
Ok, what is 2 ^ N where N is a negative integer? Well we did not define it, so it is nothing. However there is a way to CONSISTENTLY EXTEND the definition to include negative exponents: just define it to preserve the algebraic properties of exponentiation.
For exponents we have: (2 ^ A) * (2 ^ B) ("two raised to the power of A times two raised to the power of B") = 2 ^ (A+B) ("two raised to the power of A plus B"). That is, when you multiply, the exponents add. You can spot check it: (2 ^ 2) * (2 ^ 3) = 4 * 8 = 32 = 2 ^ 5 = 2 ^ (2 + 3).
So we can EXTEND THE DEFINITION of exponentiation to define 2 ^ -N for positive integer N (so a negative integer exponent) to be something that would BE CONSISTENT WITH the algebraic property above as follows. Define 2 ^ -N ("two raised to the power of negative N") to be (1/2) ^ N ("one half raised to the power N"). Check: (2 ^ -1) * (2 ^ 2) = ((1/2) ^ 1) * (2 ^ 2) = 1/2 * 4 = 2 = 2 ^ 1 = 2 ^ (-1 + 2).
Ok, what is 2 ^ 0 ("two raised to the power of zero")? Again, we have not defined it, so it is nothing. However, again, we can CONSISTENTLY EXTEND the definition of exponentiation to give it a value. 2 ^ 0 = (2 ^ -1) * (2 ^ 1) = 1/2 * 2 = 1. This always works out no matter how you look at it. So we say 2 ^ 0 = 1.
I struggled with this for days when I was a kid, literally yelling in disbelief at my parents until the would run away from me. I mean 2 ^ 0 means multiplying 2 times itself 0 times, which means doing nothing, so I thought it should be 0. After 3 days I finally realized that doing nothing IN THE CONTEXT OF MULTIPLICATION is multiplying by ONE, not multiplying by zero, so 2 ^ 0 should be 1.
Ok, is there a way to CONSISTENTLY EXTEND the definition of exponentiation to include non-integer exponents? Yes, we can define 2 ^ X for X = P / Q, where P and Q are integers (a "rational number"), to be 2 ^ (P/Q) = (2 ^ P) * (2 ^ -Q). All the properties of exponentials work out.
Notice how we can keep EXTENDING the definition of exponentiation starting from positive integers, to integers, to rationals, as long as we do so CONSISTENT with the properties of the previous definition of exponentials. I will not do go into the details, but we can CONSISTENTLY EXTEND the definition of exponentiation to real numbers by taking limits. For example, we can have a consistent definition of 2 ^ pi ("two raised to the power of pi") by taking the limit of 2 ^ (P/Q) as P/Q approaches pi.
HOWEVER, IN CONTRAST to the above extension of the definition of exponentiation, there is NO SUCH SIMILAR CONSISTENT EXTENSION to division that allows us to define 1/0 as ANY NUMBER AT ALL, even if we allow extending to include positive infinity and negative infinity.
The limit of 1/x as x goes to zero FROM THE POSITIVE DIRECTION = positive infinity. Some example points of this sequence: 1/1 = 1; 1/0.5 = 2; 1/0.1 = 10; 1/0.01 = 100, etc. As you can see the limit is going to positive infinity.
However, the limit of 1/x as x goes to zero FROM THE NEGATIVE DIRECTION = NEGATIVE infinity. Some example points from this sequence: 1/-1 = -1; 1/-0.5 = -2; 1/-0.1 = -10; 1/-0.01 = -100, etc. As you can see the limit is going to NEGATIVE infinity.
Therefore, since positive infinity does not equal negative infinity, there is NO DEFINITION of 1/0 that is consistent with BOTH of these limits at the same time. The expression 1/0 is NOT A NUMBER, even if you include positive and negative infinity, and mathematics cannot be consistently extended to make it into a number. Q.E.D.
I released it as Open Source because Microsoft Research sent someone to my office to ask me to, back when Microsoft was calling Open Source a "cancer".
The LLVM introduction by Latner refers to the "standard delta debugging tool", so it is rather well-known: https://aosabook.org/en/v1/llvm.html 'unlike the standard "delta" command line tool.'
"Show me your flowcharts [code], and conceal your tables [schema], and I shall continue to be mystified; show me your tables [schema] and I won't usually need your flowcharts [code]: they'll be obvious." -- Fred Brooks, "The Mythical Man Month", ch 9.
I used to be a teaching assistant for CS 61A (intro to programming) at Berkeley teaching from this book with Brian as the instructor.
One of Brian's primary points is the following:
> Scheme ... has a very simple, uniform notation for everything. Other languages have one notation for variable assignment, another notation for conditional execution, two or three more for looping, and yet another for function calls. Courses that teach those languages spend at least half their time just on learning the notation. In my SICP-based course at Berkeley, we spend the first hour on notation and that's all we need; for the rest of the semester we're learning ideas, not syntax.
Bullshit. Again, I was a TA for this course. You do not spend the rest of the semester on ideas, you spend the rest of the semester on the students being very confused.
This "everything looks the same" property of Scheme and of all LISP-like languages is a bug, not a feature. When the semantics is different, humans need the syntax to be different. In contrast, LISP/Scheme make everything look the same. It is quite hard to even tell a noun from a verb. This makes learning it and teaching it hard, not easy.
Brian is selling a fantasy here. If you think Scheme is so great, look at this nightmare of examples showing the various ways to implement the factorial function in Scheme: https://erkin.party/blog/200715/evolution/
All of this "abstractions first, reality second" agenda is just a special case of what I call "The Pathology of the Modern": the pathological worship of the abstract over the concrete. Everything modernism touches turns into shit. I am done with living in modernist shit and I hope you are too.
"Exploratory Experimental Studies Comparing Online and Offline Programming Performance" by Sackman, Erikson, and Grant. Communications of the ACM. January 1968.
One thing I and other programmers do that increases productivity is to write a programming language specific to the task. In particular, it allows the programmer to factor out a cross-cutting concern as a language feature.
"Exploratory Experimental Studies Comparing Online and Offline Programming Performance" by Sackman, Erikson, and Grant. Communications of the ACM. January 1968.
A set being infinite does not mean that it contains everything. For example, the set of even integers is infinite but does not contain the number 3. So even if the universe is infinite, that does not mean that it contains another copy of you, or anything else in particular.
Think in object orientation: Put related nouns and verbs together: it is much easier to organize your thoughts using constructors and methods. However do not use virtual methods unless you really must, and if you do, make the class a well-defined explicit interface having only abstract methods. That said, avoid using implementation inheritance: overriding one defined method for another.
Get rid of pointers: When passing objects by reference, using references instead of pointers, especially reference to const, makes code much easier to read. When combined with vector instead of raw arrays, most uses of raw pointers go away.
Do not implement your own fancy data structures: instead use the Standard Template Library. I use STL map, set, and vector all of the time and they remove the need for most other data-structures. Also, when you can, use iterators to traverse these containers, rather than the visitor pattern. Using iterators keeps the control flow of the client contiguous, so it is much more flexible than visitors.
We have the longest unguarded border in the world and, if the two countries diverge enough culturally, that will become a real problem. Can you imagine if we had the problems on the northern border that we have on the southern border with Mexico?