<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Jan Harasym</title>
    <subtitle>A classically trained sysadmin shouting into the void.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://blog.dijit.sh/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.dijit.sh"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-02-19T02:52:00+07:00</updated>
    <id>https://blog.dijit.sh/atom.xml</id>
    <entry xml:lang="en">
        <title>On The Shame We Share</title>
        <published>2026-02-19T02:52:00+07:00</published>
        <updated>2026-02-19T02:52:00+07:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/on-shame/"/>
        <id>https://blog.dijit.sh/on-shame/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/on-shame/">&lt;!-- TITLE NOTE: &quot;collective guilt&quot; has been colonised by manosphere rhetoric to the point the slug reads as a signal before anyone&#x27;s past the first line. &quot;On Demographic Blame&quot; is neutral and accurate. Alternatives if you want something with more texture: &quot;The Wrong Lever&quot;, &quot;Shame Won&#x27;t Fix This&quot;. --&gt;
&lt;p&gt;Peter Lübeck, a prominent figure in Malmö&#x27;s gamedev scene, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.linkedin.com&#x2F;posts&#x2F;peterlubeck_not-all-men-but-men-of-all-ages-everywhere-activity-7429415809199960064-SPnd?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAX3-20BJfft3hr_u21NGGKywGpjGrlT0I4&quot;&gt;recently wrote that he&#x27;s ashamed to be a man.&lt;&#x2F;a&gt; which is a sad thing to say for someone who is a role model to many.&lt;&#x2F;p&gt;
&lt;p&gt;The thing is, that he&#x27;s not wrong about any of the things he&#x27;s angry about. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pelicot_rape_case&quot;&gt;The Pelicot case&lt;&#x2F;a&gt;. Epstein. The call centre CEO who spent years running what was, essentially, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kenyainsights.com&#x2F;toxicity-cci-under-fire-over-staff-harassment-claims&#x2F;&quot;&gt;an abuse operation against his own staff&lt;&#x2F;a&gt;. Women being harassed on a &lt;em&gt;fucking &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;world&#x2F;2025&#x2F;aug&#x2F;09&#x2F;women-vinted-trolls-image-thieves-harassment-photos-stolen-sexualised&quot;&gt;secondhand clothing app&lt;&#x2F;a&gt;&lt;&#x2F;em&gt; of all things. These are real, and they&#x27;re really awful.&lt;&#x2F;p&gt;
&lt;p&gt;I wrote a reply suggesting demographic shame was the wrong response. The replies taking me apart got significantly more support than my point did. A few suggested I was strawmanning.&lt;&#x2F;p&gt;
&lt;p&gt;Fine. Worth talking about then.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;his-strongest-point&quot;&gt;His Strongest Point&lt;&#x2F;h2&gt;
&lt;p&gt;Men commit approximately 97% of reported sexual offences, consistently, across every Western jurisdiction that tracks it. Not contested. Not arguing that this isn&#x27;t the case.&lt;&#x2F;p&gt;
&lt;p&gt;The Pelicot case is the sharpest version of this argument. Within a small geographical area, dozens of ordinary men (truck drivers, firefighters, IT guys, fathers) raped an unconscious woman who had been habitually drugged by her husband. There was no shared pathology, nor obvious common thread. Just men who lived nearby and said yes when asked. One walked away when he realised what was happening, but he didn&#x27;t call the police.&lt;&#x2F;p&gt;
&lt;p&gt;For Peter; this kills his more &quot;comfortable&quot; idea that male violence belongs exclusively to disturbed individuals. He&#x27;s right that this idea was wrong. Ordinary people, without obvious pathology, do terrible things when the conditions allow it.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not going to argue with that. The question is what follows from it.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;what-the-language-is-doing&quot;&gt;What The Language Is Doing&lt;&#x2F;h2&gt;
&lt;p&gt;Peter writes that all men know men who have &quot;stepped out of line, spoken derogatorily of women, or wouldn&#x27;t take no for an answer.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;&quot;Stepped out of line&quot; is doing enormous work in that sentence.&lt;&#x2F;p&gt;
&lt;p&gt;At one end: someone who told a bad joke fifteen years ago that went unchallenged. At the other: the exceptional depravity of the Pelicot case. His evidence supports the first, but he reaches for the second. Most readers won&#x27;t catch the slide, which means they end up somewhere the argument hasn&#x27;t actually taken them.&lt;&#x2F;p&gt;
&lt;p&gt;Asking people to comment about being uncomfortable when someone tells an off-colour joke: Entirely reasonable. Carrying collective guilt for crimes committed by strangers: a smidge less reasonable. He requests the second but only lays a passable argument for the first.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;what-speaking-up-costs&quot;&gt;What Speaking Up Costs&lt;&#x2F;h2&gt;
&lt;p&gt;Look, I&#x27;ve stepped in on domestic violence twice. The phrase &quot;men should speak up&quot; hits your ears very different when you know what it means.&lt;&#x2F;p&gt;
&lt;p&gt;The first time was on a street between Charing Cross and St Martin&#x27;s Lane in London, on my way home from work. The attacker rose to meet my condemnation with further aggression- directed at me, I hesitated (in the UK you think twice; wrong move and you&#x27;re the assailant in the eyes of the law) and he put me on the ground, destroyed my laptop, a bag I couldn&#x27;t afford to replace (or afford in the first place, realistically) &amp;amp; my nose - then went right back to what he was doing, angrier. The second time, the woman being dragged around by the back of her neck became furious at me for interfering. I was around 22 years old. I&#x27;ll tell you concretely: ieither felt like I was doing the right thing in any meaningful way, I was attacked and scolded and it changed nothing. Both were frightening, and bare in mind: I grew up in violent places and had martial arts training.&lt;&#x2F;p&gt;
&lt;p&gt;There are other options, of course. Calling the police, filming it, trying to gather people nearby. None of them are free either. The police often don&#x27;t arrive (and if they do: it&#x27;s post-fact, obviously), filming can escalate in the same way confrontation can, persuading bystanders to act together under pressure is harder than it sounds from a safe distance. The point isn&#x27;t that physical intervention is the only option. It&#x27;s that the cost of intervening is real regardless of the form it takes, and not everyone is built to absorb it. I think those people aren&#x27;t &quot;lesser men&quot; for it.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;the-part-he-s-right-about&quot;&gt;The Part He&#x27;s Right About&lt;&#x2F;h2&gt;
&lt;p&gt;Men &lt;em&gt;are&lt;&#x2F;em&gt; responsible for the culture immediately around them. I think Peter is right about that, even if I&#x27;d put it differently. (IE; that &lt;em&gt;men&lt;&#x2F;em&gt; are not unique in that aspect).&lt;&#x2F;p&gt;
&lt;p&gt;Most of it isn&#x27;t dramatic. If someone makes a joke you found disagreeable and you changed the subject, to me that &lt;em&gt;is&lt;&#x2F;em&gt; a signal. A real one. Most people calibrate their behaviour on reinforced feedback; jokes that don&#x27;t land stop getting made. People corrected without being destroyed tend to actually change.. but these aren&#x27;t the great sacrifices being called for: but they&#x27;re low-cost and they compound over time. The ask should be &lt;em&gt;that&lt;&#x2F;em&gt;: the ordinary, undramatic correction of the culture within reach. Not martyrdom. Not career destruction.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been in Malmö&#x27;s gamedev scene for twelve years. If you want to know what that culture looked like on the ground: men performing contrition for existing, internal mailing lists weaponised for social-justice pile-ons until they had to be shut down, and at least one occasion where I was told, without irony, that my next hire had better be a woman (a move strongly defended by the other men in the studio). Serge&lt;sup&gt;[more on him later]&lt;&#x2F;sup&gt;, meanwhile, was running his operation completely untouched. The people with no institutional power were being punished for their demographic. The person with all of it was unreachable until a criminal court got involved. People subsequently pointed to Serge as proof the punishment of the former was justified. I&#x27;ve never quite worked out the logic of that, but I can say that it was stated with great confidence.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;the-pinch&quot;&gt;The pinch&lt;&#x2F;h2&gt;
&lt;p&gt;Peter says there&#x27;s a lack of solid male role models. I agree.&lt;&#x2F;p&gt;
&lt;p&gt;Look, though, at what his post models as the correct masculine response: &lt;em&gt;shame&lt;&#x2F;em&gt;. He doesn&#x27;t mention that if you&#x27;re ashamed, you&#x27;re confirming maleness is the problem, and implicitly, if you&#x27;re &lt;em&gt;not&lt;&#x2F;em&gt; ashamed, that proves you&#x27;re part of the bad stuff men do. The framework doesn&#x27;t seem to distinguish between men who feel solidarity with victims and men who are complicit; absence of visible shame reads as evidence that you are comfortable with the suffering women face at the hands of some men. It&#x27;s a closed loop. Congratulations: you&#x27;re guilty.&lt;&#x2F;p&gt;
&lt;p&gt;Some people reading this will say that shame about male behaviour doesn&#x27;t have to mean shame about being male: that you can feel ashamed of what &lt;em&gt;some&lt;&#x2F;em&gt; men do the same way you feel ashamed, as a human, about what humans are doing to the planet. That&#x27;s a coherent position. That&#x27;s not what is happening.&lt;&#x2F;p&gt;
&lt;p&gt;And, what I&#x27;m arguing against is that it is not the position the post &lt;em&gt;builds&lt;&#x2F;em&gt;. A teenage boy reading Lübecks emotional appeal doesn&#x27;t take away &quot;here&#x27;s how to be part of the solution.&quot; He takes away a debt he incurred before he was old enough to have done anything.&lt;&#x2F;p&gt;
&lt;p&gt;Peter ends with terror for his daughter, which I understand completely, but he forgets that son&#x27;s exist too; and what is he putting into the world for them to grow from? Collective guilt that can never be put down without being labelled as &quot;the problem&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;on-shame&#x2F;the_pinch.svg&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;on-shame&#x2F;the_pinch.svg&quot; alt=&quot;a closed loop of&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;&quot;&gt;My friend Charlene.&lt;&#x2F;h2&gt;
&lt;p&gt;The structures that enable abuse don&amp;#39;t much care about the demographics of who&amp;#39;s exploiting them. They care about who has access and who won&amp;#39;t be believed.&lt;&#x2F;p&gt;
&lt;p&gt;I know this more concretely than I&amp;#39;d like to.&lt;&#x2F;p&gt;
&lt;p&gt;I had a friend at school- Charlene, the year above me, six months older. We used to make up rather inventive stories together. One of those stories, as it turned out later, wasn&amp;#39;t made up: men coming into her room at night to lie in her bed with her. I was eight. I thought she was joking. I didn&amp;#39;t tell anyone. &lt;em&gt;(See, I was part of the problem!)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;My mum had caught wind that social services suspected a paedophile in the family home, and she assumed it was the father. Reasonable assumption; he was violent and angry. Though not, as it happens, in the way anyone assumed.&lt;&#x2F;p&gt;
&lt;p&gt;It was the grandmother. Selling access to her granddaughters to people from the pub.&lt;&#x2F;p&gt;
&lt;p&gt;The assumption my mother made (reasonable, statistically defensible, the kind anyone would make) meant the father was kept away at exactly the moment it mattered most. Which goes some way toward explaining the violence and the anger, if you think about it. Social services eventually cut funding for the family home on the basis that the mother had maintained a living situation around a suspected abuser. They came to stay with us while they figured out what came next. The father wasn&amp;#39;t permitted to come.&lt;&#x2F;p&gt;
&lt;p&gt;Granny slept in my room. With me.&lt;&#x2F;p&gt;
&lt;p&gt;They moved to Blackpool shortly after, directly from our house to avoid social services. Charlene disappeared some time later. Nobody has ever been convicted.&lt;&#x2F;p&gt;
&lt;p&gt;I don&amp;#39;t think all grandmothers are doing this. But then, that&amp;#39;s rather the point. She happens to be a hundred percent of the paedophiles I&amp;#39;ve personally known about.&lt;&#x2F;p&gt;
&lt;p&gt;It wasn&amp;#39;t institutions that protected her. It was assumptions. It was her own daughter; who hid it, covered for her, kept it going even while it destroyed her own children&amp;#39;s lives. Nobody had named the father. Nobody needed to. There was a man in the house and a suspected paedophile, then that &lt;em&gt;has&lt;&#x2F;em&gt; to be the same person. He couldn&amp;#39;t be there for his daughters because we drew the &amp;quot;obvious&amp;quot; conclusion. While granny slept in my room, with me.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-1&quot;&gt;Meanwhile, In Malmö&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;games&#x2F;2025&#x2F;jul&#x2F;02&#x2F;three-ubisoft-video-game-chiefs-guilty-enabling-culture-sexual-harassment&quot;&gt;Serge Hascoët&lt;&#x2F;a&gt; was Ubisoft&amp;#39;s chief creative officer and a generally rather unlikable cunt.. It&amp;#39;s relevant to Lübeck because it&amp;#39;s: Ubisoft &lt;em&gt;Massive&lt;&#x2F;em&gt; (as-in: roughly 30% of Malmö&amp;#39;s entire gamedev scene) that is in his collective view. A French court finally convicted Serge of psychological harassment and &amp;quot;complicity&amp;quot; in sexual harassment, if you know the rumours then you know that this is a fucking joke. Eight years of complaints buried, staff silenced, total &lt;em&gt;systematic&lt;&#x2F;em&gt; suppression, all while the company rolled out DEI initiatives to bring more women in presumably for the aforementioned harassment. He got &lt;em&gt;one&lt;&#x2F;em&gt; suspended sentence. No jail time.&lt;&#x2F;p&gt;
&lt;p&gt;The person whose job was specifically to stop this was &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nordic.ign.com&#x2F;news&#x2F;38002&#x2F;three-top-ubisoft-executives-step-down-following-sexual-misconduct-and-toxic-culture-allegations&quot;&gt;Cécile Cornet, Ubisoft&amp;#39;s global head of human resources&lt;&#x2F;a&gt;. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.liberation.fr&#x2F;futurs&#x2F;2020&#x2F;07&#x2F;10&#x2F;harcelement-sexuel-a-ubisoft-on-savait_1793985&#x2F;&quot;&gt;Named in the lawsuit&lt;&#x2F;a&gt; as directly responsible for maintaining the conditions that let it continue. Also a woman.&lt;&#x2F;p&gt;
&lt;p&gt;The point isn&amp;#39;t that her presence exonerates anyone. It&amp;#39;s that she held the one institutional role designed to catch exactly this, and she failed the victims just as completely as the men above her. I worked at Massive, which means I share Malmö&amp;#39;s general collective shame for the whole thing. But the idea that I bore &lt;em&gt;more&lt;&#x2F;em&gt; institutional responsibility than Cornet, because I happen to be a man, doesn&amp;#39;t hold. She had the power and the mandate. What would my speaking up, had I even known, have cost me? I know exactly what. I also know it wouldn&amp;#39;t have been enough.&lt;&#x2F;p&gt;
&lt;p&gt;The variable that predicted abuse at Ubisoft wasn&amp;#39;t demographics. It was impunity, and the cost of ending it landing on individuals rather than institutions.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-2&quot;&gt;The structure underneath&lt;&#x2F;h2&gt;
&lt;p&gt;Strip away the specifics and you have: a demographic commits crimes at elevated rates, therefore members of that demographic carry collective guilt.&lt;&#x2F;p&gt;
&lt;p&gt;Apply that to any other group. You probably already have one in mind. Notice the discomfort.&lt;&#x2F;p&gt;
&lt;p&gt;That discomfort is the argument.&lt;&#x2F;p&gt;
&lt;p&gt;The standard objection is that the analogy breaks down because gender involves structural power in ways that race&#x2F;religion&#x2F;whatever doesn&amp;#39;t. But the objection to collective demographic guilt was never only about power: it&amp;#39;s that guilt doesn&amp;#39;t transfer between individuals who share an immutable characteristic. That principle either holds or it doesn&amp;#39;t. Deciding it holds for some demographics and not others isn&amp;#39;t a principled position, it becomes bigotry looking for a justification.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-3&quot;&gt;What Would Fix It&lt;&#x2F;h2&gt;
&lt;p&gt;Think about what speaking up about Hascoët would have cost anyone, not just someone at the bottom like me. Your career at Ubisoft? Definitely. Probably your reputation in an industry where everyone knows everyone too. Some of the people who said nothing weren&amp;#39;t moral cowards; they&amp;#39;d watched what happened to the ones who spoke, and they knew they couldn&amp;#39;t afford to be next. Rose McGowan spent years being surveilled, smeared, and quietly blacklisted before anyone would print a word. I still feel bad for the ones who did the maths and stayed quiet, not as much as the victims of course, but I can&amp;#39;t see it as black-and-white.&lt;&#x2F;p&gt;
&lt;p&gt;&amp;quot;Men should hold men accountable&amp;quot; doesn&amp;#39;t grapple with any of that. It asks individuals to take career-ending, sometimes physically dangerous personal risk to compensate for institutions that won&amp;#39;t do their job. You can&amp;#39;t build a functional system on the expectation that enough people will keep volunteering to take the hit. At some point the pool shrinks to nothing, either by attrition or because the only people left in the room have already decided the culture suits them fine.&lt;&#x2F;p&gt;
&lt;p&gt;The calculation changes when speaking up stops being a personal sacrifice and starts being a protected act. Right now, a complaint at Ubisoft went to Cornet. Cornet buried it. Eight years of that. The person who reported got nothing, maybe even a reprimand and a private blacklisting; the person who buried it kept her salary and her title. That&amp;#39;s the sum the system is currently running.&lt;&#x2F;p&gt;
&lt;p&gt;Obviously: fix the fucking sum. Reporting needs somewhere to go that isn&amp;#39;t inside the organisation being reported on. Consequences need to land on the institution when complaints are suppressed, not solely on the individual brave or foolish enough to file them. When the career risk runs in the other direction (when burying a complaint is the thing that ends careers), the culture shifts without requiring anyone to be destroyed in the process.&lt;&#x2F;p&gt;
&lt;p&gt;That&amp;#39;s not a &amp;quot;men&amp;#39;s problem&amp;quot; to solve, it&amp;#39;s collective: it&amp;#39;s legislation with actual teeth, aimed at the organisations that currently let this run for years on the very real assumption that nobody will pay for it.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;-4&quot;&gt;anyway&lt;&#x2F;h2&gt;
&lt;p&gt;Peter asked, in good faith, what male role models look like. Here&amp;#39;s one answer: a man who thinks sexism is wrong, that abusers should face consequences, that when someone comes forward the response shouldn&amp;#39;t be to bury it, and who also thinks his gender isn&amp;#39;t something to apologise for.&lt;&#x2F;p&gt;
&lt;p&gt;Most men in this industry won&amp;#39;t say that. I&amp;#39;ve watched, over twelve years, that the cost of dissent become progressively less negotiable, and the quiet normalisation of contempt for men treated as a reasonable position. The pool of people willing to say anything shrinks accordingly. The silence makes a bad argument look unanimous when it isn&amp;#39;t.&lt;&#x2F;p&gt;
&lt;p&gt;For the juniors, the students, the boys reading this: you don&amp;#39;t have to accept demographic guilt to be a decent person. Do what you can, when you can. Support victims. Don&amp;#39;t be an arsehole. That&amp;#39;s it.&lt;&#x2F;p&gt;
&lt;p&gt;Sexism doesn&amp;#39;t stop being sexism because it&amp;#39;s well-intentioned.&lt;&#x2F;p&gt;
&lt;p&gt;And, don&amp;#39;t feel bad for being a boy.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The only good cloud is a google cloud</title>
        <published>2024-09-24T19:21:00+07:00</published>
        <updated>2024-09-24T19:21:00+07:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/gcp-the-only-good-cloud/"/>
        <id>https://blog.dijit.sh/gcp-the-only-good-cloud/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/gcp-the-only-good-cloud/">&lt;audio controls&gt;
  &lt;source src=&quot;audio&#x2F;foreword.aac&quot; type=&quot;audio&#x2F;aac&quot;&gt;
