<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marius-Florin Cristian</title>
    <description>The latest articles on DEV Community by Marius-Florin Cristian (@mfc_keibisoft).</description>
    <link>https://dev.to/mfc_keibisoft</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3844364%2F3d4c1171-f666-46a9-81b9-157ec5f41c94.jpeg</url>
      <title>DEV Community: Marius-Florin Cristian</title>
      <link>https://dev.to/mfc_keibisoft</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mfc_keibisoft"/>
    <language>en</language>
    <item>
      <title>Google Drive upload taking too long? Skip the upload</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Mon, 02 Nov 2026 08:00:03 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/google-drive-upload-taking-too-long-skip-the-upload-2apg</link>
      <guid>https://dev.to/mfc_keibisoft/google-drive-upload-taking-too-long-skip-the-upload-2apg</guid>
      <description>&lt;p&gt;Uploading to Google Drive is slow because it runs at your upload speed, and a lot of home internet plans upload much slower than they download. The other person can't open anything until your upload finishes, and then they still have to download the whole file.&lt;br&gt;
With KeibiDrop you skip the upload. The file goes straight from your computer to theirs, and they can open it right away while it's still coming in, in the app or in a browser tab. It's free, there's no account and there's no file size limit.&lt;/p&gt;

&lt;p&gt;From the table on the original page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 GB sent, five times each way | About 5 to 6 minutes each (30 to 37 MB/s) | Servers in Singapore and Timisoara, Romania, about 200 ms round trip, 500 Mbps line, through our relay&lt;/li&gt;
&lt;li&gt;Same test on Wi-Fi in Barcelona | About a tenth of a second (median) | 72 ms round trip, direct connection, July 2026&lt;/li&gt;
&lt;li&gt;Reading a file that sits on the other computer | KeibiDrop 20 to 30 MB/s, 15 to 23 times faster than sshfs | Same link, 100 MB and 1 GB files, July 2026&lt;/li&gt;
&lt;li&gt;Opening a small part in the middle of a 1 GB file | About 16 MB came over, out of 1 GB | Server in Timisoara to a Mac on home Wi-Fi in Bucharest, through our relay, September 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full version, with the limits and the method: &lt;a href="https://keibidrop.com/blog/google-drive-upload-taking-too-long.html" rel="noopener noreferrer"&gt;Google Drive upload taking too long? Skip the upload&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source, AGPL-3.0: &lt;a href="https://github.com/KeibiSoft/KeibiDrop" rel="noopener noreferrer"&gt;github.com/KeibiSoft/KeibiDrop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>filesystem</category>
      <category>encryption</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Fast simulation code is slow to write, so generators write it</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Sun, 01 Nov 2026 17:14:48 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/fast-simulation-code-is-slow-to-write-so-generators-write-it-30oe</link>
      <guid>https://dev.to/mfc_keibisoft/fast-simulation-code-is-slow-to-write-so-generators-write-it-30oe</guid>
      <description>&lt;p&gt;I want to talk about code generators, domain specific languages (DSL), and simulating interactions.&lt;/p&gt;

&lt;p&gt;Me personally, I am a fan of games like Dwarf Fortress, Age of Empires and Might and Magic, and Role Playing Games in the broader sense. Now, no matter how you look at them, they all boil down to having a "state" (like a chess board), some "actors" (the little ants you interact with), and "the rules and relationship" they form to each other.&lt;/p&gt;

&lt;p&gt;Initially this idea started being explored by looking into cache optimized Go data structures after reading a blog post by Serge Skoredin, and trying to encode them as annotations for generating code out of them. I like meta programming, not gonna lie.&lt;/p&gt;

&lt;p&gt;Ecclesia is an isometric pilgrimage through a world of countries drawn as Orthodox icons. It is written as annotations on Go structs, about ten lines per entity. Seven code generators, stacked, turn those lines into cache-friendly memory pools, behaviour, the world, the drawings, the network frame, the screens and the rules. The simulation runs on one thread, at 0.21 ms per tick on an Intel i7-9750H.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo5gw92pqb8r0a3l5i1b5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo5gw92pqb8r0a3l5i1b5.gif" alt="Isometric view of Ecclesia over about 2,300 ticks: the shepherd walks with the flock between churches and cathedrals while day turns to dawn" width="720" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Twenty frames from tick 60 to tick 2,340, rendered headless by the game's own tool, with the camera following the shepherd.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The goal
&lt;/h2&gt;

