kaberett: Trans symbol with Swiss Army knife tools at other positions around the central circle. (Default)
[personal profile] kaberett

I am now well over halfway through the book, and spent most of chapter four screeching to anyone who would listen about the extent to which either she is deliberately and cynically misrepresenting approaches that aren't Her Personal Programme in the interests of selling the latter, or she's just incompetent.

The actual suggested movements -- the strength-building and the stretching -- are totally reasonable, and also totally standard. It's the surrounding framing that has my eyebrows crawling into my hairline; I... tried to summarise and rapidly discovered I was launching into the full rant, and it's past bedtime, so let's start with: while there's a References section it's a whole 15 items long, and she's blithely saying "X states" or "Y says" as though the fact that something has been published in a single peer-reviewed paper means that it's unquestionably true, and of those fifteen one is a systematic review of any kind and... Several... are under the aegis of an organisation specialising in complementary medicine.

More details tomorrow, probably. With excerpts.

Journal Impact Nonsense

Aug. 14th, 2025 11:47 am
[syndicated profile] in_the_pipeline_feed

Here’s a revealing look at the state of the chemistry literature in 2025, and it’s not a very appealing sight. Chemistry World has listed the “Top Five” journals in a number of areas of the science as ranked by “Journal Impact Factor”.  and “Journal Citation Indicator”s. The JIFs are put out by Clarivate (Web of Science), and you’d think they’d be fairly useful, because they deliberately exclude journals that do not meet their standards. And as the article notes, this year marks the first time that they have excluded citations involving retracted papers. 

But even Clarivate realizes that JIFs are not exactly a one-stop-shop for rating journal quality and impact. The criticisms of this number have been relentless over the years. Among these: it only looks back a couple of years, it can be (and has been) gamed by editors and publishers, journals with more “front matter” (news and editorial) have intrinsically higher JIFs as opposed to those that just publish research papers, and the actual impact factors have been inflating across the board for years.

So in answer to all this, the Journal Citation Indicator is a measure that Clarivate introduced a few years ago that attempts to normalize citation metrics across different fields, and is supposed to help even out differences in rates of publication and citation behavior. I’m not as familiar with its problems as I am those of the JIFs, but I’ve not doubt it has them, because I think that measuring journal impact is intrinsically very difficult, and especially when you try to make it apply equally across different disciplines. And very especially when you try to distill it down to a single number with two decimal places and no error bars.

Well, the Chemistry World article uses both of these, which is probably a good idea. So what do the metrics say is the Number One Most Impactful Journal for various subfields of chemistry? Brace yourselves:

Applied Chemistry: Chinese Journal of Catalysis (Elsevier) 

Analytical Chemistry: Trends in Environmental Analytical Chemistry (Elsevier)

Organic Chemistry: Carbohydrate Polymers (Elsevier). I especially love this entry.

Inorganic/Nuclear Chemistry: Coordination Chemistry Reviews (Elsevier)

Physical Chemistry: Nature Catalysis (Springer Nature) The overlap with the Applied winner is a mystery.

Electrochemistry: eScience (Keai)

Multidisciplinary Chemistry (non-review journals): Energy and Environmental Science (RSC)

Biochemical Research Methods: Nature Methods (Springer Nature)

Biochemistry and Molecular Biology: Signal Transduction and Targeted Therapy (Springer Nature)

These choices are. . .unusual. If you go through the full list of five for the above categories, things do not get more sensible. And to show you what I mean, I now present the top five in the Medicinal Chemistry category. Put down your beverages.

1. Medicinal Research Reviews (Wiley)

2. Natural Product Reports (RSC)

3. Chinese Herbal Medicines (Elsevier)

4. Phytomedicine (Elsevier)

5. Archives of Pharmacal Research (Pharmaceutical Society Korea)

Yes, that last one is spelled correctly. I had to check, because I had never heard of it in my entire life. Nor have I ever come across (to my knowledge) a single paper in Chinese Herbal Medicine, but I’ve only been a professional medicinal chemist for thirty-six years now, so I’m bound to have missed some stuff. But I tend to read tabloid rags like J. Med. Chem. and Nature Reviews Drug Discovery, so what do I know?

Now, many of the journals named in this and the other categories are still things I’ve heard of, of course, but come on: Carbohydrate Polymers as the most impactful journal in organic chemistry? How is anyone supposed to take these rankings seriously (or get any actual use out of them, for whatever purpose) with things like this in them? But that's not going to slow anyone down. I have no doubt the top journals on these lists are already advertising that fact, just like I have no doubt that the impressive citation-gamers at Elsevier are even now working out how to get more of their slop into next year's list than they have already.  Can't wait.

Journal Impact Nonsense

Aug. 14th, 2025 11:47 am
[syndicated profile] in_the_pipeline_feed

Here’s a revealing look at the state of the chemistry literature in 2025, and it’s not a very appealing sight. Chemistry World has listed the “Top Five” journals in a number of areas of the science as ranked by “Journal Impact Factor”.  and “Journal Citation Indicator”s. The JIFs are put out by Clarivate (Web of Science), and you’d think they’d be fairly useful, because they deliberately exclude journals that do not meet their standards. And as the article notes, this year marks the first time that they have excluded citations involving retracted papers. 

