deaddy.nethttps://deaddy.net/2024-02-03T00:00:00+00:00Befriending oneself2024-02-03T00:00:00+00:002024-02-03T00:00:00+00:00Marceltag:deaddy.net,2024-02-03:/befriending-oneself.html<p>People often throw around phrases like "practice self-compassion" or "love
yourself".
While this might be something that in theory possibly is
helpful to some people, it is not immediately clear why it should be good and
in practice the typical results seem to be bi-modally distributed around two
poles:</p>
<ul>
<li>people …</li></ul><p>People often throw around phrases like "practice self-compassion" or "love
yourself".
While this might be something that in theory possibly is
helpful to some people, it is not immediately clear why it should be good and
in practice the typical results seem to be bi-modally distributed around two
poles:</p>
<ul>
<li>people become self-entitled and egoistical</li>
<li>people become more destitute because they have very good reasons to not love
or feel compassion to themselves</li>
</ul>
<p>These poles are not exclusive, so this well-meant tip, like most
well-meant things, often does more harm than good, leaving people in miserable
places, with both factors reinforcing each other.</p>
<h1 id="we-are-better-to-others-than-to-ourselves"><a class="toclink" href="#we-are-better-to-others-than-to-ourselves">We are better to others than to ourselves</a></h1>
<p>On the other hand, when it comes to helping other people, especially friends,
we often perform exceptionally well and are relentlessly forgiving:</p>
<ul>
<li>we are on time and handle even tasks we normally put off</li>
<li>we are compassionate for their failures</li>
<li>we cheer every tiny little progress and every tiny win</li>
</ul>
<p>Furthermore, usually have a clearer view of their problems and how to
approach these, at least as long as we are not conflicted, and we are better
at being somewhat strict about it and we might even try to discipline our
friends.
As the saying goes, friends don't let friends squat high.
But people still squat high, and while it would seem obvious, not everyone is
aware about it or they otherwise make it seem okay to themselves.
The outside perspective helps greatly to cut through the bullshit here.</p>
<p>Having friends is also kinda nice, as being in places with a friend usually is
less awkward and more than than being alone there, and you are probably less
anxious about random interactions.</p>
<p>Now, while completely appropriate and surprisingly reasonable in this setting
(maybe for another issue), this is not the cue for the talk about our lord and
savior, Jesus Christ, but about befriending oneself.</p>
<figure style="width: 254px; display: inline-block; float: right;">
<img src="/images/american-psycho-bed.jpg"
alt="the infamous american psycho bed scene"
width="250px">
<figcaption>
Impressing strangers does not fill the void, even if the stranger is you
(taken from the movie "American Psycho" (2000), fair use due to the cultural
embeddedness of this particular scene)
</figcaption>
</figure>
<h1 id="befriending-yourself"><a class="toclink" href="#befriending-yourself">Befriending yourself</a></h1>
<p>The propositional meaning of this is kinda obvious: to be a better friend to
oneself (or even a friend in the first place), because it is a friend you
could theoretically always have with you.
On the surface this sounds kinda meh, but when we explore how to accomplish
this and in light of aforementioned benefits of friendship, it becomes clear
that this is can be a transformative process.</p>
<p>Being a friend to yourself basically requires three things:</p>
<ul>
<li>entering an I-Thou relationship with yourself (in the <a href="https://en.wikipedia.org/wiki/Martin_Buber">Buberian</a>
sense)</li>
<li>spending time with yourself</li>
<li>developing an appropriate and actually positive attitude</li>
</ul>
<h2 id="the-self"><a class="toclink" href="#the-self">The self</a></h2>
<p>Both is kind of what we would call spiritual in nature, but that is just fancy
speak for "you can experience this yourself if you just observe yourself".
To enter an I-Thou relationship with yourself you first have to discover the I
and the Thou.
Since it is yourself, this basically comes down to differentiating between
oneself and one's feelings and thoughts and all that relatively impermanent
crap.</p>
<p>In case you wonder, this is essentially the intro to probably any
non-corporate meditation class.
Basically it comes down to exploring these questions:</p>
<ul>
<li>Are you your thoughts?</li>
<li>Are you your feelings?</li>
<li>Are you your body?</li>
<li>Are you the story you or people tell about yourself?</li>
<li>What is constant?</li>
</ul>
<p>And the only thing that remains the same is the capacity of experiencing these
things, but not any of these things.</p>
<h2 id="the-i-thou-relationship-with-yourself"><a class="toclink" href="#the-i-thou-relationship-with-yourself">The I-Thou relationship with yourself</a></h2>
<p>Great, we found the self.
Now, what does <em>I-Thou</em> relationship mean?
Well, it is not an <em>I-It</em> relationship, where you, the subject, interact with
an object.
The I-It relationship is transactional and does not recognize the object as
a subject.
It is how you interact with most inanimate things, NPCs or also, it is how you
are being interacted with by HR, corporate entities and government.
In the I-Thou relationship, both sides are connected and relate to each other.
Both sides wish to experience <a href="https://deaddy.net/agency-not-attention-is-the-most-valuable-resource.html">agency</a> and acknowledge each other's wish for
agency.
It's how you interact with actual players.</p>
<p>Recognizing how you interact with yourself is the next step.
Some interactions are immediate, some are not.
You might talk to yourself (the stuff you mutter under your breath), which is
kind of a direct interaction.
But also the things you do now affect your future self, and actions of your
past self interact with your present self.
What you do at work might interact with what you experience at home and vice
versa.
All actions have consequences, but you can never force yourself to do
something specific at a different time, at a different place, even if you
really would wish for yourself to do exactly this.
Just like you could not force a friend to behave a certain way, even if you
think it would be the best for them, underlining that not only it is possible
to enter an I-Thou relationship with oneself, but also that it is more
appropriate than assuming continuous <a href="https://deaddy.net/agency-not-attention-is-the-most-valuable-resource.html">agency</a>.</p>
<h2 id="spending-time-with-yourself-and-developing-unconditionally-positive-regard"><a class="toclink" href="#spending-time-with-yourself-and-developing-unconditionally-positive-regard">Spending time with yourself and developing unconditionally positive regard</a></h2>
<p>Spending time with oneself is also hard, for various reasons, some people just
do not have the time, other people are constantly occupied with running from
themselves and distracting themselves with hedonism, people and media.
Well, to be fair, if you assume yourself to be all powerful and
being able to decide now what will be done for a person at a different time
and place, but then failing at this basic task of exerting godlike powers, you
definitely feel bad.</p>
<p>So this at least gets partially easier once we move into a more reasonable
relationship with ourselves.
Which is good, because you need to spend more time in solitude, and also just
hang out with yourself.
Ideally we could just sit in a cave in cold mountains all day long, but since
this is for most of us not an option, we can resort to the usual things we do
with friends and all activities obviously are postfixed with "without checking
your phone", like taking a walk, going to the gym, having a nice meal, going
to the sauna or just hanging out on the couch.</p>
<p>And because now we are spending time with a friend, me-time is not anymore
a hedonistic shitfest, but you can explore the interaction, how some things
are hard for one at certain times, and try to find ways to make it easier for
one you at a time and place to act in accordance to another you at a another
time and place, as well as find compassion for various perceived failings.
It also helps to make biography, and not only make it into a set of excuses.</p>
<p>Now, not all interactions are friendly, but in friendship we aim for one where
both people have an attitude of unconditional positive regard to each other,
and it is totally okay if at first you can not relate to yourself in a
positive regard.
Do not let anyone tell you otherwise.
But of course, you are stuck with yourself for the rest of the life, so you
have a strong incentive to make it a good relationship and at least you can
start with a truce and try to not make each other's life harder than it needs
to be.
And there will be conflict and you need to resolve it, and sometimes, well, it
even takes another, external friend to resolve these conflicts.</p>
<h1 id="befriending-oneself-in-the-general-landscape"><a class="toclink" href="#befriending-oneself-in-the-general-landscape">Befriending oneself in the general landscape</a></h1>
<p>First and foremost, we now have found the proper perspectival shift to make
"self-compassion" and "loving yourself" into non-bullshit concepts and can see
how these actually can be helpful.
By distinguishing between ourselves in the present moment and at other times,
but also acknowledging the interaction between these two, we can forgive
parts and work together, instead of beating ourselves up.
It helps us getting unstuck in our heads and have more of an outside,
less entangled perspective, at least concerning our interactions with
ourselves.</p>
<p>This also gives us another perspective on how solitude is the cure to
loneliness, though while it would be convincing, this perspective is
incomplete.</p>
<p>We also find that all the underlying mechanisms which psychotherapeutic
schools have isolated, e.g. part-work is the resolution of conflict between
our selfs, Freudian-style psychotherapy is biographical in nature, reflecting
of actions and reframing is cognitive restructuring, so indeed, we have even
have evidence of the effectiveness of each of the mechanisms, but in a
framework which does not require differential diagnostics to choose the right
solution for the right problem, but in a continuous dialogue and evolving
meta-cognitive process.
By practicing kindness to ourself not only in thought, but also in action,
like proper exercise, hygiene and organization (remember, we try to work
together here and if future you always forgets what they wanted to buy in the
store, you write it down for them!), we also can uncover and utilize the
whole toolkit of CBT.</p>
<p>Finally, epistemological it is a more appropriate representation of our
<a href="https://deaddy.net/agency-not-attention-is-the-most-valuable-resource.html">agency</a>, because decisions are made in the present and if we wish to
change how decisions are made, we have to negotiate with the person in
charge at that time and place.</p>Using endpoints and external services in kubernetes2023-11-14T00:00:00+00:002023-11-14T00:00:00+00:00Marceltag:deaddy.net,2023-11-14:/using-endpoints-and-external-services-in-kubernetes.html<p>Sometimes we need to access services in our cluster via network which are not
yet part of the cluster, but we plan on migrating them at some point.
Or there are webservices still running on some old piece of junk, but we'd
like to have all the comforts of an …</p><p>Sometimes we need to access services in our cluster via network which are not
yet part of the cluster, but we plan on migrating them at some point.
Or there are webservices still running on some old piece of junk, but we'd
like to have all the comforts of an ingress controller in place, before we
are touching that old damn thing.</p>
<p>Luckily, there are at least two ways (network plugins such as cilium offer
even further ways) to reflect such things in native kubernetes resources,
which, although simple, are not that well known as one would expect.</p>
<h1 id="endpoint-service"><a class="toclink" href="#endpoint-service">Endpoint + Service</a></h1>
<p>Usually when working with services, we use labels to select pods.
In the background, kubernetes then creates an Endpoint object bearing the same
name as our service, which is then regularly updated depending on the type of
the service and contains the ports and IPs of the, well, endpoints.</p>
<p>But we can also simply create our own Endpoint object.
The following would create and Endpoint and a Service, allowing us to access
the ips and named ports in the Endpoint via the service.</p>
<div class="highlight"><pre><span></span><code>---
apiVersion: v1
kind: Endpoints
metadata:
name: example
subsets:
- addresses:
- ip: 10.0.0.1
- ip: 10.0.0.2
ports:
- port: 80
name: http
- port: 9100
name: metrics
</code></pre></div>
<p>Now this endpoint would be created in the default namespace and point at the
ips <code>10.0.0.1</code> and <code>10.0.0.2</code>, exposing port 80 under the name http and 9100
under the name metrics.
To have it accessible via a service, we now need a service with the same name
in the same namespace.
There is no magic using labels involved.</p>
<div class="highlight"><pre><span></span><code>---
apiVersion: v1
kind: Service
metadata:
name: example
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
name: http
- port: 9100
protocol: TCP
targetPort: 9100
name: metrics
</code></pre></div>
<h1 id="externalname-service"><a class="toclink" href="#externalname-service">ExternalName Service</a></h1>
<p>When we already have a DNS name we can use, we can use a Service
of type <code>ExternalName</code>.
This also could just be a service in another namespace, such as
<code>example.another-namespace.svc</code>!</p>
<div class="highlight"><pre><span></span><code>---
kind: Service
apiVersion: v1
metadata:
name: external-example
spec:
type: ExternalName
externalName: example.org
ports:
- protocol: TCP
port: 80
targetPort: 80
name: http
- protocol: TCP
port: 9100
targetPort: 9100
name: http
</code></pre></div>
<p>In both instances we now have a Service <code>example</code> in our default namespace,
exposing port 80 and 9100 of some, possibly external, entity.</p>My kubernetes blogroll2023-09-13T00:00:00+00:002023-09-13T00:00:00+00:00Marceltag:deaddy.net,2023-09-13:/my-kubernetes-blogroll.html<p>This post contains a few links I refer to or share with other people.
These links go to external sites and while I do my best to check them
regularly for shady stuff, well you know how it goes in the
wild wild web, so make sure to stay safe …</p><p>This post contains a few links I refer to or share with other people.
These links go to external sites and while I do my best to check them
regularly for shady stuff, well you know how it goes in the
wild wild web, so make sure to stay safe when browsing other people's
websites, especially when you have JavaScript or similar plugins enabled by
default.</p>
<p>Also please contact me, if you find anything fishy going on on some domain, so
I can either take the links out or in some instances try to contact the people
I hoped the link belongs to.</p>
<p>I thought I would wait until this list is longer, but good content is not
produced at such a high rate and the maximum number of links I can remember is
already capped out.</p>
<h2 id="ivan-on-containers-kubernetes-and-serverside"><a class="toclink" href="#ivan-on-containers-kubernetes-and-serverside">Ivan on containers, kubernetes, and serverside</a></h2>
<p>Link: <a href="https://iximiuz.com/en/">https://iximiuz.com/en/</a></p>
<p>A very nice, technical blog with many elaborate illustrations about different
things on the topic.
Almost like a reference for questions you never knew you would have, e.g. what
happens when you do a <code>kubectl exec</code>?
In <a href="https://iximiuz.com/en/posts/containers-101-attach-vs-exec/">this post</a> you get the answer.</p>
<p>Caveat: It might be not very accessible, as much of it's value comes from very
niceley designed pictures.</p>
<h2 id="posts-on-k8s-which-are-not-the-default-yadda-yadda"><a class="toclink" href="#posts-on-k8s-which-are-not-the-default-yadda-yadda">Posts on k8s which are not the default yadda yadda</a></h2>
<p>There is not much to say about these posts.
They are <a href="https://deaddy.net/why-you-should-start-a-blog.html">blog posts</a> about kubernetes, and their main value is in
getting some actual perspective and not just a bunch of buzzwords of people
who barely finished the tutorial:</p>
<ul>
<li><a href="https://czernobog.org/posts/k8s-i/">https://czernobog.org/posts/k8s-i/</a></li>
<li><a href="https://blog.chaz.pro/posts/2021-12-05/how-i-kubernetes">https://blog.chaz.pro/posts/2021-12-05/how-i-kubernetes</a></li>
<li><a href="https://spacelift.io/blog/kubernetes-challenges">https://spacelift.io/blog/kubernetes-challenges</a></li>
</ul>
<h2 id="more-meta-posts-about-good-practices"><a class="toclink" href="#more-meta-posts-about-good-practices">More meta posts about good practices</a></h2>
<p>In my memory I had a nice checklist somewhere here which I wanted to link, but
I do not find it.
For now there is only this checklist from the CNCF for gitops:</p>
<ul>
<li><a href="https://www.cncf.io/blog/2022/07/08/the-16-point-checklist-for-gitops-success/">https://www.cncf.io/blog/2022/07/08/the-16-point-checklist-for-gitops-success/</a></li>
</ul>
<h2 id="my-own-k8s-posts"><a class="toclink" href="#my-own-k8s-posts">My own k8s posts</a></h2>
<p>Of course you find my own posts on <a href="/tag/kubernetes.html">kubernetes</a> in the tags of this blog.</p>How to finally fall in love with chin- and pullups2023-07-09T00:00:00+00:002023-07-09T00:00:00+00:00Marceltag:deaddy.net,2023-07-09:/how-to-finally-fall-in-love-with-chin-and-pullups.html<p>Few exercises are so noncontroversial as chin- and pullups.
Medical professional, gym enthusiasts, calisthenic people, crossfitters,
almost everyone seems to like them. <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>
The only people honestly not liking them tend to be strong and jacked (I mean
even fat people acknowledge that they are just too fat, so they …</p><p>Few exercises are so noncontroversial as chin- and pullups.
Medical professional, gym enthusiasts, calisthenic people, crossfitters,
almost everyone seems to like them. <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>
The only people honestly not liking them tend to be strong and jacked (I mean
even fat people acknowledge that they are just too fat, so they only jokingly
dislike them).</p>
<p>There are of course several factors at play here, the two most evident being
one, that of course it's a lot harder to pull yourself up, if you weigh more
than the average gym goer with additional weights, and two, most people only
half-ass pullups and chinups and then of course it is easier because they are
only doing half of the movement.
Occasionally we may witness people with veiny bulging biceps moving tons
of extra weight, but it is a rare sight and we often miss the opportunity to
stop and take the clues, namely that it is all about bulging biceps and moving
tons of weight. <sup id="fnref:3"><a class="footnote-ref" href="#fn:3">2</a></sup></p>
<p>Chins and pullups are good exercises, but they require some effort
to make them work, because otherwise they are only frustrating, hurt and take
more than they give, but well, it's not that hard and bad actually, once you
find a good approach and I argue that thinking of them as an arm exercise is a
good one.</p>
<h2 id="nomenclature-and-admissible-technique"><a class="toclink" href="#nomenclature-and-admissible-technique">Nomenclature and admissible technique</a></h2>
<p>First let us discuss how I use all the terms here and what is proper
technique, because apparently the names and the history and technique
diverged a little bit.</p>
<p>A chinup is pulling yourself up at a bar with a supinated grip, until the bar
touches your chest.
No touching, no rep.
Like in the bench or overhead press.
The other end of the movement is a bit more flexible, as apparently some
people have shoulder issues or what do I know, but you should acquire some good
stretch in the muscles involved</p>
<p>A pullup is pulling yourself up at a bar with a pronated grip, until your chin
is higher than the bar.
It is very hard and awkward to get the bar to touch here, so it's not a
requirement.</p>
<p>One might interject that this should have been called chinup, but at some
point the words have become confused and now we have this situation and the
necessity to explain it once more.</p>
<p>Finally, you can have different grips, depending on the equipment available,
or use of rings and other implements.
In general you can clarify by prefixing the grip or equipment used and then
use chinup if touching is a requirement or pullup if only the chin needs to
pass a certain height.
The same goes for kipping, though one might argue that it might be more
sensible to view it as its own version, like a cardio pullup, similar how there
are cardio machines for rowing which of course are not the same as barbell
rows.</p>
<h2 id="program-it-like-a-big-lift"><a class="toclink" href="#program-it-like-a-big-lift">Program it like a big lift</a></h2>
<p>The common way to stay stuck in the gym is trying to get with a certain weight
to say 8 - 12 reps for three sets and only then increasing the weight.
The reliable way to increase one's 10RM is to increase one's 3RM or 5RM and
it's no different here.
It's no different with chin- and pullups.
Add weight, increase the weight added over time.
Not necessarily on every session during the week, but if you are stuck, adding
weight helps getting unstuck.</p>
<p>On the other hand, if you want to accumulate volume, do it similar to the big
lifts, meaning lots of sets, lots of initial RIR (or RPE in the range from @7
to @9).
The obvious problem with chinups and pullups vs. squats is that with the
former the minimal amount of weight you can use is your bodyweight and for a
very long time (read: forever) your bodyweight will be the majority of the
load.
While a bodyweight chinup is something almost no one ever achieves, a
bodyweight squat is something you can get most trainees to in a year, if not
much shorter times.
So even unloaded you are usually closer to 80% of your 1RM than say 60% of
your 1RM, especially in the beginning.
Which means you usually need to be even further away from failure to
accumulate sufficient amounts of volume.</p>
<h2 id="its-an-arm-exercise-first"><a class="toclink" href="#its-an-arm-exercise-first">It's an arm exercise first</a></h2>
<p>Chinups and pullups are often slotted as back exercises, but ootb they suck at
back.
Any proper horizontal row<sup id="fnref:4"><a class="footnote-ref" href="#fn:4">3</a></sup> or deadlifts are better back builders.</p>
<p>It is the classical "weakest link in the chain" problem; your back is attached
to the bar via your arms and your arms are connected via your hands, and due
to proprioceptive feedback you will not be able to fully engage your back as
long as your arms are not up to the task.</p>
<p>This also means that chinups are the better choice in the beginning, as your
arms are in a more favorable position and you can manage the load better,
which is also the reason why beginner programs usually advocate these.</p>
<p>Bodybuilders often just strap up on chins and pullups, but as a strength
athlete I think it is more favorable to build the necessary strength in all of
the positions.</p>
<p>Having established that we will slot it as arm exercise, let us now also treat
it as such.
Consequently we actively try to primarily use the arms and support with the
back and not vice versa.
In particular we reduce the systemic fatigue experienced from chins (otherwise
known as "fuck up your back for the whole week").
The back involvement can and will rise with more strength and mastery of the
movement, but I deem it smarter to start out this way.</p>
<p>With chins now being some kind low rep high weight curl, we can also
incorporate it in our arm routine in a more nuanced way, e.g. sandwiched
between curls or after doing some back exercises, having a lighter curl
variant and then doing chinups.
A new favorite of mine is doing hammer curls before doing chins, because then
my arms are already warmed up, my shoulders are a bit more ready for the
external rotation and the pump is just otherworldly.</p>
<h2 id="wide-grip-pullups-are-weird-start-narrow"><a class="toclink" href="#wide-grip-pullups-are-weird-start-narrow">Wide grip pullups are weird, start narrow</a></h2>
<p>There is some strange fascination with wide grip pullups and in German we even
have saying "breit greifen, breit werden", which roughly translates to "grip
widely, grow wide", and is, of course, as wrong as you can be while being
right.
In view of the ROM discussion, for most people wide grip pullups are the
inferior movement and also usually pretty awkward.
It's much more sensible to start with a narrower grip and then slowly build
the positional strength to actually be able to have a good ROM and a smooth
movement on the wide grips.
A good grip is your press or clean grip, because it obviously allows you to
get a bar to your chest or shoulders, so the only thing holding your back then
is strength, but not anatomy.</p>
<p>I suspect in the calisthenics world one would call wide grip pullups a
progression from pullups, as in the absence of weight, you move to more and
more awkward positions to make exercises harder.
In this sense we can already think of pullups as progression from chinups and
program them accordingly.</p>
<h2 id="tldr-chinups-are-a-powerlift-for-the-biceps"><a class="toclink" href="#tldr-chinups-are-a-powerlift-for-the-biceps">tl;dr Chinups are a powerlift for the biceps</a></h2>
<p>Once we can attach enough weight to have room to play around, we can just see
chinups as a powerlift for the biceps.
Keeping the awkwardness of the high minimal load in mind, programming them
then accordingly as a big lift seems to work out much better than slotting
them as some back assistance exercise.</p>
<p>By focusing the biceps over the back, we shift most of the fatigue over
from the very central and systemic back over to the very localized biceps and
maybe forearms.
This makes it easier to program, because the reduced systemic fatigue
means less interference with other training slots to worry about and overall
the recovery of your arms is rather easy to gauge, simplifying questions of
progression and volume allocation.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>This could have been a warning sign <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:3">
<p>I guess it's also partly because people do not want to admit that they
want big guns and move big weights.
Be honest with yourself.
Be honest with the world.
Train your biceps. <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:4">
<p>Basically everything but Yates rows, which are not rows. <a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>Upgrading a kubeadm kubernetes cluster2023-06-13T00:00:00+00:002023-06-13T00:00:00+00:00Marceltag:deaddy.net,2023-06-13:/upgrading-a-kubeadm-kubernetes-cluster.html<p>Upgrading a kubeadm kubernetes cluster is not nearly as bad as it might seem
in the first place, as it is all very well documented, but in the sea of
documentation you always feel like missing something.
In this post I summarize the most important links and the things I …</p><p>Upgrading a kubeadm kubernetes cluster is not nearly as bad as it might seem
in the first place, as it is all very well documented, but in the sea of
documentation you always feel like missing something.
In this post I summarize the most important links and the things I do, so
that I have it all in one place.</p>
<p>First of all, the <a href="https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/">official docs</a> are pretty straight forward
and you should read them; they differ a bit between verisons and for older
versions you might need to look into <a href="https://github.com/kubernetes/website">website git repo</a>.</p>
<div class="toc">
<ul>
<li><a href="#prerequisites">Prerequisites</a><ul>
<li><a href="#deprecated-api-versions">Deprecated API versions</a></li>
<li><a href="#the-next-kubeadm-and-kubelet-packages">The next kubeadm and kubelet packages</a></li>
</ul>
</li>
<li><a href="#performing-the-upgrade">Performing the upgrade</a><ul>
<li><a href="#setting-up-some-watchers">Setting up some watchers</a></li>
<li><a href="#the-control-plane">The control plane</a><ul>
<li><a href="#the-first-control-plane-member">The first control plane member</a></li>
<li><a href="#the-remaining-control-plane-members">The remaining control plane members</a></li>
</ul>
</li>
<li><a href="#the-worker-nodes">The worker nodes</a></li>
</ul>
</li>
<li><a href="#finishing-up">Finishing up</a></li>
</ul>
</div>
<h1 id="prerequisites"><a class="toclink" href="#prerequisites">Prerequisites</a></h1>
<h2 id="deprecated-api-versions"><a class="toclink" href="#deprecated-api-versions">Deprecated API versions</a></h2>
<p>To upgrade a cluster you first need to make sure that no APIs are used which
have been deprecated and will be removed with the new version, lest you want
to have workloads fail (which is totally fine if you have customers who had
plenty of notice to update their manifests).</p>
<p>In general for this you simply check the <a href="https://kubernetes.io/docs/reference/using-api/deprecation-guide/">api deprecation guide</a>, which
tells you most of the relevant things.</p>
<p>I have not yet figured out a reliable way to just automtacially run a single
script and find everything.
Actually <a href="https://github.com/doitintl/kube-no-trouble">kubent</a> should do exactly this, but I have seen deprecated
resources which <code>kubent</code> did not show me (probably PEBKAC), so I still
manually check some things manually with <code>kubectl</code>.</p>
<p>Deprecations up to version 1.19 are pretty rare and do not require much
automation though.</p>
<p>Kubernetes 1.19 also introduced an API server metric,
<code>apiserver_requested_deprecated_apis</code> which can be used to see which
deprecated API objects are still being requested and also tells you
the actual version when this object will be removed, e.g.:</p>
<div class="highlight"><pre><span></span><code>apiserver_requested_deprecated_apis{endpoint="https", group="extensions", instance="10.118.0.22:6443", job="apiserver", namespace="default", removed_release="1.22", resource="ingresses", service="kubernetes", version="v1beta1"}
</code></pre></div>
<p>Given this output I then can just search for the corresponding resources,
which is given by the <code>resource</code> label, so in the above example to see the
used api versions for any ingress I use the following command:</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span>get<span class="w"> </span>ing<span class="w"> </span>-A<span class="w"> </span>-o<span class="w"> </span>custom-columns<span class="o">=</span><span class="s2">"Namespace:.metadata.namespace, Name:.metadata.name, apiVersion:.apiVersion</span>
</code></pre></div>
<h2 id="the-next-kubeadm-and-kubelet-packages"><a class="toclink" href="#the-next-kubeadm-and-kubelet-packages">The next kubeadm and kubelet packages</a></h2>
<p>For k8s it is totally fine to skip minor versions, but you should not skip
major versions, i.e. if you want to upgrade from 1.16.6 to 1.19.15, you
upgrade to 1.17.x and 1.18.y, before upgrading to 1.19.15. <sup id="fnref:bug"><a class="footnote-ref" href="#fn:bug">1</a></sup></p>
<p>This means you will need the packages for <code>kubeadm</code> (actually I think kubeadm
you can get away with the latest) and <code>kubelet</code> of the respective versions.
Which might be a PITA depending on the distribution<sup id="fnref:enterprise"><a class="footnote-ref" href="#fn:enterprise">2</a></sup> of your
nodes, and it's better to have them in place before starting to upgrade the
nodes (esp. in heterogeneous clusters) than to have a panic attack after your
first nodes upgraded and you can not upgrade the remaining nodes.</p>
<h1 id="performing-the-upgrade"><a class="toclink" href="#performing-the-upgrade">Performing the upgrade</a></h1>
<h2 id="setting-up-some-watchers"><a class="toclink" href="#setting-up-some-watchers">Setting up some watchers</a></h2>
<p>Several things can happen during the upgrade you probably want to know about.
Apart from monitoring (which, if running in the same cluster, could be
unavailable if things go wrong), I have a <code>watch</code> on a few things I'd like to
see healthy during all operations, e.g. my <code>ceph</code> status.</p>
<p>I think during the upgrades <code>kube-proxy</code> will restart (not sure if this is a
must, but it can happen), which might take a while under heavy loads and lead
to DB clusters resynchronizing, which is something I would wait for before
progressing.</p>
<p>Finally on some small corner I have a
<code>watch "kubectl get nodes | grep -v <new_version> && kubectl get nodes | grep NotReady"</code>
to have a good overview on what is still left to do and to see things if
things break horribly.</p>
<h2 id="the-control-plane"><a class="toclink" href="#the-control-plane">The control plane</a></h2>
<h3 id="the-first-control-plane-member"><a class="toclink" href="#the-first-control-plane-member">The first control plane member</a></h3>
<p>On the first control plane member, we first only upgrade <code>kubeadm</code>.
Performing <code>kubeadm upgrade plan</code> or <code>kubeadm upgrade plan <targetversion</code>
(usually<sup id="fnref2:bug"><a class="footnote-ref" href="#fn:bug">1</a></sup> not needed).</p>
<p>This will also once again remember you to check things like the in-cluster
kubeadm config map, which you should check.</p>
<p>If everything noted is as it should be, next double check your <code>etcd</code> are
healthy, e.g. via</p>
<div class="highlight"><pre><span></span><code>kubectl<span class="w"> </span><span class="nb">exec</span><span class="w"> </span>-it<span class="w"> </span>-n<span class="w"> </span>kube-system<span class="w"> </span>your-control-plane-node<span class="w"> </span>--<span class="w"> </span>etcdctl<span class="w"> </span>--cert<span class="o">=</span>/etc/kubernetes/pki/etcd/peer.crt<span class="w"> </span>--key<span class="w"> </span>/etc/kubernetes/pki/etcd/peer.key<span class="w"> </span>--cacert<span class="w"> </span>/etc/kubernetes/pki/etcd/ca.crt<span class="w"> </span>--endpoints<span class="w"> </span>https://localhost:2379<span class="w"> </span>member<span class="w"> </span>list
</code></pre></div>
<p>(the syntax might differ a bit between etcdctl versions).</p>
<p>Drain this node, then run <code>kubeadm upgrade <version></code>.</p>
<p>After this, you can rune <code>kubeadm upgrade node</code> and then upgrade <code>kubelet</code> via
your package manager or whatever you use.</p>
<p>Uncordon the node and wait for everything to come back up healthy and then
proceed with</p>
<h3 id="the-remaining-control-plane-members"><a class="toclink" href="#the-remaining-control-plane-members">The remaining control plane members</a></h3>
<p>The main thing with control plane members is that before and after each node
you want to be really sure things are healthy.</p>
<p>So, for each controle plane member</p>
<ol>
<li>check if etcd and everything is healthy </li>
<li>drain the node</li>
<li>run <code>kubeadm upgrade node</code> on it</li>
<li>update the <code>kubelet</code> package to the correct version</li>
<li>uncordon node, wait for everything to be healthy again</li>
</ol>
<h2 id="the-worker-nodes"><a class="toclink" href="#the-worker-nodes">The worker nodes</a></h2>
<p>If you use image based deployments, just drain and replace your old workers
with new images.
Otherwise, you can just repeat the same steps as above for the control plane
members, sans checking the control plane services, but possibly you will need
to take care of other services like ingress controllers.
It is recommended that you drain every node before the upgrade, but so far it
worked for me to just run the <code>kubeadm upgrade node</code> followed by the <code>kubelet</code>
upgrade.
YMMV, so the recommended way would be for each node:</p>
<ol>
<li>check application health</li>
<li>drain the node</li>
<li><code>kubeadm upgrade node</code></li>
<li>update <code>kubelet</code></li>
<li>uncordon node</li>
</ol>
<h1 id="finishing-up"><a class="toclink" href="#finishing-up">Finishing up</a></h1>
<p>In general there is not much to do afterwards and everything should work as
expected.
It's a good idea to check all dashboards for missing data entries as metrics
can change.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:bug">
<p>of course there is an exception, as 1.19.16 has a bug which breaks
with upgrade path and necessitates you to upgrade to 1.19.15 first (if
your upgrade path is beyond 1.19 you can then just skip 1.19.16 anyway) <a class="footnote-backref" href="#fnref:bug" title="Jump back to footnote 1 in the text">↩</a><a class="footnote-backref" href="#fnref2:bug" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:enterprise">
<p>as usual, "enterprise" is a warning label <a class="footnote-backref" href="#fnref:enterprise" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Agency, not attention is the most valuable resource2023-03-04T00:00:00+00:002023-03-04T00:00:00+00:00Marceltag:deaddy.net,2023-03-04:/agency-not-attention-is-the-most-valuable-resource.html<p>This is a correction to a former post of myself.
I made the claim that
<a href="https://deaddy.net/attention-not-time-is-the-most-valuable-resource.html">attention, not time is the most valuable resource</a>.
This should read:
Agency, not attention is the most valuable resource, and hence the title of
this post, whereas <em>agency</em> refers to the capacity of an autonomous …</p><p>This is a correction to a former post of myself.
I made the claim that
<a href="https://deaddy.net/attention-not-time-is-the-most-valuable-resource.html">attention, not time is the most valuable resource</a>.
This should read:
Agency, not attention is the most valuable resource, and hence the title of
this post, whereas <em>agency</em> refers to the capacity of an autonomous agent to
act in accordance to their goals and wants.
All these terms of course are loaded with debate and nitpicking, but
<a href="https://deaddy.net/diagnostics-communication-and-phenomenology.html">phenomenologically</a> speaking, you have agency when you
can do what you think you want and you think you want what you actually want
and there is some conformity between your actions and your thoughts and your
experience.</p>
<p>I suspect it its pretty <a href="https://deaddy.net/write-down-the-obvious.html">obvious</a>, that this statement at least is an
improvement.</p>
<p>Of course, the former statement is not completely untrue.
For most people attention has become the <a href="https://deaddy.net/on-bottlenecks-magic-bullets-and-optimization.html">bottleneck</a> to their own
agency, but in the past we were much more limited by our time than our
attention, and well, the author of the former blog post probably tried to
catch this change, as the Zeitgeist at the time still was much more about time
management than technological and mental hygiene.</p>
<p>Correctness aside, it was also insensitive.
It can be argued that suffering is our experience of a loss of agency, and
well, then of course for many sufferers attention will not be the most
valuable resource.</p>
<p>Furthermore, the viewpoint of agency is much more use- and helpful.
Trying to protect our attention mostly puts us at war with the abstract
predatory attention economy, an emergent phenomenon of sightless minmaxing and
A/B testing, and a society which is at large not equipped with the tools
necessary to face abstract dangers.
It is a situation in which we are powerless.
Reducing our attention to attention also
separates us from people suffering for other reasons, which not only
makes us even more powerless due to being fewer in numbers, but also due to
reducing our ability to find solutions which are acceptable for everyone.</p>
<p>Finally, we are not limited to fighting the pretty hopeless fight against
attention thievery, but we can engage in multiple ways to protect or even
extend our agency.
We do not need to do whole digital hermit thing, or built some
anti-tech bunker as it has become fashionable among rich entertainment
creators, but we are empowered to structure our living space in a way that
serves us.
Maybe we can even reclaim some of the awesome technology we
initially built to improve our lives out of the clutches of capitalism.</p>Diagnostics, communication and phenomenology2023-01-23T00:00:00+00:002023-01-23T00:00:00+00:00Marceltag:deaddy.net,2023-01-23:/diagnostics-communication-and-phenomenology.html<p>It is almost a meme in coaching, consulting and also just general problem
solving in various areas of life and business:
To outsiders it is pretty obvious what the issues are, whereas the insiders
seem to be oblivious to them.
Depending on the severity, you can sometimes even tell them …</p><p>It is almost a meme in coaching, consulting and also just general problem
solving in various areas of life and business:
To outsiders it is pretty obvious what the issues are, whereas the insiders
seem to be oblivious to them.
Depending on the severity, you can sometimes even tell them and they will
still not see it.
Sometimes they can even spot the exact same problems in other people and still
do not see them in themselves.</p>
<p>Now, there are three ways to approach this, two of which are pretty well known,
but also a third one we can and should engage in more.</p>
<h2 id="this-is-just-the-nature-of-business"><a class="toclink" href="#this-is-just-the-nature-of-business">This is just the nature of business</a></h2>
<p>The most common way is in accordance to the old proverb:</p>
<blockquote>
<p>Give a man a fish and you feed him for the day.
Teach a man how to fish and you lose a recurring revenue stream.</p>
</blockquote>
<p>Just buy my consulting and have an outsider tell you what is wrong.
The price just has to be high enough so you have an incentive to listen to
them.
The conflicts of interest in these situations are pretty obvious, and, well,
we see in the corporate world how large consulting businesses usually just
siphon money away without actually doing something useful. <sup id="fnref:consulting"><a class="footnote-ref" href="#fn:consulting">1</a></sup></p>
<h2 id="learning-to-take-a-step-back-and-ego-control"><a class="toclink" href="#learning-to-take-a-step-back-and-ego-control">Learning to take a step back and ego control</a></h2>
<p>Many of these problems can be understood, once you can take a step back, get
your ego in check and can just for a moment to some extent get the outsiders
perspective.</p>
<p>This is a good ability to cultivate, and we have millennia of literature
elaborating its importance and how to cultivate it.
Yet, it is a skill lost on many, if not most, if not almost all people.
Especially in corporate settings this becomes a problem, because only one
person bound up in their ego can bring the whole process to a halt.</p>
<p>What good is this approach in situations, where the required skill is not
present?</p>
<h2 id="understanding-and-documenting-the-phenomenology"><a class="toclink" href="#understanding-and-documenting-the-phenomenology">Understanding and documenting the phenomenology</a></h2>
<p>Now, phenomenology seems to be one of those words people have written too much
about, so let us do language properly and just look at the word:
<em>φαινόμενον</em> "that which appears" and <em>λόγος</em>.
Phenomenology is just the study of how things appear or present themselves to
us.
In general, we as a society, strive to objectively diagnose issues.
Part of the objective point of view is that it is an outsider's
perspective and then we use tools to inspect whatever issue we are dealing
with.
It is just not how things present themselves to us us by default.</p>
<p>Taking back a step is a skill which needs to be sufficiently trained, and then
we still need to do the - often cumbersome - objective assessment of the
situation, only to then come up with a plan to change things and properly
operationalize this.
These are several pretty difficult things we have to do there, which is also
reflected in the reality that most often these things just do not happen.</p>
<p>On the other hand, if we have an subjective description of what typically is
experienced in certain situations or in the presence of certain issues, we can
skip directly to our own current experience.
In general this does not suffice for a good diagnosis, but speeds up the
process dramatically.</p>
<p>Superficially the main issue is that nobody writes down and documents the
phenomenology.
But this is not without reason.</p>
<p>Proper awareness of one's own experience is a skill, which has to be honed.
Without it we are unable to write down what we experience, and without it we
are unable to properly use other people's description of the phenomenology.
Indeed, when looking at the development of literature in applicable fields, we
usually see a slow increase in awareness and refinement of documented
phenomenology, but it usually takes several generations of experts to arrive
at a good description.</p>
<p>Also, people untrained in the mental disciplines have a tendency to run
away with it, leading to them believing they have cancer or any other
illness they searched on the internet.
Which is why we still need to embed it in some objective framework.</p>
<h2 id="communication-and-phenomenology"><a class="toclink" href="#communication-and-phenomenology">Communication and phenomenology</a></h2>
<p>There is another reason why we need to step up our game when it comes to the
description of phenomenology:
The subjective experience precedes the objective analysis.</p>
<p>This is well known by the advertisement and consent industries, and in fact,
it is the first thing you learn when learning how to do good advertisement or
propaganda.</p>
<p>Advertising never works by actually giving you an objective solution to an
objective problem.
Advertising works by giving a feel good solution to a feel bad.</p>
<p>We people in the harder sciences do not vibe with that well, and as a
consequence have tried to steer away from any such subjective description.
But indeed, this is also just because in our subjective experience, all
subjective descriptions are made by dishonest people trying to sell you junk,
and fools as we are, this makes us a little bit dishonest with ourselves.</p>
<p>As a consequence, people, companies and society are being kept imprisoned in
their respective situations, because all they need is the next supplement, the
next software product, another year of consulting or just some other
initiative allowing people to display their virtuous life.
Whenever we engage with a feel good solution, this takes some time.
Most of the quick hack solutions do not increase your awareness of the
problem, but just dampen some of the pain, and in the end you are as smart
as before, you just pissed away a significant amount of money and, worse,
time.</p>
<p>We do not want to do dishonest advertising for things that work, but by
ignoring the phenomenology, we give our work an unnecessary disadvantage
compared to shills and people who place their self-interest above that of
society.</p>
<h2 id="phenomenology-plausible-deniability-and-rationalization"><a class="toclink" href="#phenomenology-plausible-deniability-and-rationalization">Phenomenology, plausible deniability and rationalization</a></h2>
<p>Plausible deniability is something we learn to catch on early in life; I am no
developmental psychologist, but it seems to me almost like a phase where
children try to do things which can not be objectively traced back to them.
At least it is some kind of trope in youth literature and many criminal
stories revolve around the theme that the protagonist already knows
what is up, but lacks the necessary objective proof.</p>
<p>During our education we learn to dismiss any gut feelings and wait for
objective proof.
In particular, we learn to dismiss any gut feelings, and instead of being
inquisitive about it, objective proof becomes something we are being handed
from authorities and it is not something we could possibly hope to attain for
ourselves.
This of course is a weakness, and as all weaknesses it is being exploited;
just because we are being educated and admonished to leave any research to a
mystical guild of professionals, even when you are exactly the professional.</p>
<p>We all are familiar with the situation:</p>
<blockquote>
<p>It walks like a duck.
It swims like a duck.
It quacks like a duck.
We have to wait for legal to come back to us before we can say it is a duck.</p>
</blockquote>
<p>Many things happening under the umbrella of plausible deniability
still have consequences which can be experienced, and thus, can be described.
A classical and also current example are companies which are going to lay off
large amounts of people.
While only leaks of CEO or HR mails could really prove such things, there is a
pattern to the subtle or not so subtle shifts in internal communication.</p>
<p>Should you really be in denial about such things?</p>
<p>In some instances the antagonist is not external, but we are in conflict with
ourselves.
We do things that we on some level might even perceive to be not right, but we
can make wonderful explanations why this behaviour is correct.
Such rationalizations can sometimes be overcome by adding further experiential
criteria.</p>
<p>You are dieting for fat-loss, not very <a href="https://deaddy.net/on-more-successful-dieting.html">successfully</a>, but can still
justify eating caloric dense, but healthy snacks like nuts and bananas between
meals?
But at least you are not hungry all the time?
Well, guess what.
There is a secret they do not want you to know about:
Part of fat loss is experiencing hunger. <sup id="fnref:hunger"><a class="footnote-ref" href="#fn:hunger">2</a></sup></p>
<h2 id="actually-describing-the-phenomenology"><a class="toclink" href="#actually-describing-the-phenomenology">Actually describing the phenomenology</a></h2>
<p>As with everything, both the awareness and the description of phenomenology
need to be trained, and well, formal training for this seems to be
non-existent in this society.</p>
<p>I think one of the major issues we had in the more recent past was the
communication of extremely dangerous but also very abstract risks, like
climate change or a pandemic.
With climate change we have the very scary prospect of losing (having lost)
stability in a dynamical system and with a pandemic you face the inevitability
of an exponential function.
As mathematician I am viscerally frightened by these things.
But genpop?
I think not so much.</p>
<p>Now, how do we communicate such a risk to people without the years of
necessary training ?
Especially when at first it seems like nothing is going to happen?
Nobody listens to "well, this is an exponential process, just look at the
chart and the quotient of any two consecutive data points".</p>
<p>Well, by acknowledging that at first it does not seem like anything is
happening.
I think we did lose quite a lot of acceptance as some of us have fallen astray
and followed the dark path of advertising and tried to dramatize the effects.
When all your credibility comes from objectivity, you can not afford to risk
it by bending the facts, even if it seems to be for a good cause.</p>
<p>A better start could be something like "well, at first it will not seem like
much is happening, but it is a devious process which grows upon you".
People have surprisingly long history of believing into invisible things being
at work, so to them this might even sound less weird as it might sound to
you.</p>
<p>It seems <a href="https://deaddy.net/write-down-the-obvious.html">obvious</a>, it is <a href="https://deaddy.net/embrace-boredom.html">boring</a>.
But it is the first thing people notice, and still a level on which they can
relate, without any shared academic background.</p>
<h2 id="a-more-refined-approach"><a class="toclink" href="#a-more-refined-approach">A more refined approach</a></h2>
<p>Clearly, one should not turn completely away from objective criteria and
towards subjective experience.
This has already happend often enough and vice versa, but it is time to
develop a more nuanced and comprehensive framework, which not only
encompasses the objective or the subjective side, but both, each with a
specific purpose.</p>
<p>As argued, I think this could</p>
<ul>
<li>improve the speed at which we diagnose problems</li>
<li>empower people and make them less dependent on external diagnostics</li>
<li>get rid of a few of the bugs in our societal system</li>
<li>improve communication between science and mortals</li>
</ul>
<p>I suspect we could use a more formalized approach to the subjective
perspective and possibly those already exist and I am just not familiar with
them (you know how to <a href="/about.html">contact</a> me).
On the other hand, I do do not see how it would differ from increasing
awareness, and we have extensive literature on this.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:consulting">
<p>Consulting or coaching can be a good thing, when you have well
defined constraints or problems to solve, or probably even more important,
need to clarify the nature of the problem. <a class="footnote-backref" href="#fnref:consulting" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:hunger">
<p>If you are not really active in the fitness space, this is a
frequent problem and it is pretty easy to distract oneself with all the
technical details, when in the end of the day you just need to be hungry
most of the time.
But "lose fat without being hungry with my new diet" sells better than "be
miserable for six weeks to look a tiny bit nicer in the end". <a class="footnote-backref" href="#fnref:hunger" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Embrace boredom2023-01-05T00:00:00+00:002023-01-05T00:00:00+00:00Marceltag:deaddy.net,2023-01-05:/embrace-boredom.html<p>Boredom used to have a pretty bad reputation, and while it is slowly clearing
up, I think there is still some way ahead of us to fully appreciate boredom.</p>
<p>Boredom is what we experience when our mind searches for things to do and
to occupy itself with.
It is inherently …</p><p>Boredom used to have a pretty bad reputation, and while it is slowly clearing
up, I think there is still some way ahead of us to fully appreciate boredom.</p>
<p>Boredom is what we experience when our mind searches for things to do and
to occupy itself with.
It is inherently not a pleasant feeling, compelling us to do something about
it.
Evolutionary speaking this is beneficial, as it compels us to do things, other
than just sitting around idle as long as we are fed, and improve our
position or situation in the long run.
However, the predatory attention economy is taking advantage of this trait and
tries to trap us in the engagement loop. <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<p>Consequently, being able to tolerate boredom is what allows us to escape
engagement and act on our own volition. <sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup></p>
<p>For long I wondered if there is an additional function to boredom, for I have
always found it to almost be a necessary condition for true productivity or
progress to happen.
I do not know if there is such a function, but also, it is not necessary,
because we can make the following observation:</p>
<p>For us to experience and feel boredom, we need to first achieve some level of
mental emptiness and disengagement, and free ourselves from occupation.
Thus boredom is a useful indicator.</p>
<p>We can use this to our advantage, namely by cultivating boredom;
just like when we cultivate plants, we do not grow themselves, but only
prepare the soil and circumstances for them to grow, we can adjust our
own circumstances to allow boredom to come up.
This seems to get the job done better, than trying to explicitly going for
productivity. <sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup></p>
<p>In the end, there does not seem to be too much to boredom.
Fitting.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>This seems to be very similar to the food industry, which profits from
us eating cheap sugars and fats.
There does not need to be an evil plan, we just arrived in this situation
by AB-testing optimizing for profit, and stay there by people defending
corporate interest. <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>In the spirit of above footnote, tolerating hunger is what allows us to
break free from the unhealthy food industry.
This might also give us a hint how long of a uphill battle we are facing
here, given the attention economy is still pretty young. <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:3">
<p>Possibly the analogy would be more accurate with intertillage which is
planted to improve soil composition. <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>On more successful dieting2022-12-31T00:00:00+00:002022-12-31T00:00:00+00:00Marceltag:deaddy.net,2022-12-31:/on-more-successful-dieting.html<p>It is new years eve or something like that and everyone is again thinking of
really losing weight this year.
Or really gaining muscle.
And just as it happens, I procrastinated long enough on this post to post it
on this fateful date, lol.</p>
<p>In this post I do not …</p><p>It is new years eve or something like that and everyone is again thinking of
really losing weight this year.
Or really gaining muscle.
And just as it happens, I procrastinated long enough on this post to post it
on this fateful date, lol.</p>
<p>In this post I do not really want to delve into the nutritional mechanics of
dieting, as on one hand, it depends on what a certain diet is supposed to
accomplish (fat loss, weight gain, managing gas, spiritual goals, there is an
infinite number of reasons why people embark on a specific diet), and on the
other hand, usually the application side of things is mechanical and
well understood.</p>
<figure style="width: 254px; display: inline-block; float: right;">
<img src="/images/fat-person-on-scale.jpg"
alt="fat person on a scale, ai generated and gimped"
width="250px">
<figcaption>
I feel you
</figcaption>
</figure>
<p>I am mainly looking at things from the perspective of fat loss, as it
is one of the more frequent and important issues people struggle with, and I
can draw from first hand experience.
It does however generalize fairly well to all other sorts of diets, such as
very skinny persons that are in dire need of muscle gain, as both those who
are too skinny and those who are too fat people emerge from and end up in
similar social structures.</p>
<h2 id="getting-the-mechanics-out-of-the-way"><a class="toclink" href="#getting-the-mechanics-out-of-the-way">Getting the mechanics out of the way</a></h2>
<p>Losing fat is simple, but apparently not easy.</p>
<p>Depending on your ability to operationalize things, the whole dieting concept
fits on a <a href="https://github.com/Deaddy/post-it-blog/blob/master/macros.rst">post-it note</a>, but if you want a bit more
insights, get Lyle Mc Donalds Book "Flexible Dieting" and just read it.
I am not making money of it, it's just a somewhat unexciting problem and has
been for all practical purposes solved with that book.</p>
<p>Managing the logistics of a successful diet might be a different problem, as
obtaining quality food usually means you have to cook yourself and pack lunch,
because cafeterias and restaurants suck, unless specifically targeted at
bodybuilders and strength athletes. <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>
While this might involve a little bit of planning, it is still very mechanical
and a problem which a competent coach or housekeeper can solve quickly.</p>
<h2 id="psychological-factors"><a class="toclink" href="#psychological-factors">Psychological factors</a></h2>
<p>Now, to find out where people struggle, it is easiest to see what is exploited
the most to sell shit like dieting programs, apps and gadgets:</p>
<ul>
<li>motivational alpha drivel</li>
<li>discipline</li>
<li>insecurities about weight loss and your own bodyweight</li>
<li>quick fixes, this one weird trick and hacks</li>
<li>giving up and staying fat</li>
<li>pure ignorance about the mechanics</li>
<li>the opposite of the above and the complete reduction to the mechanics</li>
<li>inability to operationalize a diet and go from "I need to eat less and I
should eat these things" to having food on the table</li>
</ul>
<p>The last point is where any halfway decent coach can help you, or some dieting
app, or some dieting app subscription of some halfway decent provider.
It's annoying and easily outsourcable.</p>
<p>The third to last point is pretty much solved by "just read Lyle's book".</p>
<p>The remaining points are where the real struggle lies and is usually never
addressed in an adequate way.
In some sense this is not much more interesting than the mechanical part of
dieting, as it all boils down to "be more detached, keep your ego in check and
increase your emotional awareness", but this seems to be a discussion
completely lost on the fitness culture.</p>
<p>Most of the approaches can be found on a spectrum which spans on one end the
very aggressive grind hustle "suck it up it is your own fault that you are
fat" kind of motivational stuff - sometimes nicely dressed in more athletic
terms, as fat does not lift weight.
On the other end of the spectrum we find the fat acceptance movement, where we
even find denial of health impacts of being overly fat and everyone who says
so is fatphobic subhuman trash.</p>
<p>Unsurprisingly, both extremes are completely wrong but contain nuggets of
truth and actually are helpful to <em>some</em> people, but in general harmful,
especially when people slide into echo chambers pertaining to one of the
extremes.</p>
<p>So if you find yourself amongst those people for whom this is helpful,
congratulations.
Maybe this post will then lead you to a clearer understanding what is the
thing about your approach that works and help you refine your approach.</p>
<h3 id="fat-acceptance-guilt-and-shame"><a class="toclink" href="#fat-acceptance-guilt-and-shame">Fat acceptance, guilt and shame</a></h3>
<p>Guilt and shame are really good at making you feel better about yourself, when
you can sent someone else down the guilt trip.
But feeling guilty and shameful do not really help you accomplish anything,
especially they do not help in ceasing with behaviours or establishing better,
productive behaviours.
This is wonder- and woefully demonstrated by millions of smokers, alcoholics,
addicts, micromanagers and, of course, fat people.</p>
<p>It is almost a tragic trope, but something probably everyone who is "more
than a little bit pudgy" is familiar with:
Feel guilty and ashamed because you are fat?
No problem, just eat a chocolate
bar and you feel better.
It works every time.
Sad thing is, only for a very short time and it makes the problem worse.
Also people make fun of you, and you maybe even make fun of you yourself, or
at least you feel very ashamed and guilty, because if you read it out loud it
sounds so fucking stupid.</p>
<p>It's a vicious cycle and very hard to escape.</p>
<p>But you can escape.</p>
<p>Part of the escape plan is acceptance and in this sense fat acceptance is a
movement which does helpful things for a number of people.</p>
<p>Accept that you are fat.</p>
<p>And probably it is not even your fault.
Well, it is usually not "muh genetics", but ostensibly you have not been
provided with the tools necessary to deal with life in a healthy way, lest you
would not have ended up in this situation.</p>
<p>There is a multitude of reasons why you could end up in such a situation, e.g.:</p>
<ul>
<li>you likely never learned formally what good food is and what is bad food</li>
<li>you grew up in a socially unhealthy family and eating was your emotional
coping mechanism</li>
<li>it only happened that due to life and work stress you suddenly found
yourself not moving around a lot and also stress eating sometimes and
drinking a lot</li>
<li>your parents grew up in poverty and now think of plenty food as something
very holy and there is always too much food for everyone</li>
<li>how the fuck should 18 yo you have known that something that tastes so
good can not be good for you in the long run</li>
</ul>
<p>And of course, even assuming you did try to get out of the situation, it took
a while until you found reliable information (as laid out in Lyle's book), if
any, because most of the shit you find are fad diets or people shilling
their programs.</p>
<p>Even medical professionals are usually pretty uneducated about proper
nutrition, as "nutrition for healthy people" is traditionally not what you
learn about in medical school, where you usually learn to treat sick people.
There, nutrition is usually an afterthought, as for most of the time you only
needed them to survive for a while until they got better.
People eating too much of the wrong stuff is still a young pathology.</p>
<p>Are you the person stuffing the food in your face?
Definitely.
But you really do not deserve all the blame for this, as you have the odds
stacked against you learning and ingraining appropriate eating behaviours from
day one.</p>
<p>Actually, sometimes I wonder why so few people are not fat, but turns out,
most (i.e. more than 50% of) people simply turn fat over time at different
rates.
It's not your metabolism that slows down at thirty, it's just that it took ten
years to accumulate enough fat for you to notice.</p>
<p>And this might be a good reason to see at the other side of the spectrum.</p>
<h3 id="motivational-alpha-grind-hustle-drivel"><a class="toclink" href="#motivational-alpha-grind-hustle-drivel">Motivational alpha grind hustle drivel</a></h3>
<p>This is basically the antithesis to the fat acceptance movement and guilt
shaming you into fat loss.
Usually also trying to sell you coaching, dieting plans or even fat burners
(those are still a thing), because, unsurprisingly, you are not shredded after
six weeks of following a diet, BUT IT IS YOUR FAULT.
But do not worry, we got you covered with our new trademarked AI assisted
dieting plan.</p>
<p>Again, as much as there is wrong with it, there exists a kernel of truth.
As noted, most people accumulate enough fat to notice at some point, but,
well, you have to notice that you are fat.
And this is becoming increasingly harder, as the majority <sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> of people is
fat, so very likely you do not look so different from your peers.</p>
<p>Here is a simple trick to find out if you're not fat:
Is your sixpack still showing?
If so, you are probably not fat. <sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup>
But what if you're just not sixpack lean?
Well, harder to tell.
But in the world of hardcore trainers, this is much simpler and the question
whether or not you are fat reduces to the existence of a visible sixpack.
To get lean of course, you also need all the other goodies, such as veins on
your lower abs and striations somewhere, but I digress.</p>
<p>And sometimes this is really helpful.
Noticing the problem is the first step to solve it, as nobody accidentally
goes from fat to lean, and it is even less likely that somebody just builds
muscle accidentally in the process.
Disgust can be a good motivator, and for some people shame avoidance is a, if
not the, major driver of their actions.
Leveraging this does get the job done for some people.</p>
<p>But.
But as noted before, shame is a tricky thing and definitely not an approach
you can use on all people, as it will cripple some, and well, this then leads
to the other side of the spectrum, the fat acceptance movement.</p>
<p>Also probably it is not a healthy way to deal with things anyway?</p>
<h3 id="the-evidence-based-approach"><a class="toclink" href="#the-evidence-based-approach">The "evidence based" approach</a></h3>
<p>A third big group kinda missing the point is the evidence based crowd.
Not only is their paper exegesis usually without any substantial understanding
of neither the underlying mechanics nor the way statistics work, but their
training programs and diet plans end up being average incarnate.</p>
<p>Which is a good starting point, but as noticed, not really the problem fat
people struggle with.</p>
<p>The approaches are usually<sup id="fnref:evidence based coaches"><a class="footnote-ref" href="#fn:evidence based coaches">4</a></sup> not as insane as those of
the hardcore crowd, but still oblivious of the reality most people live in.</p>
<h3 id="the-skinny-side-redux"><a class="toclink" href="#the-skinny-side-redux">The skinny side redux</a></h3>
<p>Skinny people have roughly the same issues, but well, they are just on the
other side of the inequality.</p>
<p>Again they usually do not know how to eat properly, but instead of eating far
too much, they eat to little.
How could they have known, when they grew up in a household where a piece of
bread counts as a meal, or you eat one plate of pasta and call it a day.</p>
<p>As nobody is muscular, they have no idea how much muscle actual healthy people
carry, and the perception of being fine is often confirmed by the visibility
of some muscles, as there is no fat which could hide them.</p>
<p>I suspect the grind hustle bubble is pretty much the same; especially as
making someone gain muscle who does not need to avoid fat gain is technically
much easier than making someone lose fat; GOMAD is not just a meme, but
actually works, and is at least physiologically sensible.
But maybe not psychologically, which truthfully took me a while to realize.</p>
<p>As the saying goes, you can't argue with results and thus
sensible ways are dismissed, even when a more moderate approach would lead to
better adherence and ultimately to better results down the road.</p>
<p>On the acceptance side, this then becomes the "reject natural" bubble, in
which people just assume anyone with a modicum of muscle is on gear, making
the natty or not question a favorite topic, and if the bubble is male, the
incel sphere is very close.</p>
<h3 id="advertising-and-more-general-society"><a class="toclink" href="#advertising-and-more-general-society">Advertising and more general society</a></h3>
<p>As if everything wasn't already hard enough, if you are eating more mindfully,
you very likely have to put up with more shit in your social circle.
Especially if your goal is to lose fat and maybe even gain some muscle.</p>
<p>There is a trillion dollar industry pushing cheap, fattening foods into every
corner of the world, and targeting mostly children and poor people with their
advertising for decades.
This lead to a grassroots acceptance and normalization of such foods, and it
has become a stereotype to be made fun of when ordering a diet soda at a
restaurant.
Or to not go out to a restaurant every month or get takeout on a regular
basis.</p>
<p>Cooking has been degraded from a everyday activity to a special occasion.
And with special occasions you also get special issues.</p>
<p>On the other end of the media extremes, you see an overemphasis on expensive
organic local health foods, shaming you for using produce from the
supermarket and advocating a lifestyle which can only be sustained by the
rich.</p>
<p>In fitness circles, the end of year festivities like Christmas (and
thanksgiving in the US) are kind of a meme, but, looking at the whole year of
nutrition, those few days should not matter much.
Even if you were to put on a pound every season, and be in homeostasis the
rest of the year, over 60 years this would only mean 30kg weight gain.
Which is not necessarily nice, but also not problematic.
The weight gain rates we usually are struggling with are much more dramatic.</p>
<h2 id="embracing-positivity-i-guess"><a class="toclink" href="#embracing-positivity-i-guess">Embracing positivity I guess</a></h2>
<p>So, I think obviously we can not get away with the health at every size stuff.
Our bodies need muscle, and they likely need more muscle than you think they
need.
And we should not be too fat, and have some strength training and some
endurance training on a regular basis.</p>
<p>The road to a healthy lifestyle is a long one and you definitely do not need
to find the optimum quickly.
Depending on what is at stake, the approaches need to differ, which usually
translates to "the fatter you are, the more drastic interventions are
necessary".</p>
<p>But it is really hard to make progress if</p>
<ul>
<li>you are in denial about your situation, or</li>
<li>you are deeply ashamed about your situation.</li>
</ul>
<p>Which is kind of a truism for every situation, not only weight loss, but with
weight loss we face extremely warped values in society and are being sent
mixed signals by almost everyone.</p>
<p>Trying to satisfy the need for some practicality, I think we end up with three
categories of interventions:</p>
<ul>
<li>if you are massively overweight, you have to treat it as if you were sick;
your medical professionals will probably agree and support you in this
endeavor.
You are probably severely limited in the exercises you can do, and
overexertion can be truly risky.
Acknowledge that you not only have to heal the physical damage, but also
deal with the emotional trauma that got you into this situation and the
trauma that this situation brought to you.</li>
<li>if you are only slightly overweight or just a bit unhappy with your body,
getting into some exercise routine will be much more important and helpful
than doing the dieting stuff; it can be a nice journey and you have time and
can experience many improvements.
Strength training would be favorable over endurance training, but you can
can afford the luxury of trying out things and do what is fun.
The exercise itself will probably not bring you fat loss, but be more
effective in impact of quality of life and health outcomes, and maybe help
with motivation for more goal oriented eating.</li>
<li>if you are moderately overweight, you should make an effort both on the
dieting and the exercise front;
exercise will have the bigger impact on your health, but to move the needle
you need to diet.</li>
</ul>
<p>I suspect you can use the
"pathological/moderate/nice-to-have" categories also for non-fatloss goals and
then examine in which you truly belong and hopefully find a more suitable
approach, which allows you to successfully continue on the journey, instead of
making you feel like a disappointment by failing unrealistic standards.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>Even at olympic training centers (targeted at all sports and "sports"
present in the olympics, not only weightlifting) the food is pretty much
your standard cafetaria food with a bit more salads and vegetables. Turns
out when you are <a href="https://deaddy.net/on-the-10k-hours-rule.html">gifted</a>, you have more leeway than us mere mortals. <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>In Germany, according to the <a href="https://www.rki.de/DE/Content/Gesundheitsmonitoring/Themen/Uebergewicht_Adipositas/Uebergewicht_Adipositas_node.html">RKI</a>, 67% of male (assigned at birth)
population and 53% of female population are overweight by BMI.
A staggering 23% and 24% respectively are adipose.
Yes, BMI does not work well when you have muscle, but even at gyms
muscular people remain a rarity. <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:3">
<p>Having a sixpack is not as reliably as one could hope to be; more
feminine people can often reveal a sixpack while still carrying a good
amount of fat around their hips and legs, but maybe it is just that:
A <strong>good</strong> amount of fat.
In males a worse condition seems to sometimes occur, where the visceral
fat is still there and you have a bulging belly, but the subcutaneous fat
is gone, so this bulge shows a sixpack.
That might be a bit more worrysome. <a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:evidence based coaches">
<p>Well, usually.
Sometimes it is also just the alpha egghead stuff wrapped in the package
of a skinny dude with glasses, with insane energy deficits and diets
requiring impossible amounts of precision to make weight for completely
irrelevant competitions.
Usually accompanied by the same lackluster collection of variations of the
main lifts targeting all possible positions, so you can roll out the same
cookie cutter template to all of your athletes for only 200 bucks a month.
But well, this possibly warrants another post. <a class="footnote-backref" href="#fnref:evidence based coaches" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
</ol>
</div>while read line in bash2022-10-30T00:00:00+00:002022-10-30T00:00:00+00:00Marceltag:deaddy.net,2022-10-30:/while-read-line-in-bash.html<p>I always forget about this thing and the only reason I do not remember
is because I have not written it down somewhere.
And it is so embarrassing to ecosia it.
At least now I can look it up on my own blog, slightly reducing the amount of
embarrassment</p>
<p>The …</p><p>I always forget about this thing and the only reason I do not remember
is because I have not written it down somewhere.
And it is so embarrassing to ecosia it.
At least now I can look it up on my own blog, slightly reducing the amount of
embarrassment</p>
<p>The problem is simple:
You have some command which does multiple lines of output and you need to do a
little bit more complex operation with each of the lines, so you can't just
use <code>xarg</code>.</p>
<p>Now, one could work around with <code>for</code> and some <code>IFS</code> magic, but I never get
this working right.</p>
<p>And the pattern is really simple:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="nb">command</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="nb">read</span><span class="w"> </span>line
<span class="w"> </span><span class="k">do</span>
<span class="w"> </span>some_other_command<span class="w"> </span><span class="nv">$line</span>
<span class="w"> </span><span class="k">done</span>
</code></pre></div>
<p>The command of course could be a longer pipe of commands.
Note that <code>line</code> is just some arbitrary variable name and is not some sort of
directive.</p>
<p>In particular, with some awk magic we can quickly build more complex commands.</p>Why you should start a blog2022-08-12T00:00:00+00:002022-08-12T00:00:00+00:00Marceltag:deaddy.net,2022-08-12:/why-you-should-start-a-blog.html<p>The other day I asked a friend for their blog URL and they did not have a
blog.
I was shocked.
I thought every intellectual has a blog (or some other outlet) nowadays, but I
was wrong.
Because having a blog is such an <a class="reference external" href="https://deaddy.net/write-down-the-obvious.html">obvious</a> thing.</p>
<div class="figure align-right" style="width: 260px">
<img alt="Medieval librarian in front of a laptop" src="/images/why-you-should-start-a-blog-0.jpeg" />
<p class="caption">Sometimes blogging feels anachronistic …</p></div><p>The other day I asked a friend for their blog URL and they did not have a
blog.
I was shocked.
I thought every intellectual has a blog (or some other outlet) nowadays, but I
was wrong.
Because having a blog is such an <a class="reference external" href="https://deaddy.net/write-down-the-obvious.html">obvious</a> thing.</p>
<div class="figure align-right" style="width: 260px">
<img alt="Medieval librarian in front of a laptop" src="/images/why-you-should-start-a-blog-0.jpeg" />
<p class="caption">Sometimes blogging feels anachronistic (picture kindly provided by craiyon)</p>
</div>
<p>Blogs have several properties, which make them a good choice in many
instances.
And since you read this on my blog, I have to assume you might have
sufficiently interesting things to write about, so this is the first reason
why you should write a blog.</p>
<div class="section" id="blogs-are-cheap-and-hard-to-monetize">
<h2>Blogs are cheap and hard to monetize</h2>
<p>A blog does not need much to run.</p>
<p>Ideally you host it yourself and use some file based backend, because this
makes for even easier backup, but e.g. when you're a student or have no other
income, this might be prohibitively expensive.</p>
<p>But there are thousands of free ways to host a blog, e.g. github or gitlab
pages and if you do not use something like WordPress, migrations are easy and
you can probably run your blog at close to no cost forever.</p>
<p>Furthermore, the golden era of blogs is over, and nowadays "starting a blog"
is nothing anyone considers a business model anymore.
It probably can still be profitable, but if you were to create a business, you
would not choose to start a blog anymore, but probably some kind of niche
landing page with affiliate links.</p>
<p>Not only does blogging itself not work well as a business anymore, but also it
is not that great of a sales funnel, as those have basically shifted to video
platforms. <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a></p>
<p>Being cheap and non-commercial does have several benefits:</p>
<ul class="simple">
<li>there is little pressure to create new content, as nothing is wasted, which
can increase the signal-to-noise ratio</li>
<li>it's easy to take breaks or even suspend it when you are not actively
writing anymore</li>
<li>you have fewer incentives to write bad content, like unnecessary product
reviews or incomplete teasers to upsell for your coaching or educational
program or whatever</li>
<li>there is not really a cost associated, so you have the freedom to play
around with things and can post things you are not totally sure about</li>
</ul>
<p>Last but not least, being cheap is nice by itself.
I am tired of paying.</p>
</div>
<div class="section" id="blogs-are-low-friction">
<h2>Blogs are low friction</h2>
<p>You can just write a post and it can stand for itself.
With stuff like tags you even can get some rough automatic categorization of
your posts, and then just adding a simple list as archive makes for a pretty
pleasant retrieval experience.
No fucking searches, no fucking non-linear timelines, no fucking
recommendation engines.</p>
<p>Also you do not have to put in much effort to bundle everything in a cohesive
package.
To write a long thesis or book, you have to put in a lot of work to make it
flow smoothly and make it a pleasant experience, besides having enough to say
on a given topic to fill a book.
Which most people (including book authors) don't, resulting in many books that
should have been blog articles and are only filler fluff, repetitions and
repetitions.</p>
<p>Something similar could be said about more traditional homepages.
Blogs are more like a pile of stuff and you can just pick whatever you like.
However, when you do not really have a singular focus, you end up with many
many subcategories, and it is cumbersome trying to reconcile those in a more
structured approach.</p>
<p>Blogs are basically object stores, where you have content and some metadata to
retrieve it.
It's easier to scale than file systems, where things have to be hierarchical
in some sense.</p>
<p>And if there really is a cohesive topic, you can always just gather all the
posts belonging to it and create a miniseries or put those things on a
separate page.</p>
</div>
<div class="section" id="blogs-have-a-preselection">
<h2>Blogs have a preselection</h2>
<p>With blogs, your audience builds organically and unless you make it to
hacker news, there is very little influx of inconsiderate people.
You can assume a little bit that readers will get accustomed to your writing
style and lingo, and more importantly, you can assume any level of competency
you like.
Your blog can be very basic, or you can work with very abstract foundations.
You can be more nuanced, as you can expect your audience to understand
quantifiers and their implications.</p>
<p>You can get pretty much right to the heart of the matter, if you like, or at
least you do not have to preface every post with a introduction to Bayesian
statistics or an overview of the von Neumann architecture just because you
want to talk about clusters of computers.</p>
<p>Also, you do not have to convince the reader, which is another reason why many
books exceed the appropriate length by far.</p>
</div>
<div class="section" id="blogs-are-easy-to-backup-and-maintain">
<h2>Blogs are easy to backup and maintain</h2>
<p>Preserving knowledge is one of the largest challenges we face.
The times where the internet did not forget have been.
Proprietary services are very forgetful, often on purpose.
If you can not download it, you have to expect to never see it again.
Often you even can not start a series anymore before it gets pulled from the
respective service.</p>
<div class="figure align-right" style="width: 260px">
<img alt="Medieval librarian with a head looking like a skull in front of a laptop" src="/images/why-you-should-start-a-blog-1.jpeg" />
<p class="caption">The prophecied death of knowledge (picture kindly provided by craiyon)</p>
</div>
<p>Blogs on the other hand, are easy to backup.
It's text.
Everyone can download it.
Usually you can simply print it to PDF, even though for proper rendering there
people should put in more effort than I did.
If your source is some repository, as a blog owner you can keep it around
pretty much forever.</p>
</div>
<div class="section" id="blogs-are-great-filters-for-yourself">
<h2>Blogs are great filters for yourself</h2>
<p>I do keep around almost all the posts I started writing, even though some of
them never finish.
Often for a good reason:
Once you start writing things down, you notice when things just don't sound as
nice as they did in their head.</p>
<p>Keeping old drafts around is nice though, because sometimes you find out why
an idea was actually bad and then you can finally let this article rest.
Or you sometimes find the reason missing that tied everything together.</p>
<p>I do have a pretty good memory, so in general I remember most of my good and
bad ideas, but I do not remember exactly when I had this idea, or in which
context.
Having a file which is roughly dated then is not only a nice reminder,
but I find it also interesting to see how much or how little one has learned
in the mean time, and just having some understanding of how long it takes for
oneself to discover things makes learning new things easier to plan out.</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Obviously I have no idea about these things, lest I would not be poor,
but I digress. Video content is just much more wasteful^w engaging per unit
of information and people on which sales work are much more likely to be
influenced by video</td></tr>
</tbody>
</table>
</div>
Percolation models2022-07-22T00:00:00+00:002022-07-22T00:00:00+00:00Marceltag:deaddy.net,2022-07-22:/percolation-models.html<p>Percolation, i.e. the study of things similar to liquids dripped onto porous
media, is an unnecessary fascinating topic.
But you do not need to dive into the mathematics <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> to enjoy this
fascination.</p>
<p>Morever, we find that percolation is a very useful model, and on top of that,
it …</p><p>Percolation, i.e. the study of things similar to liquids dripped onto porous
media, is an unnecessary fascinating topic.
But you do not need to dive into the mathematics <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> to enjoy this
fascination.</p>
<p>Morever, we find that percolation is a very useful model, and on top of that,
it easy to explain as well.</p>
<p>The main feature is that there are two phases, the subcritical phase and the
supercritical phase.</p>
<p>Imagine a drip coffee maker.
In the beginning, the coffee powder in the filter is dry, and nothing is
pouring into the can below the filter.
The coffee machine starts dripping water onto the coffee grounds, but each
drop seemingly vanishes inside the medium.
And this takes a while.
This is the subcritical phase.
There are isolated wet parts in the coffee grounds, but that's it.</p>
<p>But at some point something happens.
Then there is enough water in the filter that our drops do not simply get
soaked up by the coffee grounds, but they flow through the damp coffee grounds
and drip down into the can.
Suddenly everything is so wet, it seems that like very drop just immediately
flows through the medium.
This is the supercritical phase.
Now there are at best some isolated dry parts.</p>
<p>Criticality now is the phase transition itself.
Depending on the lingo, it could also be called singularity.</p>
<p>Assume now for some reason, we want to prevent coffee from forming in the can.
In the subcritical phase, we could simply scoop away the parts that just got
dripped on.
Or they just dry out, depending on the influx of water.
But in the supercritical phase, even if we were to scoop away those parts,
there would be enough fluid in the medium that coffee would continue to pour
down the can.</p>
<div class="section" id="examples">
<h2>Examples</h2>
<p>Now, we have all seen this in other areas of life.
Early stage pandemics follow the rules of percolation models.
At first there are only a few isolated infections, and as long as you can
somehow reduce the amount of water dripping into your coffee filter, you could
keep it at these isolated pockets and scoop out the wet parts until it dies
out.
It's the easiest, safest and cheapest way to fend off such a
catastrophe, but of course, requires rigorous effort on many fronts, which is
hard to sustain for genpop.</p>
<p>We are in much better luck on our own.
Our immune system also is like a giant coffee filter, and incoming pathogens
usually just dry out as they get defeated by our immune cells.
Only when they replicate too much for our immune system to catch up, we
actually get into trouble and enter the supercritical phase and become sick.</p>
<p>Knowledge is in some sense another nice example, as it also shows the limits
of this simple model.
Usually scientific advances or more nuanced views do not really have an impact
on our lives, until there is a sufficient saturation of the population.
Here we probably want to evolve the model a bit from one drip, to multiple
sources.
While knowledge spreads only from a few points, propaganda is like hosing down
the whole medium.
But since actors inside a population can move around and once they are wet,
they can start dripping at other points, things quickly become too complicated
to be captured in a simple percolation model.</p>
</div>
<div class="section" id="distinctions">
<h2>Distinctions</h2>
<p>Creating non-examples to a model is somewhat hard, because either they are
trivial or too artificial.
This is much easier with very overused memes, where people apply models to
things that do not fit the model.
And percolation models are not really overhyped.
Indeed, I mainly wrote this post, because I like percolation models and they
are not really known, so there is also not much to play us out.</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>btw. you can pretty straightforwardly solve the PME on manifolds with
conical singularities using the heat kernel mapping properties outlined in
<a class="reference external" href="https://arxiv.org/abs/1605.03935">https://arxiv.org/abs/1605.03935</a>
but then you're like done after 4 pages and wonder what to do with it</td></tr>
</tbody>
</table>
</div>
On podcasts during chores2022-07-14T00:00:00+00:002022-07-14T00:00:00+00:00Marceltag:deaddy.net,2022-07-14:/on-podcasts-during-chores.html<p>It's 2022.
It has become mainstream to listen to podcasts <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> while doing chores,
preparing food, ambulating, eating food, driving places and pretty much all
activities which do not require you to listen to something else or concentrate
a lot on a certain tasks.
It just seems to be free …</p><p>It's 2022.
It has become mainstream to listen to podcasts <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> while doing chores,
preparing food, ambulating, eating food, driving places and pretty much all
activities which do not require you to listen to something else or concentrate
a lot on a certain tasks.
It just seems to be free time to use on podcasts.
Furthermore decades of motivational gurus blathering about "turning your car
into an university with audio tapes" even attached some guilt to just wasting
your time on mundane tasks and NOT listening to something educational.</p>
<p>Of course, when something becomes mainstream, it can not be all that good.
Or as my advisor used to say:
"As my advisor used to say: 'There is no free lunch.'"</p>
<p>First of all, let us acknowledge, that in most instances, it is very likely
more time efficient to listen to most podcasts while doing something else.
Sure, there are exceptions in which we would be better off listening to the
podcast exclusively and take notes, but well, in our case we can assume the
above without loss of generality.</p>
<p>However, there are some things we might consider as downsides:</p>
<ul class="simple">
<li>we lose out on non-verbal time, which is critical for learning and problem
solving; by filling our day with podcasts, this could mean the only
non-verbal time is our sleep</li>
<li>suffering boredom is a good skill to have and the best defense against
the engagement with content (and then getting trapped in the feed of choice)</li>
<li>the time spent doing something + listening to podcasts feels more productive
than time just spent doing something, which in turn might reduce our
compliance in other situations</li>
<li>sometimes searching for something good to listen to just takes longer than
the task itself, forfeiting the time saving</li>
<li>it might introduce too much variety of topics, when we actually would need
to focus on one or two areas of our lives</li>
</ul>
<p>Clearly, this is no argument to never listen to podcasts while doing something
else.
This would be quite a radical approach and there are situations where it
actually would be contraindicated, like, for example, just having a ton of
really boring stuff to do we would otherwise just procrastinate on
indefinitely.</p>
<p>But it is worth noting that there are costs associated.
And sometimes these costs might be something we do not want to pay.
At least it might free us a bit of the productivity porn shackles of the 21st
century.</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>or streams or whatever. I do not care. You know what to listen to
while doing stuff. The only thing I probably exclude for this argument
would be music.</td></tr>
</tbody>
</table>
On the 10k hours rule2022-06-03T00:00:00+00:002022-06-03T00:00:00+00:00Marceltag:deaddy.net,2022-06-03:/on-the-10k-hours-rule.html<p>In my generation and upbringing in a culture, where end-stage capitalism grass
roots propaganda promised you great fortunes if you were only to apply
yourself, few things were taken as granted as the ten thousand hours rule:
To achieve excellency, you need to spend ten thousand hours with deliberate
practice …</p><p>In my generation and upbringing in a culture, where end-stage capitalism grass
roots propaganda promised you great fortunes if you were only to apply
yourself, few things were taken as granted as the ten thousand hours rule:
To achieve excellency, you need to spend ten thousand hours with deliberate
practice.
Not only is there a minimal amount of effort you need to put into getting
good, but the rule is an actual operationalization of deliberate practice:
to git gud, practice is the main determining factor.</p>
<p>Contrast this with the following quote from <a class="reference external" href="http://danjohn.net/2020/06/answer-to-a-question-that-keeps-popping-up/">Dan John</a> about great athletes:</p>
<blockquote>
Tommy Kono, the Olympic lifter, was world class in two years (basically)
after first touching the barbell. John Powell, the discus thrower, believes
that one should be world class within THREE years of focusing on one
thing…otherwise you are just not good enough.</blockquote>
<p>Weird.</p>
<p>Now, one could argue that the sport at the time did not really perform at the
same level as it did today, so it was relatively easier to get to the top.
Which is certainly true for some sports, but in strength based sports with
some drug control, this does not seem to be the case.</p>
<p>Furthermore we can observe this with any new generation of young athletes; the
people that end up at the top usually percolate there very quickly, regardless
of the quality of their training.</p>
<p>Not only is the 10k hour rule a busted myth, it is REALLY busted when it comes
to the top of the crop:</p>
<blockquote>
Overall, deliberate practice accounted for 18% of the variance in sports
performance. However, the contribution differed depending on skill level.
Most important, deliberate practice accounted for only 1% of the variance in
performance among elite-level performance. <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a></blockquote>
<p>The same also holds for non-athletic efforts, and indeed, Macnamara and Maitra
did try to replicate the infamous violin study which started this whole thing,
only to find that it does not replicate. <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
<p>This definitely does not invalidate the value of deliberate practice.
It is integral to getting better, and in general we tend to underestimate
how much better we can become by only a little practice, or, to be more
honest, how much we suck without practice.</p>
<p>Also I suspect when you put in ten thousand hours of deliberate practice into
something, it would classify as mastery by most standards.
But you might still be far away from world class, or even the national top.</p>
<p>Or to put it in catchy phrases:
Hard work beats talent, if talent does not work.
But talent does not need to work that much to beat your ass.</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Macnamara, Moraeu, Hambrick - The Relationship Between Deliberate
Practice and Performance in Sports: A Meta-Analysis, paywalled by bloodsuckers
<a class="reference external" href="https://journals.sagepub.com/doi/10.1177/1745691616635591">https://journals.sagepub.com/doi/10.1177/1745691616635591</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Macnamara, Maitra - The role of deliberate practice: revisiting
Ericsson, Krampe, Tesch-Römer (1993),
<a class="reference external" href="https://royalsocietypublishing.org/doi/10.1098/rsos.190327">https://royalsocietypublishing.org/doi/10.1098/rsos.190327</a></td></tr>
</tbody>
</table>
Write down the obvious2022-04-10T00:00:00+00:002022-04-10T00:00:00+00:00Marceltag:deaddy.net,2022-04-10:/write-down-the-obvious.html<p>I am somewhat fond of the concept of mantras, which are just short sentences
you say to yourself, in order to behave in a way that seems to work better
than what you normally would do.</p>
<p>One such mantra is "sooner is better than later" and helps to avoid
procrastinating …</p><p>I am somewhat fond of the concept of mantras, which are just short sentences
you say to yourself, in order to behave in a way that seems to work better
than what you normally would do.</p>
<p>One such mantra is "sooner is better than later" and helps to avoid
procrastinating on maintenance work, backups and similar annoyances.
Another helpful one is "trust the process", because we often tend to fiddle
around with things we should not fiddle around with, just because those faulty
lumps of fat in our heads always want something to do.</p>
<p>It is like a little meta habit, which helps you to behave in a certain way in
a multitude of situations.
Most people seem to be very weak at the meta game of life, so having short
sentences like these, which are easily memorizable and do not need any further
conceptualization, are very helpful.
I suspect this is also why we have a multitude of adages, namely because they
are helpful and provide a benefit.
Usually they also rhyme, such as one of my favorite adages
"Gewaltig is des Schlosser's Kraft, wenn er mit Verlängrung schafft", which
roughly translates to
"Tremendous is the metal worker's force, when he uses an elongation", making
them easier to remember and more likely to get into your mind in the right
situation.</p>
<p>I first encountered it in Tom Limoncelli's "Time management for system
administrators", where he calls such things mantras, which is also why I stay
with this terminology, until I have found a better one or reasons to do
otherwise.
And in some sense, it is the only place where I have ever read
about it.
Of course, we often find new mantras or adages, but I have not seen it
operationalized in this explicit way anywhere else.</p>
<p>Even though this seems to be a rather obvious concept.
But despite it being obvious and people benefitting from it all the time,
few people make active use of it.</p>
<p>To stay with the terminology, this leads to mantra I've found very useful:</p>
<p>Write down the obvious.</p>
<p>Just because something is obvious to you, does not mean it will be obvious to
others.
In fact, as any programmer or mathematician will attest, just because it <em>was</em>
obvious to you, does not mean it <em>is</em> obvious to you now.
And sometimes things are obvious, but you would have forgotten them.
It is a classical bonding experience for mathematicians to stare at a
blackboard for hours, until at some point you both decide that it is obvious.</p>
<p>This does not only hold true for science and engineering, but life in
general.</p>
<p>Many of the best practices seem totally obvious:</p>
<ul class="simple">
<li>don't wash dishes under running water</li>
<li>use git and a good open source ticket system</li>
<li>track your spending</li>
<li>keep a training journal</li>
<li>do some cardio and some weight training</li>
<li>brush and floss your teeth</li>
<li>don't drink sugary drinks (I guess unless you're underweight)</li>
<li>document processes and installations</li>
</ul>
<p>Not only does this greatly improve our personal lifes, but it also especially
in our professional lifes, which define our value as proper human being,
writing down the obvious is a key skill.</p>
<p>Every system administrator I know failed countless times to document
something, because it appeared obvious, just to bite their table a few months
later.
And almost any larger company or instituition has a back-breaking heritage of
outdated things that are being done the way they have always been
done.
Often there was a good reason, but the reason got lost.
Because it was just all too obvious to the people who instantiated this
process, and now it is possibly outdated, but nobody dares to touch this piece
of people-code.</p>
<p>Not only does writing down obvious things serve as some sort of operational
maintenance work and gives opportunity to incremental improvements, but it
also frees yourself from being a too picky writer.
Because it is obvious you are less likely to attach your ego to the idea and
try to write a masterpiece, but you try to keep it short and useful.</p>
<p>Yet, we seldom do write down the obvious.
There seems to be a resistance.
If it is obvious, we do not want to put it into writing, because we feel like
other people might perceive us as dumb or something.
Or wasting time on obvious things (duh).
It becomes easier with time, as you pile on positive feedback for good
documentation, nice recipes or what have you, but at first it might require
overcoming and a bit boldness.</p>
<p>So, be bold, and write down the obvious.</p>
Optionality not responsibility is why managers earn more2021-12-19T00:00:00+00:002021-12-19T00:00:00+00:00Marceltag:deaddy.net,2021-12-19:/optionality-not-responsibility-is-why-managers-earn-more.html<p>A common lie managers tell, both to us lowlifes in the workforce but also to
themselves, is that their higher earnings are justified due to all the
responsibility they are carrying.</p>
<p>Of course this can not be true, because in pretty much no company beyond a
given size, managers actually …</p><p>A common lie managers tell, both to us lowlifes in the workforce but also to
themselves, is that their higher earnings are justified due to all the
responsibility they are carrying.</p>
<p>Of course this can not be true, because in pretty much no company beyond a
given size, managers actually are responsible for their mistakes.
Punishment and benefits are asymmetrical, with punishment always going down in
the hierarchy, whereas benefits always go up.</p>
<p>There is an optionality.
They can take the responsibility if they like (i.e. when things go well), but
do not need to take it on (i.e. when things don't go well).
The only weird thing is that they do not seem to pay a premium for this,
except having to wear suits and ties.</p>
<p>The larger the company, the bigger this optionality becomes.
It is a common trick to build toxic waste subsidiaries, so whenever something
goes wrong, you can just throw away this company and the bottom line of the
umbrella corporation is not affected.
Also here is no premium involved, only the transaction costs of setting up and
running another company.</p>
<p>So there is a very weird market situation, as there are people being granted
optionality, at the expense of others, without the others being compensated in
form of a premium. <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>
As if the market wasn't as free as they claim it to be.</p>
<p>In fact, if there was really some responsibility for stakeholders, we would
see some transitivity of risk.
Any risk taken by individuals lower in the hierarchy would automatically be
also risk of people higher up and then their job would be to manage the people
accordingly, and the same would be true across companies and shareholdings.</p>
<p>But in our current establishment, risk is not even remotely transitive.</p>
<p>In case you are offended by these thought and you say, no, in my company we
figured it out and compensation and responsibility are fairly distributed, let
me know! ;-)</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Though there are sometimes positions for people who are explicitly
there to take the blame and they get compensated accordingly, but of course
this does not apply to you or me.</td></tr>
</tbody>
</table>
Why 90 percent utilization is already too much2021-12-03T00:00:00+00:002021-12-03T00:00:00+00:00Marceltag:deaddy.net,2021-12-03:/why-90-percent-utilization-is-already-too-much.html<p>This is basically just a post which links to John D. Cook's post
<a class="reference external" href="https://www.johndcook.com/blog/2008/10/21/what-happens-when-you-add-a-new-teller/">What happens when you add another teller?</a>, because I always have to search
for the link.</p>
<p>Anyway, just in case this very nice post ever vanishes, this is one of the
most important possibly counterintuitive facts one …</p><p>This is basically just a post which links to John D. Cook's post
<a class="reference external" href="https://www.johndcook.com/blog/2008/10/21/what-happens-when-you-add-a-new-teller/">What happens when you add another teller?</a>, because I always have to search
for the link.</p>
<p>Anyway, just in case this very nice post ever vanishes, this is one of the
most important possibly counterintuitive facts one encounters as reliability
engineer, one of the most applicable counterintuitive facts one encounters
when studying mathematics and of course, apparently totally unknown amongst
people in power and so called decision makers.</p>
<p>As it is presented in John's post, assume you have a bank with one bank
teller.
Customers take an average of 10 minutes to be served and arrive at a rate of
about 5.4 an hour.
So the utilization can be just defined as the quotient of the two
numbers, i.e. <code>5.4/h</code> arrival rate and <code>6/h</code> average rate of serving and our
utilization is then <code>0.9</code> or 90%.</p>
<p>This is clearly below 100% utilization, so our intuition would say, everything
is fine. But in this scenario, how long do customers have to wait?</p>
<p>Well, this depends of course on a number of assumptions.</p>
<p>There is <a class="reference external" href="https://en.wikipedia.org/wiki/Kendall%27s_notation">Kendall's notation</a> to classify these sort of assumptions and the
simplest one for this model is a so called <em>M/M/1</em> queue - one teller, the
arrival rate is a Poisson process and the service time is exponential.
So arrival rate would be <code>lambda = 5.4/h</code>, service time would be <code>mu = 6/h</code>,
as 10 minutes are six customers per hour and our utilization of 90% would
then be denoted as <code>rho</code>.</p>
<p>To put it non-mathematical:
We expect that service times are more likely to be
1 minute than 20 minutes, and the service time of a customer does not depend
on the customers before them.
Which applies to many scenarios, at least to a certain degree:
Web requests are usually quick and do not depend much on other web requests.
Intensive care beds are more likely to be used a few days than a few weeks,
and how long you need a bed does not depend on the patient before you.
Tickets usually do not take a lot of time, but some do.
You get the idea.</p>
<p>Assuming our bank is open long enough for the system to be stationary (or e.g.
hospitals, which are open pretty much 24/7 except for downtimes due to their
IT getting pwned by inevitable ransomware on their fragile Windows+AD+Exchange
trifecta), the mean waiting time can be estimated as
<code>rho/(mu(1 - rho))</code>, so in our case
<code>0.9/(6(1 - 0.9)) = 1.5</code>.
So the mean waiting time for a customer arriving at the bank would be 1.5h!
And this despite an utilization of clearly less than 100%.</p>
<p>Now the question posed in John's original post is, what happens if we add
another teller?
Adding another teller, we have a <em>M/M/2</em> queue, and our utiliziation is now
<code>lambda/2mu</code>.
The formula for mean waiting time changes a bit and we have
<code>rho^2/(mu(1 - rho^2))</code>.
Again pluggin in our numbers, we obtain
<code>0.45^2/(6(1 - 0.45^2)) = 0.042..</code> hours, or less than three minutes.</p>
<p>This is drastic.
And probably helps a lot more than being mean to your teller, because you are
confused why the wait times are so long even though they are only 90%
utilized.</p>
<p>As a comparison, John used an arrival rate of 5.8 customers per hour, leading
to about 95% utilization and an even more drastic result:
Adding another teller reduces the mean waiting time from about five hours to
about three minutes.</p>
<p>Most importantly we see that a utilization of less than 100% is not a
sufficient condition for things to work smoothly, but only a necessary.
But most people intuitively just jump to the conclusion that as long as the
utilization is below 1, everything is fine, but this could not be further from
the truth.</p>
<p>As a rule of thumb, you can just think of your waiting time as being
proportional to <code>1/(1 - rho)</code> and as you approach 100% utilization,
your wait times approach infinity, and at about 80% utilization, you start to
see issues.
At least this rule of thumb is less wrong than just checking if utilization is
below 1.</p>
<p>Another rule of thumb:
If you need to tweak your model to see that it works out fine and you heavily
depend on a good choice of parameters, you are just lying to yourself.
Or you employ a very capable team of engineers making sure it works fine, but
I guess then you are not reading my blog.</p>
<p>Of course you can inject some ifs and buts about your own assumptions of
reality, but if you are talking about the utilization of something
important, like hospital beds, you need a convincing argument, if your
estimates still look good in the face of high utilization rates.
Because very likely you are just making false assumptions.</p>
<p>Ignorance kills.</p>
The toxicity of corporate creative exchange2021-11-27T00:00:00+00:002021-11-27T00:00:00+00:00Marceltag:deaddy.net,2021-11-27:/the-toxicity-of-corporate-creative-exchange.html<p>One of the main reasons micromanagers and decision delayers claim for wanting
people come to offices, is the so called creative exchange.
Brainstorming and putting funny colored pieces of paper with ideas on
cardboards is not only a favorite exercise of middle school teachers trying to
have an easy day …</p><p>One of the main reasons micromanagers and decision delayers claim for wanting
people come to offices, is the so called creative exchange.
Brainstorming and putting funny colored pieces of paper with ideas on
cardboards is not only a favorite exercise of middle school teachers trying to
have an easy day, but also of of consultants escorting important
transformative changes in
your company, where the end result is always what everyone else told them
beforehand, or middle managers trying to push some policy no one likes,
pretending to include everyone.</p>
<p>It might seem obvious that putting a bunch of people in a room with crayons,
scissors and sticky notes is not how you solve problems, at least it does fail
the grandmother test.</p>
<p>Problem solving looks different and usually start by including the people
who might know what you need to solve the problem.
And then you might start bounce ideas off one another, but, in real life
asking one or two people with some knowledge gets you back on track fairly
quickly.
Typically you either end up with the next steps, a longer roadmap that just
needs to be fleshed out with steps, a change in approach or just the need to
learn a few things before pushing forward.
Very concrete things, very quickly.
In my experience, not even an hour every two weeks with the right people
is enough to fuel all the progress and work that is realistic.
On one hand it is because you can make communication efficient, if that is
your goal, and one of the main ways how this is accomplished is basically by
compression.
On the other hand there is the usual problem that the people that get things
done are busy af.</p>
<p>This is probably also an indicator for identifying corporate creative
exchange:
Nothing concrete and nothing actionable stems from it.
The result will never be "yes right, we will make it happen and X will make
sure we have the paperwork in order, but this might take some time".
It will always be "we will think about it and then talk it over with someone
else" and result in some half-assed compromise, if anything.
Just enough for covering one's behind.
On the rare occasion that there are any concrete actions, they are for you,
not for the person who wanted to foster creative exchange.
Also they probably look a lot like their ideas and pretty much different from
the suggestions of the people with the actual knowledge of things.</p>
<p>Of course there are some benefits to these leisurely discussions prescribed by
the higher ups, because it gives rise to plausible deniability in "excluding
people from the discussion", because, well, you had the opportunity.
Due to the lack of paper trail, the eternal backwards can claim that "if you
are all so smart, why didn't you tell me" and "you had your chance".
But obviously this is not a benefits in the large scheme, only in the eyes of
people in comfy positions and without skin in any game.</p>
<p>Also it is non-inclusive in a not so subtle manner.
Since you include people on a shotgun based approach, the people with the
knowledge have to compete with people that just like to hear themselves talk.
And most of the time these are not the people who actually have the necessary
knowledge.
The dilution of knowledge makes it next to impossible to formulate concrete
ideas, and I think every reader has had their fair share of internet
discussions to attest this.</p>
<p>So, looking at the checklist, this sort of thing</p>
<ul class="simple">
<li>is inefficient,</li>
<li>unidirectional,</li>
<li>not inclusive, and</li>
<li>gives rise to plausible deniability.</li>
</ul>
<p>I think we call such behavioural patterns toxic.
It is a proven recipe for bad decisions and making people turn away from your
organization.
At least the people a rational entity would want to keep.</p>
<p>If you think of your workforce just as commoditized human resources, at least
be so honest and do not try to keep up the illusion that they are not.
No one is falling for that and in the end, the people willing to put up with
that will be more productive than the people who you think you crushed and
that find ways to fuck you up in different ways.
Unless that paranoia is what makes you feel alive.
Then keep micromanaging and pretending.</p>
Kubernetes - some practices2021-11-17T00:00:00+00:002021-11-17T00:00:00+00:00Marceltag:deaddy.net,2021-11-17:/kubernetes-some-practices.html<p>Maybe not best practices.
But some practices.
Some mentions of the worst practices.</p>
<p>This is a small collection of things that worked for me, my colleagues and
most people I talked to, as well as some things that do not work, at least not
beyond a single-dev-play-around-installation or your typical …</p><p>Maybe not best practices.
But some practices.
Some mentions of the worst practices.</p>
<p>This is a small collection of things that worked for me, my colleagues and
most people I talked to, as well as some things that do not work, at least not
beyond a single-dev-play-around-installation or your typical hello world
kubernetes example.</p>
<p>I do not think there is much need for explanation of the rationale of any of
the points, but I guess you know how to contact me if I err in this regard.
Most of these things are rather evident when you start to think about it,
but of course in the wild you only start thinking about such things once you
run into the issues.</p>
<h2 id="run-a-pocket-knife-deployment"><a class="toclink" href="#run-a-pocket-knife-deployment">Run a pocket knife deployment</a></h2>
<p>This is a neat and easy way to add a little bit more "feeling like home" for
your sys admin and giving you a way to inspect and understand your cluster
from the inside.
Create a container that contains all your favorite tools, such as telnet,
ping, netcat, mysql client, redis client, htop, curl, route, qperf,
traceroute, bonnie++ and whatever your heart needs.
Run it as a deployment in your cluster, possibly with some volume attached.
You can then always use it to debug some services, try to connect to things,
check if your volumes work as intended and see if you can break things from
within a pod.</p>
<h2 id="start-small"><a class="toclink" href="#start-small">Start small</a></h2>
<p>When moving to kubernetes, you will not be able to run production straight
from CI/CD replicated into different clusters across multiple sites.</p>
<p><a href="https://deaddy.net/introduction-to-kubernetes-pt-1.html">Get a cluster running</a>, build the first templates for your application, add
some monitoring and then iterate from that point up.</p>
<p>Often you really need less than you think to benefit from kubernetes, e.g.
when you can move only part of your workload, like webservers and cache hosts,
to the kubernetes cluster and reflect your old database servers via endpoints
in the cluster.</p>
<h2 id="prioritize-and-persist"><a class="toclink" href="#prioritize-and-persist">Prioritize and persist</a></h2>
<p>Prioritizing changes is important.</p>
<p>Often you will find yourself in a position, where you could make an
improvement to the cluster or deployment mechanism, but it would introduce
changes your team cannot keep up with.</p>
<p>Some changes will be inevitable, but sometimes you can solve the problem on a
higher level, removing interactions and thus the need of people to learn new
tools.
This in turn often comes with the cost of you digging into something a bit
longer and deeper than you initially wanted.</p>
<p>Sometimes the maintenance pressure is too high, so that you have to deploy
intermediate steps on the road to full automatization and get back into this
sacred realm of "SRE at most 50% of their time doing manual maintenance".</p>
<h2 id="use-helm"><a class="toclink" href="#use-helm">Use helm</a></h2>
<p>Helm allows you to template your YAML files.
Do not restrict yourself to building full blown apps.
Sometimes you just have a few yaml files that need to be templated, e.g.
because you want to deploy the same thing across several namespaces.
Using helm for this might feel like overkill, but really, it isn't.
Even if all you would do is</p>
<div class="highlight"><pre><span></span><code><span class="k">for</span><span class="w"> </span>namespace<span class="w"> </span><span class="k">in</span><span class="w"> </span>a<span class="w"> </span>b<span class="w"> </span>c<span class="w"> </span>d<span class="p">;</span>
<span class="k">do</span>
<span class="w"> </span>kubectl<span class="w"> </span>apply<span class="w"> </span>-n<span class="w"> </span><span class="nv">$namespace</span><span class="w"> </span>-f<span class="w"> </span>my.yml<span class="p">;</span>
<span class="k">done</span>
</code></pre></div>
<p>create a small helm chart for this.
Sometimes you do not want to use <code>helm install</code>
but <code>helm template . | kubectl apply -f -</code>.
It is just much cleaner, easier to maintain and uniform with respect to the
rest of your deployments.</p>
<p>There are tools which might have similar usecases as helm, most notably
kustomize, but helm is the most powerful tool for this job and there are
enough situations where you can not do without helm.</p>
<p>Better keep the toolchain slim with only <code>helm</code> and <code>kubectl</code> and with some
practice you will notice that <code>kustomize</code> and similar tools actually are not
really more lightweight, but only less powerful.</p>
<p>The biggest problem with creating helm charts, for beginners, is that
<code>helm create</code> does create a lot of resources which might or might not be
irritating - but in the end you often can do with a single or a few templated
.yml in the <code>templates/</code> directory of your helm chart.</p>
<h2 id="do-not-do-the-docker-build-config-from-env-spaghetti-image-build"><a class="toclink" href="#do-not-do-the-docker-build-config-from-env-spaghetti-image-build">Do not do the docker-build-config-from-env spaghetti image build</a></h2>
<p>This is really a big mistake and a relict from a time where docker didn't have
compose and k8s was not widespread.
If you want to see how not do it, look at anything from bitnami.
Try to figure out, how certain configs are created.
I dare you.</p>
<p>In this anti-pattern you put scripts, which create your configs from passed
environment variables, into the container.
Often across multi-stage container builds, where you reference the script from
a base image three layers below.</p>
<p>Don't do that.
Instead do this:
Just put files into ConfigMaps or Secrets and mount them at the appropriate
places.
It works like a charm.
As if ConfigMaps were made for exactly this usecase.
With helm or similar tools you can even template them.
Often using exactly the same values which are otherwise passed as env
variables.
Your chart and container just are much more maintainable and easier to
understand.</p>
<p>Even docker compose is capable of that, so there really is no reason anymore
to build things this old spaghetti image, unless you actually want to
obfuscate your stuff. <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<h2 id="always-create-resources-from-helm-or-yaml-files"><a class="toclink" href="#always-create-resources-from-helm-or-yaml-files">Always create resources from helm or YAML files</a></h2>
<p>Never use <code>kubectl create</code> or <code>kubectl expose</code>.
Those tools are the <code>goto</code> of the future.
It works with your first fun container on some play around cluster, but is
just a weird way to break abstraction layers and is not really maintainable.
Most people struggling with moving things around or making deployments
reproducible did use <code>kubectl create</code> or <code>kubectl expose</code> to create things.</p>
<p>Create YAML files and apply these.
Keep them versioned in git or your favorite open source distributed version
control.
And if you did use aforementioned commands, do not hesistate to make things
right.
Sooner or later you have to do it right anyway.</p>
<h2 id="kiss-and-adapt-the-unix-philosophy"><a class="toclink" href="#kiss-and-adapt-the-unix-philosophy">KISS and adapt the unix philosophy</a></h2>
<p>Everything is a resource.
Build and use components that do one thing and do it well.
Build and use components that work well with another.
Write programs to interact via good APIs.
Keep state and logic separate.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>Which I actually accuse some of these companies of, due to the usual
conflict of interest, when your main money source is selling support, you
do not tend to build stuff that runs without many problems and arcane
incantations. <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Fitness and timed sets2021-09-19T00:00:00+00:002021-09-19T00:00:00+00:00Marceltag:deaddy.net,2021-09-19:/fitness-and-timed-sets.html<p>When it comes to increasing fitness for everyday tasks, the first things that
come to mind are usually classical endurance activities, like low intensity
steady state (LISS) cardio or sometimes even high intensity training (HIIT).
A dreaded proposition for any lifter that is looking to improve fitness for
every day …</p><p>When it comes to increasing fitness for everyday tasks, the first things that
come to mind are usually classical endurance activities, like low intensity
steady state (LISS) cardio or sometimes even high intensity training (HIIT).
A dreaded proposition for any lifter that is looking to improve fitness for
every day tasks.</p>
<p>Luckily, the answer could be nearer to the truth.
While there are certainly benefits to cardiovascular training (such as not
dying), for every day tasks the benefits of cardio quickly taper out, because,
surprise surprise, most of the tasks we face are not low intensity steady
state.
Even the stereotypical "getting winded from walking up stairs" will not be
improved much by typical endurance training, as even if you run up tens of
flights, you are done after at most a few minutes and for only a handful of
flights of stairs, the whole activity doesn't take more than a few seconds.</p>
<p>Most things just have this sporadic nature.
You need quite some force for a short period and then there is usually some
leisurely pace in between.
Usually it is not even maximal force, unless of course, you are very weak.
So it's also not high intensity.
It's just medium output for a short period of time with some rest in between.</p>
<p>Consequently, one of the very best ways to improve work capacity and fitness
for everyday life, are sets with moderate weight for a couple of reps in a
compound exercise with pretty short timed rests.
The rest periods should be around the 1 minute mark and I feel that much
shorter than 45 seconds reduces the weight to a point were it stops being
appropriate and much longer than 90 seconds usually reduces the benefits
for work capacity.</p>
<p>A very systematic and prefabricated way to do this is the
<a class="reference external" href="https://deaddy.net/working-with-the-juggernaut-method.html">inverted Juggernaut method</a>.
But you can also just do squats for 5 reps at 70% with 1 minute rest until the
last set is pretty heavy.
Depending on your paradigm, you can just do this as back-off, e.g. when
training with RTS style prescriptions, x5@8 and then 10% load drop with 60s
rest periods.
The exact protocol does not really matter, as long as the weight is
appreciable, the rest period around the 1 minute mark and the reps somewhere
between three and eight reps.</p>
<p>This makes a good training session.
And even one such session a week can carry you a long way through phases with
other emphasizes, so just because your <a class="reference external" href="https://deaddy.net/periodization-for-fun-and-profit.html">periodization</a> laid out twelve weeks
of hypertrophy and strength, you can still be fit at the end of it.</p>
<p>If you have a nice separate timer, this is a good way to just get in the flow
of doing an exercise and you might even end up with a nice pump.
You probably won't have much time to check for technique in between sets.
Also note that the exercise should be big.
Bench and push press is fine, but I already feel like that this timed effort
doesn't do much for me with pressing.
And as much as I love my kettlebell, they are not the tool for this job.
These are already more refined tools for more athletic endeavours.</p>
ConfigMaps containing IP of first control plane member with kubeadm2021-08-02T00:00:00+00:002021-08-02T00:00:00+00:00Marceltag:deaddy.net,2021-08-02:/configmaps-containing-ip-of-first-control-plane-member-with-kubeadm.html<p>When setting up a HA control plane with <code>kubeadm</code> one would expect that the
<code>controlPlaneEndpoint</code> is being used in all places.
However, this is not true (I suspect at one point it will be fixed, but I have
not tracked down the corresponding change in the code).</p>
<p>Thanks to my …</p><p>When setting up a HA control plane with <code>kubeadm</code> one would expect that the
<code>controlPlaneEndpoint</code> is being used in all places.
However, this is not true (I suspect at one point it will be fixed, but I have
not tracked down the corresponding change in the code).</p>
<p>Thanks to my colleague mbb I was spared tracking down one of these:</p>
<ul class="simple">
<li><code>kube-proxy</code> ConfigMap in <code>kube-system</code> namespace</li>
<li><code>cluster-info</code> ConfigMap in <code>kube-public</code> namespace</li>
</ul>
<p>In this issue in both ConfigMaps the <code>server</code> entry is set to the first member
of the control plane and will lead to issues when your first control plane
member leaves the cluster for some reason.</p>
<p>The erroneous entry in the latter CM shows itself in a quite obvious error,
namely when trying to join new nodes to the cluster with <code>kubeadm</code>, it
complains about being unable to reach the API server on this former node.
So one just wonders, why on earth the <code>kubeadm join</code> command trys to connect
to the wrong IP to fetch the <code>kubeadm</code> config map.</p>
<p>An erroneous entry in the <code>kube-proxy</code> CM produces more subtle networking
issues, such as failure of name resolution of internal DNS names or accessing
service addresses.</p>
<p>Well, maybe this helps someone someday find these issues a bit faster.</p>
How to get the most out of conferences2021-07-26T00:00:00+00:002021-07-26T00:00:00+00:00Marceltag:deaddy.net,2021-07-26:/how-to-get-the-most-out-of-conferences.html<p>Problem:
Conferences are often a waste of time and you do not want to be the dude that
only asks questions to ask questions.
A big problem here is the misconception that conferences are to bring people
together and make them network, but this is not true.</p>
<p>The purpose of …</p><p>Problem:
Conferences are often a waste of time and you do not want to be the dude that
only asks questions to ask questions.
A big problem here is the misconception that conferences are to bring people
together and make them network, but this is not true.</p>
<p>The purpose of conferences is knowledge transfer and solving problems, not
networking.
People are already networked.
If the only reason for you to attend a conference is getting networked, you
are wasting time and precious resources.</p>
<p>General tips:</p>
<ol class="arabic simple">
<li>Just learn and take notes.
If you can take something away from the conference you are winning.</li>
<li>Ask questions if you want to know something, especially if it could solve a
problem for you.</li>
<li>If you can solve a problem try to be helpful and get in touch.</li>
<li>It is okay to skip talks if you are not the chair.</li>
<li>It's not about networking.
Visibility is useless without carrying value with it.</li>
<li>Get good meta skills:
Good food, sleep and some exercise are important.
Keep protein intake high.
Try to be well rested.
Do not try to be productive that week and stress out because of that.
Conferences are not about getting things done, but setting you up for that.</li>
</ol>
<p>Do not be afraid to just sit there and learn and listen.
It can take years before you can add value to your field.</p>
<p>Conferences are always very expensive, especially the hidden costs like bad
sleep, bad exercise, bad foods and the general stress of traveling and the
opportunity cost of getting things done.
Also you have to plant a lot of trees to set off the CO2 emissions of one
flight to some conference and there is pretty much no other single action you
can do with comparable environmental impact.
Such horrendous cost should be justified.
So this gives rise to the probably most important tip:</p>
<ol class="arabic simple" start="7">
<li>Do not go to any conference just for the sake of going to conferences.</li>
</ol>
<p>Not all conferences are created equal and most of them are just not very good.
It is just as with books, most of them are a total waste of time, but the gems
will carry you forward for a long time.</p>
<p>So pick your conferences wiseley and ruthlessly cut out bad ones.</p>
List of books2021-07-04T00:00:00+00:002021-07-04T00:00:00+00:00Marceltag:deaddy.net,2021-07-04:/list-of-books.html<p>Apparently books are something people are interested in and usually when you
go online and search for recommendations, you always get the same shit. So
here is a list of books remarkable enough for me to make a recommendation
against them, for them or how to use them.</p>
<p>I will …</p><p>Apparently books are something people are interested in and usually when you
go online and search for recommendations, you always get the same shit. So
here is a list of books remarkable enough for me to make a recommendation
against them, for them or how to use them.</p>
<p>I will keep this page updated from time to time and try to keep some modicum
of organization, as it also serves for myself as a reminder to know which
books to read again and which ones to avoid.
Also I can use it to save myself from writing the same one-line excerpt
whenever I actually do recommend a book.</p>
<div class="toc">
<ul>
<li><a href="#sport-diet-and-health">Sport, diet and health</a><ul>
<li><a href="#boris-sheiko-powerlifting-foundations-and-methods">Boris Sheiko: Powerlifting - Foundations and methods</a></li>
<li><a href="#lyle-mcdonald-the-womens-book-vol-1">Lyle McDonald: The Women's book Vol 1</a></li>
<li><a href="#lyle-mcdonald-a-guide-to-flexible-dieting">Lyle McDonald: A guide to flexible dieting</a></li>
<li><a href="#lyle-mcdonald-the-protein-book">Lyle McDonald: The Protein book</a></li>
<li><a href="#lyle-mcdonald-every-other-book">Lyle McDonald: Every other book</a></li>
<li><a href="#mark-rippetoe-starting-strength">Mark Rippetoe: Starting strength</a></li>
<li><a href="#chad-wesley-smith-juggernaut-training-a-thoughtful-pursuit-of-strength">Chad Wesley Smith: Juggernaut training - A thoughtful pursuit of strength</a></li>
<li><a href="#marisa-inda-fuerza">Marisa Inda: Fuerza</a></li>
<li><a href="#mike-israetel-james-hoffmann-chad-wesley-smith-the-scientific-principles-of-strength-training">Mike Israetel, James Hoffmann, Chad Wesley Smith: The scientific principles of strength training</a></li>
<li><a href="#justin-lascek-the-texas-method-and-successor-books">Justin Lascek: The Texas Method (and successor books)</a></li>
<li><a href="#jim-wendler-531-and-all-of-its-variants">Jim Wendler: 5/3/1 (and all of its variants)</a></li>
<li><a href="#pavel-tsatsouline-power-to-the-people">Pavel Tsatsouline: Power to the people</a></li>
</ul>
</li>
<li><a href="#unsorted-stuff">Unsorted stuff</a><ul>
<li><a href="#alex-carey-taking-the-risk-out-of-democracy-corporate-propaganda-vs-freedom-and-liberty">Alex Carey: Taking the risk out of democracy - Corporate Propaganda vs. Freedom and liberty</a></li>
<li><a href="#nick-lane-power-sex-and-suicide">Nick Lane: Power, Sex and Suicide</a></li>
<li><a href="#allostasis-homeostasis-and-the-costs-of-physiological-adaption">Allostasis, Homeostasis, and the costs of Physiological adaption</a></li>
<li><a href="#daniel-c-dennett-conciousness-explained">Daniel C. Dennett: Conciousness explained</a></li>
<li><a href="#kahnemann-daniel-thinking-fast-and-slow">Kahnemann, Daniel - Thinking, fast and slow</a></li>
<li><a href="#sapolsky-robert-why-zebras-dont-get-ulcers">Sapolsky, Robert - Why Zebras don't get ulcers</a></li>
<li><a href="#florescu-and-mcnally-dracula">Florescu and McNally - Dracula</a></li>
</ul>
</li>
<li><a href="#finance-productivity-shit-like-that">Finance, productivity, shit like that</a><ul>
<li><a href="#peter-putz-strategisch-investieren-mit-aktienoptionen-german">Peter Putz - Strategisch Investieren mit Aktienoptionen (German)</a></li>
<li><a href="#max-ansbacher-the-new-options-market">Max Ansbacher - The new options market</a></li>
<li><a href="#cordier-gross-the-complete-guide-to-option-selling">Cordier, Gross - The Complete Guide to Option Selling</a></li>
<li><a href="#daniel-pinker-drive">Daniel Pinker: Drive</a></li>
<li><a href="#tim-limoncelli-time-management-for-system-administrators">Tim Limoncelli: Time management for system administrators</a></li>
<li><a href="#mcchesney-covey-huling-the-4-disciplines-of-execution">McChesney, Covey, Huling: The 4 disciplines of execution</a></li>
<li><a href="#sinek-start-with-why">Sinek: Start with why</a></li>
</ul>
</li>
</ul>
</div>
<h1 id="sport-diet-and-health"><a class="toclink" href="#sport-diet-and-health">Sport, diet and health</a></h1>
<p>In this section I add a refinement-indicator going from low to high,
indicating how high your general level of understanding of sports performance
has to be, so you can appreciate the book fully. This is not a difficulty
rating, but should be more seen as a re-reading recommendation. While
re-reads are always useful, the higher the refinement, the more I recommend
re-reading a book just for the sake of picking up finer points you have missed
a few years ago.</p>
<h3 id="boris-sheiko-powerlifting-foundations-and-methods"><a class="toclink" href="#boris-sheiko-powerlifting-foundations-and-methods">Boris Sheiko: Powerlifting - Foundations and methods</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>reference, but practical</dd>
<dt>refinement:</dt>
<dd>low to high</dd>
</dl>
<p>This was the first book I wanted to recommend but it took me a while until I
could figure out what exactly I like about this book.
It definitely does not tickle my abstract curiosity.
However, it is a very applicable book and goes in a very straight line from
theoretical backgrounds to its implementation in the gym or at the dinner
table.</p>
<p>It is also the only English or German book I've read that discusses the
importance of load variability and the ability to extrapolate, so for this
fact alone it is a gem.</p>
<p>What I initially didn't like is that about 100 pages are just training program
spreadsheets, but I came to like it as a historical relict from a pre-internet
era.</p>
<h3 id="lyle-mcdonald-the-womens-book-vol-1"><a class="toclink" href="#lyle-mcdonald-the-womens-book-vol-1">Lyle McDonald: The Women's book Vol 1</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>reference/textbook</dd>
<dt>refinement:</dt>
<dd>low to high</dd>
</dl>
<p>THE book on women and their hormones. There is nothing comparable on the
market, it is a first. At the end of 2020, it is the only one. It is good. It
is detailed. It is even being copied, as some of those German "evidence based"
fucknuts made a <em>bad</em> rewrite of this book and were being heralded as the
great feminists, all while being complete asshats and copycats. But well. This
is only to underline how unique this book is. A sad testimony to the fact that
medical science didn't discover women before the 2010s.</p>
<h3 id="lyle-mcdonald-a-guide-to-flexible-dieting"><a class="toclink" href="#lyle-mcdonald-a-guide-to-flexible-dieting">Lyle McDonald: A guide to flexible dieting</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>guide</dd>
<dt>refinement:</dt>
<dd>low</dd>
</dl>
<p>This is THE book on dieting, staying on a diet and building the skill of
controlling one's own bodyweight through modification of food intake, i.e.
dieting. It is a good book. I would not know any other book written on the
topic that I could recommend nearly as much as this book.</p>
<h3 id="lyle-mcdonald-the-protein-book"><a class="toclink" href="#lyle-mcdonald-the-protein-book">Lyle McDonald: The Protein book</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>textbook</dd>
<dt>refinement:</dt>
<dd>medium</dd>
</dl>
<p>Again a Lyle book, again a THE book. This is THE introductory textbook on
protein metabolism with respect to health and sports performance. It is not
required as a beginner, but certainly a must read for anyone who has anything
to do with health, sports and performance.</p>
<h3 id="lyle-mcdonald-every-other-book"><a class="toclink" href="#lyle-mcdonald-every-other-book">Lyle McDonald: Every other book</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>refinement:</dt>
<dd>low to high</dd>
</dl>
<p>The Bromocriptine is what Lyle himself calls a "weird little book". It's good,
but very ... well, weird.</p>
<p>I have not read all of his other books, as some I just have discovered when
I looked up how this Bromothing was written, but I am certain they are good.
He has some special diets, like the ultimate diet for already lean individuals
and his rapid fatloss handbook, and well, it is good stuff. I do not know of
other sources about the ultimate diet and the rapid fat loss diet (or PSMF as
it is called in medicine), so maybe these are again THE books on the topics,
but those are more niche than the aforementioned ones.</p>
<p>Also I can recommend <a href="https://bodyrecomposition.com">Lyle's blog</a> with one caveat: His training programs are
not really targeted at strength athletes and aspiring champions, but more at
genpop trying to stay healthy and lose fat.</p>
<h3 id="mark-rippetoe-starting-strength"><a class="toclink" href="#mark-rippetoe-starting-strength">Mark Rippetoe: Starting strength</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>guide and textbook</dd>
<dt>refinement:</dt>
<dd>low to high</dd>
</dl>
<p>This is classic text is aimed at beginners in the strength sports. It is
fairly long, part for the procurement of buy-in, part for the very detailed
description of the lifts. To this day (end of 2020) the description of the
deadlift is unrivaled in its quality across the literature. The squat section
is still good, but it's overly focused on the posterior chain, which might be
influenced from a different era of strength sports. For this see also Chad
Wesley Smith's book "Juggernaut training", which is presented below.</p>
<h3 id="chad-wesley-smith-juggernaut-training-a-thoughtful-pursuit-of-strength"><a class="toclink" href="#chad-wesley-smith-juggernaut-training-a-thoughtful-pursuit-of-strength">Chad Wesley Smith: Juggernaut training - A thoughtful pursuit of strength</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>guide</dd>
<dt>refinement:</dt>
<dd>low</dd>
</dl>
<p>This is a very good book on strength training and has a bit better programming
advise then Rippetoe's Starting strength. The technical cues given are helpful
even for more intermediate athletes and the programming principles apply
universally.</p>
<h3 id="marisa-inda-fuerza"><a class="toclink" href="#marisa-inda-fuerza">Marisa Inda: Fuerza</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>maybe</dd>
<dt>type:</dt>
<dd>guide</dd>
<dt>refinement:</dt>
<dd>low</dd>
</dl>
<p>This was a fun read. From a training theory standpoint this book is very basic
and clearly aimed at beginners. What makes it unique is that it is</p>
<ul>
<li>targeted at females</li>
<li>written by a female</li>
<li>good</li>
<li>not poisoned by this embarassing male ahooh-ahooh-alpha-demeanour</li>
</ul>
<p>Also the programs are kinda fun, with a good deal of leg work and tons of
upper body fun.</p>
<h3 id="mike-israetel-james-hoffmann-chad-wesley-smith-the-scientific-principles-of-strength-training"><a class="toclink" href="#mike-israetel-james-hoffmann-chad-wesley-smith-the-scientific-principles-of-strength-training">Mike Israetel, James Hoffmann, Chad Wesley Smith: The scientific principles of strength training</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>textbook</dd>
<dt>refinement:</dt>
<dd>low</dd>
</dl>
<p>Easy to digest fundamentals of strength training. It is a good book, though on
the low density site of things. While the principles - specificity, overload,
fatigue management, stimulus recovery adaption, variation, phase potentiation
and individual difference - seem rather obvious, the prioritization presented
is certainly unique to authors. Furthermore they give detailed hints on how to
make sure to not over- or under-apply these principles. Which makes the book
rather long and easy to read, but these details are also part of its value.</p>
<h3 id="justin-lascek-the-texas-method-and-successor-books"><a class="toclink" href="#justin-lascek-the-texas-method-and-successor-books">Justin Lascek: The Texas Method (and successor books)</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>maybe</dd>
<dt>type:</dt>
<dd>program</dd>
<dt>refinement:</dt>
<dd>medium</dd>
</dl>
<p>If you decided to give the Texas Method a try, these books certainly help you
to enhance the experience and really milk it out. The programming conecpts are
sound and also stand for themselves outside the context of the TM and the
exercise selection is sound as well. It is a really nice book historically in
that it is an embodiment and snapshopt of the rise in popularity of barbell
sports in 2010-2015.</p>
<h3 id="jim-wendler-531-and-all-of-its-variants"><a class="toclink" href="#jim-wendler-531-and-all-of-its-variants">Jim Wendler: 5/3/1 (and all of its variants)</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>no</dd>
<dt>type:</dt>
<dd>program</dd>
<dt>refinement:</dt>
<dd>medium</dd>
</dl>
<p>Now 5/3/1 was a very popular program at its time and its ingrained minimality
makes it as a good drop-in for slots, where you want somewhat heavy, low
volume work. However, that is pretty much everything there is to it. The
programs are embedded in a lot of semicringe buy-in, building much on the
headsmashing hardcore mentality of the last multiply days. Ironically, the
thing why I refer to these books personally most often, is the assistance
template called "Dave Tate's periodization bible".</p>
<p>Later versions of the book (beyond, advanced, for powerlifting, whatever they
are called) embrace that the program itself is too minimal to yield progress
on its own and offer a plethora of addons one could add to the program. This
is a fun scroll through, but nothing more.</p>
<h3 id="pavel-tsatsouline-power-to-the-people"><a class="toclink" href="#pavel-tsatsouline-power-to-the-people">Pavel Tsatsouline: Power to the people</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>program, guide, textbook</dd>
<dt>refinement:</dt>
<dd>low to high</dd>
</dl>
<p>This is the first lifting book I remember reading and it was probably one of
the early breadcrumbs I followed before I actually hit the iron. However, it
is written with this weird soviet branding of Pavel, which you probably either
like or do not like, and part of the reason why I did not re-read it for many
years - a grave mistake!</p>
<p>This book is both interesting to the aspiring trainee, as well as to the
advanced athlete. For the former it takes away much of the complexity of
starting lifting: just deadlift and press, with some simple concepts for
safety and good forme, and some conjurement of buy-in (given that the general
vibe does not repel you). For the latter it contains many nuggets and insight
into soviet training research, focussing on training with many reps in
reserve, to build the skill of strength.</p>
<h1 id="unsorted-stuff"><a class="toclink" href="#unsorted-stuff">Unsorted stuff</a></h1>
<h3 id="alex-carey-taking-the-risk-out-of-democracy-corporate-propaganda-vs-freedom-and-liberty"><a class="toclink" href="#alex-carey-taking-the-risk-out-of-democracy-corporate-propaganda-vs-freedom-and-liberty">Alex Carey: Taking the risk out of democracy - Corporate Propaganda vs. Freedom and liberty</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
</dl>
<p>This book both is an historical account of how the first unions were busted,
as well how you can manage a democracy when all you have is money and lots of
it.
If you ever wondered why unions and politics side with corporations and other
so called friends appear pretty backstabby, this book explains the tools which
were already employed in the 1980s.</p>
<p>Of course, nowadays we even have more subtler ways to influence people, as
well just have lost this game for a few decades more.</p>
<h3 id="nick-lane-power-sex-and-suicide"><a class="toclink" href="#nick-lane-power-sex-and-suicide">Nick Lane: Power, Sex and Suicide</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
</dl>
<p>This is a very interesting book about the history of both the science of
mitochondria, as well as mitochondria themselves. It elucidates their function
and probably how they relate to longevity and other concepts, as those alluded
in the title.</p>
<p>I read it because Greg Nuckols recommended it highly, so this makes it a
double recommendation.</p>
<h3 id="allostasis-homeostasis-and-the-costs-of-physiological-adaption"><a class="toclink" href="#allostasis-homeostasis-and-the-costs-of-physiological-adaption">Allostasis, Homeostasis, and the costs of Physiological adaption</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>authors:</dt>
<dd>Peter Sterling, Bruce S. McEwen, David S. Goldstein, Burton Singer, Carol D.
Ryff, Teresa Seeman, George F. Koob, Michel Le Moal, Jeffrey B. Rosen, Jay
Schulkin, Ziad Boulos, Alan M. Rosenwasser, John C. Wingfield, Michael L.
Power</dd>
</dl>
<p>This is an introductory collection of essays on the topic of allostasis. It
gives an insight in the concept of allostasis and how the regulation of
processes in the body works. I am not aware of a better introduction to the
topic yet, as the research still seems to be a bit too fresh to be found in a
textbook, so this book helps to bridge the gap between the existing body of
knowledge and the average reader.</p>
<h3 id="daniel-c-dennett-conciousness-explained"><a class="toclink" href="#daniel-c-dennett-conciousness-explained">Daniel C. Dennett: Conciousness explained</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>no</dd>
</dl>
<p>Let me just quote some of the backcover snippets:
"heady stuff, written with tremendous verve and panache" and "a masterful
tapestry of deep insights".
As flowery these quotes might seem, it is no comparison to the word soup the
author produces.
I suspect half of the book is just "nice writing".
There are many interesting experiments and thoughts going on, but it is just
all embedded in far too many words, written by someone who enjoys language far
too much.
Maybe I despise it so much because when I was younger I tended to write like
that as well.</p>
<p>Writing style aside, I suspect to this point this is a very unique
book, giving a (still) concise account of the developments in the fields
associated with consciousness.</p>
<p>It is quite old though and given the advances in AI, especially with deep
learning, it comes to no surprise that some passages did not age well or are
now "well, duh".</p>
<p>However, I do think this book has been surpassed by 3rd gen neuroscience and
more can be taken from Youtube Videos by John Vervaeke, which also have been
transcribed, so ... yeah.</p>
<h3 id="kahnemann-daniel-thinking-fast-and-slow"><a class="toclink" href="#kahnemann-daniel-thinking-fast-and-slow">Kahnemann, Daniel - Thinking, fast and slow</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
</dl>
<p>This classic is a strong recommendation, despite me not really liking the
writing style, as it is written to comprehended not only by genpop, but the
population most resilient to education, economists.</p>
<p>In countless examples and mini-exercises it demonstrates how our fast-response
thinking is prone to many, very general statistical errors, biases and
misconceptions.</p>
<p>I suspect it is one of the must reads most people will never read, making them
gullible and susceptible to all kinds of manipulation.
Especially in a time where we are seeing a lot of resistance by uneducated
people in the fight against discrimination, education on the biases and
weaknesses we are being shipped with seems all the more important - and
lacking.</p>
<h3 id="sapolsky-robert-why-zebras-dont-get-ulcers"><a class="toclink" href="#sapolsky-robert-why-zebras-dont-get-ulcers">Sapolsky, Robert - Why Zebras don't get ulcers</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
</dl>
<p>This was one of the titles I never read because just from the cover this book
seemed to be too cheesy and only have this one messages:
Short bursts of stress combined with physical activity good, long term stress
bad.</p>
<p>It still is kinda the message, but the delivery is done well and insightful.
First the physiological basis of the core mechanism is discussed, at least as
far as we seem to understand it now.
Then the consequences and incarnations of this mechanism in all sorts of
biological and social subsystems are discussed.</p>
<p>It was far more in-depth and non-fluffy than anticipated, despite being a
bestseller.
In fact, at some point the author even mocks the typical bestseller fluff,
which I highly appreciated.</p>
<h3 id="florescu-and-mcnally-dracula"><a class="toclink" href="#florescu-and-mcnally-dracula">Florescu and McNally - Dracula</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
</dl>
<p>A book on the historical figure Vlad Dracula of Romania, written by people
with some heritage tracing back there.
A very entertaining and exhilerating read.</p>
<p>As with all historical texts one has to treat it with the proper scrutiny, but
they also help you out by giving an excerpt of their reference.</p>
<h1 id="finance-productivity-shit-like-that"><a class="toclink" href="#finance-productivity-shit-like-that">Finance, productivity, shit like that</a></h1>
<h3 id="peter-putz-strategisch-investieren-mit-aktienoptionen-german"><a class="toclink" href="#peter-putz-strategisch-investieren-mit-aktienoptionen-german">Peter Putz - Strategisch Investieren mit Aktienoptionen (German)</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>basics of option trading</dd>
</dl>
<p>This is a really great book and so far the only German book worth reading on
the subject I have encountered.
Opening it you quickly note that it's made with LaTeX, so this raises hopes
that the contents might go a little bit deeper than some other books on this
topic.
And I was not disappointed.
The strategies discussed are elementary such as short puts, covered calls and
strangles, however, the value of this book is less about the things you can
know from just reading the wikipedia page of the greeks (which the author also
recommends and cites), but more about the insight in how the author thinks
about the strategies with some hands on calculations of risk and reward.</p>
<p>This is less about what options are, but more about how to use them
to express your ideas.</p>
<p>Most references have useful comments, guiding further reading.</p>
<h3 id="max-ansbacher-the-new-options-market"><a class="toclink" href="#max-ansbacher-the-new-options-market">Max Ansbacher - The new options market</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>probably not</dd>
<dt>type:</dt>
<dd>basic trading stuff</dd>
</dl>
<p>The book in itself is not bad, though some things are just outdated (broker
comissions) and some things are overly specific to time and place (taxation).
However, it discusses basic option strategies and I suspect nowadays by the
time you find this book, you've already watched enough youtube tutorials to
figure this stuff out on your own.</p>
<h3 id="cordier-gross-the-complete-guide-to-option-selling"><a class="toclink" href="#cordier-gross-the-complete-guide-to-option-selling">Cordier, Gross - The Complete Guide to Option Selling</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>probably not</dd>
<dt>type:</dt>
<dd>basic trading stuff</dd>
</dl>
<p>I do not think this book tells you a lot about options what you did not know
before, when you start reading books on the topic.
What I like is that it does not try to do too much technical things.
But I suspect this is more a relict from the pre-internet era.</p>
<h3 id="daniel-pinker-drive"><a class="toclink" href="#daniel-pinker-drive">Daniel Pinker: Drive</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>probably not</dd>
<dt>type:</dt>
<dd>standard american productivty fluff, should have been a blogpost</dd>
</dl>
<p>Key message: extrinsic motivation kills intrinsic motivation. Fluffed up to
far too many pages.
If that idea is somewhat foreign to you, it might be worth starting to read,
but feel free to throw it away shortly after.</p>
<p>To be fair this book is why I started this list, as I had reread it
accidentally and only noticed at some random remark halfway in, where it
dawned on me and given the remarkable lack of remarkable parts, I decided to
protect against such accidents in the future.</p>
<h3 id="tim-limoncelli-time-management-for-system-administrators"><a class="toclink" href="#tim-limoncelli-time-management-for-system-administrators">Tim Limoncelli: Time management for system administrators</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>yes</dd>
<dt>type:</dt>
<dd>productivity</dd>
</dl>
<p>A nice book on time management principles for system administrators.
As admins are apparently kind of a weird breed, they need their own way to
manage with the daily stresses and annoyances.
Of course I think everyone can gain from this book, as most people just lack
routine and clear concepts for the things they do. Some things are a bit
outdated (driving a car, some software, well it is over 10 years old), but
many things and concepts are here to stay (issue trackers, version control,
documentation, DNS issues), and the practical routines can still be inspiring
or easily adapted.</p>
<h3 id="mcchesney-covey-huling-the-4-disciplines-of-execution"><a class="toclink" href="#mcchesney-covey-huling-the-4-disciplines-of-execution">McChesney, Covey, Huling: The 4 disciplines of execution</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>first and second chapter</dd>
<dt>type:</dt>
<dd>standard american productivty fluff, should have been a blogpost</dd>
</dl>
<p>Key message: try to work on lead metrics and not lagging metrics and make it
compelling to do so. Fluffed up to too many pages. Better look at pictures of
different "4dx dashboards" than to read past the first two chapters (I guess,
thankfully I got the same recommendation)</p>
<p>The refinement of the book is very low, as you would from any book which does
not even write out the "four" in its title.</p>
<p>Just another book that should have been a blog post.</p>
<h3 id="sinek-start-with-why"><a class="toclink" href="#sinek-start-with-why">Sinek: Start with why</a></h3>
<dl>
<dt>recommendation:</dt>
<dd>no</dd>
<dt>type:</dt>
<dd>standard american productivty fluff, is just a long TED talk</dd>
</dl>
<p>The book does not really go beyond the author's TED talk and since this is
still one of the TED talks from the old days, it might be worth watching.
The main idea is that first you need to find the why, then you find out how to
do it and only then on top you can define the what.
A large body of the work is revolving around the three examples, with the
Wright brother's flight, some airline and of course apple.
At least it is consistent that a book which emphasizes the importance of your
why and true inspiration over actual implementation does not give you any
practical applications.</p>Introduction to kubernetes pt. 4: Monitoring2021-03-22T00:00:00+00:002021-03-22T00:00:00+00:00Marceltag:deaddy.net,2021-03-22:/introduction-to-kubernetes-pt-4-monitoring.html<p>This is the fourth and final part of this little series of introducing
kubernetes to system operators.
In the <a href="https://deaddy.net/introduction-to-kubernetes-pt-1.html">first post</a> I gave an overview about the general structure of a
kubernetes cluster.
The <a href="https://deaddy.net/introduction-to-kubernetes-pt-2-ingress-networking.html">second post</a> deals with managing ingress networking, as exposing
services to the outside world is something …</p><p>This is the fourth and final part of this little series of introducing
kubernetes to system operators.
In the <a href="https://deaddy.net/introduction-to-kubernetes-pt-1.html">first post</a> I gave an overview about the general structure of a
kubernetes cluster.
The <a href="https://deaddy.net/introduction-to-kubernetes-pt-2-ingress-networking.html">second post</a> deals with managing ingress networking, as exposing
services to the outside world is something you need to do in pretty much all
instances.
Finally we have seen the components involved in getting storage attached to
your pods in the <a href="https://deaddy.net/introduction-to-kubernetes-pt-3-storage.html">previous post</a>.</p>
<p>In this post I will present a solution to the whole monitoring and logging
issue as you would want to see it as operator of a few services on the
platform.
To clarify, this is the level of logging system admins want to see.
Application developers and customers have different needs, such as tracing or
nice fancy dashboards logging business data.</p>
<p>And the solution is simple:
Prometheus operator for monitoring and Loki for logs, displayed via the
same Grafana.</p>
<h2 id="benefits-of-prometheus-operator-with-grafana"><a class="toclink" href="#benefits-of-prometheus-operator-with-grafana">Benefits of Prometheus operator with Grafana</a></h2>
<p>The list of benefits is pretty long and I think most of them do not need
further explanation:</p>
<ul>
<li>architectural superiority of Prometheus</li>
<li>if needed: extendable for long time storage with Thanos</li>
<li>excellent query language for derived metrics</li>
<li>good helm chart available from Prometheus community</li>
<li>kubernetes labels end up as logging and monitoring labels</li>
<li>dashboards can be injected via config maps, so versioning in git is possible</li>
<li>exporting metrics is very simple</li>
<li>Prometheus metrics are ubiquitous</li>
<li>debugging with colleagues has minimal friction </li>
</ul>
<p>I want to emphasize the benefit of a good query language for derived metrics.
Often you only get some raw number, like disk usage, which changes over time
but you also want to know the rate of change.
Well, in the past you then had to either have a disk space plugin that already
calculated this or you had to hack some additional exporter into your systems.
But with the Prometheus query language, instead of just having a metric called
<code>disk_space_used</code>, you now can also display <code>rate(disk_space_used[1h])</code>, which
then displays the rate of change and is also transparent to the operator, i.e.
you do not have to figure out which magical computation your colleague hid in
some bash file on the monitoring server.</p>
<p>Prometheus and Grafana also make debugging sessions so much easier.
Gone are the days where you had to be directed by your colleagues to the right
file or magical command invocation to observe something.
Now you can just copy and paste specific queries and everyone can see them.
Sometimes you can even inherit whole dashboards colleagues have built for a
specific problem.</p>
<p>Of course Prometheus and Grafana are also superior on more traditional
hardware setup, but then you need to use different tools like ansible to get a
nice and reproducible deployment.</p>
<h2 id="some-tips-running-prometheus-operator-with-grafana"><a class="toclink" href="#some-tips-running-prometheus-operator-with-grafana">Some tips running Prometheus operator with Grafana</a></h2>
<p>The first tip is about deploying it and the values file.
You might notice that the Prometheus operator uses several subcharts, e.g.
namely one for all components and in the values file not all configuration
parameters of the subcharts are exposed.
So sometimes you just need to dig in the inherited helm charts like the
Grafana one to find configurations, e.g. when you want to inject alerting
channels as secrets.
In these cases also a look at the <a href="https://grafana.com/docs/grafana/latest/administration/provisioning/">Grafana provisioning documentation</a> is
helpful to get some ideas.</p>
<p>If you are new to Prometheus, the myriads of metrics scraped can make it
difficult to find out what is already exported.
You can see the whole list of scraped targets on the <code>/targets</code> path of the
Prometheus pod.</p>
<p>For many components there are already nice dashboards available, which you can
explore on the Grafana website.
If you choose to keep them always remember to save the JSON to your git, so
you can deploy them as config maps.
As for self created dashboards, it can be a little bit cumbersome to do that
yourself, as you can not edit dashboards that have been provisioned by config
maps.
If you have multiple clusters or a testing cluster this is no problem though,
as then you can just modify them in one cluster, and then roll out the
dashboards via the usual means to your remaining clusters.</p>
<h2 id="about-loki-and-alternatives"><a class="toclink" href="#about-loki-and-alternatives">About Loki and alternatives</a></h2>
<p>So far I mainly talked about Prometheus, mainly because there is just not much
to say about Loki.
It collects logs and displays them and you can match labels, query with
regular expressions, do sorts of <code>grep</code>, do sorts of <code>grep -v</code>.
There is not much to write home about as it simply does what you want and it
works.</p>
<p>One should note though that "it just works" is not a particular low standard
to work with.
There are bad ideas one can have, such as ELK and other proprietary stacks,
which have several downsides that make them harder to work with.</p>
<p>On the more general side, as a system administrator, you notice when projects
are not community driven but have the taint of opinionated-open-source aka we
want to sell you something.
Deployment is just not as nice and sophisticated, sometimes documentation is
paywalled (thank you for nothing, RedHat), weird bugs stay in forever, the
little annoyances that just add up.
And especially ElasticSearch is an aristocratic brat when it comes to running
smoothly.
This might get better with the AWS fork though.</p>
<p>More specific problems simply arise because it was made for a different job.
When you write business logging pipelines, you fit your output to the logging
stack in the end, so it works nice and well.
On the other hand, application logs are the least standardized thing on earth
and if you run a sufficient number of different applications you will produce
some inputs that will make Elastic just barf up.
It's like running a fuzzier on something that really does not like to be
fuzzied.
Game over.</p>
<p>Also the query language is just not as nice for our purposes.
It is more about correlating higher level events and less about just reading
the damn error messages some application produces.
So it is just not the right tool for the right job.</p>
<h2 id="replacing-promtail-by-vectordev"><a class="toclink" href="#replacing-promtail-by-vectordev">Replacing promtail by vector.dev</a></h2>
<p>Let me just say, <a href="https://vector.dev">vector.dev</a> is THE solution to all things
collecting, transforming and shipping logs.
The vector remap language is really intuitive and overall the project emerged
from the cloud native "logging and tracing situation" - there are myriads of
tools and instead of daisy chaining several logging solutions, vector manages
to do pretty much everything in a nicer, unified and more performant way.
I think their </p>
<p>Only downside is that the current prometheus stack ships promtail by default,
so one has to put in a bit more work; but this is definitely one of the first
optimizations one should do by now.
But the documentation is very good and they also have a nice
<a href="https://vector.dev/blog/kubernetes-integration/">introductory blogpost</a>.</p>Introduction to kubernetes pt. 3: Storage2021-03-12T00:00:00+00:002021-03-12T00:00:00+00:00Marceltag:deaddy.net,2021-03-12:/introduction-to-kubernetes-pt-3-storage.html<p>This is part three of my small high level Kubernetes introduction.
In the <a href="https://deaddy.net/introduction-to-kubernetes-pt-1.html">first post</a> I gave an overview about the control plane and in the
<a href="https://deaddy.net/introduction-to-kubernetes-pt-2-ingress-networking.html">previous post</a> I explained how we can get traffic into our cluster.</p>
<p>In this post we will answer the basic question:
When pods can …</p><p>This is part three of my small high level Kubernetes introduction.
In the <a href="https://deaddy.net/introduction-to-kubernetes-pt-1.html">first post</a> I gave an overview about the control plane and in the
<a href="https://deaddy.net/introduction-to-kubernetes-pt-2-ingress-networking.html">previous post</a> I explained how we can get traffic into our cluster.</p>
<p>In this post we will answer the basic question:
When pods can spawn everywhere and die anytime, how do you manage persistent
storage?</p>
<p>This question is a bit less subtle as the previous one.
Sharing storage across multiple computers and pods immediately jumps out as a
problem, whereas for networking people often think all the nice
loadbalancer magic that proprietary cloud providers gift to you, is something
that comes automatically with kubernetes.</p>
<p>We will start with the naive solutions and then move onto more sophisticated
and usable ones.</p>
<h2 id="host-path-and-local-path"><a class="toclink" href="#host-path-and-local-path">Host path and local path</a></h2>
<p>When one uses hostPath type volumes, one simply mounts a fixed directory,
file, socket or even device on the host.
If your pod dies and spawns on a different host, it will use the same path on
the different host.
Maybe you already have some shared network file system available on all
hosts.
In some instances this might even be a good idea, but usually this also means
that you do not get nice things like quotas automatically.</p>
<p>Alternatively you could add node selectors to the Pod, such that it only
respawns on the same host.</p>
<p>Actually there is another type of volume for exactly this purpose:
A <code>localPath</code> volume is pretty much the same thing as a <code>hostPath</code> volume, but
it includes the information on which nodes this volume should be available and
then the placement of the pod happens accordingly, without you having to
manage the pods.</p>
<p>For single node "clusters" hostPath volumes are usually also a good choice.</p>
<h2 id="persistent-volume-claims-and-assorted-resources"><a class="toclink" href="#persistent-volume-claims-and-assorted-resources">Persistent Volume Claims and assorted resources</a></h2>
<p>Clearly we need an automated way to provision volumes.
Before you can automate anything, you need to be able to declare what should
happen.
Towards this goal there are three resources:</p>
<ul>
<li><code>PersistentVolumeClaim</code> which are used to request a new volume of a specific
type</li>
<li><code>StorageClass</code> which defines a specific type of volume and holds information
about the capabilities of the underlying volumes, e.g. if it can be used by
only one pod pod or by multiple pods</li>
<li><code>PersistentVolume</code> which ties an actual volume to an existing
<code>PersistentVolumeClaim</code></li>
</ul>
<p>The obvious abbreviations of these terms also work with <code>kubectl</code>, so you can
always just type <code>kubectl get pv</code>, <code>kubectl get sc</code> and <code>kubectl get pvc</code>.
Among these resources only PVC are namespaced.</p>
<p>So far not much is happening automatically.
One can create a PVC for a pod with a specific StorageClass and then nothing
happens.
You still have to provision the volume for yourself and then create a
PersistentVolume that is attached to the PVC.
It is a good exercise to do this once with a <code>hostPath</code> or <code>localPath</code> volume.</p>
<p>So we now have the resources to declare which volumes we need and where we
need them.
Now we can talk automation.</p>
<h2 id="automatic-provisioning-of-volumes"><a class="toclink" href="#automatic-provisioning-of-volumes">Automatic Provisioning of volumes</a></h2>
<p>For automatic provisioning of volumes, we need something running that can both
manage the specific type of volume you want to have and that can ingest the
PVC resources so it knows which volumes to provision.
Consequently, such an aptly named provisioner, is usually just a pod or
collection of pods running in the cluster and doing exactly this.</p>
<p>In general you have a provisioner running for each StorageClass, as they all
need to do very different things.
This usually means at daemonset is running, so on each node the attaching and
detaching of storage can be handled, and then you also have additional pods
running that contain the actual control loop ingesting PVC.</p>
<p>And this is pretty much all there is to it <em>in abstracto</em>.</p>
<h3 id="a-note-on-capabilities"><a class="toclink" href="#a-note-on-capabilities">A note on capabilities</a></h3>
<p>Not all storages are created equal.
What your provisioner can do and can not do is pretty much determined by what
your storage can do and can not do.</p>
<p>Ceph is made for multi tenancy and has many nice features like auth tokens for
each device and possesses a nice API to create actual devices and filesystems.
Consequently provisioning ceph rbd volumes and cephfs volumes works like a
charm.</p>
<p>But all the kubernetes magic is making deployments easy, but it does not make
your underlying devices better.
A NFS storage will still be an NFS storage.</p>
<p>Provisioners have to make some choices and sometimes these choices are not
even that good.
For example you can set up a localPath provisioner and configure it to select
<a href="https://deaddy.net/things-that-rock.html">LVM</a> devices, which you then can provision somewhat automatically via
different means such as ansible.
If you then request a 5GB volume but the only device which is currently
available for provisioning is 1 TB, you end up with this being used as the
underlying PV for the 5GB PVC.
This is clearly somewhat unfortunate.</p>
<p>Also it is important to remember that containers are just linux processes.
There is no virtualization happening, so the containers usually see the
devices or folders as they represent themselves to the underlying host system.
In particular your containers running have to match the respective
permissions.
Depending on the storage and flexibility of your application, this might mean
you need chown via initContainers or some other automated way, whereas in
other cases annotations can automatically handle such things for you.</p>
<h3 id="rook-ceph"><a class="toclink" href="#rook-ceph">Rook ceph</a></h3>
<p>Of course you do not want to end up as one of these people that has still
a lot of toil and no nice security concepts just because you wanted to reuse
your organizations old network filesystem.
You want volumes and devices created with separate user tokens and only on
demand so everything integrates nicely with kubernetes.</p>
<p>It is definitely possible in finite time to manually set up a volume
provisioner for ceph, as described in this <a href="https://medium.com/velotio-perspectives/an-innovators-guide-to-kubernetes-storage-using-ceph-a4b919f4e469">nice blogpost about ceph</a>.
But running any storage different than what you have run before is difficult,
and the more you delve into it, the more you might enjoy some more
capabilities which are too much pain to roll out manually.</p>
<p>Luckily there is rook ceph and it is even deployable with nice helm charts.</p>
<p>If you already have a ceph cluster running somewhere or you rather want the
data in the PVC to be independent of Kubernetes, you can use rook ceph just as
a very robust and comfortable way to interact with said cluster.
Or rook ceph can just manage running a ceph cluster for you in the cluster,
provisioned from devices in your nodes.
Of course this means you need to take some more care of backups if there is
anything worthwhile of backing up.
Another possibility would be running a kubernetes just for rook ceph on your
storage nodes and then use rook on your main cluster to interact with said
cluster.</p>
<p>Such decisions mainly depend on the cluster lifecycle you envision, the
importance of the data, the hardware available and the workloads you want to
run.</p>
<p>But more important, if you do not know yet how to get some storage attached to
your on prem cluster, rook ceph is not a bad choice, as ceph has all the nice
features you would expect from a modern storage, while still being simple
enough to be managed by a single mortal.</p>
<p>In the next post I will then discuss <a href="https://deaddy.net/introduction-to-kubernetes-pt-4-monitoring.html">monitoring</a>, where ceph integrates
nicely.</p>Introduction to kubernetes pt. 2: Ingress networking2021-03-04T00:00:00+00:002021-03-04T00:00:00+00:00Marceltag:deaddy.net,2021-03-04:/introduction-to-kubernetes-pt-2-ingress-networking.html<p>In the <a href="https://deaddy.net/introduction-to-kubernetes-pt-1.html">previous post</a> I gave a rough overview about the control plane of a
kubernetes cluster, as well as some explanation on how to think about it.</p>
<p>Why a post about this?
Can't I just create a loadbalancer Service and everything works?
Or just create an ingress with the …</p><p>In the <a href="https://deaddy.net/introduction-to-kubernetes-pt-1.html">previous post</a> I gave a rough overview about the control plane of a
kubernetes cluster, as well as some explanation on how to think about it.</p>
<p>Why a post about this?
Can't I just create a loadbalancer Service and everything works?
Or just create an ingress with the hostname I want?
Well, if you buy your cloud, this almost certainly will work, but you still
need to have a rough idea what kind of magic is happening there.
And more importantly, if you run your own cloud, this is nothing that works
out of the box in most instances. <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
<p>In this post I want to talk about the question:
How do I get traffic into my cluster?
How do I expose services to the outside world?</p>
<p>It might be helpful to point out that in this post capitalization is
significant:
To further differentiate between our application as a service and the
homonymous Kubernetes resource, the former starts with lower case, and the
resource is capitalized as in the resource files as Service.</p>
<h2 id="understanding-networking-inside-a-cluster"><a class="toclink" href="#understanding-networking-inside-a-cluster">Understanding networking inside a cluster</a></h2>
<p>As in the <a href="https://deaddy.net/introduction-to-kubernetes-pt-1.html">previous post</a> I only handwave the in-cluster networking and make
for simplicity the following assumptions:</p>
<ul>
<li>the pod network is 192.168.0.0/16</li>
<li>the Service network is 10.96.0.0/12</li>
<li>I try to not assume calico</li>
</ul>
<p>As pods are ephemeral and each pod has its own ip address, we need a way to
find them by some other means as their ip.
This is done by Services, a resource designed to do exactly that.
They provide a DNS name inside the cluster, which, usually is not exported to
the outside world.</p>
<p>Many people struggle with correctly configuring Services at first, as the
amount of metadata is just something one has to get used to.
Consider a slight modification of the example Service from the
<a href="https://kubernetes.io/docs/concepts/services-networking/service/">documentation</a>, where I added a second selector label.</p>
<div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1</span>
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Service</span>
<span class="nt">metadata</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my-service-cache</span>
<span class="nt">spec</span><span class="p">:</span>
<span class="w"> </span><span class="nt">selector</span><span class="p">:</span>
<span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">MyApp</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Cache</span>
<span class="w"> </span><span class="nt">ports</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">protocol</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">TCP</span>
<span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">80</span>
<span class="w"> </span><span class="nt">targetPort</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">9376</span>
</code></pre></div>
<p>The thing we need to know and that is easy to miss in the documentation is
that this Service will now only select pods that have <em>both</em> the <code>app: MyApp</code>
and the <code>type: Cache</code> label.
So we have to think of an AND operator between each of the lines.
You can always check which pods should be selected via <code>kubectl</code>, i.e.
in this case <code>kubectl get pods -l app=MyApp,type=Cache</code>.
Also note that Services only select pods in their own namespace and which are
ready, although the latter can be overwritten. <sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup></p>
<p>So to summarize: Services with label selectors select pods that</p>
<ul>
<li>live in the same namespace</li>
<li>match <em>all</em> of the labels</li>
<li>are ready</li>
</ul>
<p>To see if your Service now has selected the pods it should have you can check
with <code>kubectl describe</code>, in this case
<code>kubectl describe service my-services-cache</code>.
The pod ips then show up as endpoints and should match up the ips of the pods
you've seen before.
To see pod ips in the output you can for example append <code>-o wide</code> to the
<code>kubectl get pods</code> command.</p>
<h2 id="bridging-the-gap-between-the-cluster-and-the-outside-world"><a class="toclink" href="#bridging-the-gap-between-the-cluster-and-the-outside-world">Bridging the gap between the cluster and the outside world</a></h2>
<p>So far all our pods and Services are only accessible from inside the cluster,
i.e. pod-to-pod.
Even with calico where you usually can access pods from the nodes themselves,
without further interventions you won't be able to resolve
<code>my-service-cache.default.svc</code>.</p>
<p>The simplest but worst solution to this problem are NodePort Services.
Simply by changing the Service resource to type NodePort, the service will be
exposed on all nodes on a specific port, usually somewhere beyond port 30000.
There are certainly situations in which this is appropriate, but for the
most cases, this is not what we want.
Of course we could then loadbalance everything with a separate machine in
front of it, but it also means we always get additional network hops.
Also it means that, unless we actually expose our ingress controller with
this, we would have to build many routes by hand.</p>
<p>So the solution I like to propose is the following:
We run a pod with ports open on HostNetwork on some node(s) at the edge of the
network of our nodes via NodeSelector terms.
This way we solve two problems:</p>
<ul>
<li>it is clear where traffic gets into the network</li>
<li>the pod running inside the network already knows how to resolve in-cluster
hostnames like <code>my-service-cache.default.svc</code></li>
</ul>
<p>Before we discuss some of the options, we have to take a brief look at Ingress
resources and controllers.</p>
<h2 id="ingress-resources-and-controllers"><a class="toclink" href="#ingress-resources-and-controllers">Ingress resources and controllers</a></h2>
<p>Usually one has to expose more than a single service to the outside world.
I will focus on HTTP as it is the most important to expose.
Everything else can also be managed with ingress controllers, but you might
choose different ingress controllers depending on the traffic you want to
expose.</p>
<p>In traditional deployments there are several ways to achieve this, most of
which are interpolations of the following two approaches:
The first is to loadbalance traffic across all webservers and then use
name-based virtual hosting on the servers themselves to discern different
services by the requested host.
The second is to put a reverse proxy in front of the webserver fleet that
then handles name-based virtual hosting and routes traffic to the respective
servers in the backend.</p>
<p>The first approach is very simple to manage and scale, as in a webserverpark
of say twenty machines, all of them are interchangable.
Clearly it requires a large amount of homogeneity in your service, so what one
often ends up with is a main fleet of homogeneous webservers serving the main
application and then some additional servers that require more work to manage.</p>
<p>The second approach of course is more complicated than the first one.
Servers are not completely interchangable anymore and more care has to be
taken to keep services running and one has to do reconfigurations on the
reverse proxy if something in the backend changes.
This introduces toil, but, well, homogeneity is a strong assumption and only
works in the most basic cases.</p>
<p>So the general pattern is to route traffic via name-based virtual hosting to
the corresponding backend-fleet.
And herein is the beauty of ingress controllers:
They do the name-based virtual hosting for you, but you do not have to
configure them manually, but you simply feed them Ingress resources and they
watch out for these and then reconfigure themselves properly.
And they can even handle TLS termination for you, including integrations with
automatic SSL providers.</p>
<p>The skeleton of an Ingress resource usually looks like the following:</p>
<div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">networking.k8s.io/v1</span>
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Ingress</span>
<span class="nt">metadata</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my-service-cache-ingress</span>
<span class="nt">spec</span><span class="p">:</span>
<span class="w"> </span><span class="nt">rules</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cache.example.com</span>
<span class="w"> </span><span class="nt">http</span><span class="p">:</span>
<span class="w"> </span><span class="nt">paths</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/</span>
<span class="w"> </span><span class="nt">backend</span><span class="p">:</span>
<span class="w"> </span><span class="nt">service</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my-service-cache</span>
<span class="w"> </span><span class="nt">port</span><span class="p">:</span>
<span class="w"> </span><span class="nt">number</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">80</span>
</code></pre></div>
<p>This would send all traffic directed at <code>cache.example.com</code> back to our
Service <code>my-service-cache</code>.
Note that the name of the Ingress does not have to match anything of the
service.
Ingresses are namespaced resources and they only select Services from their
own namespace by their name.</p>
<p>The official documentation already outlines <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/">plentiful possibilities</a> of
configuration, but as most Ingress controllers base on tools like nginx,
traefik or haproxy, they usually expose even more configuration possibilities
via annotations.</p>
<h2 id="making-it-work"><a class="toclink" href="#making-it-work">Making it work</a></h2>
<p>We are now in a position to talk about how to set things up.
First of all I want to mention that you probably want to use pre-existing Helm
charts and not roll your own Kubernetes resources for the deployment of
Ingresses.</p>
<h3 id="the-edge-nodes"><a class="toclink" href="#the-edge-nodes">The edge node(s)</a></h3>
<p>First we want to have at least one node at the edge, which is both part of the
cluster, but also has external IPs.
For redundancy reasons it makes sense to have multiple ones and how you
realize mostly depends on your ambient network.
Round robin DNS might be a possibility, but I would suggest one uses a pair of
edge nodes, which then share a virtual service IP via keepalived.
Then all public DNS names for our service would get mapped to this IP.
Downstream we then also do not really care about the number of edge nodes, so
everything applies both for multiple edge nodes or only a single one.</p>
<h3 id="ingress-with-hostnetwork-on-edge-node"><a class="toclink" href="#ingress-with-hostnetwork-on-edge-node">Ingress with HostNetwork on edge node</a></h3>
<p>This would be the simplest setup.
The edge node simply runs the Ingress controller (e.g. nginx, traefik,
haproxy, whatever you like) and opens all ports you need to the outside world.</p>
<p>The downside to this is that you might run into issues with SSL termination.
A rule of thumb I've read somewhere on the <a href="https://thehftguy.com">the HFT guy's blog</a> was around
one core per 0.1 - 1 GBit/s, so probably for starters you can just look at the
hoses that run into your datacenter.</p>
<h3 id="loadbalancer-on-edge-in-front-of-ingresses"><a class="toclink" href="#loadbalancer-on-edge-in-front-of-ingresses">Loadbalancer on edge in front of Ingresses</a></h3>
<p>So when you need to scale the Ingresses, you need to actually loadbalance them
with a proper loadbalancer like HAProxy.
There you have then some decisions to make and all of them are equally bad.</p>
<p>You can just run it in the cluster, again with HostNetwork on the edge node.
You run the Ingress Controllers as a stateful set with a headless service and
then use these names to point at the nodes.
This is elegant, but sadly DNS resolution in HAProxy is not really made for
short lived DNS names and this might blow up.
If you do not use HAProxy but another loadbalancer, this might not even be an
issue for you.
Or you can just use NodeSelectors to put the IngressControllers on a specific
set of nodes and then use HostNetwork to expose them on the internal Node
network, so you can just point the Loadbalancer at these Nodes.</p>
<p>This all introduces a bit more complexity, but at least now you won't be
bottlenecked by CPU when TLS traffic hits.</p>
<h3 id="further-reading"><a class="toclink" href="#further-reading">Further reading</a></h3>
<p>Of course these are not all possibilities and you can quickly devise
interpolations between these examples, depending on what you need, what you
can offload to other teams and well just about any other factor you can think
of.</p>
<p>Official docs aside, the one nugget of gold in the internet of not-so-useful
posts was the ProSiebenSat1 blog post series on that:</p>
<ul>
<li><a href="http://18.195.209.80/blog/post/kubernetes-ingress-networking-part-i">part 1</a></li>
<li><a href="http://18.195.209.80/blog/post/kubernetes-ingress-networking-part-ii">part 2</a></li>
<li><a href="http://18.195.209.80/blog/post/kubernetes-ingress-networking-part-iii">part 3</a></li>
</ul>
<p>We really see here the beauty of kubernetes, as it is very flexible and can
adjust to pretty much every situation.
But there are always choices to be made and it helps to have someone with some
experience, who can help you making them decisevly and shed light on the
downstream effect.
Moving confidently is important, but with central infrastructure like
kubernetes, you better back that confidence up.
Hopefully this post helps you a little bit to do exactly that, and if you
liked it, you might also like the upcoming posts about <a href="https://deaddy.net/introduction-to-kubernetes-pt-3-storage.html">storage</a> and
<a href="https://deaddy.net/introduction-to-kubernetes-pt-4-monitoring.html">monitoring</a>.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>As far as I understand some network plugins like metalllb already come
with LoadBalancer-type capablilities given the ambient network allows for
such configurations, but I did not have the chance to play with this yet <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>This behaviour can be overwritten with the
<code>service.alpha.kubernetes.io/tolerate-unready-endpoints: true</code>
annotation <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Introduction to kubernetes pt. 12021-02-20T00:00:00+00:002021-02-20T00:00:00+00:00Marceltag:deaddy.net,2021-02-20:/introduction-to-kubernetes-pt-1.html<p>In this series of posts I want to give a small introduction into Kubernetes.
I am fairly new to Kubernetes and the first platform I designed just went into
production and I found most of the introductory literature not so helpful in
this process.
My memory is still fresh on …</p><p>In this series of posts I want to give a small introduction into Kubernetes.
I am fairly new to Kubernetes and the first platform I designed just went into
production and I found most of the introductory literature not so helpful in
this process.
My memory is still fresh on the things I struggled with and I am still
breaking colleagues in, so this is actually a helpful article and not the same
buzzwordy "Kubernetes is a self healing something something" that does not
explain a thing.
Especially if you are not buying your cloud, but are running it yourself, this
article series can be seen as a high level walk through to building a platform
that actually can run in production.</p>
<p>Many people still associate docker as the fundamental concept of Kubernetes.
Even though docker is a containerization technology, it does many things in
its own weird ways, does some things just in ways that are bad and is more
like a deadend from a time when we were still figuring it all out.
In some sense, docker is to Kubernetes, what Basic dialects are to modern
programming langauges.
They use the same fundamental technologies, and even though modern Basic looks
almost nothing like old basic, it still carries the burdens of the
circumstances of its inception and no one would base a new project on Basic.</p>
<p>As one can expect from the analogy, this point of view makes many concepts
very nebulous and hard to understand, and is misleading in many instances.
In particularly, it is neither a bottom-up nor a top-down approach,
but more of an inaccurate historical cargo-cult report of how people perceived
things to have come to fruition.
However, almost all Kubernetes introductions I encountered started with
docker, and often never came to the more important parts.</p>
<p>A purely mechanistical point of view is probably also not very helpful as an
entrypoint.
When looking at an existing cluster without prior knowledge, the number
of services and components is overwhelming:
API-servers, etcd, kubelet, ingress controllers, schedulers, everything seems
needlessly complex.
However, when you can tell yourself the story how everything works together,
it makes sense and is easier to grasp.
In this post I try to tell this story, bridging the gap between the
mechanistic understanding and the pragmatic standpoint of an administrator.</p>
<h2 id="what-is-kubernetes"><a class="toclink" href="#what-is-kubernetes">What is Kubernetes?</a></h2>
<p>A brief look at Wikipedia does and does not answer this question:</p>
<p>Kubernetes (commonly stylized as k8s) is an open-source
container-orchestration system for automating computer application
deployment, scaling, and management.</p>
<p>If you know what a container is, this does answer the question.
If you think you know what a container is, this probably also answers the
question.
If you do not know what a container is, let me help you by rewriting the
paragraph and removing some fluff:</p>
<p>Kubernetes is an open-source process-orchestration system for automating
computer application deployment, scaling and management.</p>
<p>This is already a bit better.
But also there are little lies hidden.
I am not a marketeer, so let us be more honest:</p>
<p>Kubernetes is an open-source process-orchestration system for facilitating
computer application deployment and management.</p>
<p>If you look at it, this boils down to the following.</p>
<p>Kubernetes is an init system managing linux processes.</p>
<p>This is kinda underwhelming, isn't it?
Well it is, and I think one should highlight two tiny features:</p>
<p>Kubernetes is an automatizable init system that is able to manage linux
process across multiple computers.</p>
<p>This is really where the beauty lies.
Kubernetes can (but does not have to) manage multiple computers and moreover,
it is designed in a way that allows for declarative automation, by exposing
everything via a nice and overwhelming API.</p>
<p>You would expect an init system take care of the following things:</p>
<ul>
<li>make sure necessary daemons for logging, networking and distributed
storage are running</li>
<li>start and kill processes</li>
<li>handle dependencies of processes</li>
<li>have configuration and startup scripts persisted in easily manageable
configuration files, e.g. in <code>/etc/init.d</code></li>
<li>reduce workload of system operators</li>
</ul>
<p>With these expectations in mind, one now can go forth and think of a minimal
way of accomplishing this task.
Some things are evidently necessary:</p>
<ul>
<li>a way to interact with the cluster as a user and administrator</li>
<li>distribution of config files</li>
<li>distribution of workload</li>
</ul>
<p>These things are really the bare minimum one expects.
However, there are additional things you probably need in a cluster of
computers to make them useful:</p>
<ul>
<li>networking between processes</li>
<li>file systems</li>
<li>networking with the outside world</li>
<li>logging and monitoring</li>
</ul>
<p>In this article I will concentrate on the first four points.
First I want to discuss the obvious necessities to distribute jobs on a
cluster of computers and their implementations in kubernetes.
Then we will deal with the way we talk to the cluster and maybe justify a
view of the choices that have been made, e.g. mostly why YAML is used via an
HTTP API.
Networking in the cluster will be handwaved, as this is already a point where
you have to make choices, namely the selection of a container network plugin.
Most tutorials recommend flannel here, but I think calico is a better first
choice.
Then we will put containerization into context and well that pretty much
finishes up this post.</p>
<h2 id="getting-an-overview-of-the-control-plane"><a class="toclink" href="#getting-an-overview-of-the-control-plane">Getting an overview of the control-plane</a></h2>
<p>All components are for themselves not really that interesting, but it is very
helpful to remind yourself why they are there.</p>
<p>First we need some service we as system operators can talk to, so we can tell
the cluster which workloads to run.
This is accomplished by the API-Server.</p>
<p>As we are expecting things to change over time, we need something like a
control loop, which is what the kube-controller does.</p>
<p>There needs to be a process that manages the scheduling of processes and well,
you can guess it, this is the scheduler's job.</p>
<p>Then we need to store configurations somewhere, which is usually done in
the aptly named etcd.</p>
<p>Finally on each node there is a kubelet service running, which schedules the
local jobs and containers and is the endpoint for the cluster to talk to.</p>
<p>Now this already finishes up the core of the cluster, the so called control
plane.
On a cluster installed with kubeadm you can see these components via
<code>kubectl get pods -n kube-system -l tier=control-plane</code>.</p>
<h2 id="handwaving-of-the-in-cluster-networking"><a class="toclink" href="#handwaving-of-the-in-cluster-networking">Handwaving of the in-cluster networking</a></h2>
<p>Networking inside the cluster, i.e. between pods and the control plane, is
simple and is not simple.
The simple part is the general assumption that you are allowed to do the
networking any way you like, as long as you do not break the two core rules:</p>
<ul>
<li>every pod has its own IP address</li>
<li>every pod can reach any other pod via these IP adresses</li>
</ul>
<p>Of course the second rule is already problematic for many, so there has to be
some quantifier like "unless prevented by some in cluster service" or
something like that.
But for now we can keep it at that.</p>
<p>Also you are free to accomplish this any way you want.
There is a myriad of pod networks to choose from and well, as networking is
complicated, these can also be complicated.</p>
<p>I had some bad latency issues with flannel, but I did not dig deeper into it,
so this might have been a PEBKAC issue and not an issue with flannel.
I like and can recommend calico, as it seems to be the easiest to understand
while still providing acceptable performance.
In this post series, all my networking is written from the perspective of
someone running calico, but I try to be explicit about it when it seems to
matter.
Also I do not know much about networking, so it will not become more detailed
than the following section.</p>
<p>With calico on each node there is some felix pod running, which then handles
the necessary things on the host.
Each pod is assigned an IP from a private subnet, e.g. 192.168.0.0/16.
Which IP this will be depends on the host the pod is going to run on, as each
host is assigend a smaller subnet of this subnet.
On the host itself, this address is bound to a virtual interface with a funny
name like <em>caliXXXXXXXXXXX</em> and some <code>iptables</code> and <code>route</code> things happen so
this IP can talk to the outside world via the default route.
Again some <code>iptables</code> things happen so that this IP can be reached on this
host from the outside.
On the other hosts, calico creates routes to the subnets via the host which
are assigned to this subnet.
Again you can inspect these rules with the <code>route</code> command.
In particular, if you are logged in on a host and run calico, you should be
able to reach all pods running in the cluster via their pod-IP, which is a
nice thing to know and sometimes helps debugging things.</p>
<h2 id="interaction-with-the-cluster"><a class="toclink" href="#interaction-with-the-cluster">Interaction with the cluster</a></h2>
<p>Talking with the kubernetes cluster means talking with the API server(s).
For endusers this usually means <code>kubectl</code> or <code>helm</code>.
The way the API is structured is probably a topic in itself worth to be
discussed, but I want to give a short rationale why we have to deal with YAML
files and clients and can not just ssh into things and run commands.
The main reason for this is that we want to organize different kind of
resources.
Services for networking, programs running, config files to be distributed,
all these things want to be managed.
But what is a common abstraction of a call like <code>ls -al</code>, a config file
residing in some folder and the task to run five apaches distributes over
nodes with none of them being collocated?
Well, one can put everything in the wording of objects. A command object, a
file object, and the apaches distributed over several nodes is then a clever
object consisting of command objects, file objects and metadata making sure
nothing runs on the same server.</p>
<p>Now we have the problem to communicate objects between services; this is
usually done via object serialization.
One of the myriad of object serialization formats is YAML, which has also
become a superset of JSON and has two very important benefits for our use
case:
The first is, it is human readable due to its significant whitespace
structure.
Of course this makes it not necessarily easily debuggable, but this is another
story.
The second benefit is that it plays along with line based diff and hence fits
very well into version control.
And well, combined with popularity and these two factors, YAML has become the
format of choice.</p>
<p>The API server itself is just a HTTP server you (and the cluster) can talk to
via the exposed REST-API.
This has two benefits:
One, REST-APIs are well known, well supported and easy to understand.
Second, HTTPS allows for authentication via certificates.
The only downside to this is that at the moment seems to be, that there is no
support passphrase protected certificates as in the case of ssh keys or
personal SSL certificates.</p>
<h2 id="the-panoramic-view"><a class="toclink" href="#the-panoramic-view">The panoramic view</a></h2>
<p>Now on the lowest level of interaction, we usually do something like the well
known <code>kubectl apply -f some.yml</code>.
This sends the content of the YAML file via HTTPS (authenticated by your
certificate, e.g. in <code>~/.kube/config</code>).
The API server then validates your inputs and if successful, and depending on
the tasks, talks to the scheduler and etcd to do their things.</p>
<p>To this point, the cluster is for most workloads rather dysfunctional:
Your pods can mount local file paths, communicate with each other, but not
with the outside world.
At least without a lot of manual intervention, which we do not want.
If you only run computational workloads, this might actually be sufficient.
You submit jobs, they run, work on the local drives and when they are done you
collect logs with <code>kubectl</code> and data via some means on the bare metal.
This is is not yet an actual improvement for operators, so we have to
introduce more things.</p>
<p>So in upcoming posts we will then dive deeper into
<a href="https://deaddy.net/introduction-to-kubernetes-pt-2-ingress-networking.html">ingress networking</a>
(how do I make services available to the outside world),
<a href="https://deaddy.net/introduction-to-kubernetes-pt-3-storage.html">storage</a>
(how do I manage
volume mounts for pods that might spawn on any computer in the cluster),
and of course
<a href="https://deaddy.net/introduction-to-kubernetes-pt-4-monitoring.html">monitoring</a>
(what is happening in the cluster?).</p>Things that rock2021-01-30T00:00:00+00:002021-01-30T00:00:00+00:00Marceltag:deaddy.net,2021-01-30:/things-that-rock.html<p>When it comes to software I usually hate pretty much everything and I was born
the proverbial grumpy old man yelling "get off my lawn". Especially in times
where people have succumbed to atrocities like the initsystem that is
everything, but a functioning initsystem, the sound management software that
breaks …</p><p>When it comes to software I usually hate pretty much everything and I was born
the proverbial grumpy old man yelling "get off my lawn". Especially in times
where people have succumbed to atrocities like the initsystem that is
everything, but a functioning initsystem, the sound management software that
breaks your sound in all but the most mundane scenarios and package managers
that have simply given up on managing packages, maintaining sanity and joy are
hard.</p>
<p>However, there are some things that are just good and I think we should
celebrate them.</p>
<div class="section" id="lvm">
<h2>LVM</h2>
<p>Even though the logical volume manager is longer around in the Linux world
than I am, you still see installers of even mainstream distros trying to
install your home on a partition table partition. LVM is just a great tool for
both abstraction of filesystems and making things more delcarative.</p>
<p>Especially for workstations and traditional single machine fileservers it
simplifies operational workload, especially when scaling out, to a degree that
is ludicruous.
Insert new disk(s), add them to the volume group, resize logical volume,
resize filesystem, done.</p>
</div>
<div class="section" id="luks">
<h2>LUKS</h2>
<p>As with LVM, LUKS is around since forever. While full disk encryption
certainly has the downside of requiring more care to allow for disaster
recovery, on the upside it is the only somewhat secure way of encrypting your
data.
I have not seen performance impacts in 2010 and hardware has become only more
powerful since then.</p>
<p>If you run servers or computers used by employees, it is even more important
to encrypt all disks, as at some point those disks will be EOL and well, then
you have to make sure the data stored on these does not get into the wrong
hands. While some manufacturers already physically shred all disks that are
returned by business customers, getting rid of tens to hundreds of thousands
of disks securely can be a PITA. Safe yourself the trouble and just encrypt
everything.</p>
</div>
<div class="section" id="building-initrd-and-kernel-for-yourself">
<h2>Building initrd and kernel for yourself</h2>
<p>It's not hard. It's fun. It saves time. You don't have to do it always, but
you should know how to do it and know that it is easy and does not take much
time. The amount of time people spend to mitigate some kernel configuration
issues in the larger distros is ridiculous. If it works ootb, fine, don't
change a thing. If it does not, don't build tons of init scripts and run
several daemons, if it can just be fixed by changing a <code>[*]</code> to <code>[M]</code> or
something similar.</p>
<p>Especially as the number of services on any machine orchestrated by the
machine itself is going down, moving things to the initrd might be part of
making deployments more atomic.</p>
<p>I like these three previous items so much, I even bothered to write a post on
<a class="reference external" href="https://deaddy.net/minimal-initramfs-for-luks-and-lvm.html">how to build a minimal initramfs for use with LUKS and LVM</a>.</p>
</div>
<div class="section" id="git">
<h2>git</h2>
<p>If you do not use version control yet, start reading about git and learn to
use it. If you still use svn, I am sorry. Start reading about git
and learn to use it. Even if you do not code, git is a gift. Especially in
academia it is still underutilized and people still collaborate in Word (LOL)
or send .tex files with e-mails, numbering the versions by name or what have
you.</p>
<p>It is just the right tool for many jobs and definitely made software better.
Some people did not like how git does some things and inspired to write them
quite similar version control systems, but in the end they all ended up only
improving upon git marginally.</p>
<p>Sometimes it is cumbersome and while branching, merging and those things are
simple in theory, working with those takes some practice. But it is practice
well worth it and it will just make your and your collaborators' lifes so much
easier.</p>
</div>
<div class="section" id="vim-or-any-other-modal-editor">
<h2>vim (or any other modal editor)</h2>
<p>OK, I do not care actually about what version of vim you like, if it is vi,
vim, neovim or what not. The main feature I like is the distinction between
navigation and editing and just writing things. Maintaining documents is far
harder than writing new ones, thus it is only sensible that insert mode is not
the main mode.</p>
<p>Asides that vim - like pretty much any other editor out there - has a lot more
functionality. You do not have to become a master, but at least show some
effort learning how to use your most important tools.</p>
</div>
<div class="section" id="unison">
<h2>unison</h2>
<p>Even today unison is the best tool to synchronize your own work stations.
It was almost ten years ago when I wrote a short post about <a class="reference external" href="https://deaddy.net/the-long-lost-art-of-automatic-file-synchronization-with-unison-via-ssh.html">using unison</a>
and people already considered it dead, because, well, feature completeness
ain't sexy.</p>
<p>For actual file sharing and a multi-user solutions it would probably best to
setup an EFSS like ownCloud, Seafile or Nextcloud somewhere.
But, for single user "I have n unix boxes and want part of my home
synchronized", unison is the tool.
It does one job and it does it exceptionally well.</p>
</div>
<div class="section" id="kubernetes">
<h2>Kubernetes</h2>
<p>Kubernetes is aweseome and probably I will write a few more posts about it,
time and workload permitting, over the course of the next months.</p>
<p>I remember when I was first managed a couple installations about a decade
ago and I dreamed about creating one great solution that would allow me
to deploy a typical LAMP stack across a couple of servers. Because in the end
most of the stuff was just apache + software + a few configs pointing at some db
server. Of course you would need to find a way to distribute configs
accordingly, manage reverse proxy and hostnames, make sure data is available.
But then you would need to have backup plans and then you would need to make
sure you can move services across machines to reduce downtime, etc., etc..</p>
<p>While the task itself is simple, reducing it to something like "magical tool
install wiki running on 2 hosts, db cluster running on 3 hosts" is not
trivial and just a lot of work that has to be automated in a somewhat uniform
way. And well, Kubernetes does exactly this. Great. I am amazed. I continue
being amazed. And it even is somewhat lightweight and simple, but I guess for
this I need some more articles, as the existing literature is not that good.</p>
<p>It took me some time to see the awesomeness of it, but that was because much
of the beauty was tainted by the mess that docker was and still is, both
conceptually and from a usage standpoint. Luckily kubernetes does not care
about your container runtime and you can use something better (i.e. anything
but docker).</p>
</div>
<div class="section" id="ceph">
<h2>ceph</h2>
<p>More cloud things. Kubernetes is cool, but what also is cool and especially in
conjunction with kubernetes, is scalable and reliable network storage. Just as
Kubernetes, ceph seems like a needlessly complex beast from hell at first
sight, but it's pretty close to being the simplest solution to the problem of
hosting files replicated over several systems.</p>
<p>Its performance is pretty much dictated by the performance of your network
and disks, just as one would expect from a well designed network filesystem.
Especially rbd block devices have, network speeds permitting, comparable
performance to the underlying disks, with reads being a bit faster and writes
a tiny little bit slower.</p>
<p>It seems to scale well into the single digit petabyte range and fits
exceptional well into the whole cloud native landscape with CSI provisioners
being available for Kubernetes.</p>
<p>I'd love to write something about the awesomeness of EOS, but I won't be able
to dive into this for real before it is sensible to travel again.
However, as far as I know, it is the only candidate already warming up for the
exabyte age.</p>
</div>
<div class="section" id="downloading-and-owning-media">
<h2>Downloading and owning media</h2>
<p>Either by malevolence, incompetence or just companies going out of business or
moving to other sectors, I think at this point everyone has experienced some
significant loss of media they only had access to online or via some
propietary app. If your taste is sufficiently mainstream, this might never be
much of a problem. But in niches, like smaller music releases, research that's
not hosted on something like arXiv or maybe just some blog article with a
recipe you liked, expect the source to go away and make offline backups.
With the exception of archive services backed by the research community, there
is little reason for discriminating between services.
Commercial services are not yet built to last on the scale of lifetimes.</p>
<p>Of course there is also the problem that usually such propietary services
siphon the money and the creators end up being paid close to nothing, unless
of course they are the very big fish.
Furthermore the costs for all this DRM idiocy is coming out of your pocket and
it is not sensible to pay for a war waged against you, the customer.</p>
</div>
<div class="section" id="conclusion">
<h2>Conclusion</h2>
<p>I think there is an overarching theme here: Make your life easy and own your
data, no matter on which scale.</p>
</div>
On tracking bodyweight2021-01-02T00:00:00+00:002021-01-02T00:00:00+00:00Marceltag:deaddy.net,2021-01-02:/on-tracking-bodyweight.html<p>This is a topic which somehow still confuses people and there is a lot of
seemingly contradicting advice.
The main problem is that bodyweight fluctuates daily, but the best solution
people came up with is doing weekly averages or, worse, only to step on the
scale once a week.
I …</p><p>This is a topic which somehow still confuses people and there is a lot of
seemingly contradicting advice.
The main problem is that bodyweight fluctuates daily, but the best solution
people came up with is doing weekly averages or, worse, only to step on the
scale once a week.
I give a tl;dr first, which might be sufficient for people who just lacked the
right idea.
Afterwards I will briefly remind you of the main issues with weight tracking
and then go on to describing how I actually solve the problem.</p>
<p>tl;dr: Weigh in daily and use exponential moving average (EMA) as it reflects
the biology of tissue turnover reasonably well and does not mess up your
psychology on a diet.
As long as your weight is below the EMA (for weight loss) you are on the right
track.</p>
<div class="figure">
<a class="reference external image-reference" href="/images/weight-emas.png"><img alt="plot of raw data vs average vs different emas" src="/images/weight-emas-small.png" /></a>
<p class="caption">Plot of raw data vs weekly average vs different EMAs.
I find the 0.1 parameter useful, but if you really struggle with upswings
an even smoother and slower factor of about 0.5 might be appropriate.</p>
</div>
<p>When you try to change your bodyweight into any direction, you embark on a
very quantifiable progress. The more data you can get, the more accurate is
the picture you can paint. But on the other hand, intraday fluctuations are
usually <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> not interesting to us.
Thus you weigh in daily
at the time with the least amount of confounding factors, which is after
waking (if you have a scale) or at least at the beginning of each gym session
(if you do not have a scale at home).
Given that scales are cheap and I've never seen an adult's
home without one, unless you are a student you probably do not have to resort
to the latter.</p>
<p>Now some people will be thrown off when the weight fluctuates up one day, but
this is just the nature of the beast and it can take some time until everyone
trusts the progress to the same degree. Furthermore, when does a fluctuation
stop being a fluctuation? And is - weigh ins for competition aside - the daily
weight a thing that matters anyway? While fat loss can happen rather rapidly
and it's possible to lose a hundreds of grams of fat a day, productive tissue
gain is lost in the statistical noise of bodyweight fluctuations,
scale-inaccuracy and can only be observed over longer periods of time, ranging
from several days in people in early stages of their career, to weeks and
months in more advanced trainees.</p>
<div class="section" id="problems-of-simple-averages">
<h2>Problems of simple averages</h2>
<p>The simple trick of using weekly averages instead of daily numbers does not
really solves this issue, it only takes a bit of the edge off. When taking
weekly averages, each fluctuation only weighs in with 1/7 of its strength. But
1/7 of a kilo is still enough to throw you off mentally and what might be even
worse, now this 1/7 of a fluctuation haunts you for the next week!</p>
<p>The practical problems aside, there is also a theoretical issue. Anecdotal
evidence, mechanistic reasoning and the general theory of complex
systems suggest that there should be a certain momentum to tissue change. Even
if you were to generate a huge deficit on one day, large parts of it would be
served from glycogen stores and only downstream this would manifest in actual
fat loss.
The other way around, if you are in a hypertrophy phase, shifts in
water and glycogen may elevate your bodyweight immediately, but it will
take weeks until actual contractile tissue is accrued.</p>
</div>
<div class="section" id="the-exponential-moving-average">
<h2>The exponential moving average</h2>
<p>So it appears sensible to use a weighted average over the past few days, but
instead of using 1/7 as weight for seven data points, you use something
smoother. Like a smoothing average. Luckily people have already thought about
several such things and one of these smoothing moving averages is of
particular ease of use, namely the exponential moving average or for short,
<em>EMA</em>. It can be calculated as follows:</p>
<div class="figure align-right">
<img alt="How it translates to spreadsheet software" src="/images/spreadsheet-ema.png" />
</div>
<div class="formula">
<i>EMA</i>(<i>today</i>) = <i>Weight</i>(<i>today</i>)*<i>α</i> + <i>EMA</i>(<i>yesterday</i>)*(1 − <i>α</i>)
</div>
<p>As you can see, the two coefficients sum up to one, so it is indeed an
average.
If you expand the recursive formular for a couple of days you see why
it is called EMA, because the weights then decay exponentially. There is a
choice to be made, namely
about the value of <span class="formula"><i>α</i></span>. The closer it is to zero, the more weight
you give to your previous days and the stronger the smoothing out of the curve
becomes. Something between 0.01 and 0.1 will probably be fine, depending on
how much it messes with your head if the number goes up a bit.</p>
<p>I think 0.1 is a good value for dieting purpose, i.e. each new datapoint is
90% your previous EMA and 10% today's weight.
This is already smoothing out quite nicely, yet still allows for detection of
changes in progress.
Intuitively, it is a smoother version of a 10 day average.</p>
<p>If you really struggle with the ups and downs, another trick would be to
measure the difference of the average between today and a week back. This is a
nice gauge for progress, as it is both resistant to ups and downs and also
gives you the rate of weight loss or gain in pretty much the most accurate way
- which is what you are interested in after all.</p>
</div>
<div class="section" id="conclusion">
<h2>Conclusion</h2>
<p>In conclusion I find the exponential moving average taken from daily weigh ins
much more useful for tracking and evaluating bodyweight changes. In
particular, if one day or so you miss your weigh in, you can just copy
the previous day's weight without doing much damage to the validity of your
tracking.</p>
<p>Finally we also can give an objective answer to the question "am I on the
right track?".
As long as your weight is below (for weight loss) the EMA, you are.
And if it creeps above, you are not and need to watch your diet.
KISS.</p>
<p>In general the EMA works well for measures that are done frequently but
fluctuate, e.g. estimated 1RM.
However, tape measurements, caliper site measurements or tested 1RM are usally
measured infrequently and are less noisy than weight fluctuations, just
because more time passes.</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>in some situations it is interesting, like if you are prone to
holding a lot of water and you have to make weight later in the day on a
specific date</td></tr>
</tbody>
</table>
</div>
Periodization for fun and profit2020-08-19T00:00:00+00:002020-08-19T00:00:00+00:00Marceltag:deaddy.net,2020-08-19:/periodization-for-fun-and-profit.html<p>Most people somewhat involved in strength sports are familiar with the term
periodiziation <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>. To cite the first sentence of Wikipedia on it, it is the
systematic planning of athletic and physical training, but for the rest of the
article, I assume that the reader is somewhat familiar with the …</p><p>Most people somewhat involved in strength sports are familiar with the term
periodiziation <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>. To cite the first sentence of Wikipedia on it, it is the
systematic planning of athletic and physical training, but for the rest of the
article, I assume that the reader is somewhat familiar with the concept.</p>
<p>There probably have been countless discussions about how everything is linear
periodization, the minutiae differentiating conjugate or undulating
periodization from block periodization and how you can layer several forms of
periodization. When creating a periodized plan, you usually start with a goal,
most likely a competition date, and then you work backwards from this goal and
determine in each step, what the athlete has to be able to accomplish to
successfully enter the next phase of the program.</p>
<p>However. This year it's not wise to compete, so if you have a choice and are
not financially dependent on it, you better not compete. So what can you do?
Well, you can take the opportunity and let your training be less confined by
exterior circumstances of the sport and have a longer time horizon for your
athletic development, or maybe just posteriorize it.</p>
<p>There are some difficulties though, as many of us currently experience</p>
<ul class="simple">
<li>lack of training equipment and limited access to gyms</li>
<li>loss of general fitness due to home office and moving less</li>
<li>a lot less time on your hands as, e.g. because non-tech people still try
to work synchronously, demands on reliability and feature velocity have
increased, or you have to take more care in your community and family</li>
<li>less separation of training space and living space, making it difficult to
get in the zone</li>
<li>lack of contests to look forward to</li>
<li>no sensible way to train with other people and being less motivated on
your own</li>
<li>loss of people close to you</li>
</ul>
<p>All these things make training in a fulfilling way more difficult, while at
the same time increasing its importance both for your physical and mental
well being. Also it is clear by now that these circumstances will persist
until end of 2021 or even later in most places. So how does one cope with
that?</p>
<p>Well, the answer is, of course, rethinking your training and the role it's
playing in your life. And then systematically planning it accordingly, i.e.:
Periodization. But instead of trying to push a limit weight at a certain date
in the future, you now have gained a few degrees of freedom in the goal
department, while simultaneously lost a few degrees of freedom in the
circumstance department. So what to do about it?</p>
<p>As the title implies I suggest to periodize for fun and profit.</p>
<div class="section" id="periodization-for-profit">
<h2>Periodization for profit</h2>
<p>Serious training is an expensive hobby when it comes to time. While the
majority of the non-negative health outcomes is usually done with two cardio
sessions and two strenght sessions of less than a hour a week, developing
positive health and improving performance for its own sake can result in
multiple sessions a week, where each of it is longer than the weekly training
time of genpop.
This time is not wasted, though.
Forceful and productive training is helpful to preserve
sanity.
You are working to some goal that's not just work and career, you make
progress and bridge the disconnect from your body, brought to you by a mainly
sedentary lifestyle and you certainly get magnitudes more out of it than just
genpop training for non-negative health, i.e. not dying earlier.</p>
<p>While I mainly chose profit towards the catchy article title, training for
profit probably means a reduction or at least redistribution of training time.
But general health and fitness is also paramount for your day to day
performance. While this is not much of a concern when you have
your regular training schedule and at least some movement to get your ass from
the bed to the desk at work, at this point it is probably slowly catching up
with you. So general fitness now likely is a factor to consider.</p>
<p>Planning for walks is an obvious choice, but also fun things like rest-timed
training (like the inverted Juggernaut method), complexes, high rep (20+)
back-off or even warmup sets help in keeping your general fitness high. High
rep warmups in particular, e.g. with lunges, pushups or even in the main
exercises, also can make the training more effective at slightly lower loads,
reducing risk of injury - if planned appropriately. Of course you need to
consider that it takes a week or to, until you can safely perform your main
training with the increased base level of fatigue. Which is where
periodization comes into play.</p>
<p>Furthermore you probably have to make more out of limited equipment. While a
bar, some weights, a bench and a rack sets you off about a grand, all the
niceties of a gym like dumbbells, boxes, chains etc. really sum up. Money
saved is money earned posttax. Even if you have alread set aside a nice chunk
of money, shipping times for equipment are still in the months and setting up
stuff also takes up precious time. Training your triceps with barbell overhead
extensions is a bit more taxing and requires you to be more fresh than with
cable pushdowns, so this probably changes the structure of your training a
bit. Maybe they now happen between bench and deadlift, instead of at the end
of the training when you only want to sis or bro out for a while. Similarly,
to avoid buying too many dumbbells (they are really expensive), instead of
alternating biceps and triceps exercises, working one muscle group at a time
and instead of dropping load, moving to mechanically favored movements, like
from db curls to hammer curls, can help you to make more out of limited weight
selection. The same is true for prefatigued training and training in higher
rep ranges. The less weights you have to buy, the more money you save and
maybe even can get those plates at a later time cheaper, when all the
powerlifters try to get rid of their panic buys.</p>
</div>
<div class="section" id="periodization-for-fun">
<h2>Periodization for fun</h2>
<p>Strength training should be first and foremost fun, even though our definition
of fun probably encompasses more pain and suffering than that of other people.
Unless it earns you serious bucks, it's only a hobby. And if it does, it is
your career and it is maybe important to preserve your love for the sport. And
if you're a coach this is even more important. Most coaching contracts are -
in contrast to the perception of the clients and even moreso the coaches
themselves - not about the results and quality programming, but about the
coach-trainee relationship and the experience of being coached <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a>.</p>
<p>And where does come fun from? Setting PRs is certainly a nice thing, but
putting numbers with red circles around them in your log book is only a very
superficial and abstract pleasure, just like instabook likes. Performing well,
mastering the weights, crushing training, viscerally perceiving progress -
this is what makes you feel great, forget about work and makes training
enjoyable. Also variety keeps things interesting.</p>
<p>Instead of relying too much on autoregulation, I suggest to take many of the
physiological and psychological considerations one usually has with the
competition date and apply them to any training day. When planning for a
competition you usually can get away with very dreadful training for a few
months, as there is a deadline. But long-term there better be periods of fun.
While it is appropriate to just fuck around a few weeks after competition and
get a relief of strict training with performance expectancies, for
longer periods of time, a totally unplanned approach is not only leaving
precious gains on the table, but also less fun than actually planning for an
optimal training experience.</p>
<p>As mentioned above, actual performance is a key driver of fun, so even when
fun, not performance, is the main goal of your training program, it can still
be very well made into a productive training program.</p>
<p>But what goals do you set? Well, there are several possibilities and I am sure
any somewhat serious friend of the iron sports has at least some of these on
their list:</p>
<ul class="simple">
<li>finally hit some long standing rep PRs, like round numbers or multiples of
red or blue plates that are in close reach or multiples of BW</li>
<li>get a PR in some fun non-comp exercises like behind the neck push presses</li>
<li>maybe some rep scheme you really like but never use because it is
suboptimal, like 20s, 5 x 5</li>
<li>fun stuff like complexes that usually interferes too much with regular
training</li>
<li>maybe finally (TM) get some biceps growth</li>
<li>Linear periodization redux[3]_ for some lifts</li>
</ul>
<p>Then there are some things to take into consideration, which might modify the
way you approach your training session. One thing are aforementioned high rep
warmup sets, which not only prefatigue, but also help you to put some mental
distance between your day and your training.</p>
<p>By taking in all the usual considerations of periodization, one now can add
several different things into a single meso - or at least macro -, while not
being too concerned about a tightly constrained training goal.</p>
</div>
<div class="section" id="putting-it-all-together">
<h2>Putting it all together</h2>
<p>The process of then designing a training plan is not even that much different.
Almost anything is only appropriate at certain points in a plan. Hitting a new
PR clearly is something for the end of a mesocycle, whereas the majority of
work capacity training should be in the beginning of a mesocycle or even in an
earlier one. Make a rough outline and then iterate yourself towards something
sensible and workable and don't be afraid from week-to-week adjustments.</p>
<p>Maybe you already have your favorite training program and only want to tinker
a bit with it. But if you are really in for something different, it makes
sense to use a well established training template like Juggernaut Method as
your skeleton and then build around it, so you know for certain that you have
at least some quality training in the main lifts.</p>
<p>Don't be sad because your highly specific training can't be executed as usual
and make the most of it. Make sure training always adds to your life.</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>except in Germany, where people apparently are totally unaware
of any literature that's not written in German and it's just in 2020 that
people seem to have discovered the <a class="reference external" href="https://deaddy.net/working-with-the-juggernaut-method.html">Juggernaut method</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>as evidenced by the lackluster, thought- and loveless programming of
most coaches (even though this is appropriate outside strength training
populations)</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[3]</td><td>roughly putting more weight on the bar each time and amrapping, see
also <a class="reference external" href="https://deaddy.net/man-3-repranges.html">my repranges blogpost</a></td></tr>
</tbody>
</table>
</div>
man (3) weight prescriptions2020-02-08T00:00:00+00:002020-02-08T00:00:00+00:00Marceltag:deaddy.net,2020-02-08:/man-3-weight-prescriptions.html<p>As most trainees know there are different ways on how to prescribe or measure
the weight on a bar. This is a small glossary of terms one encounters
frequently, as it probably be also can be found elsewhere on the web, but
well, now I have a link handy.</p>
<dl class="docutils">
<dt>Load …</dt></dl><p>As most trainees know there are different ways on how to prescribe or measure
the weight on a bar. This is a small glossary of terms one encounters
frequently, as it probably be also can be found elsewhere on the web, but
well, now I have a link handy.</p>
<dl class="docutils">
<dt>Load, weight on the bar, absolute load</dt>
<dd>Just the absolute weight on the bar (bar included). 200kg is 200kg, 100kg is
100kg. Apart from competitions, it is a useful tool to assess your overall
progress. If you could bench 80kg five times at one time and two years later
you can bench 100kg five times, you probably not only got better at
benching, but also built up your benchin' muscles.</dd>
<dt>1RM, nRM, one rep max, n rep max</dt>
<dd>The 1RM or in long form, your one repetition maximum, is the maximal amount
of weight you can lift for one time in a given exercise. Analogously there
are nRM for any n you can think of, describing the maximal amount of weight
you can lift for n repetitions. In terms of muscle accretion, 1RM does
not seem to be very indicative, but if your 5RM or 10RM in a given exercise
(without big form change) goes up significantly, it usually indicates that
you have built some muscle somewhere.</dd>
<dt>Intensity, absolute intensity</dt>
<dd>The intensity is the relation of the load to your 1RM and expressed in
percentage. If your 1RM in the bench is 100kg and you have 80kg on the bar,
it is an 80% intensity. It is not a description or perception of effort,
even though lesser educated folks or people foreign to the sport might use
in that way, but that's just like non-technical people mistaking the monitor
with the computer back when desktops were commonplace. The term <em>absolute</em> is
usually dropped, unless you want to make the distinction clear to the next
item on the list, namely</dd>
<dt>Relative intensity</dt>
<dd>The relative intensity is the relation of the load for a given number of
reps to your repetition maximum for that number. To keep the numbers simple,
if your 10RM in the squat was 100kg and you would do sets of 10 with 80kg,
it would again be 80% relative intensity, although the absolute intensity
would probably be far lower.</dd>
<dt>RIR, reps in reserve</dt>
<dd>The number of reps you could still do if you were to push a set to technical
or muscular failure. A RIR of 2 would mean that you finish the set at a
point were you could still do two more reps. Note that beginners often
totally misjudge this number and may call a set RIR 2 if in reality they
could still perform ten more reps. Can be used both retrospective
to judge how hard a set was or prescriptive so a lifter can autoregulate
their training, then accompanied with a rep range, e.g. 10 reps at RIR 1.</dd>
<dt>RPE, rate of perceived exertion</dt>
<dd>With RPE you assign a number, commonly in the range from 0 to 10, to the set
you just performed, representing the effort you perceive, with 0 being no
effort at all and 10 being a maximal effort. Most of the time one designates
the RPE with an "@" and this also found its way into spoken language. When
first training with RPE it's useful to equate it with RIR as mentioned in my
<a class="reference external" href="https://deaddy.net/man-3-repranges.html#rts">manpage on repranges</a>, but this is only a rough guideline. Near maximal
singles can be of a lower RPE than @10, even though there might be no rep in
reserve, whereas squats with more than 15 reps are often perceived as @10 no
matter how many more reps you can grind out.</dd>
</dl>
How I currently think about Sheiko's programs2019-10-27T00:00:00+00:002019-10-27T00:00:00+00:00Marceltag:deaddy.net,2019-10-27:/how-i-currently-think-about-sheikos-programs.html<p>Boris Sheiko is currently the most renowned powerlifting coach in the world,
having produced countless exceptional lifters, not only in Russia, but
thanks to the internet all over the world. His programs often deem very
complex, featuring his characteristic double sessions,
where you perform a main lift twice in a …</p><p>Boris Sheiko is currently the most renowned powerlifting coach in the world,
having produced countless exceptional lifters, not only in Russia, but
thanks to the internet all over the world. His programs often deem very
complex, featuring his characteristic double sessions,
where you perform a main lift twice in a single training unit, with another
main lift sandwiched in between. Also the volume seems sheer unsurmountable to
those accustomed to typical rep schemes like 5×5 or 3×8. In this post I want
to elucidate a few thoughts I had about his programming, after having read his
excellent powerlifting book <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>, many posts on his website and every bit and
piece I could find by him on the internet, as well as training according to
his templates and tinkering with them. In my opinion Sheiko's programs start
to look quite natural once you think about them as maximizing practice towards
perfect technique.</p>
<div class="section" id="the-numbered-programs-and-the-large-load-intermediate-program">
<h2>The numbered programs and the large load intermediate program</h2>
<p>When searching for his programs on the internet, one usually finds his famous
numbered programs. They have numbers like #30, #37, #40 and so on. The numbers
do not mean much, it's just a result of Sheiko having written a lot of
programs over his long career. The usual caveat is that all his programs were
written individually for specific lifters, so you have to adapt them to make
them work for you. There is however the so called "large load intermediate
program", which is <a class="reference external" href="http://sheiko-program.ru/forum/index.php?topic=15.0">posted on his forums</a>. It consists of the programs #37,
#30 (or #31, for heavier athletes) and #32 as a peaking block. I myself did
not have much success with #32, however, #37 and #30 have become my go-to
strength programs. These programs are very basic and involve very little
variation of the main lifts, only a little bit of incline benching instead of
the regular bench, and deadlifts to knees and deadlifts from boxes for the
deadlift. Other programs by Sheiko also use chains, bands, work from pins
etc., but I think this very basic program lends itself to distill the main
ideas. The spreadsheets come with nice charts for overall volume and loading
of the specific weeks, so I assume the reader has already completed a Sheiko
program, or at least refers to these to see how the ideas presented look in
practice.</p>
</div>
<div class="section" id="the-central-theme-lifting-is-a-skill">
<h2>The central theme: Lifting is a skill</h2>
<p>While muscle moves weight and lean mass explains 90% of variation of weight
lifted amongst high level competitors, to become a high level competitor you
need excellent technique. This is true for every sport, and even though
powerlifting is less technical than pretty much every other sport on the
planet, good technique still is critical. This becomes obvious when looking at
bodybuilders, or even strongman, who, even though they are often as strong or
even stronger as humanly possible, lift less in the powerlifts than
powerlifters of comparable advancement and bodyweight, even if they have put
in quite some practice.</p>
<p>Having said that, Sheiko does not seem to be overly concerned with
hypertrophy. I have never seen a direct statement by him on this matter, but
there are three apparent reasons. First, in Russia athletes usually have a
much better sports background than in the west, with a much bigger focus on
the development of athletic qualities during formative years, and they are
usually younger when they come to the sport, giving them more time to grow in
a very long career. Second, his programs feature usually enough volume to grow
pretty much everyone. Third, when planning your training year, you can and
should always put in some time dedicated to growing new muscle, but I guess
these periods just don't seem to surface on the internet in form of
spreadsheets.</p>
<p>So for the purpose of this post, I think we should relegate hypertrophy to
something that is being taken care of at some other point. The main quest now
is to find the best way to improve the skill to lift the most weight for a
single repetition in the squat, bench and deadlift. At this point one
also has to mention that many, if not most, of those who trained under Sheiko
did not use steroids and competed in tested federations, as this accusation
sometimes comes up when people see the incomprehensible amount of volume of
his programs.</p>
</div>
<div class="section" id="improving-technical-stability">
<h2>Improving technical stability</h2>
<p>Most lifters, at least after a little bit of coaching, can display pretty good
technique, which obeys the rules of your sport, is safe to perform and quite
efficient. At least as long as the weights are moderate. Sound technique is
only the first step towards technical proficiency.</p>
<p>The key marker for technique is technical stability: Once you have achieved a
solid technique, you want that every repetition looks the same, although
technical degradation during maximal attempts is common. The prime
example for this is rounding of the back during a maximal deadlift attempt
after having trained with a flat back all the time. This is both unsafe, as
you impose maximal forces on your body in a position you did not train with
and it is suboptimal, as you leak energy, since some of the energy that could
have been put into the bar now is used to deform your spine and supporting
muscles.</p>
<p>One has to increase the weight you are able to move with stable technique.
How do you do that? By lifting a lot of weights at which are light enough
so that you can display good technique, but heavy enough so that they pose a
challenge and you need to focus on technique. In other words: Dedicated
practice.</p>
<p>Let us now first discuss how one can measure the amount of dedicated practice,
before we see how many elements of Sheiko's training templates unfold
naturally, at least before the background of the usual constraints an athlete
faces.</p>
</div>
<div class="section" id="the-leading-measures-of-dedicated-practice">
<h2>The leading measures of dedicated practice</h2>
<p>In general one differentiates between leading and lagging measures with
regards to any goal. Lagging measures are usually those that result from
certain actions, but cannot be influenced directly. Leading measures are those
that can be influenced directly by actions and are predictive of changes that
lead you further towards your goal or farther away. One of the simplest
example is dieting to get leaner. While being "lean" is somewhat subjective
and consists of achieving a certain level of muscularity, as well as a certain
body fat percentage, the weight on the scale is sufficiently closely related
to it and makes the process of dieting measurable. However, you cannot
influence the weight on the scale directly in a useful way. On the other hand,
your caloric intake is directly influenced by your actions and will have
impact on your weight change. So in this case your caloric intake would be a
leading measure, while your scale weight would be a lagging measure and it
takes both to diet successfully, because depending on the weight change on the
scale, you adjust your caloric intake.</p>
<p>With regards to building muscle it is to this point not completely clear, what
the leading indicator should be. Although it is somewhat clear that
progressive overload and adequate recovery is the main driver behind muscle
growth, it is hard to put a number on it which you can use to guide you
through your training.
Time under tension was a long time favorite, whereas volume and more recently,
number of hard sets, have gained a lot of support in recent years. Again,
these are numbers which you can influence, not the mechanistic concepts
actually driving the growth of muscle. Failing to make this distinction has
lead to many shameful internet debates over the recent years.</p>
<p>In general literature about motor learning or learning in general, the
favorite number is the number of repetitions, say practice throws for
basketball or golf shots taken. Sheiko does use a similar approach, namely
number of lifts (over 50% of your maximum), or short, NL. He does not
explicitly say that you have to do as many lifts as possible, but NL is
used as a distinction between heavy, medium and light days, weeks and months.
Also the sheer number of lifts performed over any period of time with Sheiko's
training templates attracts attention. While squatting 5×10 once a week would
count as a high volume training for many people, in Sheiko any given squat
session might easily beat that, for multiple times a week.</p>
<p>Shooting for a specific number of lifts without any further constraints
clearly does not seem too beneficial. There is also another number, average
weight lifted or average intensity, which is just the average weight lifted in
relation to your max. This seems to pan out around 65%-70%, but Sheiko says
that this is a result, not a goal. Because what happens during any given
time frame is a variation of load. It has a wave-like nature and it seems to
be such that you always get as many reps with as much weight as possible in,
while maintaining very good form.</p>
<p>So this seems like a good number: Number of lifts performed at an intensity
which improves competition technique with maximal weights. Try to come up with
a training plan which maximizes this number and it starts to look a lot like
the seemingly complex Sheiko templates, which we will now dive into it.</p>
</div>
<div class="section" id="variation-of-load-reps-and-volume">
<h2>Variation of load, reps and volume</h2>
<p>In order to maximize to spent the number of sufficiently heavy lifts, one
cannot work very well with straight sets all the time. As your technical
ability improves, you need more weight, and if you ever tried progressing
something like 5×10, you quickly notice that even if it does not destroy you
physically, it destroys you psychological once you hit a certain weight,
especially on squats or deadlifts. You could drop reps, but then, well, you
drop reps, and that rather aggressively. So a rather standard way to do this
would be going from 5×10 to 5×8 to 5×5 to 4×4 and then 3×3, which means the NL
goes from 50 to 40 to 25 to 16 to 9 reps. This might be appropriate in a
peaking block, but for your normal training, only 16 or 9 reps of any lift per
week or even per session is very likely too little for long term development
of the skill.</p>
<p>The rather obvious solution is to vary the weight used, so instead of using
the same weight for five sets, you start to pyramid up to a certain weight and
maybe go back down. Clearly this solution has also it's limitations, so at
some point you start dropping reps. Since reps with higher weight are more
specific than reps with lower weight, you might want to leave the reps a tad
lower, but do more sets mit more weight.</p>
<p>It is now easily conceivable how one might arrive at a typical pyramid as seen
in Sheiko's training programs, e.g. 50%×5, 60%×4, 70%×3×2, 75%×3×2,
80%×3×5, 75%×3×2, 70%×4, 60%×6, 50%×6. In some sense this is also a very naive
approache to training. If you've never been confronted with any
training program and just went into the gym, looking what you can do, chances
are that you would do a pyramid or just a peak, instead of multiple sets with
the same weight and reps. Another typical rep scheme would be just working up
to multiple sets, so 50%×5, 60%×4, 70%×3×2, 80%×3×5.</p>
<p>One of the benefits of this is that you now have a lot of variables to play
with for a week-to-week progression. You can increase the percentage of the
top sets, you can add top sets, you can modify the number of reps, you can
adjust how much work you do before and after your top sets. So over a typical
cycle, just for the straight top sets, it might look like 75%×3×5,
75%×3×6, 80%×2×5, 80%×2×6, 80%×3×5, 80%×3×6. You slowly increase the amount of
lifts you do with heavy weights and slight variation in reps and sets prevents
that you get burned out. Similarly the pyramids might go from a peak of
75%×3×2 to a peak of 90%×1×2 over the course of a few weeks.</p>
<p>On a higher level, say from week to week and month to month, this way it is
also easy to have weeks of lighter and heavier loads, without sacrificing
load on the bar. While in Western periodization you usally follow a <em>n</em> week
up, 1 week down scheme, where you have <em>n</em> weeks of ever increasing poundages
or volume and then one deload week, Sheiko is a bit more senstivie about the
lifter's accumulated fatigue and varies the total numbers of lifts from week
to week. You still accumulate a lot of fatigue over time, but not so much that
it becomes detrimental to training. Only shortly before competition or testing
a new max you are allowed to drop fatigue and show performance.</p>
<p>Again this looks like a rather natural approach to lifting. You did some work
last time, so to abide the principle of progressive overload, you have to add
something somewhere, and you just look for a place where you can make a
meaningful change without it being so disruptive that you cannot lift with
excellent technique anymore. If one week was really heavy, the next week is a
bit lighter, but at least during the training cycle, you never rest
completely.</p>
</div>
<div class="section" id="ability-to-extrapolate">
<h2>Ability to extrapolate</h2>
<p>There is another factor favoring intrasession variable loading over straight
sets, namely the ability to extrapolate. Your main goal in powerlifting is to
get stronger, so you have at some point lift a weight you have never lifted
before. However, as weight on the bar changes, so does the mechanics of the
lift. A deadlift with 50% of your bodyweight is a very different movement than
a deadlift with 100% of your bodyweight and this is also a very different
movement than a deadlift with 200%. The relations of the levers and the
weight, the position of the center of gravity, the amount of force you have
to produce at every joint, everything changes in very intricate ways. To lift
x% more weight, you can not just only produce x% force at every joint, but
the relations change. As one can see with classic mechanical tasks like
"balancing a double pendulum on a cart", this is not a trivial problem to
solve.</p>
<p>Hence one has to have the ability to extrapolate from previous lifts to
further lifts. In order to get better at lifting different loads, one trains
at different loads. Even when volume and effort can be equated, doing
something like 90kg×3, 100kg×3, 110kg×3 trains this ability much better than
say 100kg×3×3, because in the latter case you are not exposed to different
weights.</p>
</div>
<div class="section" id="double-sessions">
<h2>Double sessions</h2>
<p>Sheiko employs different techniques to achieve the goal of doing as much work
as possible, like ramping up weights or doing pyramids. However, one of the
things that is almost unique to Sheiko's programming are the so called <em>double
sessions</em> where you perform a given lift twice a day, e.g. you squat, then you
bench and then you squat again.</p>
<p>This is a very good way to get more work in, as the muscles involved in the
squat are mostly different ones than those used in the bench, so you can rest
up a bit and then can do more work on the squat again. When deadlifting Sheiko
often employs two different deadlift techniques, like first doing deadlifts to
the knee, then benching, then doing full deadlifts or deadlifts from boxes.</p>
<p>While doing more work is a good reason in itself, there also is a benefit in
motor learning (and learning in general) when learning the same movement twice in
a day, as opposed to doing the same work in one large session (cf. the very
interesting and comprehensible review paper <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a>).</p>
</div>
<div class="section" id="closing-thoughts">
<h2>Closing thoughts</h2>
<p>I hope this helps someone to make sense of Sheiko's templates. Even if you do
not train after his system, the presented concepts appear in most sensible
training programs, e.g. in Mike Tuchscherer's Reactive Training Systems, where
he explicitly states that the volume leading up to the top set is good volume,
or just the variation of training loads in schemes like <a class="reference external" href="https://deaddy.net/on-the-paradigm-difference-between-texas-method-and-heavy-light-medium.html">HLM</a>.</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Sheiko, Boris - Powerlifting: Foundations and methods</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Soderstrom, Bjork - Learning Versus Performance: An Integrative Review</td></tr>
</tbody>
</table>
</div>
Working with the Juggernaut Method2019-03-20T00:00:00+00:002019-03-20T00:00:00+00:00Marceltag:deaddy.net,2019-03-20:/working-with-the-juggernaut-method.html<p>Over the past two years the Juggernaut Method by Chad Wesley Smith has become
the general strength training template of my choice. While <a class="reference external" href="https://store.jtsstrength.com/products/juggernaut-training-a-thoughtful-pursuit-of-strength">Chad's book</a>
already has several pointers on how to modify the template to make it your own
program, as well as exhaustive options for assistance work, I …</p><p>Over the past two years the Juggernaut Method by Chad Wesley Smith has become
the general strength training template of my choice. While <a class="reference external" href="https://store.jtsstrength.com/products/juggernaut-training-a-thoughtful-pursuit-of-strength">Chad's book</a>
already has several pointers on how to modify the template to make it your own
program, as well as exhaustive options for assistance work, I think there is
plenty room to improve upon this basic template. What follows is a collection
of options and modifications to the original template.</p>
<div class="section" id="juggernaut-method-base-template">
<h2>Juggernaut Method base template</h2>
<p>First I want to recall the classic Juggernaut Method template. Each lift will
be trained once a week, say Monday Bench Press, Tuesday Squat, Thursday Press
and Friday Deadlift, according to the following table, where the workloads are
written down as <em>weight × reps × sets</em> and <a class="reference external" href="https://deaddy.net/man-3-repranges.html#rts">RPE</a> for the AMRAP sets are
indicated by an <em>@</em>.</p>
<table border="1" class="docutils">
<colgroup>
<col width="20%" />
<col width="20%" />
<col width="20%" />
<col width="20%" />
<col width="20%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head"> </th>
<th class="head">Week 1 (Accumulation)</th>
<th class="head">Week 2 (Intensification)</th>
<th class="head">Week 3 (Realization)</th>
<th class="head">Week 4 (Deload)</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Month 1</td>
<td>60% × 10 × 4, 60% × 10+ @8</td>
<td>67.5% × 10 × 2, 67.5% × 10+ @9</td>
<td>75% × 10+ @10</td>
<td>40% × 5, 50% × 5, 60% × 5</td>
</tr>
<tr><td>Month 2</td>
<td>65% × 8 × 4, 65% × 8+ @8</td>
<td>72.5% × 8 × 2, 72.5% × 8+ @9</td>
<td>80% × 8+ @10</td>
<td>40% × 5, 50% × 5, 60% × 5</td>
</tr>
<tr><td>Month 3</td>
<td>70% × 5 × 5, 70% × 5+ @8</td>
<td>77.5% × 5 × 3, 77.5×5+ @9</td>
<td>85% × 5+ @10</td>
<td>40% × 5, 50% × 5, 60% × 5</td>
</tr>
<tr><td>Month 4</td>
<td>75% × 3 × 6, 75% × 3+ @8</td>
<td>82.5% × 3 × 4, 82.5% × 3+ @9</td>
<td>90% × 3+ @10</td>
<td>40% × 5, 50% × 5, 60% × 5</td>
</tr>
</tbody>
</table>
<p>The percentages are based on your training max, which is initially about 90%
of a recent (calculated) max, which should not be further away than about six
weeks. After each month you adjust according to the reps you did in the last
plus set, e.g. by 2.5kg for each rep you did more than the indicated reps, or
to 90% or 95% of the calculated max.</p>
</div>
<div class="section" id="changing-the-order-of-months">
<h2>Changing the order of months</h2>
<p>This is a quite straightforward modification and may be particularly useful
for weaker and smaller lifters. If you run the Juggernaut Method as intended,
depending on your assistance work, you go at least eight weeks without
somewhat heavy lifting, making it possible to lose the ability to handle
heavier weights. To remedy this, you simply change the order of months and
train month 1, month 3, month 2, month 4. This way you still profit from phase
potentiation, but stay accustomed to heavier weights.</p>
<p>I think that changing the order of weeks, where the only somewhat reasonable
change would be swapping week 1 and week 2, does seem to work against the
model of accumulating volume, intensifying the workload and then realizing a
new rep record. You could do that but then you probably also want to tinker
more around with the intensities and volume and well ... This is probably to
far removed from the Juggernaut Method to call it a modification of it.</p>
</div>
<div class="section" id="inverted-juggernaut-method">
<h2>Inverted Juggernaut Method</h2>
<p>For the inverted Juggernaut Method you swap in the first two weeks of the
first two months the reps and sets, i.e.</p>
<table border="1" class="docutils">
<colgroup>
<col width="8%" />
<col width="23%" />
<col width="23%" />
<col width="23%" />
<col width="23%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head"> </th>
<th class="head">Week 1 (Accumulation)</th>
<th class="head">Week 2 (Intensification)</th>
<th class="head">Week 3 (Realization)</th>
<th class="head">Week 4 (Deload)</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Month 1</td>
<td>60% × 5 × 9, 60% 5+ @8</td>
<td>67.5% × 3 × 9, 67.5% 3+ @9</td>
<td>75% × 10+ @10</td>
<td>40% × 5, 50% × 5, 60% × 5</td>
</tr>
<tr><td>Month 2</td>
<td>65% × 5 × 7, 65% 5+ @8</td>
<td>72.5% × 3 × 7, 72.5% 3+ @9</td>
<td>80% × 8+ @10</td>
<td>40% × 5, 50% × 5, 60% × 5</td>
</tr>
</tbody>
</table>
<p>In addition to this you impose a limit on rest between sets of 1 minute in the
first week and 1.5 minutes in the second week. This is a great way to improve
both work capacity and technique.</p>
<p>Chad usually recommends this variant over the classical version. It looks
easier on paper than it is, but in the last set it may very well be possible
that you can only hit five or three reps and not the usual ten or eight. He
does not say it in his book, but somewhere someone on the wild wild web asked
Chad about it and he said that this is okay. Sadly I did not save the link.</p>
</div>
<div class="section" id="dropping-deload-weeks">
<h2>Dropping deload weeks</h2>
<p>You might feel tempted to drop deload weeks, as the realization weeks are
already really low volume. I think most people can do so, but I would always
deload after two months. Running longer than this does not seem to be
productive. So you might drop the deload between month 1 and 2, do the deload
after month 2, then again drop the deload after month 3 and deload again once
you are through the whole program. This way you can also accommodate for
scheduling problems.</p>
</div>
<div class="section" id="increasing-volume-in-the-realization-week">
<h2>Increasing volume in the realization week</h2>
<p>Another way to deal with the low volume in the third week of each month is to
thicken it up a bit. Chad recommends that you follow the single AMRAP set with
further AMRAP sets with the same weight, which, as you are fatigued, clearly
will have less reps than the first sets. If you are not that interested in
strength and just in volume, you can also follow up with classical back off
sets at reduced weight. Since you are deloading in the next week anyway, you
can really go crazy with that.</p>
<p>You should not do this and drop the deload week. This is almost guarantees
that your next cycle will not be productive and might set you up for injury.</p>
</div>
<div class="section" id="dropping-months-3-and-4">
<h2>Dropping months 3 and 4</h2>
<p>I found that the first two months are really productive, however, as the
weights get heavier, I do not think that the Juggernaut method is that useful.
Strength training is more productive with a bit more thoughtful distribution
reps and sets, while accumulating volume with sets across really works well.
If you are deep in the offseason as a powerlifter or not primarily
involved in strength sports, simply repeating the first two months, while
escalating the weights according to your rep maxes, is good and productive
training.</p>
</div>
<div class="section" id="my-take-on-the-inverted-juggernaut-method">
<h2>My take on the Inverted Juggernaut Method</h2>
<p>This is a quite recent change I made to my training, as I found the sets of
three in the inverted Juggernaut Method to be a bit too far on the light side
to actually train technique. As I find sets of five, especially in a fatigued
state, to be a great way to work on technique, I kept the volume roughly the
same and changed 3 × 10 to 5 × 6 and 3 × 8 to 5 × 5:</p>
<table border="1" class="docutils">
<colgroup>
<col width="20%" />
<col width="20%" />
<col width="20%" />
<col width="20%" />
<col width="20%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head"> </th>
<th class="head">Week 1 (Accumulation)</th>
<th class="head">Week 2 (Intensification)</th>
<th class="head">Week 3 (Realization)</th>
<th class="head">Week 4 (Deload)</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Month 1</td>
<td>60% × 5 × 9, 60% 5+ @8</td>
<td>67.5% × 5 × 5, 67.5% 5+ @9</td>
<td>75% × 10+ @10</td>
<td>40% × 5, 50% × 5, 60% × 5</td>
</tr>
<tr><td>Month 2</td>
<td>65% × 5 × 7, 65% 5+ @8</td>
<td>72.5% × 5 × 4, 72.5% 5+ @9</td>
<td>80% × 8+ @10</td>
<td>40% × 5, 50% × 5, 60% × 5</td>
</tr>
</tbody>
</table>
<p>As an added bonus I find the 10+ and 8+ sets in the last week of the month a
tad easier to accomplish, as the jump from sets of fives is not as big as the
jump from sets of threes.</p>
<p>In the end there is no best rep scheme and one can simply distribute the total
reps on each working day at the given percentage as it fits. If your cycle is
focussed on hypertrophy, do more reps per set to get in more "hard sets", if
you want to build great technique choose a rep number which gives you the
sweet spot where you start to lose technical stability and if your main
goal is to build work capacity for upcoming cycles, do the inverted Juggernaut
method and be strict about the rest periods.</p>
</div>
<div class="section" id="using-5-3-1-as-assistance">
<h2>Using 5/3/1 as assistance</h2>
<p>This is one of the templates suggested in Chad's book and pretty much straight
forward. Say your main lifts are bench, squat, press and deadlift, then you
follow up the JTS work with the corresponding <a class="reference external" href="https://deaddy.net/man-3-repranges.html#531">5/3/1</a> work of the opposite
lift, so you follow up bench JTS with press 5/3/1 and so on. However, I find
this almost impossible to accomplish after having done the hard work of the
main sets, so I recommend to use only 90% – 95% of your Juggernaut training
max as the training max for 5/3/1.</p>
<p>While I do not like 5/3/1 on its own, I think that it is a great addition to
the Juggernaut Method, as you still get in some practice with heavier weights
this way.</p>
</div>
<div class="section" id="doing-an-exercise-multiple-times-a-week">
<h2>Doing an exercise multiple times a week</h2>
<p>Depending on your main sport, it might be beneficial to do one or two
of the main exercises two times a week, e.g. as a powerlifter it might be very
beneficial to bench and squat twice a week according to the template.</p>
<p>If you have two main exercises scheduled for a single day which hit roughly
the same muscles, say bench and press or squat and deadlift on one day, you
probably want to deflate you training max for the second exercise.</p>
<p>When doing a lift twice (or even more often) a week, I also suggest to only do
the prescribed reps on all but one of the days. To stay fresh as long as
possible during the week, I'd suggest you do it on the last "heavy" session of
the lift. So if you bench first on Monday and Thursday, you rep out on
Thursday. On the other hand, if you bench first on Monday, and bench again on
Thursday but after a similar exercise, like Press, you would still rep out on
Monday to get the heavy work in.</p>
</div>
Creatine FAQ2019-03-03T00:00:00+00:002019-03-03T00:00:00+00:00Marceltag:deaddy.net,2019-03-03:/creatine-faq.html<p>Here is a quick FAQ about creatine. Few things create so much confusion as
creatine – not because there is so much conflicting information, but mainly
because it is something almost anyone at some point comes into contact with it
and wonders what it is about, whether you are into sports …</p><p>Here is a quick FAQ about creatine. Few things create so much confusion as
creatine – not because there is so much conflicting information, but mainly
because it is something almost anyone at some point comes into contact with it
and wonders what it is about, whether you are into sports, mental performance
or just general health.</p>
<p>This post is clearly no medical advice, but just a FAQ for practical
application. Also this is no research review, it is again just a FAQ for
practical application.</p>
<p>I think the legal disclaimer hiere is the following: Before supplementing
creatine you SHOULD consult a medical practitioner. If you have any
preexisting metabolic conditions, especially pertaining your kidneys or liver,
you MUST consult a medical practitioner (cf. <a class="reference external" href="https://www.ietf.org/rfc/rfc2119.txt">RFC 2119</a> for the meanings of
the keywords SHOULD and MUST).</p>
<div class="contents topic" id="contents">
<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#what-is-the-effect-size-of-creatine" id="toc-entry-1">What is the effect size of creatine?</a></li>
<li><a class="reference internal" href="#what-is-creatine" id="toc-entry-2">What is creatine?</a></li>
<li><a class="reference internal" href="#what-does-creatine-do-in-tissue" id="toc-entry-3">What does creatine do in tissue?</a></li>
<li><a class="reference internal" href="#creatine-sources" id="toc-entry-4">Creatine sources</a></li>
<li><a class="reference internal" href="#does-creatine-help-build-muscle-and-strength" id="toc-entry-5">Does creatine help build muscle and strength?</a></li>
<li><a class="reference internal" href="#does-creatine-improve-endurance" id="toc-entry-6">Does creatine improve endurance?</a></li>
<li><a class="reference internal" href="#does-creatine-have-mental-benefits" id="toc-entry-7">Does creatine have mental benefits?</a></li>
<li><a class="reference internal" href="#is-creatine-healthy" id="toc-entry-8">Is creatine healthy?</a></li>
<li><a class="reference internal" href="#does-creatine-impair-natural-creatine-production" id="toc-entry-9">Does creatine impair natural creatine production?</a></li>
<li><a class="reference internal" href="#does-creatine-increase-water-retention" id="toc-entry-10">Does creatine increase water retention?</a></li>
<li><a class="reference internal" href="#how-much-creatine" id="toc-entry-11">How much creatine?</a></li>
<li><a class="reference internal" href="#creatine-and-caffeine" id="toc-entry-12">Creatine and caffeine?</a></li>
<li><a class="reference internal" href="#how-to-take-creatine" id="toc-entry-13">How to take creatine?</a></li>
<li><a class="reference internal" href="#timing-of-intake" id="toc-entry-14">Timing of intake?</a></li>
<li><a class="reference internal" href="#closing-words" id="toc-entry-15">Closing words</a></li>
</ul>
</div>
<p>A click on the heading brings you back to the top, so you do not need to read
everything in straight order.</p>
<div class="section" id="what-is-the-effect-size-of-creatine">
<h2><a class="toc-backref" href="#contents">What is the effect size of creatine?</a></h2>
<p>Creatine supplementation makes a difference in the low single digits, which
can certainly compound over time. If you are not performing at a level, where
single digit performance increases are noticeable, you will not notice any
benefit beyond placebo on shorter timeframes.
If you are only half-assing your training, show up
only randomly or do not record the weights you are using, there is little use
of creatine for you.</p>
</div>
<div class="section" id="what-is-creatine">
<h2><a class="toc-backref" href="#contents">What is creatine?</a></h2>
<p>Creatine is not quite an amino acid, but often wrongly counted towards the
essential amino acids. Essential means that the body can produce it in small
quantities, because it is of such importance. While not an amino acid,
creatine is essential and some organs like the kidneys have the ability
synthesize creatine from a bunch of amino acids. While this natural creatine
production is sufficient to keep you alive, it is in most cases not at a level
necessary for optimal performance.</p>
</div>
<div class="section" id="what-does-creatine-do-in-tissue">
<h2><a class="toc-backref" href="#contents">What does creatine do in tissue?</a></h2>
<p>When cells need energy, they convert adenosin triphosphate (ATP), i.e. some
molecule with three phosphorus attachments, into adenosin diphosphate (ADP),
i.e. some molecule with two phosphorus attachments. This process frees up
energy, which then can be used by the cell, for pure survival or any process
it has to do, or, most importantly, muscle contraction.</p>
<p>Creatine (CR) can bind a phosphor molecule, turning it in Creatine phosphate
(PCr). Stored in the tissue, this molecule can donate the phosphor molecule to
ADP, turning it back into ATP.</p>
<p>There are other methods to refuel your ATP stores, but the conversion PCr to
Cr is a very fast mechanism (you only shift one molecule around).</p>
</div>
<div class="section" id="creatine-sources">
<h2><a class="toc-backref" href="#contents">Creatine sources</a></h2>
<p>Unless you eat daily large amounts (if you don't measure it in kilos, it's a
small amount) of meat, the best source would be pure creatine. It's cheap and
easily synthetized, so even if you are vegan, you can just supplement the
cheapest creatine you find.</p>
</div>
<div class="section" id="does-creatine-help-build-muscle-and-strength">
<h2><a class="toc-backref" href="#contents">Does creatine help build muscle and strength?</a></h2>
<p>It helps you mainly to train harder (i.e. bigger per session volume), without
interfering too much with possible growth signalling pathways. More training
means at least more strength gains, and in the case for creatine probably also
more muscle gains over time. Contrast this with stuff like beta-alanine, which
allows you to train more, but by blunting possible growth signalling
pathways to a point where it seems to counterbalance the benefits (at least
for muscle growth).</p>
</div>
<div class="section" id="does-creatine-improve-endurance">
<h2><a class="toc-backref" href="#contents">Does creatine improve endurance?</a></h2>
<p>It provides energy, so yes. I have no idea whether or not this is good or bad
for long term training.</p>
</div>
<div class="section" id="does-creatine-have-mental-benefits">
<h2><a class="toc-backref" href="#contents">Does creatine have mental benefits?</a></h2>
<p>Possibly there might be some benefits for mental performance, mainly in the
sense of returning your performance to normal levels.
If you do not eat a lot of meat
(again, up to kilos of meat every day), you might not be able to concentrate
as long as with sufficient meat consumption.</p>
<p>At least that is what one study suggests.
Overall the evidence seems weak at best and if you have to look at your phone
every half hour or so, there are probably better ways to
improve your mental game.</p>
</div>
<div class="section" id="is-creatine-healthy">
<h2><a class="toc-backref" href="#contents">Is creatine healthy?</a></h2>
<p>With regards to safety, creatine is the most researched supplement and ill
effects were only observed in persons with pre-existing conditions, especially
those affecting the kidneys or liver. So you SHOULD consult with your
physician, but if you know you're healthy, you are good to go.</p>
<p>Overall research indicates beneficial effects for both cardiovascular and
mental health, e.g. depression and anxiety. However at this point it is too
early to recommend creatine for these purposes and more research has to be
done.</p>
<p>Studies showing increases in any hormones or growth factors do not seem to
hold their water, or report only physiologically irrelevant increases.</p>
</div>
<div class="section" id="does-creatine-impair-natural-creatine-production">
<h2><a class="toc-backref" href="#contents">Does creatine impair natural creatine production?</a></h2>
<p>As you reach
saturation, your body decreases the production of creatine, since that would
only be wasted effort. However, if you stop supplementing creatine or have an
increased demand, your natural production will work again as before.</p>
</div>
<div class="section" id="does-creatine-increase-water-retention">
<h2><a class="toc-backref" href="#contents">Does creatine increase water retention?</a></h2>
<p>Yes, there is some increased intramuscular water retention. Mostly it is due
to the water needed to store the additional PCr in the muscle, comparable to
the increased water retention when storing more glycogen. There also sometimes
seems to be a transient increase in intramuscular water retention when
starting supplementation, which goes back once you are accustomed to it.</p>
<p>As this water retention is intramuscular, it is a good thing, since this alone
increases the pennation angle of your muscle fibers, thereby increasing
strength to a small degree. Unless of course, you are dependent on making
weight or are performing in a sport where increased bodyweight is detrimental.
Then this added weight might be a disadvantage, especially if do not need to
rely on the PCr energy system.</p>
</div>
<div class="section" id="how-much-creatine">
<h2><a class="toc-backref" href="#contents">How much creatine?</a></h2>
<p>The general recommendation is 3 to 10 gram per day, everyday, forever.</p>
<p>Depending on your bodyweight and exercise volume, you should use the lower or
higher end of the range, with the typical 90kg trainee sitting at 5g.</p>
<p>Some people suggest you need far less than this, but usually these people do
not lift or are very small. Some people also
might not need as much, as they are already eating large amounts of meat or
have a naturally high production.</p>
<p>There are also some people suggesting you might far more than this, up to
0.3g per kg of bodyweight. I traced it back to the infamous John Kiefer, who
has a history of over-interpreting study results, so I would not say that this
approach is scientifically backed. However, creatine is cheap and you could
just try it out. Aside from Kiefer, the people reporting success with that are
on the other hand very large specimen lifting heavy and lifting a lot.</p>
<p>There is this common myth of loading protocols and cycling creatine, which
comes down to the limitations of study design. It is hard to compare a person
taking creatine for life to that same person not doing it, so you study the
person without creatine, with creatine and again without creatine. However, if
you belong to a population where additional bodyweight is of detriment during
competition, you might want to use creatine only during the preparation phase,
allowing for harder training. Then also loading protocols with more than the
daily 5g might be beneficial, as you only have so many weeks of training
before you, in contrast to the lifelong lifter where two weeks more or less do
not matter in the grand scheme of things.</p>
</div>
<div class="section" id="creatine-and-caffeine">
<h2><a class="toc-backref" href="#contents">Creatine and caffeine?</a></h2>
<p>Both creatine and caffeine are good. There is again some myth about not
consuming creatine and caffeine at the same time, but I was unable to find
anything supporting this. As far as I know, people tried to figure out whether
creatine plus caffeine had a synergistic effect, but it did not. And then
somehow people happened and "there is no additional benefit from
consuming the two simultaneously" changed into "never take the two together".</p>
</div>
<div class="section" id="how-to-take-creatine">
<h2><a class="toc-backref" href="#contents">How to take creatine?</a></h2>
<p>The easiest way is to just dissolve creatine in some cold beverage. You do not
want to add creatine to hot beverages, as this can again break it down, just
as in cooked meat versus raw meat. Also you do not want it to sit too long in
solution, as this also can break it down, but this is more in the time frame
of several hours and not minutes.</p>
<p>An easy way is to just put some of it into your drinking bottle and let it
just go in solution as you drink and refill the bottle.</p>
<p>Some people report stomach issues when taking large amounts in a single
setting, either space those out or ingest carbohydrates along with it.</p>
</div>
<div class="section" id="timing-of-intake">
<h2><a class="toc-backref" href="#contents">Timing of intake?</a></h2>
<p>There does not seem to be a acute benefit of creatine intake and as creatine
in stored in your favorite tissue, you can just take it whenever it is
convenient for you. Especially it is neither necessary nor beneficial to take
it in the workout window.</p>
</div>
<div class="section" id="closing-words">
<h2><a class="toc-backref" href="#contents">Closing words</a></h2>
<p>I will keep this file updated as I learn more about creatine, or find me
answering other questions again and again, and I am very open to suggestions.</p>
</div>
Learning the Olympic lifts as a Powerlifter2018-07-03T00:00:00+00:002018-07-03T00:00:00+00:00Marceltag:deaddy.net,2018-07-03:/learning-the-olympic-lifts-as-a-powerlifter.html<p>Most of the ways people teach the Olympic lifts to lifters seem to be tailored
to weak people, who are in the beginning of their lifting career, or really
athletic people, who can already move challenging weights during the whole
range of motion. I guess in the past this was …</p><p>Most of the ways people teach the Olympic lifts to lifters seem to be tailored
to weak people, who are in the beginning of their lifting career, or really
athletic people, who can already move challenging weights during the whole
range of motion. I guess in the past this was not much of a problem, as gifted
athletes would figure it out nonetheless and people were not so prone to come
from a pure strength background without having any athleticism beyond squatting
and deadlifting and benching.</p>
<p>As strength surpasses athletic ability, some parts of the technique can not be
understand kinaesthetically (if you deadlift over 200kg, you will not feel
nuances in weight shift when pulling the empty bar to shoulder's height).
Consequently I present a slight modification to teach the O-lifts to the
already (somewhat) strong athlete. Namely I suggest training the high pull
and maybe the jerk heavily, while working on the more technical points with
lighter weights adjusted to the level of skill.</p>
<div class="section" id="usual-way-to-teach-the-o-lifts">
<h2>Usual way to teach the O-lifts</h2>
<p>So the usual way to teach the Olympic lifts is the so called
<em>top-down-approach</em>, which simply means that you start with partial movements
beginning where you want to have the bar in the end. So for the Snatch, you
would begin with Overhead Squats (or even before, presses from behind the neck),
progress through the Transition, maybe do Snatches elevated position and
finally the full competition movement. The Clean
and Jerk is a much longer movement and you would make a exercise sequence for
the Clean and one for the Jerk. Again one would start with the Press (starting
from the rack position on the deltoids, not necessarily the way you usually
Press), progress through Push Presses, Power Jerks until you reach Jerks. For
the Clean part you might begin with Frontsquats and again work your way through
the transition until you have the full clean. Finally you need to combine these
two movements and might start with a Power Clean and Power Jerk, then a
Frontsquat to Power Jerk, finally culminating in the whole and glorious Clean
and Jerk.</p>
</div>
<div class="section" id="the-three-pulls-and-the-catch">
<h2>The three pulls and the catch</h2>
<p>At core of the Olympic lifts, meaning snatch, clean and jerk, and if you like
the classics, clean and press, is the pull from the floor, which ends either in
the bottom position of the snatch, with the weight overhead and you sitting in
the hole, or the bottom position of the clean, with you sitting in the hole of
a Frontsquat. This is commonly referred to as the <em>catch</em>. As you probably know,
this pull consists actually of three pulling movements, before you drop under
the bar:</p>
<ol class="arabic simple">
<li>parallel displacement</li>
<li>hip extension</li>
<li>shrug</li>
</ol>
<div class="section" id="first-pull-parallel-displacement">
<h3>First pull: Parallel displacement</h3>
<p>The first pull starts from the floor. The back angle is a little bit more
upright than in the deadlift and the barbell can lie a bit more in front of
the middle foot, as weights you can put overhead will always be submaximal
pulls. This way the quadriceps are elongated more than in the deadlift,
allowing for a longer acceleration phase.</p>
<p>This phase is rather easy; you accelerate the barbell from the flow in a even
and smooth motion, without any jerk. Until the barbell passes the knees, the
angle between back and ground does not change; hence the name <em>parallel
displacement</em>.</p>
<p>Especially when you can not move much weight, this phase is not as important as
the second pull. Do not fret over speed here and focus on getting in a good
position for the second pull.</p>
</div>
<div class="section" id="second-pull-hip-extension">
<h3>Second pull: Hip extension</h3>
<p>As your knees are out of the way, your hip can extend and the angle between
back and floor will change. This phase continues until your hips are fully
extended. Some people teach to hump the bar during this phase, some don't.
However, usually you should hear a little bit of rattle as the bar passes your
hip, because, although you do not necessarily shoot for it, the bar probably
should touch it.</p>
<p>This part of the pull is also why Olympic lifts are often taught as "jumping
with a barbell" or "jumping with a shrug at the end". The most common mistake
is <em>not to extend the hip fully</em>. A very useful indicator is looking at where
you landed: if you moved vertical during the jump, your hip probably did not
extend fully. You can also try this very well without weight, to see how the
mechanics work out!</p>
<p>This phase is where the most force is transferred to the barbell. Hence it is
of utmost importance to really extend the hip to its full extend.</p>
<p>Note that in this phase there usually is some contact of the bar with the hip.
However, unlike some people believe, this fact alone does not contribute to
the acceleration of the bar. Although it might be a useful cue sometimes to
ensure a complete hip extension, one should not aim to purposely drive the bar
back into the hip or the other way around. Actually this is a second level
misunderstanding, i.e. a misunderstanding of a misunderstanding, where people
where arguing about catapulting and triple extension. That discussion however
is dead for the better part of a decade, as it is pretty much boils down to
the time when the lifter's heels rise as part of the complete hip extension.</p>
</div>
<div class="section" id="third-pull-shrug">
<h3>Third pull: Shrug</h3>
<p>With your hip fully extended and the momentum carrying you onto your toes, you
try to apply a final bit of force to the bar by shrugging. Timing is crucial
here; however, it is better to shrug too late and lose a bit of force
transmission from the third pull, than it is to shrug too early:</p>
<p>If you shrug too early, the barbell does not hang onto your fully extended arms
and dropped shoulders anymore, so part of the force you generate during the hip
extension is wasted on extending your arms and shoulders, instead of
accelerating the bar anymore.</p>
<p>The most common mistakes here are pulling too early and pulling with your arms.
While the first mistake is pretty much a matter of exercising a lot, the second
one often stems from being a bit too focused on getting the bar up instead of
displaying great technique. The best hint here is: You notice when the timing
is right, because the bar feels a thousandfold lighter than when the timing is
off. Try to find that sweet spot.</p>
</div>
<div class="section" id="the-catch">
<h3>The catch</h3>
<p>How or even if you catch the bar depends on the exercise you are doing. If you
are just looking to develop power then doing high pulls might be the exercise
of your choosing, as the catch is arguably the most difficult and dangerous
part of the lift. When it comes to the full clean and or snatch, it boils down
to your ability to squat down and stabilize the weight – a skill which has to
be exercised on its own and the reason why programs targeted at general
athletes only include the power versions of the corresponding lifts (although
they are still more difficult and dangerous than just doing high pulls).</p>
<p>There is not much technique behind the catch, as it is essentially a front or
an overhead squat, initiated with a break at the hips and knees. What is more
important is that one starts decelerating the bar as early as possible. In
particular it is not uncommon to catch the bar in a half or quarter squat
position, as long as the weights are lighter, however, to move the most weight
one clearly has to master to catch the bar quite low and still be able to stop
it on the way down.</p>
</div>
</div>
<div class="section" id="o-lifts-for-powerlifters">
<h2>O-lifts for Powerlifters</h2>
<p>Nowadays there are a lot of trainees who are not the classical sportsman, but
picked up powerlifting or any other strength sport as pastime later in life,
not before the early twenties. As such they are often already quite strong,
but lacking an athletic background, the complex Olympic lifts present a
challenge.</p>
<p>As alluded in the beginning, I propose to work the high pulls heavy, receiving
the bar and partial exercises more lightly</p>
<div class="section" id="heavy-high-pulls">
<h3>Heavy high pulls</h3>
<p>Heavy high pulls are a great exercise on its own, but especially in the
context of learning the timing in the Olympic lifts, they are golden. Starting
with something around 10-30% of your max deadlift, you accelerate the bar
through the three pulls, only to let it go down without catch after the last
pull. Using sets of three to six repetitions, you can try to refine your
timing. The great thing about this exercise is the feedback it provides:
Usually pulling a weight to about chest's height is quite hard, however, once
you get close to good weightlifting technique, it feels much lighter and goes
up much farther, by about a factor of two. So while you might struggle hard to
get 50kg to your chest without any technique, once you hit the sweet spot,
pulling 100kg to chest or shoulder's height is almost easier. Further feedback
is provided by the change in foot position after each lift. If you are jumping
forward, usually your hip extension is not complete (try it!).</p>
<p>This can be programmed as a lighter deadlift session. If you pull sumo you
probably can get away with either variant, however, if you pull conventional I
suggest to use the snatch grip high pull as it is further removed from your
competition lift.</p>
<p>A similar approach can be taken with the jerk, which can be trained from the
racks just as one would maybe train the push press. I usually do not struggle
with this part of the lift other than balancing on my feet, so I prioritize
heavy (overhead) lunges over practicing what I already can do well.</p>
</div>
<div class="section" id="light-technique-drills-and-full-exercies">
<h3>Light technique drills and full exercies</h3>
<p>Finally there are many smaller technique drills one can practice whenever. The
warm-up is a good place as one is still mentally fresh and it helps, but in
the end it depends on your priorities and your schedule. I usually work
through the transition, then snatches or clean pulls from the hang or from
blocks, and then try to do a few sets of the full snatch or the full clean
(as long as my jerk or even push press surpasses my full clean I do not bother
with this part of the movement).</p>
</div>
</div>
<div class="section" id="experience">
<h2>Experience</h2>
<p>Even though I train the Olympic lifts only a few months per year, I still
manage to make some solid progress in these months.</p>
<p>I think the division into heavy pulling work and lighter receiving work is for
some people necessary, as they have not the refined kinaesthetic awareness of
somebody truly athletic. While it certainly can be developed over time, in the
already strong individual pulling the empty bar a thousand times will never
make it "click". One has to present a weight sufficiently heavy for its
mechanics to be actually registered.</p>
<p>It is somewhat similar to teaching the deadlift to newbies. Few people are
ever challenged by 30kg or 40kg and they can just move the bar around their
knees, and they just do not get how to pull. Only when it gets a tad heavier
they are actually forced to move in a way that the knees are not in the bar
path, technique will be understood and can be trained somewhat autonomously,
as then the hit in the knee provides instantaneous feedback.</p>
<p>But in contrast to deadlifts, where one would go up with the weight, I
recommend to go down with the weight once you can reproduce proper technique
with the higher weight. You know you are strong enough, but it teaches your
sensory machinery, if you get a feel with less of a stimulus. Furthermore it
is less taxing and at some point you will be able to use a weight in the full
lift, which is at least sufficiently heavy to train proper pulling mechanics.</p>
</div>
When weekly progression stops working2017-09-24T00:00:00+00:002017-09-24T00:00:00+00:00Marceltag:deaddy.net,2017-09-24:/when-weekly-progression-stops-working.html<p>It is popular to start strength training with some sort of linear program, like
the aptly named
<em>Starting Strength</em> program by Mark Rippetoe</a>`
and in general,
this is a good idea, as it produces consistent results across all age groups
and genders. When these programs stop working, many people …</p><p>It is popular to start strength training with some sort of linear program, like
the aptly named
<em>Starting Strength</em> program by Mark Rippetoe</a>`
and in general,
this is a good idea, as it produces consistent results across all age groups
and genders. When these programs stop working, many people switch to the Texas
Method or to a Heavy-Light-Medium model, where instead of realizing strength
increases from training day to training day, you realize them at least on a
week to week basis. In particular young human males eating enough food and
getting enough sleep can milk these models for quite a long time and run with
them for half a year or in some exceptional cases even tweak them to work for
over a year.</p>
<p>At some point these week-to-week gains will cease to come in and unless you
already have an experienced coach, you have to find a new training program. So
until now, you increased your max first from day to day, then from week to
week. It appears logical that you should seek out programs which produce
results from month to month or even fortnight to fortnight. While there are
quite a few programs seemingly yielding this progression, this is a fallacy and sets
you up for program hopping or at least suboptimal growth. Instead directly jump
into block programming.</p>
<div class="section" id="it-is-not-only-about-stress-and-recovery">
<h2>It is not only about stress and recovery</h2>
<p>As mentioned in my post about the <a class="reference external" href="https://deaddy.net/on-the-paradigm-difference-between-texas-method-and-heavy-light-medium.html">Texas Method and HLM</a>, the foundation of
any training is the completion of stress and recovery cycles to induce
supercompensation. This however is only half of the story. As it turns out, to
build muscle you have to mobilize this huge molecular machinery, so your RNA can
turn protein into precious muscle in the most efficient manner. Clearly, you
almost always have some sort of synthesis of contractile protein, but for
maximal effectiveness, you need the whole machinery. However, to produce
maximal force, you need to train in a manner which does stimulate this
machinery to a much smaller extent. Think of it like building a pyramid (or any
other sort of prestige project): Think of muscle as being the stones itself,
piled up on a huge lump, while the display of strength is the whole glorious
pyramid, sans of construction equipment, with finely chiseled ornaments,
embraced by the setting sun, pleasing the Pharaoh. Now of course, the
construction process does not make a nice sight, for there is dirt and equipment and
slaves around, so whenever the Pharaoh comes to bathe in its glory, people will
make an effort to hide construction equipment and the such and this disrupts
work for quite a long time, even if the Pharaoh only comes to visit for half an
hour (this analogy sounds to tremendously stupid, but sadly this
is what politicians and middle managers do all the time).</p>
<p>To get to the point, whenever you train for strength, you take away from the
machinery building muscle. It is essential the opportunity cost, and as it
turns out, this cost is significant.</p>
</div>
<div class="section" id="appropriate-block-lengths">
<h2>Appropriate block lengths</h2>
<p>For hypertrophy blocks the shortest duration which seems to work is about three
weeks. Add a deload at the end of the block and we talk four weeks. Anything
below that is probably just too short to ramp up the molecular machinery and
actually gain from it. There does not seem to be a upper limit on the
effectiveness of hypertrophy phases, with the following in mind: As you train
with higher and higher training volumes, your body gets accustomed to these
stressors and desensitizes. It is beneficial to resensitize it with a few weeks
of lower volume training after three to six months. Other than that you could
also bodybuild until your eyes fall out. This is also not the worst tactic,
especially if you are a female and have a harder time building muscle, as
Marisa Inda demonstrates currently. She did bodybuilding for about twenty
years and now holds in her weight class a world record total, won the IPF 2017
worlds and is charming, eloquent and adorable to boot. Also she outlifts about
95% the guys I know at 50-ish KG bodyweight.</p>
<p>For strength blocks we again have some sort of minimal length and although I
had some success with two weeks of balls to the walls, again allocating some
time to deload and also some to ease into it, we see four weeks at a minimum.
Also there is some sort of maximal length for a strength block, after which you
exhausted the mainly neuronal adaptions and regained your skill. This
correlates mostly with your top-end strength. A small and weak lifter might not
get much out of more than four weeks, while six to eight weeks seem to work
fine for anyone but the heaviest and strongest lifters, which need a lot more
time to work to their maximal strength levels. But if you're squatting in the
300s or 400s of SI kilograms and not only inferior imperial pounds, you are
probably not reading this article.</p>
<p>Depending on your sport there might be other blocks to consider. In
powerlifting, there is the peaking block, which should run from a few weeks,
with a taper before the meet, to a few months if you are very high level heavy
lifter. This is where you get into the specifics of doing single repetitions,
under competition rules. If you are only supplementing your usual sports
practice, you probably want blocks for some sort of explosive training. Here
the benefits actually seem to taper off after even short periods like three
weeks. And if you are just going to the gym to become a fitter and stronger
you, you do not really need anything besides hypertrophy and strength blocks.</p>
<p>Also note that for other sports block arrangement and layout may differ
greatly. While for the strength athlete a strength block might be centered
around sets of three, an athlete in some other sport might benefit of just a
few heavy singles before a competition, as this rapidly increases force output
and the drop in volume might even also decrease fatigue.</p>
</div>
<div class="section" id="if-block-programming-is-superior-why-do-we-do-linear-beginner-programs">
<h2>If block programming is superior, why do we do linear beginner programs?</h2>
<p>First of all, not everyone does this. Especially in the former soviet union
children go through a much more elaborate and thought out system for physical
education, with general sports practice being in focus in their youth. However,
it is still a very efficient system to put on a lot of muscle on trainees in a
short amount of time, despite its shortcomings. On one hand, the beginner
athlete is much less resistant to muscle growth, so a less specific stimulus is
okay. On the other hand, it is a matter of skill to apply tension and other
stressors to the muscles. If you try to push a weight to failure at around ten
reps, the beginner will either totally underestimate the amount he needs to do,
especially if it is a woman (as they can push reps far harder than men), or
break down in form to make the last few reps. Here the classical three sets of
five with preprogrammed progression is much more useful: One, it is easier to
keep form on five repetitions instead of eight or ten. Two, if you did three
sets of five last time, you have to make a small weight jump this time, so at
one point you will lift to your actual capabilities.</p>
</div>
<div class="section" id="where-to-go-from-here">
<h2>Where to go from here</h2>
<p>Okay, which block periodized programs a good? As already noted in my post about
different rep ranges, I am not a big fan of Jim Wendler's 5/3/1 for its lack of
total volume. Indeed the Juggernaut Method by Chad Wesley Smith (who besides
being an impressive and well spoken specimen himself, has coached Marisa Inda
and many other lifters dominating the sport) has some roots in 5/3/1 and
heavier on volume and has more backing in sports science. Right now this would
be my go-to solution for all but the most recovery-disadvantaged athletes. Also
Chad knows a thing or too about other sports, much more so than almost any
other lifter, and has appropriate programming ideas for people who only want to
lift to supplement their usual training regime. While certainly a good idea to
buy Chad's book you can also find the program itself with a quick google and
lots of good advice on <a class="reference external" href="http://www.jtsstrength.com/">his site</a>. So this cumilates probably in the
ugliest infographic not involving diet advice:</p>
<div class="figure">
<img alt="Do SS, then Texas Method, then Juggernaut Method." src="/images/program-progression.png" style="width: 571px;" />
</div>
</div>
Adding Kernel-Firmware Blobs (for Radeon HD 4670)2017-06-27T00:00:00+00:002017-06-27T00:00:00+00:00Marceltag:deaddy.net,2017-06-27:/adding-kernel-firmware-blobs-for-radeon-hd-4670.html<p>After almost ten years I finally decided to upgrade my system. While my old AMD
5050e is still fast enough for most applications one needs in real life, it is
too slow to display an image on some crappy javascript webpage.</p>
<p>As currently all AMD graphics cards are out of …</p><p>After almost ten years I finally decided to upgrade my system. While my old AMD
5050e is still fast enough for most applications one needs in real life, it is
too slow to display an image on some crappy javascript webpage.</p>
<p>As currently all AMD graphics cards are out of stock, my ancient Radeon HD 4670
has to do the job. Usually installing AMD graphics cards is always the same
game under linux, especially Funtoo/Gentoo:</p>
<ul>
<li>configure kernel to use radeon as a module</li>
<li>add <code>VIDEO_CARDS="radeon"</code> to <code>/etc/make.conf</code></li>
<li><code>emerge -av @x11-module-rebuild</code></li>
<li><code>startx</code> and go fragging</li>
</ul>
<p>In the past there were more steps to it, but the last few times it went just
like this. However, now I just could not get the firmware to load. Well, <em>X</em>
only told me that the driver did not load. However, <em>dmesg</em> showed the
following line:</p>
<div class="highlight"><pre><span></span><code>radeon 0000:22:00.0: Direct firmware load for radeon/R700_rlc.bin failed
</code></pre></div>
<p>Indeed, it did not take long to find the right answer in the <a href="https://forums.gentoo.org/viewtopic-t-1024788-start-0.html">Gentoo forums</a>.
I simply needed to add some firmware blobs to the kernel, namely</p>
<div class="highlight"><pre><span></span><code>radeon/R700_rlc.bin radeon/RV710_uvd.bin radeon/RV730_smc.bin
</code></pre></div>
<p>First step is to install these via <em>emerge -av sys-kernel/linux-firmware</em>.
Then, navigating into <em>/usr/src/linux</em> in and running <em>make menuconfig</em> one has
to set</p>
<div class="highlight"><pre><span></span><code>Device Drivers
→ Generic Driver Options
→ [y] Include in-kernel firmware blobs in kernel binary
( ) External firmware blobs to build into the kernel binary
(firmware) Firmware blobs root directory
</code></pre></div>
<p>However, and this is what irritated me first, to finally add the list of blobs to the kernel, one
needs to select the entry below, which is <em>( ) External firmware blobs to build
into the kernel binary</em>.
Finally one should set, the next entry below, <em>(firmware) Firmware blobs root
directory</em> to <em>/lib/firmware</em>. After this you have something like </p>
<div class="highlight"><pre><span></span><code>Device Drivers
→ Generic Driver Options
→ [y] Include in-kernel firmware blobs in kernel binary
(radeon/R700_rlc.bin ... ) External firmware blobs to build into the kernel binary
(/lib/firmware) Firmware blobs root directory
</code></pre></div>
<p>Now just rebuild the kernel, do not forget to copy it to your boot partition
and then you can go.</p>
<p>Maybe I will need this again when finally new AMD cards are available, we will
see.</p>Randomization of tasks and issues2017-06-21T00:00:00+00:002017-06-21T00:00:00+00:00Marceltag:deaddy.net,2017-06-21:/randomization-of-tasks-and-issues.html<p>So a while ago I have read Nassim Taleb's
<em>Antifragile</em>
surprising, given that it is written in English and quite recent <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>. I cannot
quite endorse it yet, as I have read it only once, however, one of the
ideas <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a> I took away is the following: Living things strive …</p><p>So a while ago I have read Nassim Taleb's
<em>Antifragile</em>
surprising, given that it is written in English and quite recent <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>. I cannot
quite endorse it yet, as I have read it only once, however, one of the
ideas <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a> I took away is the following: Living things strive on variability and
some sort of randomization. For I am a living thing and somewhat organized, I
thought about adding a bit of randomness to my own life.</p>
<p>One idea I already had before is that of randomizing training, just to see how
I would progress on randomly assigning reps, sets and exercises, so I could
compare different training programs to random noise. However, this task is a
bit (it is really only a little bit) more involved than flipping a coin for one
has to consider some parameter constraints and my training is currently mapped
out until September, so that idea has to wait, unless someone wants to play
guinea pig for me (if so, <a class="reference external" href="/about.html">contact me</a>).</p>
<p>The next logical step would be just randomizing my todo items, which is then
what I did. As in tech, when doing math one usually has a long list of open
issues, on each of which one should make progress. Some things can just be done
grinding away, other things require deep thought and repeated attacks. So one
has to juggle a bit, as you want to make progress on the grind projects, e.g.
just texing some integrals or coding some boilerplate code, but you also want
to think deeply about the hard problems. And actually it seems to work quite
well, as I will explain.</p>
<div class="section" id="the-problem-of-organizing-work">
<h2>The problem of organizing work</h2>
<p>The problem anyone experiences, although most people seem to be unaware, is,
that when you do it <em>getting things done style</em> and just grind away, well, you
lose days where you are not working hard and think deeply. However, one of the
best ways to solve problems is to think hard about a problem, read something
related, then sleep over it, rinse repeat. Hence grinding (it is just the best
word, as it is actually like grinding mobs in some RPG) costs you several such
work-cycles.</p>
<p>On the other hand, only thinking hard does not get shit done. At some point you
have to flesh out your notes, get the algorithm in production, figure out the
legal works, what have you.</p>
<p>So if you have full control of your schedule, you would simply map out time for
one kind of work, then again map out time for the other kind of work. But then
again, you usually have more than one task at hand, and you still need to
decide on what to do. And do not think that you just need to focus on one
thing, because even if you have only one focus or goal, this in turn often
requires a plethora of tasks to be done. The <em>single minded focus</em> everyone
loves so much just works on another level.</p>
<p>As life is not binary, you also cannot simply attach each task a label like
"quick and easy", "easy but tedious", "hard" or, the most dreaded task of all,
"tedious and very hard, but still harder than you think it is". Some proofs are
easier than even legal works, some proofs consume your life and sometimes you
just do not know until you are several hours into it.</p>
<p>So we see something here: It is a complex problem with no apparent easy
solution. One can think a lot about it and there are even thousands of books on
how to manage your time and decide what to do next, most of which are dull and
boring. However, the key point is: Complexity. And complexity likes variability.</p>
</div>
<div class="section" id="a-very-rough-and-simple-can-do-system">
<h2>A very rough and simple can-do system</h2>
<p>So, if you have an issue tracker, you could just implement a "random open issue"
function and be done. In my case it is even easier; I have in my home directory
a file called <em>.cando</em>, <a class="footnote-reference" href="#footnote-3" id="footnote-reference-3">[3]</a> with each task on a line, e.g.:</p>
<pre class="code literal-block">
write post about can-do
update server
improve diet script
moving averages
</pre>
<p>Then I have a similar file in other folders, e.g. the contents of
<em>~/math/.cando</em> could be:</p>
<pre class="code literal-block">
Schauder estimates region 1
Schauder estimates region 2
Ecker and Huisken's thingy for non-compact maximum principle
tex compact case
Krylov-Safonov
</pre>
<p>Now, in my <em>.bash_common</em> (which is sourced by my <em>.bashrc</em> but
<a class="reference external" href="https://deaddy.net/the-long-lost-art-of-automatic-file-synchronization-with-unison-via-ssh.html">synched across my computers</a>) I simply added a function.</p>
<pre class="code literal-block">
function cando () {
CANDOFILE=${HOME}/.cando
if [ -f .cando ]
then
CANDOFILE=".cando"
fi
cat $CANDOFILE | sed -e '/^$/d' | sort -R | head -n 1
}
</pre>
<p>The <em>sed</em> command is just to remove empty lines, for I often leave a trailing
empty line in files behind. So, whenever I want to do some work, I switch in
the corresponding folder, type in <em>cando</em> and then there comes up the next task
I will be working on.</p>
<p>There are some improvements one could make, maybe traversing up until one finds
a <em>.cando</em> file (similar to git) or even a smart way to traverse down, but for
now, it works just fine.</p>
</div>
<div class="section" id="wrapping-it-up">
<h2>Wrapping it up</h2>
<p>So far I am very fond of this little script. I mean no one forces you to do it
this way and when you are just inspired to do some task, by no means you should
invoke this script and then do something else! However, whenever I get out of a
meeting or lecture, I can start working on something without having to figure
out what to do, which often amounts to just checking the intarwebz or
continuing doing what I did last, which often has diminishing returns. Plus I
get to revisit projects which I haven't worked on for weeks, which is fun and
helps to keep my mind fresh and sharp.</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>On one hand, this is just a matter of statistics. Most books written are
just crap. On the other hand, English is such a ... pragmatic language. The
reason why everyone speaks English is just because it is the lowest common
dominator in terms of complexity and hence beauty.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>To be more accurate, this is one instance of the main idea, namely that of
<em>antifragility</em>, but lets stay specific.</td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-3">[3]</a></td><td>A little bit positive framing. Also I always know what I have to do, but
when I start working the question is what can I do now?</td></tr>
</tbody>
</table>
</div>
Some portage options I wish I had known earlier2017-05-24T00:00:00+00:002017-05-24T00:00:00+00:00Marceltag:deaddy.net,2017-05-24:/some-portage-options-i-wish-i-had-known-earlier.html<p>The best tools are often those, which capabilities we will never quite exhaust.
As it took years for me to discover the
<a class="reference external" href="https://deaddy.net/tabbing-in-vim.html">excellent tabbing capabilities of vim</a>,
I only found some of the nicer features of portage after years of use
and sometimes struggle.</p>
<table class="docutils option-list" frame="void" rules="none">
<col class="option" />
<col class="description" />
<tbody valign="top">
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--resume</span>, <span class="option">--skipfirst</span></kbd></td>
</tr>
<tr><td> </td><td>Straightforward: If the last …</td></tr></tbody></table><p>The best tools are often those, which capabilities we will never quite exhaust.
As it took years for me to discover the
<a class="reference external" href="https://deaddy.net/tabbing-in-vim.html">excellent tabbing capabilities of vim</a>,
I only found some of the nicer features of portage after years of use
and sometimes struggle.</p>
<table class="docutils option-list" frame="void" rules="none">
<col class="option" />
<col class="description" />
<tbody valign="top">
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--resume</span>, <span class="option">--skipfirst</span></kbd></td>
</tr>
<tr><td> </td><td>Straightforward: If the last emerge command aborted, you can resume it with
<em>--resume</em>, or, if the last package it tried to install causes problems, skip
it with <em>--skipfirst</em> and then resume the emerge.</td></tr>
<tr><td class="option-group">
<kbd><span class="option">--keep-going</span></kbd></td>
<td>So if you do bigger updates like <em>emerge -auvND world</em>, it might happen that
several packages cause problems, while the majority would install just fine.
This switch is like using <em>--skipfirst</em> after each error.</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-O</span></kbd></td>
<td>Install the package(s) without checking for dependencies and blocks.
Sometimes stuff develops circular dependencies or packages block their own
updates. This, followed by a <em>revdep-rebuild</em> can often fix the situation</td></tr>
<tr><td class="option-group">
<kbd><span class="option">--exclude</span></kbd></td>
<td>Oh, who does not hate office suites or html engines. When you want to do a
quick update of all the important packages, so per definitionem, not the
browser and office crap, you can exclude specific packages from being
emerged. Typically I do
<em>emerge -auvND world --exclude app-office/libreoffice</em>
and only deal with the office stuff every once in a while.</td></tr>
<tr><td class="option-group">
<kbd><span class="option">--list-sets</span></kbd></td>
<td>This shows all installed <em>sets</em>, i.e. stuff that starts with an '@', like
@system or @world. Some stuff like <em>@x11-module-rebuild</em> often comes in
handy. But moreover, there is the option of</td></tr>
</tbody>
</table>
<dl class="docutils">
<dt>Creating your own sets</dt>
<dd><p class="first">Finally, which is not technically an option, you can easily create your own
sets similar to <em>@world</em>, <em>@system</em> or the ones listed with <em>--list-sets</em>.
This is kind of recent, at least when I started using gentoo it was still
under development and not usable. So you might have just missed it.
To create a new set, you simply have to create the folder <em>/etc/portage/sets</em>
and then you create a textfile, with each package you want in the set on a
separate line. For example, updating LaTeX is often a huge pain in the
behind, so I created a file <em>/etc/portage/sets/latex</em> containing
.. code:</p>
<pre class="literal-block">
app-vim/vim-latex
dev-texlive/texlive-latex
dev-texlive/texlive-latexextra
</pre>
<p class="last">and just unmerge all latex related packages and then do a emerge -auv @latex.</p>
</dd>
</dl>
<p>The nice thing about gentoo and funtoo is that you
never have to reinstall your system for upgrades. Also other distributions
often tend to accumulate a lot of clutter and cruft over the years, while you
can always get a funtoo or gentoo installation back into a nice, fresh, clutter
free state, even after neglecting full upgrades for years. Using sets and these
handy commands not only helps decluttering your working machine, but also helps
to quickly install new computers with all the programs you need.</p>
Dead letter: My second Sheiko cycle2017-04-06T00:00:00+00:002017-04-06T00:00:00+00:00Marceltag:deaddy.net,2017-04-06:/dead-letter-my-second-sheiko-cycle.html<p>After my <a class="reference external" href="https://deaddy.net/dead-letter-my-first-sheiko-cycle.html">last run of sheiko</a> I decided to try another succession of #37 and
#31. While in theory the numbered programs are to be seen as peaking cycle, I
know several people who ran #37 and #31 (or #30, for the lighter lifters) back
to back with great success …</p><p>After my <a class="reference external" href="https://deaddy.net/dead-letter-my-first-sheiko-cycle.html">last run of sheiko</a> I decided to try another succession of #37 and
#31. While in theory the numbered programs are to be seen as peaking cycle, I
know several people who ran #37 and #31 (or #30, for the lighter lifters) back
to back with great success, so I gave it a try. Well, long story short, it did
not work out as good and I feel weaker than before these two cycles.</p>
<div class="section" id="lessons-learned">
<h2>Lessons learned</h2>
<p>While there is not much more to say about the cycle itself, I learned quite a
bit about Sheiko and training in general in these two months. It would be sad
if not.</p>
<div class="section" id="i-need-volume">
<h3>1: I need volume</h3>
<p>Quite early in the cycle I already had the feeling that I should have done at
least a few weeks of higher volume training before going back to Sheiko and, as
the training weeks passed, this became even more apparent. No surprise here,
but makes me wonder, why other people can run #37 and #30 back to back, or even
several blocks of #37. Well, one of these people is my girlfriend, which, given
that she is a girl, benefits more from low rep training. But there might be
more to it or they do some other modifications I do not know about.</p>
</div>
<div class="section" id="deloads-are-useful">
<h3>2: Deloads are useful</h3>
<p>Well duh. While Sheiko feels like low volume, moderate intensity and one does
not think of it as taxing, I noticed that I did not take a planned deload week
since forever. As mentioned in
<a class="reference external" href="https://deaddy.net/the-difference-between-the-transition-and-the-realization-phase.html">my post about the transition and realization phase</a>
I experimented with lighter loads before testing. But this has not the same
effect as a deload during a volume block. Probably I missed out on quite some
supercompensation during the accumulation phase.</p>
</div>
<div class="section" id="just-enter-a-lower-max-for-deadlifts-and-accept-your-form-sucks">
<h3>3: Just enter a lower max for deadlifts (and accept your form sucks)</h3>
<p>As noted in the <a class="reference external" href="https://deaddy.net/dead-letter-my-first-sheiko-cycle.html">previous post</a>, deadlifts seriously did not go well in the
last cycle. Googling around, I found that other people also have had this
problem. One of the things that happens during Sheiko is that your form just
gets better and better. As they say, there are mostly strong people with bad
form, so his programs intend to improve your form. Now the average conventional
deadlifter, including me, usually does not have a picture perfect form. Letting
the back round even a tiny bit often gives your hamstrings a bit more room to
work and this translates in kilos on the bar. So when your deadlift max is over
40kg over your squat, letting your back round might be the reason.</p>
<p>However, during Sheiko the weights are in the beginning so light that you do
not have to let your back round and when they finally get heavy, this just
feels wrong and you can not pull the weight. This is actually a good thing,
once one gets one ego out of the way and past the fact that there will be
twenty or thirty kilos less on the bar for the next few months. Third world
people are disadvantaged, as this translates into forty-five to sixty-five
pounds, much bigger and painful numbers.</p>
<p>Note that Sheiko often recommends people to try sumo deadlifts for a while, as
for many people this might be the better (i.e. allowing for a bigger total) way
to deadlift.</p>
</div>
<div class="section" id="sheiko-says-everything-above-50-is-working-weight">
<h3>4: Sheiko says everything above 50% is working weight</h3>
<p>When first looking at his programs, one might be tempted to ridicule the
intensity. However, Sheiko says that anything above 50% is a working weight.
While in western programs often only the top sets are considered as working
weight, he says that when factoring in the warm up sets leading to these sets
already count towards the working sets, leading to much more reasonable
estimates of the average intensity.</p>
</div>
<div class="section" id="quads-and-chest-for-total-hams-and-tris-for-balance">
<h3>5: Quads and chest for total, hams and tris for balance</h3>
<p>At least in my training, both <a class="reference external" href="http://70sbig.com">Justin Lascek</a> as well as the guys "around
EliteFTS and Westside", i.e. Dave Tate, Jim Wendler, Louie Simmons and the like
have been an influence for me. They often emphasize training the hamstrings and
triceps, for several reasons. One, at least the Westside crowd comes from
geared lifting, where you obviously need other muscles than in raw lifting.
Secondly, most people already focus on the so called mirror muscles and often
neglect those muscles you do not see in the mirror. However, this results in an
overemphasize of the muscles on the backside in literature, so that many people
do RDLs, rows and what not diligently, but do not give their prime movers the
love they deserve. Me included.</p>
<p>Looking through forums, you often see recommendations like "two reps of pulling
for each rep of pushing", which are the result of this misconception. Or guys
barely able to bench eighty kilos doing floor presses. However, in raw lifting,
the quads drive your squat and the chest often drives your bench. So act and
program accordingly.</p>
</div>
<div class="section" id="the-biceps-is-part-of-the-shoulder-musculature">
<h3>6: The biceps is part of the shoulder musculature</h3>
<p>Powerlifters in spe often laugh at biceps training. Hell, everyone but
strongmen and bodybuilders laugh about it. It just seems so vain. However, the
biceps has two heads attaching at the shoulder, where the long head <em>abducts</em>,
the short head <em>adducts</em> and both are involved in <em>anteversion</em>. This is Latin
for "helps your bench dude".</p>
</div>
<div class="section" id="grinding-is-a-skill-best-trained-with-reps">
<h3>7: Grinding is a skill best trained with reps</h3>
<p>One of the things that might happen during Sheiko is that you forget how to
grind a weight out. This is something also <a class="reference external" href="http://forum.reactivetrainingsystems.com/content.php?83-Learn-to-Grind">Mike Tuchscherer has observed</a>:</p>
<blockquote>
A good friend of mine developed this problem while doing Sheiko-style
training cycles. He did an 8 week cycle where he kept the volume and
intensity the same, but he simply did more reps in each set. So instead of
doing 5 sets of 3 at 80%, he did 4 sets of 4 at 80%. That’s roughly the
same number of reps and the same load, but more reps in each set. The end
result was some nice PR’s and an ability to grind that he had never
experienced before.</blockquote>
<p>I actually had failed some sets in the later cycle, because I just forget how
to keep going for longer than a very short duration. I actually had to
concentrate on not to quit during the lift, which then allowed me to repeat
those sets.</p>
</div>
</div>
<div class="section" id="next-month-s-more-volume">
<h2>Next month(s): More volume</h2>
<p>So the next few months I will again spend more time accumulating volume. As
Sheiko is essentially two to three months of peaking, I should spend at least
that much time doing higher reps and building muscle. Also during this time I
like to shift the focus to presses instead of bench presses. Or at least press
as often as I bench press, for putting weights overhead is just much more
natural.</p>
</div>
Dead letter: My first Sheiko cycle2017-02-20T00:00:00+00:002017-02-20T00:00:00+00:00Marceltag:deaddy.net,2017-02-20:/dead-letter-my-first-sheiko-cycle.html<p>Although you never should change a running system, after my last
<a class="reference external" href="https://deaddy.net/the-difference-between-the-transition-and-the-realization-phase.html">successful experiment with block periodization</a>, I tried out Sheiko's cookie
cutter programs, namely #37 followed by #31. Mainly because my girlfriend made
good progress on #37 and #30 (#31 being for people over 80kg) and was
always asking when …</p><p>Although you never should change a running system, after my last
<a class="reference external" href="https://deaddy.net/the-difference-between-the-transition-and-the-realization-phase.html">successful experiment with block periodization</a>, I tried out Sheiko's cookie
cutter programs, namely #37 followed by #31. Mainly because my girlfriend made
good progress on #37 and #30 (#31 being for people over 80kg) and was
always asking when I would finally try out Sheiko, as she was eager to know
how it would work for me.</p>
<div class="section" id="setting-it-up">
<h2>Setting it up</h2>
<p>The setup for Sheiko is quite simple. You get a huge spreadsheet, where you
enter your maxes for Squat, Bench and Deadlift in one sheet and then you have
one sheet for each of the programs, where you can pick from. So apparently I
lost the source to the spreadsheets, but at least the version for lighter
lifters (i.e. those under 80kg) can be found in the pinned posts of the
<a class="reference external" href="http://sheiko-program.ru/forum/index.php?board=2.0">Sheiko forums</a>. Or you use his app or ask someone who has the spreadsheets.
Given that I barely missed 120kg on the Bench after my last cycle (butt came
off the bench a bit), I entered 165kg, 120kg and 200kg. The Deadlift
number was conservative, as I peeked at the workouts waiting for me. Given
that I was sick when I missed 170kg on the squat, that number might also a bit
deflated, but one of the few things almost everyone agrees on is that one can
better waste one cycle going too easy, than losing momentum and running into a
wall by being greedy at the beginning of a new program.</p>
<p>The hardest part was really printing the sheets out, for libreoffice's weird
way of hiding the option to scale the printing selection to page size. Fuck do
I hate GUI applications.</p>
<div class="figure align-right" style="width: 204px">
<a class="reference external image-reference" href="/images/sheiko-example.png"><img alt="Example week from Sheiko" src="/images/sheiko-example-small.png" style="width: 200px;" /></a>
<p class="caption">The first time in years that my training was so complicated that I had to do
printouts.</p>
</div>
<p>Note that the usual recommendation is to do #37, #30/#31, #32, where #32 serves
as competition preparation. However my girlfriend had to deal with quite a bit
of detraining on #32 and we figured, that at least in the first cycle one
should omit this one, as we are already going lighter than probably necessary.</p>
</div>
<div class="section" id="rough-outline-of-the-training-sessions">
<h2>Rough outline of the training sessions</h2>
<p>Sheiko has by far the most complex loading patterns of all cookie cutter
programs out there, however, a few patterns emerge. First of all, these
programs are classical three day a week programs, with Monday and Friday
dedicated to Squat and Bench, Wednesday dedicated to Deadlift and Bench.
Characteristic is that on most of the days you perform at least one lift twice,
i.e. on the very first day, you Bench 5×3 in the top set, then you do some
squats, followed by chest flies and then you Bench again 4×6, followed by a bit
more assistance. For deadlifts you often use pulls from blocks or deficit
pulls. Furthermore, you do many sets with comparatively little weight and you
often have to change the weight, so that one is sometimes in a hurry to keep
the training session under two hours.</p>
<p>The specificity of the assistance work is painfully high. Good mornings, seated
good mornings, lunges, ab work and at least heavier lifters get some variety
with a few sets of leg presses in #31. Upper body assistance consists mainly
of chest flies, dips, chest flies, sometimes a little bit of triceps work,
chest flies and a set of incline bench and close grip bench here and there.</p>
</div>
<div class="section" id="squatting-low-weights-can-be-incredibly-hard">
<h2>Squatting low weights can be incredibly hard</h2>
<p>When it came to squats, #37 was absolutely horrible. The weights were just too
light. I am not sure if it was because my max was maybe deflated or because
that is actually the plan, to force one to practice good technique with weights
which are so light that the weight does not automatically enforce some kind of
technique. The first few weeks the working sets were all below my previous warm
up weights and consequently, I did not feel warmed up during the work sets or
sometimes afterwards, and this was even after my usual warmup of a few minutes
on the cardio rowing machine and some back extension.</p>
<p>This got better in #31, where the weights finally got appreciable. Not hard
yet, but it will be definitely get at least a little bit challenging in the
next cycle. At least my technique seemed to improve. However, I am not quite
sure how it would work out with bigger weights.</p>
<p>Also I found always that my hamstrings were a little bit neglected. Although
you would usually do good mornings twice a week, I have a hard time to get them
to work for the hamstrings and not the glutes. Furthermore they are more
difficult to do than Romanian Deadlifts and consequently I could not use as
much weight. This means I could not stretch them as hard as I wanted to, at
least not against at least some contraction. This problem should go away as I
practice good mornings some more, though.</p>
</div>
<div class="section" id="everyday-is-chest-day">
<h2>Everyday is chest day</h2>
<p>The upper body work in Sheiko is surprisingly brotastic. Well, you don't do any
targeted biceps work, but bench every session and except for two or three
sessions you always do some chest flies, topped off by the occasional set of
dips or triceps work. Given that the average serious gym goer does nothing but
bench, chest and biceps and outbenches the average powerlifting trainee, it is
not surprising that my bench felt stronger than before; even though the work
sets seemed incredibly light and where programmed about two reps lower than
what I would have thought is adequate, my bench did not take a dive and even
though it was not called for, on the last heavier bench day I could easily
establish a new PR of 120kg after the work sets.</p>
<p>Also the way you would bench is often annoying. Several sessions consist of
long pyramids, starting with 50% of your max for a few reps and going up for
five, seven or even more sets, hitting a few easy singles with something like
85% and then going back all the way down, this time with a few more reps. In
fact bench presses only where hard if one held the rest time quite short; even
just taking a leak and getting some new water would mean that the next set felt
as if you had just begun benching.</p>
<p>However, doing all those chest flies and absolutely no shoulder work was boring
as hell. In some places it seems the right thing to do, as it works as
pre-exhaustion before the next set of benches, in other places I will sub it
with more interesting work in the next cycle. Or even the occasional set of
presses, because I really miss those.</p>
<p>The only thing that was even more boring than the chest flies were a few sets
of push-ups in the second week. While this exercise sure has some benefit to
it, it feels utterly disrespectful to waste my precious gym time with such
equipment less bodyweight stuff. No steel, no fun.</p>
</div>
<div class="section" id="deadlifts-took-a-hit">
<h2>Deadlifts took a hit</h2>
<p>For Deadlifts I already used quite a conservative max, but to no avail. In
particular deadlifts from blocks were much harder than anticipated, and the
work before the highest work set often already drained too much energy so that
what else would have been an easy ×3@8 became an ugly ×3@10. I am not quite
sure why that is the case. My girlfriend actually had the opposite experience
and had to increase the deadlift max she entered quite early because it was
just too easy.</p>
<p>Notable is the complete absence of back work. Sure, some people think deadlifts
from blocks would be back work, but as far as I can tell, they target the
hamstrings, as one takes out the quads in the push from the ground. So the
hamstrings have to pull from a dead stop, which is much harder than from the
already moving weight. But this might also vary with your personal weaknesses,
but unless you are a woman, chances are that your hamstrings are the weak spot
in deadlifts, not your back. Ladies on the other hand develop their upper body
musculature slower than their lower body musculature, so that it always seems
to be a bit underdeveloped.</p>
</div>
<div class="section" id="conclusions-and-changes-to-the-next-cycle">
<h2>Conclusions and changes to the next cycle</h2>
<p>Overall I've gotten stronger. In the bench I could realize a small PR, on the
squat I guess it needs a little bit more prep to get a PR, but it should be
there nonetheless. Only deadlifts worry me, as a few singles with 180kg in the
last deadlift session felt as hard as max lifts. In the next cycle I will run
just a pretty simple linear periodization on deadlifts and sub the deadlift
variations with Rows, RDLs or some other assistance, as I see fit.</p>
<p>For bench and squat I only increased the maxes for the next cycles; bench an
optimistic 5kg, squat a careful 7.5kg. The main differences will lie in the
assistance work, which I will modify along the way. Many sets of flies will be
replaced by similarly programmed presses and instead of lunges or leg presses I
will probably focus on front squats, as leg presses just hurt my knees and back
and lunges are simply annoying and have less ROM at the knee.</p>
<p>It is interesting to note that, except for Deadlift, all my top sets worked out
on the RPE scale as something between @6.5 to @8 and only in rare instances it
would creep up to a @9. This is about one RPE lighter than what I would
ususally do and I might try setting up the next volume block in a similar way.</p>
</div>
The difference between the transition and the realization phase2017-02-14T00:00:00+00:002017-02-14T00:00:00+00:00Marceltag:deaddy.net,2017-02-14:/the-difference-between-the-transition-and-the-realization-phase.html<p>As already noted in my deadletter posts of my <a class="reference external" href="https://deaddy.net/deadletter-training-cycle-2016-1.html">first</a> and <a class="reference external" href="https://deaddy.net/deadletter-training-cycle-2016-2.html">second</a> structured
training cycle last year, I had problems transmuting the increased volume of
the volume block into increased max lifts. Comparing the average volume
session, where I did something from 30 to 50 repetitions with my working
weight …</p><p>As already noted in my deadletter posts of my <a class="reference external" href="https://deaddy.net/deadletter-training-cycle-2016-1.html">first</a> and <a class="reference external" href="https://deaddy.net/deadletter-training-cycle-2016-2.html">second</a> structured
training cycle last year, I had problems transmuting the increased volume of
the volume block into increased max lifts. Comparing the average volume
session, where I did something from 30 to 50 repetitions with my working
weight, in addition to lots of assistance, the measly ten reps in supposedly
"intense" workouts, at least half of which where quite easy as I was
ramping to the weight, just seem off. Well, and it was off, because of my
misunderstanding of what needs to be done. So here I record what I learned
about the roles of the transitioning and the realization phases in a classical
periodization scheme. As the naming is not quite uniform across literature, I
refer to the <em>transition phase</em> as the one following a volume block, where the
goal is to acclimate the lifter to using big weights, to harness the gained
strength from the volume block. The <em>realization phase</em> then leads straight up
to the competition and serves to actually being able to display this strength.</p>
<div class="section" id="anecdotes-to-the-rescue">
<h2>Anecdotes to the rescue</h2>
<p>Listening to other people is sometimes helpful and so it was in my case. I
recalled that during my trainer education, one of the attendees prepared under
Daniel Flaminio for some big competition, maybe even the nationals, however my
memory is blurry on this. What is more important is that she told that her
preparation was quite gruesome with all the typical symptoms of overreaching
present, as for example insomnia after especially hard training sessions. I
one the other hand did not experience anything like that during my prep period
– in fact it seemed rather easy on my and although the weights felt very heavy,
I did not feel exhausted after training. And this was my epiphany. Despite all
the fearmongering about training too much, I knew that I was not working hard
enough. Not out of laziness, but because I had no idea how to train harder at
that time and I thought the whole transitioning business was about dissipating
fatigue. But effective preparation is actually about two things: First, you
train to lift big weights. Second, you reduce any fatigue upcoming to the
competition or max test.</p>
</div>
<div class="section" id="transitioning-is-training-to-lift-big-weights">
<h2>Transitioning is training to lift big weights</h2>
<p>Say you've come from a volume block and you trained with fairly high reps,
something around five per set, for many sets. This means you used mostly
weights somewhere between 70% and 85% on the main lifts over a span of four to
eight weeks. After this period, even extending slightly beyond your (hopefully
increased) five rep max might lead to weights you cannot move for a triple. The
weight feels just damn too heavy. Well, the key is now not to rely on the
mantra "fatigue masks fitness", take a volume reduction and wait for the
magical gains fairy to increase your maxes. This is actually the time where the
real hard training starts, because now you have to train to lift big weights.
As you know, for example from my <a class="reference external" href="https://deaddy.net/man-3-repranges.html">rep range man page</a>, training is about the
completion of <em>stress-recovery-cycles</em>: You subject yourself to a stressor and
then you recover adequately in order to harness the supercompensation effect.</p>
<p>So we have to take bigger weights and then use them to an extend that is
actually stressful. But as already noted, after the volume block even slight
increases of the training weight yield weights which do not allow for a big
workload; a weight with which you could complete a pyramid from aforementioned
<a class="reference external" href="https://deaddy.net/man-3-repranges.html">post</a> might be just too easy to allow for any training to happen, at least if
only lifted once. Going through the programs and repetition schemes I knew I
did not find anything that specifically addressed this problem, so I had to
think of something for myself.</p>
<p>As the anecdote above was the whole impetus leading me to this conclusion and I
had no way to quantify if I trained hard enough, I based my transitioning
phase on perception: I would take bigger weights which I could manage for sets
of threes and then I would continue doing so, until one of the following two
things happened: I could not complete the next set, in which case I would
simply reduce the weight and continue doing sets. Or, I experienced a sensation
of <em>staleness</em>. Not just mere fatigue, but an existential unwillingness to
begin the next set, a state of boredom and disgust, which sets in after you've
rested for a few minutes, but just can't take the next set. Not physical, but
mental exhaustion. This is the place where you can use your favorite fluff talk
motivation thingy, like "I don't stop when I'm tired, I stop when I'm done" or
whatever, since we actually are trying to get to the point where finally
physical exhaustion might set in.</p>
<p>This actually worked quite well, although I still do not have a recipe to
follow. On one day I decided to do 5×5 with a weight a little bit lighter, but
already a bit heavier than the weights in the volume block. That went so well
that I did seven reps in the last set and then thought to do at least one rep
with my previous 3RM, but that rep was so easy that I decided to go all out on
this set and did four reps. I always went by what feels right, so if I felt
somewhat exhausted, I would do fewer reps, or if the weights felt heavy, I did
more reps with less weight, constantly pushing the previous reps and weights.</p>
</div>
<div class="section" id="realization-is-reducing-fatigue">
<h2>Realization is reducing fatigue</h2>
<p>After a few weeks of really heavy training it was time to test my new found
power. As an intermediate lifter longer tapers are not only unnecessary, but
can even lead to detraining. So I did what I always do and just made a one week
preparation, with Monday a single with my projected second attempts and a few
lihter sets to top it off. Wednesday was then just going for my opener,
followed again by even lighter sets. Friday I went for my maxes.</p>
<p>Unfortunately I got sick that week so that I had not much left in me on Friday
and could realize 5kg PRs on my lifts, but only 2.5kg. But still, the lifts
went well, in contrast to my previous attempts at periodization, where I often
could barely move more weight than my 3RM.</p>
</div>
<div class="section" id="summary">
<h2>Summary</h2>
<p>So, finally after a year of tinkering I have a simple and working 9 week block
periodization.</p>
<table border="1" class="docutils">
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Block</th>
<th class="head">Duration</th>
<th class="head">What to do</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Volume</td>
<td>6 weeks</td>
<td>"Just do the work". ×5@9 with 5-10% fatigue worked well for me on the
main lifts, anything for assistance</td>
</tr>
<tr><td>Transitioning</td>
<td>2 Weeks</td>
<td>"Take what's there". Get as many reps as you can with a heavy weight
allowing for 1-3 Reps, then do backoff or repeats until you can't take it
anymore.</td>
</tr>
<tr><td>Realization</td>
<td>1 Week</td>
<td>Just practice your second and first attempt while getting fresh for the
maxtest at the end of the week.</td>
</tr>
</tbody>
</table>
<p>There is still a lot of work to do. I figure that the Transitioning phase might
be extended. Once you get to the point where you are able to produce
substantial volume at higher weights, one might try to milk that a bit longer,
with a more structured approach, where one does pyramids or something similar,
instead of pushing to the point of mental fatigue. However, I am glad that I
finally found a way back to strength after a volume block, as
on one hand, research and anecdotal evidence suggest that you should spend most
time accumulating volume, whereas on the other hand, my maxes always took a
dive after a period without lifting heavy and it took me long to get back to my
old maxes.</p>
</div>
Minimal initramfs for LUKS and LVM2016-10-31T00:00:00+00:002016-10-31T00:00:00+00:00Marceltag:deaddy.net,2016-10-31:/minimal-initramfs-for-luks-and-lvm.html<p>I think if you do not run your system on a fully encrypted disk, you might as
well hand over your data directly. If your data partition is not encrypted, one
can simply boot into a live system and take your data. If your system partition
is not encrypted, one …</p><p>I think if you do not run your system on a fully encrypted disk, you might as
well hand over your data directly. If your data partition is not encrypted, one
can simply boot into a live system and take your data. If your system partition
is not encrypted, one can simply drop a modified binary on it. Both scenarios
do not take much effort beyond physical access, which is a low barrier, at
least once you consider who might even be interested in that. Maybe you do not
care as a private person. But once your organization has a size where some
new cleaning crew goes unnoticed, this is the easiest attack vector.</p>
<p>Having full disk encryption on the other hand requires the attacker to either
modify the kernel or massively corrupt your <em>initramfs</em>, which seems to be a lot
harder than just planting a sshd which accepts one key more, or at least two
attacks, one to corrupt your initramfs and retrieve your passphrases and another
one to actually retrieve your data. And disk encryption comes to practically
no cost. While it still and obviously does not give absolute security, it is
the biggest barrier one can achieve by means of software.</p>
<p>Anyway, having quickly elucidated reasons for full disk encryption, the usual
setup in the linux world would be to have your disk(s) encrypted bar the boot
partition via <em>LUKS</em> and then running a <em>LVM</em> over it. However, to access this,
you need to employ an <em>initramfs</em>. While there are tools to automatically
generate these and some distros even roll them out automatically, I dislike the
bloat they come with, so I make my own. The link I used to use 404'd a long time
ago, so I hope to preserve the knowledge by reposting its content, although it
is slightly modified as I had in my personal wiki.</p>
<p>First of all, the setup for the following is having one disk, <em>/dev/sda</em>, with
one partition <em>/dev/sda1</em> for <em>/boot</em> and <em>/dev/sda2</em> for the encrypted volume,
on which there is a volume group <em>vg</em> with a partition named <em>root</em>. If you
have more than one disk or use a raid, modify accordingly and perhaps include
static <em>mdadm</em> binaries in the initramfs.</p>
<p>First of all, we need static versions of <em>busybox</em>, <em>lvm2</em> and <em>cryptsetup</em>. In
Funtoo/Gentoo you obtain these by setting useflags</p>
<pre class="code literal-block">
sys-fs/lvm2 static
sys-apps/busybox static
sys-fs/cryptsetup static
</pre>
<p>and then accepting the new changes to the useflags portage wants you to make.
Now we may begin by creating the <em>initramfs</em>, so as root we create a folder.
All of the following takes place inside that folder.</p>
<pre class="code literal-block">
mkdir bin dev dev/mapper dev/vc etc newroot proc sys
cp /bin/busybox /sbin/cryptsetup /sbin/lvm.static bin/
mv bin/lvm.static bin/lvm
ln -s busybox bin/cat
ln -s busybox bin/mount
ln -s busybox bin/sh
ln -s busybox bin/switch_root
ln -s busybox bin/umount
ln -s busybox bin/sleep
ln -s lvm bin/vgscan
ln -s lvm bin/vgchange
</pre>
<p>This gives us all the binaries we need. Now we need to create the devices we
need in order to access the system.</p>
<pre class="code literal-block">
cp -a /dev/console /dev/sda2 /dev/null /dev/random /dev/urandom dev
ln -s ../console dev/vc/0
</pre>
<p>If we are using some other keyboard than the English standard one, we also want
to load it:</p>
<pre class="code literal-block">
busybox dumpkmap > etc/kmap-de
ln -s busybox bin/loadkmap
</pre>
<p>And maybe some nice motd:</p>
<pre class="code literal-block">
cp /etc/msg etc/
</pre>
<p>Finally we need to add the init script, which runs all commands. For this we
create a file <em>init</em> with the following contents</p>
<pre class="code literal-block">
#!/bin/sh
mount -t proc none /proc
CMDLINE='cat /proc/cmdline'
mount -t sysfs none /sys
#wait a little to avoid trailing kernel output
sleep 3
#rescue function in case something is going wrong
rescue_shell() {
echo "Something went wrong. Dropping you to a shell."
busybox --install -s
exec /bin/sh
}
#If you don't have a qwerty keyboard, uncomment the next line
loadkmap < /etc/kmap-de
#raid
#/bin/mdadm --assemble /dev/md2 /dev/sda2 /dev/sdb2 || rescue_shell
#If you have a msg, show it:
#cat /etc/msg
#dm-crypt
#/bin/cryptsetup luksOpen /dev/md2 vault || rescue_shell
/bin/cryptsetup luksOpen /dev/sda2 vault || rescue_shell
#lvm
#/bin/lvm vgscan
/bin/lvm vgchange -ay vg || rescue_shell
#root filesystem
mount -r /dev/mapper/vg-root /newroot || rescue_shell
#unmount pseudo FS
umount /sys
umount /proc
#root switch
exec /bin/busybox switch_root /newroot /sbin/init ${CMDLINE}
</pre>
<p>For everything to work we finally have to make it accessible:</p>
<pre class="code literal-block">
chmod u+x init
</pre>
<p>Last but not least, we have to actually create the <em>initramfs</em>. I used to use
the following command, but it does not work anymore (hints why are welcome!):</p>
<pre class="code literal-block">
find . | cpio --quiet -o -H newc | gzip -9 > /boot/initramfs
</pre>
<p>Instead, assuming the boot partition is mounted under /boot, we do:</p>
<pre class="code literal-block">
find . -print0 | cpio --null -ov --format=newc > /boot/initramfs
</pre>
<p>That's it. Now all that is left to do is to have properly configured kernel and
telling him to load this <em>initramfs</em> at boot time.</p>
Getting protein isn't that hard2016-09-30T00:00:00+00:002016-09-30T00:00:00+00:00Marceltag:deaddy.net,2016-09-30:/getting-protein-isnt-that-hard.html<p>As I wrote <a class="reference external" href="https://deaddy.net/protein-aint-overrated.html">before</a>, I consider it imperative to incorporate enough protein in
ones diet. For myself I found about 180g–200g per day to be the minimal and
perhaps also optimal amount of protein for me in order to function properly.
At first these amounts seem large, because if …</p><p>As I wrote <a class="reference external" href="https://deaddy.net/protein-aint-overrated.html">before</a>, I consider it imperative to incorporate enough protein in
ones diet. For myself I found about 180g–200g per day to be the minimal and
perhaps also optimal amount of protein for me in order to function properly.
At first these amounts seem large, because if you eat in a canteen, a single
serving often tops out at 20g, but given that whey is dirt cheap, it can be
accomplished quite easily, even if you have only time for one real meal during
the day.</p>
<p>A scoop (e.g. the ones from MyProtein) of whey contains roughly 25g protein, so
if I get four scoops, I am already halfway there. The easiest way is just to
drink two shakes, but in fact, I found that one shake with three scoops, two
unflavored, one with natural vanilla aroma, with about half a litre of milk,
gives a shake with a good mouth feeling and acceptable taste to it. So here we
already have about 90g, just coming from whey and milk.</p>
<p>The remaining scoop can be consumed in a variety of ways; you just might add
some to oatmeal, if you are into that stuff, or can blend another, incredibly
tasty, shake in the following way: blend one banana, some milk, 250g quark or
cottage cheese and one scoop vanilla whey. The sourness of the quark cheese as
well as the sweetness of the banana and vanilla flavor make up for a great
taste; without the quark the whole damn thing is just too sweet for me. So here
we have, even without the milk, already about 50g protein. You can even add
some peanut or almond butter for an even richer taste. The only downside is
that you have to blend really well.</p>
<p>So there are less than 60g protein to go. That amount already seems much more
feasible. Just 300g of some lean meat and you are done, but you can actually do
without it, as 250g of legumes already give you another 15g. Even most sources
of carbohydrates aren't that bad. Say you shoot for about 75g–150g of Carbs,
this amounts to half a (metric) pound of pasta (yielding 30g, so that we are at
185g and are done), at least one kg of potatoes (giving another 20g and having
a lot of volume) or 200g rice, which again yields 15g. So in the worst case, we
are at 170g. Not bad, for not having eaten any meat so far. A few nuts or a
spoon of almond or peanut butter, and we are done.</p>
<p>This of course works in a myriad of combinations. The key is that one finds a
framework which suits to ones habits and circumstances; if you have time for
breakfast or lunch, things often get easier and you can sometimes drink less
shake, because, even if it is quite tasty and has a nice feeling to it,
eating something solid almost always feels so much better.</p>
<p>Finally there are also many ways to incorporate protein powder in a variety of
dishes. For example, if you have any thick soup (i.e. one that is not clear),
you can mix some whey in water and carefully give it to the soup, increasing
the protein content and thickening the soup even further. But not that you have
to be careful; it works quite similar to thickening a soup with flour.</p>
<p>Or you can try one of the many protein baked goods. Although whey seems to kick
the shit out of casein in any study, casein lends itself better to baked goods,
as it binds easier to fat and whey often gives a sandy consistency in the end
result. Note that casein also binds a lot of fluid. If you are not quite sure
what to do, just try to add one scoop to waffle or pan cake batter, although
the internet offers a plethora of recipes, like my <a class="reference external" href="https://deaddy.net/fancy-chocolate-coffee.html">fancy chocolate coffee</a>.</p>
<p>The point is that you pretty much have no excuse not to hit your macro goals,
even if you do not have much time to eat or drink during the day.</p>
Protein ain't overrated2016-09-23T00:00:00+00:002016-09-23T00:00:00+00:00Marceltag:deaddy.net,2016-09-23:/protein-aint-overrated.html<p>For some reason I keep falling in the same trap every semester or so. Some
source which I generally respect says something along the lines that you do not
need that much protein and once you are beyond your newbie gainz, carbs become
more important and the usual 2g/kg …</p><p>For some reason I keep falling in the same trap every semester or so. Some
source which I generally respect says something along the lines that you do not
need that much protein and once you are beyond your newbie gainz, carbs become
more important and the usual 2g/kg or 1g/lbs figures are already beyond the
upper end of what you actually need. And then I am convinced by the reasoning
and start upping my carbs and neglect my protein, still easily hitting
something around 1.5g/kg. Yet still, everything breaks apart.</p>
<p>Not only does the physical performance suffer, but my mental performance
suffers as well. I mean, your brain is just a huge lump of cholesterol and
proteins, with transmitters being formed from even more proteins. So eat
accordingly. Although <a class="reference external" href="https://deaddy.net/discipline-begets-discipline.html">discipline begets discipline</a> and eating properly and
performing well might be just related by this factor, I noticed this even well
before strength training and counting my protein or macros. However, I guess at
this point it is for me more a matter of recovery, as a protein deficit
negatively impacts it and you can only work hard, if you are well rested.</p>
<p>On the other hand, when protein is in check, even when getting most of it from
whey shakes and not real food, few things can go wrong. Given adequate protein
intake, I pretty much feel indestructible even on a caloric deficit.</p>
<div class="section" id="how-much-protein-to-eat">
<h2>How much protein to eat</h2>
<p>The reason I bring this up is twofold. First, it serves as a reminder for me.
Aside from widely varying recommendations for protein consumption, around
1g/lbs seems to be my personal sweet spot. I also ate sometimes as much as
1.5g/lbs for a prolonged time, but I could not notice any further improvements.
Second, almost always when people have their training in check, i.e. performing
squats, presses, deadlifts and the like on a regular basis with adequate weight
and repetitions and still stall in their overall progress, they seem to
undereat, especially on protein. On the other hand, I do not know of anyone
making good progress, who does not eat large amounts of protein. Some people
get away with something like 1.5g/lbs, but most simply don't.</p>
<p>While we can get away with a lot of shenanigans, at least in the context of
performing well in and out the gym, the following daily numbers work well
across populations:</p>
<ul class="simple">
<li>2g protein per kg of target bodyweight</li>
<li>1g fat per kg of target bodyweight</li>
<li>remaining calories carbs</li>
</ul>
<p>If you do not exercise, I guess you can get away with a bit less protein.
If you have high stress levels or are cutting weight rigorously, it makes
sense to add 0.5g-1g protein per kg of bodyweight.
However, protein overfeeding also does not seem to work well.
Studies which see an effect here usually have very low protein numbers in the
control group, in the range of 1-1.7g per kg of bodyweight, which, as I
mentioned, just does not seem to cut it.
At least not for me and most other genetically non-gifted people.
Consequently, one sees some significant effect when overfeeding protein, but
one would expect the same effect from isocaloric overfeeding with only a
sufficient amount of protein.</p>
<p>Also if the target body weight is very distant to current body weight (say,
10% or larger deviations), it is reasonable to break the journey in smaller
chunks of about 5% targets.</p>
<p>There also seem to be some hereditary factors at play; it might be useful to
look at the food choices of your ancestors.
People with a genetic background in colder climates seem to get away with a
bit more fat, while in general there is no benefit in additional fat beyond a
minimal amount which is definitely less than 1g per kg of bodyweight.
But this number is also just practical, as very few naturally occurring
protein sources are devoid of fat.</p>
<p>In the end, it is all about careful experimentation and finding something that
works for you.
I think it helps to be mindful about your appetite and cravings.
In general,
if you are craving something like chips or similar junkfood, you probably just
need more protein.
Or salt.
But when you crave something sweet, often not everything would do the job.
Sometimes you wish for some really high carb stuff, sometimes it is more about
fat and sometimes quite a mix. Be mindful about it and try to fulfill the
cravings with high quality food, ideally with some protein added on top.</p>
<p>As for me, 1g protein per lbs bodyweight (i.e. roughly 2.2g/kg, but I try
to weigh around 90kg or 200lbs, which makes the math easy), and about 80% of
that (i.e. 160g) carbs and again 80% of that (i.e. about 130g) fat seems to be
the minimum I should get daily. Note that this would put me at a significant
deficit; however I did not notice much difference in how I get in the remaining
calories. But this is just for me, but might give you a hint where to look, if
you followed different macro distributions and are unsatisfied. Most
recommendations seem to eschew a balanced approach, by either going low carb
all the way or eating really low fat and high carb. However, if you are trying
to gain mass, getting most of the excess calories from carbs reduces fat
storage by simple inefficiencies. And of course, carbs seem to work best
periworkout.</p>
<p>Furthermore, I do not believe that people who do not weight train need less
protein. Unless you are fat, you carry a lot less bodyweight, so there is
already some downregulation. But you still have the same metabolism,
with a constant break down and rebuild of proteins in your body going on. But
well, I do not have much more than anecdotal and personal evidence for this
going. As a fun fact, it also seems to be that, among athletes, strength
athletes do not have the highest protein requirements per bodyweight, but
endurance athletes do. Just think about it: One is in a catabolic state for
maybe a few hours in a week, namely while in the gym, while the other often
racks up several hours on a single day while getting miles in.</p>
</div>
<div class="section" id="affordable-nutrition">
<h2>Affordable nutrition</h2>
<div class="figure align-right" style="width: 204px">
<a class="reference external image-reference" href="/images/protein-factories-large.jpg"><img alt="chickens" src="/images/protein-factories.jpg" style="width: 200px;" /></a>
<p class="caption">Oh just look at these cute protein factories. Self-producing is in general
not the most economical way to obtain food, but at least you can be sure that
it is up to your ecological standards.</p>
</div>
<p>One topic that is dear to me is the ecological and economical impact
of my food choices, because I care about the environment and my bank roll. It
should be quite obvious that carbs are dirt cheap in comparison to fat and
especially protein, so I concentrate on the latter.</p>
<p>Take note that whey is the cheapest protein powder around, as it is a waste
product of the diary industry and there is no evidence that it is any worse
than other protein sources. Actually, it seems to fare better than any other
protein source, as it has a somewhat optimal ratio of amino acids. And compared
to other animal proteins, it is the cheapest source, too. Just don't waste
money on some kind of expensive premium variant; simply buy the cheapest whey
you can find. Maybe with flavor, but I hate most flavors and can't stand them
after at most a week.</p>
<p>When it comes to other sources, like milk, cheese, eggs, meat and fish, price
and quality matter and often go hand in hand. Also here it matters to vote with
your money. Given the size of the food industry, your individual boycott simply
does not change anything. However, if you buy meat or milk from a small,
preferably local farm, where you think that their way of working is sustainable
and should be supported, it will have much more of an impact in their budget.</p>
</div>
<div class="section" id="protein-is-a-limiting-factor">
<h2>Protein is a limiting factor</h2>
<p>To put it in the language of my previous post about
<a class="reference external" href="https://deaddy.net/on-bottlenecks-magic-bullets-and-optimization.html">bottlenecks and magic bullets</a>, protein is a limiting factor for growth and
performance. However, the returns diminish quickly once one has surpassed some
critical amount, which depends on a host of factors. The standard
recommendations of 1g/lbs or 2g/kg are a good start, but eventually everyone
has to find out for themselves how much protein they actually need to perform
to their standards. The same goes for carbs and fats, but these things are
simply second, as already the name protein implies. Which also means, that once
protein is in check, you probably have more potential by optimizing
carbohydrate and fat intake, than by simply further increasing protein.</p>
</div>
On bottlenecks, magic bullets and optimization2016-09-17T00:00:00+00:002016-09-17T00:00:00+00:00Marceltag:deaddy.net,2016-09-17:/on-bottlenecks-magic-bullets-and-optimization.html<p>Bottlenecks are ubiquitous in all areas in life. In computing they are often
obvious and examine; you can often tell if your system can handle only so many
requests, because it lacks one of the following:</p>
<ul class="simple">
<li>disk I/O</li>
<li>network I/O</li>
<li>storage</li>
<li>RAM</li>
<li>processing power</li>
<li>racks for new servers …</li></ul><p>Bottlenecks are ubiquitous in all areas in life. In computing they are often
obvious and examine; you can often tell if your system can handle only so many
requests, because it lacks one of the following:</p>
<ul class="simple">
<li>disk I/O</li>
<li>network I/O</li>
<li>storage</li>
<li>RAM</li>
<li>processing power</li>
<li>racks for new servers</li>
</ul>
<p>If your system is limited by any of these factors, performance will not improve
whatever you do, unless you can change this, either by throwing hardware at the
problem or doing some smart algorithmic sorcery. And these bottlenecks are at
least easy to identify, as you only have to look at your monitoring tools.
In other areas the nomenclature may differ, but the principle stays the same. For
example, in agriculture it runs under the name of <em>Liebig's minimum principle</em>,
stating that if things like</p>
<ul class="simple">
<li>light</li>
<li>water</li>
<li>nutritional factors</li>
<li>soil salinity</li>
<li>soil pH</li>
</ul>
<p>limit plant growth, it does not matter how much one improves the other
factors; further growth will only occur if and only if this so called <em>minimum
factor</em> will be improved.</p>
<p>Clearly not every process has a bottleneck. Seldom have to deal with some sort
of optimization hydra, where, once you cut one bottleneck, the next one
appears. Or there is some single limiting factor, but you are at the moment in
no position to change this, e.g. you have only so much land, so much rackspace
or so much time. If there is no single one limiting factor which might be removed,
you are in the beautiful realm of optimization. Improving any factor might
yield some improvement, but often improving a specific combination of factors
has a bigger yield. This is beautiful, because it is fun, tweaking the
parameters, having some trial and error going on, A-B-testing, nice models and
what not. But in terms of effectiveness or cost-efficiency, it is often not as
satisfying as removing a bottleneck. As you see, optimization often yields only
miniscule improvements in terms of output, say only a few percent, whereas you
might just scale out the problem by dumping money and resources at it.</p>
<p>However, optimization might not only improve your current output, but also your
return on investment. Taking a step back and playing the metagame, one sees
that this is simply another optimization process; do you invest directly into
resources or into the optimization how you allocate these resources. Also it
might make you wonder, why you have really smart people at one point in the
organization, engineering your production processes, but leave the task of
organizing or, one might say, engineering your whole operation, to people with
some sort of business degree. While I do not hold prejudices against people
with a business degree, I know something about people who are afraid of
uppercase sigmas and formulae involving more than two letters. But back to
business. In fact, identifying bottlenecks is an optimization problem in the
classical sense, justifying the nomenclature in many cases, where such a thing
is called <em>SomeGuy's minimum principle</em> and in some way it is optimization all
the way up.</p>
<p>And then there is always the point of diminishing returns, where progress
stalls out and neither optimization nor dumping resources on the problem yields
significant improvement. And almost always this is because of some other
bottleneck appearing, although at some point it might actually be an
insurmountable one. Otherwise, just GOTO 10 and the whole story begins anew.</p>
<p>Now onto the so called <em>magic bullets</em>. You know one when you see one: They are
often praised to be the one and only solution to the problem and the
testimonials speak for themselves, as there are droves of people who just had
this problem, tried everything, but nothing else worked to solve it. Of course
most of these things are scam, which is the exact reason why we call them
<em>magic</em>. But then again, there seem to be many <em>legitimate magic bullets</em>. The
nice observation here is just the following: Most (legitimate) magic bullets
are just removing bottlenecks. Pair this with the general inability of the
public to reflect things and actually understand what they are doing, and you
see how people think that some particular thing is just <em>the shit</em>.</p>
<p>A few examples come to mind:</p>
<ul class="simple">
<li>any diet fad</li>
<li>any exercise you absolutely should be doing right now</li>
<li>deep work</li>
<li>flow</li>
<li>grit</li>
<li>any hip organizational scheme</li>
<li>frugality</li>
</ul>
<p>These things are all fine and dandy and probably solve a big problem for large
parts of the general population. But, as anyone who did not suffer from exactly
this problem will confirm, they are not the be-all and end-all. They are just
part from a larger picture. Indeed, sometimes one magic bullet seem to be
somewhat diametrically opposed to another, as for example deep work and flow.</p>
<p>The problems occur once people become dogmatic about their magic bullets, which
is, of course, because they do not understand the mechanism how their process
works sufficiently. Which is in so far acceptable, as truly understanding how
something works, is fucking hard and long work. And sometimes you just do not
care about it. And sometimes you really think that you have figured out,
explain it to people, people use your stuff and most of them actually have some
success. Some don't, but in general there will be some twofold survivorship
bias. First, people who finally solve some problem they had for a long time,
are happy and excited and tell everyone about it, while people who do not find
a solution, are busy with searching for another solution. Second, most problems
are somewhat ego-involved. If you earn more money, get leaner, are more
productive, whatever, you most of the time think higher of yourself. Now, we
are mean creatures by default and if by method X you achieved goal Y, you are
prone to deride anyone who does not get Y by doing X. He did not work enough,
did not apply it properly, whatever. Maybe you do not do this, but some person
will do this and others will chime in. And probably that assumption is right,
however, the false positives are harmful for understanding the problem.</p>
<p>If however, you understand the problem beforehand and see a limiting factor,
you know what kind of solution you have to look for. And then it is often
either obvious or seems impossible.</p>
<p>So, summing up the conclusions:</p>
<ul class="simple">
<li>if some growth is stalled out, there is often a single limiting factor</li>
<li>if there is no single limiting factor, you have to engineer further growth</li>
<li>optimization often only becomes cost effective by increasing the ROI on
further investments</li>
<li>when magic bullets work, then almost always because they remove some sort of bottleneck</li>
<li>being dogmatic about magic bullets is quite useless and hinders understanding</li>
<li>if someone tells you about how he finally solved something, ask questions
instead of blindly applying that magic bullet, maybe you can figure out why
exactly it did work</li>
</ul>
My not-todo list2016-09-02T00:00:00+00:002016-09-02T00:00:00+00:00Marceltag:deaddy.net,2016-09-02:/my-not-todo-list.html<p>Almost anyone has a todo list. However, one thing that improved my life much
more is thinking about things that I should not do. It can be divided roughly
in two parts. One part is mostly about avoiding toxic stuff, which has a
negative impact on your life quality beyond …</p><p>Almost anyone has a todo list. However, one thing that improved my life much
more is thinking about things that I should not do. It can be divided roughly
in two parts. One part is mostly about avoiding toxic stuff, which has a
negative impact on your life quality beyond being a time sink, while the other
part is mostly about avoiding unnecessary stuff, which has, aside from the
waste of time and energy, only mild consequences. As I was reviewing mine and
threw out stuff which was outdated (e.g. some limit on carb consumption which
is no longer necessary nor useful since I got leaner in the meantime), I
thought I might share this invaluable tool with you.</p>
<div class="section" id="my-not-todo-list-1">
<h2>My not todo list</h2>
<ul class="simple">
<li>discuss with idiots</li>
<li>assume unnecessary obligations</li>
<li>do unnecessary work for money</li>
<li>surf the web because of boredom</li>
<li>staying up too late</li>
<li>sleep in unnecessary late</li>
<li>let people take control who have not qualified themselves to do so</li>
<li>do things you know that have negative expected value</li>
<li>use MacOS or iOS</li>
</ul>
<p>So far so good. Some of these points are self explanatory, like surfing the web
or using Apple products. But some things bear repeating and more explanation.</p>
<div class="section" id="do-not-discuss-with-idiots">
<h3>Do not discuss with idiots</h3>
<p>This one is a huge time saver. You probably know a saying along the lines of
"never discuss with an idiot, he will drag you down to his level and beat you
by experience". However, the main reason is just that it is simply too time
consuming. I do not care about being beaten in a discussion, as in a valuable
discussion there are only winners. However, if someone just is not open to the
relevant arguments, it is a huge waste of time. Caveat: Do not be a dick about
it. Just try to avoid arguments. Nobody wins if you state that you are
unwilling to discuss with that person because he is an idiot. Just leave them
be, there is no gain in hurt feelings.</p>
</div>
<div class="section" id="do-not-assume-unnecessary-obligations">
<h3>Do not assume unnecessary obligations</h3>
<p>This one is somewhat difficult and might need some elaboration for what I mean
by that. Sometimes you are being asked for help and you really would like to
help, but it does not matter whether you actually help or not. This is often
the case when people try to organize things you might care about, but which
will get done, no matter what you do. Or, worse, will fail, no matter what.
Even though you might enjoy helping, there would not be any benefit. Better
spend your energy and time elsewhere, as there are almost always alternatives,
where you can get the same enjoyment and make more of an impact.</p>
</div>
<div class="section" id="do-not-do-unnecessary-work-for-money">
<h3>Do not do unnecessary work for money</h3>
<p>Trading time for money is bad, unless you really need the money. I have a
tendency to do odd jobs and this one serves me to control this somewhat not so
bad habit. Earning money is always nice, but sometimes, your time is better
spent on other projects or simply on your loved ones. It falls pretty much in
the same line as the previous point, however, earning money often negates the
unnecessary condition on the obligation.
The questions I usually ask myself before accepting any kind of job are:
Does this work really need to get done? Will there be a benefit beyond
your personal gain? Many things might pay adequately, but are just a waste of
time and resources.</p>
</div>
<div class="section" id="do-not-let-unqualified-people-take-control">
<h3>Do not let unqualified people take control</h3>
<p>Probably the most important rule of them all. If you are involved in any kind
of team effort, do not let this happen. If you care about the project, you
would not do this. The real trap is a project which you just do not care about,
but where you will have to participate in some way. You might think you could
save your time by not being involved in the management, but more often than
not, having someone who has not the necessary competencies in charge, costs
everyone time. And in the end you often still have to step in and do the
whole thing by yourself.
On the upside, this trap is sometimes easy to avoid. On one hand most people
who would waste your time are often repeated offenders, so you already know
when to be on the watch. On the other hand, people who waste your time often do
it by avoiding responsibility. Typically weak persons call for regular meeting
in advance or similar shenanigans, which means that there are a lot of early
warning signs.
Recognizing them is the easy part, almost instinctive. Not dismissing them,
especially out of laziness, is the hard part.</p>
</div>
</div>
<div class="section" id="controlling-the-downside">
<h2>Controlling the downside</h2>
<p>As they say, control the downside and the upside will take care of itself. By
keeping a not-todo list and avoiding the obvious pitfalls, you effectively
increase the expected value of your actions. Actually the systems works so
well, that I don't have much of a global todo list. Yeah, some reminders about
errands and for projects a list of milestones to accomplish. But most of the
time I can cruise along on autopilot, as things evolve rather nicely, if you
act decisively and simply avoid being stupid.</p>
</div>
Bash autocompletion for your own scripts2016-08-02T00:00:00+00:002016-08-02T00:00:00+00:00Marceltag:deaddy.net,2016-08-02:/bash-autocompletion-for-your-own-scripts.html<p>Sometimes nice features hide in plain sight – e.g. <a class="reference external" href="https://deaddy.net/tabbing-in-vim.html">tabbing in vim</a> – and you
just do not come around to using them because you are just too happy with the
tools you already have. This time I am talking about autocompletion for bash
scripts – I always wondered how sometimes bash …</p><p>Sometimes nice features hide in plain sight – e.g. <a class="reference external" href="https://deaddy.net/tabbing-in-vim.html">tabbing in vim</a> – and you
just do not come around to using them because you are just too happy with the
tools you already have. This time I am talking about autocompletion for bash
scripts – I always wondered how sometimes bash just miraculously knows which
switches can be used for some command, but I was just happy when that happened
and never thought about, how I could make it happen. Talk about complacency!</p>
<p>Well, it ain't that hard and is <a class="reference external" href="http://www.gnu.org/software/bash/manual/bash.html#Programmable-Completion-Builtins">well documented</a>. You have to write a
function using some Bash internals and then register it with the <em>complete</em>
command to the keyword after which you want autocompletion.</p>
<p>For example, I have the following small function in my <em>.bashrc</em> (actually in
my <em>.bash_common</em> shared between desktop and laptop, which is sourced in
<em>.bashrc</em>):</p>
<pre class="code literal-block">
function math () {
cd ${HOME}/uni/$1/
atril $1.pdf 2>/dev/null &
vim $1.tex
}
</pre>
<p>It does not do much but; it just fires up a PDF reader and opens the
corresponding <em>.tex</em> file in vim. It saves me quite some keystrokes, in
particular on the university's computer which is so agonizing slow that
manually the whole procedure takes almost half a minute. Just another example
where a small fix (here changing a bit in the computer setup) could improve the
work flow for a lot of people. But management is usually concerned with looking
good or being lazy instead of solving problems. Anyway, I digress.</p>
<p>So I want to be able to invoke this command for a few projects of mine and
actually thought about duplicating this function as <em>mathcv</em>, <em>mathmcf</em>,
<em>mathpme</em> and whatnot. But then I did the right thing and thought about
researching a bit more and found out that bash autocompletion is actually quite
easy.</p>
<p>So the following bit is added to my <em>.bashrc</em>:</p>
<pre class="code literal-block">
function _mathautocompletion() {
local cur
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "mcf pme krylovsafonov cv prep" -- ${cur}) )
return 0
}
complete -o nospace -F _mathautocompletion math
</pre>
<p>The function <em>_mathautocompletion</em> is what tells the autocompletion how to
autocomplete, e.g. I want to autocomplete the words <em>mcf, pme, krylovsafonov,
cv</em> and <em>prep</em>. The <em>complete</em> command issues bash to use <em>_mathautocompletion</em>
when I have typed <em>math</em> as a command. Note that there is nothing special with
the name <em>_mathautocompletion</em>, although it might look like that. The
underscore in front just makes sure that I do not accidentally autocomplete it
when typing <em>math</em> and the rest of the name is just so I know exactly what it
is for. The <em>nospace</em> options tells bash not to add a space in the end of the
autocompletion. This is a bit redundant, but sometimes might be useful. Useful
other options might be <em>dirnames</em> and <em>filenames</em>, which would tell bash to
autocomplete with directory- or filenames in the case the function does not
match anything.</p>
The best time management tip2016-07-29T00:00:00+00:002016-07-29T00:00:00+00:00Marceltag:deaddy.net,2016-07-29:/the-best-time-management-tip.html<p>The best time management tip is simply this: Do not waste your time indulging
in media. But is it really so simple?</p>
<p>Until recently I was always quite disappointed when someone mentioned that they
watch TV, thinking much lesser of them as a person, at least if they are
younger …</p><p>The best time management tip is simply this: Do not waste your time indulging
in media. But is it really so simple?</p>
<p>Until recently I was always quite disappointed when someone mentioned that they
watch TV, thinking much lesser of them as a person, at least if they are
younger than say, sixty. And on the other hand, I thought of people not
watching TV better, simply for the fact that they do not watch TV. While the
former does still stand today, I had to realize that just not watching TV isn't
something laudable, for there are much more sinister traps out there today. Of
course I am talking about the internet and more specifically about the web.</p>
<div class="section" id="beware-the-web">
<h2>Beware the web</h2>
<p>From an informative standpoint, browsing the web has become unbearable and is
akin to zapping through TV channels in hope for something entertaining. The
entry barrier today is just so low that almost anybody, at least in the western
world, has internet access. So people on the web actually represent people on
the whole and everyone knows that people are the problem. Not you and your
peers, but all those other idiots. And then every major site is engineered to
garner your attention, to interrupt you and keep you there.</p>
<p>But I do not want to digress into a rant about the state of the web. The
problem here is that the cost-utility-function is much more delicate than in
the TV case. Watching TV was kind of binary. Either it is informative or maybe
even amusing, or it is not. The cost is simply the time you spend in front of
the TV without doing anything else. If you're zapping around, it is obviously
not informative or amusing, so you better stop watching. On the other hand, on
the web, sometimes things have an positive impact to begin with, but then you
get distracted and suddenly wasted hours. But then, you probably can not avoid
it completely, because everything runs on the web today.</p>
<p>Imagine some of your friends or even business partners are organizing some
event and of course they have to do it via facebook, because they do not know
any other way. Then you are already halfway in the trap, because the emails
sent by it are just useless links to the event on the webpage and as soon you
are there it begins to shove shit down your throat. And because at some point
it was new and exciting, you begin scrolling down, just to notice that another
five minutes went down the drain.</p>
<p>I think the solution is to adopt kind of a marine or sewer maintenance attitude
to this. Get in, get the job done and get out as quickly as possible. You do
not want to spend any more time in that shithole than you have to. As a rule of
thumb, if you do not pay them for their services, they are out for your
attention.</p>
</div>
<div class="section" id="other-media">
<h2>Other media</h2>
<p>Other media are much less distracting and disruptive. Let it be watching a
series, playing a video game or even reading fiction books. You are probably
quite immersed, more or less genuinely enjoying the activity and well, the time
wasted is easily measured. The only trap here is thinking that entertainment
and enjoyment are something inherently positive and worth the time investment.</p>
<div class="figure align-right" style="width: 304px">
<a class="reference external image-reference" href="/images/dugundji.jpg"><img alt="Dugundji – Topology" src="/images/dugundji.jpg" style="width: 300px;" /></a>
<p class="caption">Probably a better read than the book to GoT or Harry Potter.</p>
</div>
<p>Clearly this is a matter of your own views. But given that we are naturally
inclined to hedonism and are indoctrinated with consumerism from the cradle on,
I like to err on the side of abstinence. There probably is a reason why
asceticism was almost always and anywhere regarded as a virtue. Food best
tastes hungry, and entertainment is also more fun after hard work.</p>
<p>And yes, just because something is in book form does not mean that it is not
just plain escapism and a waste of your time. Indeed, must fiction just sucks
as much as TV. But there are also plenty other offenders, especially American
self help literature, which is just littered with bogus tips and feel good fake
sense of achievement. Or diet and exercise books. While the self help
literature at instill some feeling into you, diet and training books are
almost always boring to read and then offer advice which is not helpful at
best, but sometimes is even harmful to your health. Or, probably worse, the
advice leaves you weak as shit, as you believe that training each body part
once every fortnight and eating 1g of protein per kg bodyweight will bring the
gainz.</p>
<p>And again. Entertainment should probably not be a sufficient criterion for
doing something.</p>
</div>
<div class="section" id="avoiding-indulgence">
<h2>Avoiding indulgence</h2>
<p>So far I think there are roughly three categories to deal with:</p>
<ul class="simple">
<li>things that are obviously a waste of time, e.g. watching TV, tumblr, news
sites and the like, neither offering any benefit nor enjoyment</li>
<li>traps, i.e. things with initial utility but which will get you distracted,
mostly when you are reading something up and then get distracted by links</li>
<li>things that are actually entertaining, like watching a movie, playing a video
game or even reading a book</li>
</ul>
<p>The first category is easy to avoid.</p>
<p>The second is probably the hardest to deal with. Just try to do as little as
possible via such web sites. Use some bitlbee Facebook bridge as long as it is
possible instead of the web site for messages, or better, move everyone you
have to communicate with to a better protocol. Close pages as fast as possible.
Be conscious about your usage.</p>
<p>The third category is about your lifestyle choices. I mean, almost nobody will
judge you if you choose to indulge in fun activities. You want some ice cream
while watching that series? Who cares. You have bad genetics anyway and your
thyroid gland is responsible for your weight gain, not your own actions. So
have at it. But then also, few things are as relaxing and refreshing as reading
a really good book on a quiet day then and now. Again, be conscious about it.</p>
<p>It also might help to set some time constraints on any activity. Just try to
avoid media, i.e. reading the web, watching TV and whatnot, in some time frame.
Maybe have some off time between 10pm and 10am. Maybe even configure your
router to block off internet access during that time, but I always found that
too restrictive. That way you do not fall in the dreaded "oh only one more
picture on the internet" trap having you stay up until 3am or so and ruining
your day. Plus it improves your sleep hygiene. Furthermore you can start your
day with much more vigor as there is nothing to distract you from your days
work. Then, during the day there are often other factors which simply prevent
you from wasting too much time, because you have work to do or are at the gym
and squatting or in the kitchen and cooking.</p>
<p>But in the end, it all boils down to one thing: Being concious about one's own
choices.</p>
</div>
Discipline begets discipline2016-07-22T00:00:00+00:002016-07-22T00:00:00+00:00Marceltag:deaddy.net,2016-07-22:/discipline-begets-discipline.html<p>Life is all about choices, especially those small decisions you make daily. Or
probably don't make, because you are a creature of habit. And it is not just
about decisions, it is about actually carrying them out in a disciplined
matter. Discipline earns people's admiration. Discipline helps you reach your …</p><p>Life is all about choices, especially those small decisions you make daily. Or
probably don't make, because you are a creature of habit. And it is not just
about decisions, it is about actually carrying them out in a disciplined
matter. Discipline earns people's admiration. Discipline helps you reach your
goals and without discipline, you squander your potential. It's a badge of
honor among successful people to be disciplined and already the early
philosophers saw it as a virtue. So the question is: How can you live a
disciplined life?</p>
<div class="section" id="is-willpower-expendable">
<h2>Is willpower expendable?</h2>
<p>There are actually some well designed psychology studies about willpower, which
run under the label of <em>ego depletion</em>. Ego depletion describes how your
ability of self control diminishes as you are exerting it. Typical experiment
setups is having people trying hard puzzles and measure how long it takes until
they give up or performance on something like the Stroop test. Then you try
different setups, i.e. place cookies in front of the subjects and tell them
they are free to eat the cookies or are not allowed to eat them, but some
celery. Or you use questionnaires to prime them on certain words. Anyway, there
are some useful results:</p>
<ul class="simple">
<li>people who believe willpower is unlimited perform better in the tests and
telling people that willpower is unlimited increases their performance</li>
<li>willpower indeed seems to be expended, even by trivial stuff like not being
allowed to eat some cookies standing in front of you</li>
<li>willpower can be trained</li>
<li>thinking about money seems to increase your willpower</li>
</ul>
<p>With the exception of the last one, the results are not surprising. As the last
one is a bit open to interpretation (subjects where primed with sentences like
"I have money"), it could also be expected, as it might be a form of keeping
your eyes on the price. There are several models floating around in research,
and as usual, some are better than others, but none is perfect, but the
<em>process model</em> seems to work best. Also, it is dead simple: We are always
oscillating between exploration and exploitation, and when our concentration on
a tasks wanes, it is because our mind thinks that this task does not provide
much value anymore. This is also supported by anecdotal evidence; just look in
some cubicle farm where people are wasting their time on the internet and ask
whether their work is meaningful or not.</p>
</div>
<div class="section" id="becoming-more-disciplined">
<h2>Becoming more disciplined</h2>
<p>It all starts with having a purpose in live, providing value with your work and
having motivating goals. Do not fall in the trap of simply trading your time
for money unless you really have to, but make sure that your work is aligned
with your goals, interests and skills. Having a positive outlook helps not
being distracted, as you do not seek for alternative uses of your time.
Discipline is easy when there are no alternatives.</p>
<p>Have some basic work place hygiene. If you are on a diet, do not have cookies
lying around. Remove distractions as good as possible. Bonus if you can
separate yourself physically from them.</p>
<p>But finally and most importantly: Build momentum. Although willpower can be
expended, it does not mean that you should avoid any tasks involving it, unless
they are top priority. Because it can also be trained. Also, if you made a lot
of good decisions on a given day, you feel better and are less likely to break
the chain. In fact, almost any high achiever seems to do some of the following:</p>
<ul class="simple">
<li>wake up early like 4AM</li>
<li>take a run first thing in the morning</li>
<li>start working immediately in the morning</li>
<li>take cold showers</li>
<li>make their bed</li>
</ul>
<p>Again I put the perhaps most surprising one in the end, as it is easier to
refer to. It is not really a useful activity, however, it still gives a fake
sense of achievement. It's easy as that. Just make your bed and you already
feel like a winner. Just keep that momentum going and your day will be a
success.</p>
<p>This also fits nicely in the process model. By being disciplined in all areas
of life, you already get some value from things different to your work. This
means for these activities you already did some exploitation and have less
things to distract you from your primary work.</p>
<p>Furthermore, correlated activities profit also from being disciplined in each
of them, since by doing one thing right, you increase the expected value from
doing another activity. Take for example being on a calorie restricted diet.
If you take your diet seriously, do not half ass your training. While is be
physiologically sound to do lighter training while dieting, as you have less
recovery capacity, in a diet you do not want to fuck around with it. Because if
you do, you might lose more muscle in the process, something you do not want to
happen. And if your diet is not restricted, but still on spot, you can expect
more gains coming from training. Also, you do not want to get fat on a caloric
surplus, so you better squat your ass off.</p>
<p>Let my close by rounding it up in a nice little process:</p>
<ul class="simple">
<li>start your day with vigor and do something useful. It does not have to be
making your bed and might be easy as <a class="reference external" href="fancy-chocolate-coffee.html">whey in your coffee</a></li>
<li>make sure your workplace is free of tempting distractions. You want to
reduce the amount of tempation you have to withstand, as it is
<a class="reference external" href="reclaiming-attention-at-work.html">hard to control all distractions</a></li>
<li>keep your goals in mind and be positive</li>
<li>approach life as a whole and not isolated; if you diet, also train
disciplined. If you are disciplined at work, also be sure to be disciplined
in your free time and spend it on those who matter</li>
</ul>
</div>
arXiv sanity2016-05-29T00:00:00+00:002016-05-29T00:00:00+00:00Marceltag:deaddy.net,2016-05-29:/arxiv-sanity.html<p>Staying on top of the latest research is a task which is hard in itself.
Although arXiv supports some RSS-feeds, I read all my RSS feeds through
<a href="http://www.newsboat.org/">newsboat</a>, and given that it is (of course) a CLI application, it cannot
display the math tags of the abstracts.</p>
<p>Luckily someone else …</p><p>Staying on top of the latest research is a task which is hard in itself.
Although arXiv supports some RSS-feeds, I read all my RSS feeds through
<a href="http://www.newsboat.org/">newsboat</a>, and given that it is (of course) a CLI application, it cannot
display the math tags of the abstracts.</p>
<p>Luckily someone else also found this to be tedious and created the
<a href="http://www.arxiv-sanity.com/">arXiv sanity preserver</a>, some kind of news aggregator for the latest papers
on arXiv in predefined categories. And, as he is no bad person, he open sourced
the whole thing, to my pleasure. The application is easy to use and intuitive,
with the ability to save papers to one's personal library, which requires a
really simple account setup (you just type in a username and password once,
that's all).</p>
<p>Setup was straightforward, following the instructions on github, using
virtualenv for python, which I did not know about until now. However, I did not
want to fiddle around with ports or so to make flask serve on :80, since my
nginx is already listening there, so I put up a reverse proxy:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="k">server</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kn">listen</span><span class="w"> </span><span class="mi">80</span><span class="p">;</span>
<span class="w"> </span><span class="kn">server_name</span><span class="w"> </span><span class="s">sanity.marcelwunderlich.com</span><span class="p">;</span>
<span class="w"> </span><span class="kn">access_log</span><span class="w"> </span><span class="s">/var/log/nginx/arxiv-sanity.access_log</span><span class="w"> </span><span class="s">main</span><span class="p">;</span>
<span class="w"> </span><span class="kn">error_log</span><span class="w"> </span><span class="s">/var/log/nginx/arxiv-sanity.error_log</span><span class="w"> </span><span class="s">info</span><span class="p">;</span>
<span class="w"> </span><span class="kn">location</span><span class="w"> </span><span class="s">/</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kn">proxy_pass</span><span class="w"> </span><span class="s">http://localhost:5000</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>The flask based server runs without the production flag in some screen of my
user account. The only modifications I had to made to the code were the
categories I want to display (which are math.AP, math.DG, math.SP and math.MG
at the moment), as well as replacing <code>app.debug = True</code> to <code>app.debug = False</code>
for non production mode, for obvious reasons. As one can guess, now there is my
own sanity preserver running on my own domain. <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> Feel free to use it,
although I do not guarantee for any availability or regular updates, as
updating is at the present stage highly non automatic. The only thing I
dislike is that the application does not work without javascript, but at least
I can trust
javascript served from my own machines.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>discontinued though for some time now ;-) <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>dead.letter: Training Cycle 2016-22016-05-07T00:00:00+00:002016-05-07T00:00:00+00:00Marceltag:deaddy.net,2016-05-07:/deadletter-training-cycle-2016-2.html<p>This is the post mortem of my previous training cycle. To summarize the
results, the volume block went well, I failed again at picking weights at
higher intensities and I lost 7kg of bodyfat over the course of seven weeks.</p>
<div class="section" id="base-layout">
<h2>Base layout</h2>
<p>This time I planned the weights over the …</p></div><p>This is the post mortem of my previous training cycle. To summarize the
results, the volume block went well, I failed again at picking weights at
higher intensities and I lost 7kg of bodyfat over the course of seven weeks.</p>
<div class="section" id="base-layout">
<h2>Base layout</h2>
<p>This time I planned the weights over the whole cycle, which worked out quite
well, with the notable exception of my squat in the last weeks. In general I
had the following structure in mind:</p>
<table border="1" class="docutils">
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Week</th>
<th class="head">Training goal</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>0</td>
<td>General preparation phase</td>
</tr>
<tr><td>1 – 3</td>
<td>Volume</td>
</tr>
<tr><td>4 – 6</td>
<td>Strength</td>
</tr>
</tbody>
</table>
<p>The GPP was high rep stuff and as far as I can tell, did not really help at
all, but was annoying as hell. Also I refrained from doing any competition lift
during this phase, which is stupid as I really like the big three. Next time I
do something like that I just up the oly volume or something like that.</p>
</div>
<div class="section" id="volume-block">
<h2>Volume block</h2>
<p>The volume block was setup quite similarly to the previous one:</p>
<table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="25%" />
<col width="25%" />
<col width="25%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Monday</th>
<th class="head">Tuesday</th>
<th class="head">Thursday</th>
<th class="head">Friday</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Squat light</td>
<td>Squat 5×5</td>
<td>Squat light</td>
<td>Squat 5×5</td>
</tr>
<tr><td>Bench 5×5</td>
<td>Bench light</td>
<td>Bench 5×5</td>
<td>Bench light</td>
</tr>
<tr><td>Chinups</td>
<td>RDL 3×10</td>
<td>Chinups</td>
<td>Deadlift 5×5</td>
</tr>
<tr><td>paused Deadlift 3×5</td>
<td>Press</td>
<td>Incline DB bench</td>
<td>Leg raises</td>
</tr>
<tr><td>Pendlays 3×10</td>
<td>Snatch grip DL 3×10</td>
<td>Pendlays 3×10</td>
<td> </td>
</tr>
<tr><td>Incline DB Bench</td>
<td>Hammer Curls</td>
<td>Hammer Curls</td>
<td> </td>
</tr>
</tbody>
</table>
<p>As one can see, I did some stupid stuff, e.g. SGDLs and Pendlays with more than
a few reps. I hated it and I guess it was simply wasted time. Also Deadlift 5×5
did not seem to work all to well for me, but I also changed my technique during
this cycle, so there was some more at work. To wit, the planned weights for the
5×5 sessions where</p>
<table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="25%" />
<col width="25%" />
<col width="25%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Exercise</th>
<th class="head">Week 1</th>
<th class="head">Week 2</th>
<th class="head">Week 3</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Squat</td>
<td>125</td>
<td>127.5</td>
<td>130</td>
</tr>
<tr><td>Bench</td>
<td>82.5</td>
<td>83.5</td>
<td>85</td>
</tr>
<tr><td>Deadlift</td>
<td>130</td>
<td>140</td>
<td>150 (not done)</td>
</tr>
</tbody>
</table>
<p>In the deadlift I noticed that my stance moved in quite a bit and my hip
anatomy does not allow my back to be straight once my stance is too narrow,
just that narrow for me means something like shoulder width. This made the 5×5
not so useful, so once I discovered it in the 140×5×5 workout, I startet
tweaking my form and decided to go easy on the deadlift until I have my groove
back.</p>
<p>Aside from the assistance and deadlift, the volume block just went smooth,
despite being on a heavy caloric deficit and not sleeping that much. The only
change I would make in the future would be to start a little bit lower and end
up a little bit higher, using bigger increments. So for my next few weeks I
actually plan to do 125, 130 and 135 in the 5×5 squat workouts and 82.5, 85,
87.5 in the bench workouts.</p>
<p>Also I noticed that benching four times a week really tightens up my shoulder.
So while I had initially some high rep pressing on Tuesdays, I upped the weight
again, as heavy presses counteract all that benching just really well. I do not
know how other people can get away without pressing.</p>
</div>
<div class="section" id="kinda-intensity-block">
<h2>(kinda) Intensity block</h2>
<table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="25%" />
<col width="25%" />
<col width="25%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Monday</th>
<th class="head">Tuesday</th>
<th class="head">Thursday</th>
<th class="head">Friday</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Squat light</td>
<td>Squat light</td>
<td>Squat light</td>
<td>Squat pyramid</td>
</tr>
<tr><td>Bench pyramid</td>
<td>Bench light</td>
<td>Bench pyramid</td>
<td>Bench light</td>
</tr>
<tr><td>Press APRE3</td>
<td>Deadlift pyramid</td>
<td>Press APRE3</td>
<td>Deadlift light</td>
</tr>
<tr><td>Chinups 3×max</td>
<td>Leg raises</td>
<td>Chinups 3×max</td>
<td>speed Deadlift 6×2</td>
</tr>
<tr><td>Alternating DB Curls</td>
<td> </td>
<td>Alternating DB Curls</td>
<td>Leg raises</td>
</tr>
<tr><td>BB Curls</td>
<td> </td>
<td>Hammer Curls</td>
<td> </td>
</tr>
</tbody>
</table>
<p>The pyramids where structured as follows:</p>
<table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="25%" />
<col width="25%" />
<col width="25%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Set</th>
<th class="head">Bench</th>
<th class="head">Squat</th>
<th class="head">Deadlift</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>1</td>
<td>92.5×3</td>
<td>130×3</td>
<td>152.5×3</td>
</tr>
<tr><td>2</td>
<td>102.5×2</td>
<td>145×2</td>
<td>170×2</td>
</tr>
<tr><td>3</td>
<td>97.5×3</td>
<td>137.5×3</td>
<td>162.5×3</td>
</tr>
<tr><td>4</td>
<td>92.5×3</td>
<td>130×4</td>
<td>150×4</td>
</tr>
<tr><td>5 and 6</td>
<td>70×5×2</td>
<td>100×5×2</td>
<td>120×5×2</td>
</tr>
</tbody>
</table>
<p>This did not work out well as the jump up was a bit too large. Also I pulled my
hamstring slightly while gardening, making me fail on the squat in the second
week. For Bench and Deadlift I increased the top set by 2.5kg and 10kg
respectively and adapted the other sets, and had planned a 5kg increase in
the Squat, however I even failed in the first warmup set after one rep, which
was quite lower than the max set in the first week.</p>
<p>Light days were the weights from the volume block, but with three sets of four
instead of 5×5. These really felt light the first week, but at least the squats
were heavier the second week, which I first thought to be a programmatic error,
but might as well be a consequence of the hamstring injury.</p>
<p>The main mistake was not allowing myself to accustom to heavier weights
beforehand.</p>
</div>
<div class="section" id="takeaway-and-the-next-weeks">
<h2>Takeaway and the next weeks</h2>
<p>I really thrived on the volume blocks, despite consuming less than 3000kcal on
average each day and losing 7kg over the course of seven weeks. However,
heavier weights are quite a problem. Although I surpassed the volume I did
before belted, my unbelted max still is about 15kg below my belted max. As
Texas Method-ish training seems to work well for me, the following weeks I use
something like the following:</p>
<table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="25%" />
<col width="25%" />
<col width="25%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Monday</th>
<th class="head">Tuesday</th>
<th class="head">Thursday</th>
<th class="head">Friday</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Squat light</td>
<td>Squat 5×5</td>
<td>Squat light</td>
<td>Squat ×3@9 + 4-6% fatigue</td>
</tr>
<tr><td>Bench 5×5</td>
<td>Bench light</td>
<td>Bench ×3@9 + 4-6% fatigue</td>
<td>Bench light</td>
</tr>
<tr><td>Press APRE6</td>
<td>speed Deadlift 6×2</td>
<td>Press APRE3</td>
<td>Deadlift ×3@9 + 4-6% fatigue</td>
</tr>
<tr><td>Chinups 3×5 wtd</td>
<td>RDL 3×6</td>
<td>Pullups 3×max</td>
<td>Leg raises</td>
</tr>
<tr><td>Incline DB Bench 3×8–12</td>
<td>Leg Raises 3×max</td>
<td>Close Grip Bench 3×6</td>
<td>Farmerwalks 3× max</td>
</tr>
<tr><td>Pendlay Rows 3×6</td>
<td>unilateral Leg Curls 3×16–20</td>
<td>Curls</td>
<td> </td>
</tr>
<tr><td>Curls</td>
<td>unilateral Leg Extension 3×16-20</td>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
<p>I tree to keep the volume a bit in check on the 5×5 days by not increasing it
every week. I feel that the second time I do the volume day is often more
beneficial than the first with that weight, as then I can really master it.
However, by having one intensity day a week, I still have a bit of weight on my
shoulders a few days a week. Also I moved my deadlift stance a bit out, so that
I have to get the hip musculature up to the task. Most of the assistance deals
with weak points and imbalances and is subject to change. If I cannot progress
the ×3@9 days anymore, I up the volume or do one or two ×5@9 days or maybe add
some singles after the top set with a bit heavier weight instead of the fatigue
sets, which already worked quite well for me in the past.</p>
</div>
Fancy chocolate coffee2016-04-30T00:00:00+00:002016-04-30T00:00:00+00:00Marceltag:deaddy.net,2016-04-30:/fancy-chocolate-coffee.html<p>Today I want to share a small and simple recipe with you, namely one for
chocolate coffee. With the exception of this recipe I detest any combination of
coffee and cocoa, as it usually just tates like bitter cocoa. The usual problem
is that you need some kind of milk …</p><p>Today I want to share a small and simple recipe with you, namely one for
chocolate coffee. With the exception of this recipe I detest any combination of
coffee and cocoa, as it usually just tates like bitter cocoa. The usual problem
is that you need some kind of milk in your cocoa, for else it tates just bitter and
muddy, but if you add milk to coffee, you often end up with something too
bland. As it turns out, the addition of a scoop whey is sufficient to provide
the milky smoothness, resulting in the following simple recipe:</p>
<blockquote>
<p>Fancy chocolate coffee</p>
<ul class="simple">
<li>1 cup of coffee</li>
<li>1 scoop of whey (~25g)</li>
<li>1 teaspoon baking cocoa</li>
<li>artificial sweetener to taste</li>
<li>5g creatine, because creatine is good</li>
</ul>
</blockquote>
<p>Either mix all ingredients in a mixer or shake them in a shaker. Beware that
the latter procedure results in a lot of pressure built up, as the hot fluid
heats up the air in the shaker, so you need to be careful and release some
pressure during shaking, lest the lid of the shaker might blow off, painting
your walls in a nice coffee-cocoa brown. If you feel fancy, feel free to add
some hazelnut flavoring.</p>
<p>There you have it. A tasty drink to start your day, with everything that's
unequivocally good for you: Protein and caffeine.</p>
Uzbl is dead, long live Otter2016-04-16T00:00:00+00:002016-04-16T00:00:00+00:00Marceltag:deaddy.net,2016-04-16:/uzbl-is-dead-long-live-otter.html<p>I hate pretty much everything about the web and especially web browsers. Since
Opera decided to ditch the fabulous presto engine I was in constant despair, as
Firefox and Chromium lack two of the key features I expect from any browser:
Being able to disable javascript completely except for some …</p><p>I hate pretty much everything about the web and especially web browsers. Since
Opera decided to ditch the fabulous presto engine I was in constant despair, as
Firefox and Chromium lack two of the key features I expect from any browser:
Being able to disable javascript completely except for some whitelist and to
configure hotkeys. I am well aware that there are plugins to do just that, but
well, I do not like having to install plugins for something I expect to be
basic functionality. Vimperator even made some of the keybindings and
especially the behaviour. Configuring the default fonts and being able to
override web designers poor choices in font size is at least a huge plus.</p>
<p>However, then <a class="reference external" href="http://www.uzbl.org/">uzbl</a> came along and there could not be a browser that makes me
more happy. Native and easy js whitelisting, configuration per text files, vim
key bindings and behaviour. The only problem being that some stupid web
developers, well, actually only the guys at google, seem to switch behaviour
based on the user agent, but nothing a little spoofing couldn't fix. Also, by
not relying on too much GUI, one could have open a thousand tabs and still find
everything, as there are multiple lines for tabs and one could configure to
only use a tiny font to display these. By not displaying the favicon, this
really saves space.</p>
<p>To my dismay support in gentoo/funtoo was not that good and over time some odd
behaviour occurred like crashing the tab when opening an image in a new window
or something like that. Well, nothing that bothers me too much. However, now
support ran out, as the last stable release dates a few years back.</p>
<div class="figure align-right" style="width: 402px">
<img alt="Spoofing the useragent for google" src="/images/spoofing-useragent.png" style="width: 400px;" />
<p class="caption">Simple useragent spoofing on a per site basis with otter.</p>
</div>
<p>Luckily I found out about <a class="reference external" href="https://otter-browser.org/">otter</a>, an open source remake of Opera 12. Still with
the crappy webkit engine, I guess one cannot escape that shit. However, it has
all the features I like, and is even able to spoof the useragent on a per site
basis.</p>
<p>The only things that I am now missing are the lack of an differentiation between
input and browsing mode, as in vim or uzbl, but that is more or less a matter
of habit, as well as good overview over the tabs. As otter uses QT and displays
the favicon and has quite some margins left, even opening something along ten
to twenty tabs already reduces them to only displaying the favicon. Guess I
should simply reduce the number of tabs then. Also url autocompletion is a bit
weird, but one can choose to only complete bookmarked sites.</p>
dead.letter: Training Cycle 2016-12016-04-05T00:00:00+00:002016-04-05T00:00:00+00:00Marceltag:deaddy.net,2016-04-05:/deadletter-training-cycle-2016-1.html<div class="figure align-right" style="width: 204px">
<a class="reference external image-reference" href="/images/training-week-2016-jan09-jan15.jpg"><img alt="chaos and pain" src="/images/training-week-2016-jan09-jan15.jpg" style="width: 200px;" /></a>
<p class="caption">The week before this cycle. About any exercise I could think of that's not
olympic weightlifting. Also, some olympic weightlifting.</p>
</div>
<p>As promised in the last post, I want to do a post mortem of my current training
cycle. But first let me talk about my previous training cycle, where I …</p><div class="figure align-right" style="width: 204px">
<a class="reference external image-reference" href="/images/training-week-2016-jan09-jan15.jpg"><img alt="chaos and pain" src="/images/training-week-2016-jan09-jan15.jpg" style="width: 200px;" /></a>
<p class="caption">The week before this cycle. About any exercise I could think of that's not
olympic weightlifting. Also, some olympic weightlifting.</p>
</div>
<p>As promised in the last post, I want to do a post mortem of my current training
cycle. But first let me talk about my previous training cycle, where I did some
(blatantly obvious?) mistakes, as well as consequences I have drawn from it.
Because you know, there are always people talking about the scientific method
as if it where something of metaphysical importance, but then they just jump to
conclucsions post ex, instead of forming hypotheses from previous observations
and then at least qualitatively testing them.</p>
<div class="section" id="base-layout">
<h2>Base layout</h2>
<p>I did not plan out my weights over the cycle, as I did not have a feeling for
which weights would be right, however I planned when to do more high intensity
stuff and when to do more volume.</p>
<table border="1" class="docutils">
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Week</th>
<th class="head">Training goal</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>0</td>
<td>Pre-cycle, chaos and pain-ish training</td>
</tr>
<tr><td>1 – 3</td>
<td>Volume</td>
</tr>
<tr><td>4</td>
<td>Off (business trip)</td>
</tr>
<tr><td>5</td>
<td>Transitioning</td>
</tr>
<tr><td>6</td>
<td>Testing strength</td>
</tr>
</tbody>
</table>
<p>Last year I tried some structured programming with higher reps, i.e. something
along 8 – 10 reps per set, but overall failed in that regard, as I only did
three sets, which is not really an increase in volume if you're already used to
doing five+ sets of five. The whole point of lower intensities and higher
repetitions in training is to accumulate more volume, so well, that's a rookie
mistake. After that I was quite pissed and also I had a lot of energy to
dissipate, so I did some chaos and pain-ish training, generally training six
days a week, alternating the competition lifts with smaller exercises and
dealing a bit with weak points like my left leg, which caused a noticable right
shift in the squat. At the end I squatted 150×2 and benched 100×4, where at
least the bench was a bit of an disappointment. The squat was a little bit of
an PR, as the last time I hit that number I was wearing a belt.</p>
<p>In the remaining weeks, I followed the general template</p>
<table border="1" class="docutils">
<colgroup>
<col width="20%" />
<col width="20%" />
<col width="20%" />
<col width="20%" />
<col width="20%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Monday</th>
<th class="head">Tuesday</th>
<th class="head">Thursday</th>
<th class="head">Friday</th>
<th class="head">Saturday</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Bench volume emphasis</td>
<td>Squat volume emphasis</td>
<td>Bench intensity emphasis</td>
<td>Squat intensity emphasis, Deadlifts</td>
<td>Stuff like presses and isolation work</td>
</tr>
</tbody>
</table>
<p>shifting days as needed to fit my schedule. Again, I did not really plan out
the weights and only tried to slightly increase the weight on the bar each
week.</p>
</div>
<div class="section" id="actual-lifts-in-the-volume-block">
<h2>Actual lifts in the volume block</h2>
<p>I aimed for six reps in the Bench over a few sets on Mondays, and five sets
of five for squats on Tuesday, while dropping the reps to about four on Fridays
and trying to get a few sets in with a bit more weight. That worked quite well,
although I hard a time to control my butt, so any bench set @10 had my butt in
the air in the last rep. Also note that I incorporated a two count pause on the
chest, at least in the first few reps of the set, which got incrementally
shorter to about one count, as I already counted one on the way down. So these
are the results from the volume block, only recording the top sets. In typical
<a class="reference external" href="/man-3-repranges.html#RTS">RTS</a> manner, I always did one set with the reps at 90% and 95% of the goal
weight.</p>
<table border="1" class="docutils">
<colgroup>
<col width="17%" />
<col width="17%" />
<col width="17%" />
<col width="17%" />
<col width="17%" />
<col width="17%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Week</th>
<th class="head">Bench volume</th>
<th class="head">Bench intensity</th>
<th class="head">Squat volume</th>
<th class="head">Squat intensity</th>
<th class="head">Deadlift</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>1</td>
<td>80 ×6@8.5, ×6@8.5, ×6@8.5, ×6@9, ×6@9, ×6@10</td>
<td>87.5 ×5@9.5, 80 ×7@10, ×5@10</td>
<td>120 ×5@7, ×5@8.5, ×5@8.5, ×5@8.5, ×5@9</td>
<td>125×5@8, 100×4</td>
<td>150×5@9</td>
</tr>
<tr><td>2</td>
<td>85 ×6@8.5, ×6@10, ×6@10, ×4@10</td>
<td>92.5 ×4@8, ×4@9, ×4@10, ×4@10</td>
<td>122.5 ×5@8, ×5@8.5, ×5@8.5, ×5@9, ×5@9</td>
<td>130 ×4@7.5, ×4@8.5, ×4@9.5, ×4@9.5</td>
<td>160 ×4@9</td>
</tr>
<tr><td>3</td>
<td>90 ×4@8.5, ×4@8.5, ×4@9.5, ×4@9.5, ×4@9, ×3@10</td>
<td>100 ×4@10, ×3@10</td>
<td>125 ×5@8.5, ×5@9, ×5@9, ×5@9, ×5@9</td>
<td>140 ×4@10</td>
<td>170 ×3@10</td>
</tr>
</tbody>
</table>
<p>Overall the volume block was quite successful, even hitting a small PR in the
Squat in the end, but again only because the last time I hit that weight, I was
wearing a belt. Transitioning from belted to unbelted lifting took about 20kg
from my Squat and Deadlift, but I doubt that they would jump back on if I
started using a belt right now. At least not with one training cycle dedicated
to belted lifting.</p>
<p>However, doing a little bit of intensity work at the end of the week, as well
as taking such large increases on the bench just left too much quality volume
on the table, a mistake which I avoided in my current training cycle.</p>
</div>
<div class="section" id="actual-lifts-in-the-strength-block">
<h2>Actual lifts in the strength block</h2>
<p>Now we are about to see some programmatic errors. The overall structure stayed
the same, but I dropped the reps on each day and compensated by adding more
plates to the bar. After the volume block I was certain to hit 155×1 or 160×1
in the squat, but let's see how I failed in this endeavour:</p>
<table border="1" class="docutils">
<colgroup>
<col width="17%" />
<col width="17%" />
<col width="17%" />
<col width="17%" />
<col width="17%" />
<col width="17%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Week</th>
<th class="head">Bench volume</th>
<th class="head">Bench intensity</th>
<th class="head">Squat volume</th>
<th class="head">Squat intensity</th>
<th class="head">Deadlift</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>5</td>
<td>100 ×3@10, ×3@10, ×3@10,</td>
<td>107.5 ×3@10</td>
<td>135 ×4@8, ×4@9, ×4@10</td>
<td>150 ×1@10</td>
<td>180 ×2@9</td>
</tr>
<tr><td>6</td>
<td>105 ×3@10, ×3@10, ×2@10</td>
<td>115×1 @10</td>
<td>145 ×2 @9.5, ×1@9.5, 100 ×5×3</td>
<td>145×1 @10, 150×0</td>
<td>190×1 @10</td>
</tr>
</tbody>
</table>
<p>Again my ass got up in the bench once I passed 110kg, but the bench worked out
quite well. What really pissed my off was my performance on the squat in the
sixth week. But, at least in retrospective, it is quite easy to see that I did
too much work in the week coming up to the day I wanted to peak. On Tuesday I
had not recuperated from last Friday's workout and then I dug the hole even
deeper.</p>
</div>
<div class="section" id="lessons-learned">
<h2>Lessons learned</h2>
<p>I took two main things from this cycle: First, when doing volume, focus on
volume. While it was not that much detrimental to vary the intensity over the
week, it also was not beneficial and hence had opportunity costs attached.
Second, plan for recovery when going for higher weights, especially if you plan
to peak.</p>
</div>
man (3) repranges2016-03-31T00:00:00+00:002016-03-31T00:00:00+00:00Marceltag:deaddy.net,2016-03-31:/man-3-repranges.html<p>Here is some documentation about some repranges I have encountered and often at
least somewhat played around with. Inspiration for this post was mainly that I
wanted to think of the viabilty of the APRE10 protocol for some assistance
work, but then did not have the table for the weight …</p><p>Here is some documentation about some repranges I have encountered and often at
least somewhat played around with. Inspiration for this post was mainly that I
wanted to think of the viabilty of the APRE10 protocol for some assistance
work, but then did not have the table for the weight increments in my head and
wanted it quickly accessible. I usually write <em>sets</em>×<em>reps</em> or, if a weight is
specified, the notation turns around, i.e. <em>weight</em> × <em>reps</em> × <em>sets</em>. Also note
that when writing <em>sets</em> × <em>reps</em> I mean sets across, meaning the weight is not
changed between the sets.</p>
<p>As this is a longer post and because it makes me happy that markdown can
automagically generate it, take a look at this fabulous table of contents:</p>
<div class="toc">
<ul>
<li><a href="#sets-of-five">Sets of five</a><ul>
<li><a href="#35">3×5</a></li>
<li><a href="#55">5×5</a></li>
</ul>
</li>
<li><a href="#sets-of-three-or-less">Sets of three (or less)</a><ul>
<li><a href="#bill-starr-press">Bill Starr Press</a></li>
<li><a href="#53">5×3</a></li>
<li><a href="#33">3×3</a></li>
<li><a href="#rpt">RPT</a></li>
<li><a href="#pyramids">Pyramids</a></li>
</ul>
</li>
<li><a href="#autoregulation">Autoregulation</a><ul>
<li><a href="#apre">APRE</a></li>
<li><a href="#rts">RTS</a></li>
</ul>
</li>
<li><a href="#miscellaneous">Miscellaneous</a><ul>
<li><a href="#531">5/3/1</a></li>
<li><a href="#531-gn-or-531-but-with-volume">5/3/1 + GN or 5/3/1, but with volume</a></li>
<li><a href="#boring-but-big">Boring but big</a></li>
<li><a href="#myoreps">Myoreps</a></li>
<li><a href="#350">350</a></li>
<li><a href="#linear-periodization-redux">Linear periodization redux</a></li>
<li><a href="#power-to-the-people">Power to the people</a></li>
<li><a href="#prilepins-chart">Prilepin's Chart</a></li>
<li><a href="#stretching-or-condensing-schemes">Stretching or condensing schemes</a></li>
</ul>
</li>
</ul>
</div>
<h2 id="sets-of-five"><a class="toclink" href="#sets-of-five">Sets of five</a></h2>
<p>Sets of five are quite popular, as five reps are a neat compromise between
maximal strength training, but still allow to accumulate enough volume in a
reasonable time for hypertrophy to occur.</p>
<h3 id="35"><a class="toclink" href="#35">3×5</a></h3>
<p>Three sets of five is the base of Starting Strength and many other novice
programs utilizing linear progression. However, that's about all where I found
it useful. After a longer layoff it seems to work quite well to fall back to
some sort of 3×5 linear progression until one is back on track, maybe followed by
an intermediate template. Aside from that I often use some 3×5 linear
progression for new exercises, so that I start lower than what I could use and
then gradually increase the weight in order to stabilize form on the exercise.
Also I like doing some stuff like RDLs or Pendlay Rows in this rep scheme, but
for assistance I have not found one rep range to be far superior to another
one. Also my light work is often done in a 2×5 or 3×5 fashion, but that is
again quite arbitrary.</p>
<h3 id="55"><a class="toclink" href="#55">5×5</a></h3>
<p>Until now, I have not found anything which works for me as well as 5×5 on the
big exercises, except maybe on the Deadlift. It is the corner stone of many
programs, e.g. for <a href="/on-the-paradigm-difference-between-texas-method-and-heavy-light-medium.html">Texas method or HLM</a>, about which I already talked a bit
in the linked post. At the moment I am using it to accumulate volume (more on
that later in a post mortem on my current training plan) and so far it seems to
work out.</p>
<p>This scheme can be a bitch. Depending on the weights employed it can be grinding
through an endless hell of squats and bench presses, making sleeping and eating
a full time job. However, in that case a volume or weight reduction might be
appropriate. Unless you really like torturing yourself, as there is a great
feeling to being alive after <em>surviving</em> such a workout. But if you're chasing
a feeling, you are exercising and not training, and especially not the badass
you feel to be after such an workout.</p>
<p>For me I found that a good weight selection, which actually drives my progress,
is about an @8 – @8.5 on the RPE scale (see <a href="#rts">RTS</a>) and creeps up to @9 – @9.5.</p>
<p>Caveat: I could not produce good results in female athletes with it.</p>
<h2 id="sets-of-three-or-less"><a class="toclink" href="#sets-of-three-or-less">Sets of three (or less)</a></h2>
<p>If you want to lift more weight, you have to lift more weight, and everything
over three reps is cardio.</p>
<h3 id="bill-starr-press"><a class="toclink" href="#bill-starr-press">Bill Starr Press</a></h3>
<p>This is a template which <a href="http://startingstrength.com/resources/forum/showthread.php?t=17040">Bill Starr mentioned</a> for improving the Press. It is
as straightforward as it gets:</p>
<ul>
<li>do two or three sets of five as warmup</li>
<li>three to six triples across</li>
<li>one backoff set of ten with about 10kg less</li>
</ul>
<p>And you only add weight to the top set if you can do six triples across.</p>
<p>I ran
it a few weeks once I was close to 1 Plate, which is probably about 1-2 wheels
less than the guys Bill Starr was coaching were pressing, but it worked quite
well. I probably did not get that much stronger in terms of musculature, but my
technique definitely improved during that time.</p>
<h3 id="53"><a class="toclink" href="#53">5×3</a></h3>
<p>While there is an infinite amount of ways you could do sets of three across,
this one stands out for two reasons: The first one is when using 5×5 or
something similar in a Texas method-ish setup for driving volume, 5×3 is a good
way to drop some volume without losing intensity.</p>
<p>The second reason is that especially female trainees (or people with lower
testosterone) seem to respond to lower repetitions better than to higher
repetitions, so it can be a better way to approach programs like Starting
Strength in these populations.</p>
<h3 id="33"><a class="toclink" href="#33">3×3</a></h3>
<p>Ah 3×3. It has some fans and 3×3 is a fun way to set up your training. However,
as Daniel Flaminio mentioned during my C-license training, its main drawback is
that you cannot use something close to your 3RM for 3×3, and if you reduce the
weight, 3×3 is not enough volume to produce a significant training stimulus.
Nevertheless, it sometimes works quite well, but has opportunity costs
attached, i.e. something probably works better, for instance
<a href="#pyramids">Pyramids</a>.</p>
<h3 id="rpt"><a class="toclink" href="#rpt">RPT</a></h3>
<p>Reverse pyramid training, or <em>RPT</em> for short, is probably the most primitive
form of a pyramid. The general setup seems to be something like this</p>
<table>
<thead>
<tr>
<th style="text-align: center;">Set</th>
<th style="text-align: center;">Reps</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">1</td>
<td style="text-align: center;"><em>weight</em>×<em>n</em></td>
</tr>
<tr>
<td style="text-align: center;">2</td>
<td style="text-align: center;"><em>weight-10%</em>×<em>(n+2)</em></td>
</tr>
<tr>
<td style="text-align: center;">3</td>
<td style="text-align: center;"><em>weight-20%</em>×<em>(n+3)</em></td>
</tr>
</tbody>
</table>
<p>In particular the lean gains people seem to favor it and it seems to work good
in a cut. In particular I like it for weighted dips or chins. There is not much
to say to it. You could do any number of reps in the first set and progress in
that manner, something like 3 reps, 5 reps and 8 reps being an obvious and
popular candidate. Higher reps in the top set are possible, but why would you
do that?</p>
<h3 id="pyramids"><a class="toclink" href="#pyramids">Pyramids</a></h3>
<figure style="width: 404px; display: inline-block; float: right;">
<img src="/images/pyramids-training.png"
alt="two pyramids"
width="400px">
<figcaption>
The first pyramid leaves the trainee more exerted in the primary work set,
while the second one also allows for more work in an already fatigued state
after the work set.
</figcaption>
</figure>
<p>In general a pyramid is a combinations of sets where the weight moves, well, in
a pyramid shaped pattern, beginning with some sets of ascending weight, peaking
in a primary work set and followed by some sets of descending weight. As the
weight increases, the repetitions usually decrease and vice versa. Clearly
<a href="#rpt">RPT</a> is a degenerate form of a pyramid, as well as ramping to a top set.</p>
<p>There a many ways to set up an pyramid. Note however, that a symmetric setup
is almost never the best choice. A pyramid long in the end, as seen in the
figure seems beneficial, where the trainee accumulates less fatigue before the
top set and then gets in some more work afterwards.</p>
<p>To do pyramids right, I think one has to take a look at
<a href="https://deaddy.net/how-i-currently-think-about-sheikos-programs.html">Sheiko's programs</a>.
You build up to one or two top sets with doubles or singles much like you
would build up to sets across, but then instead of doing the volume at these
weights, you go back down and slightly increase the reps.
Over the course of the weeks you can also increase the reps on the way up, so
instead of starting with 50% for 5, you have on the third pyramid 50% for 7 in
the first set.</p>
<h2 id="autoregulation"><a class="toclink" href="#autoregulation">Autoregulation</a></h2>
<p>This is where it gets a bit more complicated. Until now reps, sets and weight where
predetermined, but on some days you can tolerate more work than on others, and
this can and should be taken into account when planning your training. There
are two popular systems to do this, <a href="#apre">APRE</a> and Mike Tuchscherer's
<a href="#rts">RTS</a>.
I first describe APRE, as it is the less complex system.</p>
<h3 id="apre"><a class="toclink" href="#apre">APRE</a></h3>
<p>APRE is short for <em>Autoregulated progressive resistance exercise</em>.
There are three so called protocols, <em>APRE3</em>, <em>APRE6</em>, <em>APRE10</em>, where the number
indicates the approximate rep maximum you are working with. In general the
trainee performs the lifts according to the following table, as seen in
<em>Supertraining</em> <sup id="fnref:Supertraining"><a class="footnote-ref" href="#fn:Supertraining">1</a></sup>:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">APRE3</th>
<th style="text-align: center;">APRE6</th>
<th style="text-align: center;">APRE10</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">6× 50% 3RM</td>
<td style="text-align: center;">10× 50% 6RM</td>
<td style="text-align: center;">12× 50% 10RM</td>
</tr>
<tr>
<td style="text-align: center;">3× 75% 3RM</td>
<td style="text-align: center;">6× 75% 6RM</td>
<td style="text-align: center;">10× 75% 10RM</td>
</tr>
<tr>
<td style="text-align: center;">3RM to failure</td>
<td style="text-align: center;">6RM to failure</td>
<td style="text-align: center;">10RM to failure</td>
</tr>
<tr>
<td style="text-align: center;">adjusted reps to failure</td>
<td style="text-align: center;">adjusted reps to failure</td>
<td style="text-align: center;">adjusted reps to failure</td>
</tr>
</tbody>
</table>
<p>Here <code>nRM</code> refers to your <code>n</code> repetition maximum in the first training session,
or the adjusted weight after the last session. The adjustments are made
according the following table:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">Reps 3RM</th>
<th style="text-align: center;">Adjustment</th>
<th style="text-align: center;">Reps 6RM</th>
<th style="text-align: center;">Adjustment</th>
<th style="text-align: center;">Reps 10RM</th>
<th style="text-align: center;">Adjustment</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">1 – 2</td>
<td style="text-align: center;">decr. 2.5 – 5kg</td>
<td style="text-align: center;">0 – 2</td>
<td style="text-align: center;">decr. 2.5 – 5kg</td>
<td style="text-align: center;">4 – 6</td>
<td style="text-align: center;">decr. 2.5 – 5kg</td>
</tr>
<tr>
<td style="text-align: center;">3 – 4</td>
<td style="text-align: center;">leave the same</td>
<td style="text-align: center;">3 – 4</td>
<td style="text-align: center;">decr. 0 – 2.5kg</td>
<td style="text-align: center;">7 – 8</td>
<td style="text-align: center;">decr. 0 – 2.5kg</td>
</tr>
<tr>
<td style="text-align: center;">5 – 6</td>
<td style="text-align: center;">incr. 2.5 – 5kg</td>
<td style="text-align: center;">5 – 7</td>
<td style="text-align: center;">leave the same</td>
<td style="text-align: center;">9 – 11</td>
<td style="text-align: center;">leave the same</td>
</tr>
<tr>
<td style="text-align: center;">7 – …</td>
<td style="text-align: center;">incr. 5 – 10kg</td>
<td style="text-align: center;">8 – 12</td>
<td style="text-align: center;">incr. 2.5 – 5kg</td>
<td style="text-align: center;">12 – 16</td>
<td style="text-align: center;">incr. 2.5 – 5kg</td>
</tr>
<tr>
<td style="text-align: center;"></td>
<td style="text-align: center;"></td>
<td style="text-align: center;">13 – …</td>
<td style="text-align: center;">incr. 5 – 7.5kg</td>
<td style="text-align: center;">17 – …</td>
<td style="text-align: center;">incr. 5 – 7.5kg</td>
</tr>
</tbody>
</table>
<p>So say you're 3RM in the Squat is 150kg. Then you would perform 6 Reps with
75kg, 3 Reps with 112.5kg and then as many reps as possible with 150kg. In the
next set you load the bar with the adjustments according to the table, so if
you get 3 reps, you just leave the weight the same and do again as many reps as
possible. Say now you can only complete 2 reps, then you would base your next
training session off 145 – 147.5kg, and so forth.</p>
<p>The APRE protocols seem to work quite well for novice and early intermediate
trainees and the autoregulated adjustments might allow for super linear.
Note that APRE has really low volume, so in the overall program you might want
to let some back off work or assistance work follow.</p>
<p>There are two problems with this scheme. First, the warmup is designed without
love and much thought. Almost everbody needs smaller jumps and fewer reps
towards the working set in order to display good technique and control over the
weight. As such, I simply recommend warming up as you see fit.
The second and major problem I (and others) have with this scheme is that it calls for two
sets to failure, which can be quite expensive in terms of recovery and can even
lead to technique deterioration over the course of a few weeks. Leaving one rep
in the tank on each set seems to work better. Even more conservative would be
to cut off the second set, if you reach the corresponding numbers
of reps. So my recommendation would be more something like this:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">APRE3</th>
<th style="text-align: center;">APRE6</th>
<th style="text-align: center;">APRE10</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">warmup</td>
<td style="text-align: center;">warmup</td>
<td style="text-align: center;">warmup</td>
</tr>
<tr>
<td style="text-align: center;">3RM @9</td>
<td style="text-align: center;">6RM @9</td>
<td style="text-align: center;">10RM @9</td>
</tr>
<tr>
<td style="text-align: center;">adjusted reps ×3 or @9, whatever comes first</td>
<td style="text-align: center;">adjusted reps ×6 or @9, whatever comes first</td>
<td style="text-align: center;">adjusted reps ×10 or @9, whatever comes first</td>
</tr>
</tbody>
</table>
<p>This seems to work much better, and can be used in quite a variety of ways, say
on a day with the big three or just one primary movement followed by assistance
work.</p>
<p>On a personal note, I think the term autoregulation is a bit inappropriate. I
mean, that is just what every meathead is doing when trying to catch a pump.
Not enough reps? Drop some weight. Too many reps? Maybe add some weight. True
autoregulation has another name, namely</p>
<h3 id="rts"><a class="toclink" href="#rts">RTS</a></h3>
<p>This is Mike Tuchscherer's quite successful attempt at establishing a formal
framework for <em>you gotta listen to your body bro</em>. Both weight and volume are
determined by your readiness in that training session. The idea is here that
your body does not really care about the absolute weight on the bar and number
of reps, but about the weight relative to your ability on that day. A few sets of
five with 85% of your 1RM may be too easy on some days where everything is
fine, or might totally destroy you if you lived on a diet of sleep
deprivation and long hours the days before. RTS gives us tools to account for
such occurences in the training plan without having to deviate from the plan.</p>
<p>It consists of two concepts, one which
you probably already have seen, namely <em>RPE</em>, or rating of perceived exertion,
which quantifies the intensity. The other concept are <em>fatigue percents</em>,
quantifiyng the total volume or work load of the training </p>
<p>The former is similar to the homonymous Borg scale, however specific to
powerlifting and similar exercies. So after a set you simply assign a number
from 5.5 to ten, according how it felt:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">RPE</th>
<th style="text-align: left;">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">@10</td>
<td style="text-align: left;">Maximal effort</td>
</tr>
<tr>
<td style="text-align: center;">@9</td>
<td style="text-align: left;">One more rep in the tank</td>
</tr>
<tr>
<td style="text-align: center;">@8</td>
<td style="text-align: left;">Two more reps possible</td>
</tr>
<tr>
<td style="text-align: center;">@7</td>
<td style="text-align: left;">Easy as an opener</td>
</tr>
<tr>
<td style="text-align: center;">@6</td>
<td style="text-align: left;">Easy as an warmup</td>
</tr>
<tr>
<td style="text-align: center;">@5.5</td>
<td style="text-align: left;">too easy to count as a work set</td>
</tr>
</tbody>
</table>
<p>Note that I prefix RPEs with an @-sign, as this seems to be also common use in
discussions. If you're not quite sure if three, two, or one more rep was
possible, you add 0.5 for the "maybe" qualifier.</p>
<p>Of course this is not an exact scale, but after a few weeks trying to assign
RPE ratings to any set you do, as well as trying to be honest, this gives us an
individual and quite objective to measure intensity in relation to our
capabilities in this training session.</p>
<p>As a guideline, one should feel one's way up to the working weight by
estimating the weight one is working with and then doing sets with the prescribed
reps with 90% and 95% of the estimate. Say your plan calls for ×5@8 and you
think that might work out to 125×5@8, you'd do one set with 112.5×5, take not
of your RPE, then do one with 117.5 or 120 (or closer to 118.75, if your
weights allow for it) and again take note of your RPE. By now you achieved two
things: First, you probably can tell if 125×5 will be a @8 or if you should
drop some weight or even add some more. And secondly, you've already
accumulated some quality volume.</p>
<p>To control volume, Mike Tuchscherer introduced the concept of <em>fatigue
percents</em>, measuring how much fatigue you are accumulating on this exercise. </p>
<figure style="width: 304px; display: inline-block; float: right;">
<a href="/images/traininglog-appendix-large.jpg">
<img src="/images/traininglog-appendix-small.jpg"
alt="Prilepin chart in training log"
width="300px"
align="right"></a>
<figcaption>
Part of my old traininglog's appendix, the Prilepin type table from Mike
Tuchscherer to gauge one's maximum, taking RPE into account.
</figcaption>
</figure>
<p>There are multiple ways to measure fatigue, the easisest being <em>load drops</em>. To
accumulate x% fatigue, you would simply work up to your top set, then deload
the bar by x%, and continue doing sets with the same reps with it until your
RPE is the same as in the top set. Most of the time fatigue is given in ranges,
as the weights dictate what you can actually load onto the bar. In the above
example, to achieve 2-3% fatigue, one would continue doing sets with 122.5×5
until the sets become an @8. If you are unsure, err on the lighter side and
maybe stop doing sets if you are getting RPEs 0.5 below the target.</p>
<p>A bit more complicated is attaining fatigue using <em>repeats</em>. Here you just
continue repeating your topset until the RPE creeps up to a certain point. In
order to achieve n% fatigue, you do repeats until your estimated 1RM from the
top set dropped by n%. This essentially requires a lookup in your
<a href="http://forum.reactivetrainingsystems.com/content.php?157-The-Personalized-Prilepin-s-Chart">personalized Prilepin's chart</a>, as there is no closed formular for estimates
based on your reps and RPE.</p>
<p>Also, we should not kid ourselves. While all these percentages are fine and
dandy, it suggests more precision than what is really there. Practically it
works out something like this:</p>
<table>
<thead>
<tr>
<th>Volume</th>
<th style="text-align: center;">load drop</th>
<th style="text-align: center;">RPE increase</th>
</tr>
</thead>
<tbody>
<tr>
<td>almost none</td>
<td style="text-align: center;">only topset</td>
<td style="text-align: center;">only topset or maybe 0</td>
</tr>
<tr>
<td>low</td>
<td style="text-align: center;">2–3%</td>
<td style="text-align: center;">0.5–1</td>
</tr>
<tr>
<td>medium</td>
<td style="text-align: center;">4–6%</td>
<td style="text-align: center;">1.5–2</td>
</tr>
<tr>
<td>high</td>
<td style="text-align: center;">up to 10%</td>
<td style="text-align: center;">2.5 and beyond</td>
</tr>
</tbody>
</table>
<h2 id="miscellaneous"><a class="toclink" href="#miscellaneous">Miscellaneous</a></h2>
<p>Here is some stuff where I don't know where to fit it in and also rep
schemes for assistance exercises. In the end it does not really matter and
depends on what you are trying to achieve with these exercises. Sometimes you
just want to get a small pump and warmup to facilitate recovery, sometimes you
want to accumulate some more volume. Really does not matter.</p>
<h3 id="531"><a class="toclink" href="#531">5/3/1</a></h3>
<p>Well, Jim Wendler's 5/3/1 is somehow a classic. In its most pure form without
any assistance, you would do each main lift on one day in a week and do three
sets based on the following percentages of an ever increasing training
maximum.</p>
<p>The usual table looks like this and it appears to be pretty heavy and badass,
much higher than usual 65%-70% of 1RM we use in programs past the novice
stage:</p>
<table>
<thead>
<tr>
<th></th>
<th style="text-align: center;">Week 1</th>
<th style="text-align: center;">Week 2</th>
<th style="text-align: center;">Week 3</th>
<th style="text-align: center;">Week 4</th>
</tr>
</thead>
<tbody>
<tr>
<td>Set 1</td>
<td style="text-align: center;">65% × 5</td>
<td style="text-align: center;">70% × 3</td>
<td style="text-align: center;">75% × 5</td>
<td style="text-align: center;">40% × 5</td>
</tr>
<tr>
<td>Set 2</td>
<td style="text-align: center;">75% × 5</td>
<td style="text-align: center;">80% × 3</td>
<td style="text-align: center;">85% × 3</td>
<td style="text-align: center;">50% × 5</td>
</tr>
<tr>
<td>Set 3</td>
<td style="text-align: center;">85% × 5+</td>
<td style="text-align: center;">90% × 3+</td>
<td style="text-align: center;">95% × 1+</td>
<td style="text-align: center;">60% × 5</td>
</tr>
</tbody>
</table>
<p>However, a more honest representation would be like this, since we use 90% of
the training max:</p>
<table>
<thead>
<tr>
<th></th>
<th style="text-align: center;">Week 1</th>
<th style="text-align: center;">Week 2</th>
<th style="text-align: center;">Week 3</th>
<th style="text-align: center;">Week 4</th>
</tr>
</thead>
<tbody>
<tr>
<td>Set 1</td>
<td style="text-align: center;">58.5% × 5</td>
<td style="text-align: center;">63% × 3</td>
<td style="text-align: center;">67.5% × 5</td>
<td style="text-align: center;">36% × 5</td>
</tr>
<tr>
<td>Set 2</td>
<td style="text-align: center;">67.5% × 5</td>
<td style="text-align: center;">72% × 3</td>
<td style="text-align: center;">76.5% × 3</td>
<td style="text-align: center;">45% × 5</td>
</tr>
<tr>
<td>Set 3</td>
<td style="text-align: center;">76.5% × 5+</td>
<td style="text-align: center;">81% × 3+</td>
<td style="text-align: center;">85.5% × 1+</td>
<td style="text-align: center;">54% × 5</td>
</tr>
<tr>
<td>avg %</td>
<td style="text-align: center;">67.5%</td>
<td style="text-align: center;">72%</td>
<td style="text-align: center;">72.5%</td>
<td style="text-align: center;">45%</td>
</tr>
</tbody>
</table>
<p>Now this looks a lot more like a proper training program, which is very low on
the volume side.</p>
<p>Note that the last set, except in the fourth week, is always executed as an
AMRAP set, unless you tinker with the program.
The fourth week serves obviously as a deload. In this form the program is in
almost any instance just not enough volume, and on this low amount of volume, a
deload every four weeks is just too often.
This becomes even more apparent when we are taking the actual percentages into
account and not the percentage of the hypothetical training max.
In fact, in newer installments these problems seem to be addressed, by doing a
deload only after two to three cycles of the first and repeating the first set
a few times after the last one as backoff.</p>
<p>Well, if you are in a rut and nothing seems to work, this program will always
help to build some momentum, as you take 95% of your current maximum as your
first training maximum. Or maybe if you are really short on time or want to
fuck around too much with assistance exercises. Also if you are on some sort of
Texas Method-ish setup and need some idea to vary the weights on your intensity
day, the 5/3/1 weight selection on week 3 seems to work quite well.</p>
<p>In some intermediates it seems to work quite well to do three training days and
always two exercises, Squat and Press, Deadlift and Bench, according to 5/3/1,
effectively running one cycle in two weeks.</p>
<p>My deadlift also seemed to respond to it quite well on the way from two to four
plates.</p>
<h3 id="531-gn-or-531-but-with-volume"><a class="toclink" href="#531-gn-or-531-but-with-volume">5/3/1 + GN or 5/3/1, but with volume</a></h3>
<p>The main issue with 5/3/1 is that it lacks a ton of volume.
Or several tons.
Most of Wendler's variants such as first set last or assistance schemes try
effectively to close this gap, but usually this is only one or two additional
sets.</p>
<p>Luckily Greg Nuckols has an awesome sheet of programs, and while I never ran
any of them, he has a fitting rythm of 3 weeks up, 1 week down, and actually
progresses back-off sets fittingly, especially in the 1x a week beginner
programs.</p>
<p>So I tried a few there and found the back-off work for bench does work quite
well, at least for non-pulling lifts:</p>
<table>
<thead>
<tr>
<th></th>
<th style="text-align: center;">Week 1</th>
<th style="text-align: center;">Week 2</th>
<th style="text-align: center;">Week 3</th>
<th style="text-align: center;">Week 4</th>
</tr>
</thead>
<tbody>
<tr>
<td>Set 1</td>
<td style="text-align: center;">58.5% × 5</td>
<td style="text-align: center;">63% × 3</td>
<td style="text-align: center;">67.5% × 5</td>
<td style="text-align: center;">36% × 5</td>
</tr>
<tr>
<td>Set 2</td>
<td style="text-align: center;">67.5% × 5</td>
<td style="text-align: center;">72% × 3</td>
<td style="text-align: center;">76.5% × 3</td>
<td style="text-align: center;">45% × 5</td>
</tr>
<tr>
<td>Set 3</td>
<td style="text-align: center;">76.5% × 5+</td>
<td style="text-align: center;">81% × 3+</td>
<td style="text-align: center;">85.5% × 1+</td>
<td style="text-align: center;">54% × 5</td>
</tr>
<tr>
<td>1st back-offs</td>
<td style="text-align: center;">67.5% × 5 × 2</td>
<td style="text-align: center;">72% × 3 × 2</td>
<td style="text-align: center;">76.5% × 1 × 2</td>
<td style="text-align: center;">45% × 5 × 2</td>
</tr>
<tr>
<td>2nd back-offs</td>
<td style="text-align: center;">58.5% × 8 - 10 × 3</td>
<td style="text-align: center;">72% × 6 - 8 × 3</td>
<td style="text-align: center;">85.5% × 3 × 5</td>
<td style="text-align: center;">54% × 5</td>
</tr>
</tbody>
</table>
<p>So we just go back down the ladder, do two sets at the second heaviest set and
in the first few weeks, we do three high rep sets on the first weight, and in
the third week, we do five triples with the first weight.</p>
<h3 id="boring-but-big"><a class="toclink" href="#boring-but-big">Boring but big</a></h3>
<p>Now we're getting to assistance schemes. Boring but big or <em>BBB</em> for short is
often used in connection with 5/3/1 and simply consists of 5×10 with 50% of
your training max. Nothing too fancy. It seems to work quite well to slowly
increase the percentage over the course of a few weeks. The main benefit is
that you can just strip some plates and continue the exercise you were already
doing.</p>
<h3 id="myoreps"><a class="toclink" href="#myoreps">Myoreps</a></h3>
<p>Take a movement, ideally some isolation exercise or something where you cannot
hurt yourself so much, pick a weight you can do for 12 – 24 reps and max out,
rest for 20 seconds and do sets of 3 – 6 (if you had 12 reps, then sets of three,
if you had 24 reps, sets of six and interpolate accordingly) reps with 10 seconds
pause, until you cannot hit the prescribed amount of reps anymore. The main
benefit is that by reducing rest to a minimum, you can catch quite a pump in a
few minutes at the end of your workout, even on a variety of exercises.</p>
<h3 id="350"><a class="toclink" href="#350">350</a></h3>
<p>Take an exercise and pick a weight so that you can finish something between 40
and 50 reps in three sets, with one minute pause, maximum. If you cannot
complete 40 reps, you should lower the weight next time and you are only
allowed to increase the weight once you hit 50 reps in three sets.</p>
<h3 id="linear-periodization-redux"><a class="toclink" href="#linear-periodization-redux">Linear periodization redux</a></h3>
<p>This is not exactly a rep scheme, more of an progression scheme, and is simply
this: Start with about 70% of your max, do an AMRAP set, strip off about 5%
(use whatever is easy to do, say 2.5kg for a press, 5kg for a bench in the low
hundreds (kg), 10kg for something around 200kg etc.),
try to match reps, strip another 5% off the bar, try to beat the reps. Add one
increment next week, try not to lose reps. Continue until you end up doing
triples in the first set, then deload, max out or do something else.</p>
<p>This is not great to run back to back, as you probably lose some work
capacity, but now and then it is a great way to break out of a rut. Also it
has the Greg Nuckols stamp of approval, at least he published an T-Nation
article suggesting this.</p>
<p>Well, there is not much left to say. Let me know if you think I missed some
important setup for reps and sets.</p>
<h3 id="power-to-the-people"><a class="toclink" href="#power-to-the-people">Power to the people</a></h3>
<p>As with the linear periodization redux, this is also a progression scheme and
is laid out in Pavel Tsatsouline's "Power to the people".</p>
<p>It is rather simple: You do one heavy set with five reps and follow up with a
set of five with 90% of the weight used for the first set. That's it. If you
want more hypertrophy, Pavel recommends to do additional sets of five with 80%
of the weight used for the first set, until you can no longer do sets of five
with excellent technique. Depending on the person this may take 10 - 20 sets!</p>
<p>Next time you just add weight to the top set and consequently the down set(s).
Do so until you can not complete your first set anymore, then restart the
whole cycle with a bit higher weights.</p>
<h3 id="prilepins-chart"><a class="toclink" href="#prilepins-chart">Prilepin's Chart</a></h3>
<p>This well known table is again less of a rep scheme and more of a volume
guideline. Note that it was developed by observing the training of high level
weightlifters. There exist countless critiques and adaption to other strength
sports. But even for powerlifting, these are solid guidelines if your focus is
on developing technique.</p>
<table>
<thead>
<tr>
<th style="text-align: center;">%1RM</th>
<th style="text-align: center;">optimal reps per set</th>
<th style="text-align: center;">optimal total reps</th>
<th style="text-align: center;">total range of reps</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">55 – 65</td>
<td style="text-align: center;">3 – 6</td>
<td style="text-align: center;">24</td>
<td style="text-align: center;">18 – 30</td>
</tr>
<tr>
<td style="text-align: center;">70 – 80</td>
<td style="text-align: center;">3 – 6</td>
<td style="text-align: center;">18</td>
<td style="text-align: center;">12 – 24</td>
</tr>
<tr>
<td style="text-align: center;">80 – 90</td>
<td style="text-align: center;">2 – 4</td>
<td style="text-align: center;">15</td>
<td style="text-align: center;">10 – 20</td>
</tr>
<tr>
<td style="text-align: center;">90+</td>
<td style="text-align: center;">1 – 2</td>
<td style="text-align: center;">7</td>
<td style="text-align: center;">4 – 10</td>
</tr>
</tbody>
</table>
<h3 id="stretching-or-condensing-schemes"><a class="toclink" href="#stretching-or-condensing-schemes">Stretching or condensing schemes</a></h3>
<p>Sometimes certain schemes are nice, but can be too much to handle in a single
week or whatever their underlying cycle is.
In this case one can simply stretch it out over a longer period of time.</p>
<p>A scheme used by Kevin Cann for some low volume "just staying in practice" is
to work up to a heavy single in one week and do 5x5 with 70% of it the
following week.
This is basically just a stretched TM and it can also work nicely with other
schemes.</p>
<p>This way we can easily work in a training progression we already know that
works for us in other training programs, which might already be quite full.</p>
<p>On the other hand, we can also condense schemes.
This is for example very popular with 5/3/1, which, as we have seen, is really
not enough volume for anyone to progress.
But many people had success condensing it into a two week programming, doing
each lift two times a week and completing a cycle in two weeks.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:Supertraining">
<p>Mel Cunningham Siff and Yuri Vitalievitch Verkhoshansky, Supertraining <a class="footnote-backref" href="#fnref:Supertraining" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>Make your employees work all day without paying more hours2016-03-17T00:00:00+00:002016-03-17T00:00:00+00:00Marceltag:deaddy.net,2016-03-17:/make-your-employees-work-all-day-without-paying-more-hours.html<p>Do you know these people who cannot seem to stop working? Even after a few
drinks, they still talk happily about whatever they are working on, gathering
new ideas and trying to find answers? Some people
think this is sad, as for some reason people should be sad about their …</p><p>Do you know these people who cannot seem to stop working? Even after a few
drinks, they still talk happily about whatever they are working on, gathering
new ideas and trying to find answers? Some people
think this is sad, as for some reason people should be sad about their jobs or
watching endless seasons of TV shows should be more fulfilling than work. Other
people on the hand are happy for them, or maybe even a bit envious. And as an
employer, you should be curious, because these people even do some significant
work in their free time. And depending on the line of work, this might be
critical to their and hence your own success.</p>
<div class="figure align-right" style="width: 304px">
<img alt="some ugly math" src="/images/overtime.png" style="width: 300px;" />
<p class="caption">In Academia, spring break means finally having the peace of mind to work
past midnight without absolutely hating all of humanity.</p>
</div>
<p>For instance, according to Paul Graham, a programmer needs to be able to
<a class="reference external" href="http://paulgraham.com/head.html">hold a program in one's head</a>. The same is certainly true for mathematicians
and apparently also for other types of creative workers, since, paraphrasing
John Cleese, one has to rest one's head against the problem, in a friendly and
inviting way. Here is the problem: You absolutely cannot ever force your
employee to do this. This is a bit like teaching, you can give them all the
information, but you can not give them understanding. However, there are some
things you can do to facilitate this, or at least stop doing some things
prohibiting this process:</p>
<div class="section" id="reduce-distractions">
<h2>Reduce distractions</h2>
<p>I have already written about <a class="reference external" href="/reclaiming-attention-at-work.html">reclaiming one's attention at work</a>, so I just
refer you there. If your employees are in constant firefighting mode or are
being micromanaged like a squad of space marines in Korea, you can not expect
that any significant problem will be solved.</p>
</div>
<div class="section" id="do-not-make-them-hate-you">
<h2>Do not make them hate you</h2>
<p>Micromanaging can be bad in one way, as it forces your employee into a schedule
unfit for her. But much worse is the psychological effect: You reduce the
feeling of control she has about her own schedule and work and probably make her
hate you, rightfully so. And this is the real problem, as an employee holding a
grudge against you is not holding the problem in his head. Even if your worker
is so disciplined to still perform at least to some degree on the job, it is
highly unlikely that free time will be spent in a productive way.</p>
<p>You know these annoying people who cannot stop _complaining_ about work? You do
not want to be one of these and much less, you do not want to produce one of
these. Word spreads around faster than one thinks and you are not only
immediately hurting performance, but also scaring off talent. Of course there
are more things you can do wrong than just micromanaging. And you will make
mistakes. Better assume responsibility and apologize appropriately, then, least
your reputation be tarnished.</p>
</div>
<div class="section" id="assume-responsibility-beyond-the-workplace">
<h2>Assume responsibility beyond the workplace</h2>
<p>Nope, this is not going to be for bonus points. This is essential. Your
employees still have a life and it will worry them. If you can help them here,
it will not only make them like you better, but also allow them to perform on a
higher level. And almost all worries will be some combination of time, money
and security, things which you have control over.
Time to spent with family, money to ensure a living, knowing to
still have an income in a few years. While you cannot guarantee that your
company is still in business in a few years, you can be sensible about layoffs
and employee turnover in general. Adequate pay and flexibility with working
hours are also non-optional. Deficits in these areas will make your employees
look for other opportunities, probably looking for job offers while being on
your payroll.</p>
<p>One common theme here is that of control: While you are large and in charge, it
is important that your employees feel being in control of their own life and
situation. Because only then, there is the possibility that big and hard
problems can occupy their mind, in their free time, without you paying an
additional dime.</p>
</div>
Pay what you want might be asking too much from customers2016-03-11T00:00:00+00:002016-03-11T00:00:00+00:00Marceltag:deaddy.net,2016-03-11:/pay-what-you-want-might-be-asking-too-much-from-customers.html<p>Being the <em>math guy</em> in my hood and non-academic social circle, I am often
asked to give private lessons, most often when exams are coming up, but
sometimes even some sort of semi regular arrangement. I love teaching
mathematics and helping people, and more often than not, people in need …</p><p>Being the <em>math guy</em> in my hood and non-academic social circle, I am often
asked to give private lessons, most often when exams are coming up, but
sometimes even some sort of semi regular arrangement. I love teaching
mathematics and helping people, and more often than not, people in need for
private lessons are not really well off (makes you think), so I am not in it
for the money. So when it comes to the end of the lesson and people ask me what
to pay, I just tell them to pay what they think is right, which usually plays
out in the mid tens per hour.</p>
<div class="figure align-right" style="width: 304px">
<img alt="35 euros" src="/images/35euros.jpg" style="width: 300px;" />
<p class="caption">Not too much money for two hours of one of the best math teachers.</p>
</div>
<p>Anyway, as you know, everything you say to anyone except your closest friends,
spreads around, and so I got word of how some student thought that I am too
expensive. What the fuck? Bad publicity despite best intentions. To be fair,
that person actually did pay a above average, but I did not ask her to do so.
In fact I was a bit surprised by her offer, but the thought of negotiating a
lower payment for myself was quite disturbing.</p>
<p>But why did she pay more than she wanted? In contrast to most people asking me
for private lessons, she did not know me that much personally beforehand, but
instead a mutual friend suggested to her to ask me for lessons. Maybe she
wanted to look less cheap in front of me or do not embarrass the mutual friend.
Maybe she expected, since I dress, at least for my field of work, sharp that I
would be offended by a lesser amount. I do not really know and actually do not
need to know.</p>
<p>The real take home lesson here is: Even if you'd be willing to do work for
free, doing the pricing for yourself probably enhances the experience of the
full transaction. Even if you really love doing it, the mere act of not caring
about the payment probably is offensive to people in a less entrepreneurial
spirit. Also you can often probably better judge other peoples financial
situation in contrast to your own, especially if you visit them at home for
your job. Last but not least, fair pricing is hard work and part of your job.
Personally I almost never buy anything where I have to ask for the price or
even have to negotiate it. That is just too much hassle.</p>
Reclaiming attention at work2016-02-26T00:00:00+00:002016-02-26T00:00:00+00:00Marceltag:deaddy.net,2016-02-26:/reclaiming-attention-at-work.html<p>As I wrote in a <a class="reference external" href="/attention-not-time-is-the-most-valuable-resource.html">previous note</a>, attention seems to be the scarcest resource
an individual can have, as without it even time seems to be worthless.
Everything that matters requires our attention. In particular one would think
that it is in your employer's best interest if you are focused …</p><p>As I wrote in a <a class="reference external" href="/attention-not-time-is-the-most-valuable-resource.html">previous note</a>, attention seems to be the scarcest resource
an individual can have, as without it even time seems to be worthless.
Everything that matters requires our attention. In particular one would think
that it is in your employer's best interest if you are focused at work. But
then, sadly, getting ahead is about sales and not about smarts, and suddenly
your inbox starts filling up with useless meetings or you begin wasting your
time on reports that take up almost as much time as solving problems would, if
you had the time. Or you just had half an hour and immersed yourself in a
problem and somebody comes knocking on the door or worse, calls you on the
telephone.</p>
<p>To be fair, management has some excuse, as <a class="reference external" href="http://paulgraham.com/makersschedule.html">Paul Graham points out</a>, since
people in management roles have different jobs than people like programmers,
administrators and scientists, whose jobs need some serious thinking.</p>
<p>If you are on a payroll, then you have the option of not caring about it, as it
is not your money being burnt. Nice play asshole, why did you apply for that
job anyway? If you are working for yourself or care about the work being done,
things change. In this case, you must not allow compromise, as even the
possibility of distraction can divert your attention and hence ruin your
workday. So this is how I deal with distractions at work.</p>
<div class="section" id="instant-messengers">
<h2>Instant messengers</h2>
<p>Oh, everyone seems to hate them. With the notable exception of WhatsApp, what
seems to be some kind of mandatory nowadays, I access every message service I
use is accessed via <a class="reference external" href="http://www.bitlbee.org/">bitlbee</a> and <a class="reference external" href="http://irssi.org/">irssi</a> in a <a class="reference external" href="http://www.gnu.org/software/screen/">screen</a>. This way I have two
benefits: First, no notifications, anywhere, ever, unless I specifically choose
so and utilize the terminal bell on hilights. Second, I do not have to restart
all connections and communications from before, as I had to do with some
graphical messengers in the past.</p>
<p>And of course it runs in the terminal, so it does not interrupt my normal
text-driven workflow. In particular, it is quite easy to read, in contrast to
most smartphone messengers, which always take up so much space for a little bit
of text, that even reading a backlog of some hundred messages becomes an
hellishly arduous task. Scale matters, in particular in communication.</p>
<p>So I really like instant messages. They are asynchronous in general, but
still allow for synchronized communication, should the need arise.</p>
</div>
<div class="section" id="mail">
<h2>Mail</h2>
<p>Somehow half the internet seems to hate email. Inbox zero heroes spreading
their gospel how email is killing productivity. And having seen some inboxes
and just the sheer amount of email circulating in some companies, they probably
have a point. However I like email. Not in the sense of I like email like I
like steak. But I see and appreciate its merit. It just works.</p>
<p>For email I simply use <a class="reference external" href="http://www.mutt.org/">mutt</a>. Email is fetched via <a class="reference external" href="http://www.fetchmail.info/">fetchmail</a> and then
processed with, you guess it, <a class="reference external" href="http://www.procmail.org/">procmail</a>. Filtering is done based on a few
simple rules, for the standard stuff like mailing lists, bugtrackers,
monitoring software, scanners. A few rules for individual people. And then the
master rule, sorting HTML only mails straight to <em>junk</em>. I still watch the junk
folder, but it is just a really nice working posteriorization of unimportant
stuff. Sometimes I know something is going to land there, e.g. some automated
emails, but most of the time it is either spam or people too stupid to properly
use their or an email client. False positives are almost non existent.</p>
<p>So far for receiving email. As I said, I use mutt, simply because it allows me
to use vim for composing email and does not get into my way. Again I run it in
a screen, so there are no notifications to annoy me and I can resume my
busywork in the email client at any time at any point I want.</p>
</div>
<div class="section" id="mobile-phone">
<h2>Mobile phone</h2>
<p>This is the real scourge of productivity. Clearly there is some merit to phone
calls and sometimes it is just part of the job, say in system administration.
But then you better have some arrangement with your coadmins in place, to
protect some of your work time from phone calls. But most of the time, people
calling you are expecting you to do work, for free, for them. Or they are going
to tell you that they are late to an appointment, which is in a way again
stealing your time and work. If you see the number of some acquaintance
you have not seen in years flashing on your display, they either need some help
with math or with their computer. Every single time.</p>
<p>So, how do I deal with this terror? By being really anal about whose calls I
answer or even return, and whose not. So there are three groups of people:</p>
<ol class="arabic simple">
<li>These people can expect that I answer or at least return
their calls.</li>
<li>Probably I do not answer or return their calls, unless I have
specific reasons to expect something of value.</li>
<li>Straight to mailbox.</li>
</ol>
<p>Anybody starts out in category 1. But then people often make the classical
mistakes, only calling me about trivial stuff, or when writing an email would
make as much sense, or wanting me to do work for free. This lands you almost
always in category 2. And then there a people landing in category 3. These are
repeated offenders, i.e. they called me again and again and each time I
answered the call, it was just a waste of time and or they calling frequency or
timing is just too annoying.</p>
<p>But then there are of course exceptions. Some people near and dear to me will
probably always stay in category 1, although they sometime might just call
because they want to talk or something like that. And then there are paying
clients. Of course, I bill them for their calls or at least for the work
resulting from these, so hearing their voice is the buzzing sound of money. But
moreover I found out that people willing to pay for quality work are often also
more pleasant to be around than people wanting to mooch off of you. Who would
have expected that. And then there are phone based messaging protocols, which I
handle similar to calls or are simple entertainment without any notifications.</p>
</div>
<div class="section" id="office-phone-and-people-knocking">
<h2>Office phone and people knocking</h2>
<p>Closing the door and putting on headphones seems to do the trick most of the
time. Running away is also an option, as I seldom do work which requires
me to be at a certain point in space and time, but requires me to be in a quiet
place and state of mind. In the case that somebody actually gets a foot in the
door, one can sometimes at least make an appointment for some other time.
However this is not so much of a problem as it takes actual work on parts of
the other person, in contrast to just dialing a number. Luckily annoying people
often are also too lazy to come directly to your office. Here also being early
or late in office can give a few quiet hours for work to get done.</p>
</div>
<div class="section" id="logistics-availability-attention">
<h2>Logistics - availability = attention</h2>
<p>So it boils down to this: Having good logistics in place so that you get all
necessary information without being annoyed, and being as unavailable as
possible, allows you to reclaim at least some part of your attention.</p>
</div>
Not by force of habit2016-02-24T00:00:00+00:002016-02-24T00:00:00+00:00Marceltag:deaddy.net,2016-02-24:/not-by-force-of-habit.html<p>Today <a class="reference external" href="https://twitter.com/TheConstructor">@TheConstructor</a> mentioned that he'd happily switch to Linux if there
was an adoption of the MacOS window management and of course I could not resist
to disagree, as the window management of MacOS and Windows is one of the things
I hate most about those. In his reply he …</p><p>Today <a class="reference external" href="https://twitter.com/TheConstructor">@TheConstructor</a> mentioned that he'd happily switch to Linux if there
was an adoption of the MacOS window management and of course I could not resist
to disagree, as the window management of MacOS and Windows is one of the things
I hate most about those. In his reply he said that he thinks one grows
accustomed to something and there are advocates for any UI/UX decision.</p>
<p>While he is probably right about the latter part (sadly, looking at almost any
website laden with javascript shittery all over the place and most desktop
applications), I can not agree to the former statement. While there are clearly
individual differences, I often experienced, especially in software, feeling
that one of the options is vastly superior, at least for me. However, smaller
details then again boil down to habit or taste.</p>
<div class="section" id="window-management-tiled-vs-stacked">
<h2>Window management: Tiled vs. stacked</h2>
<p>Well, window management startet the two-tweet-discussion, so I will begin here.
While on Windows and OS X one can agree on the default window manager to be the
window manger, on Linux there is a whole zoo of window managers. However, the
most notable distinction is the underlying paradigm of the window managers: Are
windows thought as tiles, arranged next to each other by default, or as pieces
of paper, stacked on top of each other (in spirit of the desktop-metaphor)?
After using stacked window managers, from Windows 3.11 up to and including XP,
then followed by KDE and XFCE, I finally tried tiled window managers and was
<em>immediately</em> hooked. But even the switch from Windows to Linux, using KDE, was
an immediate improvement, as the virtual desktops make so much of a difference.</p>
<p>Indeed I did not keep my first tiled window manager for long, as I
I quickly abandoned <a class="reference external" href="http://wmii.suckless.org/">wmii</a> and found <a class="reference external" href="http://xmonad.org">xmonad</a> and even
after dabbling a bit with <a class="reference external" href="http://dwm.suckless.org/">dwm</a> and awesome, I returned to xmonad. However this
decision was more a matter of taste, in contrast to tiling, which does not get
in my way as much as stacked window managers.</p>
</div>
<div class="section" id="operating-system-linux-vs-windows">
<h2>Operating system: Linux vs. Windows</h2>
<p>This is quite similar: While I was a long term Windows user and quite familiar
with the system, it only needed a short test drive on Linux to convince me of
its superiority. In fact, I noticed that many habits I adopted from Windows
were just there to work around the system, whereas in Linux I could just drop
them and get on with my life and my work. For example writing a GUI to every
little program was just a necessary for the bad integration of text processing
in the OS.</p>
<p>Contrasting Linux to other unixoid operating systems, it is indeed a matter of
habit. Of course I probably would not use MacOS for its proprietary nature and
lack of trustworthy full disk encryption, but looking at the BSDs or Solaris
heritage, there is not much of an real advantage of Linux to those.</p>
<p>In choice of Linux distribution, there is a similar distinction. I was
immediately hooked on Gentoo and then quickly adopted to Funtoo, but the latter
decision was more a matter of taste, while using portage is just so much more
pleasing than pacman, aptitude or netpkg.</p>
</div>
<div class="section" id="sports-lifting-weights-vs-everything-else">
<h2>Sports: Lifting weights vs. everything else</h2>
<p>I never liked sports, in particular nothing involving a ball. Swimming was kind
of OK and bicycling is quite pleasant, was it is also my primary mode of
transportation. But aside from this, I never really enjoyed sports, although at
some point in my life I noticed that it was kind of a necessity, considering I
was sitting on my fat butt all day long.</p>
<p>However, the first time I stood under a bar and squatted, I got bit by the iron
bug. There was just no question that I will enjoy lifting weights, even though
the empty bar was not much of a weight back then. But the mechanics of lifting,
the simple geometry, it is just right. Not too much technique, but enough to
keep you engaged. One might also rationalize that it is the healthiest sport,
but who cares. Squatting is just so perfect.</p>
<p>Again, it is more a matter of habit and possibility that I mainly powerlift,
albeit I learned a bit of olympic lifting during my C trainer certification.
Strongman would also be nice, but in the end, I enjoy it all.</p>
</div>
<div class="section" id="editors-vim-vs-emacs">
<h2>Editors: Vim vs. Emacs</h2>
<p>Oh, the holy war. I often half-jokingly say, that I respect any editor choice,
as long it is vim or Emacs. But to be honest, if you've made another choice,
you failed as a person. Here it was kind of a two step process. When I tried
learning Emacs, the learning curve was quite steep, but I enjoyed it and
already saw no way back. Nope. Never, ever. But I never tried vim. Again I was
almost instantaneous convinced, although half my typing went somewhere, as I
always forgot to drop into edit mode. Yet still I can respect Emacs, for it is
a powerful editor and not just some text-input-thingy with marginal editing
support. However, vim is just more to my taste.</p>
</div>
<div class="section" id="some-things-are-much-better-suited-for-you">
<h2>Some things are much better suited for you</h2>
<p>So, after visiting these examples, I think that there are some things which are
simply better, maybe not in general, but at least for you as an individual.
Many habits simply exist to make suboptimal choices work. It is striking that
in each case the major preference reveals itself immediately, while minor
differences require some thought, decision and then are more about taste and
habit.</p>
</div>
Attention, not time, is the most valuable resource2016-02-22T00:00:00+00:002016-02-22T00:00:00+00:00Marceltag:deaddy.net,2016-02-22:/attention-not-time-is-the-most-valuable-resource.html<p>So while there seems to be an increasing awareness of the value of attention,
it is often only on the side of advertisers, selling our attention to
companies, in order to boost these companies revenues. And it is working quite
well. Obviously the advertising industry, lead by companies like Google …</p><p>So while there seems to be an increasing awareness of the value of attention,
it is often only on the side of advertisers, selling our attention to
companies, in order to boost these companies revenues. And it is working quite
well. Obviously the advertising industry, lead by companies like Google and
Apple, is in a bubble right now, but even before the over valuation of such
companies advertising was a huge and for everyone involved profitable industry.</p>
<p>Actually there are some people like <a class="reference external" href="http://calnewport.com/">Cal Newport</a> promoting the value of attention
and uninterrupted focus. On his blog he has many examples of revered thinkers,
who all made sure that they had uninterrupted blocks of time to pay attention
to the problems they were solving.</p>
<p>But it is not only in business and science that attention is more valuable than time. Say
you want to spend time with your favorite humans. If time was all that would count,
then sitting in front of the television would make quite a pleasurable experience.
However, obviously you just feel the same emptiness you did before, compounded
with hate and disgust for the insulting pettiness and purposeful misinformation.
No, you have to actually pay attention to the other person. Not just look in
direction of their faces, but actually look at their face. Shut up the voices
in your head and listen to what they are saying, instead of just smiling and
nodding along.</p>
<p>Getting back to business, this also applies. Few things are less professional
than to order people to meetings or worse, call them with the telephone machine
and then not listening to them. Not only are you wasting their time, maybe even
your worthless time, but also displaying the utmost disrespect. On the other
hand, often you can help people simply by listening to their problems. Actively
listening and asking questions, if something seems unclear.</p>
<p>I guess it is pretty obvious that attention is an important resource. So how
can one quantify and measure it? Time can be easily measured using arbitrary
fancy technology. Attention on the other hand, not so, at least on a practical
level you have to resort to introspection.</p>
unison segfaults when built with ocaml-42015-12-28T00:00:00+00:002015-12-28T00:00:00+00:00Marceltag:deaddy.net,2015-12-28:/unison-segfaults-when-built-with-ocaml-4.html<p><strong>Update 2018-09-24</strong> Apparently ocaml versions >=4.05.0 do not produce
segfaults anymore so this post is moot.</p>
<p>As I already <a class="reference external" href="/the-long-lost-art-of-automatic-file-synchronization-with-unison-via-ssh.html">explained</a> a long time ago, my favorite tool for file synchronization
is <a class="reference external" href="http://www.cis.upenn.edu/~bcpierce/unison/">unison</a>. However, every now and then when I do a system upgrade on my funtoo
machines, I …</p><p><strong>Update 2018-09-24</strong> Apparently ocaml versions >=4.05.0 do not produce
segfaults anymore so this post is moot.</p>
<p>As I already <a class="reference external" href="/the-long-lost-art-of-automatic-file-synchronization-with-unison-via-ssh.html">explained</a> a long time ago, my favorite tool for file synchronization
is <a class="reference external" href="http://www.cis.upenn.edu/~bcpierce/unison/">unison</a>. However, every now and then when I do a system upgrade on my funtoo
machines, I note that after that unison just segfaults when invoked. This seems
to be a for quite a long time, so I am always a bit confused when this happens.</p>
<p>However, on funtoo the cure is quite easy:</p>
<pre class="code literal-block">
emerge -av1 =dev-lang/ocaml-3.12.1 # or whatever is the latest ocaml-3
emerge -av unison
</pre>
<p>As far as I know no other package I use depends on <em>ocaml</em>, so I just leave it
there. Else I would run another update of <em>ocaml</em>. I also might add newer
versions to my <em>packages.mask</em>, however then I'd have to remember this if this
bug gets fixed or I need a higher version of ocaml-4 at some point in the
future. So this blog posts serves as a reminder for me, as I often search only
for recent bugreports when something breaks.</p>
<p>Also there seems to be an issue when one host has an ocaml-3 runtime, the other
one an ocaml-4 runtime, which seems to be unresolved, leading to</p>
<pre class="code literal-block">
Internal error: New archives are not identical.
Retaining original archives. Please run Unison again to bring them up to date.
</pre>
<p>Indeed the problem also seems to occur if unison is compiled with different
versions of ocaml-3, however, reproducing the steps above on all machines at
the same time seems to resolve the issue. Maybe I should look out for a better
supported fork of unison. Recommendations are welcome!</p>
Meat and potatoes or why IIFYM does not work for me2015-12-26T00:00:00+00:002015-12-26T00:00:00+00:00Marceltag:deaddy.net,2015-12-26:/meat-and-potatoes-or-why-iifym-does-not-work-for-me.html<p>Almost no food has the same down-to-earth ring as <em>meat and potatoes</em>, as not
even <em>steak and eggs</em> became synonymous with the basics and fundamentals of
things. Given that it has been a staple food in Germany and Central Europe for
at least a hundred years and many dishes in …</p><p>Almost no food has the same down-to-earth ring as <em>meat and potatoes</em>, as not
even <em>steak and eggs</em> became synonymous with the basics and fundamentals of
things. Given that it has been a staple food in Germany and Central Europe for
at least a hundred years and many dishes in our local cuisine are built around
meat and potatoes, there is also a bit of weird locally patriotic sense of
being connected to ones ancestry. So in short, sometimes I am guilty of eating
meat and potatoes not because of its taste or nutrient profile, but just
because it gives me the ice cold fuzzy feeling of being an efficient and proper
German, surpassed only in having forms stamped with numbered seal stamps.</p>
<div class="figure">
<a class="reference external image-reference" href="/images/meat-and-potatoes-large.jpg"><img alt="behold meat and potatoes" src="/images/meat-and-potatoes.jpg" /></a>
<p class="caption">I only wrote this article to have a use for this picture.</p>
</div>
<p>Having addressed a possible source for a placebo effect, I noticed that
whenever I regularly incorporate meat and potatoes in my diet, everything just
seems to be better, in particularly my progress in the gym. And when I say
incorporating meat and potatoes, I really only mean regularly adding potatoes
to my meals, as chicken is often the closest thing to a vegetarian meal I get
during the course of a week.</p>
<div class="section" id="it-is-not-about-the-carbs">
<h2>It is not about the carbs</h2>
<p>At first glance one might think that it is about more carbohydrates in my diet.
But my basic meal plan has already about 100g from milk and at least 50g coming
from different sources like nuts, dairy products and chocolate. Most of the
time even more, as I really enjoy nut butters with chocolate and milk in the
evening. So even if I only eat my pounds of meat and drink my milk and have
some midnight snack, I do not eat low carb.</p>
<div class="figure">
<a class="reference external image-reference" href="/images/meat-and-potatoes-fish.jpg"><img alt="fish and potatoes" src="/images/meat-and-fish.jpg" /></a>
<p class="caption">I heard some people regard fish as vegetarian, so, behold, a vegetarian meal.</p>
</div>
<p>But maybe more carbs are even better? Well, if that would be the case, other
sources for carboyhdrates would be equally good, right? Well, as everyone is
gluten intolerant these days, I do not even need to elaborate how pasta is the
intestinal incarnation of the devil. Bread and cake are hit and miss, as it
seems to depend on the flour and on the baking agents used, how well I can
stomach it. At least I can eat homemade cake in large quantities without
getting into trouble and it really helps my lifting efforts, but it is almost
impossible not to make any progress if you have a caloric surplus each day
which surpasses the average caloric intake of the fatass next door. So the
remaining contestants are pure sugar and sweet products like corn flakes,
fruits like bananas and the holy grail of bodybuilding nutrition, rice,
preferably with broccoli and chicken. Oh, and maybe oats. However, oats also
seem to be related to the gastrointestinal Beelzebub. I simply can not justify
eating corn flakes and other stuff for fat children every day, so this leaves
me with bananas and rice. But I do not like eating that much fruit, so all that
remains is rice.</p>
<p>As already mentioned, there is this weird connotation of rice being somewhat a
clean carb source and what not. Also it is cheap as fuck, easier to cook than
anything else (especially if one has a rice cooker) and can be combined with
almost anything. So I have to admit, on my German efficiency-equals-sexy-scale,
rice beats the living shit out of potatoes. But here is the catch: No matter
which kind of rice I eat, it does not yield the same improvements like eating
potatoes. In fact, rice makes me almost as tired and bloated as pasta and
several kinds of bread. So much for clean food.</p>
</div>
<div class="section" id="gut-biotope-and-iifym">
<h2>Gut biotope and IIFYM</h2>
<p>So, as I am equally enthusiastic about eating nothing but meat and milk,
eating potatoes, eating rice and eating cake, I think I can rule out the
placebo effect of eating certain kinds of food (I mean Arnold pounded away cake
after training, it should yield gains!). Also I can reproduce the effects not
only in isocaloric diets, but also keeping macros roughly the same. So why is
IIFYM - <em>if it fits your macros</em> - failing me? Is science flawed? Is it not
only calories in, calories out? Of course not.</p>
<p>However, most of the time people did not take one thing into consideration: Our
digestion. At least this is changing now and people with significant audiences
or some grey matter start to think and write about it. See, our digestion
relies on a massive amount of bacteria living inside us, practically making the
food rot inside us and we simply absorb some of the nutrients through our
intestinal wall. Quite disgusting. But as it turns out, the composition of
these bacteria is also very important - so important that some conditions are
being treated by transplanting stool from one human to another.</p>
<p>And here is exactly why IIFYM does not work for everyone and is almost always
not the most effective choice. Each food also nurses
some of the bacteria inside your gut. Fibre and vegetables seem to have an
undisputed positive effect on your microbial ecosystem. Simple starches and
sugars seem to feed the wrong type of bacteria, sometimes leading to problems,
sometimes not, as the makeup of your bacteria is quite unique. So on the one
hand we have negative effects by feeding the wrong foods. On the other hand,
feeding the right bacteria also improves the efficiency and effectiveness of
your digestion, possibly leading to improvements beyond what is expected from
the pure macro nutrient composition.</p>
</div>
<div class="section" id="going-bananas">
<h2>Going bananas</h2>
<p>As a conclusion I am going to try to move a part of my caloric intake to fruit.
Until recently I always saw it as somehow superfluous candy for people who do
not want to admit that they are eating essentially sugar, however maybe there
is something to fiber. At least it should add variety to my diet and that is
allegedly a good thing.</p>
</div>
How to perceive the value of money2015-12-12T00:00:00+00:002015-12-12T00:00:00+00:00Marceltag:deaddy.net,2015-12-12:/how-to-perceive-the-value-of-money.html<p>Money has an absolute value. If you hold a bill, there is a number printed on
it, which is determining its value. However, depending on the way you earn
money and your financial goals, its actual value for you changes and it becomes
all perception.</p>
<p>Say you work for an …</p><p>Money has an absolute value. If you hold a bill, there is a number printed on
it, which is determining its value. However, depending on the way you earn
money and your financial goals, its actual value for you changes and it becomes
all perception.</p>
<p>Say you work for an hourly wage. Then each Euro you spend corresponds to an
amount of time you have to work for it. When trying to save, you can always ask
yourself, whether the thing you want to buy is worth the amount of time you
need to earn that specific amount. This is a straightforward calculation. If
something gives you several hours of pleasure or utility but only costs a
fraction of the time working, it is a good deal, especially if you enjoy your
line of work. A good pen, computer or other things improving your quality of
life for a long time are almost always a good investment. That chocolate bar
for one Euro in the cafetaria probably not, unless you really need to cram in
some calories and it becomes a necessity.</p>
<p>However, this calculation changes if you already have decoupled parts of your
income from your time. The simplest way to achieve this is start investing. For
example, if you can build a portfolio which yields about 5% per year, a part of
your income becomes a function of your net worth. Assuming you are fully
invested, a Euro spent corresponds to a net loss of 20 Euro in that year, or
you might do some more complicated calculations and distribute this loss over
the years to come. However, probably you are not fully invested and have some
time dependent income. Then you might split the amount and some percentages
corresponds to time spend, some corresponds to a net loss. Or you are trying to
build capital, but leave 50% of your money in relatively secure saving
accounts, with interest rates barely beating the inflation. So then the
function is not 5%(net worth), but 2.5%(net worth), so a Euro spent corresponds
to a net loss of 40 Euros for that year.</p>
<p>Of course this does not cover all possibilites, but it shows that the value of
money to you is something quite arbitrary, resulting in different heuristics.
As it is arbitrary, you might as well choose a valuation model which supports
your personal and finance goals. As you probably want to save money, increase
your net worth and cut down on indulgences, you can make the perceived value of
some things quite large in this way. Its easy to rationalize spending one Euro
or something like five minutes of work on a chocolate bar, however, if you
think of it costing you 20 or even 40 Euro, you are much less likely to
indulge.</p>
<p>Also this does not only apply to money. How you value your time and certain
actions is also based on your own perception. Idling on the internet might
count as easy entertainment, or as a huge loss in time you could spend working
out, studying or with your loved ones.</p>
<p>There is a caveat though. You should not put a price tag on thinks you truly
love doing, as there seems to be a negative effect on your internal motivation,
as soon as regular external motivators come into play.</p>
On the paradigm difference between Texas Method and Heavy-Light-Medium2015-10-25T00:00:00+00:002015-10-25T00:00:00+00:00Marceltag:deaddy.net,2015-10-25:/on-the-paradigm-difference-between-texas-method-and-heavy-light-medium.html<p>A friend of mine lately tinkered a bit with his training and used HLM as a
guidance. However, it somehow looked and felt more like a Texas Method. He
shifted the days a bit because of his schedule and wondered, whether the
difference between the two is just the order …</p><p>A friend of mine lately tinkered a bit with his training and used HLM as a
guidance. However, it somehow looked and felt more like a Texas Method. He
shifted the days a bit because of his schedule and wondered, whether the
difference between the two is just the order of the days. Curious. I told him
that the difference is in the paradigm. When asked for a good source <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> on
this I could not help and so I decided to rectify this nuisance.</p>
<p>Let me first quickly introduce both training programs, for those who are not
familiar with one or the other. Both are interemediate programs and allow, at
least in the beginning, for a linear progression on a weekly basis.</p>
<div class="section" id="texas-method">
<h2>Texas Method</h2>
<p>This method is mostly popularized by Mark Rippetoe and Justin Lascek. If
you did Starting Strength and began to stall, the Texas Method was probably one
of the more logical options for you, if not the only one. A typical template
might look like this:</p>
<table border="1" class="docutils">
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Monday</th>
<th class="head">Wednesday</th>
<th class="head">Friday</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Squat 5×5= 90%5RM</td>
<td>Squat 3×5= 80% of Monday</td>
<td>Squat new 5RM</td>
</tr>
<tr><td>Bench 5×5= 90%5RM</td>
<td>Press 3×5=</td>
<td>Bench new 5RM</td>
</tr>
<tr><td>Maybe Power Cleans</td>
<td>Chinups, Back Extension</td>
<td>Deadlift new 5RM</td>
</tr>
</tbody>
</table>
<p>The equal sign(=) denotes sets across, i.e. using the same weight for all sets.</p>
<p>In the lingo of Rippetoe fanboys, Monday would be aptly named <em>Volume day</em>,
Wednesday would be the <em>Light day</em> and Friday is called <em>Intensity day</em>. Often
you would alternate each week between press and bench, using slightly lower
weights on Wednesday than the week before on monday.</p>
</div>
<div class="section" id="heavy-light-medium">
<h2>Heavy-Light-Medium</h2>
<p>This style of programming is gaining quite some popularity recently, most
notably due to Andy Baker. If you thought Texas Method has not much exercise
variety, well, you just did not see HLM. And you are probably either a
bodybuilder or skinny. Here is probably the classical template:</p>
<table border="1" class="docutils">
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Monday</th>
<th class="head">Wednesday</th>
<th class="head">Friday</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Squat 5×5↑</td>
<td>Squat 5×5↑ 80% of Monday's weight</td>
<td>Squat 5×5↑ 90% of Monday's weight</td>
</tr>
<tr><td>Bench 5×5↑</td>
<td>Bench 5×5↑ 80% of Monday's weight</td>
<td>Bench 5×5↑ 90% of Monday's weight</td>
</tr>
<tr><td>Power Clean 5×5↑</td>
<td>Power Clean 5×5↑ 80% of Monday's weight</td>
<td>Power Clean 5×5↑ 90% of Monday's weight</td>
</tr>
</tbody>
</table>
<p>The upwards pointing arrow(↑) denotes sets with ascending weight, i.e.
increasing the weight to one top set.</p>
<p>Here one would use simply name the days <em>heavy day</em>, <em>light day</em> or <em>medium
day</em> depending on the relative intensity.</p>
</div>
<div class="section" id="stress-and-recovery">
<h2>Stress and Recovery</h2>
<p>Basis of any training program is the principle of supercompensation: You apply
a training stress large enough to break homeostasis, but not so large as to
destroy your capability to recover. Your subsequents performance drops as you
need to recover, but after recovery, your performance should be a little bit
higher than before applying the training stress. At least that is what most
theories boil down to. Of course you can make this arbitrarily complex and you
have to account for structural damages to sinews and bands, of which you can
accumulate quite a bit, before a drop in performance becomes noticeable. In
most of the theories there is a superposition of stress-recovery
adaption cycles working on different time frames, accounting for the different
components involved in strength training (i.e. passive and active structures,
neuronal, hormonal and metabolic factors).</p>
<p>Both HLM and Texas Method operate on a weekly time frame: A
full stress-recovery cycle is completed over the course of one training week,
enabling one to use more weight each week. So if you want to run them as a
cookie cutter program, you have to be an early stage intermediate using weights
which can be realistically increased every week, but not every day. This also
implies that the damage to passive structures and the stress to your nervous
system is still controlled in the sense that it does not limit your weekly
progress. At least for the first six to twenty weeks. In particular this
justifies to only concentrate on the stress-recovery-cycle of the musculature,
ignoring other factors, when considering these training programs.</p>
<p>So how do the programs employ this and where is the difference?</p>
<div class="section" id="texas-method-1">
<h3>Texas Method</h3>
<img alt="stress adaption cycle in texas method" src="/images/stress-adaption-tm.jpg" style="width: 300px;" />
<p>The Texas Method is simple: Apply the training stress on Monday via the
grueling (at least for males) volume day and immediately start recovering, i.e.
sleeping and eating, in order to harness the supercompensation on Friday and
setting a new PR. Wednesday is just for recovery purposes and should alleviate
the soreness from Monday.</p>
<p>On the left you can see what a typical training week would look and feel like
on the Texas Method. This is just a qualitative description based on
experience, no meaningful data was used. However one sees that the volume day
is really the heaviest and hardest day in the week, at least if you are an
adult human male.</p>
</div>
<div class="section" id="hlm">
<h3>HLM</h3>
<img alt="stress adaption cycle in texas method" src="/images/stress-adaption-hlm.jpg" style="width: 300px;" />
<p>When running a Heavy-Light-Medium template, the nomenclature would lead one to
the believe that it is just a Texas Method with the days switched around and
named differently. Much of this is owed to the fact that both programs are
commonly labeled as "5×5", but actually one uses sets across, the other one
uses ascending sets of five. And here is actually a big difference, if not the
difference. The heavy day of HLM is more of an interpolation between intensity
day and volume day in the Texas Method, as one accumulates quite a bit of
volume on the way to the top set, which is consequently not as heavy as the top
set in the Texas Method (although it still should be a new 5RM).</p>
<p>On the other days you reduce the overall intensity and consequently the volume.</p>
<p>Again you see what a typical training week would look and feel like, again
based on personal experience. The highs are lower and the lows are higher than
in the Texas Method and you do not really see the supercompensation take
effect. However you can see that at the end of the training week your
performance approaches the peak before Monday. At the end of the week there is
quite a bit of variance. It is not as clear cut as the Texas Method, as the
training stress is not so pronounced. Instead, we have more training stresses,
but each one is able to produce a break in homeostasis.</p>
</div>
<div class="section" id="comparison">
<h3>Comparison</h3>
<p>Indeed, on HLM you trade one big training stress
against many smaller ones, as not to risk diminishing your recovering
ability. This is a huge plus for people with limited recovery, including older
trainees, people with sleep issues and anorexics, where in the context of Texas
Method, anorexia is defined as eating less than three grams of protein and 50kcal
per kg bodyweight.</p>
<p>On the other hand, Texas Method works incredibly well if you are young, male,
in a caloric surplus and sleep sufficiently. It is fascinating to really see
how the Monday <em>drives</em> the Friday, making one believe that this is the right
way to do programming.</p>
<p>However, on HLM, you simply accumulate stress over the course of a week in a
way that you recover from it. The variation in intensity is owed to the
advancement of the trainee, as he could not sustain the intensity required to
break homeostasis for a whole week, but indeed he applies multiple smaller
stresses, each able to break homeostasis. This seems to be a much more sensible
approach.</p>
<p>But is it?</p>
</div>
<div class="section" id="development-of-tm-and-hlm">
<h3>Development of TM and HLM</h3>
<p>Well, one of the main problems with these theories is that they were developed
ex post: Both Texas Method and Heavy-Light-Medium grew in the weight training
rooms of American football teams. Both required not much of equipment and
especially HLM was easy to implement on large groups of athletes, as everyone
could just take turns with the same weight. This has always be taken in
consideration when looking at cookie cutter programs: They are proven to work,
but only if you are close to a college football player.</p>
</div>
</div>
<div class="section" id="what-we-can-learn">
<h2>What we can learn</h2>
<p>Again, the basis of all training programs is the stress-recovery-cycle. You
always have to break homeostasis in order to provoke an adaption. Then you have
to give the body time and resources to actually adapt. Since both training
programs work on a suitable and comparable population, they solve this problem.
In particular both approaches work and it does not really matter, how we
accomplish the break in homeostasis and subsequent recovery. This can also be
seen when comparing how top powerlifters train. Some use absurd, almost
bodybuilder like volumes, others train each lift on it's own day and some
train daily with lower repetitions.</p>
<p>As everything works, the question is not, what is best, but what works best for
me? If you are constantly undereating and undersleeping, Texas Method might
teach you how to stop doing that. Or it might just run you into the ground
faster than you can say GOMAD. Indeed, if you are already a intermediate
trainee in a later stage, you probably won't be able to run one of these
programs out of the box. If you already did some volume heavy programs, the
volume day on the Texas method won't impress you. Or if you already quite
strong, the damage to passive structures of the volume or even intensity day
would be too high to recover from sufficiently.</p>
<p>On the other hand, if your 5RM is very far from your 1RM, it is
improbable that you can move a weight for five reps, which is heavy enough to
drive adaption in only one top set. Here TM might just do the trick, or you
have to do some of the sets in HLM as sets across, as to reap more volume with
higher percentages.</p>
<p>Indeed, most more advanced templates of HLM or TM just do this: They
incorporate more and more features from the other one, and also some sort of
periodization. But when it comes to this, you should try do develop a feeling
for what works for you, instead of just copying down training programs.</p>
<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>While both are featured in
Practical Programming for Strength Training and Rippetoe describes how in
Texas Method the Volume day "drives" the Intensity day, it was not very
explicit on HLM.</td></tr>
</tbody>
</table>
</div>
Tabbing in vim2012-07-20T00:00:00+00:002012-07-20T00:00:00+00:00Marceltag:deaddy.net,2012-07-20:/tabbing-in-vim.html<p>vim is one of the tools one can use for years and still discover new features
or better ways to accomplish something. One of these features are tabs, which I
didn't know exist until today. Although splitting windows is fine for most
tasks, sometimes I wish to edit multiple files …</p><p>vim is one of the tools one can use for years and still discover new features
or better ways to accomplish something. One of these features are tabs, which I
didn't know exist until today. Although splitting windows is fine for most
tasks, sometimes I wish to edit multiple files in short succession, like some
configuration files. In this case, just using <tt class="docutils literal">vim file1 file2 ... filen</tt> does
not work as expected, since after one is finished with the first file and tries
to close it wit <tt class="docutils literal">:x</tt> or <tt class="docutils literal">:wq</tt>, vim shows up an error
<tt class="docutils literal">E173: <span class="pre">n-1</span> more files to edit</tt>
and when hitting <tt class="docutils literal">:x</tt> again, it just closes all remaining files. Of
course one could use use <tt class="docutils literal">:bn</tt> or similar to navigate to the next file,
however, I wish for a way that leaves vim open and only closes the currently
displayed file.</p>
<p>The solution to this problem is <tt class="docutils literal">vim <span class="pre">-p</span> file1 file2 ... filen</tt>, which opens up
all files and when closing the first file, vim stays open and displays the next
file. I noticed that vim displays the remaining filenames at the top of the
screen, much like tabs in a browser and as it turns out, these are indeed tabs.
One can navigate to the next tab with <tt class="docutils literal">gt</tt> and to the previous tab with <tt class="docutils literal">gT</tt>,
and even jump to a specific tab by prefixing <tt class="docutils literal">gt</tt> with a number, where the
leftmost tab corresponds to the number 1, the one right next to it to 2, et
cetera. vim shows only a limited number of tabs, this value can
however be modified by setting <tt class="docutils literal">tabpagemax</tt> to a higher value in one's
<tt class="docutils literal">.vimrc</tt>; this doesn't seem to be applied unless vim is restarted, though.
Also we can force vim to show the tab bar at all times by setting
<tt class="docutils literal">showtabline=2</tt> or disable it regardless of whether tabs are open or not by
<tt class="docutils literal">showtabline=0</tt>. Furthermore, one can open new tabs via <tt class="docutils literal">:tabnew [file]</tt>
respective <tt class="docutils literal">:tabf[ind] file</tt>. What's especially great is that one can still use
horizontal and vertical splits individually in each tab.</p>
<p>Although I'm using vim for years now, I'm always in a way surprised how feature
rich this seemingly simple text editor is and I have yet to encounter an
editing problem which vim can't solve in a satisfying manner. The help pages
would probably be an interesting lecture, but once one can beat most tasks to
death fairly efficiently with the features one already knows and only seldom
stumbles upon some problems, it should be an acceptable loss if one doesn't
read it entirely.</p>
LaTeX todonotes2012-05-29T00:00:00+00:002012-05-29T00:00:00+00:00Marceltag:deaddy.net,2012-05-29:/latex-todonotes.html<p>Currently I'm writing my bachelor thesis in mathematics and for noting what I
still have to do or mark some difficulties, I used to add comments to the
<tt class="docutils literal">.tex</tt>-code. However, when printing the file or viewing the compiled output,
these obviously won't be displayed. Gladly a quick search for …</p><p>Currently I'm writing my bachelor thesis in mathematics and for noting what I
still have to do or mark some difficulties, I used to add comments to the
<tt class="docutils literal">.tex</tt>-code. However, when printing the file or viewing the compiled output,
these obviously won't be displayed. Gladly a quick search for <tt class="docutils literal">latex todo</tt>
yielded
<a class="reference external" href="http://www.ctan.org/tex-archive/macros/latex/contrib/todonotes/">todonotes</a>,
a simple to use package which puts todo notes to the margin of the document.</p>
<p>The usage is quite simple; if it's installed, just add <tt class="docutils literal">\usepackage{todonotes}</tt>
to your preamble and you can simply put in todo notes by usage of
<tt class="docutils literal">\todo{Something I have to do}</tt>, and then they magically appear at this
position on the margin of your page. At the moment I only need two different
kinds of todo notes, so I added the following lines:</p>
<pre class="code literal-block">
\usepackage{todonotes}
\setlength{\marginparwidth}{3cm} % make todonotes appear wider
\reversemarginpar % make todonotes appear on the left
\newcommand{\tproof}[1]{\todo[color=blue!80!green!20,noline]{#1}}
\newcommand{\tdo}[1]{\todo[color=blue!20!green!20,noline]{#1}}
</pre>
<p>As you can see, I modified the width of the todo notes, since they were a bit
too small for longer words, and I set them to appear on the left instead of the
right. Finally I created two new commands, <tt class="docutils literal">\tproof</tt> and <tt class="docutils literal">\tdo</tt>, one for things
I have to proof and one for general thoughts. Here is an example of the usage:</p>
<pre class="code literal-block">
\begin{proof}
\tdo{Find out which cases Daniel means}
The difference in length between any two locally-injective paths with common
endpoints at vertices of $X$ is an integer. According to
\cref{no closed loops},
$X$ contains no closed loops which are $k$-local geodesics for $k = 8\delta
+ \frac{1}{2}$. Choose a non-geodesic subarc $c|_{[s_0,t_0]}$ of $c$ that
has length less than $8\delta+\frac{1}{2}$ and choose a geodesic connecting
$c(s_0)$ to $c(t_0)$; define $c(s),c(t)$ to be the first and last vertices
of $X$ through which this geodesic passes.
\tproof{Inequalities}
\end{proof}
</pre>
<p>And the resulting output:</p>
<img alt="output of the above code" src="/images/todonotes.png" style="width: 760px;" />
<p>I recommend to read the comprehensive
<a class="reference external" href="http://mirrors.ctan.org/macros/latex/contrib/todonotes/todonotes.pdf">documentation of todonotes</a>
since the package has some other nice features, like adding the option to
insert placeholders for figures or only showing the todo notes when in draft
mode.</p>
Installing Surfer on Funtoo2012-04-28T00:00:00+00:002012-04-28T00:00:00+00:00Marceltag:deaddy.net,2012-04-28:/installing-surfer-on-funtoo.html<p><a class="reference external" href="http://www.imaginary-exhibition.com/surfer.php">Surfer</a> is a program for
visualizing algebraic surfaces. Since I need it for my algebraic geometry
class, I wanted it to compile and install on my funtoo machines, however the
usual <tt class="docutils literal">configure</tt>, <tt class="docutils literal">make</tt>, <tt class="docutils literal">make install</tt> procedure failed and I needed two
additional steps to make it work. Here is how …</p><p><a class="reference external" href="http://www.imaginary-exhibition.com/surfer.php">Surfer</a> is a program for
visualizing algebraic surfaces. Since I need it for my algebraic geometry
class, I wanted it to compile and install on my funtoo machines, however the
usual <tt class="docutils literal">configure</tt>, <tt class="docutils literal">make</tt>, <tt class="docutils literal">make install</tt> procedure failed and I needed two
additional steps to make it work. Here is how I installed it locally, with the
sources in <tt class="docutils literal">/usr/local/src</tt> and the binaries installed to <tt class="docutils literal">/usr/local/bin</tt>.</p>
<p>First we need to fetch the sources:</p>
<pre class="code literal-block">
cd /usr/local/src # if it doesn't exist, create it
wget http://data.imaginary2008.de/software/surfer/surfer.tar.bz2
mkdir surfer
cd surfer
tar -xf ../surfer.tar.bz2
</pre>
<p>Next we first need to install <tt class="docutils literal">surf</tt>, which is a project on which surfer is
based. Luckily the sources come with surfer, so we just need to extract them
and install them:</p>
<pre class="code literal-block">
tar -xf surf-for-surfer.tar.gz
cd surf
sh configure --disable-gui
make && make install
cd ..
</pre>
<p>Now comes the part where I needed to add some tweaks. First we run
<tt class="docutils literal">./configure</tt> as usual, however when you try to run make you will get the
following:</p>
<pre class="code literal-block">
cd . && /bin/sh /usr/local/src/surfer/missing --run automake-1.10 --gnu Makefile
aclocal.m4:16: warning: this file was generated for autoconf 2.61.
You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.
configure.in:6: version mismatch. This is Automake 1.10.3,
configure.in:6: but the definition used by this AM_INIT_AUTOMAKE
configure.in:6: comes from Automake 1.10.1. You should recreate
configure.in:6: aclocal.m4 with aclocal and run automake again.
Makefile.am:6: `pg_DATA' is used but `pgdir' is undefined
make: *** [Makefile.in] Error 1
</pre>
<p>To fix the first issue, just type <tt class="docutils literal">aclocal</tt> and you're good to go. However,
the second issue needs a small addition to <tt class="docutils literal">Makefile.am</tt>: just before the line
that says <tt class="docutils literal">pg_DATA = gallery.tar</tt> add <tt class="docutils literal">pgdir = $(pkgdatadir)</tt>. Now we can run
<tt class="docutils literal">make && make install</tt> as usual.</p>
<p>Finally we can invoke the program via <tt class="docutils literal">surfer</tt> and enjoy some algebraic
surfaces, for example this beautiful smooth algebraic set for the polynomial
<tt class="docutils literal"><span class="pre">x^2-yz+xz-x</span></tt>.</p>
<img alt="A smooth algebraic set rendered with Surfer." src="/images/surfer-surface.png" />
Bridging and firewalling KVM guests on debian with shorewall2011-12-27T00:00:00+00:002011-12-27T00:00:00+00:00Marceltag:deaddy.net,2011-12-27:/bridging-and-firewalling-kvm-guests-on-debian-with-shorewall.html<p>This post is mainly for documentation purposes, since this is a task one does
not have to do on a daily basis and it always takes some time to get back into
the matter. The scenario is a debian kvm host, running libvirt for kvm virtual
machines and shorewall for …</p><p>This post is mainly for documentation purposes, since this is a task one does
not have to do on a daily basis and it always takes some time to get back into
the matter. The scenario is a debian kvm host, running libvirt for kvm virtual
machines and shorewall for firewalling. The ip address of the guest shall be
<tt class="docutils literal">192.0.43.10</tt>.</p>
<p>First we want to configure the network interface <tt class="docutils literal">eth0</tt> as bridge, which we'll
call <tt class="docutils literal">vmbr0</tt>. For this we edit the <tt class="docutils literal">/etc/network/interfaces</tt> so it contains the
following:</p>
<pre class="code literal-block">
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
up route add -host 192.0.43.10 dev vmbr0
down route del -host 192.0.43.10 dev vmbr0
</pre>
<p>Now we can assign our virtual machine the device vmbr0 as bridge, for example
via <tt class="docutils literal"><source <span class="pre">bridge='vmbr0'/></span></tt> in the respective xml-file in
<tt class="docutils literal">/etc/libvirt/qemu/</tt> or via <tt class="docutils literal"><span class="pre">virt-manager</span></tt>. Next we need to configure
shorewall; for this we copy an example from
<tt class="docutils literal">/usr/share/doc/shorewall/examples/</tt> into <tt class="docutils literal">/etc/shorewall/</tt> and change every
entry from <tt class="docutils literal">eth0</tt> to <tt class="docutils literal">vmbr0</tt>, so <tt class="docutils literal">vmbr0</tt> is associated with the zone <tt class="docutils literal">net</tt>. Now
we can edit the <tt class="docutils literal">rules</tt> file to something like this:</p>
<pre class="code literal-block">
# the virtual machine shall have unrestricted access
ACCEPT net:192.0.43.10 net
# sshing and pinging shall be allowed from everywhere
SSH(ACCEPT) net net:192.0.43.10
Ping(ACCEPT) net net:192.0.43.10
# we want http to only be accessible from our /16 subnet
ACCEPT net:192.0.0.0/16 net:192.0.43.10 tcp 80
ACCEPT net:192.0.0.0/16 net:192.0.43.10 tcp 443
# reject everything that's not explicitly allowed
REJECT net net:192.0.43.10
</pre>
<p>And this was all. Not very hard to do, but if you don't add guests very often,
it's easy to forget how to setup a bridge in debian or in which order shorewall
matches the rules, namely going through them in order and apply one as soon as
it matches.</p>
Beginning Haskell the practical way part two: File I/O2011-09-30T00:00:00+00:002011-09-30T00:00:00+00:00Marceltag:deaddy.net,2011-09-30:/beginning-haskell-the-practical-way-part-two-file-io.html<p>In my last post about Haskell I showed how you can interact with the user via
<a class="reference external" href="beginning-haskell-the-practical-way.html">command line arguments</a>
without the need for complicated libraries, so you can quickly start hacking
and explore the language. In this post I want to cover file interaction, which
is, since on <em>UNIX</em>-like …</p><p>In my last post about Haskell I showed how you can interact with the user via
<a class="reference external" href="beginning-haskell-the-practical-way.html">command line arguments</a>
without the need for complicated libraries, so you can quickly start hacking
and explore the language. In this post I want to cover file interaction, which
is, since on <em>UNIX</em>-like systems everything is a file, probably enough for all
tasks you'll want to accomplish, although there might be some better libraries
for networking or databases.
As mentioned in my previous post, Haskell uses a concept called <em>monads</em> to
encapsulate functions, that might crash due to I/O or other side effects.
Furthermore Haskell is a <em>lazy</em> language, so it only evaluates statements that
it really needs; these properties make I/O a bit unintuitive at first, but in
the end it allows you to produce powerful and expressive code. As a rule of
thumb, if your data is not needed for some kind of output, it won't be loaded
and code
affecting it won't be executed; this is because the main function is
an <tt class="docutils literal">IO monad</tt> itself.</p>
<div class="section" id="reading-files">
<h2>Reading files</h2>
<p>First we'll need to <tt class="docutils literal">import System.IO</tt>, which holds the functions for file
interaction we'll use. The probably most basic function is <tt class="docutils literal">openFile</tt>, which
takes a filename as first argument, and <tt class="docutils literal">ReadMode</tt>, <tt class="docutils literal">WriteMode</tt> or <tt class="docutils literal">AppendMode</tt>
as second argument. To demonstrate it's use, we'll write a program similar to
<tt class="docutils literal">cat</tt>, which simply outputs a specified file to <tt class="docutils literal">stdout</tt>:</p>
<pre class="code literal-block">
import System.Environment (getArgs)
import System.IO
cat :: String -> IO ()
cat s = do
file <- openFile s ReadMode
fileData <- hGetContents file
putStr fileData
hClose file
main = do
args <- getArgs
case args of
x:_ -> cat x
_ -> putStrLn "Please specify a file name"
</pre>
<p>If you've read my <a class="reference external" href="beginning-haskell-the-practical-way.html">last post</a> the main
function won't be a problem for you; the cat function is also pretty basic: it
has the type <tt class="docutils literal">cat :: String <span class="pre">-></span> IO ()</tt>, so even without further information
about what it exactly does, we know that it takes a string, and at the end it
will perform an IO-action. In it's first line we acquire a file handle for the
file we want to output, which we assign with the <tt class="docutils literal"><-</tt>-operator to the
variable <tt class="docutils literal">file</tt>. After that we use the same operator to read the file into a
variable via <tt class="docutils literal">hGetcontents</tt> which takes a handle as parameter, print the data
to <tt class="docutils literal">stdin</tt> viea <tt class="docutils literal">putStr fileData</tt> and finally close the file handle with
<tt class="docutils literal">hClose file</tt>. However, we can
improve our program by using <tt class="docutils literal">fileData <- readFile s</tt>, which frees us from
opening and closing the file handle manually.</p>
</div>
<div class="section" id="writing-files">
<h2>Writing files</h2>
<p>Similary we can write a simple copy program; here we also make use of
<tt class="docutils literal">writeFile</tt>, instead of opening a file in <tt class="docutils literal">WriteMode</tt>, and putting the contents
into it with <tt class="docutils literal">hPutStr</tt>:</p>
<pre class="code literal-block">
import System.Environment (getArgs)
import System.IO
cp :: String -> String -> IO ()
cp inFile outFile = do
fileData <- readFile inFile
writeFile outFile fileData
main = do
args <- getArgs
case args of
inFile:outFile:_ -> cp inFile outFile
_ -> putStrLn "Please specify an input and an output file name"
</pre>
<p>Note that this won't work on binary files, but most of the time one's dealing
with text files anyway, so I just refer you to the
"<a class="reference external" href="http://www.haskell.org/haskellwiki/DealingWithBinaryData">http://www.haskell.org/haskellwiki/DealingWithBinaryData</a>":"haskell wiki".
The last pretty common IO operation one might want to use is the function
<tt class="docutils literal">interact</tt>. If you check its type in the interactive Haskell shell, you'll note
that it's <tt class="docutils literal">interact :: (String <span class="pre">-></span> String) <span class="pre">-></span> IO ()</tt>; so interact takes a
function <tt class="docutils literal">f :: String <span class="pre">-></span> String</tt> and results in an IO action, namely reading
from <tt class="docutils literal">stdin</tt>, applying <tt class="docutils literal">f</tt> and writing the result of <tt class="docutils literal">f</tt> to <tt class="docutils literal">stdout</tt>. However,
I don't see that much application for this function and would mostly use it to
pipe files into <tt class="docutils literal">stdin</tt> and pipe <tt class="docutils literal">stdout</tt> to other files, so <tt class="docutils literal">readFile</tt> and
<tt class="docutils literal">writeFile</tt> suffice.</p>
</div>
<div class="section" id="processing-the-input">
<h2>Processing the input</h2>
<p>Unless you just want to capture some data, you'll need to process your input.
If you're familiar with other programming languages this might be a bit
counter-intuitive, but I believe that you'll find it much more natural in the
end. The scenario I found myself confronted with most frequently is line based
input, like reading a configuration file with one entry per line, CSV or
similar. This can be done quite easily with Haskell's <tt class="docutils literal">lines</tt> and <tt class="docutils literal">unlines</tt>
functions; the first transforms a string into a list of strings corresponding
to the lines, the latter a list of strings into a new string, where each input
string is on its own line. Let's write a simple <tt class="docutils literal">grep</tt>-program to demonstrate
this:</p>
<pre class="code literal-block">
import System.Environment (getArgs)
import System.IO
import Data.List
grep :: String -> String -> IO ()
grep pattern file = do
fileData <- readFile file
putStr $ unlines $ filter (isInfixOf pattern) $ lines fileData
grepStdin :: String -> IO ()
grepStdin pattern = interact (unlines . filter (isInfixOf pattern) . lines)
main = do
args <- getArgs
case args of
pattern : file : _ -> grep pattern file
pattern : _ -> grepStdin pattern
_ -> putStrLn "Please specify a pattern and a file name"
</pre>
<p>So this program simply splits the read data into lines, applies a filter which
checks if our supplied <tt class="docutils literal">pattern</tt> (which is more accurately just a substring) is
in the list element, puts the filtered lines back together and prints them.
Also you see the usage of <tt class="docutils literal">interact</tt>; we construct a function <tt class="docutils literal">String <span class="pre">-></span>
String</tt> just by composing the functions <tt class="docutils literal">lines</tt>, <tt class="docutils literal">filter</tt> and <tt class="docutils literal">unlines</tt>, which
gives us a pretty concise and clear way to implement this function. Moreover
are we now able to read and write files and interact with users, and can write
the first useful Haskell programs, like simple administration scripts, so
learning it will become much more natural.</p>
</div>
Beginning Haskell the practical way2011-09-01T00:00:00+00:002011-09-01T00:00:00+00:00Marceltag:deaddy.net,2011-09-01:/beginning-haskell-the-practical-way.html<p>I found many useful tutorials for Haskell which do a great job explaining the
language details and the mathematical nature of it, however, almost none gets
you hacking in a few moments so you can experience Haskells power in the real
world. But since using a new language is at …</p><p>I found many useful tutorials for Haskell which do a great job explaining the
language details and the mathematical nature of it, however, almost none gets
you hacking in a few moments so you can experience Haskells power in the real
world. But since using a new language is at least in the beginning the probably
fastest way to learn it, this doesn't seem to really help a beginner, so I want
to share my experiences with Haskell, so you can start right away writing your
first simple tools.</p>
<p>Let's start right from the beginning: how to run your Haskell programms. Make
sure you have the <em>Glasgow Haskell Compiler</em> installed and your <tt class="docutils literal">$PATH</tt> is
correctly set. First write the obligatory hello world program, so fire up your
editor and create a File called HelloWorld.hs:</p>
<pre class="code literal-block">
main = do
putStrLn "Hello, world"
</pre>
<p>Haskell can be run either interpreted or compiled. So try first running hello
world as a script: <tt class="docutils literal">runghc HelloWorld.hs</tt>. It should print "Hello,
world" to your terminal and exit. However, for larger programs it might be
convenient to compile it, so to compile a simple program just type in <tt class="docutils literal">ghc
HelloWorld.hs <span class="pre">-o</span> HelloWorld</tt>. A few seconds after that there should be an
executable named "HelloWorld" in your directory, which also prints
the famous hello world string when executed. Haskell supports putting a shebang
in your source code, so if you start HelloWorld.hs with the line
<tt class="docutils literal"><span class="pre">#!/usr/bin/runghc</span></tt> (or similar if your path differs) and you allow
execution of the source file, you can run it via <tt class="docutils literal">./HelloWorld.hs</tt> like you
normally would with Python- or Bash-scripts. In addition to run programs,
Haskell provides just like python or ruby an interactive shell, invocable via
<tt class="docutils literal">ghci</tt>; this can be handy at some times, especially the <tt class="docutils literal">:type</tt> command: it
shows you the type of an object or function, so if your compiler mumbles
something about inferred and expected types, you should <tt class="docutils literal">:type</tt> the functions
troubling you. Let's take a brief look at it and inspect our <tt class="docutils literal">HelloWorld.hs</tt> in
a <tt class="docutils literal">ghci</tt>-session</p>
<pre class="code literal-block">
Prelude> :type putStrLn
putStrLn :: String -> IO ()
Prelude> :type "Hello, world"
"Hello, world" :: [Char]
</pre>
<p>Quite harmless, hu? <tt class="docutils literal">putStrLn</tt> has the type <tt class="docutils literal">String <span class="pre">-></span> IO ()</tt>, which basically
means, it takes a <tt class="docutils literal">String</tt> as argument and "returns" an <tt class="docutils literal">IO
()</tt>-action. Here lies some of the beauty of the language, because it strictly
differentiates between so called <em>pure</em> and <em>impure</em> functions: <em>pure</em>
functions never have side effects, so you can easily prove their correctness
(and Haskell can optimize the shit out of them), while <em>impure</em> functions are
the places where you make your hands dirty, interact with the environment and
where everything can blow up. Haskell encapsulates these <em>impure</em> actions in a
construct called <em>monads</em>, so if you want to learn more about them, there are
great explainations online, I can especially recommend <a class="reference external" href="http://book.realworldhaskell.org/">Real World Haskell</a>. But we just want to get some basic scripts working at the moment.</p>
<p>So, while most tutorials focus on explaining the language and take a long while
until you finally reach the place where you can interact with your program,
I'll show you how to simply interact with your system and explain the language
along the way. One of the most basic ways to interact are program arguments, so
let's write a program that <tt class="docutils literal">PrintArguments.hs</tt> prints the supplied arguments:</p>
<pre class="code literal-block">
import System.Environment (getArgs)
main = do
args <- getArgs
print args
</pre>
<p>If you invoke this program without supplying arguments, you'd maybe expect it
to print out the programs name; however in contrast to most programming
languages, <tt class="docutils literal">getArgs</tt> only gives you the arguments, not the program name. If you
invoke it with some arguments, you'll see a list of those arguments. Let's
check if it really is a list in <tt class="docutils literal">ghci</tt>:</p>
<pre class="code literal-block">
Prelude> import System.Environment
Prelude System.Environment> args <- getArgs
Prelude System.Environment> :type args
args :: [String]
</pre>
<p>So it really gives you a list of <tt class="docutils literal">String</tt>. You might have tried
<tt class="docutils literal">import System.Environment (getArgs)</tt> in <tt class="docutils literal">ghci</tt>, but this gives an error; this
feature is only available in scripts or programs, to reduce the code
you load
on the import. Now we want to print this string without the help of <tt class="docutils literal">print</tt>,
which uses the <tt class="docutils literal">show</tt> function for the object to get it's string
representation. <tt class="docutils literal">args</tt> holds a list of the arguments, so we need to make a
string from it, similar to <tt class="docutils literal">' '.join(list_of_strings)</tt> in python. One could
loop over the list and print each argument, but we want to concatenate these
to one line. For this we use the <tt class="docutils literal">intercalate</tt> function provided by the
<tt class="docutils literal">Data.List</tt> module, which holds lots of useful functions and name the program
Echo.hs, since it works almost like the <tt class="docutils literal">echo</tt> command on your shell:</p>
<pre class="code literal-block">
import System.Environment (getArgs)
import Data.List
main = do
args <- getArgs
putStrLn $ intercalate " " args
</pre>
<p>So running <tt class="docutils literal">runghc Echo.hs arg1 arg2 arg3</tt> will print <tt class="docutils literal">arg1 arg2 arg3</tt> on your
command line, just as expected. You might wonder about the <tt class="docutils literal">$</tt>-sign: this is
just some really nice syntactical sugar to reduce the number of parentheses,
because it wraps everything that follows on the line into parentheses. In this
case <tt class="docutils literal">putStrLn $ intercalate " " args</tt> is equivalent to
<tt class="docutils literal">putStrLn (intercalate " " args)</tt>. We can now read arguments from the
command line, and to process them we could use any other function instead of
putStrLn that takes a list of strings or, after the use of <tt class="docutils literal">intercalate</tt>, a
single string. But if we want to supply numerical arguments, things get much
more complicated. For illustration, let us write a program <tt class="docutils literal">Add.hs</tt> that takes
a list of numbers and adds them up. Here we need to use the <tt class="docutils literal">readFloat</tt>
function from the <tt class="docutils literal">Numeric</tt> module, so let's first try it on the <tt class="docutils literal">ghci</tt>:</p>
<pre class="code literal-block">
Prelude> import Numeric
Prelude Numeric> :type readFloat
readFloat :: (RealFrac a) => String -> [(a, String)]
Prelude Numeric> --the type signature doesn't look helpful, let's just try it:
Prelude Numeric> readFloat "3.141592653"
[(3.141592653,"")]
Prelude Numeric> readFloat "3.141592653 2.99 13"
[(3.141592653," 2.99 13")]
Prelude Numeric> readFloat "3.141 not numbers"
[(3.141," not numbers")]
Prelude Numeric> readFloat "not a number"
[]
</pre>
<p>What <tt class="docutils literal">readFloat</tt> does is this: it takes a string and returns a list, which is
empty, if the string does not begin with a number, or contains a tuple
consisting of the first number and the rest of the string. We can now either
join our arguments as above and try to write a recursive function using
<tt class="docutils literal">readFloat</tt>, or we write a function that parses one number and <tt class="docutils literal">map</tt> on our
argument list. In our program it makes sense to assume that an argument, which
is not a number won't be added up, so we assume its value is zero. First we
define the function to convert a string to a number in our <tt class="docutils literal">Add.hs</tt>.</p>
<pre class="code literal-block">
import System.Environment (getArgs)
import Numeric
argumentToFloat :: String -> Float
argumentToFloat = extractFromTuple . readFloat
where
extractFromTuple [] = 0
extractFromTuple x = fst $ head x
main = do
args <- getArgs
putStrLn $ show $ sum $ map argumentToFloat args
</pre>
<p>Here we first defined the type of <tt class="docutils literal">argumentToFloat</tt>: it should take a string
and return a float, no matter what. For the definition we use the <tt class="docutils literal">.</tt> operator,
which is the same as composition in mathematics and is similar to <tt class="docutils literal">$</tt>, only
that in this case we don't provide an argument. Because <tt class="docutils literal">readFloat</tt> returns
such a strange list of tuple or an empty list, we use a function
<tt class="docutils literal">extractFromTuple</tt>, which doesn't exist yet. But to keep the code
concise,
Haskell allows us to define local functions and variables with the <tt class="docutils literal">where</tt>
keywords. There we use something that's called <tt class="docutils literal">pattern matching</tt> in Haskell,
which is similar to function overloading in other languages, but much more
powerful. We first define <tt class="docutils literal">extractFromTuple [] = 0</tt>, which says if the function
is invoked with an empty list, it should return 0, since it makes sense in this
context. However, if the list is not empty, <tt class="docutils literal">extractFromTuple x</tt> should first
take the <tt class="docutils literal">head</tt> of the list <tt class="docutils literal">x</tt>, then extract the first element from the tuple;
thus we use <tt class="docutils literal">fst $ head x</tt> for it's definition.
Our main function is pretty concise: we <tt class="docutils literal">map</tt> our newly defined function over
the argument list, use the built-in function <tt class="docutils literal">sum</tt> to add up all numbers,
convert the result to its string representation via <tt class="docutils literal">show</tt> and then print it
via <tt class="docutils literal">putStrLn</tt>.</p>
<p>But how can we react in a more sophisticated way, if a supplied argument is not
a number? One of Haskell's several ways to do this is the <tt class="docutils literal">Maybe</tt>-monad:
remember that monads are where we encapsulate things that can blow up. Let's
write a program <tt class="docutils literal">PowerOfTwo.hs</tt>, that prints the power of two of a supplied
arguuent if it's a number or an error message.</p>
<pre class="code literal-block">
import System.Environment (getArgs)
import Numeric
import System.IO
import Control.Monad
safeReadFloat :: String -> Maybe Float
safeReadFloat = safeExtract . readFloat
where
safeExtract :: [(Float, String)] -> Maybe Float
safeExtract list =
case list of
[(x,"")] -> Just x
_ -> Nothing
printPowerOfTwo :: Maybe Float -> IO ()
printPowerOfTwo x =
case x of
Just val -> putStrLn $ show $ val*val
Nothing -> hPutStrLn stderr "You have to supply exactly one numerical argument"
main = do
args <- getArgs
case args of
[x] -> printPowerOfTwo $ safeReadFloat x
_ -> hPutStrLn stderr "You have to supply exactly one argument"
</pre>
<p>Here we use Haskells powerful pattern matching again several times with the
<tt class="docutils literal">case</tt> keyword, which is similar to switch case constructs in other languages.
We import <tt class="docutils literal">System.IO</tt> for <tt class="docutils literal">hPutStrLn</tt>, which takes a file handle and a string, to
put the string to the supplied file handle; in this case <tt class="docutils literal">stderr</tt>. Further we
import <tt class="docutils literal">Control.Monad</tt> for the <tt class="docutils literal">Maybe</tt>-monad, which we use in <tt class="docutils literal">safeReadFloat</tt>:
if we can read a float, and only a float, we return <tt class="docutils literal">Just x</tt>, which else we
return <tt class="docutils literal">Nothing</tt>. By doing this we can pattern match again in
<tt class="docutils literal">printPowerOfTwo</tt>, and either print the quadratic value, or an error message.
By doing this we encapsulated a possible error in the value <tt class="docutils literal">Nothing</tt>. We could
have also structured the program in another way and return a negative number,
if the argument is not numeric, and the quadratic number else, however often
your function is possibly surjective, so you can't reserve error codes, as one
often does in C.</p>
<p>This should be enough to get started with simple Haskell programs, since you
can read and evaluate your command line arguments. Since this post grew a bit
larger than expected, I'll postpone file interaction for now, because Haskell
makes some powerful simplifications and optimizations which can cause trouble
for the beginner.</p>
Automate LaTeX compilation in vim with LaTeX-Suite2011-08-05T00:00:00+00:002011-08-05T00:00:00+00:00Marceltag:deaddy.net,2011-08-05:/automate-latex-compilation-in-vim-with-latex-suite.html<p>For editing LaTeX-documents I use exclusively vim with the great
<a class="reference external" href="http://vim-latex.sourceforge.net/">LaTeX-Suite</a>. Usually I have an
automatically refreshing pdf-viewer like evince next to my editor, and compile
manually with <tt class="docutils literal">pdflatex</tt> from another terminal, so after each compilation my
changes appear in the pdf-viewer. Since I'm using a tiled window manager, this …</p><p>For editing LaTeX-documents I use exclusively vim with the great
<a class="reference external" href="http://vim-latex.sourceforge.net/">LaTeX-Suite</a>. Usually I have an
automatically refreshing pdf-viewer like evince next to my editor, and compile
manually with <tt class="docutils literal">pdflatex</tt> from another terminal, so after each compilation my
changes appear in the pdf-viewer. Since I'm using a tiled window manager, this
was reasonably comfortable, but I still had to recompile the document manually
every time I saved some changed. However, today I added two lines to my
<tt class="docutils literal">.vimrc</tt>, which automate this process and make vim automatically compile the <tt class="docutils literal">.tex</tt>-file
every time it's saved:</p>
<pre class="code literal-block">
let g:Tex_DefaultTargetFormat='pdf'
au BufWritePost *.tex silent call Tex_CompileLatex()
</pre>
<p>The first line lets vim know, that I want it compiled to pdf; if you use other
output formats you might want to change this, or leave this line out if your target
format is dvi. The second line is where the magic happens, however it
suppresses any error messages produced by the compiler. But this shouldn't be a
problem in most cases and one can easily fall back to manual compilation if
matters get more complicated.</p>
The long lost art of automatic file synchronization with unison via ssh2011-06-16T00:00:00+00:002011-06-16T00:00:00+00:00Marceltag:deaddy.net,2011-06-16:/the-long-lost-art-of-automatic-file-synchronization-with-unison-via-ssh.html<p>I guess one of the reasons why many people use dropbox is, that it makes file
synchronization trivially easy for the end-user. However, it only provides
limited space and you have to trust all your data to a third party (or use some
kind of encrypted files, which makes it …</p><p>I guess one of the reasons why many people use dropbox is, that it makes file
synchronization trivially easy for the end-user. However, it only provides
limited space and you have to trust all your data to a third party (or use some
kind of encrypted files, which makes it non-trivial). But thanks to
<a class="reference external" href="http://www.cis.upenn.edu/~bcpierce/unison/">unison</a> and ssh, you can easily
implement automated and secure file-synchronization across several computers.</p>
<p>Here is a little how-to for a simple desktop-laptop-setup. First make sure that
you have installed the same version of unison on both computers. Then create
the directory <tt class="docutils literal"><span class="pre">~/.unison</span></tt> and a file named <tt class="docutils literal">default.prf</tt> in it; this is the
profile unison will use when invoked without a specified profile. This is how
it could look like:</p>
<pre class="code literal-block">
# .unison/default.prf Unison preferences file
# First define the roots for synchronization; all further paths will be
# relative to these.
# my home directory
root = /home/deaddy
# the home directory on my laptop dh0
root = ssh://dh0/home/deaddy
logfile = /home/deaddy.unison/unison.log
# now include another preference file, containing a list of directories you
# want to synchronize
include common
</pre>
<p>And here is what my <tt class="docutils literal">common</tt>-file looks like:</p>
<pre class="code literal-block">
# .unison/common containing paths to synchronize in default profile
# every file or folder you want to have synchronized is just appended by
# path = folder or path = file. Remember that these are relative to your root
# specified in the .prf-File
path =.code
path = work
path = documents
path = .vimrc
path = .surf/bookmarks.txt
# I keep some scripts in .local/bin
path = .local
# However, webkit does save some data in .local which I don't want to have
# synchronized
ignore = Path .local/share/webkit
# since I have the same unison setup on my laptop (just a different hostname in
# the remote root) I want to be able to change this list on both computers and
# have it changes propagated to the other one
path = .unison/common
</pre>
<p>Actually my list is a bit longer, but this should be enough to give you the
idea. Now you have everything set up to run <tt class="docutils literal">unison</tt> for the first time. It will
notice you, that there were no archive files found, which is normal for the
first run, so just confirm with return. Now unison will ask you which file you
want to have synchronized in which direction; however, this is kind of
cumbersome if most files are identically, so you can reduce the noise by
aborting and invoking <tt class="docutils literal">unison <span class="pre">-auto</span></tt> in order to see only conflicting files.</p>
<p>When you have synchronized the folders, you might want to automate this task.
So first we generate a new ssh-key for this task:</p>
<pre class="code literal-block">
ssh-keygen -t rsa -f ~/.ssh/unison_rsa
</pre>
<p>When asked for a passphrase, just hit return, since you won't be able to enter
a passphrase in the cronjob.
Now copy the contents of <tt class="docutils literal"><span class="pre">~/.ssh/unison_rsa.pub</span></tt> to your <tt class="docutils literal"><span class="pre">~/.ssh/authorized_keys</span></tt>
on the remote host. You should be able to login on the remote machine via <tt class="docutils literal">ssh
<span class="pre">-i</span> <span class="pre">'~/.ssh/unison_rsa'</span></tt> . If this fails, you should debug ssh (Is public key
authentication enabled? Is the public key correctly copied?), else we can
continue. Since this key is not password-protected, edit the
<tt class="docutils literal"><span class="pre">~/.ssh/authorized_keys</span></tt> again and prepend <tt class="docutils literal"><span class="pre">command="unison</span> <span class="pre">-server"</span></tt> to the
newly added key. This will restrict logins to this command. The <tt class="docutils literal"><span class="pre">-server</span></tt>
argument is necessary so unison on the remote host can act as an server for
your client. As my friend <a class="reference external" href=""http://www.pcspinnt.de/"">Stefan</a> pointed out, one can improve the restrictions
further, i.e. one could prepend</p>
<pre class="code literal-block">
command="/usr/bin/unison -server",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty.
</pre>
<p>Now we're almost done. Enter <tt class="docutils literal">crontab <span class="pre">-e</span></tt> into your shell and add a cronjob
like this (here it synchronizes every 10 minutes):</p>
<pre class="code literal-block">
*/10 * * * * unison -batch -dumbtty -sshargs '-i /home/deaddy/.ssh/unison_rsa' 1>/dev/null 2>&amp;1
</pre>
<p>Replace <tt class="docutils literal"><span class="pre">/home/deaddy/.ssh/unison_rsa</span></tt> with the path to the newly generated
private key, and you're good to go. Somehow my crondaemon does not like output,
so I redirect standard out to /dev/null, and standard error to standard out.
Thanks to dasjoe for this hint. Also I ran into trouble without <tt class="docutils literal"><span class="pre">-dumbtty</span></tt>
which tells unison, that the terminal (i.e. the crondaemon) does not support
special characters. Finally <tt class="docutils literal"><span class="pre">-batch</span></tt> tells unison to synchronize all
trivial changes, so if you're editing a file only on one computer, the changes
will be propagated to the other one without your interaction. However
conflicting changes still need to be resolved manually. For this just use
<tt class="docutils literal">unison <span class="pre">-auto</span></tt> .</p>
<p>I now have unison running for years, however I never came around to automate
it, because the cronjob won't load environment variables like your ssh-agent.
However, by using the <tt class="docutils literal"><span class="pre">-sshargs</span></tt> argument I now can use a specific key. But now
I have finally a fully automated synchronization of all my important files
between my laptop and desktop, and thanks to dyndns and ssh I can also
synchronize them when I'm not at home, without worrying that the connection is
unsafe. Also, unison uses the rsync-algorithm, so after the first run it's
quite fast (searching about 50G of files for changes takes only a few seconds)
and uses little bandwidth.</p>
Setting up Android Development-Environment without Eclipse2011-03-03T00:00:00+00:002011-03-03T00:00:00+00:00Marceltag:deaddy.net,2011-03-03:/setting-up-android-development-environment-without-eclipse.html<p>So, this is not really administrative, but since I
searched very long for a solution, I wanted to document
it at least for myself. All information can also be found on
<a class="reference external" href="http://developer.android.com/resources/tutorials/hello-world.html">developer.android.com</a>.
First step is setting up the android-SDK. I assume you have installed
the android-sdk-update-manager. Make sure …</p><p>So, this is not really administrative, but since I
searched very long for a solution, I wanted to document
it at least for myself. All information can also be found on
<a class="reference external" href="http://developer.android.com/resources/tutorials/hello-world.html">developer.android.com</a>.
First step is setting up the android-SDK. I assume you have installed
the android-sdk-update-manager. Make sure you are root and have the
android executable in your path (just navigate to the folder where you
have the update-manager installed). Then run <tt class="docutils literal">android</tt>, this should
bring up a GUI-Application. There you select available packages, select
the Android Repository and click on Install selected. After a bit of
clicking around you should have updated your sdk and installed the android
repository, there you select the sdks you need and install again. Now
you're ready to set up your working directory. Run android list targets
to view available targets - if this list is empty something went wrong in
the previous steps. Remember the id of your target, create a directory
for your project and run:</p>
<pre class="code literal-block">
android create project --package com.example.hellandroid --activity HelloAndroid --target &lt;your target id&gt; --path HelloAndroid
</pre>
<p>Make sure you change the parameters
to your needs and voila, you should have a project directory. In src you
now can write your application. In order to test it on your device, run
<tt class="docutils literal">ant debug</tt> in the project-folder, attach your device via usb, make sure
adb is connected and invoke <tt class="docutils literal">adb <span class="pre">-d</span> install <span class="pre">bin/HelloAndroid-debug.apk</span></tt>
(or whatever your Project is named). Now you should be able to run it
on your attached device.</p>
<p>I hope this helps and that I'll find some time to delve deeper into
Android development, now that I can use proper tools like vim, instead
of relying on Eclipse. ;)</p>
Synergy, X and the German keyboard layout2011-03-03T00:00:00+00:002011-03-03T00:00:00+00:00Marceltag:deaddy.net,2011-03-03:/synergy-x-and-the-german-keyboard-layout.html<p>One of the little tools I really learned to love is
<a href="http://synergy-foss.org/pm/">synergy</a>. It allows one to share one
physical keyboard and mouse across several machines, so you can just move
your mouse cursor to the edge of your display (or set up a keybinding
by your choice) and magically your …</p><p>One of the little tools I really learned to love is
<a href="http://synergy-foss.org/pm/">synergy</a>. It allows one to share one
physical keyboard and mouse across several machines, so you can just move
your mouse cursor to the edge of your display (or set up a keybinding
by your choice) and magically your mouse enters the other screen. It's
also supposed to work across Windows and Mac. However, using mainly two
linux machines running X11 and xmonad, one day it stopped working like a
charm and on the client (the computer you want to control remotely)
I only had an US keyboard layout, and frustrated by some hours of
unsuccessful googling I stopped using synergy at all.</p>
<p>But to
my delight I just stumbled about an user having the same problem and a
<a href="http://code.google.com/p/synergy-plus/issues/detail?id=271">solution</a>
and running <code>setxkbmap de</code> before starting the client solves my
problem. Yay! I hope I don't get too much bad karma for all the hatred
I accumulated while trying to fix this problem.</p>Using phosphor xscreensaver for displaying htop2011-01-26T00:00:00+00:002011-01-26T00:00:00+00:00Marceltag:deaddy.net,2011-01-26:/using-phosphor-xscreensaver-for-displaying-htop.html<p>I guess everyone knows the default <tt class="docutils literal">xscreensaver</tt> collection, and yesterday a
friend of mine showed me that one can use the screensaver phosphor as terminal
emulator via invocation of</p>
<pre class="code literal-block">
/usr/lib64/misc/xscreensaver/phosphor -scale 2 -delay 5 -program bash
</pre>
<p>(the path might vary, this is for gentoo amd64).
Having …</p><p>I guess everyone knows the default <tt class="docutils literal">xscreensaver</tt> collection, and yesterday a
friend of mine showed me that one can use the screensaver phosphor as terminal
emulator via invocation of</p>
<pre class="code literal-block">
/usr/lib64/misc/xscreensaver/phosphor -scale 2 -delay 5 -program bash
</pre>
<p>(the path might vary, this is for gentoo amd64).
Having some fun, I finally tried <tt class="docutils literal">htop</tt> and it really looked great:</p>
<img alt="htop displayed in phosphor" src="/images/phosphor-htop.jpg" style="width: 760px;" />
<p>So, sitting in the <a class="reference external" href="http://warpzone.ms/">warpzone</a>
next to <a class="reference external" href=""http://www.pcspinnt.de/"">Stefan</a> staring at his matrix-screensaver a flash of
insight struck me: I started <tt class="docutils literal"><span class="pre">xscreensaver-demo</span></tt>, selected phosphor as new
Screensaver, opened the advanced settings and set the command line to</p>
<pre class="code literal-block">
phosphor -root -delay 16522 -scale 3 -program htop
</pre>
<p>where <tt class="docutils literal"><span class="pre">-scale</span></tt> denotes the fontsize - if you set it too high htop won't run (but
maybe other programs).</p>
<p>Analogous one can use the apple-screensaver as terminal emulator via</p>
<pre class="code literal-block">
/usr/lib64/misc/xscreensaver/apple2 -text -fast -program 'bash'
</pre>
<img alt="htop displayed in apple2 emulation" src="/images/apple2-htop.jpg" style="width: 760px;" />
<p>The Apple2 is much more performant than the phosphor display (surprise!),
however, I still like the greenish look more. Maybe this helps someone to
configure their screensaver to something more use- and beautiful. Still, one
word of warning: depending on the machine phosphor or apple produce significant
load.</p>