&lt;p&gt;How many classic Reynolds boids can you run on 1 CPU at 60 FPS, without using any goroutines? I managed to get around 8192, using Serge Skoredin's approach from the blog post last year.&lt;/p&gt;

&lt;p&gt;My goal for this experiment was to encode the optimal cache data structures into metaprogramming generators, such that Claude can write a high-level DSL and generate down to this level of simulations.&lt;/p&gt;

&lt;p&gt;If I had to output the code myself, it would take around 8 hours of constant writing to get around 1k LoC of code. I treat the low-level tasks as building blocks. You need a grasp and understanding of what is possible with them, but you do not need to remember the exact byte order and syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;p&gt;I went full meme, and stacked like 3 levels of generators on top of each other.&lt;/p&gt;

&lt;p&gt;Level 1: A basic generator does the same stuff: raw structs to SoA + wire codecs + bitfields to not waste space. And runs benchmarks to see how many allocs/ops per entity there are. And one more fun thing: it encodes the gamestate on 1400 bytes, in order to fit on a UDP datagram, such that it can support networking.&lt;/p&gt;

&lt;p&gt;Level 2: Then on top of this one, I got a generator for relations between entities. Level 3: And on top of this one, one for "game" design and schema behavior. And then all this runs on the simulator engine that handles collision, flow fields, events, genetic algorithms, networking, etc.&lt;/p&gt;

&lt;p&gt;Ecclesia added four more levels. Each generator reads its own annotations and writes Go that the level above calls.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Generator&lt;/th&gt;
&lt;th&gt;Describes&lt;/th&gt;
&lt;th&gt;Writes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;gameframegen&lt;/td&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;Struct-of-arrays pools, wire codecs, bitfield accessors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;simgen&lt;/td&gt;
&lt;td&gt;Behaviour&lt;/td&gt;
&lt;td&gt;Actants, relations, and the state machines that move each relation forward&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gamegen&lt;/td&gt;
&lt;td&gt;The world&lt;/td&gt;
&lt;td&gt;Species, spawns, world rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;icongen&lt;/td&gt;
&lt;td&gt;What a thing looks like&lt;/td&gt;
&lt;td&gt;Each asset as a list of operations over parametric forms, plotted to an 8-bit indexed sprite by integer arithmetic. No image files.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;netgen&lt;/td&gt;
&lt;td&gt;What a client is told, and in what order&lt;/td&gt;
&lt;td&gt;Which pool goes first into the 1,400-byte frame when the world is busy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;shellgen&lt;/td&gt;
&lt;td&gt;Everything around the game&lt;/td&gt;
&lt;td&gt;Screens, render order, layout, typed settings, a versioned save format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rulegen&lt;/td&gt;
&lt;td&gt;Who a person is, and how what they do turns out&lt;/td&gt;
&lt;td&gt;Hidden dice. Every probability is computed by exact enumeration of the 216 outcomes of three dice.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two checks sit outside the chain. &lt;code&gt;simcheck&lt;/code&gt; emits nothing. It refuses a relation that nothing spawns, and an actant that nothing fills, because both generate valid code and never happen. netgen's budget check fails the build when a schema promises more than a frame holds, and it prints the arithmetic.&lt;/p&gt;

&lt;h2&gt;
  
  
  From a story to a running world
&lt;/h2&gt;

&lt;p&gt;The flow is something like this. You ask Claude to read a story, a novel, whatever, and extract relations, entities, etc. Then it edits a Schema.go with the high-level DSL annotations, like 10 lines per entity. Then I run the Level 2 generator: that creates the primitives and a high-level API. Then it combines the high-level API rules in main.go and just compiles it to the final gamestate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. A story: "fairies that glow and heal deer".
2. Annotations on Go structs, about 10 lines per entity:
     simgen:actant  affordances=Flee,Graze        (the deer)
     simgen:relation Heal actors=Fairy,Creature   (the healing)
3. Seven generators write the Go code.
4. simcheck and the frame budget refuse what can never happen.
5. go build, and the world runs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The page view and the eye view
&lt;/h2&gt;