Your browser does not support the audio element.
&lt;&#x2F;audio&gt;
&lt;p&gt;First, this is not marketing. I&#x27;m not paid nor do I have any incentive to say what comes next. My personal opinion overall is that we&#x27;re all ~&lt;em&gt;dumb as fuck&lt;&#x2F;em&gt;~ for giving so much of our foundational infrastructure to three US companies. That said:&lt;&#x2F;p&gt;
&lt;p&gt;Yours truly once dared to suggest on the hallowed grounds of HackerNews that Amazon&#x27;s cloud computing juggernaut, AWS, had &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=41444338&quot;&gt;cleverly exploited the very shortsightedness that plagued operations teams&lt;&#x2F;a&gt; and caused people to believe that we could not do better internally. A stroke of genius, for sure.&lt;&#x2F;p&gt;
&lt;p&gt;But, let&#x27;s be frank, outside of S3 have any of their so-called &quot;innovations&quot; truly served anyone beyond lining the pockets of some fat cats in Seattle?&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve traversed our industry as a counter-culture goblin for a long time (though I prefer the term &quot;independent thinker&quot;), and I&#x27;ve heard every snake oil pitch imaginable about the cloud being the true technological messiah. Meanwhile, I, for daring to suggest that perhaps &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tech.ahrefs.com&#x2F;how-ahrefs-saved-us-400m-in-3-years-by-not-going-to-the-cloud-8939dd930af8&quot;&gt;virtual machines shouldn&#x27;t cost a king&#x27;s ransom&lt;&#x2F;a&gt; &lt;sup&gt;[&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=35094407&quot;&gt;HN comments&lt;&#x2F;a&gt; ]&lt;&#x2F;sup&gt;, am painted as vaudvillian villain, cartoonishly outdated or- in one case: that I lacked testicles to learn. (though I am certainly unsure how your brain is wired if it is dependent on your testicles.)&lt;&#x2F;p&gt;
&lt;p&gt;&quot;Why would you give people the Sisyphean task of operating servers, that is for peasants! Economies of scale make it cheaper to operate in a cloud!&quot;; as if wrangling vendor-locked terraform and stodgy YAML manifests is somehow intellectually superior, or that we couldn&#x27;t possibly measure our outcomes related to cost.&lt;&#x2F;p&gt;
&lt;p&gt;I won&#x27;t waste column inches lambasting AWS for failing to deliver on their promise of leaner tech teams (though statistics prove me right). Instead, allow me to air a few grievances, then make a bold claim: Google Cloud Platform, is the superior choice in every way that counts for a cloud.&lt;&#x2F;p&gt;
&lt;p&gt;Why? Because I refuse to believe &lt;em&gt;this&lt;&#x2F;em&gt; &lt;strong&gt;*gestures broadly at AWS console*&lt;&#x2F;strong&gt; is as good as it gets, but I&#x27;ve come to believe that we are a bunch of technological copycats, too afraid to deviate from the herd. But today, I, your friendly neighborhood goblin, will hopefully piss you off enough to respond to me angrily, and in doing so, force you to confront the true reality of why you choose inferiority and mediocrity.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, Google isn&#x27;t without its faults. They&#x27;ve been known to pull the rug out from under their users. But desperate times call for desperate measures, and sometimes, you have to risk a nibble from the alligator to escape the clutches of the wolf; and I contend: that this is actually a good thing, as it prevents you from being too comfortable sticking around.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-lure-of-cloud-mirage-or-miracle&quot;&gt;The lure of cloud: MIRAGE OR MIRACLE?&lt;&#x2F;h2&gt;
&lt;p&gt;What is it that draws folks to this nebulous &quot;cloud,&quot; anyway? If you&#x27;re a pain in the ass like me you hear it constantly, and if you boil it down, and you&#x27;ll find the same trio of promises: &quot;it&#x27;s reliable&quot; (supposedly), &quot;it&#x27;s easy&quot; (they say), and &quot;it&#x27;s economical&quot; (or so we&#x27;re told).&lt;&#x2F;p&gt;
&lt;p&gt;Well, I&#x27;m calling their bluff. If that&#x27;s all the cloud&#x27;s got going for it, then Google&#x27;s offering leaves Amazon&#x27;s in the dust. And if you think I&#x27;m wrong, I&#x27;m all ears. Name one more genuine advantage AWS has over GCP when compared to colocation of rented machines, and I&#x27;ll eat my hat.&lt;&#x2F;p&gt;
&lt;p&gt;This post is an indirect response to: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ashishb.net&#x2F;programming&#x2F;google-cloud&#x2F;&quot;&gt;&quot;it&#x27;s hard to recommend Google Cloud&quot;&lt;&#x2F;a&gt; &lt;sup&gt;[&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;lobste.rs&#x2F;s&#x2F;1dry2z&#x2F;it_is_hard_recommend_google_cloud&quot;&gt;lobste.rs comments&lt;&#x2F;a&gt; ]&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;1-reliability&quot;&gt;1. Reliability&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;vpcs&quot;&gt;VPCs&lt;&#x2F;h3&gt;
&lt;p&gt;AWS is zonal by default, it&#x27;s clear. VPC&#x27;s require manual networking intervention (outside the happy path) to set up a &quot;peered&quot; network. This, by itself and with the context of &quot;cloud helps you do the right thing for HA&quot;, is fucking moronic.&lt;&#x2F;p&gt;
&lt;p&gt;You could try to argue that it&#x27;s hard to do networking right, or that they have a legacy to take care of. -- But why the fuck is that &lt;em&gt;my&lt;&#x2F;em&gt; problem if I&#x27;m paying them hand over fist for them to commoditise my compute? As soon as Google released global based routing Bezos should have been commanding improvement from the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Telescreen#:~:text=Winston%2C%20a%20member%20of%20the,monitored%20by%20the%20Thought%20Police.&quot;&gt;telescreens&lt;&#x2F;a&gt; that I am certain are placed on every engineers desk (and cars, and homes).&lt;&#x2F;p&gt;
&lt;p&gt;To add insult to injury, doing it properly, for years, costed more and is so complex there&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;certification&#x2F;certified-advanced-networking-specialty&#x2F;&quot;&gt;an actual certification for it!&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;(I guess &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cloud.google.com&#x2F;learn&#x2F;certification&#x2F;cloud-network-engineer&quot;&gt;google has one too&lt;&#x2F;a&gt; but I&#x27;m not aware of people &lt;em&gt;actually&lt;&#x2F;em&gt; taking it or needing it, AWS claims &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;certification&#x2F;#:~:text=As%20of%20February%202024%2C%20there,%2C%20professional%2C%20and%20specialty%20categories.&quot;&gt;1.31M certificate holders though&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Newcomers often assume that basic networking within a cloud environment would be region-wide or at least span multiple Availability Zones (AZs) for redundancy.&lt;&#x2F;p&gt;
&lt;p&gt;EC2 instances are isolated within a single AZ by default - not obvious to newcomers. It violates principle of least surprise when talking about a &quot;cloud&quot; that&#x27;s &lt;em&gt;supposed&lt;&#x2F;em&gt; to be helping you become more reliable, and again, doing it properly costed more, meaning people naturally deviated their dev environments from prod.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;elbs&quot;&gt;ELBs&lt;&#x2F;h3&gt;
&lt;p&gt;The classic ELB (now considered a legacy service) has a default configuration that doesn&#x27;t distribute traffic across multiple AZs.&lt;&#x2F;p&gt;
&lt;p&gt;This might now be a legacy service, but let me repeat that.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;THE FUCKING LOAD BALANCER -FOR 15 YEARS- DID NOT LOAD BALANCE ACROSS ZONES BY DEFAULT&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You need to choose the &quot;Application Load Balancer&quot; or &quot;Network Load Balancer&quot; and configure them appropriately for high availability.&lt;&#x2F;p&gt;
&lt;p&gt;Obviously this is not the case in GCP, networking is global by default and load balancers actually balance across zones; disks can also be regional- it&#x27;s just one click away (and it costs double, but, it works, and this is what I&#x27;d expect).&lt;&#x2F;p&gt;
&lt;p&gt;I guess they consider it a legacy service, so they finally fixed it after a decade and a half of service, so I should give them some credit...&lt;&#x2F;p&gt;
&lt;p&gt;But even the new &quot;ALB&quot; has &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.aws.amazon.com&#x2F;elasticloadbalancing&#x2F;latest&#x2F;userguide&#x2F;how-elastic-load-balancing-works.html#availability-zones&quot;&gt;weird quirks&lt;&#x2F;a&gt; even though it does the right thing by default:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;After you disable an Availability Zone, the targets in that Availability Zone remain registered with the load balancer. However, even though they remain registered, the load balancer does not route traffic to them.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;WHAT?! WHY?!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ec2&quot;&gt;EC2&lt;&#x2F;h3&gt;
&lt;p&gt;Reliability is hard when the underlying systems become unavailable, Google was the first to support live migration between hosts- I don&#x27;t even notice it happening and I ran some performance sensitive applications.&lt;&#x2F;p&gt;
&lt;p&gt;AWS though? &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;serverfault.com&#x2F;a&#x2F;758612&quot;&gt;notice of termination, you have 4-24 hours to comply&lt;&#x2F;a&gt;. Or, none. Sometimes.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;In some cases, Amazon will notice their hardware is in a degraded state and tell you to get off of it (stop and start your instance) by a certain date or it will be stopped automatically.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;In some cases, there will be no warning and it will just stop. Or not enter STOP state, and simply become unreachable. It may or may not reboot after they take care of it. Sometimes, there will be an apology mail after the fact.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;You probably think that this shit is &quot;good enough&quot;, or maybe that we&#x27;ve recieved enough collective brain damage over time that it has &lt;em&gt;become &quot;good enough&quot;&lt;&#x2F;em&gt; to get by... even if it&#x27;s not perfect.. well...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2-good-enough-ease-of-use&quot;&gt;2. &quot;Good Enough&quot; != Ease of Use&lt;&#x2F;h2&gt;
&lt;p&gt;This section used to be titled: &lt;em&gt;&quot;Good enough&quot; helps you limp along or: you can&#x27;t 60% your way to good UX.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The insidious nature of the &quot;good enough&quot; approach is that it &lt;em&gt;works&lt;&#x2F;em&gt; 20-40% of the time, that&#x27;s why it&#x27;s pervasive; however, people like to take the &quot;good enough&quot; approach &lt;em&gt;every&lt;&#x2F;em&gt; time: and on a long enough timeline you end up with AWS.&lt;&#x2F;p&gt;
&lt;p&gt;I mean, &lt;em&gt;it works&lt;&#x2F;em&gt;, right, but why can&#x27;t I see what project I&#x27;m in? (sorry: &quot;Account&quot;)...&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.dijit.sh&#x2F;gcp-the-only-good-cloud&#x2F;.&#x2F;img&#x2F;aws-sso.png&quot; alt=&quot;aws sso weirdness&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Look, there was a really big reason why Windows kicked the absolute crap out of everything else back in the day, and part of that reason was a slavish devotion to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ics.uci.edu&#x2F;~kobsa&#x2F;courses&#x2F;ICS104&#x2F;course-notes&#x2F;Microsoft_WindowsGuidelines.pdf&quot;&gt;user interface design, with an eye for accessibility and consistency&lt;&#x2F;a&gt;; they forgot this, but remains a large part of what put them on top. &lt;sup&gt;[&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=22475521&quot;&gt;HN Comments&lt;&#x2F;a&gt; ]&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Clearly AWS doesn&amp;#39;t believe this.&lt;&#x2F;p&gt;
&lt;p&gt;I mean, what is wrong with my SSH key?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.dijit.sh&#x2F;gcp-the-only-good-cloud&#x2F;.&#x2F;img&#x2F;ssh-key-wtf.png&quot; alt=&quot;aws ssh key weirdness&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There&amp;#39;s no &amp;quot;help&amp;quot; dialog, or information about supported key types, or examples, literally sweet &lt;em&gt;fuck-all&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally why would I care about &amp;quot;terminated&amp;quot; machines? I can&amp;#39;t do anything with the info here? If I need to know what&amp;#39;s terminated shouldn&amp;#39;t I just look at logs? I can&amp;#39;t recover anything from these; it&amp;#39;s not like I can &amp;quot;un&amp;quot;-terminate them or recover the drive...&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.dijit.sh&#x2F;gcp-the-only-good-cloud&#x2F;.&#x2F;img&#x2F;terminated-instances.png&quot; alt=&quot;AWS Terminated machines cluttering my display&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And.. while I&amp;#39;m here... why can&amp;#39;t I see instances hosted in other regions?&lt;&#x2F;p&gt;
&lt;p&gt;Clearly UI weirdness isn&amp;#39;t a deal-breaker, but it&amp;#39;s a constant reminder that AWS settles for &amp;#39;good enough&amp;#39; instead of striving for excellence, which they &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cnbc.com&#x2F;2024&#x2F;04&#x2F;30&#x2F;aws-q1-earnings-report-2024.html&quot;&gt;should be able to afford&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Let&amp;#39;s see how Google handles those things:&lt;&#x2F;p&gt;
&lt;p&gt;First, logging in allows you to have a standard google account or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cloud.google.com&#x2F;architecture&#x2F;identity&#x2F;best-practices-for-federating&quot;&gt;federated identity&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;and.. project&amp;#39;s&#x2F;workspaces are human readable...&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.dijit.sh&#x2F;gcp-the-only-good-cloud&#x2F;img&#x2F;gcp-project.png&quot; alt=&quot;gcp project&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Better yet, my VM list doesn&amp;#39;t have dead resources and is actually &lt;strong&gt;global by default&lt;&#x2F;strong&gt;, meaning no random resources in Frankfurt that are chewing our bill silently for years on end that we never noticed.. (Yes, that happened because we took our eye off the ball).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.dijit.sh&#x2F;gcp-the-only-good-cloud&#x2F;img&#x2F;gcp-instances-list.png&quot; alt=&quot;an image of a GCP instances list of my source-code management project&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;(ignore the fact they&amp;#39;re in the same zone, they have regional disks :&amp;#39;) )&lt;&#x2F;p&gt;
&lt;p&gt;And they even have human readable names, which are used by the API and CLI too...&lt;&#x2F;p&gt;
&lt;p&gt;... Oh wait, what the fuck is that!? In three places in that image I see the word &amp;quot;Save&amp;quot;!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;&quot;&gt;3. Cost optimisations&lt;&#x2F;h2&gt;
&lt;p&gt;AWS Cost management is basically a meme at this point, they even invented a term for it &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.oreilly.com&#x2F;library&#x2F;view&#x2F;cloud-finops&#x2F;9781492054610&#x2F;ch04.html&quot;&gt;FinOps&lt;&#x2F;a&gt; (hey, weren&amp;#39;t we supposed to be reducing operations?! - we just invented a whole fucking role, and a complicated boring one!).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.dijit.sh&#x2F;gcp-the-only-good-cloud&#x2F;img&#x2F;aws-cost-meme.png&quot; alt=&quot;a meme depicting a new user trying out AWS and getting a large bill; then an experienced user doing a more complicated action then being saddled with a large bill&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile Google bakes cost saving into its offering with a comprehensive pricing calculator, sustained usage based discounts (in addition to comitted use, like in AWS), and a &amp;quot;FinOps hub&amp;quot;&lt;sup&gt;🤮&lt;&#x2F;sup&gt; to help you organise and further reduce your spend...&lt;&#x2F;p&gt;
&lt;p&gt;The actual cost reporting system is pretty nice too, and you can export it to BigQuery and get &lt;em&gt;extremely&lt;&#x2F;em&gt; detailed reporting if you really wanted.&lt;&#x2F;p&gt;
&lt;p&gt;Yeah, it&amp;#39;s still a goddamn rip-off! Cloud&amp;#39;s gonna bleed you dry compared to a colo, no question. You&amp;#39;ll be paying five to even &lt;em&gt;eleven&lt;&#x2F;em&gt; times the price sometimes.&lt;&#x2F;p&gt;
&lt;p&gt;At least they&amp;#39;re not sneaky bastards about it, though. They&amp;#39;ll show you how to trim some fat off that bill.&lt;&#x2F;p&gt;
&lt;p&gt;And let&amp;#39;s face it, one engineer can &lt;em&gt;actually&lt;&#x2F;em&gt; move mountains on this platform. No bullshit, no hidden gotchas - it&amp;#39;s compute the way it should be: comodditised and without brainrot.&lt;&#x2F;p&gt;
&lt;p&gt;Imagine getting paged at 3am. You&amp;#39;re bleary-eyed, trying to figure out if &lt;code&gt;i-0256162531f6a2ed&lt;&#x2F;code&gt; or &lt;code&gt;i-0256162531f6a2ec&lt;&#x2F;code&gt; is the problem VM. They both have the same &amp;#39;Name&amp;#39; label&#x2F;tag, and you accidentally opened the dev environment instead of production. You need some obscure browser extension just to tell them apart!&lt;&#x2F;p&gt;
&lt;p&gt;And don&amp;#39;t even get me started on naming conventions. Instances can share the same &amp;#39;Name&amp;#39; label so you can&amp;#39;t trust, and if you want to auto-generate unique names in an autoscaling group, you need to write a Lambda function. Seriously, I laughed out loud when I saw &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;stackoverflow.com&#x2F;questions&#x2F;44609595&#x2F;set-a-unique-tag-to-each-instance-of-terraform-aws-autoscaling-group-module&#x2F;44613778#44613778&quot;&gt;that was the main recommended solution&lt;&#x2F;a&gt;. It&amp;#39;s ridiculous!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-1&quot;&gt;Google is scary though&lt;&#x2F;h2&gt;
&lt;p&gt;Google is a scary proposition for two reasons;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Google itself tends to deprecate &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;steve-yegge.medium.com&#x2F;dear-google-cloud-your-deprecation-policy-is-killing-you-ee7525dc05dc&quot;&gt;fucking everything&lt;&#x2F;a&gt; it seems.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;It&amp;#39;s not popular enough, so &amp;quot;enhancements&amp;quot; are AWS first, like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cloudcraft.co&quot;&gt;cloudcraft&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Point #2 is self-fulfilling, so let&amp;#39;s not even bother talking about it.&lt;&#x2F;p&gt;
&lt;p&gt;Point #1 however, is important.&lt;&#x2F;p&gt;
&lt;p&gt;Windows is well-known for its commitment to backward compatibility, sometimes to a fault.  This can lead to frustrating situations, like having 32 different &lt;code&gt;USER_INFO&lt;&#x2F;code&gt; struct &amp;quot;levels&amp;quot; for interacting with win32 functions. The problem is, many of these structures don&amp;#39;t play nicely with group functions because groups don&amp;#39;t let you work with usernames directly. Groups in Windows fundamentally, only understand security identifiers (sids), &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;windows&#x2F;win32&#x2F;api&#x2F;lmaccess&#x2F;ns-lmaccess-localgroup_members_info_2&quot;&gt;not usernames&lt;&#x2F;a&gt;, which can make things tricky for developers as there&amp;#39;s no &lt;code&gt;USER_INFO&lt;&#x2F;code&gt; struct level that understands &lt;code&gt;SID&lt;&#x2F;code&gt;-s.. A fucking nightmare. (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dijit&#x2F;statham&#x2F;blob&#x2F;master&#x2F;agent&#x2F;src&#x2F;helpers_windows.rs#L213-L245&quot;&gt;ask how I know&lt;&#x2F;a&gt;, go on..)&lt;&#x2F;p&gt;
&lt;p&gt;A slavish devotion to backwards compatibility stifles innovation, this is largely the reason Moxie Marlinspike &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;signal.org&#x2F;blog&#x2F;the-ecosystem-is-moving&#x2F;&quot;&gt;did not enjoy the idea of federating Signal&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Thus, we should allow our clouds to shed the dead weight. Crucially, it&amp;#39;s better for us too: since more work can go into working on better developer experience instead of complicated cruft that makes things slower, cruftier, complex and more idiosyncratic over time (like Windows).&lt;&#x2F;p&gt;
&lt;p&gt;Maybe I&amp;#39;m biased, because as a game developer we&amp;#39;re usually quick to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;engineersneedart.com&#x2F;blog&#x2F;movefast&#x2F;movefast.html&quot;&gt;move fast and abandon things&lt;&#x2F;a&gt; if they&amp;#39;re not working.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-2&quot;&gt;Cloud in general&lt;&#x2F;h2&gt;
&lt;p&gt;Look, the cloud is a rip-off. All that talk about its benefits is just short-term thinking in disguise. Even GCP, which I think is the best of the bunch, is still highway robbery. Sure, it&amp;#39;s great for handling sudden traffic spikes or figuring out your needs, but in the long run, you&amp;#39;ll save a fortune by ditching the cloud and running your own hardware. My build servers paid for themselves &lt;em&gt;in two damn months&lt;&#x2F;em&gt;! And don&amp;#39;t give me that &amp;quot;humans cost money&amp;quot; shit: AWS experts cost way more than old-school sysadmins - and I haven&amp;#39;t touched my build servers in almost two years. It&amp;#39;s all a scam to funnel your startup&amp;#39;s cash straight to Bezos.&lt;&#x2F;p&gt;
&lt;p&gt;The whole cloud industry is a racket designed to suck your startup dry because you&amp;#39;re too stupid to think beyond 6 months and you have heard stories regarding heavily underfunded ops teams. This is made worse by slick consultants, professional services salesmen and developer evangelists whispering sweet nothings in your ear about &amp;quot;scale&amp;quot; and &amp;quot;abstraction&amp;quot; while you rack up a bill you can&amp;#39;t afford, and learn things you can never apply outside. Hopefully they at least lubed you up with $100,000 in startup credits, if not, what were you fucking thinking?&lt;&#x2F;p&gt;
&lt;p&gt;You traded freedom for a little comfort in being told you were smart. Dumbass.&lt;&#x2F;p&gt;
&lt;p&gt;GCP might have its quirks, but at least it doesn&amp;#39;t try to rewire your brain like AWS. You can actually get shit done without memorizing their entire goddamn encyclopedia, and the skills you learn are useful elsewhere, unlike AWS&amp;#39;s proprietary nonsense. GCP is a tool, not a religion – except maybe for their IAM, which is still less painful than AWS&amp;#39;s convoluted mess.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;-3&quot;&gt;Azure?&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Jan, you&amp;#39;re talking a lot about AWS vs GCP (and, no cloud at all) but what about Azure?&amp;quot;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Well... If you&amp;#39;re using Azure, it&amp;#39;s because your CFO decided that since you already have a deal with Microsoft for Office, why not also put it on the same bill instead of having another relationship with another vendor.&lt;&#x2F;p&gt;
&lt;p&gt;Nobody chooses Azure for &lt;em&gt;Azure&lt;&#x2F;em&gt;, even the Azure representatives didn&amp;#39;t recommend Azure to me, so they&amp;#39;re even aware of this. (which, honestly endears me to other service offerings from Microsoft...).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-4&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;audio controls&gt;
  &lt;source src=&quot;audio&#x2F;conclusion.aac&quot; type=&quot;audio&#x2F;aac&quot;&gt;
