<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>&#x2F;home&#x2F;orva</title>
    <link rel="self" type="application/atom+xml" href="https://orva.fi/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://orva.fi"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-02-26T00:00:00+00:00</updated>
    <id>https://orva.fi/atom.xml</id>
    <entry xml:lang="en">
        <title>Troubleshooting flaky multi monitor setup with RX 9060 XT</title>
        <published>2026-02-26T00:00:00+00:00</published>
        <updated>2026-02-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              orva
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://orva.fi/amdgpu-troubleshooting/"/>
        <id>https://orva.fi/amdgpu-troubleshooting/</id>
        
        <content type="html" xml:base="https://orva.fi/amdgpu-troubleshooting/">&lt;p&gt;This was originally
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;social.orva.fi&#x2F;@orva&#x2F;statuses&#x2F;01KG9Q6E5MX4T36M9PRSHKV6Q8&quot;&gt;tooted&lt;&#x2F;a&gt; a
while ago.&lt;&#x2F;p&gt;
&lt;p&gt;I &quot;recently&quot; moved my Radeon RX 9060 XT GPU from my Windows gaming PC to my
Linux box so I could test how well games run under Proton. There was just one
extremely annoying problem: if I had both of my monitors connected, one of them
would repeatedly disconnect. There was no system logs or dmesg output, monitor
just flickers. Everything worked in previous PC: same monitors and same cables,
just different OS.&lt;&#x2F;p&gt;
&lt;p&gt;So I have been running with only one monitor for while because games have been
running really well on this machine (even though CPU and RAM are not near as
good as the ones in the Windows box). Which is lovely! But this monitor
situation has been bothering me more and more as time went on.&lt;&#x2F;p&gt;
&lt;p&gt;Debugging these kind of display problems is bit painful for me as flickering
monitors can trigger migraine and low refresh rates trigger dyslexia.. which in
turn can trigger migraines. So I kinda had to collect some spoons and
annoyance&#x2F;spite for debugging to happen. Well, spite was collected and it was
time to collect some observations:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;one of the monitors started flickering, not both of them&lt;&#x2F;li&gt;
&lt;li&gt;display refresh rate list was bit weird looking 143.98, 120, 59.95&lt;&#x2F;li&gt;
&lt;li&gt;having same&#x2F;different refresh rates didn&#x27;t have effect&lt;&#x2F;li&gt;
&lt;li&gt;curiously having 59.95 on both monitors stopped monitor disconnecting!&lt;&#x2F;li&gt;
&lt;li&gt;everything above repeats on KDE and Gnome, both on Wayland&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This was not solution though, I can&#x27;t stand the sluggish cursor with 60hz
refresh rate and it is absolutely no-go for games. It would also tire my eyes
quicker -&amp;gt; migraine territory.&lt;&#x2F;p&gt;
&lt;p&gt;So now hypothesis was that maybe the GPU cannot keep the refresh rate stable and
monitor does not like it? This &lt;em&gt;could&lt;&#x2F;em&gt; also explain why there was no log output,
issue happens at too low level for default logging? Time to enable &quot;variable
refresh&quot; in monitor settings and put &quot;adaptive sync - always&quot; on. Idea was that
if refresh rate doesn&#x27;t stay stable but monitor somewhat expects this, it might
be fine?&lt;&#x2F;p&gt;
&lt;p&gt;....aaaaaand this seems to work? So far there hasn&#x27;t been monitor
flickering&#x2F;disconnecting. Been running these settings for about a month now and
there has been no issues, even under heavy load.&lt;&#x2F;p&gt;
&lt;p&gt;Hopefully this is useful for someone else as well.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My little GoToSocial installation tweaks</title>
        <published>2025-04-27T00:00:00+00:00</published>
        <updated>2025-04-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              orva
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://orva.fi/gotosocial-installation/"/>
        <id>https://orva.fi/gotosocial-installation/</id>
        
        <content type="html" xml:base="https://orva.fi/gotosocial-installation/">&lt;p&gt;I started hosting my own &lt;a rel=&quot;external&quot; title=&quot;GoToSocial homepage&quot; href=&quot;https:&#x2F;&#x2F;gotosocial.org&#x2F;&quot;&gt;GoToSocial&lt;&#x2F;a&gt; instance this weekend and &quot;bravely&quot; moved
