<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Ruinous Writing</title>
    <link>https://blog.ruinous.social/</link>
    <description>Ruinous Writing—Read at your own peril.</description>
    <pubDate>Wed, 08 Apr 2026 01:21:56 +0000</pubDate>
    <item>
      <title>Gitea Merge Signing  (and everything else)</title>
      <link>https://blog.ruinous.social/gitea-merge-signing-and-everything-else</link>
      <description>&lt;![CDATA[I was trying to get Gitea to sign my initial commits, merges, and everything else not done directly by a user and ran into some frustration with the documentation. Here&#39;s how I solved it for my docker-compose setup, YMMV.&#xA;&#xA;I created a git user on my machine, and passed through the .ssh directory as outlined [here].&#xA;&#xA;su - git&#xA;gpg --generate-key&#xA;&#xA;I kept getting permission denied errors when trying to finalize the key, apparently gpg will prompt you for a passphrase and the tty permissions do not allow it. I was able to run the commands inside of tmux, and everything worked just fine.&#xA;&#xA;WARNING I skipped setting a passphrase because I wasn&#39;t sure how to make Gitea unlock the gpg key inside of docker. If anyone knows how to do this correctly, please let me know.&#xA;&#xA;After I had the key, I needed to mount the .gnupg directory inside my docker container&#xA;&#xA;version: &#34;3&#34;&#xA;&#xA;services:&#xA;  server:&#xA;    image: gitea/gitea:latest&#xA;    environment:&#xA;      USERUID=1000&#xA;      USERGID=1000&#xA;    restart: unless-stopped&#xA;    volumes:&#xA;      /opt/gitea/data:/data&#xA;      /home/git/.ssh:/data/git/.ssh&#xA;      /home/git/.gnupg:/data/git/.gnupg&#xA;      /etc/timezone:/etc/timezone:ro&#xA;      /etc/localtime:/etc/localtime:ro&#xA;    ports:&#xA;      &#34;127.0.0.1:3300:3000&#34;&#xA;      &#34;127.0.0.1:2222:22&#34;&#xA;&#xA;After all that was set, I needed to edit my app.ini file. (located in /opt/gitea/data/gitea/conf/app.ini on my local system).&#xA;&#xA;[repository.signing]&#xA;SIGNINGKEY = X8A0091299678863B5A2CBF3E478FEC0EA152FE5&#xA;SIGNINGNAME = Some Name&#xA;SIGNINGEMAIL = git@example.com&#xA;INITIALCOMMIT = always&#xA;CRUDACTIONS = pubkey, twofa, parentsigned&#xA;WIKI = never&#xA;MERGES = pubkey, twofa, basesigned, commitssigned&#xA;&#xA;The signing key is the key id that you just generated. You can get the keyid by running gpg --list-keys. Put that key id into the SIGNINGKEY field, and then be sure to set SIGNINGNAME and SIGNINGEMAIL.&#xA;&#xA;I restarted my docker containers, and voila, I had fully signed repos from initial commit, to all merged pull requests.&#xA;&#xA;--&#xD;&#xA;© 2022 iamruinous@ruinous.social]]&gt;</description>
      <content:encoded><![CDATA[<p>I was trying to get Gitea to sign my initial commits, merges, and everything else not done directly by a user and ran into some frustration with the documentation. Here&#39;s how I solved it for my docker-compose setup, YMMV.</p>

<p>I created a git user on my machine, and passed through the .ssh directory as outlined [here].</p>

<pre><code class="language-bash">su - git
gpg --generate-key
</code></pre>

<p>I kept getting <code>permission denied</code> errors when trying to finalize the key, apparently gpg will prompt you for a passphrase and the tty permissions do not allow it. I was able to run the commands inside of <code>tmux</code>, and everything worked just fine.</p>

<p><em>WARNING</em> I skipped setting a passphrase because I wasn&#39;t sure how to make Gitea unlock the gpg key inside of docker. If anyone knows how to do this correctly, please let me know.</p>

<p>After I had the key, I needed to mount the .gnupg directory inside my docker container</p>

<pre><code class="language-yaml">version: &#34;3&#34;

services:
  server:
    image: gitea/gitea:latest
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: unless-stopped
    volumes:
      - /opt/gitea/data:/data
      - /home/git/.ssh:/data/git/.ssh
      - /home/git/.gnupg:/data/git/.gnupg
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - &#34;127.0.0.1:3300:3000&#34;
      - &#34;127.0.0.1:2222:22&#34;
</code></pre>

<p>After all that was set, I needed to edit my <code>app.ini</code> file. (located in <code>/opt/gitea/data/gitea/conf/app.ini</code> on my local system).</p>

<pre><code class="language-ini">[repository.signing]
SIGNING_KEY = X8A0091299678863B5A2CBF3E478FEC0EA152FE5
SIGNING_NAME = Some Name
SIGNING_EMAIL = git@example.com
INITIAL_COMMIT = always
CRUD_ACTIONS = pubkey, twofa, parentsigned
WIKI = never
MERGES = pubkey, twofa, basesigned, commitssigned
</code></pre>

<p>The signing key is the key id that you just generated. You can get the keyid by running <code>gpg --list-keys</code>. Put that key id into the <code>SIGNING_KEY</code> field, and then be sure to set <code>SIGNING_NAME</code> and <code>SIGNING_EMAIL</code>.</p>

<p>I restarted my docker containers, and voila, I had fully signed repos from initial commit, to all merged pull requests.</p>

<p>—
© 2022 <a href="https://ruinous.social/@iamruinous">iamruinous@ruinous.social</a></p>
]]></content:encoded>
      <guid>https://blog.ruinous.social/gitea-merge-signing-and-everything-else</guid>
      <pubDate>Tue, 18 Jan 2022 08:34:34 +0000</pubDate>
    </item>
    <item>
      <title>The DUH Framework</title>
      <link>https://blog.ruinous.social/the-duh-framework</link>
      <description>&lt;![CDATA[I need to communicate better with my team. I created a framework to help myself. Introducing the DUH Framework. See the Github repo iamruinous/duh for the most up to date version.&#xA;&#xA;---&#xA;&#xA;DUH Framework - Communicate Better, duh.&#xA;Version 1.0.0&#xA;&#xA;I commit myself to using a simple, action-oriented, framework to better communicate with my team.&#xA;&#xA;Declare My Intent&#xA;Update Regularly&#xA;Have a Goal&#xA;&#xA;During the process of doing work, what I am doing will change, and I will repeat the cycle.&#xA;&#xA;Declare My Intent&#xA;Variability in schedules is challenging for me and my team to understand the current state of work.&#xA;&#xA;Action: Every time I take on work, I will declare my intent to work on it for my team to see.&#xA;&#xA;Update Regularly&#xA;Forgetting to communicate openly and frequently when working on a project I am passionate about can be dangerous. It is also difficult to remember to ask for help.&#xA;&#xA;Action: I will update my team on my progress at least one per day, preferably more frequently.&#xA;&#xA;Have A Goal&#xA;It is easy to get sidetracked if the goal is unclear. It is also hard to get support from the rest of the team if they don&#39;t understand my goal. I have master plans in my head that only the people I have spoken with may (or may not) know about. I am also not allowing input and feedback to improve my ideas.&#xA;&#xA;Action: Update the roadmap of the project with my desired end-state before starting the work. As part of Declare My Intent, I will re-state the goal to my team to remind myself why I am doing the work and where I want to end up.Paste&#xA;&#xA;--&#xD;&#xA;© 2022 iamruinous@ruinous.social]]&gt;</description>
      <content:encoded><![CDATA[<p>I need to communicate better with my team. I created a framework to help myself. Introducing the DUH Framework. See the Github repo <a href="https://github.com/iamruinous/duh">iamruinous/duh</a> for the most up to date version.</p>

<hr>

<h1 id="duh-framework-communicate-better-duh">DUH Framework – Communicate Better, duh.</h1>

<p>Version 1.0.0</p>

<p>I commit myself to using a simple, action-oriented, framework to better communicate with my team.</p>
<ul><li><a href="#declare-my-intent">Declare My Intent</a></li>
<li><a href="#update-regularly">Update Regularly</a></li>
<li><a href="#have-a-goal">Have a Goal</a></li></ul>

<p>During the process of <em>doing work</em>, what I am doing will change, and I will repeat the cycle.</p>

<h2 id="declare-my-intent">Declare My Intent</h2>

<p>Variability in schedules is challenging for me and my team to understand the current state of work.</p>

<p><strong>Action</strong>: Every time I take on work, I will declare my intent to work on it for my team to see.</p>

<h2 id="update-regularly">Update Regularly</h2>

<p>Forgetting to communicate openly and frequently when working on a project I am passionate about can be dangerous. It is also difficult to remember to ask for help.</p>

<p><strong>Action</strong>: I will update my team on my progress at least one per day, preferably more frequently.</p>

<h2 id="have-a-goal">Have A Goal</h2>

<p>It is easy to get sidetracked if the goal is unclear. It is also hard to get support from the rest of the team if they don&#39;t understand my goal. I have master plans in my head that only the people I have spoken with may (or may not) know about. I am also not allowing input and feedback to improve my ideas.</p>

<p><strong>Action</strong>: Update the roadmap of the project with my desired end-state before starting the work. As part of <a href="#declare-my-intent">Declare My Intent</a>, I will re-state the goal to my team to remind myself why I am doing the work and where I want to end up.</p>

<p>—
© 2022 <a href="https://ruinous.social/@iamruinous">iamruinous@ruinous.social</a></p>
]]></content:encoded>
      <guid>https://blog.ruinous.social/the-duh-framework</guid>
      <pubDate>Fri, 25 Mar 2016 07:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Twenty-Something Theses of Autonomy</title>
      <link>https://blog.ruinous.social/twenty-something-theses-of-autonomy</link>
      <description>&lt;![CDATA[I believe in a radically different organization than what exists in the world today. In order to build the new economy (and thus a new world) our ideas of how an organization works must be challenged (&amp;#8220;You can&amp;#8217;t make an omelete [sic] without nuking the existing social order&amp;#8220;). A keystone of this &amp;#8220;new way&amp;#8221; is Autonomy. In order to get the best results, Freedom is essential. I have begun the process of capturing my theory in my &amp;#8220;Twenty-Something Theses of Autonomy.&amp;#8221; This list will evolve as I expand on each of these Theses, however, I want to begin the improvement process now by starting a discussion.&#xA;&#xA;Do you see anything obvious missing? What has your experience taught you? Let&amp;#8217;s talk.&#xA;&#xA;Twenty-Something Theses of Autonomy&#xA;&#xA;  Customer Delight Cannot Exceed Worker Delight&#xA;  Fully Engaged + Fully Present = Fully Human&#xA;  Humans Own Outcomes&#xA;  Creativity Seeks Free Spirits&#xA;  Nonlinear Innovation Needs Creativity&#xA;  Innovation Breeds Failure Breeds Innovation&#xA;  Community Improves Results (and Expedites Failure)&#xA;  Fear is the Org Killer&#xA;  Telling Triples Turnover&#xA;  Demanding Delivers Dummies&#xA;  Teams Solve Difficult Problems&#xA;  Autonomy Trumps Hegemony&#xA;  Ivory Towers Are For Wizards (and Look Where That Got Saruman)&#xA;  Only Gamblers Pick Winners&#xA;  Diversity Wins&#xA;  The Best Ideas are at the Market&#xA;  Heterogenous Systems Increase Effectiveness (over time)&#xA;  Simple is Better&#xA;  Maximize Laziness&#xA;  Effort is Expensive&#xA;  Results   Effort&#xA;  Only Results Matter&#xA;  Adults Come to Work&#xA;  Team = Product&#xA;  (Team + Product)^n = Organization&#xA;  Leaders Don&amp;#8217;t Manage&#xA;  Results Cover a Multitude of Sins&#xA;&#xA; [1]: http://www.cluetrain.com/passages.html#hyperlinked&#xA;&#xA;--&#xD;&#xA;© 2022 iamruinous@ruinous.social]]&gt;</description>
      <content:encoded><![CDATA[<p>I believe in a radically different organization than what exists in the world today. In order to build the new economy (and thus a new world) our ideas of how an organization works must be challenged (“<a href="http://www.cluetrain.com/passages.html#hyperlinked">You can’t make an omelete [sic] without nuking the existing social order</a>“). A keystone of this “new way” is Autonomy. In order to get the best results, Freedom is essential. I have begun the process of capturing my theory in my “Twenty-Something Theses of Autonomy.” This list will evolve as I expand on each of these Theses, however, I want to begin the improvement process now by starting a discussion.</p>

<p>Do you see anything obvious missing? What has your experience taught you? Let’s talk.</p>

<h2 id="twenty-something-theses-of-autonomy">Twenty-Something Theses of Autonomy</h2>
<ul><li>Customer Delight Cannot Exceed Worker Delight</li>
<li>Fully Engaged + Fully Present = Fully Human</li>
<li>Humans Own Outcomes</li>
<li>Creativity Seeks Free Spirits</li>
<li>Nonlinear Innovation Needs Creativity</li>
<li>Innovation Breeds Failure Breeds Innovation</li>
<li>Community Improves Results (and Expedites Failure)</li>
<li>Fear is the Org Killer</li>
<li>Telling Triples Turnover</li>
<li>Demanding Delivers Dummies</li>
<li>Teams Solve Difficult Problems</li>
<li>Autonomy Trumps Hegemony</li>
<li>Ivory Towers Are For Wizards (and Look Where That Got Saruman)</li>
<li>Only Gamblers Pick Winners</li>
<li>Diversity Wins</li>
<li>The Best Ideas are at the Market</li>
<li>Heterogenous Systems Increase Effectiveness (over time)</li>
<li>Simple is Better</li>
<li>Maximize Laziness</li>
<li>Effort is Expensive</li>
<li>Results &gt; Effort</li>
<li>Only Results Matter</li>
<li>Adults Come to Work</li>
<li>Team = Product</li>
<li>(Team + Product)^n = Organization</li>
<li>Leaders Don’t Manage</li>
<li>Results Cover a Multitude of Sins</li></ul>

<p>—
© 2022 <a href="https://ruinous.social/@iamruinous">iamruinous@ruinous.social</a></p>
]]></content:encoded>
      <guid>https://blog.ruinous.social/twenty-something-theses-of-autonomy</guid>
      <pubDate>Mon, 27 Jan 2014 22:25:24 +0000</pubDate>
    </item>
  </channel>
</rss>