<?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: Max Pixel</title>
    <description>The latest articles on DEV Community by Max Pixel (@mpixel).</description>
    <link>https://dev.to/mpixel</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F174872%2Fa43ed82d-e0d7-4c83-80e9-d99124f574e4.png</url>
      <title>DEV Community: Max Pixel</title>
      <link>https://dev.to/mpixel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mpixel"/>
    <language>en</language>
    <item>
      <title>Extrinsic Role Headers: Standardizing Member Order for Faster and Deeper Comprehension</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Sat, 30 Dec 2023 22:45:10 +0000</pubDate>
      <link>https://dev.to/mpixel/extrinsic-role-headers-standardizing-member-order-for-faster-and-deeper-comprehension-4p6g</link>
      <guid>https://dev.to/mpixel/extrinsic-role-headers-standardizing-member-order-for-faster-and-deeper-comprehension-4p6g</guid>
      <description>&lt;p&gt;Moved to &lt;a href="https://m-pixel.com/extrinsic-role-headers-standardizing-member-order-for-faster-and-deeper-comprehension/" rel="noopener noreferrer"&gt;https://m-pixel.com/extrinsic-role-headers-standardizing-member-order-for-faster-and-deeper-comprehension/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>cleancode</category>
      <category>codereview</category>
      <category>codequality</category>
    </item>
    <item>
      <title>UE5 Anti-Practice: Collision Components Under a Mesh Component</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Sun, 09 Oct 2022 00:00:04 +0000</pubDate>
      <link>https://dev.to/mpixel/ue5-anti-practice-collision-components-under-a-mesh-component-2m7o</link>
      <guid>https://dev.to/mpixel/ue5-anti-practice-collision-components-under-a-mesh-component-2m7o</guid>
      <description>&lt;p&gt;Moved to &lt;a href="https://m-pixel.com/ue5-anti-practice-collision-components-under-a-mesh-component/" rel="noopener noreferrer"&gt;https://m-pixel.com/ue5-anti-practice-collision-components-under-a-mesh-component/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>unrealengine</category>
      <category>unity3d</category>
      <category>gamedev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Prefer auto* Over auto for Pointer Declarations in C++</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Mon, 05 Sep 2022 23:10:27 +0000</pubDate>
      <link>https://dev.to/mpixel/prefer-auto-over-auto-for-pointer-declarations-in-c-37k7</link>
      <guid>https://dev.to/mpixel/prefer-auto-over-auto-for-pointer-declarations-in-c-37k7</guid>
      <description>&lt;p&gt;Moved to &lt;a href="https://m-pixel.com/prefer-auto-over-auto-for-pointer-declarations-in-c/" rel="noopener noreferrer"&gt;https://m-pixel.com/prefer-auto-over-auto-for-pointer-declarations-in-c/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>programming</category>
      <category>codereview</category>
      <category>codequality</category>
    </item>
    <item>
      <title>How to use Plastic SCM's merge tool with P4V</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Mon, 05 Sep 2022 20:58:03 +0000</pubDate>
      <link>https://dev.to/mpixel/how-to-use-plastic-scms-merge-tool-with-p4v-5022</link>
      <guid>https://dev.to/mpixel/how-to-use-plastic-scms-merge-tool-with-p4v-5022</guid>
      <description>&lt;p&gt;Moved to &lt;a href="https://m-pixel.com/how-to-use-plastic-scms-merge-tool-with-p4v/" rel="noopener noreferrer"&gt;https://m-pixel.com/how-to-use-plastic-scms-merge-tool-with-p4v/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>versioncontrol</category>
      <category>perforce</category>
      <category>plastic</category>
      <category>howto</category>
    </item>
    <item>
      <title>pwsh saved me from unix</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Sun, 07 Feb 2021 00:02:08 +0000</pubDate>
      <link>https://dev.to/mpixel/pwsh-saved-me-from-unix-2ek3</link>
      <guid>https://dev.to/mpixel/pwsh-saved-me-from-unix-2ek3</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PS /home/max&amp;gt; rm ./DuetSoftwareFramework/