Your browser does not support the audio element.
&lt;&#x2F;audio&gt;
&lt;p&gt;So, GCP: Makes it easier to do the right thing by default, has &lt;em&gt;significantly&lt;&#x2F;em&gt; improved DX&#x2F;UX (no missing instances because they&amp;#39;re in another castle or garbage errors, or missing help, and you can reference instances by human readable names) &lt;em&gt;and&lt;&#x2F;em&gt; does it&amp;#39;s best to help you understand costs and save money... the three reasons you would even use a cloud in the first place (supposedly).&lt;&#x2F;p&gt;
&lt;p&gt;Issues raised with AWS could be answered with &amp;quot;you&amp;#39;re holding it wrong&amp;quot;, but isn&amp;#39;t it the &lt;em&gt;entire fucking point&lt;&#x2F;em&gt; that it should be easy to hold it right? This is &lt;em&gt;supposed&lt;&#x2F;em&gt; to be replacing Ops specialisation, not &lt;em&gt;changing&lt;&#x2F;em&gt; ops specialisation to be vendor specific instead!&lt;&#x2F;p&gt;
&lt;p&gt;Isn&amp;#39;t the point that &amp;quot;the cloud&amp;quot; is meant to be a clean abstraction over a commodity system, so we spend less time and energy on this cruft? That it requires less staff, less time and more focus on the product itself?&lt;&#x2F;p&gt;
&lt;p&gt;If that&amp;#39;s the case, then.. Google cloud is the only game in town.&lt;&#x2F;p&gt;
&lt;p&gt;But, they &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arstechnica.com&#x2F;google&#x2F;2023&#x2F;09&#x2F;google-domains-halts-registrations-as-it-waits-for-the-google-grim-reaper&#x2F;&quot;&gt;might deprecate your shit&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;(In fairness, Google Domains was not a Google &lt;em&gt;Cloud&lt;&#x2F;em&gt; product (which was actually extremely annoying when using it before); it&amp;#39;s a notable distinction because Google Cloud products seem to always have worthwhile replacements waiting for them. That said, yes, it pissed me off. I recommend &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;porkbun.com&#x2F;&quot;&gt;porkbun&lt;&#x2F;a&gt; as they suck &lt;em&gt;less&lt;&#x2F;em&gt;.)&lt;&#x2F;p&gt;
&lt;p&gt;Personally, I see that as a good thing, the absolute best use of cloud is to scale a bit for peaks, or to save you time and energy up front when you are figuring things out. Staying in any cloud long-term is a money losing strategy on all fronts.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Enforcement can have the inverse effect</title>
        <published>2023-01-27T00:00:00+00:00</published>
        <updated>2023-01-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/enforcement-can-have-the-inverse-effect/"/>
        <id>https://blog.dijit.sh/enforcement-can-have-the-inverse-effect/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/enforcement-can-have-the-inverse-effect/">&lt;p&gt;I live in a small city which is extraordinarily easy to cycle through.&lt;&#x2F;p&gt;
&lt;p&gt;Everything is a short distance, the cycle infrastructure is kept tidy and there is a distinct absence of anything that could even remotely be considered a hill.&lt;&#x2F;p&gt;
&lt;p&gt;One issue that keeps cycling down (if there are any) is that unscrupulous ball-bags&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-ball-bags-1&quot;&gt;&lt;a href=&quot;#fn-ball-bags&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; tend to steal bicycles rather often, there are even remarks that &quot;bikes are socially owned, you never own one &lt;em&gt;personally&lt;&#x2F;em&gt;&quot;. Which, if you enjoy having a bike with good gearing and a high degree of comfort (especially one that cost a lot) is unsettling to hear.&lt;&#x2F;p&gt;
&lt;p&gt;The advent of e-Scooters all but eliminated these worries, they &lt;em&gt;are&lt;&#x2F;em&gt; a communal asset, they are sufficiently fast, low effort (so you&#x27;re not sweaty when you arrive) and ubiquitious enough that you can be fairly certain you will find one. These nippy little things are also fantastic on the cycling infrastructure, going just marginally faster than the average cyclist; allowing you to overtake excessively slow cyclists easily, but keep (or match pace) with ordinary ones.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, people are ball-bags.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;enforcement-can-have-the-inverse-effect&#x2F;calgary-tweet.jpeg&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;enforcement-can-have-the-inverse-effect&#x2F;calgary-tweet_small.jpeg&quot; alt=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;cityofcalgary&#x2F;status&#x2F;1303753437402656768&#x2F;photo&#x2F;1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Even the bikes aren&amp;#39;t safe.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;enforcement-can-have-the-inverse-effect&#x2F;bike-lock.jpg&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;enforcement-can-have-the-inverse-effect&#x2F;bike-lock_small.jpg&quot; alt=&quot;4MH9wwGzyVJcqrccr81TJqAOc0XRC2wMX8OITY8nINE.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;People park these things wherever they feel like without regard to foot, bike or car traffic, ride as fast as possible through pedestrian areas and often ride with two or even three people on a scooter at a time!&lt;&#x2F;p&gt;
&lt;p&gt;Truly, something must be done.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;&quot;&gt;Fix 1: Speed limit pedestrian areas and tight areas&lt;&#x2F;h2&gt;
&lt;p&gt;I imagine the discussion happening at HQ:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our scooters have in-built GPS and we can control the speed of the motor, they&amp;#39;re also connected via LTE.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is perfect.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;We will draw a geofence and limit the vehicle speed in those areas!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Genius!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Sounds good? Right?&lt;&#x2F;p&gt;
&lt;p&gt;The problem is for purely software approaches like this that rely on hardware is: GPS is not &lt;em&gt;actually&lt;&#x2F;em&gt; perfectly precise, cars tend to fake it by assuming you&amp;#39;ll be on the road (which you can usually tell is happening when you start pulling off of a road that the map knows about to a road that the map doesn&amp;#39;t know about).&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, GPS on low energy devices also tends to... poll. Leaving the GPS streaming is computationally expensive and antennas area major power suck. So, if you&amp;#39;re running an eScooter company, you would probably set that polling rate to be as low as you can get away with, maybe once every 90 seconds.&lt;&#x2F;p&gt;
&lt;p&gt;You can see this battery drain in real life by leaving (Google|Apple) Maps open on your iPhone.&lt;&#x2F;p&gt;
&lt;p&gt;What this means is, you can enter a designated slow zone, but the scooter does not immediately know it&amp;#39;s in a slow zone. Thus you can go full speed through slow zones! At least for a little while.&lt;&#x2F;p&gt;
&lt;p&gt;This works the inverse too, if you&amp;#39;re in a slow zone and leave: well, be prepared to wait for the scooter to realise you left!&lt;&#x2F;p&gt;
&lt;p&gt;Commonly the issue becomes, though, that small areas of the map that are designated slow zones but that you pass by can add a minute or two on your 5 minute journey. If you spend enough time in the slow zone for it to notice that you&amp;#39;re &lt;em&gt;in a slow zone&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Thus, the incentive is to absolutely &lt;em&gt;gun it&lt;&#x2F;em&gt; through those little sections, in the hope the GPS doesn&amp;#39;t catch you.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;enforcement-can-have-the-inverse-effect&#x2F;enforcement-screenshot.png&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;enforcement-can-have-the-inverse-effect&#x2F;enforcement-screenshot_small.png&quot; alt=&quot;IMG_DA925E8465AF-1.png&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Doing the right thing here and slowing down is going to make your journey longer, which makes you pay more.&lt;&#x2F;p&gt;
&lt;p&gt;You&amp;#39;re basically punishing the correct behaviour.&lt;&#x2F;p&gt;
&lt;p&gt;Worse: it can be more dangerous either way as the slowdown is completely unpredictable and the GPS can put you in a slow area even if you&amp;#39;re not actually riding &lt;em&gt;in one&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-1&quot;&gt;Fix 2: Parking in designated areas&lt;&#x2F;h2&gt;
&lt;p&gt;I can almost hear another conversation at HQ:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;People keep parking like dumbasses across pavements,&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;but we have a wonderfully precise GPS system that we&amp;#39;re already using &lt;em&gt;and&lt;&#x2F;em&gt; we have a collection of painted areas on a city map that can fence parking!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;What we can do, is prevent ending the ride and locking the scooter in any un-designated parking area!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;So, Another GPS solution, but one that isn&amp;#39;t affected by a low polling rate, but given how imprecise GPS can be, I don&amp;#39;t think I&amp;#39;d ever be convinced that this was going to work.&lt;&#x2F;p&gt;
&lt;p&gt;Hrm, yeah, this is me standing in a blue square area.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;enforcement-can-have-the-inverse-effect&#x2F;inverse-effect.jpeg&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;enforcement-can-have-the-inverse-effect&#x2F;inverse-effect_small.jpeg&quot; alt=&quot;IMG_A4AEB157F765-1.jpeg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If I was trying to park a scooter the ride sharing app would complain about this. I would need to move my expected coordinates (orange dot) to the middle of the blue painted area by walking east to end my ride, if I walk east though I will be leaving the scooter awkwardly placed across a pedestrian footpath. (those light grey areas are pedestrian walk ways)&lt;&#x2F;p&gt;
&lt;p&gt;This is, again, incentivising the wrong behaviour.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-2&quot;&gt;Other example: Piracy&lt;&#x2F;h2&gt;
&lt;p&gt;Movie piracy is the most blatant example of what I’m talking about.&lt;&#x2F;p&gt;
&lt;p&gt;Those buying DVDs to watch movies legitimately in the 00’s had to sit through minutes of unskippable ads and egregious anti-piracy warnings.&lt;&#x2F;p&gt;
&lt;p&gt;Those that actually pirated had &lt;em&gt;a better experience&lt;&#x2F;em&gt; in their movie watching.&lt;&#x2F;p&gt;
&lt;p&gt;Almost assuredly leading to (a non-zero) number of people into the loving embrace of torrent sites.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-3&quot;&gt;Conclusion, if there is one.&lt;&#x2F;h2&gt;
&lt;p&gt;I consider myself a conscientious rider, I park away from pedestrian traffic, usually next to a bicycle stand -- I ride with care around areas where people cross -- I ride alone, and never on the pavement.&lt;&#x2F;p&gt;
&lt;p&gt;However, even I have been tempted to say &amp;quot;fuck it&amp;quot; and speed through &lt;em&gt;&amp;quot;slow&amp;quot;&lt;&#x2F;em&gt; areas. When I am late for something and the parking does not allow me to lock my scooter, I am tempted to just walk to where my GPS allows parking and abandoning the scooter wherever &lt;strong&gt;that&lt;&#x2F;strong&gt; might be.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;&#x2F;strong&gt; I used VOI for these examples, and to their credit, they are allowing you to lock your scooters outside of those areas and they have improved the polling rate of the scooters &lt;em&gt;a lot&lt;&#x2F;em&gt;, though it does remain a problem.&lt;&#x2F;p&gt;
&lt;p&gt;The main point I&amp;#39;m driving here is that sometimes enforcement encourages ordinary users into doing the wrong thing, or needlessly punishes them.&lt;&#x2F;p&gt;
&lt;p&gt;I don&amp;#39;t have any solutions for the problems I presented, perhaps clear license plates and harsh penalties if reported for dangerous driving (along with looking at the telemetry of the ride) and &lt;em&gt;actually validating the parking is free from obstructing the path&lt;&#x2F;em&gt; which could be done with the picture you send at the end of ride.&lt;&#x2F;p&gt;
&lt;p&gt;However, I&amp;#39;m mostly interested in the realisation I had while riding that if I didn&amp;#39;t care about slowing down or where I lock my scooter; I would have been better off in terms of time and money.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-ball-bags&quot;&gt;
&lt;p&gt;Derogatory British slang word for a thoughtless and ignorant individual. &lt;a href=&quot;#fr-ball-bags-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>That time my manager spent $1M on a backup server that I never used</title>
        <published>2022-10-21T00:00:00+00:00</published>
        <updated>2022-10-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/that-time-my-manager-spend-1m-on-a-backup-server/"/>
        <id>https://blog.dijit.sh/that-time-my-manager-spend-1m-on-a-backup-server/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/that-time-my-manager-spend-1m-on-a-backup-server/">&lt;p&gt;The games industry is weird: It simultaneously lags behind the rest of the tech industry by half-a-decade in some areas and yet it can be years ahead in others.&lt;&#x2F;p&gt;
