<rss version="2.0">
  <channel>
    <title>Blog</title>
    <link>https://benedek.win/</link>
    <description><![CDATA[]]></description>
    <item>
      <title>Setting up a Pi-hole</title>
      <link>https://benedek.win/blog/setting-up-a-pi-hole</link>
      <description><![CDATA[<p>After years of putting it off, I finally got around to setting up a <a href="https://pi-hole.net">Pi-hole</a>. This is not going to be an in-depth guide, just a quick and dirty set of pointers, because others already did the heavy lifting (for the benefit of all of us).</p>
<p><strong>What you'll need:</strong></p>
<p><a href="https://www.amazon.de/-/en/dp/B0D2YWMKJG">Raspberry Pi Zero 2W Starter Set</a></p>
<p>Mininum 4 GB MicroSD card (I used a 16 GB one)</p>
<p><a href="https://www.youtube.com/watch?v=d_3h5n9mPdI">Simplest Pi-hole tutorial</a> (YouTube)</p>
<p><strong>Optional:</strong></p>
<p>Random Ethernet-USB adapter</p>
<p><a href="https://www.amazon.de/-/en/Adapter-Compatible-MacBook-Android-Samsung/dp/B09M83M6ZD">USB (female) to Micro USB (male) adapter</a></p>
<p>I found that the Wi-Fi-adapter (not the connection) was unstable (even while sitting next to the router) - when it connected in the first place.
And it didn't even connect roughly 50% of the time after a restart, but YMMV.</p>
<p>When using an ethernet connection, Wi-Fi can be disabled with the following command (connect through SSH): <code>sudo rfkill block wifi</code></p>
]]></description>
      <pubDate>Thu, 13 Nov 2025 16:39:45 GMT</pubDate>
      <guid isPermaLink="true">https://benedek.win/blog/setting-up-a-pi-hole</guid>
    </item>
    <item>
      <title>I'm an expert in [Topic], but I could use more info on [key benefit or insight]</title>
      <link>https://benedek.win/blog/i-m-an-expert-in-topic-but-i-could-use-more-info-on-key-benefit-or-insight</link>
      <description><![CDATA[<p>Received this spam email today - I'll just leave it here for everyone's entertainment.</p>
<blockquote>
<p>Hi</p>
<p>I recently found your resource list on [Topic], and it’s a fantastic collection. I wanted to suggest adding my guide on [Your Topic]—it offers [key benefit or insight].</p>
<p>If you're open to it, Then I send you past work and package/proposal.</p>
<p>Thanks for considering, and great job on the resource page!</p>
<p>Best regards,</p>
<p>XY</p>
</blockquote>
<p>Dear Spammer,</p>
<p>maybe you should rethink your life choices.</p>
<p>Best regards and fuck yourself with your keyboard,</p>
<p>Benedek</p>
]]></description>
      <pubDate>Thu, 31 Jul 2025 12:26:07 GMT</pubDate>
      <guid isPermaLink="true">https://benedek.win/blog/i-m-an-expert-in-topic-but-i-could-use-more-info-on-key-benefit-or-insight</guid>
    </item>
    <item>
      <title>Helldivers 2 guide for fresh Cadets</title>
      <link>https://benedek.win/blog/helldivers-2-guide-for-fresh-cadets</link>
      <description><![CDATA[<p>This guide was compiled from Treadstone's tips gathered based on 100 hours of gameplay as well as my experience from my first 10 hours.</p>
<h2>The basics</h2>
<p>Helldivers 2 is a PvE extraction shooter for 1-4 players inspired by <a href="https://www.imdb.com/title/tt0120201/">Starship Troopers</a>, somewhat similar to Deep Rock Galactic, but with much more realistic graphics and without DRG's "claustrophobia" that I didn't like.</p>
<p>Make sure that you're familiar with <a href="https://helldivers.fandom.com/wiki/Ranks">character progression</a> and the <a href="https://helldivers.fandom.com/wiki/Currencies">currencies</a> you can spend on upgrades. The recommendations below are biased towards anti-terminid combat, but you should also consider situational and playstyle preferences, e.g. clearing many small enemies with explosions vs. snipers and rockets against heavy ones.</p>
<h2>Recommended starter armor</h2>
<p><a href="https://helldivers.wiki.gg/wiki/CM-21_Trench_Paramedic">CM-21 Trench Paramedic</a> can be purchased for 250 Super Credits from page 12 of the Superstore. It's a light armor with low armor value, contrasted by its high speed and stamina values, meaning that you'll need to put an emphasis on movement and kiting. The <a href="https://helldivers.wiki.gg/wiki/Armor_Passives#Med-Kit">Med-Kit</a> passive ability makes it especially attractive.</p>
<p>Earning 250 Super Credits is relatively simple: The Medals earned from the first few missions (potentially accelerated by completing a <a href="https://helldivers.wiki.gg/wiki/Personal_Orders">Personal</a>- or <a href="https://helldivers.wiki.gg/wiki/Major_Orders">Major Order</a>) will allow you to unlock 100 Super Credits on each of the first 5 pages (and then 50 per page onwards) of the Helldivers Mobilize warbond.</p>
<h2>Warbond unlocks</h2>
<p>Helldivers Mobilize is a free warbond with 10 pages of items, each page (besides the first one) requiring an increasing amount of Medals spent to become available. You will likely need to spend more medals to purchase items than what you actually need.
Further warbonds require spending 1000 Super Credits, which can also be purchased for 10 €.</p>
<p>Note: The <a href="https://helldivers.wiki.gg/wiki/Super_Citizen_Edition">Super Citizen upgrade</a> includes the Steeled Veterans warbond at the time of publishing this guide. Starting from August 26, 2025 it will include a Warbond Token instead, which can be used to unlock any warbond.</p>
<h3>Helldivers Mobilize</h3>
<ul>
<li>Always unlock the Super Credits on each page, but it doesn't have to be first thing you unlock on a given page.</li>
<li>Get every booster you can, except for UAV Recon.</li>
<li>Page 2:
<ul>
<li>P-19 Redeemer is a great sidearm for the long term.</li>
<li>R-63 Diligence is a DMR against light-armored enemies.</li>
</ul>
</li>
<li>Page 4: SG-225 Breaker shotgun. Don't bother with the SG-8 Punisher shotgun on page 1.</li>
<li>Page 5: G-16 Impact grenade that explodes on contact without delay.</li>
<li>Page 6: AR-23P Liberator Penetrator is a great assault rifle with medium armor penetration, which benefits greatly from Weapon Customization to reduce spread and recoil.</li>
</ul>
<h2>Recommended <a href="https://helldivers.wiki.gg/wiki/Stratagems">stratagems</a></h2>
<h3>Patriotic Administration Center</h3>
<ul>
<li>MG-43 Machine Gun: Efficient against medium enemies, but reload is slow and stationary.</li>
<li>APW-1 Anti-Materiel Rifle: A sniper rifle for penetrating heavy armor.</li>
<li>M-105 Stalwart: A more compact, but faster (and much better) alternative to MG-43 against light enemies.</li>
<li>EAT-17 Expendable Anti-Tank: 2 pieces of single-use anti-tank RPG with a fast cooldown time.</li>
<li>GR-8 Recoilless Rifle: Reloadable (from the included backpack) anti-tank RPG.</li>
<li>AC-8 Autocannon: Heavy armor penetrating support weapon with explosive damage; ammunition carried on the back. Similar capabilities to APW-1.</li>
<li>MLS-4X <a href="https://www.imdb.com/title/tt0088944/">Commando</a>: Anti-tank, laser-guided missle launcher with 4 barrels, capable of launching any number of missles at the same time. Alternative of the EAT-17.</li>
</ul>
<h3>Orbital Cannons</h3>
<ul>
<li>Orbital Laser: 3 charges, fires a continuous laser beam for 25 seconds that targets the largest enemy in the designated area.</li>
</ul>
<h3>Hangar</h3>
<ul>
<li>Eagle Airstrike: Carpet bombing run of 6 explosives (perpendicular to the direction you're facing) in a relatively small area.</li>
<li>Eagle Cluster Bomb: A barrage of explosives over a larger area effective against small enemies, launched perpendicular to the direction you're facing.</li>
<li>Eagle 500kg Bomb: A single, massive explosive capable of eliminating colossal enemies.</li>
</ul>
<h3>Engineering Bay</h3>
<ul>
<li>B-1 Supply Pack: 4 packs of ammunition in a backpack that you and your teammates can use.</li>
<li>GL-21 Grenade Launcher: Great splash damage, can close bug holes.</li>
<li>LAS-98 Laser Cannon: Heavy (lower end of the range) armor penetrating energy weapon effective against small and medium enemies, also somewhat effective against large ones. Includes two heatsinks, i.e. it uses the heat-management mechanism instead of ammunition.</li>
<li>LAS-5 "Guard Dog" Rover: Laser drone that follows you. Very effective against small enemies, but prone to friendly fire. Other stratagem categories offer variants with different weaponry.</li>
</ul>
<h2>Recommended <a href="https://helldivers.wiki.gg/wiki/Ship_Modules">ship modules</a></h2>
<p>Each category of modules is a separate, linear track requiring you to unlock every preceding module in order to reach a given module.</p>
<ol>
<li>Patriotic Administration Center: Donation Access License.</li>
<li>Hangar: Everything up until XXL Weapons Bay.</li>
<li>Bridge: Power Steering.</li>
</ol>
<p><code>Would you like to know more?</code></p>
]]></description>
      <pubDate>Sun, 06 Jul 2025 22:03:14 GMT</pubDate>
      <guid isPermaLink="true">https://benedek.win/blog/helldivers-2-guide-for-fresh-cadets</guid>
    </item>
    <item>
      <title>Reaction: Will AI Slop Kill the Internet? | SlopWorld ep. 1</title>
      <link>https://benedek.win/blog/reaction-will-ai-slop-kill-the-internet-slopworld-ep-1</link>
      <description><![CDATA[<p>Shoutout to <a href="https://lettersfromfiume.com">Letters from Fiume</a> for recommending <a href="https://www.youtube.com/watch?v=NuIMZBseAOM">this video</a>. Watch on 1.25 speed at least, though. :)</p>
<p>First off, this genuinely upsets me, however, what I'm seeing on the web (I hate that "internet" and "web" became interchangeable words) is mostly free of slop as far as I'm able to judge. Maybe it will also find its way into a segment (of audience/space) and remains confined there, just like I don't need to be faced with brain rot content (unless the Hungarian government spreads it) or other large themes/trends I have negative interest in.</p>
<p>I am also vary of the existence of parasocial web-relationships with streamers and online personalities and this is much, much worse.</p>
<p>AI companies reaching into the real world with devices sounds absolutely disgusting. I can only hope that they will find the same fate as Google Glass (and glassholes). If not, we'll genuinely have to start looking at using/wearing anti-surveillance tech in less than 10 years.
At least that's a new market segment we can innovate in?</p>
<p>Before reaching the end, I thought of the emergence of modern <a href="https://en.wikipedia.org/wiki/Luddite">Luddites</a> and then came the author's prediction of anti-AI terrorists blowing up data centers... This should remain a pessimistic thought experiment, so no civil (or any other kind of) war, please!</p>
]]></description>
      <pubDate>Fri, 04 Jul 2025 05:57:49 GMT</pubDate>
      <guid isPermaLink="true">https://benedek.win/blog/reaction-will-ai-slop-kill-the-internet-slopworld-ep-1</guid>
    </item>
    <item>
      <title>Creating (periodic) local copies of files</title>
      <link>https://benedek.win/blog/creating-periodic-local-copies-of-files</link>
      <description><![CDATA[<p>I wanted to periodically back up my Dark Souls 3 save game files while playing to prevent my save file from getting irrepairably corrupted if a cheating player (with malicious intentions) invades.
It should also work with almost any game and other scenarios outside gaming too.</p>
<p>This is how I'm using it locally and below is how the script came to be as well as the script itself.</p>
<pre><code class="language-powershell">.\Save-Files.ps1 -Source 'C:\Users\Benedek\AppData\Roaming\DarkSoulsIII' -Destination '&lt;path-to-backup-folder&gt;' -Filter "*.sl2" -Watch -SaveIntervalSeconds 60
</code></pre>
<p>I started with the following prompt to GitHub Copilot (in VS Code):</p>
<blockquote>
<p>Generate a PowerShell scripts for the following requirements:</p>
<p>Accepts input parameters:</p>
<ul>
<li>Source is path to a local folder, required.</li>
<li>Destination is also a path to a local folder, required.</li>
<li>Prefix string.</li>
<li>Filter string to filter on files in the source destination.</li>
<li>A switch called Compress.</li>
<li>A switch called Watch.</li>
<li>An integer parameter named SaveIntervalSeconds, default value is 300.</li>
</ul>
<p>The main logic of the script should be the following:</p>
<ul>
<li>Copies files from the source to the destination.</li>
<li>If the parameter is valid, only copy the files or folders that match.</li>
<li>If the Compress switch is present, a zip file containing matching content should be copied instead.</li>
<li>If there's only a single matching file or the content is compressed, suffix the resulting file name with the current date and time.</li>
<li>If there are multiple files matching, copy them into a subfolder under Destination and suffix its name with the current date and time.</li>
<li>If the Watch switch is present, then the whole logic should be wrapped in a cycle and it should run every SaveIntervalSeconds amount of seconds, but only if at least one of the matching files has changed since the last cycle.</li>
</ul>
</blockquote>
<p>The result was working correctly and ~95% of what I wanted. I followed up with:</p>
<blockquote>
<p>Modify it so that when there's only one file matching, the Compressed file name is based on that file, instead of "Backup".</p>
</blockquote>
<p>Then I noticed that deleted files are not picked up by the Has-Changed function and asked GHCP to fix it:</p>
<blockquote>
<p>Modify it to be able to detect when a file is deleted in Source.</p>
</blockquote>
<p>Finally, I asked it to add help messages to the parameters, then cleaned up the script manually in terms of formatting and variable names. The end result is the following:</p>
<pre><code class="language-powershell">param(
    [Parameter(Mandatory = $true, HelpMessage = 'Path to the source folder.')]
    [string] $Source,

    [Parameter(Mandatory = $true, HelpMessage = 'Path to the destination folder.')]
    [string] $Destination,

    [Parameter(HelpMessage = 'Optional prefix string for output names.')]
    [string] $Prefix = '',

    [Parameter(HelpMessage = 'Filter string to match files (wildcards allowed).')]
    [string] $Filter = '*',

    [Parameter(HelpMessage = 'Switch: Compress output as zip if present.')]
    [switch] $Compress,

    [Parameter(HelpMessage = 'Switch: Watch for changes and repeat if present.')]
    [switch] $Watch,

    [Parameter(HelpMessage = 'Interval in seconds for watch mode (default: 300).')]
    [int] $SaveIntervalSeconds = 300
)

function Get-MatchingFiles
{
    param($Source, $Filter)

    Get-ChildItem -Path $Source -Filter $Filter -Recurse -File
}

function Get-HashTable
{
    param($Files)

    $hash = @{}

    foreach ($file in $Files)
    {
        $hash[$file.FullName] = $file.LastWriteTimeUtc.Ticks
    }

    return $hash
}

function Has-Changed
{
    param($OldHash, $NewFiles)

    $newFileNames = $NewFiles | ForEach-Object { $_.FullName }

    # Detect new or changed files
    foreach ($file in $NewFiles)
    {
        if (-not $OldHash.ContainsKey($file.FullName) -or $OldHash[$file.FullName] -ne $file.LastWriteTimeUtc.Ticks)
        {
            return $true
        }
    }

    # Detect deleted files
    foreach ($oldFile in $OldHash.Keys)
    {
        if ($newFileNames -notcontains $oldFile)
        {
            return $true
        }
    }

    return $false
}

function Save-Content
{
    param($Source, $Destination, $Prefix, $Filter, $Compress)

    $files = Get-MatchingFiles -Source $Source -Filter $Filter

    if ($files.Count -eq 0)
    {
        Write-Output 'No matching files found.'
        return
    }

    $timestamp = Get-Date -Format 'yyyyMMdd_HHmmss'
    $baseName = if ($Prefix) { "${Prefix}_" } else { '' }

    if ($Compress)
    {
        if ($files.Count -eq 1)
        {
            $file = $files[0]
            $zipName = "${baseName}$($file.BaseName)_$timestamp.zip"
        }
        else
        {
            $zipName = "${baseName}Backup_$timestamp.zip"
        }

        $zipPath = Join-Path $Destination $zipName

        Compress-Archive -Path $files.FullName -DestinationPath $zipPath -Force

        Write-Output "Compressed backup saved to $zipPath"
    }
    elseif ($files.Count -eq 1)
    {
        $file = $files[0]
        $destName = "${baseName}$($file.BaseName)_$timestamp$($file.Extension)"
        $destPath = Join-Path $Destination $destName

        Copy-Item -Path $file.FullName -Destination $destPath -Force

        Write-Output "File copied to $destPath"
    }
    else
    {
        $folderName = "${baseName}Backup_$timestamp"
        $destinationFolder = Join-Path $Destination $folderName

        New-Item -ItemType Directory -Path $destinationFolder -Force | Out-Null

        foreach ($file in $files)
        {
            $relativePath = $file.FullName.Substring($Source.Length).TrimStart('\')
            $targetPath = Join-Path $destinationFolder $relativePath
            $targetDir = Split-Path $targetPath -Parent

            if (-not (Test-Path $targetDir))
            {
                New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
            }

            Copy-Item -Path $file.FullName -Destination $targetPath -Force
        }

        Write-Output "Files copied to $destinationFolder"
    }
}

if ($Watch)
{
    $lastHash = @{}
    while ($true)
    {
        $files = Get-MatchingFiles -Source $Source -Filter $Filter
        $newHash = Get-HashTable -Files $files

        if (Has-Changed -OldHash $lastHash -NewFiles $files)
        {
            Save-Content -Source $Source -Destination $Destination -Prefix $Prefix -Filter $Filter -Compress:$Compress

            $lastHash = $newHash
        }

        Start-Sleep -Seconds $SaveIntervalSeconds
    }
}
else
{
    Save-Content -Source $Source -Destination $Destination -Prefix $Prefix -Filter $Filter -Compress:$Compress
}
</code></pre>
]]></description>
      <pubDate>Fri, 04 Jul 2025 05:54:24 GMT</pubDate>
      <guid isPermaLink="true">https://benedek.win/blog/creating-periodic-local-copies-of-files</guid>
    </item>
  </channel>
</rss>