Actually Leibniz invented the modern dy and dx notation and did view the differentials as genuinely nonzero, which is generally speaking a safe assumption. In other words, dy/dx really was a quotient, albeit of really tiny values (at least we assume dx can become arbitrarily small while remaining nonzero). The calculation Leibniz would do looked something like this. First he would consider an equation y = x^2. Then he would consider a nonzero difference so something like y + dy = (x + dx)^2 = x^2 + 2x dx + (dx)^2. At this point he would use his starting equation to subtract y from the LHS and x^2 from the RHS, leaving: dy = 2x dx + (dx)^2. Then he would divide by dx leaving dy/dx = 2x + dx and since dx is infintisimal, he would just lop it off. Suffice it to say, just ignoring the nonzero dx on the RHS, or casting it to 0 while conveniently ignoring the division by 0 on the LHS, was rather disturbing to many critics. A lot of work had to be done by Riemann, Cauchy, and Weierstrass over the following century after Newton and Leibniz invented calculus to answer the question you are asking.
I think the best way to understand this is that division by dx is always allowed. It is genuinely a nonzero quantity. Later, we think more in a more abstract way in a tiny neighborhood around (x,y), considering what happens to dy as dx becomes arbitrarily small, but it never vanishes entirely. That explains why we can say dy = 2x dx or dy/dx = 2x and both are completely true and reasonable. I think the author's argument is that d() is a bit easier to understand because we aren't dividing by dx but it makes no sense (to me) that way. If you cannot divide by dx, a nonzero number, then why not? And if you can, why doesn't dy/dx involve zero division, which is clearly not well-defined? I think answering those questions makes calculus a lot easier to understand and that they are in a sense the hardest questions. The notation this author uses doesn't really illuminate those points and the fact that the author realizes that he is basically teaching the students to accept zero division for most of the year suggests he is basically saying we should go back to a Leibniz-era approach to calculus. I would rather make rigorous what is meant by dx/dy and what exactly dx and dy are.
Personally I dislike hyperreals for the reason that we lose the all-powerful Archimidean property (for all real numbers x, there exists a natural number N such that N > x or N = x). But yes, hyperreals are completely consistent. Robinson showed, I want to say in the 1960s, that any statement about the logical consistency of the hyperreals is true if and only if the same is true for the reals. Then hyperreals basically save Leibniz by introducing the standard part function st(), which is rigorously defined.
Again, for me, this seems a little costly. If cookbook calculus is a struggle, the student probably won't take real analysis. And once you get to analysis, the fact that the reals are Archimidean grounds the whole endeavor on a very intuitive basis. By contrast, the hyperreals are not Archimedian so we can find omega bigger than every natural number. I don't personally feel like that helps intuition and indeed requires development of non-standard analysis but I admit it is pretty cool that Leibniz-style computations can be salvaged this way.
I think the cost is just a question of tradition what you find harder and the point author makes that it's easier to learn trough non-traditional way.
I see losing Archimedean property as more of a win than loss. It's a one simple thing that turns calculus operations into single algebraic evaluation, where you can avoid dynamic limits. Things become simpler and easier to prove.
Dual numbers are basically big/little O notation. They combine beautifully with Robinson's NSA to give the most 18th century-like approach to deriving integral/derivative formulas that I know. And it's fully rigorous!
> Students have to memorize a diversity of processes for essentially performing the same task.
Is that true for differentiation ? I don't recall having to memorize many things, just how differentiation composes over +,-,×,÷, function composition and the differential of a few standard forms.
Symbolic integration, on the other hand, is a whole can of worms.
I actually did add a timer as a final "if all else fails" for my regex implementation rather recently, maybe 6 months ago. I don't even know of any scenario that could reach the timer because I have a robust allowlist/denylist and a ton of unit tests. But I would rather just be certain and it wasn't hard.
Publicity benefit corporation HAHAHA typo, think they mean public benefit corporation. Anthropic however is DEFINITELY a publicity benefit corporation.
Not for vibe-coders, and also not for any business or user with any project using AI for "most" of the code (an ill-defined term in their ToS that nonetheless safely excludes many serious projects adopting AI for a variety of reasons). I have a code base that is entirely handwritten JS. I am porting it to .NET/C# with AI assistance, plus a lot of supervision and manual revision by me to ensure the quality meets my requirements. When finished, the code base will be "mostly" AI-generated within the meaning of Codeberg's ToS, even though I wrote the underlying code base by hand, and will have overseen and approved every line of AI-generated C# code myself. I don't have any reason to trust that Codeberg will be more or less reasonable in my particular use case, nor that they will interpret their ToS consistently to permit or disallow my project even assuming their terms do allow my project (and it's just of many to be clear). They control their ToS and I assume they drafted it vaguely on purpose to ensure they have flexibility to kick out anyone deemed undesirable. At least that's what I would do in their shoes if I wanted flexibility. If coding is a hobby and you hate AI or simply never use it, you can definitely use Codeberg. If you are an enterprise customer, or you use GenAI to any significant extent (or both), you nearly certainly cannot safely do so. And that's fine; Codeberg can do whatever they want. But Codeberg is in no way a "perfect drop-in 1:1 replacement" for most developers.
Ah yes. The famous problem that is ambiguous because it ignores space travel!
Let M_n := Mary's age now = 24, A_n := Ann's age now, and let M_p, A_p be the ages of Mary and Ann at a certain point in the past. We have that M_n = 24 = 2(A_p) from "Mary is 24 years old. She is twice as old as Ann was", immediately implying that A_p = 12. At the point in time p when M_p, A_p were the ages of Mary and Ann, respectively, we have that M_p = A_n from "when Mary was as old as Ann is now". Also, let x := | M_n - M_p | = | A_n - A_p | be the amount of time that has passed between the point p in time and now. Since M_n > M_p and A_n > A_p by construction, we can drop absolute values, yielding M_n = M_p + x, A_n = A_p + x. Substituting, we have M_p = 24 - x, and A_n = 12 + x, yielding x = 24 - M_p = A_n - 12, yielding A_n = 36 - M_p. But, since M_p = A_n, we can write 2(A_n) = 36 yielding A_n = 18.
This problem, however, completely ignores the fact that Ann boarded an interstellar spaceship 6 years ago at a reasonable fraction of the speed of light c. To account for this missing detail, we need to use Lorentz factors. Since Ann was the one traveling in space, we have to adjust her current age by calculating A_n = A_p + x * sqrt(1 - (v/c)^2)), where v is Ann's velocity Given that the problem is missing the critical detail of how fast Ann is hurtling towards the outer boundary of the universe, we really can't calculate their age at all. Nonetheless, given the completely reasonable and plausible assumption that Ann has been traveling at 95% of the speed of light because spaceships totally can do that, Ann is obviously about 13.87 years old. So 18 years old is clearly the wrong answer.
Note that the fact that Ann is not aging as much due to traveling at an enormous velocity does NOT change Mary's age. Mary remains exactly twice as old as Ann was at the given point in the past, so she's 24 and 6 years have passed from her perspective. Only Ann's age changes. Obviously.
I studied harmony and music analysis many years ago as a piano performance major in school. One thing I will say is that harmony really is not an abstract set of symbols on a page representing chords, but rather is a taxonomy of common specific sequences of simultaneously sounding pitches, abstracting away instruments or larger structural considerations and providing a dictionary that defines the most common patterns. Here's an example: Perhaps you're familiar with the idea of major and minor, but you might be unfamiliar with a Picardy third, where a composition is in a minor ("sad") key throughout but ends in that same pitch but on a major ("happy") chord. J.S. Bach used Picardy thirds regularly to end his compositions, but the Picardy third became rarer after Bach's death. Still, it's a beautiful and striking harmonic progression that continues to appear now and then. And now you know EXACTLY why that 1967 song by the Turtles, "Happy Together", has that really nice and memorable ending; that's a modern pop example of a Picardy third. Again, harmony is not abstract; it's the names musicians have given for specific sequential combinations, many of which have been named centuries ago. It's not about nicer or worse; sounds are sounds, but some are combined more often than others and those combined most frequently have well-known names that can be used to explain concisely the "harmonic" aspect of a piece of music.
I think the word "taxonomy" is a really good way to look at music theory. Really, the study is about giving names and notation to things in music so we can write and talk about it at all.
There's an interesting idea though that there could be a deeper why specific sounds and their combinations are the things we create names for, but that's an intersection of cognition/physics/culture that goes beyond elementary music theory.
where would I learn a taxonomy of such motifs? I trained for classical piano as a kid, and I'm slowly trying to learn jazz piano as I ease back into it! I'd love to learn more about these types of harmonic ideas and motifs as I get back to playing
Question: Why does AWS need to roll back estimated bills to a "last known good" state? I get wanting to do that for ACTUAL billing mistakes, but for estimates, they're just that -- approximations. I guess it's fine for predictive purposes to store estimates so they can be compared to actual usage and optimized. But why would AWS bind the values of present estimates to the estimates made earlier in the month. The calculation should always be:
1. Current month's usage * applicable rates; +
2. Estimated future usage for the month * applicable rates.
And Item 1 obviously requires proper data persistence, but Item 2 is just a projection. If they don't have Item 1 correct, AWS's whole system is in question, but I don't think that's the issue. I'm going to guess now -- looking forward to reading the root cause analysis -- that the problem is that someone decided to get too fancy with the estimates, and built a latent requirement that all prior estimates for the month must be available to compute the current estimate. Without estimates working, no estimates are available, and some denominator in an averaging or smoothing or normalizing function goes to 0; then everyone's estimated bill explodes without bound (subject to floating-point arithmetic) resulting in trillion-dollar estimates.
Thats not really how estimates work. The actual metering data is ingested in near real time. The metering * pricing plan is processed within a few hours; thats what youre seeing for “estimated spend” IIRC. The actual billing accumulation is done later, at the end of the cycle, because pricing has cross service discounts, price tranches, credits tied to total spend, etc.
“Rolling back” estimated bills is reprocessing the historic metering data by an older or newer pricing plan version. As i mentioned in another comment someone will have messed up a metering type vale (eg GB/B). Thats why theyll need a few hours to redrive the metering data.
I think the best way to understand this is that division by dx is always allowed. It is genuinely a nonzero quantity. Later, we think more in a more abstract way in a tiny neighborhood around (x,y), considering what happens to dy as dx becomes arbitrarily small, but it never vanishes entirely. That explains why we can say dy = 2x dx or dy/dx = 2x and both are completely true and reasonable. I think the author's argument is that d() is a bit easier to understand because we aren't dividing by dx but it makes no sense (to me) that way. If you cannot divide by dx, a nonzero number, then why not? And if you can, why doesn't dy/dx involve zero division, which is clearly not well-defined? I think answering those questions makes calculus a lot easier to understand and that they are in a sense the hardest questions. The notation this author uses doesn't really illuminate those points and the fact that the author realizes that he is basically teaching the students to accept zero division for most of the year suggests he is basically saying we should go back to a Leibniz-era approach to calculus. I would rather make rigorous what is meant by dx/dy and what exactly dx and dy are.