/usr/bin/rm: cannot remove './DuetSoftwareFramework/': Is a directory
PS /home/max&amp;gt; rmdir ./DuetSoftwareFramework/
/usr/bin/rmdir: failed to remove './DuetSoftwareFramework/': Not a directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thankfully, I have a competent modern shell to save me from this archaic nonsense.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PS /home/max&amp;gt; Remove-Item ./DuetSoftwareFramework/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Remove-Item&lt;/code&gt; succeeded where both &lt;code&gt;rm&lt;/code&gt; and &lt;code&gt;rmdir&lt;/code&gt; failed.  And for reference, &lt;code&gt;ri&lt;/code&gt; is an alias for &lt;code&gt;Remove-Item&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>hottakes</category>
    </item>
    <item>
      <title>Sudo in Windows 10</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Fri, 14 Aug 2020 05:31:25 +0000</pubDate>
      <link>https://dev.to/mpixel/sudo-in-windows-10-lpo</link>
      <guid>https://dev.to/mpixel/sudo-in-windows-10-lpo</guid>
      <description>&lt;p&gt;&lt;code&gt;ssh max@localhost&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It's longer than &lt;code&gt;sudo&lt;/code&gt;, but it's shorter than &lt;code&gt;Start-Process Powershell -Verb runAs&lt;/code&gt; (and doesn't open a new window).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But, Max, that's just an SSH login command!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That it is!  Windows 10 has built-in OpenSSH now, both server and client.  It just so happens that the Windows 10 SSH server gives administrative users an administrative context.  It's understandable why they would do it that way, given that Windows doesn't have a &lt;code&gt;sudo&lt;/code&gt; equivalent, and that SSH is often used for remote &lt;em&gt;administration&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So, whenever I need to bash out a Chocolatey command, or... is there anything else I ever need an administrative console for?  Anyways, whenever I need to do that, instead of opening a new Windows Terminal window, I just &lt;code&gt;ssh max@localhost&lt;/code&gt; my way to super-user success!&lt;/p&gt;

</description>
      <category>tidbit</category>
    </item>
    <item>
      <title>Exploring Two-Way Sync Between SVN and Plastic SCM</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Wed, 13 May 2020 06:40:19 +0000</pubDate>
      <link>https://dev.to/mpixel/exploring-two-way-sync-between-svn-and-plastic-scm-38pm</link>
      <guid>https://dev.to/mpixel/exploring-two-way-sync-between-svn-and-plastic-scm-38pm</guid>
      <description>&lt;p&gt;I'm often asked by customers to do work on some project that is being tracked in SVN.  Having been spoiled by Plastic SCM's very well-thought-out system, SVN's crufty paradigm soup of fragility and slowness is mind-numbingly infuriating.  I looked into what I could do to work with Plastic on my end without any inconvenience or interruption to the customer (that is to say, without creating any &lt;em&gt;additional&lt;/em&gt; inconvenience or interruption beyond that which is already imposed upon them by SVN).&lt;/p&gt;

&lt;p&gt;The simplest approach is, of course, to point an SVN client and a Plastic client to the same workspace folder, managing back-and-forth manually:  Pull latest in SVN, commit in Plastic; merge to main in Plastic, commit in SVN.  I thought it would be worth exploring the possibility of a solution that would actually maintain the entire history of the SVN repository in Plastic, so that I can see &lt;code&gt;annotate&lt;/code&gt; history in my IDE, see incremental Blueprint change diffs in Unreal Engine, etc.  Really, so that I can use it as proper and fully-featured version control rather than just a file transfer mechanism with an undo feature.&lt;/p&gt;

&lt;p&gt;I quickly found &lt;a href="http://blog.plasticscm.com/2015/09/moving-from-svn-to-plastic-scm-how-we.html" rel="noopener noreferrer"&gt;Plastic's guest blog post about migrating from SVN using git-svn and then Git Sync&lt;/a&gt; (Git Sync being Plastic's built-in feature to synchronize between Plastic and Git).  I started following the steps in the post, but found that &lt;code&gt;git svn&lt;/code&gt; was a bit too cumbersome - there were a lot of things that left me thinking, &lt;em&gt;"this could really use a script to simplify the process and improve the default behavior"&lt;/em&gt;.  I figured, if &lt;em&gt;I&lt;/em&gt; was thinking that, then &lt;strong&gt;somebody&lt;/strong&gt; has probably already thought the same thing and created those scripts.&lt;/p&gt;

&lt;p&gt;I found svn2git (in particular, &lt;a href="https://github.com/crazy-max/docker-svn2git-mirror" rel="noopener noreferrer"&gt;this implementation&lt;/a&gt; of svn2git in a Docker container with a nice config file and automatic recurring sync).  How about that?  Not only had somebody already written the scripts, but they happen to be my crazy internet doppleganger.  I didn't even know I had one!  Touche, &lt;em&gt;Crazy Max&lt;/em&gt;, touche.&lt;/p&gt;