from the old instance immediately. Configuration was straightforward operation,
I mostly just followed upstream documentation and went with defaults. I do have
some opinions how I like to maintain servers, so &quot;obviously&quot; I had to tweak
things a little regarding how and where things are installed.&lt;&#x2F;p&gt;
&lt;p&gt;This post is mostly about those little tweaks. So basically thoughts about how
I want to install software that is not packaged for distribution server is
running and how I applied that to GoToSocial.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-upstream-gotosocial-recommends&quot;&gt;What upstream GoToSocial recommends&lt;&#x2F;h2&gt;
&lt;p&gt;Steps from &lt;a rel=&quot;external&quot; title=&quot;GoToSocial bare metal installation instructions&quot; href=&quot;https:&#x2F;&#x2F;docs.gotosocial.org&#x2F;en&#x2F;latest&#x2F;getting_started&#x2F;installation&#x2F;metal&#x2F;&quot;&gt;installation&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; title=&quot;GoToSocial configuration instructions&quot; href=&quot;https:&#x2F;&#x2F;docs.gotosocial.org&#x2F;en&#x2F;latest&#x2F;configuration&#x2F;&quot;&gt;configuration&lt;&#x2F;a&gt; steps could be summarized to this:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;download and extract release tarball to &lt;code&gt;&#x2F;gotosocial&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;copy &lt;code&gt;&#x2F;gotosocial&#x2F;example&#x2F;config.yaml&lt;&#x2F;code&gt; to &lt;code&gt;&#x2F;gotosocial&#x2F;config.yaml&lt;&#x2F;code&gt; and edit
according to the documentation&lt;&#x2F;li&gt;
&lt;li&gt;copy &lt;code&gt;&#x2F;gotosocial&#x2F;example&#x2F;gotosocial.service&lt;&#x2F;code&gt; to
&lt;code&gt;&#x2F;etc&#x2F;systemd&#x2F;system&#x2F;gotosocial.service&lt;&#x2F;code&gt; and edit according to the
documentation&lt;&#x2F;li&gt;
&lt;li&gt;systemd service sets working directory to &lt;code&gt;&#x2F;gotosocial&lt;&#x2F;code&gt; and all state is
stored there&lt;&#x2F;li&gt;
&lt;li&gt;when updating, extract new tarball on top of the &lt;code&gt;&#x2F;gotosocial&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Now, these are wonderfully simple instructions for people who do not have that
much experience about CLI or maintaining servers. I really like that! It is a
really, &lt;strong&gt;really&lt;&#x2F;strong&gt; lovely that hosting this kind of nontrivial service is made
to be approachable as possible.&lt;&#x2F;p&gt;
&lt;p&gt;I just have opinions how I want &lt;em&gt;my&lt;&#x2F;em&gt; servers to look like, which differs from
that.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-i-want-something-different&quot;&gt;Why I want something different?&lt;&#x2F;h2&gt;
&lt;p&gt;I want to be able to roll back to older release if there are problems.
Obviously it probably is not going to be possible with GoToSocial which is
often running big database migrations between updates and is pre-1.0. I still
like to approach the installation like I could do rollbacks for consistency’s
sake.&lt;&#x2F;p&gt;
&lt;p&gt;With software packaged for the distribution, downgrade is just simple
pacman&#x2F;apt&#x2F;dnf incantation. With non-packaged software some work is needed to
get there, I need to keep old versions around and make it relatively easy to
switch between them. For the most recoverable solution I would do something
like this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;store application bundles under &lt;code&gt;&#x2F;opt&#x2F;software&#x2F;&amp;lt;version&amp;gt;&#x2F;&lt;&#x2F;code&gt; and symlink
currently in use bundle to &lt;code&gt;&#x2F;opt&#x2F;software&#x2F;current&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;store configurations under &lt;code&gt;&#x2F;opt&#x2F;software&#x2F;configs&#x2F;&amp;lt;version&amp;gt;&#x2F;&lt;&#x2F;code&gt; and symlink
current configuration to &lt;code&gt;&#x2F;opt&#x2F;software&#x2F;configs&#x2F;current&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;or &lt;code&gt;&#x2F;etc&#x2F;application&#x2F;&amp;lt;version&amp;gt;&lt;&#x2F;code&gt; and &lt;code&gt;&#x2F;etc&#x2F;application&#x2F;current&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;With that setup both bundles and configurations can be rolled back, together or
individually.&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t bother going that complicated with my own server setup as these are
rather simple and slow moving targets where I don&#x27;t need to recover
catastrophes fast. Those capabilities are really handy in work context though!&lt;&#x2F;p&gt;
&lt;p&gt;Other approach would be to package software by myself. I just find above
approach be less painful than trying to get apt&#x2F;rpm tooling happy. Or use
containers. Containers are just are still in a phase where setup breaks after
every distro upgrade. That is not something I want to deal with in server I
maintain with my free time and where I don&#x27;t benefit from the flexibility of
containerization.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ansiblefy-everything&quot;&gt;Ansiblefy everything&lt;&#x2F;h2&gt;
&lt;p&gt;I might not be big fan of &lt;a rel=&quot;external&quot; title=&quot;Ansible homapage&quot; href=&quot;https:&#x2F;&#x2F;docs.ansible.com&#x2F;&quot;&gt;Ansible&lt;&#x2F;a&gt;, but it is rather pragmatic and widely used
tool. It is also a tool that I am somewhat familiar with, and it breaks in
expected ways.&lt;&#x2F;p&gt;
&lt;p&gt;So my ansiblefied install&#x2F;upgrade flow for GoToSocial this:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;download and extract release to &lt;code&gt;&#x2F;opt&#x2F;gotosocial&#x2F;&amp;lt;version&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;generate &lt;code&gt;&#x2F;etc&#x2F;gotosocial&#x2F;config.yaml&lt;&#x2F;code&gt; from jinja template, required to
parametrize following config options:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;web-template-base-dir&lt;&#x2F;code&gt;: &lt;code&gt;&#x2F;opt&#x2F;gotosocial&#x2F;&amp;lt;version&amp;gt;&#x2F;web&#x2F;template&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;web-asset-base-dir&lt;&#x2F;code&gt;: &lt;code&gt;&#x2F;opt&#x2F;gotosocial&#x2F;&amp;lt;version&amp;gt;&#x2F;web&#x2F;assets&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;also set &lt;code&gt;storage-local-base-path&lt;&#x2F;code&gt;: &lt;code&gt;&#x2F;var&#x2F;lib&#x2F;gotosocial&#x2F;storage&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;also set &lt;code&gt;db-address&lt;&#x2F;code&gt;: &lt;code&gt;&#x2F;var&#x2F;lib&#x2F;gotosocial&#x2F;sqlite.db&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;generate &lt;code&gt;&#x2F;etc&#x2F;systemd&#x2F;system&#x2F;gotosocial.service&lt;&#x2F;code&gt; from jinja template,
required to parametrize &lt;code&gt;ExecStart&lt;&#x2F;code&gt; to point to the correct
&lt;code&gt;&#x2F;opt&#x2F;gotosocial&#x2F;&amp;lt;version&amp;gt;&#x2F;gotosocial&lt;&#x2F;code&gt; binary&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Of course there is a bit more fluff around that to make sure required directories
exist, have proper access rights, (re)starts happen, etc. But that is something
I cannot avoid with the more manual approach either.&lt;&#x2F;p&gt;
&lt;p&gt;Now updates are just &quot;read release notes for special steps&quot;, put new version
number into playbook and few moments later a brand new service is running.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Why I don&#x27;t use Node.js for hobby projects?</title>
        <published>2024-04-06T00:00:00+00:00</published>
        <updated>2024-04-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              orva
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://orva.fi/why-not-node/"/>
        <id>https://orva.fi/why-not-node/</id>
        
        <content type="html" xml:base="https://orva.fi/why-not-node/">&lt;p&gt;At previous work the most common tech stack by far was PostgreSQL + Node.js +
