<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Vyroda</title>
    <link>http://blog.vyroda.com/</link>
    <description>Vyroda game engine</description>
    <pubDate>Fri, 17 Apr 2026 17:24:18 +0200</pubDate>
    <item>
      <title>Fork-Join with std::barrier</title>
      <link>http://blog.vyroda.com/fork-join-with-std-barrier</link>
      <description>&lt;![CDATA[To improve the performance of my game engine, I was looking for a simple and almost native solution (i.e no boilerplate or framework), to render many entities on different threads. And that&#39;s in fact fairly easy to do thanks to std::barrier!&#xA;&#xA;!--more--&#xA;&#xA;There is a few step to implement:&#xA;&#xA;a pool of threads&#xA;few structs to hold data&#xA;feed the workers with some jobs to do&#xA;&#xA;In ParallelManager.cppm:&#xA;&#xA;//as soon as better alternative are available, std::function will be removed&#xA;struct WorkerContext&#xA;{&#xA;  //std::functionrefvoid() task;&#xA;  //std::moveonlyfunctionvoid() task;&#xA;  std::functionvoid() task;&#xA;};&#xA;&#xA;//will be used for the pointer that will hold everything together&#xA;struct BarrierData;    &#xA;&#xA;export class ParallelManager&#xA;{&#xA;  public:&#xA;&#xA;   ParallelManager();&#xA;   ~ParallelManager();&#xA;&#xA;   std::sizet size() const { return workers.size(); }&#xA;   void execute(std::spanstd::function&lt;void()  tasks);&#xA;&#xA;  private:&#xA;    //number of thread available&#xA;    std::ptrdifft threadcount { staticcaststd::ptrdifft(std::thread::hardwareconcurrency()) };&#xA;&#xA;    //pointer to glue everything together&#xA;    std::uniqueptrBarrierData barrierdata;&#xA;&#xA;   //vector of workers context&#xA;   std::vectorWorkerContext workercontexts;&#xA;&#xA;  //threads pool&#xA;  std::vectorstd::jthread workers;&#xA;}&#xA;&#xA;Then in my ParallelManager.cpp:&#xA;&#xA;  //initialize the pool thread&#xA;  ParallelManager::ParallelManager()&#xA;  : barrierdata{ std::makeuniqueBarrierData() }&#xA;  {&#xA;    workercontexts.resize(staticcaststd::sizet(threadcount));&#xA;    workers.reserve(staticcaststd::sizet(threadcount));&#xA;&#xA;    for (std::sizet t { 0 }; t  staticcast&lt;std::sizet(threadcount); ++t) {&#xA;      workers.emplaceback(this, t {&#xA;        while (!stoken.stoprequested()) {&#xA;          barrierdata-  start.arriveandwait();&#xA;          if (stoken.stoprequested()) break;&#xA;          if (workercontexts[t].task) {&#xA;            workercontexts[t].task();&#xA;          }&#xA;          barrierdata-  done.arriveandwait();&#xA;        }&#xA;      });&#xA;    }&#xA;  }&#xA;&#xA;  //don&#39;t forget to clean up&#xA;  ParallelManager::~ParallelManager()&#xA;  {&#xA;    for(auto&amp; worker : workers) {&#xA;        worker.requeststop();&#xA;    }&#xA;    barrierdata-  start.arriveandwait();&#xA;  }&#xA;&#xA;//execute any task&#xA;  void ParallelManager::execute(std::spanstd::function&lt;void()  tasks)&#xA;  {&#xA;    for (std::sizet i {0}; i &lt; tasks.size(); i++) {&#xA;      workercontexts[i].task = std::move(tasks[i]);&#xA;    }&#xA;&#xA;    barrierdata-  start.arriveandwait();&#xA;    barrierdata-  done.arriveandwait();&#xA;&#xA;    for (std::sizet i {0}; i &lt; tasks.size(); i++) {&#xA;      workercontexts[i].task = nullptr;&#xA;    }&#xA;  }&#xA;}&#xA;&#xA;Now that the setup is done, we just need to give some work to the workers, so in the game loop when I want to render entities:&#xA;&#xA;   //getting the size of a chunk&#xA;    auto const count { ParallelManagerLocator::get()-  size() };&#xA;    auto const chunksize { allids.size() / count };&#xA;    auto const remainder  { allids.size() % count };&#xA;&#xA;    std::vectorstd::function&lt;void()  tasks;&#xA;    tasks.reserve(count);&#xA;&#xA;    std::sizet offset { 0 };&#xA;    for (std::sizet t { 0 }; t &lt; count; ++t) {&#xA;      auto const n { chunksize + (t &lt; remainder ? 1 : 0) };&#xA;      auto const ids { std::span{ allids.data() + offset, n } };&#xA;      tasks.emplaceback(ids, deltatime, cameraviewmatrix, this {&#xA;        for (auto const id : ids) {&#xA;          renderEntity(id, deltatime, cameraviewmatrix);&#xA;        }&#xA;      });&#xA;      offset += n;&#xA;    }&#xA;    ParallelManagerLocator::get()-  execute(tasks);&#xA;&#xA;The implementation is simple and quite efficient, just with this I gain more than 50 fps on a simple scene, it will probably be even better when std::function is replaced by std::moveonlyfunction or std::function_ref.&#xA;&#xA;I am expecting a great improvement in performance overall now that I can run simple tasks in parallel!&#xA;&#xA;---&#xA;Come discuss&#xA;Join the conversation on the Vyroda Forum.&#xA;Check out the latest engine features on Vyroda.com&#xA;mastodon&#xA;Contact me]]&gt;</description>
      <content:encoded><![CDATA[<p>To improve the performance of my game engine, I was looking for a simple and almost native solution (i.e no boilerplate or framework), to render many entities on different threads. And that&#39;s in fact fairly easy to do thanks to std::barrier!</p>



<p>There is a few step to implement:</p>
<ul><li>a pool of threads</li>
<li>few structs to hold data</li>
<li>feed the workers with some jobs to do</li></ul>

<p>In ParallelManager.cppm:</p>

<pre><code class="language-cpp">//as soon as better alternative are available, std::function will be removed
struct WorkerContext
{
  //std::function_ref&lt;void()&gt; task;
  //std::move_only_function&lt;void()&gt; task;
  std::function&lt;void()&gt; task;
};

//will be used for the pointer that will hold everything together
struct BarrierData;    

export class ParallelManager
{
  public:

   ParallelManager();
   ~ParallelManager();

   std::size_t size() const { return _workers.size(); }
   void execute(std::span&lt;std::function&lt;void()&gt;&gt; tasks);

  private:
    //number of thread available
    std::ptrdiff_t _thread_count { static_cast&lt;std::ptrdiff_t&gt;(std::thread::hardware_concurrency()) };

    //pointer to glue everything together
    std::unique_ptr&lt;BarrierData&gt; _barrier_data;

   //vector of workers context
   std::vector&lt;WorkerContext&gt; _worker_contexts;

  //threads pool
  std::vector&lt;std::jthread&gt; _workers;
}
</code></pre>

<p>Then in my ParallelManager.cpp:</p>

<pre><code class="language-cpp">  //initialize the pool thread
  ParallelManager::ParallelManager()
  : _barrier_data{ std::make_unique&lt;BarrierData&gt;() }
  {
    _worker_contexts.resize(static_cast&lt;std::size_t&gt;(_thread_count));
    _workers.reserve(static_cast&lt;std::size_t&gt;(_thread_count));

    for (std::size_t t { 0 }; t &lt; static_cast&lt;std::size_t&gt;(_thread_count); ++t) {
      _workers.emplace_back([this, t](std::stop_token stoken) {
        while (!stoken.stop_requested()) {
          _barrier_data-&gt;start.arrive_and_wait();
          if (stoken.stop_requested()) break;
          if (_worker_contexts[t].task) {
            _worker_contexts[t].task();
          }
          _barrier_data-&gt;done.arrive_and_wait();
        }
      });
    }
  }

  //don&#39;t forget to clean up
  ParallelManager::~ParallelManager()
  {
    for(auto&amp; worker : _workers) {
        worker.request_stop();
    }
    _barrier_data-&gt;start.arrive_and_wait();
  }

//execute any task
  void ParallelManager::execute(std::span&lt;std::function&lt;void()&gt;&gt; tasks)
  {
    for (std::size_t i {0}; i &lt; tasks.size(); i++) {
      _worker_contexts[i].task = std::move(tasks[i]);
    }

    _barrier_data-&gt;start.arrive_and_wait();
    _barrier_data-&gt;done.arrive_and_wait();

    for (std::size_t i {0}; i &lt; tasks.size(); i++) {
      _worker_contexts[i].task = nullptr;
    }
  }
}
</code></pre>

<p>Now that the setup is done, we just need to give some work to the workers, so in the game loop when I want to render entities:</p>

<pre><code class="language-cpp">   //getting the size of a chunk
    auto const count { ParallelManagerLocator::get()-&gt;size() };
    auto const chunk_size { _all_ids.size() / count };
    auto const remainder  { _all_ids.size() % count };

    std::vector&lt;std::function&lt;void()&gt;&gt; tasks;
    tasks.reserve(count);

    std::size_t offset { 0 };
    for (std::size_t t { 0 }; t &lt; count; ++t) {
      auto const n { chunk_size + (t &lt; remainder ? 1 : 0) };
      auto const ids { std::span{ _all_ids.data() + offset, n } };
      tasks.emplace_back([ids, delta_time, camera_view_matrix, this]() {
        for (auto const id : ids) {
          renderEntity(id, delta_time, camera_view_matrix);
        }
      });
      offset += n;
    }
    ParallelManagerLocator::get()-&gt;execute(tasks);
</code></pre>

<p>The implementation is simple and quite efficient, just with this I gain more than 50 fps on a simple scene, it will probably be even better when std::function is replaced by std::move<em>only</em>function or std::function_ref.</p>

<p>I am expecting a great improvement in performance overall now that I can run simple tasks in parallel!</p>

<hr>

<p><strong>Come discuss</strong>
Join the conversation on the <a href="https://forum.vyroda.com/d/3-fork-join-with-stdbarrier">Vyroda Forum</a>.
Check out the latest engine features on <a href="https://vyroda.com">Vyroda.com</a>
<a href="https://mastodon.social/@vyroda">mastodon</a>
<a href="mailto:dev@vyroda.com">Contact me</a></p>
]]></content:encoded>
      <guid>http://blog.vyroda.com/fork-join-with-std-barrier</guid>
      <pubDate>Thu, 16 Apr 2026 17:42:29 +0200</pubDate>
    </item>
    <item>
      <title>To-read list of 2026</title>
      <link>http://blog.vyroda.com/to-read-list-of-2026</link>
      <description>&lt;![CDATA[This page is mostly for me, but if you have any suggestion about a good book send me your idea dev at vyroda dot com or share your ideas on the forum&#xA;&#xA;!--more--&#xA;&#xA;This year it&#39;s a mix of low level and abstraction level theme for me.&#xA;&#xA;OSTEP (done)&#xA;A philosophy of software design (DNF)&#xA;SICP (reading, but taking a pause, it&#39;s a very dense book, maybe I&#39;ll try clojure instead of racket-lang when I&#39;ll pick it up again)&#xA;TCP/IP illustrated volume 1 (just started! 19/03/2026)&#xA;Visual Differential Geometry and Forms: A Mathematical Drama in Five Acts (just started! 26/03/2026&#xA;Classic Game Programming on the NES&#xA;MPI https://github.com/jreuben11/MPI_book/tree/main&#xA;(not a definitive list)&#xA;&#xA;---&#xA;Come discuss&#xA;Join the conversation on the Vyroda Forum.&#xA;Check out the latest engine features on Vyroda.com&#xA;mastodon&#xA;Contact me]]&gt;</description>
      <content:encoded><![CDATA[<p>This page is mostly for me, but if you have any suggestion about a good book send me your idea dev at vyroda dot com or share your ideas on the forum</p>



<p>This year it&#39;s a mix of low level and abstraction level theme for me.</p>
<ul><li>OSTEP (done)</li>
<li>A philosophy of software design (DNF)</li>
<li>SICP (reading, but taking a pause, it&#39;s a very dense book, maybe I&#39;ll try clojure instead of racket-lang when I&#39;ll pick it up again)</li>
<li>TCP/IP illustrated volume 1 (just started! 19/03/2026)</li>
<li>Visual Differential Geometry and Forms: A Mathematical Drama in Five Acts (just started! 26/03/2026</li>
<li>Classic Game Programming on the NES</li>
<li>MPI <a href="https://github.com/jreuben11/MPI_book/tree/main">https://github.com/jreuben11/MPI_book/tree/main</a>
(not a definitive list)</li></ul>

<hr>

<p><strong>Come discuss</strong>
Join the conversation on the <a href="https://forum.vyroda.com/d/2-to-read-list-of-2026">Vyroda Forum</a>.
Check out the latest engine features on <a href="https://vyroda.com">Vyroda.com</a>
<a href="https://mastodon.social/@vyroda">mastodon</a>
<a href="mailto:dev@vyroda.com">Contact me</a></p>
]]></content:encoded>
      <guid>http://blog.vyroda.com/to-read-list-of-2026</guid>
      <pubDate>Thu, 16 Apr 2026 17:40:51 +0200</pubDate>
    </item>
    <item>
      <title>Running away from the big tech ecosystem</title>
      <link>http://blog.vyroda.com/running-away-from-the-big-tech-ecosystem</link>
      <description>&lt;![CDATA[As I am starting to really dislike the current big tech industry (Microsoft / Amazon / Google, etc.) I am trying to escape from this non privacy hell and enshittification.&#xA;Here are my 2 cents about some new indie tools that I am testing. Let&#39;s see if we can do it with EU first tools...&#xA;&#xA;!--more--&#xA;&#xA;Zig project explains it better than me zig explanation&#xA;&#xA;Started to migrate at the beginning of February 2026.&#xA;&#xA;Let&#39;s share some non big tech software on the forum&#xA;&#xA;Codeberg&#xA;First step is to migrate the project from GitHub, which is becoming more and more, enshitified? So let&#39;s try Codeberg !&#xA;Non profit, located in Germany, some known project are moving there (like Zig and Wayland project) so, I&#39;m following the move.&#xA;&#xA;24/02/2026 : Migration is in progress :&#xA;&#xA;10/03/2026 : Migration almost done :&#xA;&#xA;Vampyropoda-Studio&#xA;&#xA;Vyroda-Engine&#xA;&#xA;Vyroda-Engine-Doc&#xA;&#xA;Ninja &amp; LLVM/clang&#xA;This one is a no brainer, don&#39;t use Microsoft tooling.&#xA;I&#39;ve done it since a long time and not going back.&#xA;Just Do It.&#xA;&#xA;I am considering adding back GCC to my toolchain, maybe.&#xA;&#xA;Code editor&#xA;This is where it&#39;s gonna be a bit trickier, should I go back to vim + tmux or should I finally really try emacs? (So far it&#39;s emacs)&#xA;And yes VS Code is free, but it&#39;s Microsoft. It sounds fanatical I know, but it&#39;s an exercise so let&#39;s do it correctly.&#xA;&#xA;10/03/2026 :&#xA;&#xA;I am starting to like emacs for real, keyboard shortcuts feels more natural now and with a config it&#39;s pretty complete.&#xA;&#xA;I am saving my config here: config&#xA;&#xA;Debugger&#xA;To debug I am using LLDB-DAP with VsCode, and it&#39;s not as stable and fast as I would like.&#xA;&#xA;So it&#39;s time to really try that rad debugger and see if it can replace it.&#xA;RAD Debugger is using PDB files, so again proprietary format and tied to Windows... Big no.&#xA;&#xA;Let&#39;s try LLDB-DAP + Emacs, I hope it will be faster than LLDB-DAP + VsCode.&#xA;&#xA;10/03/2026 :&#xA;&#xA;For LLDB, I am learning to use it from the command line. After learning the main command it&#39;s really faster and snappier to use. This is night and day compared to debugging via a GUI in VsCode or VS. And there is even more options available.&#xA;&#xA;OS&#xA;With the announcement of Windows 12, I think it&#39;s time to abandon this ship too. But for gaming is it really doable?&#xA;I am currently testing FreeBSD on my spare laptop. I am using Fedora since ages (and recommend it), even if I am happy with it I wanted to try something else while I am reading the OSTEP book (FreeBSD seems natural in this context)&#xA;&#xA;Web Hosting and blogging&#xA;I started using substack for blog posting, but the idea to add a button to force readers to subscribe in the hope of turning them into paying readers was not for me.&#xA;Everyone knows now that a substack blog will one day be a paywall blog, that&#39;s the goal of going to substack. Substack is not part of the big tech per se,&#xA;but it&#39;s still a part of the web that I dislike: money for everything and for most of the time questionable opinions (you have mine for free!). Stats everywhere for everything, to sell to everybody without telling you. By the way I&#39;m not adding stats on my website, there is the basic stats which gives only the amount of views per day / month (completely biased with the number of bots...). So no tracking here, not as I am aware of at least and no &#34;subscribe buttons&#34;.&#xA;&#xA;This is a very simple blog setup, webmail and hosting at Gandi.net. A French web hosting company (yes France / EU first, remember? And I&#39;m French so Gandi it is, it could have been OVH though)&#xA;&#xA;10/03/2026 :&#xA;&#xA;I am late to the party and learned that Gandi has been bought. I chose Gandi by default, I used to have an account here a long time ago. Big mistake.&#xA;&#xA;Yay, just started the blog and I have to move already. I guess it will be toward Alwaysdata.&#xA;&#xA;11/03/2026 :&#xA;&#xA;I moved to AlwaysData and simplified the domain name to this new one vyroda. There is a lot more options here than on Gandi it&#39;s pretty neat. And less expensive.&#xA;&#xA;AI&#xA;Like it or not AI is here, mostly at the office where I&#39;m learning to use it so managers will be happy. Ok, I admit, used with an orchestrator and agents and MCP Server, with claude opus because chatgpt is so so bad now, it&#39;s starting to be impressive.&#xA;&#xA;But it&#39;s expensive and I am stingy for my own usage, I have~  had a cheap pro account for Gemini, I cancelled it, 30€ / months is not worthy for my usage.&#xA;&#xA;Maybe I&#39;ll try LLM360?&#xA;&#xA;Even if I think AI has more negative than positive effects (issues about the environment, learning, cognitive, etc.) I am still learning it as it is just a tool and companies are expecting us to learn it. So here I am learning it, and this is so simple to learn that I am at so-called &#34;stage 6&#34;. It took me an afternoon to understand how all of this work, now I just need to refine how to write my specs and I am afraid of what it means.&#xA;&#xA;Very easy to use, powerfull but not 100% perfect (yet?), almost no need for hard learned skills that bring values. My guess is that there will be so much of anything done with it that everything will have absolutely no value at all anymore.&#xA;&#xA;Wait &amp; See...&#xA;&#xA;16/04/2025&#xA;I feel I am losing any joy in programming on my side projects, so I am not using AI anymore. It is not worth the human issues, I prefer to try by myself even if it takes more time, is is way more enjoyable and fullfiling. I can&#39;t stomach either its sycophancy: &#xA;&#xA;  &#34;Oh wow that is an incredible question Galliume!&#34; &#xA;&#xA;Fuck off.&#xA;&#xA;Email&#xA;Is it really possible to find something remotely good enough compared to GMail ?...&#xA;&#xA;Smartphone OS&#xA;I want to try GrapheneOS but I have to learn more about it.&#xA;&#xA;What&#39;s next?&#xA;&#xA;Switching and testing all those tools takes quite some time, but I think being free from licenses, Cloud Acts, etc. is worth it as an individual, but is it realistic in a professional context? Hard to say, there is not really a lot of EU competitors up to the task, but if nobody moves there never will be. Maybe it will start from individuals doing the search and funding the small companies that are trying to keep up. Naïve isn&#39;t it?&#xA;&#xA;It&#39;s not only a question about money, it&#39;s a mindset that I am starting to really understand, better late than never I guess. So the next step after all this change will be maybe to try to participate in some open source project if they are not killed before by the AIpocalypse.&#xA;&#xA;---&#xA;Come discuss&#xA;Join the conversation on the Vyroda Forum.&#xA;Check out the latest engine features on Vyroda.com&#xA;mastodon&#xA;Contact me]]&gt;</description>
      <content:encoded><![CDATA[<p>As I am starting to really dislike the current big tech industry (Microsoft / Amazon / Google, etc.) I am trying to escape from this non privacy hell and enshittification.
Here are my 2 cents about some new indie tools that I am testing. Let&#39;s see if we can do it with EU first tools...</p>



<p>Zig project explains it better than me <a href="https://ziglang.org/news/migrating-from-github-to-codeberg">zig explanation</a></p>

<p>Started to migrate at the beginning of February 2026.</p>

<p>Let&#39;s share some non big tech software on the forum</p>

<h3 id="codeberg">Codeberg</h3>

<p>First step is to migrate the project from GitHub, which is becoming more and more, enshitified? So let&#39;s try Codeberg !
Non profit, located in Germany, some known project are moving there (like Zig and Wayland project) so, I&#39;m following the move.</p>

<p><del>24/02/2026 : Migration is in progress :</del></p>

<p>10/03/2026 : Migration almost done :</p>

<p>Vampyropoda-Studio</p>

<p>Vyroda-Engine</p>

<p>Vyroda-Engine-Doc</p>

<h3 id="ninja-llvm-clang">Ninja &amp; LLVM/clang</h3>

<p>This one is a no brainer, don&#39;t use Microsoft tooling.
I&#39;ve done it since a long time and not going back.
Just Do It.</p>

<p>I am considering adding back GCC to my toolchain, maybe.</p>

<h3 id="code-editor">Code editor</h3>

<p>This is where it&#39;s gonna be a bit trickier, should I go back to vim + tmux or should I finally really try emacs? (So far it&#39;s emacs)
And yes VS Code is free, but it&#39;s Microsoft. It sounds fanatical I know, but it&#39;s an exercise so let&#39;s do it correctly.</p>

<p>10/03/2026 :</p>

<p>I am starting to like emacs for real, keyboard shortcuts feels more natural now and with a config it&#39;s pretty complete.</p>

<p>I am saving my config here: config</p>

<h3 id="debugger">Debugger</h3>

<p>To debug I am using LLDB-DAP with VsCode, and it&#39;s not as stable and fast as I would like.</p>

<p><del>So it&#39;s time to really try that rad debugger and see if it can replace it.</del>
RAD Debugger is using PDB files, so again proprietary format and tied to Windows... Big no.</p>

<p><del>Let&#39;s try LLDB-DAP + Emacs, I hope it will be faster than LLDB-DAP + VsCode.</del></p>

<p>10/03/2026 :</p>

<p>For LLDB, I am learning to use it from the command line. After learning the main command it&#39;s really faster and snappier to use. This is night and day compared to debugging via a GUI in VsCode or VS. And there is even more options available.</p>

<h3 id="os">OS</h3>

<p>With the announcement of Windows 12, I think it&#39;s time to abandon this ship too. But for gaming is it really doable?
I am currently testing FreeBSD on my spare laptop. I am using Fedora since ages (and recommend it), even if I am happy with it I wanted to try something else while I am reading the OSTEP book (FreeBSD seems natural in this context)</p>

<h3 id="web-hosting-and-blogging">Web Hosting and blogging</h3>

<p>I started using substack for blog posting, but the idea to add a button to force readers to subscribe in the hope of turning them into paying readers was not for me.
Everyone knows now that a substack blog will one day be a paywall blog, that&#39;s the goal of going to substack. Substack is not part of the big tech per se,
but it&#39;s still a part of the web that I dislike: money for everything and for most of the time questionable opinions (you have mine for free!). Stats everywhere for everything, to sell to everybody without telling you. By the way I&#39;m not adding stats on my website, there is the basic stats which gives only the amount of views per day / month (completely biased with the number of bots...). So no tracking here, not as I am aware of at least and no “subscribe buttons”.</p>

<p><del>This is a very simple blog setup, webmail and hosting at Gandi.net. A French web hosting company (yes France / EU first, remember? And I&#39;m French so Gandi it is, it could have been OVH though)</del></p>

<p>10/03/2026 :</p>

<p>I am late to the party and learned that Gandi has been bought. I chose Gandi by default, I used to have an account here a long time ago. Big mistake.</p>

<p>Yay, just started the blog and I have to move already. I guess it will be toward Alwaysdata.</p>

<p>11/03/2026 :</p>

<p>I moved to AlwaysData and simplified the domain name to this new one vyroda. There is a lot more options here than on Gandi it&#39;s pretty neat. And less expensive.</p>

<h3 id="ai">AI</h3>

<p>Like it or not AI is here, mostly at the office where I&#39;m learning to use it so managers will be happy. Ok, I admit, used with an orchestrator and agents and MCP Server, with claude opus because chatgpt is so so bad now, it&#39;s starting to be impressive.</p>

<p>But it&#39;s expensive and I am stingy for my own usage, I ~~have~  had a cheap pro account for Gemini, I cancelled it, 30€ / months is not worthy for my usage.</p>

<p>Maybe I&#39;ll try LLM360?</p>

<p>Even if I think AI has more negative than positive effects (issues about the environment, learning, cognitive, etc.) I am still learning it as it is just a tool and companies are expecting us to learn it. So here I am learning it, and this is so simple to learn that I am at so-called “stage 6”. It took me an afternoon to understand how all of this work, now I just need to refine how to write my specs and I am afraid of what it means.</p>

<p>Very easy to use, powerfull but not 100% perfect (yet?), almost no need for hard learned skills that bring values. My guess is that there will be so much of anything done with it that everything will have absolutely no value at all anymore.</p>

<p>Wait &amp; See...</p>

<p>16/04/2025
I feel I am losing any joy in programming on my side projects, so I am not using AI anymore. It is not worth the human issues, I prefer to try by myself even if it takes more time, is is way more enjoyable and fullfiling. I can&#39;t stomach either its sycophancy:</p>

<blockquote><p>“Oh wow that is an incredible question Galliume!”</p></blockquote>

<p>Fuck off.</p>

<h3 id="email">Email</h3>

<p>Is it really possible to find something remotely good enough compared to GMail ?...</p>

<h3 id="smartphone-os">Smartphone OS</h3>

<p>I want to try GrapheneOS but I have to learn more about it.</p>

<h3 id="what-s-next">What&#39;s next?</h3>

<p>Switching and testing all those tools takes quite some time, but I think being free from licenses, Cloud Acts, etc. is worth it as an individual, but is it realistic in a professional context? Hard to say, there is not really a lot of EU competitors up to the task, but if nobody moves there never will be. Maybe it will start from individuals doing the search and funding the small companies that are trying to keep up. Naïve isn&#39;t it?</p>

<p>It&#39;s not only a question about money, it&#39;s a mindset that I am starting to really understand, better late than never I guess. So the next step after all this change will be maybe to try to participate in some open source project if they are not killed before by the AIpocalypse.</p>

<hr>

<p><strong>Come discuss</strong>
Join the conversation on the <a href="https://forum.vyroda.com/d/1-running-away-from-the-big-tech-ecosystem">Vyroda Forum</a>.
Check out the latest engine features on <a href="https://vyroda.com">Vyroda.com</a>
<a href="https://mastodon.social/@vyroda">mastodon</a>
<a href="mailto:dev@vyroda.com">Contact me</a></p>
]]></content:encoded>
      <guid>http://blog.vyroda.com/running-away-from-the-big-tech-ecosystem</guid>
      <pubDate>Thu, 16 Apr 2026 17:35:30 +0200</pubDate>
    </item>
    <item>
      <title>Wifi on FreeBSD</title>
      <link>http://blog.vyroda.com/wifi-on-freebsd</link>
      <description>&lt;![CDATA[For those who are using WifiBox if you get this error :&#xA;&#xA;  &#34;WARNING: PPT device pci0:3:0:0 could not be destroyed&#34;&#xA;&#xA;!--more--&#xA;&#xA;The solution, if you are using an AMD, is to add in /boot/loader.conf :&#xA;&#xA;  hw.vmm.amdvi.enable=1&#xA;&#xA;passthru will then be allowed.&#xA;&#xA;This is working with a Qualcomm Atheros QCA9377 (not the best supported natively yet)&#xA;&#xA;Here my config for /etc/rc.conf&#xA;&#xA;wifiboxenable=&#34;YES&#34;&#xA;ifconfigwifibox0=&#34;SYNCDHCP&#34;&#xA;backgrounddhclientwifibox0=&#34;YES&#34;&#xA;defaultroutedelay=&#34;0&#34;&#xA;And in /boot/loader.conf&#xA;&#xA;vmmload=&#34;YES&#34;&#xA;pptload=&#34;YES&#34;&#xA;iftapload=&#34;YES&#34;&#xA;hw.vmm.pptdevs=&#34;3/0/0&#34;&#xA;pptdevs=&#34;3/0/0&#34;&#xA;hw.vmm.amdvi.enable=1&#xA;&#xA;---&#xA;Come discuss&#xA;Join the conversation on the Vyroda Forum.&#xA;Check out the latest engine features on Vyroda.com&#xA;mastodon&#xA;Contact me]]&gt;</description>
      <content:encoded><![CDATA[<p>For those who are using WifiBox if you get this error :</p>

<blockquote><p>“WARNING: PPT device pci0:3:0:0 could not be destroyed”</p></blockquote>



<p>The solution, if you are using an AMD, is to add in /boot/loader.conf :</p>

<blockquote><p>hw.vmm.amdvi.enable=1</p></blockquote>

<p>passthru will then be allowed.</p>

<p>This is working with a Qualcomm Atheros QCA9377 (not the best supported natively yet)</p>

<p>Here my config for /etc/rc.conf</p>

<pre><code>wifibox_enable=&#34;YES&#34;
ifconfig_wifibox0=&#34;SYNCDHCP&#34;
background_dhclient_wifibox0=&#34;YES&#34;
defaultroute_delay=&#34;0&#34;
And in /boot/loader.conf

vmm_load=&#34;YES&#34;
ppt_load=&#34;YES&#34;
if_tap_load=&#34;YES&#34;
hw.vmm.ppt_devs=&#34;3/0/0&#34;
pptdevs=&#34;3/0/0&#34;
hw.vmm.amdvi.enable=1
</code></pre>

<hr>

<p><strong>Come discuss</strong>
Join the conversation on the <a href="https://forum.vyroda.com">Vyroda Forum</a>.
Check out the latest engine features on <a href="https://vyroda.com">Vyroda.com</a>
<a href="https://mastodon.social/@vyroda">mastodon</a>
<a href="mailto:dev@vyroda.com">Contact me</a></p>
]]></content:encoded>
      <guid>http://blog.vyroda.com/wifi-on-freebsd</guid>
      <pubDate>Thu, 16 Apr 2026 17:28:17 +0200</pubDate>
    </item>
  </channel>
</rss>