But even Clarivate realizes that JIFs are not exactly a one-stop-shop for rating journal quality and impact. The criticisms of this number have been relentless over the years. Among these: it only looks back a couple of years, it can be (and has been) gamed by editors and publishers, journals with more “front matter” (news and editorial) have intrinsically higher JIFs as opposed to those that just publish research papers, and the actual impact factors have been inflating across the board for years.

So in answer to all this, the Journal Citation Indicator is a measure that Clarivate introduced a few years ago that attempts to normalize citation metrics across different fields, and is supposed to help even out differences in rates of publication and citation behavior. I’m not as familiar with its problems as I am those of the JIFs, but I’ve not doubt it has them, because I think that measuring journal impact is intrinsically very difficult, and especially when you try to make it apply equally across different disciplines. And very especially when you try to distill it down to a single number with two decimal places and no error bars.

Well, the Chemistry World article uses both of these, which is probably a good idea. So what do the metrics say is the Number One Most Impactful Journal for various subfields of chemistry? Brace yourselves:

Applied Chemistry: Chinese Journal of Catalysis (Elsevier) 

Analytical Chemistry: Trends in Environmental Analytical Chemistry (Elsevier)

Organic Chemistry: Carbohydrate Polymers (Elsevier). I especially love this entry.

Inorganic/Nuclear Chemistry: Coordination Chemistry Reviews (Elsevier)

Physical Chemistry: Nature Catalysis (Springer Nature) The overlap with the Applied winner is a mystery.

Electrochemistry: eScience (Keai)

Multidisciplinary Chemistry (non-review journals): Energy and Environmental Science (RSC)

Biochemical Research Methods: Nature Methods (Springer Nature)

Biochemistry and Molecular Biology: Signal Transduction and Targeted Therapy (Springer Nature)

These choices are. . .unusual. If you go through the full list of five for the above categories, things do not get more sensible. And to show you what I mean, I now present the top five in the Medicinal Chemistry category. Put down your beverages.

1. Medicinal Research Reviews (Wiley)

2. Natural Product Reports (RSC)

3. Chinese Herbal Medicines (Elsevier)

4. Phytomedicine (Elsevier)

5. Archives of Pharmacal Research (Pharmaceutical Society Korea)

Yes, that last one is spelled correctly. I had to check, because I had never heard of it in my entire life. Nor have I ever come across (to my knowledge) a single paper in Chinese Herbal Medicine, but I’ve only been a professional medicinal chemist for thirty-six years now, so I’m bound to have missed some stuff. But I tend to read tabloid rags like J. Med. Chem. and Nature Reviews Drug Discovery, so what do I know?

Now, many of the journals named in this and the other categories are still things I’ve heard of, of course, but come on: Carbohydrate Polymers as the most impactful journal in organic chemistry? How is anyone supposed to take these rankings seriously (or get any actual use out of them, for whatever purpose) with things like this in them? But that's not going to slow anyone down. I have no doubt the top journals on these lists are already advertising that fact, just like I have no doubt that the impressive citation-gamers at Elsevier are even now working out how to get more of their slop into next year's list than they have already.  Can't wait.

[syndicated profile] littletinythings_feed

New comic!

Sorry for the delay! There's been some life plot twists lately, lots of stuff happening, and I need to catch up on comics now :D


such is life. enjoy!


(if you wanna help my tired wallet out, there's my Patreon, or Ko-Fi, or even itch.io if you'd like harley/ivy smut in exchange!)

finally it is tomato o'clock

Aug. 13th, 2025 10:40 pm
kaberett: Trans symbol with Swiss Army knife tools at other positions around the central circle. (Default)
[personal profile] kaberett

a tomato with a dark purple upper and red lower, speckled with gold