&lt;p&gt;After making several fixes to Crazy's setup, and modifying it to use &lt;code&gt;git://&lt;/code&gt; instead of &lt;code&gt;ssh://&lt;/code&gt;, I have SVN to Git to Plastic working very well.  The &lt;code&gt;svn2git&lt;/code&gt; container is configured to push each repo to a &lt;code&gt;git daemon&lt;/code&gt; container (eventually I would like to figure out how to avoid this data redundancy - to have the &lt;code&gt;git daemon&lt;/code&gt; use the same &lt;code&gt;.git&lt;/code&gt; folders as &lt;code&gt;svn2git&lt;/code&gt; - but currently one seems to require bare while the other requires working copy).  I then use Git Sync from the Plastic GUI (I plan to automate this at an interval, too).&lt;/p&gt;

&lt;p&gt;I realized that I could ditch the &lt;code&gt;git daemon&lt;/code&gt;, and instead use &lt;a href="https://www.plasticscm.com/gitserver" rel="noopener noreferrer"&gt;Plastic GitServer&lt;/a&gt;, configuring &lt;code&gt;svn2git&lt;/code&gt; to push directly to that, instead.  Having read that &lt;a href="https://www.plasticscm.com/documentation/gitserver/plastic-scm-version-control-gitserver-guide#Storagerestrictions" rel="noopener noreferrer"&gt;Plastic Git Server maintains two copies of the data&lt;/a&gt; (Git format and Jet format, I assume), I decided to stick with the &lt;code&gt;git daemon&lt;/code&gt; middleman in favor leaving open the possibility of consolidating the &lt;code&gt;git daemon&lt;/code&gt; and &lt;code&gt;git svn&lt;/code&gt; "databases" (I doubt I can have &lt;code&gt;git svn&lt;/code&gt; and Plastic GitSync use the same .git files as easily).&lt;/p&gt;

&lt;p&gt;Once I had this working, the next step was to figure out how I would get data going back in the other direction.  My team prefers &lt;a href="https://www.plasticscm.com/book/#_one_task_one_branch" rel="noopener noreferrer"&gt;branch-per-task&lt;/a&gt;, but most SVN-using customers tend to prefer big commits to trunk as the default mode of operation.  Again, there is a very "straightforward" solution: I can point SVN to the same workspace and commit to it while Plastic is on the feature branch;  but even if the customer doesn't care about task branches and granular commits, wouldn't it be much better if I could see those merges in Plastic?  Especially so with Plastic GUI's feature to show merged vs unmerged branches as different colors in the graph view.&lt;/p&gt;

&lt;p&gt;So, let's say that I merge our task branch into &lt;code&gt;/main&lt;/code&gt;, sync that to &lt;code&gt;master&lt;/code&gt; in the intermediate Git repo, &lt;code&gt;pull&lt;/code&gt; it into the &lt;code&gt;git svn&lt;/code&gt; working copy, and then finally &lt;code&gt;dcommit&lt;/code&gt; it to SVN.  Given that Git Sync syncs everything without any ability to filter branches, I must expect that my task-branches and merge-commits will be synced &lt;em&gt;as such&lt;/em&gt; into Git.  This is an unfortunate waste of hard disk space, but it's not a dealbreaker as long as the Git-to-SVN push treats the merge-commit as a regular one.  After &lt;a href="https://stackoverflow.com/questions/6214711/git-log-and-show-on-a-bare-repo" rel="noopener noreferrer"&gt;reading about &lt;code&gt;git svn dcommit&lt;/code&gt;'s behavior when merges are present&lt;/a&gt;, it appears that this is exactly how &lt;code&gt;git svn&lt;/code&gt; behaves by default - yay!  However, this action will &lt;em&gt;replace&lt;/em&gt; the original merge-commit with a new one.  My past experience tells me that replacing commits in Git causes Plastic to fail subsequent Git Sync operations unless the conflicting changeset is removed from Plastic.  I was still willing to give it a shot, however...&lt;/p&gt;

&lt;p&gt;At some point in the past, some error message that I got from Plastic brought to my attention the existence of &lt;code&gt;%LOCALAPPDATA%\plastic4\sync\git&lt;/code&gt;.  I poked around in there and found that &lt;code&gt;cset.mapping.conf&lt;/code&gt; contains very straightforward association between Plastic changesets and Git commits.  I figured I could potentially work around any issues by replacing the mege-commit git-hash with the svn-rebase git-hash in this file.&lt;/p&gt;