&lt;p&gt;The world is drawn from the page, isometric, as in the first animation. The same state can also be seen through the shepherd's eye.&lt;/p&gt;

&lt;p&gt;There is also a first-person view, similar to the original Might and Magic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6kj7k06vuggpextdu3p1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6kj7k06vuggpextdu3p1.gif" alt="First-person view from the shepherd's eye, turning a full circle among churches, crosses and the flock" width="720" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Twenty-four frames at tick 600, the eye turning 360 degrees in steps of 15.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Threads
&lt;/h2&gt;

&lt;p&gt;For all this + networking + disk I/O, it works on 4 cores (threads) only. But the simulation in itself is on 1 core, 1 thread. The networking is offloaded to 1 core (1 thread), disk I/O to a different core (thread), and the painting on screen to a different core (thread).&lt;/p&gt;

&lt;p&gt;Measured per tick on an Intel i7-9750H, default world, 600 ticks, rendered headless: simulation 0.21 ms, culling 0.28 ms, ground 1.33 ms, sprites 1.14 ms, overlay 0.49 ms.&lt;/p&gt;

&lt;h2&gt;
  
  
  MMORPGs with a local agent
&lt;/h2&gt;

&lt;p&gt;It is quite wild, as at some point you realize you can hot swap the views of a running program, and end up letting people create their own fantasy game by prompting on the same gamestate and rules shared by other people.&lt;/p&gt;

&lt;p&gt;I think we will end up having MMORPGs that ship a small local agent, that allows you to fill in the gaps and build the world and game system tailored to you, but at the same time interact and be a live part of the other people's own game fantasy. I would love to play such games.&lt;/p&gt;

&lt;p&gt;Limits. The per-tick numbers come from one machine and one world, over 600 ticks; a busier world costs more. The 8,192 boids figure is a separate experiment, one thread at 60 FPS. The engine and the game are not published.&lt;/p&gt;




&lt;p&gt;Originally published on keibisoft.com: &lt;a href="https://keibisoft.com/blog/stacked-code-generators.html" rel="noopener noreferrer"&gt;Fast simulation code is slow to write, so generators write it&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>go</category>
      <category>showdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>One set of security records for customers, auditors and regulators</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Sat, 31 Oct 2026 08:05:46 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/one-set-of-security-records-for-customers-auditors-and-regulators-2p9n</link>
      <guid>https://dev.to/mfc_keibisoft/one-set-of-security-records-for-customers-auditors-and-regulators-2p9n</guid>
      <description>&lt;p&gt;Customers, certification auditors, regulators, insurers and buyers each ask about a company's security in their own words. This chapter shows that they ask for the same small set of records, such as an access review or a signed software release. A company that produces these records as part of its normal work can answer each new request from what it already has.&lt;/p&gt;

&lt;p&gt;Read it on keibisoft.com: &lt;a href="https://keibisoft.com/blog/security-records-for-customers-auditors-regulators.html" rel="noopener noreferrer"&gt;One set of security records for customers, auditors and regulators&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Part of the series &lt;a href="https://keibisoft.com/blog/security-program.html" rel="noopener noreferrer"&gt;Building a security program for a growing company&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>compliance</category>
      <category>startup</category>
      <category>devops</category>
    </item>
    <item>
      <title>Send a file from one browser to another, nothing to install</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Fri, 30 Oct 2026 08:00:01 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/send-a-file-from-one-browser-to-another-nothing-to-install-4a4n</link>
      <guid>https://dev.to/mfc_keibisoft/send-a-file-from-one-browser-to-another-nothing-to-install-4a4n</guid>
      <description>&lt;p&gt;You both open web.keibidrop.com, connect with a code once, and drop the file onto the page. The other person presses Save. There's nothing to install, no account and no upload to a cloud.&lt;br&gt;
The two tabs talk through our bridge, which passes along encrypted pieces it can't read, and the encryption is quantum-safe. It works on a work laptop where you can't install apps, or on a computer that isn't yours.&lt;/p&gt;

