I used to gather some “cool stuff from the Internet” a long, long time ago on my French blog. Since then, that sort of “content gathering” has mostly been moved to social networks; let’s see if I can put that back in blog form instead. This could actually be a nice Friday post 🙂
Modern Mrs Darcy’s 2019 Reading Challenge – I discovered MMD late last year, and I quite like what she does, even though we don’t necessarily have much in common (so far?) literature-wise. The Reading Challenge seems pretty fun, so I’ll try to tick the boxes this year.
To Wash It All Away [text, PDF] – an hilarious piece by James Mickens (yeah, the same one as in the video of the first link) about the terrible, terrible state of web technologies. It’s awfully mean, but delightfully and well-writtenly so.
Gygax – 2nd Edition Review [text, music] – a review of one of my favorite albums this year – and actually the review that made me listen to it in the first place. GUYS: IT’S D&D METAL. IT’S BRILLIANT. The only annoying thing is that it tends to make me dance at my desk more often than other albums.
The Hot New Asset Class Is Lego Sets [text] – if you need an excuse to buy LEGO, you can just say it’s a way to diversify your portfolio, ‘cuz Bloomberg said so. Or you can just buy LEGO for the sake of it.
All right, I think I explained enough algorithmic complexity (part 1 and part 2) to start with a nice piece, which is to explain what is behind the “Is P equal to NP?” question – also called “P vs NP” problem.
The “P vs NP” problem is one of the most famous open problems, if not the most famous. It’s also part of the Millenium Prize problems, a series of 7 problems stated in 2000: anyone solving one of these problems gets awarded one million dollars. Only one of these problems has been solved, the Poincaré conjecture, proven by Grigori Perelman. He was awarded the Fields medal (roughly equivalent to a Nobel Prize in mathematics) for it, as well as the aforementioned million dollars; he declined both.
But enough history, let’s get into it. P and NP are called “complexity classes”. A complexity class is a set of problems that have common properties. We consider problems (for instance “can I go from point A to point B in my graph with 15 steps or less?”) and to put them in little boxes depending on their properties, in particularity their worst case time complexity (how much time do I need to solve them) and their worst case space complexity (how much memory do I need to solve them).
I explained in the algorithmic complexity blog posts what it meant for an algorithm to run in a given time. Saying that a problem can be/is solved in a given time means that we know how to solve it in that time, which means we have an algorithm that runs in that time and returns the correct solution. To go back to my previous examples, we saw that it was possible to sort a set of elements (books, or other elements) in time . It so happens that, in classical computation models, we can’t do better than . We say that the complexity of sorting is , and we also say that we can sort elements in polynomial time.
A polynomial time algorithm is an algorithm that finishes with a number of steps that is less than , where is the size of the input and an arbitrary number (including very large numbers, as long as they do not depend on ). The name comes from the fact that functions such as , , and are called polynomial functions. Since I can sort elements in time , which is smaller than , sorting is solved in polynomial time. It would also work if I could only sort elements in time , that would also be polynomial. The nice thing with polynomials is that they combine very well. If I make two polynomial operations, I’m still in polynomial time. If I make a polynomial number of polynomial operations, I’m still in polynomial time. The polynomial gets “bigger” (for instance, it goes from to ), but it stays a polynomial.
Now, I need to explain the difference between a problem and an instance of a problem – because I kind of need that level of precision 🙂 A problem regroups all the instances of a problem. If I say “I want to sort my bookshelf”, it’s an instance of the problem “I want to sort an arbitrary bookshelf”. If I’m looking at the length shortest path between two points on a given graph (for example a subway map), it’s an instance of the problem “length of shortest path in a graph”, where we consider all arbitrary graphs of arbitrary size. The problem is the “general concept”, the instance is a “concrete example of the general problem”.
The complexity class P contains all the “decision” problems that can be solved in polynomial time. A decision problem is a problem that can be answered by yes or no. It can seem like a huge restriction: in practice, there are sometimes way to massage the problem so that it can get in that category. Instead of asking for “the length of the shortest path” (asking for the value), I can ask if there is “a path of length less than X” and test that on various X values until I have an answer. If I can do that in a polynomial number of queries (and I can do that for the shortest path question), and if the decision problem can be solved in polynomial time, then the corresponding “value” problem can also be solved in polynomial time. As for an instance of that shortest path decision problem, it can be “considering the map of the Parisian subway, is there a path going from La Motte Piquet Grenelle to Belleville that goes through less than 20 stations?” (the answer is yes) or “in less than 10 stations?” (I think the answer is no).
Let me give another type of a decision problem: graph colorability. I like these kind of examples because I can make some drawings and they are quite easy to explain. Pick a graph, that is to say a bunch of points (vertices) connected by lines (edges). We want to color the vertices with a “proper coloring”: a coloring such that two vertices that are connected by a single edge do not have the same color. The graph colorability problems are problems such as “can I properly color this graph with 2, 3, 5, 12 colors?”. The “value” problem associated to the decision problem is to ask what is the minimum number of colors that I need to color the graph under these constraints.
Let’s go for a few examples – instances of the problem 🙂
A “triangle” graph (three vertices connected with three edges) cannot be colored with only two colors, I need three:
On the other hand, a “square-shaped” graph (four vertices connected as a square by four edges) can be colored with two colors only:
There are graphs with a very large number of vertices and edges that can be colored with only two colors, as long as they follow that type of structure:
And I can have graphs that require a very large number of colors (one per vertex!) if all the vertices are connected to one another, like this:
And this is where it becomes interesting. We know how to answer in polynomial time (where is of the number of vertices of the graph) to the question “Can this graph be colored with two colors?” for any graph. To decide that, I color an arbitrary vertex of the graph in blue. Then I color all of its neighbors in red – because since the first one is blue, all of its neighbors must be red, otherwise we violate the constraint that no two connected vertices can have the same color. We try to color all the neighbors of the red vertices in blue, and so on. If we manage to color all the vertices with this algorithm, the graph can be colored with two colors – since we just did it! Otherwise, it’s because a vertex has a neighbor that constrains it to be blue (because the neighbor is red) and a neighbor that constrains it to be red (because the neighbor is blue). It is not necessarily obvious to see that it means that the graph cannot be colored with two colors, but it’s actually the case.
I claim that this algorithm is running in polynomial time: why is that the case? The algorithm is, roughly, traversing all the vertices in a certain order and coloring them as it goes; the vertices are only visited once; before coloring a vertex, we check against all of its neighbors, which in the worst case all the other vertices. I hope you can convince yourself that, if we do at most (number of vertices we traverse) times comparisons (maximum number of neighbors for a given vertex), we do at most operations, and the algorithm is polynomial. I don’t want to give much more details here because it’s not the main topic of my post, but if you want more details, ping me in the comments and I’ll try to explain better.
Now, for the question “Can this graph be colored with three colors?”, well… nobody has yet found a polynomial algorithm that allows us to answer the question for any instance of the problem, that is to say for any graph. And, for reasons I’ll explain in a future post, if you find a (correct!) algorithm that allows to answer that question in polynomial time, there’s a fair chance that you get famous, that you get some hate from the cryptography people, and that you win one million dollars. Interesting, isn’t it?
The other interesting thing is that, if I give you a graph that is already colored, and that I tell you “I colored this graph with three colors”, you can check, in polynomial time, that I’m not trying to scam you. You just look at all the edges one after the other and you check that both vertices of the edge are colored with different colors, and you check that there are only three colors on the graph. Easy. And polynomial.
That type of “easily checkable” problems is the NP complexity class. Without giving the formal definition, here’s the idea: a decision problem is in the NP complexity class if, for all instances for which I can answer “yes”, there exists a “proof” that allows me to check that “yes” in polynomial time. This “proof” allows me to answer “I bet you can’t!” by “well, see, I can color that way, it works, that proves that I can do that with three colors” – that is, if the graph is indeed colorable with 3 colors. Note here that I’m not saying anything about how to get that proof – just that if I have it, I can check that it is correct. I also do not say anything about what happens when the instance cannot be colored with three colors. One of the reasons is that it’s often more difficult to prove that something is impossible than to prove that it is possible. I can prove that something is possible by doing it; if I can’t manage to do something, it only proves that I can’t do it (but maybe someone else could).
P is the set of decision problems for which I can answer “yes” or “no” in polynomial time for all instances
NP is the set of decision problems for which, for each “yes” instance, I can get convinced in polynomial time that it is indeed the case if someone provides me with a proof that it is the case.
The next remark is that problems that are in P are also in NP, because if I can answer myself “yes” or “no” in polynomial time, then I can get convinced in polynomial time that the answer is “yes” if it is the case (I just have to run the polynomial time algorithm that answers “yes” or “no”, and to check that it answers “yes”).
The (literally) one-million-dollar question is to know whether all the problems that are in NP are also in P. Informally, does “I can see easily (i.e. in polynomial time) that a problem has a ‘yes’ answer, if I’m provided with the proof” also mean that “I can easily solve that problem”? If that is the case, then all the problems of NP are in P, and since all the problems of P are already in NP, then the P and NP classes contain exactly the same problems, which means that P = NP. If it’s not the case, then there are problems of NP that are not in P, and so P ≠ NP.
The vast majority of maths people think that P ≠ NP, but nobody managed to prove that yet – and many people try.
It would be very, very, very surprising for all these people if someone proved that P = NP. It would probably have pretty big consequences, because that would mean that we have a chance to solve problems that we currently consider as “hard” in “acceptable” times. A fair amount of the current cryptographic operations is based on the fact, not that it is “impossible” to do some operations, but that it’s “hard” to do them, that is to say that we do not know a fast algorithm to do them. In the optimistic case, proving that P = NP would probably not break everything immediately (because it would probably be fairly difficult to apply and that would take time), but we may want to hurry finding a solution. There are a few crypto things that do not rely on the hypothesis that P ≠ NP, so all is not lost either 😉
And the last fun thing is that, to prove that P = NP, it is enough to find a polynomial time algorithm for one of the “NP-hard” problems – of which I’ll talk in a future post, because this one is starting to be quite long. The colorability with three colors is one of these NP-hard problems.
I personally find utterly fascinating that a problem which is so “easy” to get an idea about have such large implications when it comes to its resolution. And I hope that, after you read what I just wrote, you can at least understand, if not share, my fascination 🙂
The theme for the second week of the 52Frames project was “Rule of Thirds“. I’ll admit my motivation for this theme was not very high – I considered going the “cheeky” route and take a picture of a third of a pie, but eh. And since it’s the second week, NOT submitting is inconceivable 😉
I knew motivation was going to be low, so when I went for lunch on Thursday and ran into that very pretty snowy tree, I took a bit of time to frame it within the constraints of said rule of thirds with my phone camera, thinking I’d have a backup shot in all cases.
I spent a bit of time doing some post-processing – cleaning up a few spots, removing a piece of road that was a bit ugly, and generally speaking bending the reality a little bit to get a better picture. Re-considering it right now, I’m thinking that maybe I should have removed more snow in the middle and compressed a bit the distances more – so that I would have better “horizontal” thirds.
I can’t say I’m particularly proud of that one – I do find it quite boring; but it’s submitted, it’s within the constraints of the challenge, and that’s all that matters!
I’m quite fascinated by the working of the human brain. Not by how it works – that, I don’t know much about – but by the fact that it works at all. The whole concept of being able to read and write, for instance, still amazes me. And I do spend a fair amount of time thinking about how I think, how to improve how I think, or how to optimize what I want to learn so that it matches my way of thinking. And in all of that thinking, I redefined for myself what I mean by “comprehension”.
My previous definition of comprehension
It often happens that I moan about the fact that I don’t understand things as fast as I used to; I’m wondering how much of that is the fact that I’m demanding more of myself. There was a time where my definition “understanding” was “what you’re saying looks logical, I can see the logical steps of what you’re doing at the blackboard, and I see roughly what you’re doing”. I also have some painful memories of episodes such as the following:
“Here, you should read this article. − OK. <a few hours later> − There, done! − Already? − Well, yeah… I’m a fast reader… − And you understood everything? − Well… yeah… − Including why <obscure but probably profound point of the article>? <blank look, sigh and explanations> (not by me, the explanations).
I was utterly convinced to have understood, before it was proven to me that I missed a fair amount of things. Since then, I learnt a few things.
What I learnt about comprehension
The first thing I learnt, is that “vaguely understand” is not “comprehend”, or at least not at my (current) level of personal requirements. “Vaguely understanding” is the first step. It can also be the last step, if it’s on a topic for which I can/want to do with superficial knowledge. I probably gained a bit of modesty, and I probably say way more often that I only have a vague idea about some topics.
The second thing is that comprehension does take time. Today, I believe I need three to four reads of a research paper (on a topic I know) to have a “decent” comprehension of it. Below that, I have “a vague idea of what the paper means”.
The third thing, although it’s something I heard a lot at home, is that “repeating is at the core of good understanding”. It helps a lot to have at least been exposed to a notion before trying to really grasp it. The first exposure is a large hit in the face, the second one is slightly mellower, and at the third one you start to know where you are.
The fourth thing is that my brain seems to like it when I write stuff down. Let me sing an ode to blackboard and chalk. New technology gave us a lot of very fancy stuff, video-projectors, interactive whiteboards, and I’m even going to throw whiteboards and Vellada markers with it. I may seem reactionary, but I like nothing better than blackboard and chalk. (All right, the blackboard can be green.) It takes more time to write a proof on the blackboard than to run a Powerpoint with the proof on it (or Beamer slides, I’m not discriminating on my rejection of technology 😉 ) . So yeah, the class is longer, probably. But it gives time to follow. And it also gives time to take notes. Many of my classmates tell me they prefer to “listen than take notes” (especially since, for blackboard classes, there is usually an excellent set of typeset lecture notes). But writing helps me staying focused, and in the end to listen better. I also scribble a few more detailed points for things that may not be obvious when re-reading. Sometimes I leave jokes to future me – the other day, I found a “It’s a circle, ok?” next to a potato-shaped figure, it made me laugh a lot. Oh and, as for the fact that I also hate whiteboards: first, Velleda markers never work. Sometimes, there’s also a permanent marker hiding in the marker cup (and overwriting with an erasable marker to eventually erase it is a HUGE PAIN). And erasable marker is faster to erase than chalk. I learnt to enjoy the break that comes with “erasing the blackboard” – the usual method in the last classes I attended was to work in two passes, one with a wet thingy, and one with a scraper. I was very impressed the first time I saw that 😉 (yeah, I’m very impressionable) and, since then, I enjoy the minute or two that it takes to re-read what just happened. I like it. So, all in all: blackboard and chalk for the win.
How I apply those observations
With all of that, I learnt how to avoid the aforementioned cringy situations, and I got better at reading scientific papers. And takes more time than a couple of hours 😉
Generally, I first read it very fast to have an idea of the structure of the paper, what it says, how the main proof seems to work, and I try to see if there’s stuff that is going to annoy me. I have some ideas about what makes my life easier or not in a paper, and when it gets in the “not” territory, I grumble a bit, even though I suppose that these structures may not be the same for everyone. (There are also papers that are just a pain to read, to be honest). That “very fast” read is around half an hour to an hour for a ~10-page article.
The second read is “annotating”. I read in a little more detail, and I put questions everywhere. The questions are generally “why?” or “how?” on language structures such that “it follows that”, “obviously”, or “by applying What’s-his-name theorem”. It’s also pretty fast, because there is a lot of linguistic signals, and I’m still not trying to comprehend all the details, but to identify the ones that will probably require me to spend some time to comprehend them. I also take note of the points that “bother” me, that is to say the ones where I don’t feel comfortable. It’s a bit hard to explain, because it’s really a “gut feeling” that goes “mmmh, there, something’s not quite right. I don’t know what, but something’s not quite right”. And it’s literally a gut feeling! It may seem weird to link “comprehension” to “feelings”, but, as far as I’m concerned, I learnt, maybe paradoxically, to trust my feelings to evaluate my comprehension – or lack thereof.
The third read is the longer – that’s where I try to answer all the questions of the second read and to re-do the computations. And to convince myself that yeah, that IS a typo there, and not a mistake in my computation or reasoning. The fourth read and following are refinements of the third read for the questions that I couldn’t answer during the third one (but for which, maybe, things got clearer in the meantime).
I estimate that I have a decent understanding of a paper when I answered the very vast majority of the questions from the second read. (And I usually try to find someone more clever than me for the questions that are still open). Even there… I do know it’s not perfect.
The ultimate test is to prepare a presentation about the paper. Do as I say and not as I do – I typically do that by preparing projector slides. Because as a student/learner, I do prefer a blackboard class, but I also know that it’s a lot of work, and that doing a (good) blackboard presentation is very hard (and I’m not there yet). Once I have slides (which, usually, allow me to still find a few points that are not quite grasped yet), I try to present. And now we’re back to the “gut feeling”. If I stammer, if there are slides that make no sense, if the presentation is not smooth: there’s probably still stuff that requires some time.
When, finally, everything seems to be good, the feeling is a mix between relief and victory. I don’t know exactly what the comparison would be. Maybe the people who make domino shows. You spend an enormous amount of time placing your dominos next to one another, and I think that at the moment where the last one falls without the chain having been interrupted… that must be that kind of feeling.
Of course, I can’t do that with everything I read, it would take too much time. I don’t know if there’s a way to speed up the process, but I don’t think it’s possible, at least for me, in any significant way. I also need to let things “simmer”. And there’s a fair amount of strong hypotheses on the impact of sleep on learning and memory; I don’t know how much of that can be applied to my “math comprehension”, but I wouldn’t be surprised if the brain would take the opportunity of sleep to tidy and make the right connections.
Consequently, it’s sometimes quite frustrating to let things at a “partial comprehension” stage – whether it’s temporary or because of giving up – especially when you don’t know exactly what’s wrong. The “gut feeling” is there (and not only on the day before the exam 😉 ). Sometimes, I feel like giving up altogether – what’s the point of trying, and only half understanding things? But maybe “half” is better than “not at all”, when you know you still have half of the way to walk. And sometimes, when I get a bit more stubborn, everything just clicks. And that’s one of the best feelings of the world.
Today I added a couple of features to Marzipan, my fractal generator, so I’m going to show a few images of what I worked on 🙂
First, I refactored the orbit trap coloring to be able to expand it with other types of orbit traps; then I added the implementation for line orbit traps. Turns out, adding random line and point orbit traps is pretty fun, and can yield pretty results!
The other thing that I did was to add “multi-color palettes”: instead of giving a “beginning color” and an “end-color”, I can now pass a set of colors that will get used over the value interval. Which means, I can get much more colorful (and hence incredibly more eye-hurting) images!
And, well, I can also combine these two approaches to get NEON RAINBOWS!
Finally, I also played a bit with the ratios of the image that I generate – the goal is to not distort the general shape of the bulbs when zooming in the image. This is still pretty unsatisfactory, I need to make that work better (and to understand exactly how the size of the Qt window interacts with my window manager, because I’m probably making my life more complicated than it strictly needs to be there).
I had a lot of fun today implementing all of that, and then losing myself into finding fun colorings and fun trap orbits and all that kind of things. Now, the issue is that if I have more colors, I have more leeway to generate REALLY UGLY IMAGES, and I may need to develop a bit of taste if I want to continue doing pretty stuff 😉
Now what crossed my mind today:
I believe I have a bug, either in the multi-color palette or in the orbit trap coloring – I’ve seen suspicious things when zooming on certain parts (colors changing whereas they should not have), so I’ll need to track it and fix it. I also made performance worse when playing with multiple orbits for laziness reasons, I’ll need to fix that too.
I have some more things that I want to experiment with on orbit traps – I think there’s some prettiness I haven’t explored yet and I want to do that.
I should really start thinking about getting a better UI. I want a have better UI, I don’t want to code the better UI 😛
I should at least add a proper way to save an image instead of relying on getting them from the place where I dump them before displaying them – that would be helpful.
I should also find a way to import/export “settings” so that a given image can be reproduced – right now it’s very ephemeral. Which is not necessarily a bad thing 😉
I can probably improve the performance of the “increasing the number of iterations” operation, and I should do that.
The “image ratio” thing is still very fuzzy and I need to think a bit more about what I want and how to do it.
About a year ago, I wrote a post called “The one with the meditation“. It’s on my French blog, because at that time I had written it in French first, and thought it was worth it to translate it in English there. I considered moving it here, but decided against it – instead, I’m going to write an update 🙂 And write it as Q&A again, because that worked reasonably well for the first post, even if it’s pretty contrived 🙂
So, you’re still meditating every day?
I’m going to say “yes, but there are days where I don’t”. My intent is to meditate every day. Sometimes I fail at it. I started journaling at the end of November, and I do have a “Meditation” tracker on it, and that’s what it looked like for “end of November / December”:
That’s probably the worst month that I’ve had in a while – but there have definitely been more lapses in the past few months than in the first six months of my practice.
All in all, I’d say it’s most definitely a part of my “self-care” routine. I haven’t been that diligent at self-care in the past few months; hence, some slippage. My new year’s resolution, by the way, is the umbrella “be better at self-care”, so maybe that will help 😉
Did your practice change in any way?
A bit. The general gist of it – sitting with a guided meditation – didn’t change much. But I’m now typically sitting cross-legged on the couch or the bed instead of sitting on a chair; and I changed my “guided meditation” habits a bit. I used to use only Headspace – I’ve been experimenting with other apps. That’s what the colors in the tracker above are: “what app did I use that day”. I gave a try to Calm: I don’t think it’s a fit for me right now, I find it too corny for my taste. I still like Headspace for the “straightforwardness” of it. I do like 10% Happier a lot because it’s more fun and there’s an instructor there (Jeff Warren) that I particularly like.
I also started training towards unguided meditation (with the Headspace Pro packs that do… just that), and that’s something I want to explore a bit more soon. In particular, I heard about Yet Another App, Insight Timer, that allows to define timers, including a few (or a lot of) intermediary sounds as a “safety net” on the whole “getting lost in thought” and/or “falling asleep” that may be helpful. We’ll see how that goes.
Also, while Headspace is pretty “focus-oriented”, there’s a bit more variety in 10% Happier, including along the topics of loving-kindness and compassion. Those are still very new to me. I used to reject the concept as “corny” and “not for me” and so on, but after a tiny bit of practice in that area, I find myself liking it way more than I thought I would, and to find the whole concept helpful as well.
Finally, there’s a meditation studio that opened almost literally next door to where I live; I’ve been trying to gather some courage to visit it, but so far the “fear of new stuff especially when it involves me being alone with a bunch of new people” has won.
Did your perspective about what it brings you change?
Not much. I still do enjoy the “getting a break from the chatter” part of it, and the brief moment of quiet that I usually (but not always) get. I also do think that when Brain is Acting Up – getting into an anxiety attack, or a self-hate spiral, or that sort of unpleasant things – I now generally have a tiiiiiny bit of distance from it, in that I see what is happening, and there is now a tiny place in my head that’s reassuring me that yup, the spiral sucks, but it will eventually be over. That seems to helps me getting out of that kind of states slightly faster – and, more importantly, to not chew on “the fact that this happened” for hours or days afterwards. (Not sure if that one is meditation-related, therapy-related, or a bit of both, but I’ll take it either way 🙂 )
The other main point is that I now do identify “meditation” as a large part of what I put into “self-care” – that also includes things like getting enough sleep, exercising, getting enough recovery time, and eating properly. And, like any other element in that category: the better I am at sticking to the routine that works, the better I feel – even if it’s sometimes super annoying that it’s necessary. So, in a way, it’s “it’s not that it brings me things that I can actually pinpoint, it’s more that if I stop doing it, Brain is usually Acting Up more”.
Any new resources to recommend?
I did mention two apps:
Calm – as I mentioned, I don’t think it works for me right now, but the app itself is well-made and has a fair amount of content. And there’s a lot of people who are happy with it, so you might be one of them as well.
Insight Timer – I have actually not used this one yet, but I’ve heard good things. They advertise that they have a lot more free content than the other meditation apps; I haven’t checked that statement but it seems plausible.
Book-wise, in the past year, I read two meditation-related books:
Full Catastrophe Living: Using the Wisdom of Your Body and Mind to Face Stress, Pain, and Illness, by Jon Kabat-Zinn. That one is a fairly heavy book about meditation and mindfulness. It’s essentially a “MBSR HowTo”, where MBSR stands for Mindfulness-Based Stress Reduction, a program developed by Kabat-Zinn that seems to be in large part used for people suffering from chronic pain. There was a lot of very interesting things and insights in this book (I do, in particular, remember about a part where he talks about the mechanics of breathing and the diaphragm and felt slightly mind-blown because I had never asked myself how it worked). At first, I was quite irritated by the amount of “Mr X. with this and that symptom came to a MBSR workshop and after 8 weeks was so much better”, but once I reframed my “okay, we get it, your thing is cool” into “let me give a lot of examples so that the reader has a chance to relate to one” it was better.
Altered Traits, by Daniel Goleman and Richard Davidson. Goleman and Davidson look at academic research on meditation, and it’s fascinating. Their interest is mostly about how long meditation practice (we’re talking tens of thousands of hours over a life time, compared to my paltry 90 hours over a couple of years) have an influence on the brain itself – what they called permanent “altered traits”, as opposed (by them) to the transient “altered states” than can sometimes be experienced during meditation. The book is a bit meandering and a bit self-serving at times, but I still found it very interesting.