&lt;p&gt;To my surprise, however, I didn't end up needing to touch those hidden files.  When I ran a Git Sync after everything else, Plastic brought the replacement merge commit in alongside the existing one.  The resulting forked head prevented it from pushing the first merge-commit back again.  I was surprised again to see that the replacement commit appeared with an identical merge link!  I didn't expect this having read that &lt;code&gt;git svn dcommit&lt;/code&gt; destroys merge links, but it seems that the Git community has fixed that shortcoming.  At that point, all I had to do was to delete the original merge-commit, leaving the replacement one.&lt;/p&gt;

&lt;p&gt;I'm left with a working bi-directional system.  It will require a bit of additional automation before I'm totally satisfied with it, but it's already sufficient to begin saving myself and my team some time and agony.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Moving a Docker Volume to a different Windows computer</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Fri, 10 Apr 2020 02:07:16 +0000</pubDate>
      <link>https://dev.to/mpixel/moving-a-docker-volume-to-a-different-windows-computer-1l47</link>
      <guid>https://dev.to/mpixel/moving-a-docker-volume-to-a-different-windows-computer-1l47</guid>
      <description>&lt;p&gt;Today, I needed to transfer my &lt;a href="https://www.postgresql.org/" rel="noopener noreferrer"&gt;Postgresql&lt;/a&gt; instance from my laptop to my always-on machine.  The database and accompanying application are in the early stages of development, so I haven't set up any sort of replication or backup yet.  In fact, after discovering &lt;a href="https://www.postgresql.org/docs/9.1/high-availability.html" rel="noopener noreferrer"&gt;how undesirably complex and inflexible this is&lt;/a&gt; for Postgresql, I intend to switch to &lt;a href="http://cassandra.apache.org/" rel="noopener noreferrer"&gt;Cassandra&lt;/a&gt;.  I'm not going to port my API to Cassandra in just a few hours, though, I need to use it today, and transferring it seems a small enough task that I should just get it out of the way now.&lt;/p&gt;

&lt;p&gt;The codebase is already replicated to all of my machines through &lt;a href="https://www.plasticscm.com/" rel="noopener noreferrer"&gt;Plastic SCM&lt;/a&gt;, however the actual data of the database lives only on my laptop.  I have Postgresql's persistent data set up to be stored in a &lt;a href="https://success.docker.com/article/different-types-of-volumes" rel="noopener noreferrer"&gt;named volume&lt;/a&gt;.  According to &lt;a href="https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes" rel="noopener noreferrer"&gt;Docker's documentation&lt;/a&gt;, the correct way to back up and restore named and anonymous volumes is to copy the files from named-volume to host-volume using a temporary container that binds to both and runs a &lt;code&gt;cp&lt;/code&gt;, &lt;code&gt;tar&lt;/code&gt;, or similar command to copy the data from mount to mount.&lt;/p&gt;