&lt;p&gt;Full version, with the limits and the method: &lt;a href="https://keibidrop.com/blog/send-files-from-browser-to-browser.html" rel="noopener noreferrer"&gt;Send a file from one browser to another, nothing to install&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source, AGPL-3.0: &lt;a href="https://github.com/KeibiSoft/KeibiDrop" rel="noopener noreferrer"&gt;github.com/KeibiSoft/KeibiDrop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>filesystem</category>
      <category>encryption</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>ACME, the company this series follows</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Thu, 29 Oct 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/acme-the-company-this-series-follows-d75</link>
      <guid>https://dev.to/mfc_keibisoft/acme-the-company-this-series-follows-d75</guid>
      <description>&lt;p&gt;ACME is the small, made-up company that this series uses as its example. It starts in 2019 as a webshop for smart plugs, sells software to businesses from 2020, puts a gateway into buildings from 2022 and sells to the public sector from 2024. This chapter describes how it grows and how its risks change along the way. It also covers which rules reach it and how much room each one leaves, and who inside and outside the company cares about security at each stage.&lt;/p&gt;

&lt;p&gt;Read it on keibisoft.com: &lt;a href="https://keibisoft.com/blog/acme-the-company-in-this-series.html" rel="noopener noreferrer"&gt;ACME, the company this series follows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Part of the series &lt;a href="https://keibisoft.com/blog/security-program.html" rel="noopener noreferrer"&gt;Building a security program for a growing company&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>startup</category>
      <category>compliance</category>
      <category>gdpr</category>
    </item>
    <item>
      <title>Leading security at two startups in a row, both acquired about two years after I joined</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Tue, 27 Oct 2026 08:00:01 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/leading-security-at-two-startups-in-a-row-both-acquired-about-two-years-after-i-joined-4kkn</link>
      <guid>https://dev.to/mfc_keibisoft/leading-security-at-two-startups-in-a-row-both-acquired-about-two-years-after-i-joined-4kkn</guid>
      <description>&lt;p&gt;I joined Krizo in 2019 as a 24-year-old software engineer, and Omnio in 2020 as its CISO. Dataminr acquired Krizo in early 2021 and IBM acquired Omnio in 2022, each about two years after I joined. This chapter tells what the security work was at each company, what customers asked for along the way, and what I learned about security as part of selling. It ends with what the series covers.&lt;/p&gt;

&lt;p&gt;Read it on keibisoft.com: &lt;a href="https://keibisoft.com/blog/leading-security-at-two-acquired-startups.html" rel="noopener noreferrer"&gt;Leading security at two startups in a row, both acquired about two years after I joined&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Part of the series &lt;a href="https://keibisoft.com/blog/security-program.html" rel="noopener noreferrer"&gt;Building a security program for a growing company&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>career</category>
      <category>startup</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Watch movies together long distance, while on a video call</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:13:53 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/watch-movies-together-long-distance-while-on-a-video-call-2f4c</link>
      <guid>https://dev.to/mfc_keibisoft/watch-movies-together-long-distance-while-on-a-video-call-2f4c</guid>
      <description>&lt;p&gt;Share the movie from your computer with KeibiDrop, or straight from a browser tab. Your partner opens web.keibidrop.com, presses Play, and it starts in a few seconds. Nothing gets uploaded and nothing gets downloaded: the movie plays straight from your computer while you're both on FaceTime or WhatsApp.&lt;br&gt;
There's no account and no subscription, and nobody else can see what you're watching, because it's encrypted the whole way.&lt;/p&gt;

&lt;p&gt;From the table on the original page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 GB | About 2.2 Mbps&lt;/li&gt;
&lt;li&gt;4 GB | About 4.5 Mbps&lt;/li&gt;
&lt;li&gt;8 GB | About 9 Mbps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full version, with the limits and the method: &lt;a href="https://keibidrop.com/blog/watch-movies-together-long-distance.html" rel="noopener noreferrer"&gt;Watch movies together long distance, while on a video call&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source, AGPL-3.0: &lt;a href="https://github.com/KeibiSoft/KeibiDrop" rel="noopener noreferrer"&gt;github.com/KeibiSoft/KeibiDrop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>filesystem</category>
      <category>encryption</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Building a security program for a growing company</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Sun, 25 Oct 2026 08:09:11 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/building-a-security-program-for-a-growing-company-33ec</link>
      <guid>https://dev.to/mfc_keibisoft/building-a-security-program-for-a-growing-company-33ec</guid>
      <description>&lt;p&gt;This series explains how a company builds a security program and keeps it working as it grows from a webshop to a supplier of public institutions. It follows ACME, a made-up energy monitoring company, through four stages, and at each stage it shows which security work is needed and who asks for it, with its cost. Each chapter is written in plain language, and most have a companion post for engineers.&lt;/p&gt;