&lt;p&gt;What attracted me to the industry was not the glossy veneer working on entertainment products, or making products that I enjoyed using (I wouldn&#x27;t describe myself as a gamer): I love solving &lt;em&gt;problems&lt;&#x2F;em&gt;, especially problems that are not easily solved.&lt;&#x2F;p&gt;
&lt;p&gt;When I joined Ubisoft in 2014 I was put in the Online Programming Team as a person who would run Ops; this was awful because everything was Windows-based.&lt;&#x2F;p&gt;
&lt;p&gt;Kubernetes wasn&#x27;t on the horizon, and even if it was, Docker itself was extremely immature and could not run native Windows binaries yet.&lt;&#x2F;p&gt;
&lt;p&gt;What we had instead was our own implementation of distributed systems.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-environment&quot;&gt;The Environment&lt;&#x2F;h2&gt;
&lt;p&gt;A highly-optimised and extremely robust service discovery system, reverse proxies which were intelligent enough to &lt;strong&gt;force&lt;&#x2F;strong&gt; exponential backoff of clients without taking in any load on themselves, a supervisor that could be instrumented via web-sockets, internal service-to-service encryption with a centralised rotating key system, in-memory log viewers that could be reached with a browser over the network, and even stats collectors that ran in-browser. -- all of this, written by hand in C++, nothing off the shelf, very minimal dependencies (OpenSSL being the only one of note), everything running on Windows and completely bespoke.&lt;&#x2F;p&gt;
&lt;p&gt;As a predominantly Unix Adminsys&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-adminsys-1&quot;&gt;&lt;a href=&quot;#fn-adminsys&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; you can do one of two things in this situation:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Double down on what you know and try to bend the problem into a solvable one. (think: Wine, I guess)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Lean in to the surrounding ecosystem and re-learn the best way of doing things. (Do things the Microsoft Way with SCCM + GPO).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I chose option 3: treat Windows like a appliance or black box, lean on an execution framework that has a solid Windows agent, write all of our tooling in a general scripting language that the remote execution framework can call. (We chose SaltStack+Python).&lt;&#x2F;p&gt;
&lt;p&gt;What was great about this approach is that we ultimately understood exactly what was happening in our environment. Nothing was unknown, there was no “magic” program or service doing anything, but simultaneously there was nothing to lean back on: no shell, no Unix tools like sed&#x2F;awk, no SSH. If you need to modify a file, you have to write a program to do that. If you need to make Windows do something that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;previous-versions&#x2F;windows&#x2F;it-pro&#x2F;windows-server-2012-r2-and-2012&#x2F;hh831791(v=ws.11)&quot;&gt;GPO&lt;&#x2F;a&gt; normally does, you’re writing registry entries by hand, otherwise you’re doing a weird dance of daisy-chaining RDP sessions over a double VPN (yay corporate policies!).&lt;&#x2F;p&gt;
&lt;p&gt;An astute reader might be wondering at this point: &quot;Doesn&#x27;t Ubisoft have a way of doing this properly? They&#x27;re a large games publisher and games probably had Windows servers before! Right?&quot;&lt;&#x2F;p&gt;
&lt;p&gt;You are very right.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wwud-what-would-ubisoft-do&quot;&gt;WWUD :: What Would Ubisoft Do?&lt;&#x2F;h2&gt;
&lt;p&gt;Ubisoft&#x27;s pedigree in online games was exclusively tiny, barely reliable systems.&lt;&#x2F;p&gt;
&lt;p&gt;Think: Infrequently accessed NAT punching servers, minor single-use matchmaking to facilitate peer-to-peer client connections, leaderboards and the very occasional &lt;em&gt;real&lt;&#x2F;em&gt; game-server (but that was an oddity).&lt;&#x2F;p&gt;
&lt;p&gt;The online subsystems needed to create a game like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Tom_Clancy%27s_The_Division&quot;&gt;The Division&lt;&#x2F;a&gt; was a step well beyond what the organisation had ever done, the closest online system of note would be the despised &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.rockpapershotgun.com&#x2F;ubisoft-drm-piracy-interview&quot;&gt;always-online DRM system&lt;&#x2F;a&gt; internally named &lt;em&gt;&quot;Orbit&quot;&lt;&#x2F;em&gt; and Uplay which was also reviled. Ubisoft had built an organisation optimised for treating developers like fools and thus it had built itself into a corner; all processes were designed around the idea that hardware is a single size, that all needs are similar, that it&#x27;s an afterthought and especially: that developers do not understand what is required, so don&#x27;t let them set requirements.&lt;&#x2F;p&gt;
&lt;p&gt;So believe me when I say we had to fight tooth and nail to get &lt;em&gt;even an extra disk&lt;&#x2F;em&gt; installed into our bare-metal machines.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;data-consistency-as-a-requirement&quot;&gt;Data Consistency as a Requirement&lt;&#x2F;h2&gt;
&lt;p&gt;Games as a Service (puke) have an additional burden that may seem absurdly obvious but I think often goes overlooked: We are the arbiters and stewards of your player profile.&lt;&#x2F;p&gt;
&lt;p&gt;We do not store your player profile on your console or PC, you never get to see it in its binary form, instead what we do is we pass your player profile from game-server to central-point to game-server. This process is actually fairly fast and involves some minor locking. I was given the task of ensuring that the data-storage of this thing is extremely performant and extremely durable. &lt;em&gt;&quot;Downtime is preferable to losing committed data.&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can see why; imagine that you just completed an herculean task and had been rewarded with a highly coveted extremely rare prize, a dizzyingly low chance of being replicated. Well, if we lost that, you would be rightfully angry.&lt;&#x2F;p&gt;
&lt;p&gt;My responsibility would be that we do not lose committed data.&lt;&#x2F;p&gt;
&lt;p&gt;This might seem very easy to do actually, lots of people think that disks are relatively reliable, but when you&#x27;re making the statement that &quot;I do not lose data&quot; and begin real investigation you will quickly find that many databases that are popular are totally fine losing data. MongoDB being the most famous example that I can think off of the top of my head. Others: like hbase, only ensure persistence to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.usenix.org&#x2F;legacy&#x2F;publications&#x2F;library&#x2F;proceedings&#x2F;usenix01&#x2F;full_papers&#x2F;kroeger&#x2F;kroeger_html&#x2F;node8.html&quot;&gt;VFS&lt;&#x2F;a&gt;, as-in, they&#x27;re not flushing their writes all the way to disk, they just assume that it&#x27;s your operating systems responsibility now. Not comforting when you know that VFS is caching in memory..&lt;&#x2F;p&gt;
&lt;p&gt;Given our previous track record of building everything ourselves, I felt that this was probably the one place where you definitely &lt;em&gt;do not&lt;&#x2F;em&gt; want to do that, database maturity takes roughly 10 years, it&#x27;s very risky - and my Linux administration skills have actual use when it comes to managing the most popular database systems as they run on Linux!&lt;&#x2F;p&gt;
&lt;p&gt;At the time I joined we were using MySQL as the only backing store of the game; I spent 3 solid months dissecting MySQL, performance testing on &quot;unrealistic&quot; hardware to find internal locking bottlenecks, finding where it would lose data and under what conditions. The conclusion was mostly that MySQL can be convinced not to lose data but internal locking caused it to perform worse on many-core systems, PostgresSQL performed much better and had the additional benefit of being able to cleanly split write-ahead logs (which are largely sequential) and data to separate RAID devices. Something that MySQL doesn&#x27;t really support and would have to be hacked in using Symlinks on every table create.&lt;&#x2F;p&gt;
&lt;p&gt;PostgreSQL is robust in this regard, you can increase the commitment to guaranteeing data is persisted on disk further than most database engines, paired with disabling the performance giving &quot;write-back&quot; mode in the RAID controller and ultimately you will almost certainly never lose data, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=19119991&quot;&gt;except for that &lt;em&gt;one&lt;&#x2F;em&gt; thing&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Any persistence you deem important should of course be backed up, so I began investigating off-the-shelf solutions for database backups for Postgres.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;backups-enter-pgbackrest&quot;&gt;Backups :: Enter PgBackRest&lt;&#x2F;h2&gt;
&lt;p&gt;After evaluating a few options (including some manual ones) I settled on a tool called &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pgbackrest.org&quot;&gt;PgBackRest&lt;&#x2F;a&gt; which had a bunch of interesting features, but the best part of it was the fact that it ensured consistency of your backups!&lt;&#x2F;p&gt;
&lt;p&gt;I tested this and ordered the storage I would need to have a rolling 90 day window of backups (with older backups being taken off-site)..&lt;&#x2F;p&gt;
&lt;p&gt;The hardware request was rejected.&lt;&#x2F;p&gt;
&lt;p&gt;When I inquired as to why, I was told that Ubisoft has a standard backup solution which is replicated globally and sent to cold storage in a bank vault somewhere in Paris. I was told this is because we had lost some source code once upon a time and we could no longer build certain games because of that. -- Of course &quot;Source code&quot; was not even available in that network as we had a clear segmentation there, but I heeded the message.&lt;&#x2F;p&gt;
&lt;p&gt;&quot;That&#x27;s fine&quot;, I said, &quot;less for me to order!&quot;&lt;&#x2F;p&gt;
&lt;p&gt;I tested my solution with a couple of 400GiB SAS HDD&#x27;s and it seemed well and good, so on I continued.&lt;&#x2F;p&gt;
&lt;p&gt;When I eventually leveraged the right people to get access to this system (basically I was handed an IP and an instruction that it was NFS) it seemed very snappy, it was very quick to send data to it: I had even been given direct fibre lines attached to the database servers themselves, and in my testing I could completely saturate the drives I had been using for local backups.&lt;&#x2F;p&gt;
&lt;p&gt;I was happy.&lt;&#x2F;p&gt;
&lt;p&gt;Until the second day of using it.&lt;&#x2F;p&gt;
&lt;p&gt;You see: PgBackRest is &quot;smart&quot;; it will read the data that you previously wrote to create &quot;incremental&quot; backups (looks like a full backup, so you only need to restore it and continue replaying WAL from that point, which means faster restores). This means that you can have your big backup once per day which locks the database and causes a little bit of a backlog and then you can have hourly incremental backups which take less disk space and are much cheaper to take. In order to generate and additionally verify these incremental backups PgBackRest &lt;em&gt;must&lt;&#x2F;em&gt; read data.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-storage-appliance&quot;&gt;The Storage Appliance&lt;&#x2F;h2&gt;
&lt;p&gt;Our backup appliance didn&#x27;t like anyone reading data back from it, performance was abysmal, the only direct parable is AWS Glacier, but this was NFS and anyone who knows what NFS does when the remote is slow or unresponsive will tell you: this can kill your server. Linux will basically keep putting I&#x2F;O operations onto the pending task queue and eventually everything will just fall over as the kernel spends all it&#x27;s CPU time trying to evaluate what it needs to do next since the pending IO queue is full of things that are essentially just waiting, and the list just keeps growing.&lt;&#x2F;p&gt;
&lt;p&gt;Think: load average 900.&lt;&#x2F;p&gt;
&lt;p&gt;After talking to the storage admins, the architects, the managers, my managers, producers in increasing levels of agitation; one thing was clear: we will not buy dedicated hardware for storing backups, even if we cannot reliably make backups using the current system.&lt;&#x2F;p&gt;
&lt;p&gt;I investigated alternatives, dumping the data directly to this system, but reading it back was impossible, our recovery times would be measured in weeks, not minutes or hours as was my objective.&lt;&#x2F;p&gt;
&lt;p&gt;Eventually I found that this appliance was called a &quot;DataDomain&quot; and after reading the spec sheet, it was working as intended. &quot;Rehydration&quot; is an expensive operation for the device and it&#x27;s meant for more long-term archival storage. If only I had known what my target was...&lt;&#x2F;p&gt;
&lt;p&gt;When I pressed for why this was the case, &lt;strong&gt;why&lt;&#x2F;strong&gt; would you put the project at so much risk after spending hundreds of millions on a new game engine and a new IP (and it&#x27;s marketing) and an entirely new online subsystem...&lt;&#x2F;p&gt;
&lt;p&gt;The answer was simply: &quot;We have spent $1M of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Yves_Guillemot&quot;&gt;Yves&lt;&#x2F;a&gt;&#x27; money, and it will look bad if you do not use it&quot;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lost-data&quot;&gt;Lost Data&lt;&#x2F;h2&gt;
&lt;p&gt;Ironically, and as if there was some deity wishing to vindicate me, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gamespot.com&#x2F;articles&#x2F;the-division-missing-character-bug-to-be-fixed-soo&#x2F;1100-6438804&#x2F;&quot;&gt;a rogue and out of date game server node rose from the dead and began corrupting player profiles&lt;&#x2F;a&gt; shortly after.&lt;&#x2F;p&gt;
&lt;p&gt;The backups I had been creating during my tests was the only reason we had the ability to restore those corrupted profiles (albeit they &lt;em&gt;were&lt;&#x2F;em&gt; older than I would have liked).&lt;&#x2F;p&gt;
&lt;p&gt;Not long after: We got the hardware.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-can-i-learn-from-this&quot;&gt;What can I learn from this?&lt;&#x2F;h2&gt;
&lt;p&gt;There are times where buying what you need makes sense, it&#x27;s reasonable to question though what features are a priority for the service or product you buy. Our EMC DataDomain system was optimised primarily for ingesting huge volumes of traffic, but if we want incremental backups then perhaps we needed a something a little less intelligent.&lt;&#x2F;p&gt;
&lt;p&gt;Ubisoft had positioned itself into a strong position for a single type of workload and the organisation was unable to see any other way of working, I see some amount of echo&#x27;s of this in our cloud providers and the way we all bend our workflow to fit the limitations presented (or, sometimes, not presented).&lt;&#x2F;p&gt;
&lt;p&gt;Just because you spent $1M on a product because it fits the generic case does not mean it will fit &lt;em&gt;every&lt;&#x2F;em&gt; case.&lt;&#x2F;p&gt;
&lt;p&gt;Which brings me to a comment that someone said recently, which inspired this little tirade; when someone says that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;selfhosted&#x2F;comments&#x2F;y8r9pa&#x2F;why_were_leaving_the_cloud_basecamp_hey_founder&#x2F;it5235m&#x2F;&quot;&gt;Amazon has invested a lot of money into security&lt;&#x2F;a&gt; I think about the fact that Ubisoft spent $1M on a backup solution that didn&#x27;t work for &lt;strong&gt;the&lt;&#x2F;strong&gt; game that would have had the best use of it.&lt;&#x2F;p&gt;
&lt;p&gt;I wonder about what our providers really do with our money, since support is usually out of the question with cloud providers&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-support-1&quot;&gt;&lt;a href=&quot;#fn-support&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, I think about the fact that &lt;em&gt;being opaque&lt;&#x2F;em&gt; was a larger part of the problem than the thing itself being not fit for purpose -- it took months for me to even know the endpoint of my NFS IP endpoint was even called &quot;DataDomain&quot; -- and the fact that changing it was near impossible. The solution had to fail catastrophically first. It reminds me a little about that time that Amazon refused to tell me why my instances were unavailable because they were hiding a huge outage. I get the same vibe from these incidents.&lt;&#x2F;p&gt;
&lt;p&gt;I wonder further about &quot;build vs buy&quot;- because the things we built, always worked.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-rogue-1&quot;&gt;&lt;a href=&quot;#fn-rogue&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; The only problem was unruly providers and the power they held over us.&lt;&#x2F;p&gt;
&lt;p&gt;I don’t know what else to take away from this.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-adminsys&quot;&gt;
&lt;p&gt;An affectionate corruption of &quot;Sysadmin&quot;, usually uttered by those who remember the times when Sysadmin was doing what &quot;devops as a job title&quot; folks do now, and before it was resigned to history as a helpdesk role. &lt;a href=&quot;#fr-adminsys-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-support&quot;&gt;
&lt;p&gt;I&#x27;m well aware you can pay for some level of support but then the cost of cloud goes from a mere 10x higher to a eye-watering 12-13x higher. &lt;a href=&quot;#fr-support-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-rogue&quot;&gt;
&lt;p&gt;With the very notable and public exception of our rogue instance springing to life and murdering everyones profile. &lt;a href=&quot;#fr-rogue-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Microsoft Teams; using one monopoly to aid another</title>
        <published>2022-02-02T00:00:00+00:00</published>
        <updated>2022-02-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/teams-microsoft-monopoly/"/>
        <id>https://blog.dijit.sh/teams-microsoft-monopoly/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/teams-microsoft-monopoly/">&lt;p&gt;The title is not going to be a surprise to anyone reading this, but I&#x27;m getting frustrated and I have to vent.&lt;&#x2F;p&gt;
&lt;p&gt;At Sharkmob&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-sharkmob-1&quot;&gt;&lt;a href=&quot;#fn-sharkmob&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; we use Microsoft products... not really surprising; Microsoft Office is extremely common and- we make games.&lt;&#x2F;p&gt;
&lt;p&gt;What is nice about Sharkmob is that we get a lot more freedom to pick tools that work well for us, at Ubisoft&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-ubisoft-1&quot;&gt;&lt;a href=&quot;#fn-ubisoft&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; it was often an uphill struggle to get anything paid for (so: things like SSO never happened, and you had a seperate account for everything! BAH).&lt;&#x2F;p&gt;
&lt;p&gt;The reason I say this is because Teams being free for Office users is an immediate sell. It doesn&#x27;t matter if anything is better or if teams is awful. (and I&#x27;m not saying that, even if I personally dislike it), but this is enough for Ubisoft to just use it without further reason.&lt;&#x2F;p&gt;
&lt;p&gt;However, at Sharkmob we &lt;em&gt;can&lt;&#x2F;em&gt; have Slack enterprise, Github Premium, Zoom, 1Password, Jetbrains, whatever works best, and we use Okta SSO for literally everything.&lt;&#x2F;p&gt;
&lt;p&gt;I &lt;em&gt;love&lt;&#x2F;em&gt; this, but apparently Microsoft do not, as they have not been chosen as the blessed instant messaging system, and they will do anything in their power short of pointing a gun at our heads to ensure Teams is used.&lt;&#x2F;p&gt;
&lt;p&gt;Let me explain what I mean:&lt;&#x2F;p&gt;
&lt;p&gt;I only really started noticing Teams being pushed quite heavily when we migrated to Office365 and AzureAD, suddenly Outlook would make every meeting a teams meeting automatically and you had to manually opt-out each time.&lt;&#x2F;p&gt;
&lt;p&gt;They do warn you of this, but only if you hover over the little icon:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.dijit.sh&#x2F;teams-microsoft-monopoly&#x2F;images&#x2F;example_1.png&quot; alt=&quot;Example&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And sure enough if you add an attendee:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;teams-microsoft-monopoly&#x2F;attendee-example.png&quot; alt=&quot;Example With Attendee&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But I explicitly did &lt;em&gt;not&lt;&#x2F;em&gt; enable that, I unchecked the automatically checked box and pasted in my tasty little zoom link.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;teams-microsoft-monopoly&#x2F;my-meeting.png&quot; alt=&quot;MY MEETING!&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;However when I open my phone I&amp;#39;m greeted with:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;teams-microsoft-monopoly&#x2F;get-teams.png&quot; alt=&quot;Get Teams!&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I discussed this with my IT department&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;jmh&amp;gt;&lt;&#x2F;code&gt; Can&amp;#39;t we disable Teams with GPO?&lt;&#x2F;br&gt;
&lt;code&gt;IT_01&amp;gt;&lt;&#x2F;code&gt; We have our install of Office set to not install teams and we still find it getting pushed to machines...&lt;&#x2F;br&gt;
&lt;code&gt;IT_02&amp;gt;&lt;&#x2F;code&gt; Don&amp;#39;t forget windows 11 forces teams, cant be removed. And its personal teams only, you cant login with a &amp;quot;professional account&amp;quot; on it . that is a a separate app&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;On searching for &amp;quot;How to remove teams via GPO Windows 11&amp;quot; I was greeted with a lovely well instructed page which basically says: &lt;em&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.inthecloud247.com&#x2F;remove-the-built-in-teams-client-and-chat-icon-from-windows-11&#x2F;&quot;&gt;&amp;quot;You need to make a scheduled task that removes teams every day&amp;quot;&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Hell, there&amp;#39;s even an ugly &amp;quot;Teams Call&amp;quot; text button in the web version of outlook; you can&amp;#39;t escape it.
&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;teams-microsoft-monopoly&#x2F;teams-call.png&quot; alt=&quot;teams call&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I might be in the minority: but I don&amp;#39;t like being told what to do, so I&amp;#39;m going to find some way of sabotaging the Teams installation mechanism for all machines at Sharkmob.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-sharkmob&quot;&gt;
&lt;p&gt;Sharkmob is a studio and publisher of video games, and we&amp;#39;re hiring: https:&#x2F;&#x2F;career.sharkmob.com&#x2F; &lt;a href=&quot;#fr-sharkmob-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-ubisoft&quot;&gt;
&lt;p&gt;Ubisoft is the 3rd largest publisher of AAA games globally, responsible for such franchises as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Far_Cry&quot;&gt;Far Cry&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Assassin&amp;#x27;s_Creed&quot;&gt;Assassins Creed&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Tom_Clancy%27s&quot;&gt;Tom Clancy&lt;&#x2F;a&gt; games. I worked at Ubisoft Massive supporting The Division 1 and it&amp;#39;s sequel. &lt;a href=&quot;#fr-ubisoft-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>DevOps; a decade of confusion and frustration</title>
        <published>2021-06-29T00:00:00+00:00</published>
        <updated>2021-06-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/devops-confusion-and-frustration/"/>
        <id>https://blog.dijit.sh/devops-confusion-and-frustration/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/devops-confusion-and-frustration/">&lt;p&gt;&lt;u&gt;&lt;em&gt;What is &quot;DevOps&quot;?&lt;&#x2F;em&gt;&lt;&#x2F;u&gt; is a question I&#x27;ve heard a lot, often I&#x27;ve asked it implicitly to myself when reading job ads for &quot;DevOps Engineers&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;According to Patrick Debois, a Belgian &quot;agile&quot; consultant and former sysadmin who coined the term in January of 2009: the term &quot;Devops&quot; (not &quot;DevOps&quot;) was supposed to be &quot;Agile System Administrator&quot;.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-devops_timeline-1&quot;&gt;&lt;a href=&quot;#fn-devops_timeline&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; it is a compound of &quot;&lt;strong&gt;Dev&lt;&#x2F;strong&gt;elopers&quot;+&quot;&lt;strong&gt;Op&lt;&#x2F;strong&gt;erations&quot;+&quot;&lt;strong&gt;Days&lt;&#x2F;strong&gt;&quot;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-devopsdays-1&quot;&gt;&lt;a href=&quot;#fn-devopsdays&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and was not intended to be a methodology by that name or even a job title.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-devops_timeline-2&quot;&gt;&lt;a href=&quot;#fn-devops_timeline&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; There are some who refer to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=LdOe18KhtT4&quot;&gt;this talk, titled &quot;10+ Deploys Per day&quot;&lt;&#x2F;a&gt; as the true origin of the DevOps methodology, and primary launch pad for the name. The talk regales the challenges in contemporary companies, especially young ones: Operations staff were oft instructed: &quot;Do not break the site or let it get broke.. We consider slowness is broke-ness&quot;, while, contrarily Development staff were told: &quot;Move fast, deliver value&quot;, and both were measured on success of these objectives.&lt;&#x2F;p&gt;
&lt;p&gt;Now, of course moving fast means breaking things, a tradeoff Facebook fully embraced in its old mantra; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.brainyquote.com&#x2F;quotes&#x2F;mark_zuckerberg_453439&quot;&gt;&quot;move fast and break things&quot;&lt;&#x2F;a&gt; (though we did not presume they were talking about the very fabric of democracy); but even they came back to the notion that reliability is important, and changed their mantra to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mindmatters.ai&#x2F;2018&#x2F;10&#x2F;facebooks-old-motto-was-move-fast-and-break-things&#x2F;&quot;&gt;&quot;Move Fast With Stable Infra.&quot;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;1428&#x2F;&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;devops-confusion-and-frustration&#x2F;move-fast-break-things.png&quot; alt=&quot;I was almost fired from a job driving the hearse in funeral processions, but then the funeral home realized how much business I was creating for them.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;But, what if...&amp;quot;&lt;&#x2F;em&gt; said many people, who did not enjoy this fighting between reliability and feature development: &lt;em&gt;&amp;quot;.. we put developers and operations staff together to make DevOps!?&amp;quot;&lt;&#x2F;em&gt;, and thus the silo-slash-wall was broken down and everyone rejoiced.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;&quot;&gt;Except of course, that&amp;#39;s not what happened.&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Operations staff were renamed to be devops.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Developers were renamed to be devops.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;What we might call &amp;quot;release engineering&amp;quot; was also renamed devops.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Whole teams of people with a singular discipline: devops&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;All engineering: Devops&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Now you could be a junior sysadmin or a senior backend programmer only fluent in the most arcane elements of .NET and somehow you&amp;#39;re both: &amp;quot;DevOps&amp;quot; at least to someone.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;devops-confusion-and-frustration&#x2F;devops-everywhere.jpg&quot; alt=&quot;Devops everywhere&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There are also other methodolgies based on this: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.redhat.com&#x2F;en&#x2F;topics&#x2F;devops&#x2F;what-is-devsecops&quot;&gt;DevSecOps&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;smarchy.com&#x2F;blog&#x2F;f&#x2F;archops-part-ii-extending-the-devops-loop&quot;&gt;ArchOps&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jarbon.medium.com&#x2F;the-rise-of-testops-18e2ee922b02&quot;&gt;TestOps&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;searchcloudcomputing.techtarget.com&#x2F;definition&#x2F;CloudOps-cloud-operations#:~:text=Cloud%20operations%20(CloudOps)%20is%20the,into%20an%20app&amp;#x27;s%20underlying%20infrastructure.&quot;&gt;CloudOps&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;i&gt;&lt;center&gt;Dev&lt;b&gt;Oops&lt;&#x2F;b&gt;&lt;&#x2F;center&gt;&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-1&quot;&gt;Lack of Cohesive Vision&lt;&#x2F;h2&gt;
&lt;p&gt;DevOps as a movement has no truly coherent definition or mantra other than removing the wall and a few images of a horizontal lemniscate&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-lemniscate-1&quot;&gt;&lt;a href=&quot;#fn-lemniscate&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. People make their own definitions and it differs from person to person. Additionally; the keen eyed (or ancient) among you may have noticed though that &amp;quot;the wall&amp;quot; was not always inherently bad, as long as teams had shared ownership of the product and a clear contract of concerns then velocity could be achieved.&lt;&#x2F;p&gt;
&lt;p&gt;This brings me to SRE&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-SRE-1&quot;&gt;&lt;a href=&quot;#fn-SRE&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, which, ironically had existed long before DevOps. SRE was founded as &amp;quot;Production&amp;quot; in 2003 at Google. Described by its founder, Benjamin Treynor Sloss as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;n4Wf14e2jxQ?t=162&quot;&gt;&lt;em&gt;&amp;quot;What happens when you send Developers to do Operations&amp;quot;&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;. The whole video is worth a watch but tl;dr: he codifies the contract between Feature Development and SRE &lt;sup&gt;(which, are other developers doing Operations work as stated)&lt;&#x2F;sup&gt;. &lt;u&gt;This does not break &amp;quot;the wall&amp;quot;&lt;&#x2F;u&gt;, it is promoting shared ownership and shared responsibility, but SRE is &lt;em&gt;not&lt;&#x2F;em&gt; embedded in development and is not putting perpetual Ops support onto staff whom are focused on developing features. SRE only codifies and formalises contracts of &lt;em&gt;what it means&lt;&#x2F;em&gt; to hand something over, or to control releases. In my mind: this is a true evolution of Operations. But it should be noted that this was business as usual for a lot of established companies; tenured sysadmins generally grew into being quite close in ability to feature developers, many even becoming developers themselves, the inverse was also true with feature developers joining what was often referred to as &amp;quot;Platform Ops&amp;quot;&lt;&#x2F;p&gt;
&lt;p&gt;Benjamins talk is fantastic for other reasons too; he also critically points to the fact that you need people that can be free to focus on reliability. He indicates that developers&#x2F;coders are the best people served to do this and I tend to agree with him, we should all be comfortable scripting&#x2F;programming.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;devops-confusion-and-frustration&#x2F;devops-no-time.webp&quot; alt=&quot;DevOps Meme For People with no time to work&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I was headed in a direction and I&amp;#39;m just going to go there now:&lt;&#x2F;p&gt;
&lt;p&gt;SRE is a nice concept and adds some good ideas to Operations, but it&amp;#39;s still operations. You&amp;#39;re still a Sysadmin. Yes, Sysadmins could code *gasps from the audience*. In fact sysadmins generally code some of the more gnarly stuff that keeps a business running, database migration systems, failover systems. Chatops as a concept, for example, is founded not from Development but from Operations who used to use IRC to instrument changes. It is Operations who pushed the idea of message queues for reliability reasons at my previous jobs. Developers at that company would have used MySQL for everything.&lt;&#x2F;p&gt;
&lt;p&gt;and.. devops... as a job title.. Well, my opinion is:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you&amp;#39;re a devops who can&amp;#39;t sort a binary tree, you&amp;#39;re probably a sysadmin.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-infra-1&quot;&gt;&lt;a href=&quot;#fn-infra&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;if you&amp;#39;re a devops who can&amp;#39;t forcefully unload a stuck file descriptor from a running process, you&amp;#39;re probably a developer.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-coder-1&quot;&gt;&lt;a href=&quot;#fn-coder&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;if your job is to maintain CI pipelines: you&amp;#39;re a release engineer.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And there is no shame in these job descriptions or titles.. it&amp;#39;s just saying what the focus is. As I mentioned to my directors when they were keen on me hiring &amp;quot;devops engineers&amp;quot;:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;DevOps, are not Developers who can install apache and read infra docs.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;DevOps, are not Sysadmins who learned Python.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;DevOps is not the people who run your Jenkins pipelines.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Personally; I&amp;#39;m sick to absolute death of hearing &amp;quot;DevOps Engineer&amp;quot;, it tells me nothing about what you do, how you do it, how you approach problems or what your real responsibilities are, it doesn&amp;#39;t even tell me what tools you use although there are definitely some &amp;quot;DEVOPS TOOLS!!1!&amp;quot; which are trying to make you believe you need to be using them if your title is devops engineer.. It&amp;#39;s akin to a doctor titled: &amp;quot;BodyFixing Engineer&amp;quot;; doctors specialise because the problem scope of a human body is wide, and when they generalise they misdiagnose.. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ncbi.nlm.nih.gov&#x2F;pmc&#x2F;articles&#x2F;PMC5502242&#x2F;&quot;&gt;unfortunately quite often&lt;&#x2F;a&gt;.. and even amongst doctors generalists have a specific title indicating their focus (General Practitioners).&lt;&#x2F;p&gt;
&lt;p&gt;There also seem to be misconceptions floating around, especially on hackernews and lobsters:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Sysadmins &lt;em&gt;did know&lt;&#x2F;em&gt; how to code back in the day, they were coders, it&amp;#39;s weird to assume they didn&amp;#39;t code. If your sysadmin didn&amp;#39;t know &lt;em&gt;your&lt;&#x2F;em&gt; program it&amp;#39;s because they weren&amp;#39;t allowed (compliance) or there was a cultural problem in your company, it&amp;#39;s unlikely that your new &amp;quot;DevOps Engineers&amp;quot; know the codebase if your company was one of these.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Developers knew a fair bit about infrastructure back in the day, if only to get their staging&#x2F;dev environments to work. It is weird to assume they didn&amp;#39;t.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Today, life is a little bit easier on either side of these camps: but please stop assuming you can do everything, you will only do both poorly.&lt;&#x2F;p&gt;
&lt;p&gt;And if you&amp;#39;re a hiring manager and you only want to hire &amp;quot;DevOps&amp;quot; from &lt;strong&gt;only&lt;&#x2F;strong&gt; from infrastructure backgrounds or &lt;strong&gt;only&lt;&#x2F;strong&gt; from software engineering backgrounds: &lt;strong&gt;you are actually hiring sysadmins or developers&lt;&#x2F;strong&gt;; using the term &amp;quot;DevOps Engineer&amp;quot; only serves to remove information about the focus of the role. It is likely increasing the amount of noise in your hiring pipeline.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-devops_timeline&quot;&gt;
&lt;p&gt;Source: https:&#x2F;&#x2F;newrelic.com&#x2F;blog&#x2F;nerd-life&#x2F;devops-name &lt;a href=&quot;#fr-devops_timeline-1&quot;&gt;↩&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-devops_timeline-2&quot;&gt;↩2&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-devopsdays&quot;&gt;
&lt;p&gt;Devopsdays is a worldwide series of technical conferences covering topics of software development, IT infrastructure operations, and the intersection between them. Each event is run by volunteers from the local area. &lt;a href=&quot;#fr-devopsdays-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-lemniscate&quot;&gt;
&lt;p&gt;The geometric symbol of infinite. ∞ Example: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;devopedia.org&#x2F;images&#x2F;article&#x2F;54&#x2F;7602.1513404277.png&quot;&gt;devopedia&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-lemniscate-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-SRE&quot;&gt;
&lt;p&gt;Site reliability engineering is a set of principles and practices that incorporates aspects of software engineering and applies them to infrastructure and operations problems. The main goals are to create scalable and highly reliable software systems. &lt;a href=&quot;#fr-SRE-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-infra&quot;&gt;
&lt;p&gt;Not specifically this, &amp;quot;why would anybody want to do this!?&amp;quot; but distributed &lt;em&gt;debugging&lt;&#x2F;em&gt;, consistency of data, continuity of service and scalability is a difficult problem to do right, if you know more about this than about the intricacies of memory padding, then this applies to you. &lt;a href=&quot;#fr-infra-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-coder&quot;&gt;
&lt;p&gt;Overly simplistic and arbitrary, but the point is you probably know more algorithms and coding standards than infra standards. &lt;a href=&quot;#fr-coder-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>I don&#x27;t trust Signal</title>
        <published>2021-06-21T00:00:00+00:00</published>
        <updated>2021-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/i-don-t-trust-signal/"/>
        <id>https://blog.dijit.sh/i-don-t-trust-signal/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/i-don-t-trust-signal/">&lt;p&gt;I&#x27;m sure you have already formulated an opinion about how I&#x27;m wrong. That&#x27;s fine, but I invite you to at least open your mind a little before you hit back and inform me of how stupid I am.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;After the hackernews reaction I should also preface this post by saying that the title should really be &quot;I don&#x27;t &lt;em&gt;inherently&lt;&#x2F;em&gt; trust Signal&quot;. This is an important point because nothing of what I talk about here is a reason to not use Signal by itself; it just lends a skeptical person to the conclusion that there&#x27;s no concrete reason to trust them, and that ultimately Signal makes it hard to function the way they do without half-blindly trusting them.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This is decidedly not a rehashing of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;drewdevault.com&#x2F;2018&#x2F;08&#x2F;08&#x2F;Signal.html&quot;&gt;Drew Devaults&lt;&#x2F;a&gt; essay of the same name, he mostly talks about Google Play and Federation.&lt;&#x2F;p&gt;
&lt;p&gt;I am here to talk purely about &lt;em&gt;trust&lt;&#x2F;em&gt;, about how it&#x27;s something you verify- something that is hard earned, something you try to avoid giving, that&#x27;s easily lost and worries you when people forcefully ask for it.&lt;&#x2F;p&gt;
&lt;p&gt;Let me start with a perhaps controversial statement:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I do not believe that end-to-end encryption means anything at all when the network and the client are the same entity.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;What do I mean?&lt;&#x2F;p&gt;
&lt;p&gt;Well, back in the old days, by pure virtue of not having large companies that could do everything, we used to bolt on security mechanisms to insecure transports. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pretty_Good_Privacy&quot;&gt;PGP&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;OMEMO&quot;&gt;OMEMO&lt;&#x2F;a&gt; and the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Off-the-Record_Messaging&quot;&gt;foundation of Signals encryption&lt;&#x2F;a&gt; OTR are all known primarily for being developed as third-party client side implementations. -- for everyone else TLS was good enough since if you trust MSN or AIM (the client) then you trust Microsoft or AOL, right!?&lt;&#x2F;p&gt;
&lt;p&gt;What running an encryption overlay means in practice is that your transport could never collude against you with your client; better: it usually means multiple client implementations of the same standard (though not always; in the case of PGP for example) -- and often the clients are fully open source.&lt;&#x2F;p&gt;
&lt;p&gt;That leads directly into two of my next grievances:&lt;&#x2F;p&gt;
&lt;h2 id=&quot;signal-is-not-open-source&quot;&gt;Signal is not open source&lt;&#x2F;h2&gt;
&lt;p&gt;Why would I say something so provably untrue? &lt;em&gt;&quot;Of course signal is open source, it&#x27;s on f-droid! (it&#x27;s not, actually&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-not on f-droid-1&quot;&gt;&lt;a href=&quot;#fn-not on f-droid&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;); there are even &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;signalapp&#x2F;Signal-iOS&quot;&gt;sources&lt;&#x2F;a&gt; on github!&quot;&lt;&#x2F;em&gt; ... I can already hear it coming.&lt;&#x2F;p&gt;
&lt;p&gt;How is it then dear reader, that they developed MobileCoin integrations for over a year without anyone knowing?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.androidpolice.com&#x2F;2021&#x2F;04&#x2F;06&#x2F;it-looks-like-signal-isnt-as-open-source-as-you-thought-it-was-anymore&#x2F;&quot;&gt;That would be because, they stopped updating sources&lt;&#x2F;a&gt;. We &lt;em&gt;can&lt;&#x2F;em&gt; be reasonably sure that private &amp;amp; unpublished code was in production, otherwise they left some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;signalapp&#x2F;Signal-Server&#x2F;commit&#x2F;3432529f9c018d75774ce89f3207b18051c26fe7#comments&quot;&gt;security vulnerabilities unpatched&lt;&#x2F;a&gt; for a long time&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-signal patch times-1&quot;&gt;&lt;a href=&quot;#fn-signal patch times&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. This throws into question the entire nature of what they consider &quot;open source&quot; to mean, they are clearly comfortable deploying non-public software.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s also vanishingly small amounts of people who will use the from-FOSS versions of the client, nearly everyone will be downloading it from Google Play or Apple&#x27;s App Store; and they have a long way to go when it comes to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;signal.org&#x2F;blog&#x2F;reproducible-android&#x2F;&quot;&gt;verified builds&lt;&#x2F;a&gt; which seems to work when you google it and there&#x27;s a page; but in reality if you &lt;em&gt;read&lt;&#x2F;em&gt; the page you&#x27;d realise is not possible.&lt;&#x2F;p&gt;
&lt;p&gt;Which gives a false appearance in my opinion, and that is a large part of my issue honestly; that there is a surface level of &quot;everything is by the book&quot; but underlying it all is: nothing, really.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;signal-doesn-t-give-you-any-option-to-verify-their-claims&quot;&gt;Signal doesn&#x27;t give you any option to verify their claims&lt;&#x2F;h2&gt;
&lt;p&gt;If I were in a situation to &lt;em&gt;be&lt;&#x2F;em&gt; signal, if there was a competing implementation that I could point my clients to (similar to how &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;juanfont&#x2F;headscale&quot;&gt;headscale&lt;&#x2F;a&gt; is an implementation of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tailscale.com&#x2F;kb&#x2F;1151&#x2F;what-is-tailscale&#x2F;&quot;&gt;tailscale&lt;&#x2F;a&gt;&#x27;s control server); I&#x27;d certainly be a lot more comfortable, since then I could be in a situation where I can see all traffic to my server and jail&#x2F;inspect all traffic coming from the binary distributed Signal client; thus it would allow for independent verification of the binary distributions delivered via Play or the iOS App Store.&lt;&#x2F;p&gt;
&lt;p&gt;As it stands the whole thing is built on trust and people believe that &lt;em&gt;someone else&lt;&#x2F;em&gt; will do the hard part of reverse engineering every version.&lt;&#x2F;p&gt;
&lt;p&gt;Which I don&#x27;t have to tell you is &lt;em&gt;significantly&lt;&#x2F;em&gt; more effort, requires much more advanced skills and might not even yield results even if there were concerning items yet to be discovered.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&quot;Moxie says you can run your own server though!&quot;&lt;&#x2F;em&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-moxie says run your own-1&quot;&gt;&lt;a href=&quot;#fn-moxie says run your own&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;; I&#x27;d like to see where I can change the endpoint in the signal app that&#x27;s distributed via Play or App Store; my claim is purely that I can&#x27;t verify those and that few enough people run the custom compiled versions to be meaningful. If I was to be smart and want to hide a back door I&#x27;d only need one side of every conversation. -- please note though, I&#x27;m not saying they do this, I&#x27;m just saying that they &lt;em&gt;could&lt;&#x2F;em&gt; do this and the only thing that says they don&#x27;t is &quot;trust me&quot;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;signal-is-fairly-hostile-to-any-other-clients&quot;&gt;Signal is fairly hostile to any other clients&lt;&#x2F;h2&gt;
&lt;p&gt;OK, so, it&#x27;s unlikely you run a from-source client, it&#x27;s less likely everyone you know runs a from-source client. It&#x27;s less likely that everyone you know audited it-- but that&#x27;s easier than reverse engineering of course.&lt;&#x2F;p&gt;
&lt;p&gt;However something that could increase trust is to decouple that client&#x2F;network collusion possibility, perhaps by having independent clients based on a spec.&lt;&#x2F;p&gt;
&lt;p&gt;Moxie has explicitly said several times that third-party clients connecting to the main Signal servers are actively not supported and has threatened to start blocking them or enforcing the Signal trademark if they get big enough&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-moxie hates third-parties-1&quot;&gt;&lt;a href=&quot;#fn-moxie hates third-parties&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;signal-took-money-from-the-us-government&quot;&gt;Signal took money from the US Government&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;ve heard the argument about this, &lt;del&gt;NSA&lt;&#x2F;del&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Open_Technology_Fund&quot;&gt;OTF&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-otf-1&quot;&gt;&lt;a href=&quot;#fn-otf&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; funds &lt;em&gt;loads&lt;&#x2F;em&gt; of projects, &lt;em&gt;&quot;You&#x27;re being a conspiracy theorist Jan!&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Sure. NSA gave us SELinux,  NRL gave us Tor (which the CIA &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.wired.com&#x2F;story&#x2F;cia-sets-up-shop-on-tor&#x2F;&quot;&gt;loves&lt;&#x2F;a&gt;), sometimes the stars align and the security services actually release something that makes &lt;em&gt;us&lt;&#x2F;em&gt; more secure. However I still find Signal an odd choice, it&#x27;s not &lt;em&gt;inherently&lt;&#x2F;em&gt; better than any other client that supports OMEMO, including Jabber clients. The only things it&#x27;s better in is that it&#x27;s a foundation that is under US jurisdiction- it was founded around the same time as Telegram which was likely seen as a competitor- and... it has good marketing? I don&#x27;t honestly see any reason to fund Signal over anything else. Additionally: Tor and SELinux genuinely &lt;em&gt;are&lt;&#x2F;em&gt; used by their respective agencies, &lt;del&gt;yet Signal is not being used by NSA. I know this for fact.&lt;&#x2F;del&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-irrelevant-1&quot;&gt;&lt;a href=&quot;#fn-irrelevant&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;signal-seems-to-have-a-lot-of-strong-and-emotional-advocates&quot;&gt;Signal seems to have a &lt;em&gt;lot&lt;&#x2F;em&gt; of strong and emotional advocates&lt;&#x2F;h2&gt;
&lt;p&gt;This is also conspiratorial, but if you take my first point as fact: that E2EE is meaningless if the client and the network are the same; then Signal seems to have a &lt;em&gt;lot&lt;&#x2F;em&gt; of people foaming at the mouth on popular sites like Reddit and HackerNews doing everything possible to convince you that it&#x27;s the one true secure messenger. If you do anything more than what signal provides: you&#x27;re paranoid and probably doing it wrong anyway; if you do anything less or &lt;strong&gt;god forbid&lt;&#x2F;strong&gt; you use something like Telegram; you might as well telegraph all your messages to every person on the planet!&lt;&#x2F;p&gt;
&lt;p&gt;Ok, I&#x27;m being hyperbolic; but there is a really &lt;em&gt;strong&lt;&#x2F;em&gt; sentiment that cannot be argued or reasoned with (especially on hackernews), and legitimate complaints are brushed aside with snide remarks about paranoia or trust or that you&#x27;re not doing enough for privacy. Which, if you really do buy my first argument: feels massively disingenuous.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;signal-requires-a-phone-number&quot;&gt;Signal requires a phone number&lt;&#x2F;h2&gt;
&lt;p&gt;I know, this ugly thing. People say that it&#x27;s to combat spam. Unfortunately you know what else it combats: basically anybody being able to register with signal without disclosing their ID to someone. Even more annoying is that locating someone via phone number is pretty trivial if you have the right equipment or you have the ability to ask a carrier. Heck, that&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;1995&#x2F;02&#x2F;16&#x2F;us&#x2F;a-most-wanted-cyberthief-is-caught-in-his-own-web.html&quot;&gt;how they got Mitnick&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I am really not a major privacy nut, and when you get to the end of this blog post you&#x27;ll see just how true that is, but my point here is simple: You cannot claim to be running a secure messenger and have your only method of connecting with other person be a globally unique number that is easily tied to a real world person. Physical security is a pretty major part of security.&lt;&#x2F;p&gt;
&lt;p&gt;They say they&#x27;re working on this, and someone mentioned something recently about a very complicated command-line, I haven&#x27;t looked into it any further honestly -- However people are definitely advocating on hackernews and reddit to keep the phone numbers because (and I quote: &quot;Keeping the numbers makes it easy, if I wanted usernames I would use Riot&#x2F;Element&quot;).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-hagiographies-of-moxie&quot;&gt;The hagiographies of Moxie&lt;&#x2F;h2&gt;
&lt;p&gt;OK, I actually have a soft spot for Moxie, he gave a talk on not trusting CA&#x27;s and instead developed (a now defunct) system that used multiple third party brokers to act as notaries. It was called &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Convergence_(SSL)&quot;&gt;Convergence&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-convergence talk-1&quot;&gt;&lt;a href=&quot;#fn-convergence talk&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;One of the things I really liked about that approach was that it &lt;em&gt;inherently&lt;&#x2F;em&gt; didn&#x27;t trust the &quot;authority&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Now it seems Moxie really likes the idea of authority, so long as it&#x27;s his foundation.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll be honest, despite me having a soft spot for Moxie, I am &lt;em&gt;inherently&lt;&#x2F;em&gt; distrustful of being told what to think, I am even more distrustful of anything that uses emotive language (such as Fox News or the Daily Mail) in order to illicit a particular feeling on the state of the world. When I read articles like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.newyorker.com&#x2F;magazine&#x2F;2020&#x2F;10&#x2F;26&#x2F;taking-back-our-privacy&quot;&gt;his profile in The New Yorker&lt;&#x2F;a&gt; I am left thinking:&lt;&#x2F;p&gt;
&lt;p&gt;Who paid for this? Why?&lt;&#x2F;p&gt;
&lt;p&gt;From everything I personally know about the media, articles like that are usually paid for, though almost never directly&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-payment-1&quot;&gt;&lt;a href=&quot;#fn-payment&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And it goes back again to &quot;authority&quot; for me; I&#x27;m being told to trust this guy, this foundation, that they&#x27;ve got the right &lt;em&gt;moxie&lt;&#x2F;em&gt;^haha^, that they&#x27;re in it for good reasons.&lt;&#x2F;p&gt;
&lt;p&gt;But, only if they&#x27;re the authority.&lt;&#x2F;p&gt;
&lt;p&gt;You could argue that Convergence, the anti-authority system, is defunct and thus his new approach is more poised for success as he has learned that authorities are good; and honestly I wouldn&#x27;t have a good argument against that. It&#x27;s possible. Coincidentally though the best form of government is absolute dictatorship; so long as the dictator is benevolent. it says nothing about future corruptibility... which brings me to my final point:&lt;&#x2F;p&gt;
&lt;h2 id=&quot;signal-wants-to-move-fast&quot;&gt;Signal wants to move fast&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-fuck federation-1&quot;&gt;&lt;a href=&quot;#fn-fuck federation&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;This, is the common argument used against federation, and when I first read it I thought that basically they want the ability to forcefully change the software and protocol actively used for users without any consent (much less informed consent), which renders it functionally immune to any criticism or review because any aspect of the protocol could be changed (&#x27;improved&#x27;) at a moments notice.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;final-word&quot;&gt;Final Word&lt;&#x2F;h2&gt;
&lt;p&gt;OK, I talked about trust, I don&#x27;t think any individual issue I&#x27;ve mentioned here is a dealbreaker, and most in isolation can be argued away. For me, though, in the larger context with all these pieces I can&#x27;t really say that I have full faith in Signal. It&#x27;s fine for me as an insecure messenger, but the UX is just &lt;em&gt;worse&lt;&#x2F;em&gt; than other insecure messengers. I don&#x27;t personally have any reason to trust it more than telegram; other than that people get mad when you say that. Which, is incredibly unconvincing.&lt;&#x2F;p&gt;
&lt;p&gt;I mean, we have an ecosystem that:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Can change at a moments notice&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-non-intervention-1&quot;&gt;&lt;a href=&quot;#fn-non-intervention&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;; and works hard to keep it that way;&lt;&#x2F;li&gt;
&lt;li&gt;Attempts to avoid you extending their messengers;&lt;&#x2F;li&gt;
&lt;li&gt;Is centrally controlled;&lt;&#x2F;li&gt;
&lt;li&gt;Handles all traffic (via the USA, no less);&lt;&#x2F;li&gt;
&lt;li&gt;Took money from US intelligence agencies;&lt;&#x2F;li&gt;
&lt;li&gt;Is not &lt;em&gt;used&lt;&#x2F;em&gt; by at least one US intelligence agency that I know of;&lt;&#x2F;li&gt;
&lt;li&gt;Has engaged hiding updates before;&lt;&#x2F;li&gt;
&lt;li&gt;Can be easily tied to your person;&lt;&#x2F;li&gt;
&lt;li&gt;Asks for your contact list and &quot;encrypts&quot; them in a way that is trivially broken&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-SGX-1&quot;&gt;&lt;a href=&quot;#fn-SGX&quot;&gt;11&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Those things combined, with the &lt;strong&gt;strong&lt;&#x2F;strong&gt; push that it is truly the &quot;secure&quot; messenger gives me enormous pause.&lt;&#x2F;p&gt;
&lt;p&gt;Telegram might be cryptographically flawed&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-no evidence-1&quot;&gt;&lt;a href=&quot;#fn-no evidence&quot;&gt;12&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and does not have E2EE enabled by default; but you know what it has? An open protocol, third-party clients, accounts without phone numbers, it&#x27;s eas(y|ier) to use- and if I get paranoid: fuck it, I&#x27;ll customise one of their open source clients to use OMEMO. Ironically the messenger which is widely thought to be less secure has a similar enough trust stance but is open enough to actually be more secure...&lt;&#x2F;p&gt;
&lt;p&gt;Or maybe we should all chip in with what Matrix&#x2F;Element are up to, instead of allowing these walled garden authorities to exist with &quot;trust me bro&quot; marketing and a cool looking hacker dude as the frontman being the only major selling points. (yeah, you too Telegram)&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to Signal&#x27;s centralized model, implementations of backdoors are one (perhaps even targeted) software update away. By the time the &quot;nerds&quot; find out, it&#x27;d probably be far too late and lives &lt;em&gt;could&lt;&#x2F;em&gt; be at stake.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s unfortunately such the nature of the beast that being half-hearted about security does not yield a half-secure product, or a product that&#x27;s fully secure against half the hostile actors, it yields a product that only gives the presumption of safety, which is far more dangerous.&lt;&#x2F;p&gt;
&lt;p&gt;I use many messaging services in my life as security absolutism leads to a miserable, paranoid life, but my expectations are accordingly tempered when I use them, and I let my contacts know my expectations too. Everyday chat? Sure. Sensitive, personal info? Maybe, depends on the exact topic. Trade&#x2F;state secrets (if I were to handle them)? Hell no.&lt;&#x2F;p&gt;
&lt;p&gt;If Signal&#x27;s security boils down to reputation and community trust, why not just use WhatsApp or Facebook Messenger or really any chat product where the makers claim it&#x27;s secure and private?&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;common-responses&quot;&gt;Common Responses&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&quot;Who do you trust? they literally do all they can.&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Commercially, truthfully, I only really trust Mullvad; they do everything possible to keep their customers anonymous even to themselves and are pushing open source systems transparency that we can all benefit from even as non-customers of the service.&lt;&#x2F;p&gt;
&lt;p&gt;Otherwise; I will always have more trust toward the people who create FOSS that is easy to use by yourself or allows you to be independent from central control which aids in making you a small enough target that the government isn&#x27;t going to knock your door. Federated or independent alternatives that live outside centralised control, that do not need to consider nation state threats because they are practically anonymous if used correctly.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&quot;it&#x27;s easy to criticise, what have &lt;em&gt;you&lt;&#x2F;em&gt; built!&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;IDK, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mobygames.com&#x2F;person&#x2F;760425&#x2F;jan-harasym&#x2F;&quot;&gt;games and stuff&lt;&#x2F;a&gt;. I&#x27;m aware of how people can be overly critical; but Signal invited these problems and has been ignorant or dismissive of peoples concerns on these points. My point is mainly that we should probably be funnelling money, resources and time to things like Matrix&#x2F;Element -- rather than the authoritarians. Or otherwise that Signal&#x27;s tradeoffs don&#x27;t amount to more than trusting them. Which for me defeats the whole point.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&quot;They make trade-offs to make it easier&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Yep, but if you&#x27;re willing to take those tradeoffs there&#x27;s no difference between a fully E2EE messenger program where the client and network are the same entity; and a TLS connection to the network with any client. It&#x27;s the same level of trust.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&quot;x problem is so small&#x2F;x problem is not an issue!&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Unfortunately all of these points are dots on a line, none big enough to cause any real distress, most easy to hand-wave away. However when put together they paint a picture: a picture of a company that is being heavily promoted but who&#x27;s principles boil down to ensuring they are in total control. There is no straw that breaks the camels back here, none of these are strong objections, just minor and quite numerous. Handwave as many of these issues away as you&#x27;d like, I&#x27;m certain there are some core factual errors here. At the core of it though: I contend that E2EE means nothing if the clients and the network collude are one entity- and I see no true external reason why I should trust Signal more than anyone else if you consider that statement to be true.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&quot;You are &lt;em&gt;wrong&lt;&#x2F;em&gt; about y&quot;&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Yeah, probably, this is my outside observation, I wrote this at 2am on a night when I couldn&#x27;t sleep and someone argued passionately in favour of Signal over everything else (to them: more paranoid solutions are completely unusable, less paranoid solutions are tantamount to a billboard in times square!) and I got frustrated. Not everything is post is fully fact checked, mostly it&#x27;s based on gut feeling. I can be wrong about any and all of this article but the problem is that the &lt;em&gt;core&lt;&#x2F;em&gt; of the argument doesn&#x27;t lie in the semantics. The &lt;em&gt;issue&lt;&#x2F;em&gt; is one of centralised control and the notion that E2EE is functionally useless if your client can be updated randomly. This post is a collection of minor grievances or feelings that make me not trust them more than other providers.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-not on f-droid&quot;&gt;
&lt;p&gt;It&#x27;s not on f-droid and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;signalapp&#x2F;Signal-Android&#x2F;issues&#x2F;9966#issuecomment-681943985&quot;&gt;Signal has &quot;preferred&quot;&lt;&#x2F;a&gt; to avoid it&#x27;s inclusion there; https:&#x2F;&#x2F;forum.f-droid.org&#x2F;t&#x2F;signal-on-f-droid&#x2F;13742 &lt;a href=&quot;#fr-not on f-droid-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-signal patch times&quot;&gt;
&lt;p&gt;HN Thread discussing this: https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=26717134 &lt;a href=&quot;#fr-signal patch times-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-moxie says run your own&quot;&gt;
&lt;p&gt;Moxie says to run your own network (regarding federation): https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=12883410 &lt;a href=&quot;#fr-moxie says run your own-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-moxie hates third-parties&quot;&gt;
&lt;p&gt;https:&#x2F;&#x2F;github.com&#x2F;LibreSignal&#x2F;LibreSignal&#x2F;issues&#x2F;37#issuecomment-217339450 &lt;a href=&quot;#fr-moxie hates third-parties-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-otf&quot;&gt;
&lt;p&gt;OTF has a long and storied history as &quot;Radio Free Asia&quot; which &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Radio_Free_Asia_(Committee_for_a_Free_Asia)&quot;&gt;is a propaganda outlet&lt;&#x2F;a&gt;. It was devised under Secretary of State Hilary Clinton who &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fortune.com&#x2F;2016&#x2F;08&#x2F;29&#x2F;clinton-campaign-signal&#x2F;&quot;&gt;coincidentally endorses Signal&lt;&#x2F;a&gt; and is featured heavily in the book &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;books.google.se&#x2F;books?id=CpDPBAAAQBAJ&amp;amp;redir_esc=y&quot;&gt;Propaganda, Power and Persuasion: From World War I to Wikileaks&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-otf-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-irrelevant&quot;&gt;
&lt;p&gt;NSA not using Signal is completely irrelevant, I had erroneously &quot;remembered&quot; that NSA funded Signal, however in reality it was &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Open_Technology_Fund&quot;&gt;OTF&lt;&#x2F;a&gt; who donated to the Signal Foundation. &lt;a href=&quot;#fr-irrelevant-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-convergence talk&quot;&gt;
&lt;p&gt;Convergence was presented at BlackHat 2011: https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Z7Wl2FW2TcA &lt;a href=&quot;#fr-convergence talk-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-payment&quot;&gt;
&lt;p&gt;To be clear about payment for articles, it&#x27;s often not the case that established journals will directly take payment for an article. It is much more common to take lunches with PR firms whom you&#x27;ve hired, for your marketing spend to drive up your profile in other ways and it always helps to be close to an advertiser in some way. This is not conspiracy, that&#x27;s just how the media machine works. Drive up your image, someone will write about you. Be it via PR lunches or marketing spend. &lt;a href=&quot;#fr-payment-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-fuck federation&quot;&gt;
&lt;p&gt;https:&#x2F;&#x2F;signal.org&#x2F;blog&#x2F;the-ecosystem-is-moving&#x2F; &amp;amp;  https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=17172203 &lt;a href=&quot;#fr-fuck federation-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-non-intervention&quot;&gt;
&lt;p&gt;Signal updates without consent: https:&#x2F;&#x2F;github.com&#x2F;signalapp&#x2F;Signal-Desktop&#x2F;issues&#x2F;4578 &lt;a href=&quot;#fr-non-intervention-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-SGX&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@maniacbolts&#x2F;signal-increases-their-reliance-on-sgx-f46378f336d3&quot;&gt;they use SGX&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sgx.fail&quot;&gt;which is broken&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-SGX-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-no evidence&quot;&gt;
&lt;p&gt;there is no evidence or reason to believe that is the case, there was a great outcry when Telegram launched that they had home-rolled their own crypto; after getting a security review they appear to have fixed four flaws that were discovered: https:&#x2F;&#x2F;ethz.ch&#x2F;en&#x2F;news-and-events&#x2F;eth-news&#x2F;news&#x2F;2021&#x2F;07&#x2F;four-cryptographic-vulnerabilities-in-telegram.html &lt;a href=&quot;#fr-no evidence-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>GPG::SSH; notes for current best practices</title>
        <published>2020-08-16T00:00:00+00:00</published>
        <updated>2020-08-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/gpg-ssh-notes-for-current-best-practices/"/>
        <id>https://blog.dijit.sh/gpg-ssh-notes-for-current-best-practices/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/gpg-ssh-notes-for-current-best-practices/">&lt;p&gt;When I start at a new company, I always do a refresher on my key security.&lt;&#x2F;p&gt;
&lt;p&gt;One thing I always hate about SSH is that the encryption scheme is pretty basic actually, and once your ssh-agent is loaded- anything can just request a sign&#x2F;authorize.&lt;&#x2F;p&gt;
&lt;p&gt;So, in tried and true &quot;over engineering&quot; fashion, I&#x27;ve taken to using my GPG key as my ssh key instead, and using gpg-agent instead of ssh-agent.&lt;&#x2F;p&gt;
&lt;p&gt;Another thing is to use elliptic curves instead of RSA, RSA is still secure, but ECC (ECDSA) is faster and theoretically more resistant, and everything from 2016 onwards supports it, so it&#x27;s fair to assume it is supported in my SSH programs of choice. :)&lt;&#x2F;p&gt;
&lt;p&gt;First, to create a ECDSA key we have to use expert mode with the &lt;code&gt;--full-gen-key&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;jan.harasym@sm-mbp-jmh ~ % gpg2 --full-gen-key --expert&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg (GnuPG&#x2F;MacGPG2) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;This is free software: you are free to change and redistribute it.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;There is NO WARRANTY, to the extent permitted by law.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please select what kind of key you want:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (1) RSA and RSA (default)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (2) DSA and Elgamal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (3) DSA (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (4) RSA (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (7) DSA (set your own capabilities)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (8) RSA (set your own capabilities)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (9) ECC and ECC&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (10) ECC (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (11) ECC (set your own capabilities)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (13) Existing key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (14) Existing key from card&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We want to use ECC and ECC here, or &quot;ECC (set your own capabilities)&quot; and skip to the &lt;code&gt;addkey&lt;&#x2F;code&gt; section.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? 9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Next we choose our ciphers:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please select which elliptic curve you want:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (1) Curve 25519&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (3) NIST P-256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (4) NIST P-384&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (5) NIST P-521&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (6) Brainpool P-256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (7) Brainpool P-384&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (8) Brainpool P-512&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (9) secp256k1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;NIST P-521 is the strongest, but NIST P-256 will be more compatible.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And finally expiry and user-info.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please specify how long the key should be valid.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         0 = key does not expire&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;  = key expires in n days&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;w = key expires in n weeks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;m = key expires in n months&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;y = key expires in n years&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Key is valid for? (0) 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Key does not expire at all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Is this correct? (y&#x2F;N) y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GnuPG needs to construct a user ID to identify your key.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Real name: Jan Martin Harasym&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Email address: jmh@xxx.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Comment: Expert Online Infrastructure Engineer :: Live Operations&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;You selected this USER-ID:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;quot;Jan Martin Harasym (Expert Online Infrastructure Engineer :: Live Operations) &amp;lt;jmh@xxx.com&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Change (N)ame, (C)omment, (E)mail or (O)kay&#x2F;(Q)uit? O&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;...&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;pub   nistp521 2020-08-16 [SC]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      6F1AA563C75BA41387FDDAD7DE3F72240989604A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;uid                      Jan Martin Harasym (Expert Online Infrastructure Engineer :: Live Operations) &amp;lt;jmh@xxx.com&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sub   nistp521 2020-08-16 [E]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now we need to add a key which can be used for authorization, for this we can create a subkey, remove the encryption capability and enable the authorization one.
(Failing this, we can ask for setting our own capabilities during the initial key creation above)&lt;&#x2F;p&gt;
&lt;p&gt;Make sure it&#x27;s &lt;code&gt;ECC (set your own capabilities)&lt;&#x2F;code&gt; when selecting a key type.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;jan.harasym@sm-mbp-jmh ~ % gpg2 --expert --edit-key 6F1AA563C75BA41387FDDAD7DE3F72240989604A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Secret key is available.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: checking the trustdb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: marginals needed: 3  completes needed: 1  trust model: pgp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sec  nistp521&#x2F;DE3F72240989604A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: SC  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     trust: ultimate      validity: ultimate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb  nistp521&#x2F;697423BAAFF6B653&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: E   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[ultimate] (1). Jan Martin Harasym (Expert Online Infrastructure Engineer :: Live Operations) &amp;lt;jmh@xxx.com&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg&amp;gt; addkey&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please select what kind of key you want:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (3) DSA (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (4) RSA (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (5) Elgamal (encrypt only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (6) RSA (encrypt only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (7) DSA (set your own capabilities)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (8) RSA (set your own capabilities)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (10) ECC (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (11) ECC (set your own capabilities)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (12) ECC (encrypt only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (13) Existing key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (14) Existing key from card&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? 11&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Possible actions for a ECDSA&#x2F;EdDSA key: Sign Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Current allowed actions: Sign &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (S) Toggle the sign capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (A) Toggle the authenticate capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (Q) Finished&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? S&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Possible actions for a ECDSA&#x2F;EdDSA key: Sign Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Current allowed actions: &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (S) Toggle the sign capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (A) Toggle the authenticate capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (Q) Finished&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Possible actions for a ECDSA&#x2F;EdDSA key: Sign Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Current allowed actions: Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (S) Toggle the sign capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (A) Toggle the authenticate capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (Q) Finished&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? q&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please select which elliptic curve you want:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (1) Curve 25519&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (3) NIST P-256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (4) NIST P-384&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (5) NIST P-521&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (6) Brainpool P-256&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (7) Brainpool P-384&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (8) Brainpool P-512&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (9) secp256k1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please specify how long the key should be valid.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         0 = key does not expire&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;  = key expires in n days&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;w = key expires in n weeks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;m = key expires in n months&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;y = key expires in n years&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Key is valid for? (0) &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Key does not expire at all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Is this correct? (y&#x2F;N) y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Really create? (y&#x2F;N) y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;We need to generate a lot of random bytes. It is a good idea to perform&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;some other action (type on the keyboard, move the mouse, utilize the&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;disks) during the prime generation; this gives the random number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;generator a better chance to gain enough entropy.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sec  nistp521&#x2F;DE3F72240989604A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: SC  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     trust: ultimate      validity: ultimate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb  nistp521&#x2F;697423BAAFF6B653&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: E   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb  nistp521&#x2F;5A4C21BF1FC787DB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: A   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[ultimate] (1). Jan Martin Harasym (Expert Online Infrastructure Engineer :: Live Operations) &amp;lt;jmh@xxx.com&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg&amp;gt; Save changes? (y&#x2F;N) y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Tell gpg-agent to enable ssh support:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;echo &amp;gt; ~&#x2F;.gnupg&#x2F;gpg-agent &amp;lt;&amp;lt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;default-cache-ttl 600&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;max-cache-ttl 7200&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;enable-ssh-support&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;write-env-file ~&#x2F;.gpg-agent-info&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And finally we need to tell the gpg-agent which key we want to load, however this is done by using the &#x27;keygrip&#x27;, not the &#x27;keyID&#x27;, you can get the keygrip with the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;jan.harasym@sm-mbp-jmh ~ % gpg -K --with-keygrip&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;Users&#x2F;jan.harasym&#x2F;.gnupg&#x2F;pubring.kbx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sec   nistp521 2020-08-16 [SC]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      6F1AA563C75BA41387FDDAD7DE3F72240989604A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      Keygrip = 1114A87C954A99D1BE2BBBCEFD2FEF4A8F81A17B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;uid           [ultimate] Jan Martin Harasym (Expert Online Infrastructure Engineer :: Live Operations) &amp;lt;jmh@xxx.com&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;uid           [ultimate] [jpeg image of size 8037]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb   nistp521 2020-08-16 [E]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      Keygrip = 8E504AC5A41C7C71905604E83B2F150B562ADFAE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb   nistp521 2020-08-16 [A]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      Keygrip = 1DB1E97B20FD54DF2BAB906EA64C30081DEA8C32&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Look for the keygrip which is associated with the &lt;code&gt;[A]&lt;&#x2F;code&gt; capability in my case:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb   nistp521 2020-08-16 [A]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      Keygrip = 1DB1E97B20FD54DF2BAB906EA64C30081DEA8C32&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And enable the &quot;A&quot; key by adding it to the bottom of the sshcontrol file:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;echo &amp;#39;1DB1E97B20FD54DF2BAB906EA64C30081DEA8C32&amp;#39; &amp;gt; ~&#x2F;.gnupg&#x2F;sshcontrol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;strong&gt;EDIT&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;AWS does not like strong keys, so for AWS I did the same as above but when I added a key for authorization I chose RSA:4096 instead.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;jan.harasym@sm-mbp-jmh &#x2F; % gpg2 --expert --edit-key 6F1AA563C75BA41387FDDAD7DE3F72240989604A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg (GnuPG&#x2F;MacGPG2) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;This is free software: you are free to change and redistribute it.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;There is NO WARRANTY, to the extent permitted by law.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Secret key is available.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sec  nistp521&#x2F;DE3F72240989604A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: SC  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     trust: ultimate      validity: ultimate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb  nistp521&#x2F;697423BAAFF6B653&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: E   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb  nistp521&#x2F;5A4C21BF1FC787DB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: A   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[ultimate] (1). Jan Martin Harasym (Expert Online Infrastructure Engineer :: Live Operations) &amp;lt;jmh@xxx.com&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[ultimate] (2)  [jpeg image of size 8037]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg&amp;gt; addkey&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please select what kind of key you want:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (3) DSA (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (4) RSA (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (5) Elgamal (encrypt only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (6) RSA (encrypt only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (7) DSA (set your own capabilities)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (8) RSA (set your own capabilities)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (10) ECC (sign only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (11) ECC (set your own capabilities)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (12) ECC (encrypt only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (13) Existing key&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  (14) Existing key from card&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Possible actions for a RSA key: Sign Encrypt Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Current allowed actions: Sign Encrypt &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (S) Toggle the sign capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (E) Toggle the encrypt capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (A) Toggle the authenticate capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (Q) Finished&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Possible actions for a RSA key: Sign Encrypt Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Current allowed actions: Sign Encrypt Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (S) Toggle the sign capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (E) Toggle the encrypt capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (A) Toggle the authenticate capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (Q) Finished&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? S&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Possible actions for a RSA key: Sign Encrypt Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Current allowed actions: Encrypt Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (S) Toggle the sign capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (E) Toggle the encrypt capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (A) Toggle the authenticate capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (Q) Finished&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? E&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Possible actions for a RSA key: Sign Encrypt Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Current allowed actions: Authenticate &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (S) Toggle the sign capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (E) Toggle the encrypt capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (A) Toggle the authenticate capability&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   (Q) Finished&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Your selection? Q&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RSA keys may be between 1024 and 4096 bits long.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;What keysize do you want? (2048) 4096&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Requested keysize is 4096 bits&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please specify how long the key should be valid.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         0 = key does not expire&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;  = key expires in n days&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;w = key expires in n weeks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;m = key expires in n months&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;n&amp;gt;y = key expires in n years&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Key is valid for? (0) &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Key does not expire at all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Is this correct? (y&#x2F;N) y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Really create? (y&#x2F;N) y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;We need to generate a lot of random bytes. It is a good idea to perform&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;some other action (type on the keyboard, move the mouse, utilize the&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;disks) during the prime generation; this gives the random number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;generator a better chance to gain enough entropy.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sec  nistp521&#x2F;DE3F72240989604A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: SC  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     trust: ultimate      validity: ultimate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb  nistp521&#x2F;697423BAAFF6B653&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: E   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb  nistp521&#x2F;5A4C21BF1FC787DB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-16  expires: never       usage: A   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb  rsa4096&#x2F;7085DF63EBE406FD&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;     created: 2020-08-20  expires: never       usage: A   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[ultimate] (1). Jan Martin Harasym (Expert Online Infrastructure Engineer :: Live Operations) &amp;lt;jmh@xxx.com&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[ultimate] (2)  [jpeg image of size 8037]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg&amp;gt; save&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;jan.harasym@sm-mbp-jmh &#x2F; % gpg -K --with-keygrip&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;Users&#x2F;jan.harasym&#x2F;.gnupg&#x2F;pubring.kbx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sec   nistp521 2020-08-16 [SC]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      6F1AA563C75BA41387FDDAD7DE3F72240989604A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      Keygrip = 1114A87C954A99D1BE2BBBCEFD2FEF4A8F81A17B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;uid           [ultimate] Jan Martin Harasym (Expert Online Infrastructure Engineer :: Live Operations) &amp;lt;jmh@xxx.com&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;uid           [ultimate] [jpeg image of size 8037]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb   nistp521 2020-08-16 [E]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      Keygrip = 8E504AC5A41C7C71905604E83B2F150B562ADFAE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb   nistp521 2020-08-16 [A]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      Keygrip = 1DB1E97B20FD54DF2BAB906EA64C30081DEA8C32&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssb   rsa4096 2020-08-20 [A]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      Keygrip = 933F367496118EF7CB6C457C48011DD859AA215A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;jan.harasym@sm-mbp-jmh &#x2F; % echo &amp;quot;933F367496118EF7CB6C457C48011DD859AA215A&amp;quot; &amp;gt;&amp;gt; ~&#x2F;.gnupg&#x2F;sshcontrol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;sources:
https:&#x2F;&#x2F;www.gnupg.org&#x2F;faq&#x2F;whats-new-in-2.1.html#ecc
https:&#x2F;&#x2F;gregrs-uk.github.io&#x2F;2018-08-06&#x2F;gpg-key-ssh-mac-debian&#x2F;
https:&#x2F;&#x2F;www.linode.com&#x2F;docs&#x2F;security&#x2F;authentication&#x2F;gpg-key-for-ssh-authentication&#x2F;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Cloudflare is turning off the internet for me</title>
        <published>2020-01-21T10:01:00+00:00</published>
        <updated>2020-01-21T10:01:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/cloudflare-is-turning-off-the-internet-for-me/"/>
        <id>https://blog.dijit.sh/cloudflare-is-turning-off-the-internet-for-me/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/cloudflare-is-turning-off-the-internet-for-me/">&lt;p&gt;Ok, I&#x27;ll admit, I&#x27;m not the largest fan of centralisation, but rarely do I so swiftly and effectively feel the crushing weight of it.&lt;&#x2F;p&gt;
&lt;p&gt;I happen to use a very nice &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.qutebrowser.org&#x2F;&quot;&gt;Chromium-based web-browser&lt;&#x2F;a&gt; which, when it opens has javascript disabled. Often I find that nothing works so I re-enable javascript and continue about my day.&lt;&#x2F;p&gt;
&lt;p&gt;This morning I went to work, as normal, turned on my laptop and as my laptop dutifully reloaded all my tabs from the day before I saw a few sites error-ing out.&lt;&#x2F;p&gt;
&lt;p&gt;This is relatively common when I haven&#x27;t connected to the network yet, or some sites which don&#x27;t even attempt to load without javascript, so I check my connection, enable javascript and went about reloading the offending pages.&lt;&#x2F;p&gt;
&lt;p&gt;But I noticed quite a few of the pages were the following:
&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;cloudflare-is-turning-off-the-internet-for-me&#x2F;bakadesuyo.png&quot; alt=&quot;bakadesuyo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Let me copy that for those who don&amp;#39;t like to read images:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sorry, you have been blocked&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Why have I been blocked?
This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;What can I do to resolve this?
You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Ok, so I&amp;#39;ve been outright blocked, no captcha, and a suggestion to email the owners of the sites... which could be difficult given that I can&amp;#39;t actually reach the sites to find the site-owner for each one.&lt;&#x2F;p&gt;
&lt;p&gt;I figured this might be because I had javascript disabled and tried to load a few pages, so I refreshed the page, noted that no captcha appeared and continued my day and figured the ban would eventually be lifted; Noting that I should keep my browser open so that it doesn&amp;#39;t happen again when I get home.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;&quot;&gt;home&lt;&#x2F;h2&gt;
&lt;p&gt;Ok, so I got home 30 minutes ago and I&amp;#39;m following some reddit links from &#x2F;r&#x2F;irc, when I get a &amp;quot;You have been blocked message&amp;quot;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;Oh,&amp;quot;&lt;&#x2F;em&gt; I thought.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;I forgot about that.&amp;quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;cloudflare-is-turning-off-the-internet-for-me&#x2F;more-blocks.png&quot; alt=&quot;more blocks&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So now I&amp;#39;m curious as to why, and what I can do about it.&lt;&#x2F;p&gt;
&lt;p&gt;Any ideas? &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=22109969&quot;&gt;Please help&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;if my blog goes down; let it be known that I tried to read the docs on nginx.org but was not able:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;cloudflare-is-turning-off-the-internet-for-me&#x2F;nginx-blocks.png&quot; alt=&quot;nginx also blocks me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT2:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;plot thickens, it seems to work fine in chrome.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;cloudflare-is-turning-off-the-internet-for-me&#x2F;chrome-works.png&quot; alt=&quot;chrome works&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;EDIT3:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;-1&quot;&gt;Conclusion!&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=22110878&quot;&gt;I had set a custom user agent string (D&amp;#39;OH!)&lt;&#x2F;a&gt; some time ago, and forgot about it. Which is now biting me on the butt.
Ironically I set that user agent string before &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;qutebrowser&#x2F;qutebrowser&#x2F;issues&#x2F;5182&quot;&gt;because Google was not allowing me to log in to my account&lt;&#x2F;a&gt; anymore, I got that working but now half the internet doesn&amp;#39;t work for me.&lt;&#x2F;p&gt;
&lt;p&gt;Kudos to RyanK24 on HackerNews for following up. Much, much appreciated.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; ¯\_(ツ)_&#x2F;¯&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to survive an open office.</title>
        <published>2019-07-18T04:30:00+07:00</published>
        <updated>2019-07-18T04:30:00+07:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/how-to-survive-an-open-office/"/>
        <id>https://blog.dijit.sh/how-to-survive-an-open-office/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/how-to-survive-an-open-office/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;how-to-survive-an-open-office&#x2F;my-office.png&quot; alt=&quot;my office&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&amp;#39;ve been struggling for some time to find a decent enough guide to actually accomplish anything meaningful (other than ad-hoc break-fix work) in my office.&lt;&#x2F;p&gt;
&lt;p&gt;One of the things I know is that this problem seems to affect me more than others, so for many people this advice (or lamentation) might seem like it comes from a weird place.&lt;&#x2F;p&gt;
&lt;p&gt;Especially since this is the first-worldiest of first-world problems.&lt;&#x2F;p&gt;
&lt;p&gt;However, for me, if I have some work that really must be done I end up doing it at home. When I&amp;#39;m in the office I just work on things as I get interrupted and cannot possibly focus on anything for more than 15 minutes. When I go home I feel exhausted, if I have enough energy I do the work I really needed to do in the day. -- it&amp;#39;s not even that I don&amp;#39;t have the time to do it during the day, it&amp;#39;s just that I end up procrastinating because I can&amp;#39;t get focused.&lt;&#x2F;p&gt;
&lt;p&gt;Ironically I get significantly more accomplished for my job on vacation.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, in my searches for a way to cope I came across &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;DDlJ5zrnc5I?t=271&quot;&gt;this video&lt;&#x2F;a&gt; from &amp;quot;The Globe and Mail&amp;quot; where a young lady by the name of Leanne Devi (VP of Knightsbridge leadership solutions) gives some advice.&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;youtu.be&#x2F;DDlJ5zrnc5I?t=271&lt;&#x2F;p&gt;
&lt;p&gt;Her opening statement and a brief of her comments:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;One of the big issues we see all the time is productivity in modern offices, so we&amp;#39;ve got more stress than ever, more to accomplish but increasingly we&amp;#39;re using open office spaces to create collaboration. The problem is, as soon as you try and get work &lt;em&gt;done&lt;&#x2F;em&gt; in an open space like that, distractions are everywhere.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Her advice is:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;So one of the things that I really recommend to people is that you &lt;em&gt;Create an imaginary office&lt;&#x2F;em&gt; even when theres&amp;#39; no door to actually close.
There are several ways to do that, in our office we&amp;#39;ve done that with those really great noise cancelling headphones.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Her other points fall under:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Have a unique ringtone&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;So that when a phone rings you know if it&amp;#39;s yours or not. (idk anyone who leaves there ringer on in 2019 though)&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Learn hand signals&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Not quite sign language, but more polite gestures.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Avoid conversations&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;She says &amp;quot;in the main area&amp;quot; but, let&amp;#39;s be real here, it&amp;#39;s all the main area.&lt;&#x2F;p&gt;
&lt;p&gt;--&lt;&#x2F;p&gt;
&lt;p&gt;Now, I know this advice is from 2014 (4.5 years old at this point), but her advice is basically all I ever really hear, aside from the ringtone thing.&lt;&#x2F;p&gt;
&lt;p&gt;There&amp;#39;s a bunch of reasons the above advice is just, really bad, and personally I find the suggestions of &amp;quot;avoiding conversations&amp;quot; to be completely contradicting to the supposed objective of open office space.&lt;&#x2F;p&gt;
&lt;p&gt;I&amp;#39;m not going to go into &amp;quot;why they suck&amp;quot; or &amp;quot;what is a better office&amp;quot; because; if you&amp;#39;re reading this, then you&amp;#39;ve almost certainly &lt;em&gt;not&lt;&#x2F;em&gt; got the backing of management. And ultimately this is their call. Although if you&amp;#39;re in tech I would highly advise mentioning that you need more money if there&amp;#39;s an open office in your next interview (somewhere around 20% as that&amp;#39;s what the estimates say they&amp;#39;re saving in the short term).&lt;&#x2F;p&gt;
&lt;p&gt;Personally I don&amp;#39;t see any upside to open office &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.interviewqs.com&#x2F;blog&#x2F;closed_open_office&quot;&gt;aside short-term cost savings&lt;&#x2F;a&gt;, since studies have consistently shown that over the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;n_0Q9-DeKpc&amp;amp;t=91&quot;&gt;long term the cost is higher&lt;&#x2F;a&gt;, taking into account lost productivity from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vice.com&#x2F;en_us&#x2F;article&#x2F;ev8ae7&#x2F;does-working-in-an-open-plan-office-affect-your-health&quot;&gt;sickness&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.huffpost.com&#x2F;entry&#x2F;distractions-and-the-open_b_6661018&quot;&gt;distraction&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.wellandgood.com&#x2F;good-advice&#x2F;burnout-open-office&#x2F;&quot;&gt;worker attrition&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;&quot;&gt;Headphones&lt;&#x2F;h2&gt;
&lt;p&gt;Headphone use has obvious benefits for enhancing your sound privacy, however the drawbacks are that:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;your ears get warm&lt;&#x2F;li&gt;
&lt;li&gt;they don&amp;#39;t fully isolate sound&lt;&#x2F;li&gt;
&lt;li&gt;they compress your head&lt;&#x2F;li&gt;
&lt;li&gt;make you feel tired with &amp;gt;1hr use&lt;&#x2F;li&gt;
&lt;li&gt;you might feel that there must be something playing audio&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;They&amp;#39;re not a panacea, it&amp;#39;s not practical to use them all day, but I&amp;#39;ll come back to this.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-1&quot;&gt;Avoid Conversations&lt;&#x2F;h2&gt;
&lt;p&gt;Obviously this is not possible and the antithesis of the purported reason for doing open office space. What can you do instead?&lt;&#x2F;p&gt;
&lt;p&gt;Well, avoid interrupting people. This is &lt;em&gt;super&lt;&#x2F;em&gt; tempting when they&amp;#39;re &amp;quot;right there&amp;quot; but honestly just do your absolute best to use the tech tools that are available, hit them up on slack or IRC or MS teams or whatever.&lt;&#x2F;p&gt;
&lt;p&gt;Why would we do this? because the purported reason we have open offices is actually astonishingly false. If everyone feels like they won&amp;#39;t be interrupted, perhaps we can sit shoulder to shoulder and make a &amp;quot;virtual&amp;quot; office space, as the lady in the video said in her opening statement.&lt;&#x2F;p&gt;
&lt;p&gt;So, yeah, avoid &lt;em&gt;starting&lt;&#x2F;em&gt; new conversations, and if everyone is able to do so, it might just help. No management buy-in needed.&lt;&#x2F;p&gt;
&lt;p&gt;Doesn&amp;#39;t do much for those people on conference calls all the time though. Ideally you should push for &amp;quot;people closets&amp;quot; or &amp;quot;phone booths&amp;quot;, they also work as the inverse like &amp;quot;quiet rooms&amp;quot;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-2&quot;&gt;Try to get head high (when seated) dividers&lt;&#x2F;h2&gt;
&lt;p&gt;Now, this needs more management buy-in and you might stick out. &lt;em&gt;BUT&lt;&#x2F;em&gt;! there is significant evidence that removing visual distractions while seated goes a really long way to helping preserve the feeling of visual privacy and enhances focus.&lt;&#x2F;p&gt;
&lt;p&gt;Productivity lowers linearly as the size of the divider falls to eye height.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-3&quot;&gt;Avoid any company doing &amp;quot;Hot desking&amp;quot;&lt;&#x2F;h2&gt;
&lt;p&gt;Just don&amp;#39;t work anywhere that does this, unless they also have private rooms and much more desks than employees. This is just a nice name for competitive desk hunting.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-4&quot;&gt;Aim for flexibility&lt;&#x2F;h2&gt;
&lt;p&gt;Ideally when you start out, talk to your boss, talk to your manager, explain that distractions come easy and that you&amp;#39;d really prefer to do more remote working or work odd hours.&lt;&#x2F;p&gt;
&lt;p&gt;Make sure you frame it correctly, because companies&#x2F;managers might see it as you trying to take advantage, you need it just to get the work done, in the most productive way you know how.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-5&quot;&gt;Perception is reality&lt;&#x2F;h2&gt;
&lt;p&gt;People who are &lt;em&gt;seen&lt;&#x2F;em&gt;, are seen as hard working. So you need to remain visible, which might be hard because you&amp;#39;re balancing perception with productivity.&lt;&#x2F;p&gt;
&lt;p&gt;Bosses &lt;em&gt;love&lt;&#x2F;em&gt; people who come in before them, but hate people that stay late. They might not say this directly, and it certainly doesn&amp;#39;t apply everywhere. But the perception is that &amp;quot;the early bird gets the worm&amp;quot; vs &amp;quot;oh, I didn&amp;#39;t manage to get all my work done&amp;quot;. As a night owl this is especially displeasing, but it&amp;#39;s the way it is.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-6&quot;&gt;Take care of yourself&lt;&#x2F;h2&gt;
&lt;p&gt;Make sure you&amp;#39;re finding a good time to recharge, the open offices space can be draining and being in that very stimulating environment for an unbroken 9 hours is &lt;em&gt;especially draining&lt;&#x2F;em&gt;. Finding ways to break up the day and find quiet space, or getting a good music list setup that takes you out of the environment. (noise cancelling headphones would probably help here)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-7&quot;&gt;Get practical&lt;&#x2F;h2&gt;
&lt;p&gt;You can make visual cues to signal if you&amp;#39;re interruptible. People use noise cancelling headphones for this too (see, they&amp;#39;re useful, just not a panacea), but the issue is it conflicts with &lt;em&gt;perception is reality&lt;&#x2F;em&gt;, you &lt;em&gt;need&lt;&#x2F;em&gt; to be available sometimes,&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-8&quot;&gt;Ask to have quiet times&lt;&#x2F;h2&gt;
&lt;p&gt;This is different from asking for flexible work, this is more about asking for a time to put on &amp;quot;do not disturb&amp;quot; mode, or setting up some kind of sign that you&amp;#39;re not to be interrupted. This can be invaluable if you &lt;em&gt;really&lt;&#x2F;em&gt; need to be in the office.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-9&quot;&gt;Shift your hours&lt;&#x2F;h2&gt;
&lt;p&gt;Not much different from having more flexibility in general, but if you can&amp;#39;t do that to work from a coffee shop or something then try to shift your hours, this is easier as most companies have some kind of flexi-time.&lt;&#x2F;p&gt;
&lt;p&gt;Ideally this would be to work earlier hours, because as I mentioned it&amp;#39;s perceived as being more hardworking, but this can be a huge saving grace, even if your company doesn&amp;#39;t allow you to get too flexible with the hours you work in the day or where you work from, you can usually come in early and leave late.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-10&quot;&gt;Compartmentalise the type of work&lt;&#x2F;h2&gt;
&lt;p&gt;This can be frustrating, but if you&amp;#39;re coming in early in the morning and leaving earlier in the day to really ensure the minimum amount of &amp;quot;interrupt&amp;quot; hours, it is well worth using the interrupt time to do small improvements to your next days agenda. Knowing what your next task in the morning will be when you have that quiet focus time and just pounding it out can be very fulfilling and might even give you the energy needed to get through the rest of the day.&lt;&#x2F;p&gt;
&lt;p&gt;Save email responses to your interrupt time, don&amp;#39;t check emails in the morning when you come in.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-11&quot;&gt;Don&amp;#39;t eat at your desk&lt;&#x2F;h2&gt;
&lt;p&gt;This is an awful habit, you need the break from the open office environment.&lt;&#x2F;p&gt;
&lt;p&gt;It&amp;#39;s also quite distracting for your colleagues.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;-12&quot;&gt;Switch jobs&lt;&#x2F;h2&gt;
&lt;p&gt;If you really can&amp;#39;t work, there&amp;#39;s really no point sticking around.&lt;&#x2F;p&gt;
&lt;p&gt;You don&amp;#39;t owe anything to the company really, and if they can&amp;#39;t respect your productivity then maybe it&amp;#39;s not worth burning yourself out trying to please them. We&amp;#39;re not cattle, we have significant leverage as a group (technology), and it&amp;#39;s not worth your health.&lt;&#x2F;p&gt;
&lt;p&gt;Even if you take a pay cut, it can be worth it, remote work is another alternative since &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.inc.com&#x2F;scott-mautz&#x2F;a-2-year-stanford-study-shows-astonishing-productivity-boost-of-working-from-home.html&quot;&gt;remote workers are roughly 13.5% more productive&lt;&#x2F;a&gt; on average than even the most highly performing office workers, and all that saved commute time!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>On the importance of self-hosted backups.</title>
        <published>2017-01-16T22:21:00+07:00</published>
        <updated>2017-01-16T22:21:00+07:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.dijit.sh/importance-of-self-hosted-backups/"/>
        <id>https://blog.dijit.sh/importance-of-self-hosted-backups/</id>
        
        <content type="html" xml:base="https://blog.dijit.sh/importance-of-self-hosted-backups/">&lt;p&gt;A &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.cartoonbrew.com&#x2F;wp-content&#x2F;uploads&#x2F;sixyearold.jpg&quot;&gt;long&lt;&#x2F;a&gt; time ago I built a pretty big storage computer (16TB) which I built because SSDs at the time were pretty small and &lt;em&gt;most&lt;&#x2F;em&gt; laptops came with only a single possible SATA drive bay for storage.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m also quite a large proponent of self-hosting&#x2F;federation and things of this nature as evidenced by our &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git.drk.sc&quot;&gt;gitlab&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sh.drk.sc&quot;&gt;mail&lt;&#x2F;a&gt; service and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;darkscience.net&quot;&gt;IRC&lt;&#x2F;a&gt;. However, most people assume this huge storage unit is for piracy. In fact &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;translate.google.se&#x2F;translate?hl=en&amp;amp;sl=sv&amp;amp;u=http:&#x2F;&#x2F;www.copyswede.se&#x2F;privatkopieringsersattning&#x2F;detta-ar-privatkopieringsersattning&#x2F;&amp;amp;prev=search&quot;&gt;Sweden has a tax on storage devices&lt;&#x2F;a&gt; because they &lt;em&gt;may&lt;&#x2F;em&gt; be used to store pirated media, that is also true in other EU countries such as &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.cedar.nl&#x2F;uploads&#x2F;15&#x2F;files&#x2F;English%20information%20Private%20Copying%20in%20the%20Netherlands.pdf&quot;&gt;the Netherlands&lt;&#x2F;a&gt; &lt;strong&gt;[PDF]&lt;&#x2F;strong&gt;. But my unit is not for piracy- despite there being digital creative works on there I prefer to buy all my music through iTunes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;itunes-ios.jpg&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;itunes-ios_small.jpg&quot; alt=&quot;iTunes on iOS&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Why? Because then it&amp;#39;s synced to all of my devices, I don&amp;#39;t worry about ownership or getting it synced, or worrying about the bitrate&#x2F;collecting albumart&#x2F;removing weird watermarks people add... it&amp;#39;s simple, convenient and unobtrusive to me.&lt;&#x2F;p&gt;
&lt;p&gt;That said, I do take a copy of everything because you never know, and I like Linux&#x2F;BSD and I use my music on those platforms too.&lt;&#x2F;p&gt;
&lt;p&gt;However, we were talking about backups and I&amp;#39;ve gone on to piracy for some reason...&lt;&#x2F;p&gt;
&lt;p&gt;One of the other reasons I like iCloud&#x2F;iTunes is that I change phones with &lt;em&gt;relative&lt;&#x2F;em&gt; frequency (I replace my phone yearly pretty much); and having my music, photos&amp;#39; and apps automatically downloaded with no extra work on my behalf is certainly a convenience worth paying for. (And I do, with iCloud).&lt;&#x2F;p&gt;
&lt;p&gt;However, there &lt;em&gt;are&lt;&#x2F;em&gt; issues with the iTunes store as anybody will tell you, one of those issues is that I cannot download the music I purchased when I lived in the UK, unless I have a UK credit&#x2F;debit card on hand so I can change my store. But, sure, as long as I don&amp;#39;t move from Sweden this wont become an unmanageable mess. File it under: &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.makeuseof.com&#x2F;tag&#x2F;dont-switch-international-itunes-media-app-store-youve-read&#x2F;&quot;&gt;things I wish I knew before I moved&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Oh yes, backups..&lt;&#x2F;p&gt;
&lt;p&gt;Last week I went looking for an album that had a distinct cover and a small nostalgia attached to it. Since my phone is 128G I tend to download everything I purchase onto it without leaving it &amp;quot;in the cloud&amp;quot; for later download but I couldn&amp;#39;t find it. I scrolled through my albums maybe 6 times, thinking perhaps I misremembered the album name.&lt;&#x2F;p&gt;
&lt;p&gt;I couldn&amp;#39;t find it, so I checked my purchases in the itunes store, where it also was not... so I checked the store itself, searching for an unpurchased album of the same name... which also yielded no results.&lt;&#x2F;p&gt;
&lt;p&gt;Thinking that it must only be available to people in the UK, or that because I purchased it in the UK which could explain why it&amp;#39;s not displaying; I reached for my credit card and changed stores.&lt;&#x2F;p&gt;
&lt;p&gt;Nope.&lt;&#x2F;p&gt;
&lt;p&gt;Maybe I imagined the album? maybe I can&amp;#39;t remember the real name.. and &lt;em&gt;maybe&lt;&#x2F;em&gt; I never bought the album from iTunes- I mean, six years ago I had just moved to Helsinki to work for Nokia, I was not using Apple devices..&lt;&#x2F;p&gt;
&lt;p&gt;So I check google.. It doesn&amp;#39;t help that the album name &amp;quot;Nightclub Life&amp;quot; was so non-unique, but thinking google images would have the album cover &lt;em&gt;somewhere&lt;&#x2F;em&gt; I checked.. I &lt;strong&gt;even&lt;&#x2F;strong&gt; went to page 2 of the results.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;google-images-no-cover.png&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;google-images-no-cover_small.png&quot; alt=&quot;Google images search results indicating no album cover present&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Nothing.&lt;&#x2F;p&gt;
&lt;p&gt;I must have imagined the whole thing.. but it was so distinct!&lt;&#x2F;p&gt;
&lt;p&gt;Last resort.. maybe I can grep the NAS.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;nas-found.png&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;nas-found_small.png&quot; alt=&quot;this image shows I found what I was looking for on my NAS&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Success!&lt;&#x2F;p&gt;
&lt;p&gt;I questioned my own sanity there; of course I can just import the thing back into iTunes; but I can&amp;#39;t put it on my phone since that requires wiping**!** the damn thing first... Apples ecosystem leaves much to be desired.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;syncing-itunes.jpg&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;syncing-itunes_small.jpg&quot; alt=&quot;syncing_itunes.jpg&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When I listened to the album it was garbage, I suppose I remembered one or two songs fondly and the album cover.. But that doesn&amp;#39;t mean Apple gets to decide they can remove stuff from the store that people paid for (and I did buy this from the store since all files are in the apple format, correctly tagged and have ownership information in them). Thank god they don&amp;#39;t have &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;pr&#x2F;library&#x2F;2009&#x2F;01&#x2F;06Changes-Coming-to-the-iTunes-Store.html&quot;&gt;DRM any longer&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;itunes-album-cover.png&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;images.blog.dijit.sh&#x2F;img&#x2F;importance-of-self-hosted-backups&#x2F;itunes-album-cover_small.png&quot; alt=&quot;This image indicates the album as it appears in OSX iTunes with its distinctive cover&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Let that be a lesson to me. Don&amp;#39;t assume Apple wont &lt;code&gt;rm&lt;&#x2F;code&gt; your shit when they feel like it, don&amp;#39;t depend on iCloud or iTunes entitlements when you purchase media. Keep it backed up.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