React. Even if main portion of the project was not built with that stack, there
usually was some Node.js component lurking nearby. If I recall correctly the
earliest Node.js version I have seen in production environment is &lt;a rel=&quot;external&quot; title=&quot;Node.js v0.8 release announcement&quot; href=&quot;https:&#x2F;&#x2F;nodejs.org&#x2F;en&#x2F;blog&#x2F;release&#x2F;v0.8.0&quot;&gt;v0.8&lt;&#x2F;a&gt;, that
is almost 12 year old release! I have seen the &lt;a rel=&quot;external&quot; title=&quot;io.js github page&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;artillery&#x2F;io.js&#x2F;&quot;&gt;io.js fork&lt;&#x2F;a&gt; saga unfold. I
remember the JS ecosystem evolving from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Continuation-passing_style&quot;&gt;CSP&lt;&#x2F;a&gt; to CSP helpers, from CSP helpers
to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;Promise#thenables&quot;&gt;Promise&#x2F;Thenable&lt;&#x2F;a&gt; libraries (&lt;a rel=&quot;external&quot; title=&quot;q github page&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kriskowal&#x2F;q&quot;&gt;q&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; title=&quot;bluebird github page&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;petkaantonov&#x2F;bluebird&quot;&gt;bluebird&lt;&#x2F;a&gt;), from Promise
libraries to native Promises and latest syntactic iteration: async-await.&lt;&#x2F;p&gt;
&lt;p&gt;That is around 10 years of mainly using JavaScript and Typescript at work, even
when taking into account all the C++ and embedded projects I was involved with.
So amount of JS&#x2F;TS diffs I have written is probably in hundreds of thousands of
lines.&lt;&#x2F;p&gt;
&lt;p&gt;So why I don&#x27;t have any hobby projects with Node.js stack? Even with all the
pros?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-are-the-node-js-pros&quot;&gt;What are the Node.js pros?&lt;&#x2F;h2&gt;
&lt;p&gt;The amount of good enough libraries is astounding! There probably isn&#x27;t
protocol or file format which doesn&#x27;t have usable library readily available.
Node.js ecosystem is popular enough that there is often multiple competing
libraries or tools for the same task, with different tradeoffs and advantages.&lt;&#x2F;p&gt;
&lt;p&gt;Developer experience for starting new projects is astounding! Dependencies
require just simple &lt;code&gt;npm install&lt;&#x2F;code&gt; and are ready to use, in both locally and in
the host&#x2F;container you are deploying to. For more complex project setups there
is often popular &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.npmjs.com&#x2F;search?q=create-app&quot;&gt;project template&lt;&#x2F;a&gt; available which requires just &lt;code&gt;npx &amp;lt;template&amp;gt; my-project&lt;&#x2F;code&gt; and off you go. One cannot deny how convenient the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;npmjs.com&#x2F;&quot;&gt;npm&lt;&#x2F;a&gt;
ecosystem is when project is starting or in full swing.&lt;&#x2F;p&gt;
&lt;p&gt;Node.js scaling! Hobby projects probably won&#x27;t need the upwards scalability
from asynchronous approach, but the Node&#x27;s quite miniscule minimum requirements
and resource usage when not under load are very nice. Running Node.js projects
on single board computers like Raspberry Pi is not a problem.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;node-js-cons&quot;&gt;Node.js cons&lt;&#x2F;h2&gt;
&lt;p&gt;The most pressing issue is that ecosystem &lt;em&gt;feels&lt;&#x2F;em&gt; inherently unstable. There
hasn&#x27;t been huge shifts like iojs or Promises in a long time, but there is
constant shuffle in library ecosystem. Which can be frustrating even when
project has people working on it every day and thus amortizing all the work
caused by the shifting foundation over longer time period. But this is horrible
when touching a project maybe few time a year! Even isolated &quot;update dependency
to fix CVE&quot; has real potential to evolve into cascading &quot;update everything and
everything is incompatible without code changes&quot; nightmare. The nightmare
situation is even more likely to happen when there are only bursts of
development activity with long pauses between.&lt;&#x2F;p&gt;
&lt;p&gt;One can argue that solution is just not to use dependencies, but that npm
ecosystem &lt;em&gt;is&lt;&#x2F;em&gt; one of the strong points of Node.js, not taking advantage of it
would be kind of silly. Other sanity saving option would be to use older and
maybe more stable libraries, but there are few gotchas.&lt;&#x2F;p&gt;
&lt;p&gt;It feels like more stable libraries are properly old (in JS timeframe) like
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;knexjs.org&#x2F;&quot;&gt;Knex.js&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;expressjs.com&#x2F;&quot;&gt;Express&lt;&#x2F;a&gt;, which comes with all the baggage from that age. Those
libraries are born in times when there was no Promises, there was no
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.typescriptlang.org&#x2F;&quot;&gt;TypeScript&lt;&#x2F;a&gt; (or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;flow.org&#x2F;&quot;&gt;flow&lt;&#x2F;a&gt;), no &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nodejs.org&#x2F;api&#x2F;esm.html&quot;&gt;ECMAScript modules&lt;&#x2F;a&gt; (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nodejs.org&#x2F;api&#x2F;modules.html&quot;&gt;CommonJS&lt;&#x2F;a&gt; was not yet
universal, like it was for while) and many other small ergonomic issues from
modern standpoint. These old libraries have evolved with the times (causing,
you guessed it, some minor compatibility problems), but they still come with
some API warts that cannot be fixed without breaking every downstream project.&lt;&#x2F;p&gt;
&lt;p&gt;Then there is the more experimental libraries which might have really nice
ergonomics but come with high risk of being abandoned or API instability. It is
very difficult to guess which of those newer libraries will be around after a
year or two. I can guess few reasons for the instability part: those libraries
and tools tend to be either one person hobby projects or built by VC funded
startups. Both of which have been in spotlight lately for issues related to
them: abuse&#x2F;burnout in case of hobby projects and walled gardens in case of
company backed projects.&lt;&#x2F;p&gt;
&lt;p&gt;It feels like there is no middle ground between these two extremes.&lt;&#x2F;p&gt;
&lt;p&gt;So sadly it is hard to see situation getting better in the near future, which
means that I won&#x27;t be using JS&#x2F;TS for my few hobby coding hours. Maybe that is
good thing, doing my part to keep extra churn out of the ecosystem.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