&lt;p&gt;Chapters so far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1.1 &lt;a href="https://keibisoft.com/blog/leading-security-at-two-acquired-startups.html" rel="noopener noreferrer"&gt;Leading security at two startups in a row, both acquired about two years after I joined&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;1.2 &lt;a href="https://keibisoft.com/blog/acme-the-company-in-this-series.html" rel="noopener noreferrer"&gt;ACME, the company this series follows&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;1.3 &lt;a href="https://keibisoft.com/blog/security-records-for-customers-auditors-regulators.html" rel="noopener noreferrer"&gt;One set of security records for customers, auditors and regulators&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;1.4 &lt;a href="https://keibisoft.com/blog/proactive-application-detective-security.html" rel="noopener noreferrer"&gt;Proactive, application and detective security in a growing company&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://keibisoft.com/blog/threat-modelling-a-data-flow-with-stride.html" rel="noopener noreferrer"&gt;Threat modelling a data flow with STRIDE&lt;/a&gt;, for engineers&lt;/li&gt;
&lt;li&gt;2.1 &lt;a href="https://keibisoft.com/blog/woocommerce-webshop-updates-and-security.html" rel="noopener noreferrer"&gt;Keeping a WooCommerce webshop up to date and secure&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The series index, with the chapters still to come: &lt;a href="https://keibisoft.com/blog/security-program.html" rel="noopener noreferrer"&gt;Building a security program for a growing company&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>startup</category>
      <category>compliance</category>
      <category>devops</category>
    </item>
    <item>
      <title>Fastest way to send large files: only send what they open</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Fri, 23 Oct 2026 09:53:30 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/fastest-way-to-send-large-files-only-send-what-they-open-1g2d</link>
      <guid>https://dev.to/mfc_keibisoft/fastest-way-to-send-large-files-only-send-what-they-open-1g2d</guid>
      <description>&lt;p&gt;The fastest way to send a large file is to not send all of it. With KeibiDrop the other person opens your file or folder in place, and only the parts they open cross the internet. If they need 2 GB out of a 50 GB folder, about 2 GB moves, and only those 2 GB land on their disk.&lt;br&gt;
That saves hours of uploading and downloading, and the disk space of a full copy. It works with every app, because the shared folder looks like a normal folder, and in a browser tab a video plays the same way.&lt;/p&gt;

&lt;p&gt;Measured, with the conditions on the original page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 GB of files from a 50 GB folder | 50 GB moves, about 2 hours 15 minutes, 50 GB on their disk | About 2 GB moves, about 5 minutes, about 2 GB on their disk&lt;/li&gt;
&lt;li&gt;10 minutes of a 4 GB, two-hour video | 4 GB moves, about 11 minutes before it plays | About 330 MB moves, and it starts right away&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full version, with the limits and the method: &lt;a href="https://keibidrop.com/blog/fastest-way-to-send-large-files.html" rel="noopener noreferrer"&gt;Fastest way to send large files: only send what they open&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source, AGPL-3.0: &lt;a href="https://github.com/KeibiSoft/KeibiDrop" rel="noopener noreferrer"&gt;github.com/KeibiSoft/KeibiDrop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>filesystem</category>
      <category>encryption</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Teleport a folder and nobody in the middle sees what's in it</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Fri, 23 Oct 2026 09:53:16 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/teleport-a-folder-and-nobody-in-the-middle-sees-whats-in-it-mke</link>
      <guid>https://dev.to/mfc_keibisoft/teleport-a-folder-and-nobody-in-the-middle-sees-whats-in-it-mke</guid>
      <description>&lt;p&gt;When you teleport a folder with KeibiDrop, anyone in the middle sees two devices exchanging encrypted data, and that's all. File names, contents, the folder layout and the size of each file stay inside the encryption.&lt;br&gt;
Only the parts someone opens move, so even the amount of data shows how much was opened, and says nothing about how big your files are. Your internet provider, the Wi-Fi owner and our relay all see the same thing: two devices, when they talk, and how much encrypted data went between them.&lt;/p&gt;