(This cultivar is called Blue Fire. I was very late getting my tomatoes started, but I am about to have lots of them and I am excited by this! Rainbow planting didn't quite work partly because none of the Yellow Pear-Shaped made it but largely because I lost track of which were my purple plum tomatoes and which were instead my orange, but -- I'm about to have A Bunch of ridiculous coloured tomatoes, and this is probably the showiest of the lot of 'em!)

The Frontiers of Structure

Aug. 13th, 2025 04:40 pm
[syndicated profile] in_the_pipeline_feed

Let’s have a look up near the state of the art in structure determination for challenging samples (small amounts, difficult-to-impossible crystallizations, and so on). This area has been advancing a lot in recent years, especially due to improvements in electron diffraction and cryo-electron microscopy techniques. We keep gaining more and more ability to see things that we never really could before.

For example, here’s a recent preprint from a team of Korean researchers who are pushing the size limits of cryo-EM. This 1995 paper is the standard reference for what those limits would be, and the one that’s really hard to escape is radiation damage. Anything that’s got enough oomph to go through/past/off of a sample and provide structural information afterwards is going to have enough of that oomph to start degrading it. Electron-based methods offer the best information-per-damage ratio, definitely less strenuous than X-rays. Neutrons can provide pretty interesting data, and the (rather heavy) damage associated with them can be partially mitigated by switching as much as possible to isotopes like deuterium that have a lower neutron capture cross section. But the world lacks any really bright-and-tight neutron sources as compared to what we can accomplish with electrons and X-rays.

At any rate, the estimate for cryo-EM is that you can work down to molecular weights of about 38,000, but going lower than that will be tough. It gets harder and harder to fit the data by just looking at particle after particle in all kinds of orientations without any underlying crystalline order - I suppose that advances in computation might help, but my impression is that so far they’ve mainly helped to realize such structure-solving in shorter and shorter times (and in a more and more automated fashion) without necessarily pushing the size limits much.

The record until now was 46,000, but this group pushes that down to a 2.32 Å structure of maltose-binding protein at 43 kDa, and a 3.04 Å structure of a human PLK-1 domain at 37 kDa. The former is good enough to spot the maltose in there and a network of associated water molecules, and the latter, while lower-resolution, is still good enough to model a bound small molecule ligand (onvansertib). I would assume that that 38 kDa limit has some error bars on it, but this is still very good to see. As the authors point out, RNA structures could be expected to go even further, because all those P atoms scatter electrons well. Watch for this limbo bar to be set even lower!

Over on the micro-electron diffraction side of things, this preprint from SUNY-Buffalo shows a very high-resolution structure obtained from spontaneously formed protein microcrystals of the protein crambin. These came straight from a drop of ethanolic solution during purification, but proved to be pretty useless for X-ray diffraction because of their size. But by shooting several dozen such crystals with a microED rig, the combined data set yielded a structure at 0.85 Å, which is mighty fine for a protein. Crambin has been a real proving ground for structure determination - x-ray synchrotron data have yielded a 0.45 Å structure, and neutron diffraction a 0.54 Å one. 

The authors note, though, that the great majority of microED structures have had a leg up: similar proteins or AlphaFold structures are used to get a handle on the solution from the data. Here, though, they wanted to see if they could solve this one ab initio without reference to anything save a five-residue helical fragment. You’re not always going to have a homologous structure that someone has already worked out, and AlphaFold (and similar software) will choke on proteins with unusual folds that they haven’t been trained on. 

Interestingly, the team found that (as mentioned) the spontaneously formed microcrystals weren’t worth as much in X-ray, not least because of rapid radiation-induced degradation. They could grow larger conventional crambin crystals which were just fine for XRD, but these were too thick for microED. They then crushed these into smaller pieces, hoping to produce a whole array of useful small crystals for electron work, but these turned out to be notably inferior to the ones that just fell out of the ethanol droplets (!) That led to the “serial crystallography” approach with multiple examples of the spontaneous crystals in combination. 

There were of course challenges - plate or needle-like crystals suffer from gaps in their data sets due to one or more thin dimensions and the angles that these force the majority of data to be collected at. But the authors show a useful workflow to mitigate this problem and provide anisotropy-corrected data (without introducing artifacts). And the fragment-based solution to the phasing problem is also usefully detailed and will be of interest to practitioners. The hope is that this will serve as a benchmark for the next generation of electron-based equipment and methods.

We grant you the rank of developer

Aug. 13th, 2025 01:02 pm
dorchadas: (Perfection)
[personal profile] dorchadas
Last night I was officially invited to become a developer on Cataclysm: Dark Days Ahead.

It's kind of funny because like 99% of my work is on the mods that ship with the game--I barely ever do anything on the core game itself. But because I'm so prolific--I've submitted the most PRs every year for three years running now--I elevated myself to one of the devs.

It's a free open-source game, so this position comes with no salary, no responsibilities, and no real cred except among fans of niche roguelike survival games. But nonetheless, all my work on the game got this for me!
dorchadas: (Chrono Trigger Campfire Scene)
[personal profile] dorchadas
You ever have a game come out of nowhere and just kind of...take over your gaming life?

In 2023 it happened with Cataclysm: Dark Days Ahead, an event which has repercussions to this day, considering how much hobby time I spend how on developing CDDA--we're about to release the 0.I version and I have top billing in the special thanks section--and this year it happened with Vintage Story. I can also blame that on CDDA, since on the development discord people would constantly talk about Vintage Story, about mining and smithing and clayforming and farming and being attacked by bears that lunged at them out of the underbrush. I watched the stories with fascination while I played Horizon's Gate (which I still plan to get back to), and around halfway through January I finally gave in, went to the dev website and bought Vintage Story, and downloaded it. I installed a few mods that came highly recommended like that one prevents a fire temperature from resetting on each item in the stack, loaded up the game, and was promptly greeted with a very familiar sight:

Vintage Story - Autumn River Valley Review
Admit it, you can hear the song.

Read more... )

etymology of the day

Aug. 12th, 2025 10:05 pm
kaberett: Trans symbol with Swiss Army knife tools at other positions around the central circle. (Default)
[personal profile] kaberett
Arancini. The small balls of risotto coated in breadcrumbs and then deep fried.

*Little oranges*.

This is not in any way an obscure or difficult to look up etymology, and yet somehow it was not until yesterday, on the tube, that I suddenly needed to look up from the book I was reading and *stare*.