&lt;p&gt;The example given in Docker's documentation, however, assumes that Linux containers are being used.  In my case, I'm running Postgresql in a &lt;a href="https://www.docker.com/products/windows-containers" rel="noopener noreferrer"&gt;Windows Container&lt;/a&gt;.  These are the commands that I ended up running (in &lt;a href="https://docs.microsoft.com/en-us/powershell/scripting/overview?view=powershell-7" rel="noopener noreferrer"&gt;PowerShell&lt;/a&gt;) to get it to work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir backup
docker run --rm --volumes-from masterbrain_postgresql_1 -v $PWD/backup:C:/backup mcr.microsoft.com/powershell:nanoserver pwsh -Command cp pgsql/data/* backup -Recurse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are a few caveats that required a few unintuitive elements that I had to include in the command:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The local &lt;code&gt;backup&lt;/code&gt; folder must exist before I can run the &lt;code&gt;docker&lt;/code&gt; command - if it doesn't exist, Docker will return an error instead of assuming that I would like it to &lt;code&gt;mkdir&lt;/code&gt; for me.&lt;/li&gt;
&lt;li&gt;Docker for Windows does not accept relative paths in bind-mount specifications - prefixing the relative path with &lt;code&gt;$PWD&lt;/code&gt; satisfies this requirement.&lt;/li&gt;
&lt;li&gt;Docker for Windows also requires the use of drive letters.  Even though &lt;code&gt;/&lt;/code&gt; is sufficient in &lt;code&gt;pwsh&lt;/code&gt;, &lt;code&gt;scp&lt;/code&gt;, and many others, &lt;code&gt;docker&lt;/code&gt; requires &lt;code&gt;C:/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hub.docker.com/_/microsoft-powershell" rel="noopener noreferrer"&gt;The official &lt;code&gt;powershell&lt;/code&gt; image&lt;/a&gt; does not set &lt;code&gt;pwsh&lt;/code&gt; as the entrypoint - when specifying a command in the &lt;code&gt;docker run&lt;/code&gt; line instead of entering an interactive session, in order for that command to actually run in PowerShell (the whole point of using this image), it must be prefixed with &lt;code&gt;pwsh -Command&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once I had everything copied into the &lt;code&gt;backup&lt;/code&gt; folder, I needed to transfer those files to the other computer.  I already have all of my machines set up to ssh into each other (I find this a bit more convenient than setting up ActiveDirectory for a company of two), so I chose to do so using &lt;code&gt;scp&lt;/code&gt;.  You can use any other method, though, such as SMB or a flash drive.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh max@alwayson mkdir /temp/pg
scp -r backup/* max@alwayson:/temp/pg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just like with the backup, I'm required to create the destination folder first.  If I don't, &lt;code&gt;scp&lt;/code&gt; fails with the shockingly uninformative and misleading error message, &lt;em&gt;"lost connection"&lt;/em&gt;.  &lt;code&gt;rsync&lt;/code&gt; could accomplish the same thing in just one command, but the Windows version of &lt;code&gt;rsync&lt;/code&gt; is still awful.&lt;/p&gt;

&lt;p&gt;Now that the database files exist on the target machine, the last step is mostly the same as the first step with the directories reversed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose up # followed by a ctrl+c to close it as soon as it's up and running
docker run --rm --volumes-from masterbrain_postgresql_1 -v C:/temp/pg:C:/backup mcr.microsoft.com/powershell:nanoserver pwsh -Command 'rm pgsql/data/* -Recurse; cp backup/* pgsql/data -Recurse'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This time, I didn't need to create any folders beforehand, but I did need to create the named volume.  I accomplished this by spinning up my composition, which also allows me to use the same &lt;code&gt;--volumes-from&lt;/code&gt; approach.  I also had to add an &lt;code&gt;rm&lt;/code&gt; to make sure that the resulting named volume didn't contain anything not in the backup folder.  Note that in order to run two commands (&lt;code&gt;rm&lt;/code&gt; and &lt;code&gt;cp&lt;/code&gt;) inside of the container (instead of running one inside and one outside), the commands need to be encapsulated in quotes.&lt;/p&gt;

&lt;p&gt;In retrospect, there appears to be a slightly more straightforward solution:  An &lt;code&gt;scp&lt;/code&gt;-equipped container on my laptop could &lt;code&gt;scp&lt;/code&gt; the files directly from its named volume, directly into a named volume on the target machine, if there is a container running on the target machine which is bound to the named volume and is configured to accept SSH connections from the container on my laptop.  That said, while this approach would reduce the number of "hops" that the data goes through, it's much easier to remember and bash out the above commands than it is to get two containers talking to each other over SSH.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>FastestBinaryStream</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Mon, 17 Jun 2019 05:59:47 +0000</pubDate>
      <link>https://dev.to/mpixel/fastestbinarystream-3102</link>
      <guid>https://dev.to/mpixel/fastestbinarystream-3102</guid>
      <description>&lt;p&gt;Moved to &lt;a href="https://m-pixel.com/fastest-binary-stream/" rel="noopener noreferrer"&gt;https://m-pixel.com/fastest-binary-stream/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>news</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Deconstructing OnlyKey Agent</title>
      <dc:creator>Max Pixel</dc:creator>
      <pubDate>Tue, 04 Jun 2019 17:08:55 +0000</pubDate>
      <link>https://dev.to/mpixel/deconstructing-onlykey-agent-401l</link>
      <guid>https://dev.to/mpixel/deconstructing-onlykey-agent-401l</guid>
      <description>&lt;p&gt;Moved to &lt;a href="https://m-pixel.com/deconstructing-onlykey-agent/" rel="noopener noreferrer"&gt;https://m-pixel.com/deconstructing-onlykey-agent/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reverseengineer</category>
      <category>python</category>
      <category>c</category>
      <category>security</category>
    </item>
  </channel>
</rss>