&lt;p&gt;Full version, with the limits and the method: &lt;a href="https://keibidrop.com/blog/teleport-a-folder-without-leaking-what-is-in-it.html" rel="noopener noreferrer"&gt;Teleport a folder and nobody in the middle sees what's in it&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source, AGPL-3.0: &lt;a href="https://github.com/KeibiSoft/KeibiDrop" rel="noopener noreferrer"&gt;github.com/KeibiSoft/KeibiDrop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>filesystem</category>
      <category>encryption</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>KeibiDrop 0.5.0, a new website and 1,000 downloads</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Fri, 16 Oct 2026 16:21:07 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/keibidrop-050-a-new-website-and-1000-downloads-374a</link>
      <guid>https://dev.to/mfc_keibisoft/keibidrop-050-a-new-website-and-1000-downloads-374a</guid>
      <description>&lt;p&gt;KeibiDrop 0.5.0 is out, and keibidrop.com has a new home page.&lt;/p&gt;

&lt;p&gt;Ever needed a file that’s on another computer? That’s why we built KeibiDrop. Connect your computers and open files as if they were on the one you’re using. You can share files directly, no cloud uploads or accounts needed.&lt;/p&gt;

&lt;p&gt;KeibiDrop connects your computers directly: you open a file on the other machine as if it were on this one, or you send it over, with no cloud upload and no account. 0.5.0 brings a new desktop design, better connections and file sharing on Mac, Windows and Linux, and the AGPL-3.0 license. This week the downloads on GitHub passed 1,000.&lt;/p&gt;

&lt;p&gt;Full version, with the limits and the method: &lt;a href="https://keibidrop.com/blog/keibidrop-0-5-0.html" rel="noopener noreferrer"&gt;KeibiDrop 0.5.0, a new website and 1,000 downloads&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source, AGPL-3.0: &lt;a href="https://github.com/KeibiSoft/KeibiDrop" rel="noopener noreferrer"&gt;github.com/KeibiSoft/KeibiDrop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>filesystem</category>
      <category>encryption</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>sshfs is slow over a WAN: 1.33 MB/s at every file size</title>
      <dc:creator>Marius-Florin Cristian</dc:creator>
      <pubDate>Fri, 25 Sep 2026 20:38:26 +0000</pubDate>
      <link>https://dev.to/mfc_keibisoft/sshfs-is-slow-over-a-wan-133-mbs-at-every-file-size-1ppf</link>
      <guid>https://dev.to/mfc_keibisoft/sshfs-is-slow-over-a-wan-133-mbs-at-every-file-size-1ppf</guid>
      <description>&lt;p&gt;Why is sshfs so slow over a long link? We mounted a Singapore server on a Timisoara server with sshfs, about 200 ms apart, and read files with dd. A 100 MB file came in at 1.32 to 1.34 MB/s over ten trials. A 1 GB file came in at 1.33 MB/s over five. When the rate stays the same at every file size, the round trip sets the speed: each trip carries a fixed amount of data, and a bigger file only adds more trips. KeibiDrop read the same pairing on demand at 20 to 30 MB/s, because it keeps several blocks in flight at once. This post has the setup, the arithmetic, and the one variable we did not capture.&lt;/p&gt;

&lt;p&gt;Measured, with the conditions on the original page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sshfs, 100 MB file | n=10 | 1.32 to 1.34 MB/s, median 1.33&lt;/li&gt;
&lt;li&gt;sshfs, 1 GB file | n=5 | 1.33 MB/s, flat&lt;/li&gt;
&lt;li&gt;KeibiDrop on demand, same pairing | n=5 | 20 to 30 MB/s&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full version, with the limits and the method: &lt;a href="https://keibisoft.com/blog/sshfs-slow-over-a-wan.html" rel="noopener noreferrer"&gt;sshfs is slow over a WAN: 1.33 MB/s at every file size&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source, MPL-2.0: &lt;a href="https://github.com/KeibiSoft/KeibiDrop" rel="noopener noreferrer"&gt;github.com/KeibiSoft/KeibiDrop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>filesystem</category>
      <category>encryption</category>
      <category>selfhosted</category>
    </item>
  </channel>
</rss>