(Earlier this week -- no, wait, late last week -- I was indexing a cookbook that included arancini. This week I am reading *The Land Where Lemons Grow*, because it's mostly a history of citrus cultivation in Italy with occasional recipes, so I wanted to read it Properly before indexing it and getting rid of it again. Apparently what it took for me to Have A Realisation was the combination in temporal proximity...)
[syndicated profile] oldnewthingraymond_feed

Posted by Raymond Chen

Last time, we worked out how we want a proposed “tracking pointer” to work. Now we can try implementing it.

One idea is to give each trackable object a list of all the tracking pointers that are tracking it, so it can update them as the object moves.

The tracking pointer is a pointer to a std::list node (in the form of an iterator to it). This works because list iterators are invalidated only when the list items itself is removed from the list. Other modifications to the list do not invalidate iterators. The node itself is just a pointer to the tracked object.

When a tracking pointer destructs, it unregisters itself from the list of active tracking pointers.

We start with the tracking pointer:

template<typename T>
using tracker_list = std::list<T*>;

template<typename T>
using tracker_node_ptr = tracker_list&ltT>::iterator;

template<typename T>
struct tracking_ptr
{
    ~tracking_ptr() {
        if (m_node->p) {
            m_node->p->trackable_object<T>::detach(this);
        }
    }

    ⟦ more to come ⟧

    T* get() const noexcept { return m_node->p; }

private:
    friend struct trackable_object<T>;

    tracking_ptr(tracker_node_ptr<T> const& node) noexcept :
        m_node(node) {}

    tracker_node_ptr<T> node;
};

One thing to watch out for is the case where the object that derives from trackable_object has its own detach method. We want the trackable_object‘s detach method, so we apply an explicit qualifier to find the correct detach method.

Meanwhile, this is what the tracked object has to do:

template<typename T>
struct trackable_object
{
    trackable_object() = default;
    ~trackable_object() { update_trackers(nullptr); }

    // Copy constructor: Separate trackable object
    trackable_object(const trackable_object&) :
        trackable_object() {}

    // Move constructor: Transfers trackers
    trackable_object(trackable_object&& other) :
        m_trackers(std::move(other.m_trackers)) {
        update_trackers(outer());
    }

    ⟦ more to come ⟧

    tracking_ptr<T> track() {
        return tracking_ptr<T>(
            m_trackers.push_back(outer()));
    }

private:
    friend struct tracking_ptr<T>;

    tracker_list<T> m_trackers;

    T* outer() noexcept
    { return static_cast<T*>(this); }

    void update_trackers(T* p) noexcept
    {
        for (auto& node : m_trackers) {
            node = p;
        }
    }

    void detach(tracking_ptr<T>* ptr) noexcept
    {
        m_trackers.erase(ptr->m_it);
    }
};

When a trackable object is constructed normally, we do nothing special, so it has an empty list of trackers.

When a trackable object is copied, we override the implicit copy constructor (which would by default copy the list) by telling it that we want to construct it fresh, which means that the tracking list is empty. The copy has a separate trackable lifetime.

When a trackable object is moved, then the new object adopts all the tracking pointers that had tracked the old object by moving them into its own m_trackers. It then updates all of those tracking pointers to point to the new object rather than the old object.

To create a new tracking pointer, we add a node to the linked list (which holds a pointer to the tracked object) and wrap that node inside a tracking_ptr.

When a trackable object destructs, we update all of the tracking pointers so that they produce nullptr. This lets them know that the tracking pointer has expired.

But wait, that’s not going to work: The tracking pointer holds an iterator to the linked list node, but the node is about to be destructed when the list destructs.

Okay, so our tracking pointer can’t be a list node, because those disappear when the list destructs. The std::list does not have an extract methods, so there’s no way to extend a node’s lifetime beyond that of the list to which it belongs.

We’ll continue the story next time.

The post Thoughts on creating a tracking pointer class, part 2: Using a <CODE>std::list</CODE> appeared first on The Old New Thing.

[syndicated profile] oldnewthingraymond_feed

Posted by Raymond Chen

Suppose you have a C++ object, and you want to be able to create a “tracking pointer” that points to the object and follows it as it moves.

// Concept art - final product may differ in significant ways

struct Widget : trackable_object<Widget>
{
    ⟦ ... ⟧
};

Widget w;

tracking_ptr<Widget> p(w);

assert(p.get() == &w);
p->Toggle(); // same as w.Toggle()

Widget moved = std::move(w);
assert(p.get() == &moved);
p->Toggle(); // same as moved.Toggle()

The first thing to note is that this is inherently a single-threaded concept. You can’t do this in a multithreaded way because you have no way to prevent an object from moving while you are accessing it.

Okay, so let’s assume that all uses (including destruction) of the tracking_ptr and the tracked object are restricted to a single thread.

It’s clear that this will require cooperation from the tracked object, so it can update all the existing tracking pointers when it is moved-from.

Before we come up with an implementation, let’s figure out what the rules are.

When an object is constructed from scratch, there are no initial tracking pointers to it.

When an object is destructed, then all pointers that were tracking it become expired.

When an object is copy-constructed from another object, there are no initial tracking pointers to it. Any tracking pointers that point to the source object still point to the source object.

When an object is move-constructed from another object, any tracking pointers that pointed to the source object now track the new object. Nothing is tracking the source object any more.

When an object is copy-assigned, then any pointers that were tracking the source object continue to track the source object. But what about any pointers that were tracking the destination object? Interesting question. Let’s keep going and see what other questions come up.

When an object is move-assigned, any pointers that were tracking the source object now track the destination object, and the source object is now untracked. But what about pointers that were tracking the destination object? It’s that same question again.

How you choose to resolve the question about pointers that were tracking an overwritten object depends on how you conceptualize the assignment operator. One way of thinking about it is that the assignment operator transfers the information to the destination object, but the destination object retains its identity. Somebody moved all their furniture into your apartment and made it look just like their old apartment. But it’s still your apartment!

Another way of thinking about it is that the assignment operator also obliterates the old identity, as if the assignment was just an optimized version of “destroy the destination object, and then move-construct a new object in its place.” If somebody take your bag of groceries and throws out all your groceries and puts their groceries in it, then it’s not really your bag of groceries any more. The important thing about the bag of groceries was not the bag, but the groceries!

The original problem formulation was to “follow an object as it moves”, but that is technically nonsense in C++. In C++, objects don’t move. Their contents move. Since we are tracking the contents on move-construction, it seems that the intent was to track the contents and not the object. So if new contents move into an existing object, the tracking pointers for the old contents should expire, since those contents are now gone. That’s the model we’ll use, though we’ll make notes about how we could implement the alternate interpretation.

Bonus reading: Providing a stable memory address, a similar problem, but for the special case where there is only one tracking pointer.

Bonus chatter: The swap pattern sort of leans toward breaking any pre-existing tracking pointers to a moved-to object.

Widget widget; // leftover widget lying around
widget = std::move(a);
a = std::move(b);
b = std::move(widget);

This pattern takes a pre-existing Widget object, say one left over from an earlier step, and uses it as a temporary object in the swap pattern. If any leftover tracking pointers to widget continued to track it after a was moved into it, then those tracking pointers are now accidentally tracking the unrelated Widget b.

Now, that was a somewhat weak argument for orphaning tracking pointers to a moved-into object, but a much stronger case can be made by looking at methods like std::vector::erase: If you have a vector v of, say, two trackable objects, and then you do v.erase(v.begin()); to erase the first element, this operation accomplishes the erasure by move-assigning the second element over the first element. But presumably you want erasing an element to orphan any tracking pointers to it, rather than having them start tracking the object the got moved into its reused memory.

The post Thoughts on creating a tracking pointer class, part 1: Concept art appeared first on The Old New Thing.

[syndicated profile] oldnewthingraymond_feed

Posted by Raymond Chen

A customer wanted to understand the conditions under which the Read­File and Write­File functions would fail to transfer all of the bytes, and how to detect that this has occurred.

The obvious reason why the Read­File functions would fail to transfer all the bytes is if there aren’t that many bytes to read. For a disk file, this typically happens because you are reading past the end of the file. You can also get this for other types of file handles: For a pipe in nonblocking mode, there may not be enough bytes in the pipe. Or you might have a message pipe, and the message is smaller than the size of your buffer. Or you might be accessing a device, and the device doesn’t have all the bytes available.

Similarly, the obvious reason why the Write­File function would fail to transfer all the bytes is if there isn’t enough room for all the bytes. For a disk file, the disk might be full, or you have reached your disk quota. For a pipe in nonblocking mode, a write may be short if there is not enough buffer space in the pipe to hold all the requested data. In all of these cases, you can detect the short write by checking whether the actual number of bytes written is less than the number of bytes requested.

If the number of bytes actually transferred is nonzero, then the Read­File and Write­File functions will return success, but the actual number of bytes transferred will be less than the number of bytes requested.

The post Under what conditions could a <CODE>Read­File</CODE> or <CODE>Write­File</CODE> fail to transfer all of the bytes, and how do I detect that? appeared first on The Old New Thing.

Stretch

Aug. 12th, 2025 03:52 pm
[syndicated profile] frontendmasters_feed

Posted by Chris Coyier

Did you know you can do height: stretch now in CSS? Works for width too.

Dave Rupert

The other day [Dave] shared a link to the new stretch keyword in CSS – and I saw a lot of questions about how it’s different from 100% (or 100vh when doing full-screen layouts). So I made a quick video to show how these all work!

Miriam Suzanne

[syndicated profile] in_the_pipeline_feed

Let’s talk about this paper, which has made quite a splash. The authors present data for the hypothesis that one of the causes of Alzheimer’s disease is lithium deficiency, and I have to say, I had not run across that one before. But I am alway ready to hear about new approaches in Alzheimer’s, which really, really needs some and has for many years now. So how well does this idea hold up? The next couple of paragraphs are some analytical chemistry background, then we'll get into the biology.

The work starts off by using ICP-MS (inductively coupled plasma mass spectroscopy) to measure the levels of 27 different metallic elements in the brain, and that’s fine. ICP-MS is just what people use for trace metals analysis. The business end of this instrument is a set of quartz tubes where argon gas is pass through a powerful induction coil that operated at a ridiculously high frequency (millions of cycles per second). An electric spark starts things off by adding some free electrons into this gas stream, and the magnetic field of the induction coil sends this violently whipping back and forth at that high frequency. As these whack into more argon atoms, more electrons can be released from them, and these now join the induction party, releasing still more electrons from the argon atoms, and so on. You take that up to the point where the rate of electron production is balanced out by the rate of recombination (argon atoms picking up free electrons and getting back to neutral), and that plasma state occurs at around 10,000 degrees.

As you’d imagine, molecules in the sample get ripped to pieces under such conditions, and the resulting atoms get ionized in turn, even though they’re typically flowing through a slightly cooler zone in the middle of the plasma flame. You can adjust the plasma temperature for the best signal/noise, which generally means tuning things for the first (single-charged) ions with less of the multiply-charged ones for the element of interest. Most everything is easier to ionize than argon! The flow takes these ions into the mass spec portion of the instrument, and calibrating with reference standards lets you read off the concentrations of each ion. You need to be mindful of the possibility of contamination of your sample, because ICP-MS ionizes and spares not, but the work flows for this stuff are well established, and this is the instrumentation used for suspected cases of heavy metal poisoning and the like.

In this work, the authors compare brain tissue samples from people with no signs of Alzheimer’s to those with a definite diagnosis of mild cognitive impairment (MCI) and to samples from full-blown Alzheimer’s disease (AD) patients. Inside these they compare samples from the prefrontal cortex (PFC) region, which is heavily affected in the disease, to samples from back in the cerebellum, which is not. In all of these cases they also look at metal levels on a tissue-to-serum ratio basis, checking for discrepancies.

And lithium appears to be the only metal that really jumps out as having strange concentrations. This will come as a surprise to those of us who are old enough to remember the aluminum-causes-Alzheimer’s headlines from decades past, but given the awful solubility of aluminum species under physiological conditions that story had an uphill climb to plausibility anyway. But no one has ever complained about the solubility of lithium ions. It also helps put to rest some other metal-toxicity theories that have cropped up over the years, many of which were kept going due to large-error-bar measurement techniques. It’s worth noting that several metals do have changes in tissue/serum ratios in Alzheimer’s tissues as compared to nonimpaired controls (lead, copper, arsenic, vanadium and zinc in particular), but of these only lithium shows up as a statistical oddity in the mildly impaired group as well (and it is way off in the AD samples). You can find these numbers in the paper’s Supplementary Information, Table 1.

Li appears to be significantly reduced in the PFC samples of both the MCI and AD cohorts. Zooming in closer on a histopathological level, doing the ICP-MS analysis with a laser absorption sampling front end (where you aim small energetic laser spots at different regions of a sample) shows that the lithium seems to be piling up in the Alzheimer’s plaques themselves, an effect that gets stronger as you go from the mild-impairment samples to the full AD ones. That ties in with a great deal of literature suggesting metal ion sequestration in the plaques (which is where some of the previous metal theories had their start). So the lower lithium levels are especially noticeable in the non-plaque tissue workup, which is after all the more soluble fraction (and explains why the initial readouts were indeed for low Li levels). What’s more, low lithium levels in the non-plaque tissue seem to correlate significantly with cognitive function scores of the patients themselves, particularly episodic memory (Supplementary Information, Table 2).

Putting mice on a deliberate low-lithium diet caused some very interesting problems in the brain tissue. Animals bred with mutations that make them susceptible to amyloid or tau deposition show notably increased amounts of both on low-Li diets, and even wild-type mice show increased levels of beta-amyloid 1-42. Both the mutant lines and wild-type mice showed significant memory deficits in cognitive tests (such as the good ol’ Morris water maze) on the low-Li diets as compared to normally fed counterparts. The paper has an extended discussion of the transcriptional effects that ensue as well, and this particularly implicates elevation of the levels of the kinase GSK3-beta under Li deficiency. That one will be quite familiar to Alzheimer’s research aficionados, as it has been implicated by several other lines of evidence.

An intriguing part of the paper concerns lithium supplementation (as opposed to deliberate lithium deficiencies). The team settled on lithium orotate after measuring the conductivities of a whole list of lithium salts and finding that this one seemed to be the least-ionized of the lot and bound the least to AD plaques in vitro. Indeed, a head-to-head comparison of lithium supplementation in the drinking water of the mutant mice mentioned above showed that when they were given lithium carbonate (the Li salt form used to treat some types of depression) versus lithium orotate that the lithium in the lithium carbonate ended up sequestered in plaques to a much greater degree despite very similar Li plasma concentration for each. Corresponding Li levels in the non-plaque tissue were more elevated in the Li orotate group.

And here’s a real kicker: such lithium orotate supplementation in the 3xTg mutant mice almost completely prevented amyloid plaque formation and accumulation of phosphorylated tau in their brains, whereas supplementation with lithium carbonate (or sodium orotate) had no real effects. A similar effect of lower plaque burdens could be seen in both mutant lines even when started in mice at an age where plaques were already forming. Transcription analysis of these mice showed a whole range of changes in genes known to be associated with memory and neuronal function. And what’s more, these results carried over to wild-type mice: the memory deficits associated with normal aging in these mice were “largely reversed” under lithium orotate supplementation. These effects extend down to the level of analysis of neurons, microglia, and oligodendrocytes at a histopathological and transcriptional level.

I will confess that I did not expect to be as impressed by this paper as I ended up being. There’s a lot of hand-waving in the Alzheimer’s disease hypothesis field, but there seems to be a lot of solid research in here.  This is some of the most interesting work I’ve read in the area for a long time, and I hope it stimulates a lot of effort replicating and extending its findings. The connections (and differences) between lithium deficiency and supplementation are a particular highlight, and as a 63 year old, I would very much like to see some toxicology work commence on lithium orotate as quickly as possible!

[syndicated profile] frontendmasters_feed

Posted by Chris Coyier

It’s an established Good Idea™ that building digital interfaces of any kind is best done by building components and then piecing together the interfaces from those components. This can be sliced and diced a lot of ways, but generally: a component is a reasonable independent peice of what that interface needs. When it comes to websites, things like a header, footer, grid, card, button, etc. A design system, as it were. See concepts like Atomic Design.

A nice by-product of the Rise of JavaScript Frameworks is that they solidified this idea. React, Vue, Svelte… you work with them by building components and composing them together. That’s their point.

I like the idea of userland tools like JavaScript frameworks pushing the boundaries, then the web evolving to not require those tools. So can we pull off a component-structured project without any build process or framework? We’re close.

This is an example of how I’d like to structure a website:

Those components (in our simple example, a button, card, and header) are all:

  • Inside a components folder, each with their own named folder (organized!)
  • Have a file for their template and logic
  • Have a separate CSS file

So like this:

This is the kind of logical grouping and isolation that makes sense to me in creating a component architecture. A more complex setup might have components with, say, .graphql files, their own images, tests, etc. The co-location is key to sanity.

Our components are JavaScript here because there is no concept of HTML includes yet, but also that web components are a generally nice way to handle this anyway, and they require JavaScript instantiation. We don’t need any framework to use web components (hence “vanilla app architecture”), but in the demo, I’ll use Lit (just a light helper library).

How do we integrate those component.js and component.css files? That question has long lingered for me. Bundlers can do this job. For instance, webpack just invented their own way of dealing with it. If you type import "./card.css"; in a JavaScript file that is processed by webpack, it’ll just know what you mean and ensure that CSS is loaded on the page somehow. Likewise, Vite just does it’s own thing:

Importing .css files will inject its content to the page via a <style> tag with HMR support.

That’s great and all, but we’re trying to go vanilla here. No bundler/build process. How do we import CSS like that?

Enter CSS Module Scripts

Good news: JavaScript has an answer to that question we just asked, and it’s called CSS Module Scripts.

Bad news: Only Chrome supports it. (WebKit bug; Firefox bug)

Google’s blog post on them (linked above) is one of the few pieces of information available about them, and it contains some incorrect syntax, so be careful there. It should look like this (the with keyword is correct, if you see assert that’s old/wrong):

import sheet from './styles.css' with { type: 'css' };

When you do that (in a supporting browser), sheet becomes a “Constructable Stylesheet” and then you can use it to, in our case, apply it to the Shadow Root of a web component.

class MyComponent extends HTMLElement {
  constructor() {
    super(); 
    const shadowRoot = this.attachShadow({ mode: 'open' });
    shadowRoot.adoptedStyleSheets = [sheet];
  }
  
  ...

These “import attributes,” as I think they are called, can do other things. It’s much better supported to import JSON this way, like:

import sheet from './data.json' with { type: 'json' };

Lit

Using Lit, applying the styleheet (or, “the constructable stylesheet, as imported via CSS module scripts” to do the whole mouthful) is like this:

import {html, LitElement} from 'lit';
import sheet from './button.css' with { type: 'css' };

class My Component extends LitElement {
  static styles = [sheet];

  ...

Demo

vital functions

Aug. 10th, 2025 10:43 pm
kaberett: Trans symbol with Swiss Army knife tools at other positions around the central circle. (Default)
[personal profile] kaberett

Reading. Allie Brosh, Jeannie Di Bon, Helena Attlee, Louis MacNeice, friends misc. )

... and several of the magazines that have been sat around causing Guilt and a sense of Obligation, subsequent to which I have happily recycled them. Favourite fact from the three so far: Garden Organic/the Heritage Seed Library are trialling using tuning forks to pollinate their tomato crops! ( Facebook | Instagram )

Bonus: sifting through a pile of notebooks etc to try to work out who the hell they belong to, mostly salvaged from the pile that was due to go out to event-freecycle on the basis that SURELY I could do something useful with them if, you know, I sat down with them at a time that wasn't in a field under Significant time pressure while Very tired. And I could! One and a half remain unidentified (I say "half" because We're Working On It).

Writing. A lot of lost property e-mails.

Cooking. One new recipe from East: paneer, spinach and tomato salad, accompanied by the herbed naan from the Leiths How to Cook Bread book (this is probably on my To Cook Through list). I was into this!

Also vaghareli makai ("spiced Indian corn") by way of David Lebovitz, and a slightly underwhelming lemony fennel and broccoli pasta (significantly improved by the addition of pine nuts).

Eating. STRAWBERRIES. Blackberries. Local plums are starting to be ripe!

Exploring. Poked around the green belt a bit to see how the plums were doing! And I think that's most of it?

A very brief poke around the entrance to the Pimp Hall Nature Reserve following a successful drop-off of Objects to the adjacent Household Waste Recycling Centre; tragically the signs on the gates claimed that they'd be locked at 4 p.m., which we had not quite anticipated, and we only reached them at 3.58. Next time, perhaps!

Creating. Hmm. Does sitting around knolling for the purposes of the big lost property post count? I think it probably does; certainly while the photos still aren't good (am I contemplating a lightbox and a tripod of some kind of this specific terrible hobby? to my slight horror, I kind of am...) the arrangements are getting much easier to parse visually, I discovered upon going back through a bunch of them, which I am pleased about.

Growing. Found a surprise pocketful of dried Sugar Magnolia pods, so I am definitely in the black when it comes to number of seeds for next year, which is a pleasant surprise!

Stressed about stress tests

Aug. 10th, 2025 11:40 am
dorchadas: (FFX-2 Yuna Gravity Release Me)
[personal profile] dorchadas
More spontaneous restarts with WHEA errors (could be caused by...a ton of things).

So I'm sitting here running some diagnostics and seeing if I can fix the problem. Hopefully I don't need a new computer.
dorchadas: (Sawa-chan headbanging)
[personal profile] dorchadas
[instagram.com profile] sashagee and I went out to an event!

2025-08-07 - Wamono Splash image

Ever since Murasaki closed last year, I've been glad that I got a chance to take [instagram.com profile] sashagee there to see Van Paugam spin one of his sets before the end, and I've been on the lookout for more chances to see him. The people at the Anime Club mentioned this event, hosted by the Japanese Cultural Center in Kamehachi, the first sushi bar in Chicago, so I got tickets, yesterday morning [instagram.com profile] sashagee drove Laila out to spend some time at the grandparents--not a problem, Laila has been clamoring to see grandma and grandpa basically all week--and in the evening we got on the L and headed down to Kamehachi. The hostess saw how we were dressed and immediately asked us if we were there for the event and then ushered us upstairs.

The music schedule was Japanese vinyl from the 70s, 80s, and 90s, and we arrived during the 70s section, took our bentō and out complimentary drinks, and sat down on one of the high tables.

It was a lot of fun! [instagram.com profile] sashagee, inveterate gacha fan that she is, bought a mystery box and then when Van Paugam offered another mystery box to the couple with the best dancing, we went out on to the dance floor and won the box! We got a lot of dancing in--though not as much as one guy, who spent basically the entire evening on the dance floor even when he was the only one there--[instagram.com profile] sashagee got to hear her favorite city pop song, Mayonaka no Door -stay with me, when the Hits section came on at the very end, and we chatted with people and had a lovely time. They even promised to do another event, though since we were in the slightly closed-in upstairs of Kamehachi and it was kind of hot, Van Paugam mentioned it would probably not be until next year to avoid the heat from causing any more problems.

I need to keep better tabs on his sets. The only problem is that they're mostly only announced a short time beforehand, and having Laila means we can't exactly drop anything and head out on a moment's notice. But right now we almost never get a date night, and that's definitely not helping things. It'll be better when Laila's speech is better, because right now [instagram.com profile] sashagee is worried that if we got a babysitter and something happened, Laila wouldn't be able to tell us what was wrong. So we need to wait a few months and see if her speech improves, and then we can re-evaluate.
dorchadas: (Awake in the Night)
[personal profile] dorchadas
That happens so incredibly rarely nowadays that I had to write it down.

It was basically inside a first-person shooter video game, in that I was basically a floating camera with a gun (as the saying goes) and almost never had any real sense of my body or its physical existence. The dream took place inside a sprawling haunted house in a way that my waking mind recognizes as obviously a product of video game considerations (like the giant stepped courtyard with basically no furniture and a thirty-foot wall separating it from the outside) but which seemed perfectly reasonable inside the dream. There was what we would call a hub area with several other people, but I can't remember anything about them other than their existence.

Everything beyond that was extremely gamey. In the dream I was exploring the corridors, fighting enemies, picking up weapons, and so on. The only weapons I remember are some kind of staff thing that required charging up attacks before being able to get off a shot and the trusty v1.0 Booted Foot. Enemies I remember a bit more variety: there were floating balls of light that zapped me, a gray faceless mannequin in a black coat that grabbed me and slowed me down (having this happen was basically the only time I had any sensation of my body), a blue floating headless shadow in a thick cloak, and a giant dog but one which looked more like the faehounds from Final Fantasy XIV. I went around exploring, fought enemies, went back to the hub area and healed up and talked with the NPCs, you know, like a game. And eventually in that courtyard a mannequin grabbed me and I guess that sensation of actually having a body shocked me out of the dream because that's when I woke up.

This is obviously inspired by me playing Infra Arcana lately.

Profile

mathemagicalschema: A blonde-haired boy asleep on an asteroid next to a flower. (Default)
schema

January 2019

S M T W T F S
   12345
6789101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

  • Style: Midnight for Ciel by nornoriel

Expand Cut Tags

No cut tags
Page generated Aug. 15th, 2025 01:26 pm
Powered by Dreamwidth Studios