feat: added two articles
34
frontend/scripts/imagedownloader.sh
Executable file
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Usage: $0 <website_url>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create a directory to store images
|
||||
mkdir -p downloaded_images
|
||||
cd downloaded_images
|
||||
|
||||
# Counter for image naming, start at 1
|
||||
counter=1
|
||||
|
||||
# Extract image URLs and download
|
||||
wget -q -O- "$1" | grep -oE 'https?://[^"]+\.(jpg|jpeg|png|gif)' | while read -r img_url; do
|
||||
# Download image
|
||||
wget -q "$img_url" -O "temp_image"
|
||||
|
||||
# Get image width using file size and basic check (approximate)
|
||||
width=$(file "temp_image" | grep -oE '[0-9]+ x [0-9]+' | cut -d' ' -f1)
|
||||
|
||||
# Check if width is over 400
|
||||
if [ -n "$width" ] && [ "$width" -gt 400 ]; then
|
||||
# Rename to sequential PNG starting from image1.png
|
||||
mv "temp_image" "image$counter.png"
|
||||
((counter++))
|
||||
else
|
||||
# Remove images that don't meet criteria
|
||||
rm "temp_image"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Downloaded $((counter-1)) images larger than 400px wide"
|
2320
frontend/src/Config/Pages/Blog/Records/BigFatSurprise.elm
Normal file
1088
frontend/src/Config/Pages/Blog/Records/PlantBasedMeta copy.elm
Normal file
1088
frontend/src/Config/Pages/Blog/Records/PlantBasedMeta.elm
Normal file
1088
frontend/src/Config/Pages/Blog/Records/PlantBasedMeta.elm.bak
Normal file
259
frontend/src/Config/Pages/Blog/Records/Shenangians.elm
Normal file
|
@ -0,0 +1,259 @@
|
|||
module Config.Pages.Blog.Records.Shenangians exposing (..)
|
||||
|
||||
import Config.Pages.Blog.Types exposing (..)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleShenanigans : BlogArticle
|
||||
articleShenanigans =
|
||||
{ articleName = "Cuckery 101: Cate Shanahan's Masterclass in Debate Dodging"
|
||||
, articleDescription = ""
|
||||
, articleLink = Path.toString Path.Blog_Shenanigans
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, articleImage = "shenanigans"
|
||||
, articlePublished = "Jun 6, 2024"
|
||||
, articleBody = """
|
||||
It's basically a sound induction at this point that anti-seed oil clowns won't debate me. My comprehensive, 15,000+ word, 200+ reference [article](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry) on seed oils is almost three years old, and since it was published, nobody from the opposition has offered even a shred of substantive criticism toward it. A few have tried, but ultimately their efforts were akin to taking halfhearted swats at low-hanging fruit and ultimately failing, rather than actually meaningfully engaging with my core findings and the arguments underpinning my interpretations. They really are just a pathetically weak lot of human beings.
|
||||
|
||||
At the risk of sounding self-aggrandizing, I think I have a pretty good idea why these people won't debate me—I have the tools to dismantle them. I'm well-versed on the relevant empirics, I'm intimately familiar with several formal systems of reasoning, I use semantic analysis to make sure my interlocutor's term meanings and usages are understood and remain consistent, I have decent knowledge of philosophy and, more specifically, scientific epistemology, and I deploy an algorithmic debate strategy. I am essentially kryptonite to anti-seed oil quacks. That's probably why they never show up to debate.
|
||||
|
||||
My most recent exposure to anti-seed oil cuckery was so profoundly egregious that it warranted writing about it here on my main blog. This extra special example of subhuman behavior comes from Cate Shanahan herself, or as I like to call her, Cate Shenanigans. If you want more info on Cate Shenanigans' history of debate-dodging, I have compiled an inventory [here](https://www.the-nutrivore.com/dodgers). For now, let me start from the beginning.
|
||||
|
||||
Nearly a year ago, I was [invited](https://x.com/zbitter/status/1668413822388916224) by Zach Bitter, via X, to debate the proposition "seed oils are not a significant, independent concern for public health" on his podcast with a willing interlocutor. Cate Shenanigans was [tagged](https://x.com/NTxLoneRider/status/1673811898645598211) in this post but did not reply. In fact, every single high-profile seed oil skeptic who responded to the thread declined my invite, while others, like Cate Shenanigans, were pinged and never replied. The nutrition debate arena was a ghost town that day. Not an ounce of courage was to be found among the anti-seed oil clowns.
|
||||
|
||||
# THE DEBATE INVITATION
|
||||
|
||||
However, nearly a year after that, Cate Shenanigans put out a general [invite](https://x.com/drcateshanahan/status/1773836787196346592) to debate. Even going so far as to [suggest](https://x.com/drcateshanahan/status/1774490576362062311) that I was scared to face her, to which I replied. Shortly after, she actually decided to engage and [replied](https://x.com/drcateshanahan/status/1774681584907559220) to me, encouraging me to DM her (presumably to work out the details of the debate). After some minor miscommunications, she instructed me in another [reply](https://x.com/drcateshanahan/status/1774830896006185446) to contact her via email. I did. I never received a reply. Some time passed, and Zach Bitter once again started [prodding](https://x.com/zbitter/status/1778171569967190413) at Cate Shenanigans about the status of her debate invitation to me (presumably with the intention of once again offering to host it). A day later, after a brief back and forth, Cate Shenanigans [replied](https://x.com/drcateshanahan/status/1778430104617603232) with what seemed like an alteration in the conditions to debate. At least this is how I interpreted it, as someone who has an interest in her arguments. I [pressed](https://x.com/TheNutrivore/status/1778456234078662984) her for clarification, and even quoted her in a [post](https://x.com/TheNutrivore/status/1778490825124552875) later that day about it, and received no reply. But not before she made her own [post](https://x.com/drcateshanahan/status/1778483241755787308) in a different thread, which I didn't initially see, wherein she withdrew from the debate that day. What a bizarre series of behaviours.
|
||||
|
||||
# THE EMAIL EXCHANGE
|
||||
|
||||
Fast forward to June 2nd, 2024, and I was DMed by another third party looking to coordinate yet another debate between Cate Shenanigans and myself. I won't reveal this person's identity and throw this individual under the bus, because they were nothing but cordial and respectful to me. After a short exchange, I was CC'd into an email chain with Cate Shenanigans, and this is where the fun begins. But rather than narrate the exchange, I'll just post it here:
|
||||
|
||||
**Host:**
|
||||
|
||||
> Hi cate
|
||||
>
|
||||
> Nick, CCed, would be down to do the seed oil debate for my show… Are you game? If so my team, CCed, can help to arrange…
|
||||
|
||||
**Nick:**
|
||||
|
||||
> If the debate proposition is clear and I disagree with it, then absolutely. I generally won't debate anything vague or normative, though. I'll happily debate a proposition like "seed oil consumption increases the risk of heart disease", for example.
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> HI Host
|
||||
>
|
||||
> Someone else wanted to set up a debate on their podcast between myself and Nick. But what was proposed looked more like just an unstructured argument, and that is not something I’m interested in. I don’t know if the disconnect was with that host or with Nick….? So I’d like to make sure we’re all on the same page about what a debate is.
|
||||
>
|
||||
> A debate starts with an assertion and the two participants who are debating take opposing sides.
|
||||
>
|
||||
> So if Nick wants to debate, then the assertion could be “RBD vegetable oils are part of a healthy diet.”
|
||||
>
|
||||
> Sound good?
|
||||
|
||||
**Host:**
|
||||
|
||||
> What do you think Nick?
|
||||
|
||||
**Nick:**
|
||||
|
||||
> First of all, it's not just that someone else has previously wanted to set up a debate between Cate and myself. Cate herself put out what I (quite reasonably) interpreted as a general invitation to those challenging her positions, which can be found [here](https://x.com/drcateshanahan/status/1773836787196346592), on March 29th. I accepted the invite, to which Cate replied on March 31st with an invitation to me to DM her (presumably to set up a debate), which can be found [here](https://x.com/drcateshanahan/status/1774681584907559220). I responded via email on April 1st, after she invited me to do so [here](https://x.com/drcateshanahan/status/1774830896006185446), on the same day. There was no third party present at this time. This was Cate clearly inviting me, personally, to debate. Just to be clear about the facts.
|
||||
>
|
||||
> Furthermore, while we're being clear about the facts, Cate also presumably withdrew from the debate for what would be completely bizarre reasons that are ultimately orthogonal to the debate itself, which can be found [here](https://x.com/drcateshanahan/status/1778483241755787308). But, not before implying that she had altered the necessary conditions for a debate, which can be found [here](https://x.com/TheNutrivore/status/1778490825124552875). Whatever the case, declining to debate someone on an empirical position because they disagree with you on an unrelated normative position is **beyond** strange, and honestly it was so outlandish that I just flagged it as a blatant excuse not to debate. I hope, Host, you can also see that this is the most reasonable interpretation of her behaviour.
|
||||
>
|
||||
> Now that that's out of the way and clarified, I'd be happy to debate Cate on a number of propositions. So long as she's done making excuses. Specifically, I might want to debate against [this](https://x.com/drcateshanahan/status/1516786219841073153) proposition:
|
||||
>
|
||||
> "current levels of seed oil consumption are the main driver of the obesity and chronic disease epidemics that now represent an existential threat to human populations around the world.
|
||||
>
|
||||
> Out of all of her claims, this could easily be one of the most egregious, depending on how the semantics are unpacked. So, I'd need some of those semantics clarified. Cate, when you say seed oils are the main driver, do you mean that in a counterfactual scenario wherein all the seed oils in the food supply were replaced with low-PUFA alternatives like butter or tallow, those same diseases epidemics would be less likely to occur? If yes, I disagree with the proposition and will happily debate it. If not, what do you mean?
|
||||
>
|
||||
> As for the stuff about what the debate would be. I typically don't do "structured" debates in the traditional sense. They seem closer to theatrics than debates, with time limits and scheduled topic shifts, opening statements, closing statements, etc. I prefer a linear, continuous Socratic debate format where the truth value of a proposition can be scrutinized to completion with no get-out-of-jail free cards granted by the clock. If it takes many hours to reach a concession, so be it. Other formats typically just make sophistry and dodging easier to get away with, because one party can just filibuster until the clock runs out.
|
||||
>
|
||||
> Also, Cate, my debate style is far from unstructured. My debate algorithm can be found [here](https://drive.google.com/file/d/1QQaN6HRwzp3kY2DAcnHVBxeX6jBhrvkw/view). So everyone knows what to expect of me. No rational person would look at this and conclude that my approach to debate is unstructured. I just refuse to debate with my hands tied behind my back, or debate under conditions where the proposition can't be scrutinized to completion.
|
||||
|
||||
**Host:**
|
||||
|
||||
> Thanks Nick!
|
||||
> Cate, you game to schedule?
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> Dear Nick and Host,
|
||||
>
|
||||
> Nick, my tweet "sure I’ll take all comers,” was a casual proposition subject to agreeing on further details, which we have yet to do.
|
||||
>
|
||||
> Host, from Nick's email it looks like he wants to argue against a primary thesis of my book, without having read my book. That doesn’t seem like a debate to me.\u{00A0}
|
||||
>
|
||||
> In Dark Calories\u{00A0}I lay out the groundwork to support my claims across multiple chapters, each with scores of scientific references to support the arguments I make in the book. I can’t skip that information and jump right into a debate on my conclusions.\u{00A0}
|
||||
>
|
||||
> Maybe an analogy will help, here. Let’s say, hypothetically, that after publishing his theory of relativity, Einstein announced in a public forum “Hey everyone I think E=MC squared. Read my paper for supporting arguments." And then, someone wanted to debate his paper without having read it. Einstein would have been in a position to have to spell out many details of his complex thesis, including technical information that would probably not be interesting to a lay audience. (Not when presented in debate format. A good documentarian or science writer would be able to make it interesting, however.) In order to “win” the debate, Einstein may even have had to defend the veracity of fundamental principles of physics. That would take the form of a lecture, or a series of lectures. That’s not a debate. It’s a college course.
|
||||
>
|
||||
> Therefore, I’ve proposed we debate this: “Vegetable oils are heart healthy.” After all, that is what the AHA claims. It’s also what docctors learn, and it is influencing public policy, what American farmers grow, and what every child and adult eats. It’s an important topic that merits debate. I would argue against and Nick would argue for.
|
||||
>
|
||||
> Nick, are you willing to do that?
|
||||
|
||||
**Host:**
|
||||
|
||||
> I love that proposition “Vegetable oils are heart healthy.”
|
||||
>
|
||||
> What do u think Nick?
|
||||
|
||||
**Nick:**
|
||||
|
||||
> Just ignoring the fact that, in a blatant display of unbridled narcissism, Cate has unabashedly compared herself to Einstein, and her work to Einstein's theory of relativity, I'd like to ask Cate a few questions:
|
||||
>
|
||||
> 1. If I read your book, Dark Calories, will you debate the proposition I suggested (provided you actually unpack your semantics in a way that leads me to disagree with it)? If yes, surely you'd be willing to provide me with a free PDF of Dark Calories for me to scrutinize, no?
|
||||
>
|
||||
> 2. If you wish to debate what I believe on the subject, surely you've done me the likewise courtesy of reading my [article](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry) on the subject, right? If yes, why did you not suggest a proposition directly from my work?
|
||||
>
|
||||
> I also have some further objections to Cate's reasoning. Unlike Einstein's theories and models, the predictions of which could only be confirmed many decades later (if not a century later in some cases), Cate's thesis has been tested (and ultimately falsified with respect to human outcome data), which is why the debate would likely lead heavily into empirics and not require a whole book's worth of lectures on fundamentals. So no, I don't need to read her book to show that the proposition is false. Her reasoning here is ridiculous.
|
||||
>
|
||||
> Respectfully, Host and Cate, "vegetable oils are heart healthy" is an awful proposition, for a number of reasons:
|
||||
>
|
||||
> 1. It's not my proposition.
|
||||
> 2. I don't represent the AHA.
|
||||
> 3. I don't even care what the AHA says about seed oils.
|
||||
> 4. I don't even know what it means because it's so semantically vague.
|
||||
> 5. I can think and reason for myself and can defend my own propositions, thank you.
|
||||
>
|
||||
> How about we narrow the scope of the proposition I suggested down to a single disease? Since Cate quantifies the detrimental effects of seed oils over the entire scope of chronic diseases that qualify as epidemics, it is entailed logically that we could choose any disease within that scope. So, how about we meet half way on the subject and debate this proposition:
|
||||
>
|
||||
> "current levels of seed oil consumption are the main driver of heart disease."
|
||||
>
|
||||
> To the degree that Cate affirms that heart disease is an epidemic, she should affirm that the proposition is true. I affirm that the proposition is false. So, we simply exchange the relevant empirics and have the debate. EZPZ.
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> Dear Host and Nick,
|
||||
>
|
||||
> I am interested in a debate on the topic I proposed. But I feel this particular email chain is no longer constructive.\u{00A0}
|
||||
>
|
||||
> Resorting to character attacks during what should be a civil conversation is outside the realm of what I consider acceptable discourse.
|
||||
>
|
||||
> Respectfully,
|
||||
> Cate
|
||||
|
||||
**Nick:**
|
||||
|
||||
> You've attacked my character on multiple occasions, Cate. I don't care about that. Let's just discuss the arguments, and hammer out a path toward a productive debate.
|
||||
>
|
||||
> It's also ridiculous to imply that I'm not contributing productively to the conversation. I literally suggested a proposition that seems to satisfy us both. If I've failed to do that, please explain how so I can improve upon further suggestions.
|
||||
>
|
||||
> Just give me a yay or nay, Cate. I don't want to waste my time if you're not interested in actually defending your views or answering any clarifying questions.
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> Nick,
|
||||
>
|
||||
> As I said two emails ago, because most people, including you, are not familiar with the scientific underpinnings of my work I would first need to explain them, and that is not a debate.
|
||||
>
|
||||
> What I proposed is a debate. If you are not interested in that debate then I believe we have reached the conclusion of this discussion.
|
||||
>
|
||||
> Best wishes to you.
|
||||
|
||||
**Nick:**
|
||||
|
||||
> And I explained to you how that's a dodge. Again, I don't need a lecture on the theoretical underpinnings when the predictions of the hypothesis have been tested and there is tons of empirical data on it. We only need to have a discussion about the empirics that test the hypothesis' fruitfulness, not the theoretical underpinnings. Insisting that I read your book is just filibustering.
|
||||
>
|
||||
> But hey, I'm still super curious to hear the answer to this question that I already asked you. If I were to read your book, would you debate the prop? Yes or no. If yes, then would you be willing to supply me with a free PDF of your book as a good faith gesture that you're interested in having your work scrutinized? Yes or no.
|
||||
>
|
||||
> I'm likewise super curious to hear the answer to this further question that I also already asked you. If you instead want to debate my beliefs, have you paid me the likewise courtesy of reading my work? Yes or no. If yes, then why haven't you picked a prop that has been extracted from my work directly? Why in the world do you want me to defend the AHA's prop and not a prop of my own?
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> Nick I am responding to your questions and only your questions and I hope that can be the end of it.
|
||||
>
|
||||
> "And I explained to you how that's a dodge. Again, I don't need a lecture on the theoretical underpinnings when the predictions of the hypothesis have been tested and there is tons of empirical data on it. We only need to have a discussion about the empirics that test the hypothesis' fruitfulness, not the theoretical underpinnings. Insisting that I read your book is just filibustering.
|
||||
>
|
||||
> But hey, I'm still super curious to hear the answer to this question that I already asked you. If I were to read your book, would you debate the prop? Yes or no."
|
||||
>
|
||||
> No. For reasons I explained. Just because you’ve read the book does not mean the audience has and I will still be in the position to essentially give a lecture on the topics in my books. Its simply not suitable for normal debate format. Furthermore, I’m not interested in debating someone who thinks familiarizing himself with the basic underpinnings of the topic being debated is optional.
|
||||
>
|
||||
> "If yes, then would you be willing to supply me with a free PDF of your book as a good faith gesture that you're interested in having your work scrutinized? Yes or no.
|
||||
>
|
||||
> N/A
|
||||
>
|
||||
> "I'm likewise super curious to hear the answer to this further question that I also already asked you. If you instead want to debate my beliefs, have you paid me the likewise courtesy of reading my work?
|
||||
>
|
||||
> I am familiar with your thoughts. You cite the same type of evidence that the AHA uses to support its heart healthy claim.
|
||||
>
|
||||
> "Yes or no. If yes, then why haven't you picked a prop that has been extracted from my work directly?
|
||||
>
|
||||
> Not all propositions are equally interesting. I want to debate something interesting.
|
||||
>
|
||||
> "Why in the world do you want me to defend the AHA's prop and not a prop of my own?
|
||||
>
|
||||
> See above. Additionally, keep in mind that I did not bring you into this conversation.
|
||||
|
||||
**Nick:**
|
||||
|
||||
> So basically you're just dodging. Got it.
|
||||
>
|
||||
> Before we killscreen the entire enterprise, I would like one more answer to a question, because it might provide for a way forward. With respect to the AHA prop that you bizarrely want me to defend, what does it mean to say that seed oils are heart healthy? For example, does that mean that seed oils decrease the risk of heart disease?
|
||||
>
|
||||
> Because if that prop cashes out into a prop that I'd be willing to defend, then I don't see a reason why we couldn't debate it. If it means what I think it means, it'll just lead into the exact same empirical debate that you're currently dodging, so it makes no difference to me.
|
||||
|
||||
**Host's Producer:**
|
||||
|
||||
> Hi Nick and Cate,
|
||||
>
|
||||
> Host's Producer here; I'm the producer at [redacted]. Host and I agreed that we would like to conclude this discussion and explore other debate topics. The tone of the email discourse is not what we had in mind for our debut episode of this new podcast.
|
||||
>
|
||||
> We appreciate your consideration.
|
||||
|
||||
**Nick:**
|
||||
|
||||
> I'd be happy to debate cordially with somebody who is not a sophist. Cate, unfortunately, is one of the most dishonest actors in this entire space and deserves zero respect from anybody (though I would give her more than what she deserves and actually be respectful to her in a verbal discussion for the betterment of your podcast). There are people I could recommend who disagree with me who I don't think are dishonest but rather just confused about the empirics. If you guys are still interested in having a productive seed oil debate, I'd be happy to provide a list.
|
||||
>
|
||||
> Also if you're worried about my tone during the debate, you need not be concerned. I don't think anybody can actually find more than a single example of me being rude to my interlocutor across what is probably dozens of verbal debates by now. Other than that one exception, which I actually think was justified anyway, I am always polite and cordial with my interlocutor in verbal discussions.
|
||||
|
||||
This is where the email exchange ended. So much of what Cate Shenanigans said was just brain-dead lunacy. Let's go through the list.
|
||||
|
||||
# CATE'S RETARDATION
|
||||
|
||||
**A) Suggesting that I defend a proposition that isn't my own**
|
||||
|
||||
Why? Why in the world would I be asked to defend a proposition that I, myself, am not even sure I affirm? I'm not even sure what the proposition "seed oils are heart healthy" even means. Does it mean that seed oils will increase your VO2 max? Does it mean seed oils will cure hypertension? Who the hell knows. It was just beyond strange that it was even suggested and demonstrates to me that Cate Shenanigans is operating with a level-zero debate meta.
|
||||
|
||||
Furthermore, if she was truly interested in contesting my views, why did she not pay me the likewise courtesy of reading my article and selecting a proposition directly from my own writing? Seems not only to be ridiculously stupid, but also a ridiculously stupid double-standard. Yet another example of Shenanigans-level cuckery.
|
||||
|
||||
**B) Shifting the goalpost three times**
|
||||
|
||||
Months ago, she dodged me on the grounds that I haven't read her book and that reading her book was necessary to have a debate. I [offered](https://x.com/TheNutrivore/status/1778490825124552875) to read her book then to satisfy the criteria and got no reply. Now, she dodged me for the second time on these grounds, and when I directly offered to read her book and satisfy her criteria, she shifted the goalpost a third time. Apparently, it's not good enough that I read her book, but now the entire audience needs to read her book in order for us to debate. This is just the most cuckish form of sophistry imaginable, and she should be ashamed.
|
||||
|
||||
**C) Her goalposts are dumb anyway**
|
||||
|
||||
To anyone with even a modicum of understanding with respect to scientific epistemology, it should be quite clear that Cate Shenanigans is dodging. Essentially, the strength of a scientific hypothesis does not rest upon its complexity, its elegance, its creativity, or any other such quality. It rests upon how scientifically virtuous it is, and this is determined by testing the hypothesis' compatibility with the theoretical virtues of science. I wrote a lengthy article on the subject [here](https://www.the-nutrivore.com/post/the-hitchhiker-s-guide-to-quack-smashing).
|
||||
|
||||
To determine if a hypothesis is strong, we should ask three fundamental questions, compared to other hypotheses:
|
||||
|
||||
1. Does this hypothesis make more novel predictions?
|
||||
|
||||
2. Does this hypothesis explain a wider breadth of phenomena?
|
||||
|
||||
3. Does this hypothesis make fewer overall assumptions?
|
||||
|
||||
|
||||
There are other questions some philosophers think we should ask, but generally speaking, philosophers of science do not disagree about these three core questions. So, let's take them one by one.
|
||||
|
||||
Firstly, the hypothesis doesn't really seem to make very many novel predictions at all. In fact, as I had previously discussed in another blog [article](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry), the overall weight of the literature heavily favours the negation of Cate Shenanigans' hypothesis. When confronted with this fact on a [podcast](https://gimletmedia.com/shows/science-vs/mehwdgww) (33:00), Cate Shenanigans had no compelling answers and merely insisted that it "didn't make any sense" and that every single study on the subject (150-300 studies by her count) was "flawed". Very persuasive, Dr. Shenanigans. Gold fucking star.
|
||||
|
||||
As for the second question, the scope of her hypothesis is actually quite impressive. As she stated in the linked podcast above, seed oils literally have a causal role to play in every disease. That is quite an impressive scope. Think of all the phenomena this accounts for. Looks great for the hypothesis, except when we try to answer the third question.
|
||||
|
||||
With respect to the final question we're asking, every disease Cate Shenanigans blames on seed oils in an attempt to inflate her scope, she piles on more and more assumptions. Assumptions that empirically verifiable pathophysiological mechanisms that explain a number of diseases, that have nothing to do with seed oils, are either wrong or so incomplete that they might as well be wrong. This produces an insane amount of assumptions. And that's not even counting the assumptions that are stacked in virtue of the hypothesis' failures to make novel predictions.
|
||||
|
||||
As I explained in a previous article, The Hitchhiker's Guide to Quack-Smashing, quacks will often inflate scope at the expense of parsimony and/or fruitfulness. They want to be able to capture the widest scope of phenomena with their hypothesis without actually having evidence or having to explain a damn thing.
|
||||
|
||||
No, Dr. Shenanigans, I don't need to read your book in order to debate your proposition that seed oils are responsible for all disease, or chronic disease, or even just heart disease. As I explained in the email exchange, the only thing that is required is an investigation into the empirical data that tests your hypothesis. We can test the fruitfulness, we can test the scope, and we can test the parsimony. You're just dodging because you are scared.
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!"""
|
||||
, articleReferences =
|
||||
[ { author = ""
|
||||
, title = ""
|
||||
, journal = ""
|
||||
, year = ""
|
||||
, link = ""
|
||||
}
|
||||
]
|
||||
}
|
382
frontend/src/Config/Pages/Blog/Records/SweetDeception.elm
Normal file
|
@ -0,0 +1,382 @@
|
|||
module Config.Pages.Blog.Records.SweetDeception exposing (..)
|
||||
|
||||
import Config.Pages.Blog.Types exposing (..)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleSweetDeception : BlogArticle
|
||||
articleSweetDeception =
|
||||
{ articleName = "Sweet Deception: Debunking Meme Diabetes Diets"
|
||||
, articleDescription = ""
|
||||
, articleLink = Path.toString Path.Blog_Sweetdeception
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, articleImage = "sweetdeception"
|
||||
, articlePublished = "Apr 16, 2024"
|
||||
, articleBody = """
|
||||
Because every online diet camp purports that their pet diet cures every disease known to mankind, naturally each one will give you some fantastical mechanistic story about how said diet cures type 2 diabetes mellitus (T2DM). In the paleo/keto/carnivore camp, people will often claim that T2DM is caused by chronic exposure to refined sugar, with some even going so far as to claim that it is caused by exposure to carbohydrates (CHO) more broadly (including foods like apples and even carrots). However, these days it is more trendy in that group to blame T2DM on vegetable oils, but I have previously debunked this on my blog. Over in the "whole food plant-based" (WFPB) cult, it is routinely remarked that T2DM is caused by intramyocellular lipid (IMCL), and that chronic exposure to the saturated fat (SFA) in animal products is responsible for the condition.
|
||||
|
||||
In this article, I'll go over the mechanistic reasoning and experiment and/or observational support for these hypotheses, as well as provide an accounting of the leading hypothesis and its supporting evidence. Let's start off by tackling the fantastical notions dreamed up by our vegan friends, and address the IMCL hypothesis.
|
||||
|
||||
## THE INTRAMYOCELLULAR LIPID HYPOTHESIS
|
||||
|
||||
The core idea with this hypothesis is that IMCL, primarily in the form of triglycerides (TG) stored within lipid droplets in muscle cells, act through various pathways to disrupt insulin signaling. The IMCL hypothesis has drawn attention to the role of diet in modulating IMCL levels. High intakes of certain types of fats, particularly SFAs found abundantly in animal products, have been implicated by the proponents of this hypothesis in elevating IMCL levels and contributing to insulin resistance.
|
||||
|
||||
This association is often highlighted in discussions on the benefits of WFPB diets for reducing the risk of T2DM and improving insulin sensitivity. Advocates of WFPB diets suggest that such a diet, which is typically lower in SFA and higher in unsaturated fats like monounsaturated fats (MUFA) and polyunsaturated fats (PUFA), which can purportedly help reduce IMCL accumulation and make traction against insulin resistance.
|
||||
|
||||
The dietary focus is on whole grains, legumes, fruits, vegetables, nuts, and seeds, with minimal or no intake of animal products. The concern with animal products stems from their content of SFAs, dietary cholesterol, and perhaps even certain supposed inflammatory mediators (possibly Neu5Gc), which may contribute to increased IMCL levels and insulin resistance. WFPB proponents argue that replacing animal products with plant-based sources of protein and fat can mitigate these risks. But is it true?
|
||||
|
||||
The IMCL hypothesis attempts to highlight the potential impact of IMCL accumulation on insulin resistance and physiological markers of T2DM. While WFPB are promoted as strategies to reduce IMCL and improve metabolic health, it's important to consider the broader literature and where this hypothesis lands with respect to epistemic virtues over other, possibly more prevailing hypotheses for which there is more evidence.
|
||||
|
||||
The mechanistic case for the IMCL hypothesis was first outlined in the late 1990s with two small studies by Jacob, et al. and Perseghin, et al., which discovered relationships between IMCL and insulin resistance in T2DM-free subjects who were born of parents with T2DM [[1](https://pubmed.ncbi.nlm.nih.gov/10331418/)][[2](https://pubmed.ncbi.nlm.nih.gov/10426379/)]. In these experiments, the offspring of those with T2DM were subjected to the gold-standard measure of whole-body insulin sensitivity, the hyperinsulinemic-euglycemic clamp test (HEC). It was discovered that there was an inverse association between IMCL and insulin sensitivity, which led researchers to suspect that perhaps this biomarker was relevant to the pathophysiology of T2DM.
|
||||
|
||||
![][image1]
|
||||
[image1]: /blog/everettvegans/image1.png
|
||||
|
||||
Fast forward to 2004, and another small study from van Loon, et al. would introduce the hypothesis' first paradox [[3](https://pubmed.ncbi.nlm.nih.gov/15165998/)]. In this experiment, muscle biopsies and less precise (but still adequate) measures of insulin sensitivity were deployed in an investigation of subjects who were either sedentary, afflicted with T2DM, or who were trained athletes. The study found that the IMCL concentrations of IMCL were actually statistically significantly higher in athletic subjects compared to either sedentary or T2DM-afflicted subjects. Yet, the athletic subjects did not suffer from impaired insulin sensitivity or the hyperglycemia that is characteristic of T2DM.
|
||||
|
||||
![][image2]
|
||||
[image2]: /blog/everettvegans/image2.png
|
||||
|
||||
Researchers Coen and Goodpaster attempted to reconcile the findings in 2012 [[4](https://pubmed.ncbi.nlm.nih.gov/22721584/)]. They hypothesized that IMCL behaves differently in the context of T2DM, and that while IMCL serves as a fuel source in athletic subjects, in sedentary subjects with T2DM the IMCL seems to produce more disruptive mediators like ceramides and diacylglycerols. However, the authors tend to play fast and loose with their causal inferences, often citing animal research to buttress clear implications about what holds true in human beings. In fact, the majority of their supporting evidence is derived from mice, despite mice generally being poor facsimiles for human subjects [[5](https://pubmed.ncbi.nlm.nih.gov/31307492/)].
|
||||
|
||||
Some of the only human research they can cite are studies wherein there was an observed association between intramyocellular ceramides (IMCC) and insulin resistance. However, there are many biomarkers that serve as proxies for insulin resistance, and there did not seem to be a clear reason proposed by the authors to favour IMCC as causal or mediating. In fact, they cite research that offered conflicting evidence with a broader sample of human subjects, showing that IMCC has no clear association with insulin sensitivity [[6](https://pubmed.ncbi.nlm.nih.gov/18458871/)].
|
||||
|
||||
Additionally, Itani, et al (2002) discovered that the concentrations of IMCC do not differ substantially between subjects with varying degrees of insulin sensitivity [[7](https://pubmed.ncbi.nlm.nih.gov/12086926/)]. In fact, these researchers challenged subjects with lipids during a HEC to try to alter lipid states in muscle tissue, and ceramides did not change. However, a legitimate criticism of this study is that the lipid challenge done using Liposyn II, which is an intravenous lipid product consisting of 50% soybean oil and 50% safflower oil, making it over half PUFA in its composition. Coen and Goodpaster also cited research on diacylglycerols, but they themselves admit that the human data isn't particularly conclusive on the matter.
|
||||
|
||||
To my knowledge there are no recent landmark human experiments that persuasively show that T2DM pathology can be modulated up or down with varying animal products, or even SFA, in the diet. Altogether, the hypothesis has a lot of failed predictions and phenomena to reconcile before it can be taken seriously and can even begin to be seen as epistemically virtuous compared to some other, more scientifically grounded hypotheses. What we need to see is a study that shows that removing SFA and/or animal products from the diets of those with T2DM actually makes traction against pathophysiological markers of T2DM. Ideally this would be done while also controlling for potential confounders or mediators that other competing hypotheses predict would make an impact. The aim is to demonstrate independent effects, and so far no research on the IMCL hypothesis persuasively does this.
|
||||
|
||||
# THE SUGAR HYPOTHESIS
|
||||
|
||||
Even though I have touched on this hypothesis five years ago [[8](https://thenutrivore.blogspot.com/2019/10/sugar-doesnt-cause-diabetes-and-ketosis.html)], it bears repeating, with updated epistemic and philosophical rigour. For a recap, my original article challenges perceptions about T2DM that are common in the low carb (LC) diet sphere. I argue against the notions that sugar causes T2DM and that ketosis can somehow reverse it. But we're going to go a little deeper today. So, what is the hypothesis and how does it work? Basically, the hypothesis supposes that chronic exposure to refined sugar or insulin-stimulating CHO leads to T2DM through prolonged over-stimulation of the pancreas. This hypothesis involves several key mechanisms.
|
||||
|
||||
Firstly, regular intake of high-sugar or high-glycemic CHOs prompts frequent blood insulin excursions by via the pancreas. To be clear, insulin is the hormone responsible for signaling cells to absorb glucose from the bloodstream for energy or storage. The idea is that over time, constant demand for more and more insulin can lead to insulin resistance via negative feedback. This is when cells become less responsive to insulin's signals because insulin levels are too high. This requires the pancreas to produce even more insulin to achieve the same effect, placing stress on the pancreatic beta cells (which are responsible for insulin secretion).
|
||||
|
||||
Secondly, chronic over-stimulation of the pancreas due to persistent high sugar/CHO intake and supposed, resultant insulin resistance can lead to beta-cell dysfunction (which is characteristic of advanced T2DM). Over time, the beta cells' capacity to produce insulin can diminish due to the increased demand, oxidative stress, and subsequent glucotoxicity (toxicity due to hyperglycemia). This dysfunction contributes to the progression of T2DM, where insulin production eventually becomes insufficient to control blood sugar levels effectively.
|
||||
|
||||
Lastly, high levels of circulating glucose (glucotoxicity) and fatty acids (lipotoxicity) are actually detrimental to pancreatic beta cells. High glucose levels can lead to the formation of reactive oxygen species (ROS), causing an inflammatory cascade effect, damaging beta cells and impairing insulin secretion. Similarly, elevated free fatty acids (FFAs) can accumulate in non-adipose tissues, including the pancreas, causing cellular dysfunction.
|
||||
|
||||
The mechanisms, epidemiological, and experimental evidence for this hypothesis were most succinctly summarized by Stanhope in 2016 [[9](https://pubmed.ncbi.nlm.nih.gov/26376619/)]. This review discusses the evidence and controversies surrounding the impact of sugar consumption on T2DM, including mechanisms by which excess sugar intake may promote the development of T2DM directly and indirectly. It covers the direct metabolic pathways through which fructose, a component of table sugar, sucrose, can lead to intrahepatic lipid (IHL) accumulation and decreased insulin sensitivity, contributing to the pathophysiology of T2DM independent of total caloric intake.
|
||||
|
||||
The author first refers to literature they themselves conducted, including three primary human trials demonstrating disturbances to energy expenditure, markers of liver function, as well as measures of IHL accumulation [[10](https://pubmed.ncbi.nlm.nih.gov/26376619/)][[11](https://pubmed.ncbi.nlm.nih.gov/21952692/)][[12](https://pubmed.ncbi.nlm.nih.gov/22828276/)]. The first trial discovered that isocaloric feeding of fructose compared to glucose over a ten-week period significantly increased hepatic fat.
|
||||
|
||||
![][image3]
|
||||
[image3]: /blog/everettvegans/image3.png
|
||||
|
||||
However, it's unclear what the clinical significance of this finding is, considering that the fructose-based intervention resulted in significant overfeeding and only increased fasting glucose by 5% compared to the glucose-based control. Seems like the authors tried pretty damn hard to induce a T2DM phenotype feeding fructose to subjects, and were ultimately unable to achieve that. In fact, they weren't really able to get close. Even the oral glucose tolerance test results, though far from ideal, showed an altogether normal blood glucose curve for the fructose group.
|
||||
|
||||
![][image4]
|
||||
[image4]: /blog/everettvegans/image4.png
|
||||
|
||||
The second trial was unremarkable, and suggested that fructose consumption may decrease energy expenditure over time when isocalorically compared to glucose. Again, it's interesting, but it's far from demonstrating a cause and effect relationship between T2DM and sugar. The third trial is a bit more complicated to unpack. Basically, subjects were split into two groups, 25% of calories as either fructose or glucose as parts of eucaloric diets over 10 weeks, with the primary endpoints beings measures of liver function. Overall, the results of the trial suggest a significantly detrimental effect of fructose compared to glucose on a number of markers related to liver function. However, it's slightly more complicated than that.
|
||||
|
||||
While it's true that the treatment effect showed a benefit of glucose over fructose, it's also true that the marker of liver function that was negatively perturbed was gamma-glutamyl transferase (GTT). The change in GGT was also barely statistically significant compared to baseline, while markers such as aspartate aminotransferase (AST) and alanine aminotransferase (ALT) showed a non-significant decrease. Glucose showed greater reductions that were barely statistically significantly different from that of fructose.
|
||||
|
||||
![][image5]
|
||||
[image5]: /blog/everettvegans/image5.png
|
||||
|
||||
Other than that, fructose did seem to increase uric acid levels to a statistically significant degree, making fructose a potential aggravating factor for conditions such as gout. But again, this is a far cry from causally linking fructose consumption to the development of T2DM, especially since fructose seemed to do nothing particularly interesting to markers of liver function. It is true that sugar intake is severely negatively associated with health outcomes [[13](https://pubmed.ncbi.nlm.nih.gov/34444794/)]. However, while this is a consistent finding, clinical trials on sugar consistently fail to demonstrate a connection between sugar intake and the development of T2DM.
|
||||
|
||||
We can indirectly test the sugar hypothesis by looking at long-term data in those following ketogenic diets for T2DM remission. If subjects cut nearly all carbohydrates out of their diets, presumably this subsumes sugar, and could present a valid test of the hypothesis. One such study might be the Virta Health trial [[14](https://pubmed.ncbi.nlm.nih.gov/29417495/)]. In this trial, a non-randomized, self-selected sample of eager subjects elected to participate in a cutting-edge, individualized dietary intervention program, with the aim of nutritional ketosis, called the Continuous Care Intervention (CCI), utilizing a web-app, ketone-verified adherence monitoring, and constant patient support.
|
||||
|
||||
> Other aspects of the diet were individually prescribed to ensure safety, effectiveness, and satisfaction, including consumption of 3–5 servings of non-starchy vegetables and adequate mineral and fluid intake for the ketogenic state. At onset of dietary changes, participants were advised to consume a multivitamin, 1000–2000 IU vitamin D3, and up to 1000 mg omega-3 daily. If participants exhibited signs of magnesium depletion (e.g., muscle twitches or cramps), daily supplementation (500 mg magnesium oxide or 200 mg magnesium chloride) was suggested. If participants exhibited headaches, constipation, or lightheadedness, adequate sodium and fluid intake was recommended.
|
||||
|
||||
Suffice it to say, there would be little, if any, room for sugar while on such a diet. These subjects were followed up for one year, and, as expected (given the high potential for bias with such a study design), results were impressive. By the end of the first year, the control group was floundering and the CCI group managed to achieve a massive 1.3% reduction in HbA1c, which effectively pushed the once diabetic group into the non-diabetic range on average. However, this change was commensurate with a 14.3% drop in body weight, which we'll revisit in a later section of this article.
|
||||
|
||||
Despite these improvements, recidivism continued to climb. As of two years, the CCI group had crept back into the diabetic range on average [[15](https://pubmed.ncbi.nlm.nih.gov/31231311/)]. By, 3.5 years, the CCI group was once again firmly within the diabetic range on average, having regained a significant amount of weight [[16](https://www.hsrd.research.va.gov/publications/esp/virtual-diet-brief.pdf)][[17](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7208790/)].
|
||||
|
||||
![][image6]
|
||||
[image6]: /blog/everettvegans/image6.png
|
||||
|
||||
To be clear, there was a clear distinction between remission and reversal, as defined by the authors. Remission was a much more robust measure of traction against T2DM than reversal, even though it sounds like the latter is stronger than the former. Remission was defined in two parts; partial remission and complete remission. Partial remission was defined as "sub-diabetic hyperglycemia of at least 1 year duration, HbA1c level between 5.7-6.5%, without any medications (two HbA1c measurements)" and complete remission was defined as "Normoglycemia of at least 1 year duration, HbA1c below 5.7%, without any medications (two HbA1c measurements)". Reversal was defined more loosely, as "sub-diabetic hyperglycemia and normoglycemia (HbA1c below 6.5%), without medications except metformin" (Athinarayanan, et al., (2019), Supplement Table 2).
|
||||
|
||||
Unfortunately, all but the second year remission data is either aggregated or ambiguous, so it's difficult to make distinctions between partial and complete remission for years one and 3.5. However, at year two only 6.7% of the cohort had achieved complete remission. It's not clear what percentage of the cohort achieved complete remission by year 3.5. Furthermore, reversal rates, as they're defined, are probably just reflecting attrition rates (which were 26%), as the criteria for reversal is having achieved a sub-diabetic blood glucose at least once throughout the trial. It's actually not clear how meaningful that data even is on that definition.
|
||||
|
||||
While a 9% weight reduction over 3.5 years is impressive, I'll reiterate the limitations— the subjects were self-selected, and highly motivated to participate in the CCI. In fact, the patients were paying customers of Virta Health's cutting-edge primary care service. This significantly challenges the external validity of the findings, as impressive as they are, to the general population. What we're seeing are results in the context of what is likely to be extraordinary ambition to succeed, and should be interpreted with caution.
|
||||
|
||||
As for how these results relate to the sugar hypothesis, it's difficult to tell, had the subjects managed to control their weight. However, adherence rates to the diet dropped significantly by year two, with nutritional ketosis being achieved in 96% of CCI subjects in year one to only 14.1% by the end of year two. This non-adherence makes it difficult to infer the degree of sugar avoidance actually observed by the cohort on average, and makes cause and effect conclusions difficult to draw. There was no 3.5 year data on ketosis rates, and one can only speculate as to why. But given the poor adherence at two years, it's probably not unreasonable to assume it's because the numbers didn't look very good.
|
||||
|
||||
## THE OXIDATION HYPOTHESIS
|
||||
|
||||
The underlying premise is that PUFAs, particularly omega-6 fatty acids found in seed oils, are susceptible to oxidation. When oxidized, these fatty acids can form reactive compounds such as malondialdehyde (MDA) and other harmful products, leading to cellular damage and oxidative stress. In the context of the pancreas and liver, organs that, as previously mentioned, are crucial for glucose metabolism and insulin regulation, such oxidative stress could impair their function, contributing to insulin resistance and β-cell dysfunction— key features of T2DM. A tidy little bundle of sophistry indeed.
|
||||
|
||||
Since I've already covered how the human outcome data flies in the face of this hypothesis in a previous article [[18](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry)], I won't rehash all of it here. But, essentially there is no human outcome data supporting this effect across multiple cohort studies and multiple RCTs. In the epidemiology, tight markers of seed oil consumption show a consistent inverse association with T2DM [[19](https://pubmed.ncbi.nlm.nih.gov/29032079/)].
|
||||
|
||||
![][image7]
|
||||
[image7]: /blog/everettvegans/image7.png
|
||||
|
||||
Additionally, there have been several interventions feeding large amounts of PUFA to subjects, to the exclusion of SFA, and measuring long term effects on insulin sensitivity [[20](https://www.sciencedirect.com/science/article/abs/pii/0163782781900709)][[21](https://pubmed.ncbi.nlm.nih.gov/1347091/)]. In both Houtsmuller, et al. (1979) and Watts, et al. (1992), long term feeding of PUFA was associated with improvements in insulin sensitivity. In the case of the former trial, the insulin sensitivity measure, an oral glucose tolerance test (OGTT), showed improvement to glucose tolerance among diabetics over time. These results were aggregated by Hooper, et al. back in 2020 in an exploratory analysis [[22](https://pubmed.ncbi.nlm.nih.gov/32428300/)].
|
||||
|
||||
![][image8]
|
||||
[image8]: /blog/everettvegans/image8.png
|
||||
|
||||
Additionally, we can also see that Ley, et al. (2004) showed an improvement in OGTT results, but with the substitution of CHO for SFA, rather than PUFA for SFA (which is kinda funny) [[23](https://pubmed.ncbi.nlm.nih.gov/14739050/)].
|
||||
|
||||
## THE TWIN CYCLES HYPOTHESIS
|
||||
|
||||
The prevailing hypothesis, or the hypothesis that has been given the most credence in this domain, is the twin cycles hypothesis (TCH), which was spearheaded by Dr. Roy Taylor. It is closely interconnected with another concept from Dr. Taylor's work, known as the personal fat threshold (PFT). So what are these things? Let's start with the TCH. The TCH postulates that there are two stages, or "cycles", to T2DM development. The TCH was first discussed in a 2011 paper by Lim, et al. (coauthored by Dr. Taylor) detailing the development of the hypothesis from previous clinical trials performed on patients with T2DM [[24](https://pubmed.ncbi.nlm.nih.gov/21656330/)]. This trial would come to be known as the Counteracting Pancreatic Inhibition by Triglyceride (CounterPoint) study, and would be reviewed in greater detail two years later by the same authors [[25](https://pubmed.ncbi.nlm.nih.gov/23075228/)].
|
||||
|
||||
The first cycle originates in the liver, where chronic, excess calorie intake leads to ectopic fat accumulation, causing hepatic insulin resistance. The reason for this is because tissues that are energy replete will resist the action of insulin, with is a signalling hormone responsible for facilitating energy deposition in tissues. The second cycle concerns the pancreas, where the continued excess fat spills over to the pancreas (primarily via nonesterified fatty acids (NEFA), leading to lipotoxicity and subsequently impairing β-cell function. Ultimately, this contributes to β-cell dysfunction, rather than outright β-cell death, as the pivotal event in diabetes progression.
|
||||
|
||||
In fact, the TCH originally came about by appreciating that the assumptions typically relied upon when inferring β-cell death in T2DM patients may be faulty. Usually, we infer to β-cell death by staining pancreatic tissue for insulin; no insulin, no β-cells. However, what if the β-cells aren't really dead? What if the diabetic pancreas is just so dysfunctional that the β-cells aren't producing as much insulin? Those assumptions would have us believing that the β-cells are dead when in fact they are merely dormant due to lipotoxicity— waiting to be brought back to life upon fat mass loss. Which brings us to the next piece of the puzzle.
|
||||
|
||||
Now let's discuss the PFT, and how it ties into the overall picture. Essentially, the PFT posits that hepatic and pancreatic fat deposition are facilitated by accumulating more subcutaneous body fat (SBF) than one's body can tolerate, regardless of whether their body mass index (BMI) categorizes them as overweight or obese [[26](https://pubmed.ncbi.nlm.nih.gov/25515001/)]. In basic terms, after non-hepatic, non-pancreatic tissues get too fat, there is a spillover of fat (precipitated by chronic calorie excess) onto the liver and the pancreas, which initiates the T2DM phenotype.
|
||||
|
||||
Think about it. There's just nowhere left for the energy substrates to go, be it glucose, triglycerides (TG), or even amino acids. They're all increased with T2DM, because all the tissues are energy replete. The liver and the peripheral tissues essentially play a never-ending game of ping pong with the energy substrates because no tissues are able to take on the extra calories. This hypothesis was tested with vindicating results in a recent trial by Taylor, et al. in 2024 [[27](https://pubmed.ncbi.nlm.nih.gov/37593846/)]. Essentially, it seems that T2DM development and remission have very little, if anything, to do with BMI, and BMI may be a very poor risk factor for T2DM, due to the individual variation in the PFT from person to person.
|
||||
|
||||
Now that we have a clear understanding of the model, let's discuss the overwhelming evidence in favour of it. The clinical trials that first gave rise to the TCH were human experiments that involved both pharmaceutical and dietary means of reducing hepatic fat [[28](https://pubmed.ncbi.nlm.nih.gov/18535187/)][[29](https://pubmed.ncbi.nlm.nih.gov/15734833/)].
|
||||
|
||||
For the first study by Ravikumar, et al., a single-arm trial of 10 subjects, the drug pioglitazone was investigated for its effects on markers of T2DM, particularly postprandial endogenous glucose production (EGP) using isotope labeled glucose, as well as IHL. After 16 weeks of treatment, the pioglitazone group experienced an increase in total body weight equal to +6.2kg on average. Yet, the pioglitazone group also experienced a decrease in IHL.
|
||||
|
||||
![][image9]
|
||||
[image9]: /blog/everettvegans/image9.png
|
||||
|
||||
However, to be fair, the pioglitazone group also experienced a significant decrease in IMCL as well, however there was no significant correlation between decreases in IMCL and EGP. There was however, a direct association between IHL and EGP. Although this trial was not controlled, it certainly doesn't produce results expected on the IMCL hypothesis, and it lends further credence to the TCH. Additionally, many markers of T2DM subsequently improved, such as plasma glucose, hemoglobin A1c (HbA1c), and even TGs, with the changes being -2.3mmol/L, -1.9%, and 0.4mmol/L, respectively.
|
||||
|
||||
![][image10]
|
||||
[image10]: /blog/everettvegans/image10.png
|
||||
|
||||
It can also be inferred that there was a meaningful increase in insulin sensitivity, given the fact that plasma glucose dropped despite the same amount of insulin being produced by subject. Essentially, glucose disposal per unit insulin went up, implying that insulin signalling had improved.
|
||||
|
||||
![][image11]
|
||||
[image11]: /blog/everettvegans/image11.png
|
||||
|
||||
In the second study by Petersen, et al., eight subjects with T2DM were compared to 10 healthy volunteers in a non-randomized weight loss trial over an average of seven weeks. Essentially, subjects were followed up until normoglycemia was achieved, so not every subject was subjected to the same amount of weight loss for the same time period. In this time, body weight dropped by an average of 8kg in the T2DM group. This was marked with commensurate drops in plasma glucose, plasma insulin, and TG, at -2.4mmol/L, -108pmol/L, and -0.3mmol/L, respectively.
|
||||
|
||||
![][image12]
|
||||
[image12]: /blog/everettvegans/image12.png
|
||||
|
||||
The most interesting and surprising finding was that there was no significant change in IMCL despite weight loss. But, subjects did end up achieving normoglycemia and near normal insulin sensitivity as determined by a HEC. However, much like the previous study, insulin sensitivity was directly associated with IHL reduction. Once again, this flies in the face of the IMCL hypothesis, and offers further support for the TCH as the T2DM approached nearly normal levels of IHL. Although neither of these papers directly test for evidence of the sugar or oxidation hypotheses, it should be noted that both of these trials involve the consumption of both sugar and most likely animal products.
|
||||
|
||||
In light of this evidence, Steven and Taylor conducted another preliminary human trial, the CounterBalance study, involving 29 subjects in 2015 to test the effects of the same intervention in those with long- versus short-term T2DM [[30](https://pubmed.ncbi.nlm.nih.gov/25683066/)]. Both groups experienced similar weight loss (short-duration: 14.8%, long-duration: 14.4%), indicating that the VLCD was effective for weight reduction regardless of diabetes duration. These results were also durable throughout the six month post-intervention follow-up.
|
||||
|
||||
In terms of other T2DM markers, such as plasma glucose, the response to the diet was heterogeneous among participants with long-term T2DM. Some showed similar responses to those in the short-term group and some responded slowly. By the end of the study, 87% of the short-term group and 50% of the long-term group achieved non-T2DM fasting plasma glucose levels. HbA1c levels also decreased in both groups, with a more significant reduction observed in the short-term group. However, there was an unforeseen result— about half of subjects did not respond to the treatment at all, which was not expected given nearly all previous research.
|
||||
|
||||
![][image13]
|
||||
[image13]: /blog/everettvegans/image13.png
|
||||
|
||||
Given these results and Dr. Taylor's previous characterization of the PFT concept, the most likely hypothesis seemed clear— these people just needed to lose more weight, which we'll get to later. For now, there was enough evidence of the effectiveness of weight loss for T2DM treatment that Dr. Taylor and his colleagues decided it was time to test the efficacy of the treatment in a real-world outpatient scenario. A cluster-randomized experiment was designed and undertaken, and would come to be known as the Diabetes Remission Clinical Trial (DiRECT) [[31](https://pubmed.ncbi.nlm.nih.gov/29221645/)].
|
||||
|
||||
![][image14]
|
||||
[image14]: /blog/everettvegans/image14.png
|
||||
|
||||
The DiRECT trial involved 298 subjects across 49 primary care practices (or clusters) randomized two groups, a control group receiving the standard of care for T2DM management, and the treatment group receiving a three stage program: stage one, total diet replacement; stage two, food reintroduction; phase three, weight maintenance. For the first stage, the treatment group received a liquid diet consisting of four packets of meal replacement formula, which totaled around 825-853 kcal/day for three to five months (depending on patient-specific goals). For the second stage, after subjects completed the first weight loss phase of the trial, food was gradually reintroduced over a period of two weeks to two months. During the last stage, patients were followed up over the course of around a year. The results were encouraging.
|
||||
|
||||
Over the course of the trial, the treatment group lost an average of 10kg, with over 86% of them achieving T2DM remission by the end of the first year. An interesting finding was that on average, at the end of the first year, the treatment group still technically qualified as obese, despite the vast majority of them achieving T2DM remission. This would come to be the first nail in the coffin with respect to the idea that T2DM was somehow coupled to BMI. Additionally, patients experienced significant improvements to quality of life without serious side effects or complications. Altogether the treatment was successful, well-tolerated, and produced impressive rates of T2DM remission that was durable long-term.
|
||||
|
||||
However, Dr. Taylor's group published two follow-up, long term durability studies on the DiRECT trial [[32](https://pubmed.ncbi.nlm.nih.gov/30852132/)][[33](https://pubmed.ncbi.nlm.nih.gov/38423026/)]. The results of these follow-up studies was bitter-sweet. At the two-year follow-up, only 41% of the treatment group remained in remission compared to the previous year, and only 10% at five years of follow-up. These results were not promising for the treatment over time once people were reintroduced to their previous diets and left without practitioner support. Even after the two-year follow-up, 94 or the remaining 101 subjects in the treatment group were given access to extended care, which only resulted in 13% remission rates within the extended care group at five years.
|
||||
|
||||
It sounds bleak, but let's think about it. Dr. Taylor's research was essentially testing two things at the end of the day— the conceptual model of T2DM, encompassing the TCH and the PFT, as well as the efficacy of radical weight loss in an outpatient setting. With respect to the former, Taylor's work has been a resounding success, and it buttresses the strongest model of T2DM development and progression that we currently have. In regards to the latter, radical supervised weight loss with the practitioner support did not yield terribly promising results beyond two years. All isn't lost, though.
|
||||
|
||||
The important thing is that we now have a firm grasp about what causes T2DM. It isn't sugar, seed oils, animal fat, or any other harebrained dietary boogeyman. It's just energy poisoning, with a simple, easy-to-understand etiology; if you gain more fat than your body can tolerate, you develop the phenotype of T2DM. If at that point you do indeed lose enough body fat to fall back below the maximum your body can withstand, T2DM remission follows. The last piece of the puzzle is figuring out what factors cause over-consumption, and how to durably address excessive body fat.
|
||||
|
||||
## DISCUSSION
|
||||
|
||||
In conclusion, while a myriad of hypotheses continue to circulate within nutritional and diabetic research spheres regarding the genesis and treatment of T2DM, it becomes increasingly clear that simplicity often guides the best practice. The TCH, underscored by the PFT, offers a cogent framework suggesting that T2DM is not merely a product of specific dietary components like sugars, SFA, or PUFA, but rather a complex interplay of caloric excess leading to dysfunctional energy storage and insulin response. As emerging studies, such as those by Dr. Taylor and his colleagues, indicate, interventions aiming at substantial and sustained weight loss may hold the key to reversing T2DM, provided these interventions are maintained with consistent medical oversight and support.
|
||||
|
||||
While the exploration of dietary influence on T2DM remains important, we also have to acknowledge the apparently lack of elasticity of our food culture and the stark tendency toward recidivism with dietary intervenions. Emerging pharmacological interventions, particularly GLP-1 receptor agonists, are presenting promising frontiers in the management and potential reversal of this condition. As we advance, the integration of such pharmaceutical approaches alongside dietary management could revolutionize the treatment landscape of T2DM. Emphasizing the synergy between medication and lifestyle changes will likely be pivotal in crafting effective, personalized treatment plans that address both the biochemical and lifestyle facets of diabetes care.
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!
|
||||
|
||||
# BIBLIOGRAPHY"""
|
||||
, articleReferences =
|
||||
[ { author = "Jacob, S., et al."
|
||||
, title = "Association of Increased Intramyocellular Lipid Content with Insulin Resistance in Lean Nondiabetic Offspring of Type 2 Diabetic Subjects"
|
||||
, journal = "Diabetes"
|
||||
, year = "1999"
|
||||
, link = "https://doi.org/10.2337/diabetes.48.5.1113"
|
||||
}
|
||||
, { author = "Perseghin, G., et al."
|
||||
, title = "Intramyocellular Triglyceride Content Is a Determinant of in Vivo Insulin Resistance in Humans: A 1H-13C Nuclear Magnetic Resonance Spectroscopy Assessment in Offspring of Type 2 Diabetic Parents"
|
||||
, journal = "Diabetes"
|
||||
, year = "1999"
|
||||
, link = "https://doi.org/10.2337/diabetes.48.8.1600"
|
||||
}
|
||||
, { author = "van Loon, Luc J. C., et al."
|
||||
, title = "Intramyocellular Lipid Content in Type 2 Diabetes Patients Compared with Overweight Sedentary Men and Highly Trained Endurance Athletes"
|
||||
, journal = "American Journal of Physiology. Endocrinology and Metabolism"
|
||||
, year = "2004"
|
||||
, link = "https://doi.org/10.1152/ajpendo.00464.2003"
|
||||
}
|
||||
, { author = "Coen, Paul M., and Bret H. Goodpaster"
|
||||
, title = "Role of Intramyocelluar Lipids in Human Health"
|
||||
, journal = "Trends in Endocrinology and Metabolism: TEM"
|
||||
, year = "2012"
|
||||
, link = "https://doi.org/10.1016/j.tem.2012.05.009"
|
||||
}
|
||||
, { author = "Leenaars, Cathalijn H. C., et al."
|
||||
, title = "Animal to Human Translation: A Systematic Scoping Review of Reported Concordance Rates"
|
||||
, journal = "Journal of Translational Medicine"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.1186/s12967-019-1976-2"
|
||||
}
|
||||
, { author = "Skovbro, M., et al."
|
||||
, title = "Human Skeletal Muscle Ceramide Content Is Not a Major Factor in Muscle Insulin Sensitivity"
|
||||
, journal = "Diabetologia"
|
||||
, year = "2008"
|
||||
, link = "https://doi.org/10.1007/s00125-008-1014-z"
|
||||
}
|
||||
, { author = "Itani, Samar I., et al."
|
||||
, title = "Lipid-Induced Insulin Resistance in Human Muscle Is Associated with Changes in Diacylglycerol, Protein Kinase C, and IkappaB-Alpha"
|
||||
, journal = "Diabetes"
|
||||
, year = "2002"
|
||||
, link = "https://doi.org/10.2337/diabetes.51.7.2005"
|
||||
}
|
||||
, { author = "\"The Nutrivore\""
|
||||
, title = "The Nutrivore: Sugar Doesn’t Cause Diabetes, and Ketosis Doesn’t Reverse It"
|
||||
, journal = "The Nutrivore"
|
||||
, year = "2019"
|
||||
, link = "https://thenutrivore.blogspot.com/2019/10/sugar-doesnt-cause-diabetes-and-ketosis.html"
|
||||
}
|
||||
, { author = "Stanhope, Kimber L."
|
||||
, title = "Sugar Consumption, Metabolic Disease and Obesity: The State of the Controversy"
|
||||
, journal = "Critical Reviews in Clinical Laboratory Sciences"
|
||||
, year = "2016"
|
||||
, link = "https://doi.org/10.3109/10408363.2015.1084990"
|
||||
}
|
||||
, { author = "Stanhope, Kimber L., et al."
|
||||
, title = "Consuming Fructose-Sweetened, Not Glucose-Sweetened, Beverages Increases Visceral Adiposity and Lipids and Decreases Insulin Sensitivity in Overweight/Obese Humans"
|
||||
, journal = "The Journal of Clinical Investigation"
|
||||
, year = "2009"
|
||||
, link = "https://doi.org/10.1172/JCI37385"
|
||||
}
|
||||
, { author = "Cox, C. L., et al."
|
||||
, title = "Consumption of Fructose-Sweetened Beverages for 10 Weeks Reduces Net Fat Oxidation and Energy Expenditure in Overweight/Obese Men and Women"
|
||||
, journal = "European Journal of Clinical Nutrition"
|
||||
, year = "2012"
|
||||
, link = "https://doi.org/10.1038/ejcn.2011.159"
|
||||
}
|
||||
, { author = "Cox, Chad L., et al."
|
||||
, title = "Consumption of Fructose- but Not Glucose-Sweetened Beverages for 10 Weeks Increases Circulating Concentrations of Uric Acid, Retinol Binding Protein-4, and Gamma-Glutamyl Transferase Activity in Overweight/Obese Humans"
|
||||
, journal = "Nutrition & Metabolism"
|
||||
, year = "2012"
|
||||
, link = "https://doi.org/10.1186/1743-7075-9-68"
|
||||
}
|
||||
, { author = "Meng, Yantong, et al."
|
||||
, title = "Sugar- and Artificially Sweetened Beverages Consumption Linked to Type 2 Diabetes, Cardiovascular Diseases, and All-Cause Mortality: A Systematic Review and Dose-Response Meta-Analysis of Prospective Cohort Studies"
|
||||
, journal = "Nutrients"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.3390/nu13082636"
|
||||
}
|
||||
, { author = "Hallberg, Sarah J., et al."
|
||||
, title = "Effectiveness and Safety of a Novel Care Model for the Management of Type 2 Diabetes at 1 Year: An Open-Label, Non-Randomized, Controlled Study"
|
||||
, journal = "Diabetes Therapy: Research, Treatment and Education of Diabetes and Related Disorders"
|
||||
, year = "2018"
|
||||
, link = "https://doi.org/10.1007/s13300-018-0373-9"
|
||||
}
|
||||
, { author = "Athinarayanan, Shaminie J., et al."
|
||||
, title = "Long-Term Effects of a Novel Continuous Remote Care Intervention Including Nutritional Ketosis for the Management of Type 2 Diabetes: A 2-Year Non-Randomized Clinical Trial"
|
||||
, journal = "Frontiers in Endocrinology"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.3389/fendo.2019.00348"
|
||||
}
|
||||
, { author = "Veazie, S., Vela, K., & Helfand, M."
|
||||
, title = "Evidence Brief: Virtual Diet Programs for Diabetes"
|
||||
, journal = "Evidence Synthesis Program (ESP)"
|
||||
, year = "2020"
|
||||
, link = "http://www.hsrd.research.va.gov/publications/esp/"
|
||||
}
|
||||
, { author = "McKenzie, Amy, et al."
|
||||
, title = "SUN-LB113 A Continuous Remote Care Intervention Utilizing Carbohydrate Restriction Including Nutritional Ketosis Improves Markers of Metabolic Risk and Reduces Diabetes Medication Use in Patients With Type 2 Diabetes Over 3.5 Years"
|
||||
, journal = "Journal of the Endocrine Society"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.1210/jendso/bvaa046.2302"
|
||||
}
|
||||
, { author = "Hiebert, Nick"
|
||||
, title = "A Comprehensive Rebuttal to Seed Oil Sophistry"
|
||||
, journal = "The Nutrivore"
|
||||
, year = "2021"
|
||||
, link = "https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry"
|
||||
}
|
||||
, { author = "Wu, Jason H. Y., et al."
|
||||
, title = "Omega-6 Fatty Acid Biomarkers and Incident Type 2 Diabetes: Pooled Analysis of Individual-Level Data for 39,740 Adults from 20 Prospective Cohort Studies"
|
||||
, journal = "The Lancet. Diabetes & Endocrinology"
|
||||
, year = "2017"
|
||||
, link = "https://doi.org/10.1016/S2213-8587(17)30307-8"
|
||||
}
|
||||
, { author = "Houtsmuller, A. J., et al."
|
||||
, title = "Favorable Influences of Linoleic Acid on the Progression of Diabetic Micro- and Macroangiopathy in Adult Onset Diabetes Mellitus"
|
||||
, journal = "Progress in Lipid Research"
|
||||
, year = "1981"
|
||||
, link = "https://doi.org/10.1016/0163-7827(81)90070-9"
|
||||
}
|
||||
, { author = "Watts, G. F., et al."
|
||||
, title = "Effects on Coronary Artery Disease of Lipid-Lowering Diet, or Diet plus Cholestyramine, in the St Thomas’ Atherosclerosis Regression Study (STARS)"
|
||||
, journal = "Lancet (London, England)"
|
||||
, year = "1992"
|
||||
, link = "https://doi.org/10.1016/0140-6736(92)90863-x"
|
||||
}
|
||||
, { author = "Hooper, Lee, et al."
|
||||
, title = "Reduction in Saturated Fat Intake for Cardiovascular Disease"
|
||||
, journal = "The Cochrane Database of Systematic Reviews"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.1002/14651858.CD011737.pub2"
|
||||
}
|
||||
, { author = "Ley, Sarah J., et al."
|
||||
, title = "Long-Term Effects of a Reduced Fat Diet Intervention on Cardiovascular Disease Risk Factors in Individuals with Glucose Intolerance"
|
||||
, journal = "Diabetes Research and Clinical Practice"
|
||||
, year = "2004"
|
||||
, link = "https://doi.org/10.1016/j.diabres.2003.09.001"
|
||||
}
|
||||
, { author = "Lim, E. L., et al."
|
||||
, title = "Reversal of Type 2 Diabetes: Normalisation of Beta Cell Function in Association with Decreased Pancreas and Liver Triacylglycerol"
|
||||
, journal = "Diabetologia"
|
||||
, year = "2011"
|
||||
, link = "https://doi.org/10.1007/s00125-011-2204-7"
|
||||
}
|
||||
, { author = "Taylor, R."
|
||||
, title = "Banting Memorial Lecture 2012: Reversing the Twin Cycles of Type 2 Diabetes"
|
||||
, journal = "Diabetic Medicine: A Journal of the British Diabetic Association"
|
||||
, year = "2013"
|
||||
, link = "https://doi.org/10.1111/dme.12039"
|
||||
}
|
||||
, { author = "Taylor, Roy, and Rury R. Holman"
|
||||
, title = "Normal Weight Individuals Who Develop Type 2 Diabetes: The Personal Fat Threshold"
|
||||
, journal = "Clinical Science (London, England: 1979)"
|
||||
, year = "2015"
|
||||
, link = "https://doi.org/10.1042/CS20140553"
|
||||
}
|
||||
, { author = "Taylor, Roy, et al."
|
||||
, title = "Aetiology of Type 2 Diabetes in People with a ‘normal’ Body Mass Index: Testing the Personal Fat Threshold Hypothesis"
|
||||
, journal = "Clinical Science (London, England: 1979)"
|
||||
, year = "2023"
|
||||
, link = "https://doi.org/10.1042/CS20230586"
|
||||
}
|
||||
, { author = "Ravikumar, Balasubramanian, et al."
|
||||
, title = "Pioglitazone Decreases Fasting and Postprandial Endogenous Glucose Production in Proportion to Decrease in Hepatic Triglyceride Content"
|
||||
, journal = "Diabetes"
|
||||
, year = "2008"
|
||||
, link = "https://doi.org/10.2337/db07-1828"
|
||||
}
|
||||
, { author = "Petersen, Kitt Falk, et al."
|
||||
, title = "Reversal of Nonalcoholic Hepatic Steatosis, Hepatic Insulin Resistance, and Hyperglycemia by Moderate Weight Reduction in Patients with Type 2 Diabetes"
|
||||
, journal = "Diabetes"
|
||||
, year = "2005"
|
||||
, link = "https://doi.org/10.2337/diabetes.54.3.603"
|
||||
}
|
||||
, { author = "Steven, S., and R. Taylor"
|
||||
, title = "Restoring Normoglycaemia by Use of a Very Low Calorie Diet in Long- and Short-Duration Type 2 Diabetes"
|
||||
, journal = "Diabetic Medicine: A Journal of the British Diabetic Association"
|
||||
, year = "2015"
|
||||
, link = "https://doi.org/10.1111/dme.12722"
|
||||
}
|
||||
, { author = "Lean, Michael Ej, et al."
|
||||
, title = "Primary Care-Led Weight Management for Remission of Type 2 Diabetes (DiRECT): An Open-Label, Cluster-Randomised Trial"
|
||||
, journal = "Lancet (London, England)"
|
||||
, year = "2018"
|
||||
, link = "https://doi.org/10.1016/S0140-6736(17)33102-1"
|
||||
}
|
||||
, { author = "Lean, Michael E. J., et al."
|
||||
, title = "Durability of a Primary Care-Led Weight-Management Intervention for Remission of Type 2 Diabetes: 2-Year Results of the DiRECT Open-Label, Cluster-Randomised Trial"
|
||||
, journal = "The Lancet. Diabetes & Endocrinology"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.1016/S2213-8587(19)30068-3"
|
||||
}
|
||||
, { author = "Lean, Michael Ej, et al."
|
||||
, title = "5-Year Follow-up of the Randomised Diabetes Remission Clinical Trial (DiRECT) of Continued Support for Weight Loss Maintenance in the UK: An Extension Study"
|
||||
, journal = "The Lancet. Diabetes & Endocrinology"
|
||||
, year = "2024"
|
||||
, link = "https://doi.org/10.1016/S2213-8587(23)00385-6"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -34,13 +34,17 @@ import Config.Helpers.Response
|
|||
, topLevelContainer
|
||||
)
|
||||
import Config.Helpers.Viewport exposing (resetViewport)
|
||||
import Config.Pages.Blog.Records.BigFatSurprise exposing (articleBigFatSurprise)
|
||||
import Config.Pages.Blog.Records.EverettVegans exposing (articleEverettVegans)
|
||||
import Config.Pages.Blog.Records.HunterGatherers exposing (articleHunterGatherers)
|
||||
import Config.Pages.Blog.Records.MeatApologetics exposing (articleMeatApologetics)
|
||||
import Config.Pages.Blog.Records.NagraGoodrich exposing (articleNagraGoodrich)
|
||||
import Config.Pages.Blog.Records.PlantBasedMeta exposing (articlePlantBasedMeta)
|
||||
import Config.Pages.Blog.Records.QuackSmashing exposing (articleQuackSmashing)
|
||||
import Config.Pages.Blog.Records.SapienDiet exposing (articleSapienDiet)
|
||||
import Config.Pages.Blog.Records.SeedOils exposing (articleSeedOils)
|
||||
import Config.Pages.Blog.Records.Shenangians exposing (articleShenanigans)
|
||||
import Config.Pages.Blog.Records.SweetDeception exposing (articleSweetDeception)
|
||||
import Config.Pages.Blog.Types exposing (..)
|
||||
import Config.Style.Colour as T exposing (..)
|
||||
import Config.Style.Icons.Icons exposing (construction)
|
||||
|
@ -155,13 +159,17 @@ blogList device =
|
|||
_ ->
|
||||
List.map desktopBlogMaker
|
||||
)
|
||||
[ articleEverettVegans
|
||||
[ articleShenanigans
|
||||
, articleSweetDeception
|
||||
, articleEverettVegans
|
||||
, articleQuackSmashing
|
||||
, articleSapienDiet
|
||||
, articleNagraGoodrich
|
||||
, articleMeatApologetics
|
||||
, articleSeedOils
|
||||
, articleHunterGatherers
|
||||
, articlePlantBasedMeta
|
||||
, articleBigFatSurprise
|
||||
]
|
||||
]
|
||||
|
||||
|
|
195
frontend/src/Pages/Blog/Bigfatsurprise.elm
Normal file
|
@ -0,0 +1,195 @@
|
|||
module Pages.Blog.Bigfatsurprise exposing (Model, Msg, page)
|
||||
|
||||
import Config.Data.Identity exposing (pageNames)
|
||||
import Config.Helpers.CardFormat
|
||||
exposing
|
||||
( cardContentSpacing
|
||||
, cardFormatter
|
||||
, cardMaker
|
||||
, cardSubTitleMaker
|
||||
, cardTitleMaker
|
||||
, desktopCardMaker
|
||||
, desktopImageBoxSize
|
||||
, desktopImageSize
|
||||
, fieldSpacer
|
||||
, mobileCardMaker
|
||||
, mobileImageBoxSize
|
||||
, mobileImageSize
|
||||
, topLevelBox
|
||||
)
|
||||
import Config.Helpers.Format exposing (..)
|
||||
import Config.Helpers.Header
|
||||
exposing
|
||||
( Header
|
||||
, headerMaker
|
||||
)
|
||||
import Config.Helpers.Markdown exposing (..)
|
||||
import Config.Helpers.References exposing (makeReference)
|
||||
import Config.Helpers.Response
|
||||
exposing
|
||||
( pageList
|
||||
, topLevelContainer
|
||||
)
|
||||
import Config.Helpers.StrengthBar
|
||||
exposing
|
||||
( barMaker
|
||||
, barPadding
|
||||
)
|
||||
import Config.Helpers.ToolTip exposing (..)
|
||||
import Config.Helpers.Viewport exposing (resetViewport)
|
||||
import Config.Pages.Blog.Records.BigFatSurprise exposing (articleBigFatSurprise)
|
||||
import Config.Pages.Blog.Types exposing (BlogArticle)
|
||||
import Config.Pages.Contact.Types exposing (..)
|
||||
import Config.Pages.Interviews.Types exposing (..)
|
||||
import Config.Pages.Products.Types exposing (..)
|
||||
import Config.Style.Colour exposing (colourTheme)
|
||||
import Config.Style.Transitions
|
||||
exposing
|
||||
( hoverFontDarkOrange
|
||||
, transitionStyleFast
|
||||
, transitionStyleSlow
|
||||
)
|
||||
import Effect exposing (Effect)
|
||||
import Element as E exposing (..)
|
||||
import Element.Background as B
|
||||
import Element.Border as D
|
||||
import Element.Font as F
|
||||
import Html
|
||||
import Html.Attributes as H exposing (style)
|
||||
import Layouts
|
||||
import Page exposing (Page)
|
||||
import Route exposing (Route)
|
||||
import Shared exposing (..)
|
||||
import View exposing (View)
|
||||
|
||||
|
||||
page : Shared.Model -> Route () -> Page Model Msg
|
||||
page shared route =
|
||||
Page.new
|
||||
{ init = init
|
||||
, update = update
|
||||
, subscriptions = subscriptions
|
||||
, view = view shared
|
||||
}
|
||||
|> Page.withLayout toLayout
|
||||
|
||||
|
||||
toLayout : Model -> Layouts.Layout Msg
|
||||
toLayout model =
|
||||
Layouts.Navbar {}
|
||||
|
||||
|
||||
|
||||
-- INIT
|
||||
|
||||
|
||||
type alias Model =
|
||||
{}
|
||||
|
||||
|
||||
init : () -> ( Model, Effect Msg )
|
||||
init () =
|
||||
( {}
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- UPDATE
|
||||
|
||||
|
||||
type Msg
|
||||
= NoOp
|
||||
|
||||
|
||||
update : Msg -> Model -> ( Model, Effect Msg )
|
||||
update msg model =
|
||||
case msg of
|
||||
NoOp ->
|
||||
( model
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- SUBSCRIPTIONS
|
||||
|
||||
|
||||
subscriptions : Model -> Sub Msg
|
||||
subscriptions model =
|
||||
Sub.none
|
||||
|
||||
|
||||
|
||||
-- VIEW
|
||||
|
||||
|
||||
view : Shared.Model -> Model -> View Msg
|
||||
view shared model =
|
||||
{ title = pageNames.pageHyperBlog ++ " (bigFatSurprise)"
|
||||
, attributes = []
|
||||
, element = articleContainer shared.device
|
||||
}
|
||||
|
||||
|
||||
articleContainer : Device -> Element msg
|
||||
articleContainer device =
|
||||
topLevelContainer (articleList device)
|
||||
|
||||
|
||||
articleList : Device -> Element msg
|
||||
articleList device =
|
||||
column
|
||||
(case ( device.class, device.orientation ) of
|
||||
_ ->
|
||||
pageList
|
||||
)
|
||||
<|
|
||||
List.concat
|
||||
[ (case ( device.class, device.orientation ) of
|
||||
_ ->
|
||||
List.map articleMaker
|
||||
)
|
||||
[ articleBigFatSurprise ]
|
||||
]
|
||||
|
||||
|
||||
articleMaker : BlogArticle -> Element msg
|
||||
articleMaker article =
|
||||
column
|
||||
topLevelBox
|
||||
[ cardMaker
|
||||
[ cardTitleMaker (String.toUpper articleBigFatSurprise.articleName)
|
||||
, cardFormatter
|
||||
[ cardContentSpacing
|
||||
[ column
|
||||
fieldSpacer
|
||||
[ cardSubTitleMaker
|
||||
[ articleImage articleBigFatSurprise.articleImage
|
||||
, renderDeviceMarkdown articleBigFatSurprise.articleBody
|
||||
, articleReferences article
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
articleReferences : BlogArticle -> Element msg
|
||||
articleReferences article =
|
||||
column
|
||||
[ width fill
|
||||
, height fill
|
||||
, paddingEach
|
||||
{ top = 10
|
||||
, right = 0
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
}
|
||||
]
|
||||
[ column [ width fill, F.size 15, spacing 10 ] <|
|
||||
List.map2 (\x y -> makeReference x y)
|
||||
article.articleReferences
|
||||
(List.range 1 (List.length article.articleReferences))
|
||||
]
|
|
@ -126,7 +126,7 @@ subscriptions model =
|
|||
|
||||
view : Shared.Model -> Model -> View Msg
|
||||
view shared model =
|
||||
{ title = pageNames.pageHyperBlog ++ " (sapienDiet)"
|
||||
{ title = pageNames.pageHyperBlog ++ " (everettVegans)"
|
||||
, attributes = []
|
||||
, element = articleContainer shared.device
|
||||
}
|
||||
|
|
|
@ -126,7 +126,7 @@ subscriptions model =
|
|||
|
||||
view : Shared.Model -> Model -> View Msg
|
||||
view shared model =
|
||||
{ title = pageNames.pageHyperBlog ++ " (NagraGoodrich)"
|
||||
{ title = pageNames.pageHyperBlog ++ " (meatApologetics)"
|
||||
, attributes = []
|
||||
, element = articleContainer shared.device
|
||||
}
|
||||
|
@ -167,6 +167,7 @@ articleMaker article =
|
|||
[ cardSubTitleMaker
|
||||
[ articleImage articleMeatApologetics.articleImage
|
||||
, renderDeviceMarkdown articleMeatApologetics.articleBody
|
||||
, articleReferences article
|
||||
]
|
||||
]
|
||||
]
|
||||
|
|
|
@ -126,7 +126,7 @@ subscriptions model =
|
|||
|
||||
view : Shared.Model -> Model -> View Msg
|
||||
view shared model =
|
||||
{ title = pageNames.pageHyperBlog ++ " (NagraGoodrich)"
|
||||
{ title = pageNames.pageHyperBlog ++ " (nagraGoodrich)"
|
||||
, attributes = []
|
||||
, element = articleContainer shared.device
|
||||
}
|
||||
|
|
194
frontend/src/Pages/Blog/Plantbasedmeta.elm
Normal file
|
@ -0,0 +1,194 @@
|
|||
module Pages.Blog.Plantbasedmeta exposing (Model, Msg, page)
|
||||
|
||||
import Config.Data.Identity exposing (pageNames)
|
||||
import Config.Helpers.CardFormat
|
||||
exposing
|
||||
( cardContentSpacing
|
||||
, cardFormatter
|
||||
, cardMaker
|
||||
, cardSubTitleMaker
|
||||
, cardTitleMaker
|
||||
, desktopCardMaker
|
||||
, desktopImageBoxSize
|
||||
, desktopImageSize
|
||||
, fieldSpacer
|
||||
, mobileCardMaker
|
||||
, mobileImageBoxSize
|
||||
, mobileImageSize
|
||||
, topLevelBox
|
||||
)
|
||||
import Config.Helpers.Format exposing (..)
|
||||
import Config.Helpers.Header
|
||||
exposing
|
||||
( Header
|
||||
, headerMaker
|
||||
)
|
||||
import Config.Helpers.Markdown exposing (..)
|
||||
import Config.Helpers.References exposing (makeReference)
|
||||
import Config.Helpers.Response
|
||||
exposing
|
||||
( pageList
|
||||
, topLevelContainer
|
||||
)
|
||||
import Config.Helpers.StrengthBar
|
||||
exposing
|
||||
( barMaker
|
||||
, barPadding
|
||||
)
|
||||
import Config.Helpers.ToolTip exposing (..)
|
||||
import Config.Helpers.Viewport exposing (resetViewport)
|
||||
import Config.Pages.Blog.Records.PlantBasedMeta exposing (articlePlantBasedMeta)
|
||||
import Config.Pages.Blog.Types exposing (BlogArticle)
|
||||
import Config.Pages.Contact.Types exposing (..)
|
||||
import Config.Pages.Interviews.Types exposing (..)
|
||||
import Config.Pages.Products.Types exposing (..)
|
||||
import Config.Style.Colour exposing (colourTheme)
|
||||
import Config.Style.Transitions
|
||||
exposing
|
||||
( hoverFontDarkOrange
|
||||
, transitionStyleFast
|
||||
, transitionStyleSlow
|
||||
)
|
||||
import Effect exposing (Effect)
|
||||
import Element as E exposing (..)
|
||||
import Element.Background as B
|
||||
import Element.Border as D
|
||||
import Element.Font as F
|
||||
import Html
|
||||
import Html.Attributes as H exposing (style)
|
||||
import Layouts
|
||||
import Page exposing (Page)
|
||||
import Route exposing (Route)
|
||||
import Shared exposing (..)
|
||||
import View exposing (View)
|
||||
|
||||
|
||||
page : Shared.Model -> Route () -> Page Model Msg
|
||||
page shared route =
|
||||
Page.new
|
||||
{ init = init
|
||||
, update = update
|
||||
, subscriptions = subscriptions
|
||||
, view = view shared
|
||||
}
|
||||
|> Page.withLayout toLayout
|
||||
|
||||
|
||||
toLayout : Model -> Layouts.Layout Msg
|
||||
toLayout model =
|
||||
Layouts.Navbar {}
|
||||
|
||||
|
||||
|
||||
-- INIT
|
||||
|
||||
|
||||
type alias Model =
|
||||
{}
|
||||
|
||||
|
||||
init : () -> ( Model, Effect Msg )
|
||||
init () =
|
||||
( {}
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- UPDATE
|
||||
|
||||
|
||||
type Msg
|
||||
= NoOp
|
||||
|
||||
|
||||
update : Msg -> Model -> ( Model, Effect Msg )
|
||||
update msg model =
|
||||
case msg of
|
||||
NoOp ->
|
||||
( model
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- SUBSCRIPTIONS
|
||||
|
||||
|
||||
subscriptions : Model -> Sub Msg
|
||||
subscriptions model =
|
||||
Sub.none
|
||||
|
||||
|
||||
|
||||
-- VIEW
|
||||
|
||||
|
||||
view : Shared.Model -> Model -> View Msg
|
||||
view shared model =
|
||||
{ title = pageNames.pageHyperBlog ++ " (plantBasedMeta)"
|
||||
, attributes = []
|
||||
, element = articleContainer shared.device
|
||||
}
|
||||
|
||||
|
||||
articleContainer : Device -> Element msg
|
||||
articleContainer device =
|
||||
topLevelContainer (articleList device)
|
||||
|
||||
|
||||
articleList : Device -> Element msg
|
||||
articleList device =
|
||||
column
|
||||
(case ( device.class, device.orientation ) of
|
||||
_ ->
|
||||
pageList
|
||||
)
|
||||
<|
|
||||
List.concat
|
||||
[ (case ( device.class, device.orientation ) of
|
||||
_ ->
|
||||
List.map articleMaker
|
||||
)
|
||||
[ articlePlantBasedMeta ]
|
||||
]
|
||||
|
||||
|
||||
articleMaker : BlogArticle -> Element msg
|
||||
articleMaker article =
|
||||
column
|
||||
topLevelBox
|
||||
[ cardMaker
|
||||
[ cardTitleMaker (String.toUpper articlePlantBasedMeta.articleName)
|
||||
, cardFormatter
|
||||
[ cardContentSpacing
|
||||
[ column
|
||||
fieldSpacer
|
||||
[ cardSubTitleMaker
|
||||
[ articleImage articlePlantBasedMeta.articleImage
|
||||
, renderDeviceMarkdown articlePlantBasedMeta.articleBody
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
articleReferences : BlogArticle -> Element msg
|
||||
articleReferences article =
|
||||
column
|
||||
[ width fill
|
||||
, height fill
|
||||
, paddingEach
|
||||
{ top = 10
|
||||
, right = 0
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
}
|
||||
]
|
||||
[ column [ width fill, F.size 15, spacing 10 ] <|
|
||||
List.map2 (\x y -> makeReference x y)
|
||||
article.articleReferences
|
||||
(List.range 1 (List.length article.articleReferences))
|
||||
]
|
194
frontend/src/Pages/Blog/Shenanigans.elm
Normal file
|
@ -0,0 +1,194 @@
|
|||
module Pages.Blog.Shenanigans exposing (Model, Msg, page)
|
||||
|
||||
import Config.Data.Identity exposing (pageNames)
|
||||
import Config.Helpers.CardFormat
|
||||
exposing
|
||||
( cardContentSpacing
|
||||
, cardFormatter
|
||||
, cardMaker
|
||||
, cardSubTitleMaker
|
||||
, cardTitleMaker
|
||||
, desktopCardMaker
|
||||
, desktopImageBoxSize
|
||||
, desktopImageSize
|
||||
, fieldSpacer
|
||||
, mobileCardMaker
|
||||
, mobileImageBoxSize
|
||||
, mobileImageSize
|
||||
, topLevelBox
|
||||
)
|
||||
import Config.Helpers.Format exposing (..)
|
||||
import Config.Helpers.Header
|
||||
exposing
|
||||
( Header
|
||||
, headerMaker
|
||||
)
|
||||
import Config.Helpers.Markdown exposing (..)
|
||||
import Config.Helpers.References exposing (makeReference)
|
||||
import Config.Helpers.Response
|
||||
exposing
|
||||
( pageList
|
||||
, topLevelContainer
|
||||
)
|
||||
import Config.Helpers.StrengthBar
|
||||
exposing
|
||||
( barMaker
|
||||
, barPadding
|
||||
)
|
||||
import Config.Helpers.ToolTip exposing (..)
|
||||
import Config.Helpers.Viewport exposing (resetViewport)
|
||||
import Config.Pages.Blog.Records.Shenangians exposing (articleShenanigans)
|
||||
import Config.Pages.Blog.Types exposing (BlogArticle)
|
||||
import Config.Pages.Contact.Types exposing (..)
|
||||
import Config.Pages.Interviews.Types exposing (..)
|
||||
import Config.Pages.Products.Types exposing (..)
|
||||
import Config.Style.Colour exposing (colourTheme)
|
||||
import Config.Style.Transitions
|
||||
exposing
|
||||
( hoverFontDarkOrange
|
||||
, transitionStyleFast
|
||||
, transitionStyleSlow
|
||||
)
|
||||
import Effect exposing (Effect)
|
||||
import Element as E exposing (..)
|
||||
import Element.Background as B
|
||||
import Element.Border as D
|
||||
import Element.Font as F
|
||||
import Html
|
||||
import Html.Attributes as H exposing (style)
|
||||
import Layouts
|
||||
import Page exposing (Page)
|
||||
import Route exposing (Route)
|
||||
import Shared exposing (..)
|
||||
import View exposing (View)
|
||||
|
||||
|
||||
page : Shared.Model -> Route () -> Page Model Msg
|
||||
page shared route =
|
||||
Page.new
|
||||
{ init = init
|
||||
, update = update
|
||||
, subscriptions = subscriptions
|
||||
, view = view shared
|
||||
}
|
||||
|> Page.withLayout toLayout
|
||||
|
||||
|
||||
toLayout : Model -> Layouts.Layout Msg
|
||||
toLayout model =
|
||||
Layouts.Navbar {}
|
||||
|
||||
|
||||
|
||||
-- INIT
|
||||
|
||||
|
||||
type alias Model =
|
||||
{}
|
||||
|
||||
|
||||
init : () -> ( Model, Effect Msg )
|
||||
init () =
|
||||
( {}
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- UPDATE
|
||||
|
||||
|
||||
type Msg
|
||||
= NoOp
|
||||
|
||||
|
||||
update : Msg -> Model -> ( Model, Effect Msg )
|
||||
update msg model =
|
||||
case msg of
|
||||
NoOp ->
|
||||
( model
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- SUBSCRIPTIONS
|
||||
|
||||
|
||||
subscriptions : Model -> Sub Msg
|
||||
subscriptions model =
|
||||
Sub.none
|
||||
|
||||
|
||||
|
||||
-- VIEW
|
||||
|
||||
|
||||
view : Shared.Model -> Model -> View Msg
|
||||
view shared model =
|
||||
{ title = pageNames.pageHyperBlog ++ " (shenanigans)"
|
||||
, attributes = []
|
||||
, element = articleContainer shared.device
|
||||
}
|
||||
|
||||
|
||||
articleContainer : Device -> Element msg
|
||||
articleContainer device =
|
||||
topLevelContainer (articleList device)
|
||||
|
||||
|
||||
articleList : Device -> Element msg
|
||||
articleList device =
|
||||
column
|
||||
(case ( device.class, device.orientation ) of
|
||||
_ ->
|
||||
pageList
|
||||
)
|
||||
<|
|
||||
List.concat
|
||||
[ (case ( device.class, device.orientation ) of
|
||||
_ ->
|
||||
List.map articleMaker
|
||||
)
|
||||
[ articleShenanigans ]
|
||||
]
|
||||
|
||||
|
||||
articleMaker : BlogArticle -> Element msg
|
||||
articleMaker article =
|
||||
column
|
||||
topLevelBox
|
||||
[ cardMaker
|
||||
[ cardTitleMaker (String.toUpper articleShenanigans.articleName)
|
||||
, cardFormatter
|
||||
[ cardContentSpacing
|
||||
[ column
|
||||
fieldSpacer
|
||||
[ cardSubTitleMaker
|
||||
[ articleImage articleShenanigans.articleImage
|
||||
, renderDeviceMarkdown articleShenanigans.articleBody
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
articleReferences : BlogArticle -> Element msg
|
||||
articleReferences article =
|
||||
column
|
||||
[ width fill
|
||||
, height fill
|
||||
, paddingEach
|
||||
{ top = 10
|
||||
, right = 0
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
}
|
||||
]
|
||||
[ column [ width fill, F.size 15, spacing 10 ] <|
|
||||
List.map2 (\x y -> makeReference x y)
|
||||
article.articleReferences
|
||||
(List.range 1 (List.length article.articleReferences))
|
||||
]
|
195
frontend/src/Pages/Blog/Sweetdeception.elm
Normal file
|
@ -0,0 +1,195 @@
|
|||
module Pages.Blog.Sweetdeception exposing (Model, Msg, page)
|
||||
|
||||
import Config.Data.Identity exposing (pageNames)
|
||||
import Config.Helpers.CardFormat
|
||||
exposing
|
||||
( cardContentSpacing
|
||||
, cardFormatter
|
||||
, cardMaker
|
||||
, cardSubTitleMaker
|
||||
, cardTitleMaker
|
||||
, desktopCardMaker
|
||||
, desktopImageBoxSize
|
||||
, desktopImageSize
|
||||
, fieldSpacer
|
||||
, mobileCardMaker
|
||||
, mobileImageBoxSize
|
||||
, mobileImageSize
|
||||
, topLevelBox
|
||||
)
|
||||
import Config.Helpers.Format exposing (..)
|
||||
import Config.Helpers.Header
|
||||
exposing
|
||||
( Header
|
||||
, headerMaker
|
||||
)
|
||||
import Config.Helpers.Markdown exposing (..)
|
||||
import Config.Helpers.References exposing (makeReference)
|
||||
import Config.Helpers.Response
|
||||
exposing
|
||||
( pageList
|
||||
, topLevelContainer
|
||||
)
|
||||
import Config.Helpers.StrengthBar
|
||||
exposing
|
||||
( barMaker
|
||||
, barPadding
|
||||
)
|
||||
import Config.Helpers.ToolTip exposing (..)
|
||||
import Config.Helpers.Viewport exposing (resetViewport)
|
||||
import Config.Pages.Blog.Records.SweetDeception exposing (articleSweetDeception)
|
||||
import Config.Pages.Blog.Types exposing (BlogArticle)
|
||||
import Config.Pages.Contact.Types exposing (..)
|
||||
import Config.Pages.Interviews.Types exposing (..)
|
||||
import Config.Pages.Products.Types exposing (..)
|
||||
import Config.Style.Colour exposing (colourTheme)
|
||||
import Config.Style.Transitions
|
||||
exposing
|
||||
( hoverFontDarkOrange
|
||||
, transitionStyleFast
|
||||
, transitionStyleSlow
|
||||
)
|
||||
import Effect exposing (Effect)
|
||||
import Element as E exposing (..)
|
||||
import Element.Background as B
|
||||
import Element.Border as D
|
||||
import Element.Font as F
|
||||
import Html
|
||||
import Html.Attributes as H exposing (style)
|
||||
import Layouts
|
||||
import Page exposing (Page)
|
||||
import Route exposing (Route)
|
||||
import Shared exposing (..)
|
||||
import View exposing (View)
|
||||
|
||||
|
||||
page : Shared.Model -> Route () -> Page Model Msg
|
||||
page shared route =
|
||||
Page.new
|
||||
{ init = init
|
||||
, update = update
|
||||
, subscriptions = subscriptions
|
||||
, view = view shared
|
||||
}
|
||||
|> Page.withLayout toLayout
|
||||
|
||||
|
||||
toLayout : Model -> Layouts.Layout Msg
|
||||
toLayout model =
|
||||
Layouts.Navbar {}
|
||||
|
||||
|
||||
|
||||
-- INIT
|
||||
|
||||
|
||||
type alias Model =
|
||||
{}
|
||||
|
||||
|
||||
init : () -> ( Model, Effect Msg )
|
||||
init () =
|
||||
( {}
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- UPDATE
|
||||
|
||||
|
||||
type Msg
|
||||
= NoOp
|
||||
|
||||
|
||||
update : Msg -> Model -> ( Model, Effect Msg )
|
||||
update msg model =
|
||||
case msg of
|
||||
NoOp ->
|
||||
( model
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
|
||||
|
||||
-- SUBSCRIPTIONS
|
||||
|
||||
|
||||
subscriptions : Model -> Sub Msg
|
||||
subscriptions model =
|
||||
Sub.none
|
||||
|
||||
|
||||
|
||||
-- VIEW
|
||||
|
||||
|
||||
view : Shared.Model -> Model -> View Msg
|
||||
view shared model =
|
||||
{ title = pageNames.pageHyperBlog ++ " (sweetDeception)"
|
||||
, attributes = []
|
||||
, element = articleContainer shared.device
|
||||
}
|
||||
|
||||
|
||||
articleContainer : Device -> Element msg
|
||||
articleContainer device =
|
||||
topLevelContainer (articleList device)
|
||||
|
||||
|
||||
articleList : Device -> Element msg
|
||||
articleList device =
|
||||
column
|
||||
(case ( device.class, device.orientation ) of
|
||||
_ ->
|
||||
pageList
|
||||
)
|
||||
<|
|
||||
List.concat
|
||||
[ (case ( device.class, device.orientation ) of
|
||||
_ ->
|
||||
List.map articleMaker
|
||||
)
|
||||
[ articleSweetDeception ]
|
||||
]
|
||||
|
||||
|
||||
articleMaker : BlogArticle -> Element msg
|
||||
articleMaker article =
|
||||
column
|
||||
topLevelBox
|
||||
[ cardMaker
|
||||
[ cardTitleMaker (String.toUpper articleSweetDeception.articleName)
|
||||
, cardFormatter
|
||||
[ cardContentSpacing
|
||||
[ column
|
||||
fieldSpacer
|
||||
[ cardSubTitleMaker
|
||||
[ articleImage articleSweetDeception.articleImage
|
||||
, renderDeviceMarkdown articleSweetDeception.articleBody
|
||||
, articleReferences article
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
articleReferences : BlogArticle -> Element msg
|
||||
articleReferences article =
|
||||
column
|
||||
[ width fill
|
||||
, height fill
|
||||
, paddingEach
|
||||
{ top = 10
|
||||
, right = 0
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
}
|
||||
]
|
||||
[ column [ width fill, F.size 15, spacing 10 ] <|
|
||||
List.map2 (\x y -> makeReference x y)
|
||||
article.articleReferences
|
||||
(List.range 1 (List.length article.articleReferences))
|
||||
]
|
BIN
frontend/static/blog/bigfatsurprise.png
Normal file
After Width: | Height: | Size: 322 KiB |
BIN
frontend/static/blog/bigfatsurprise/image1.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
frontend/static/blog/bigfatsurprise/image10.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
frontend/static/blog/bigfatsurprise/image11.png
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
frontend/static/blog/bigfatsurprise/image12.png
Normal file
After Width: | Height: | Size: 255 KiB |
BIN
frontend/static/blog/bigfatsurprise/image2.png
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
frontend/static/blog/bigfatsurprise/image3.png
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
frontend/static/blog/bigfatsurprise/image4.png
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
frontend/static/blog/bigfatsurprise/image5.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
frontend/static/blog/bigfatsurprise/image6.png
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
frontend/static/blog/bigfatsurprise/image7.png
Normal file
After Width: | Height: | Size: 233 KiB |
BIN
frontend/static/blog/bigfatsurprise/image8.png
Normal file
After Width: | Height: | Size: 189 KiB |
BIN
frontend/static/blog/bigfatsurprise/image9.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
frontend/static/blog/bigfatsurprisethumb.png
Normal file
After Width: | Height: | Size: 851 KiB |
BIN
frontend/static/blog/plantbasedmeta.png
Normal file
After Width: | Height: | Size: 2.8 MiB |
BIN
frontend/static/blog/plantbasedmeta/image10.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
frontend/static/blog/plantbasedmeta/image100.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
frontend/static/blog/plantbasedmeta/image101.png
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
frontend/static/blog/plantbasedmeta/image102.png
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
frontend/static/blog/plantbasedmeta/image103.png
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
frontend/static/blog/plantbasedmeta/image104.png
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
frontend/static/blog/plantbasedmeta/image105.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
frontend/static/blog/plantbasedmeta/image106.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
frontend/static/blog/plantbasedmeta/image107.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
frontend/static/blog/plantbasedmeta/image108.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
frontend/static/blog/plantbasedmeta/image109.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
frontend/static/blog/plantbasedmeta/image11.png
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
frontend/static/blog/plantbasedmeta/image110.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
frontend/static/blog/plantbasedmeta/image111.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
frontend/static/blog/plantbasedmeta/image112.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
frontend/static/blog/plantbasedmeta/image113.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
frontend/static/blog/plantbasedmeta/image114.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
frontend/static/blog/plantbasedmeta/image115.png
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
frontend/static/blog/plantbasedmeta/image116.png
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
frontend/static/blog/plantbasedmeta/image117.png
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
frontend/static/blog/plantbasedmeta/image118.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
frontend/static/blog/plantbasedmeta/image119.png
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
frontend/static/blog/plantbasedmeta/image12.png
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
frontend/static/blog/plantbasedmeta/image120.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
frontend/static/blog/plantbasedmeta/image121.png
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
frontend/static/blog/plantbasedmeta/image122.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
frontend/static/blog/plantbasedmeta/image123.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
frontend/static/blog/plantbasedmeta/image124.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
frontend/static/blog/plantbasedmeta/image125.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
frontend/static/blog/plantbasedmeta/image126.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
frontend/static/blog/plantbasedmeta/image127.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
frontend/static/blog/plantbasedmeta/image128.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
frontend/static/blog/plantbasedmeta/image129.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
frontend/static/blog/plantbasedmeta/image13.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
frontend/static/blog/plantbasedmeta/image130.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
frontend/static/blog/plantbasedmeta/image131.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
frontend/static/blog/plantbasedmeta/image132.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
frontend/static/blog/plantbasedmeta/image133.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
frontend/static/blog/plantbasedmeta/image134.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
frontend/static/blog/plantbasedmeta/image135.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
frontend/static/blog/plantbasedmeta/image136.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
frontend/static/blog/plantbasedmeta/image137.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
frontend/static/blog/plantbasedmeta/image138.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
frontend/static/blog/plantbasedmeta/image139.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
frontend/static/blog/plantbasedmeta/image14.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
frontend/static/blog/plantbasedmeta/image140.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
frontend/static/blog/plantbasedmeta/image141.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
frontend/static/blog/plantbasedmeta/image142.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
frontend/static/blog/plantbasedmeta/image143.png
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
frontend/static/blog/plantbasedmeta/image144.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
frontend/static/blog/plantbasedmeta/image145.png
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
frontend/static/blog/plantbasedmeta/image146.png
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
frontend/static/blog/plantbasedmeta/image147.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
frontend/static/blog/plantbasedmeta/image148.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
frontend/static/blog/plantbasedmeta/image149.png
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
frontend/static/blog/plantbasedmeta/image15.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
frontend/static/blog/plantbasedmeta/image150.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
frontend/static/blog/plantbasedmeta/image151.png
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
frontend/static/blog/plantbasedmeta/image152.png
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
frontend/static/blog/plantbasedmeta/image153.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
frontend/static/blog/plantbasedmeta/image154.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
frontend/static/blog/plantbasedmeta/image155.png
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
frontend/static/blog/plantbasedmeta/image156.png
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
frontend/static/blog/plantbasedmeta/image157.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
frontend/static/blog/plantbasedmeta/image158.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
frontend/static/blog/plantbasedmeta/image159.png
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
frontend/static/blog/plantbasedmeta/image16.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
frontend/static/blog/plantbasedmeta/image160.png
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
frontend/static/blog/plantbasedmeta/image161.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
frontend/static/blog/plantbasedmeta/image162.png
Normal file
After Width: | Height: | Size: 74 KiB |