<?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: aurelio avila</title>
    <description>The latest articles on DEV Community by aurelio avila (@aurelio_avila).</description>
    <link>https://dev.to/aurelio_avila</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%2F4103951%2F23e7c529-86c0-4303-9070-642622de5353.jpg</url>
      <title>DEV Community: aurelio avila</title>
      <link>https://dev.to/aurelio_avila</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aurelio_avila"/>
    <language>en</language>
    <item>
      <title>A playable preview is not a recovered original</title>
      <dc:creator>aurelio avila</dc:creator>
      <pubDate>Tue, 20 Oct 2026 11:39:52 +0000</pubDate>
      <link>https://dev.to/aurelio_avila/a-playable-preview-is-not-a-recovered-original-1jg4</link>
      <guid>https://dev.to/aurelio_avila/a-playable-preview-is-not-a-recovered-original-1jg4</guid>
      <description>&lt;p&gt;A recovery tool finds a video. Its thumbnail looks right, the player opens, and the first few seconds are familiar. That is useful evidence about a preview. It does not answer whether the complete original file survived.&lt;/p&gt;

&lt;p&gt;For developers testing a media recovery workflow, keep three checks separate: what bytes were retained, what the decoder can read, and what the available metadata actually establishes. Here is a small review exercise using your own non-sensitive test media.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Keep a known reference before the experiment
&lt;/h2&gt;

&lt;p&gt;Start with a short clip you created and a separate, preserved reference copy. Record its byte length and SHA-256 before doing any recovery experiment. Keep the reference away from the source you will examine and the destination used for exports.&lt;/p&gt;

&lt;p&gt;In PowerShell, the following reads two existing files and compares their SHA-256 values. Replace both placeholder paths with files in your test corpus:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$referenceHash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Get-FileHash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-LiteralPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'.\reference\known-good.mp4'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Algorithm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SHA256&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Hash&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$candidateHash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Get-FileHash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-LiteralPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'.\export\candidate.mp4'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Algorithm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SHA256&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Hash&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$referenceHash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-eq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$candidateHash&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Microsoft documents &lt;a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-filehash?view=powershell-5.1" rel="noopener noreferrer"&gt;Get-FileHash&lt;/a&gt; as a content-based check. Renaming a file does not change its content hash. No example output is supplied here: the comparison depends on the actual files you test.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Interpret the comparison narrowly
&lt;/h2&gt;

&lt;p&gt;A matching SHA-256 against a trusted reference is strong practical evidence that the retained bytes match that reference. It does not identify the person who created the media, the application that downloaded it or the time it was recorded.&lt;/p&gt;

&lt;p&gt;A mismatch means you have not established a byte-for-byte match. It does not tell you the cause. Truncation, a different container or metadata, and re-encoding can all produce different files. Keep the original export before making a repair or transcode, so you can distinguish the retained candidate from later derivatives.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Record the checks that a thumbnail cannot replace
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Record&lt;/th&gt;
&lt;th&gt;Limit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Retained bytes&lt;/td&gt;
&lt;td&gt;File length and SHA-256; reference used&lt;/td&gt;
&lt;td&gt;A hash without a trusted reference is an identifier, not a completeness result.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Playback&lt;/td&gt;
&lt;td&gt;Sections examined and any decoder errors&lt;/td&gt;
&lt;td&gt;Opening the first frame does not establish that the ending or every stream is decodable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source context&lt;/td&gt;
&lt;td&gt;Image or device identifier and available offset or extents&lt;/td&gt;
&lt;td&gt;An offset is a location in that source, not proof of authorship.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dates&lt;/td&gt;
&lt;td&gt;Each available value with its recorded source&lt;/td&gt;
&lt;td&gt;A filesystem creation date can reflect copying rather than recording.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage&lt;/td&gt;
&lt;td&gt;Scope, selected mode, interruptions and failed reads&lt;/td&gt;
&lt;td&gt;Reading the selected scope does not prove that every original file was recovered.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Check full decoding separately when it matters to the test. Keep a note of which streams and portions were examined. Do not silently turn an unknown date, an untested ending or a failed read into a successful result.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Keep the exercise separate from a product claim
&lt;/h2&gt;

&lt;p&gt;I build &lt;a href="https://framewitness.pages.dev/" rel="noopener noreferrer"&gt;Frame Witness&lt;/a&gt;, a Windows photo and video recovery application. Its gallery, player and source details are intended to keep these observations together. The official workspace screenshot below uses generated test media in a licensed full-scan workspace; it is a demonstration, not a result from this exercise.&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%2Fm18801417eqkpp3glv4b.webp" 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%2Fm18801417eqkpp3glv4b.webp" alt="Frame Witness licensed workspace using generated test media, with a results table and a synthetic dashcam clip" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The free account has different limits: a quick scan of the first 8 GB, up to 100 results, previews and saving recovered files up to 1 MB each. Full scans, larger exports and advanced tools require a paid licence. A preview alone should not be presented as proof of complete recovery.&lt;/p&gt;

&lt;p&gt;Recovery depends on surviving bytes. Overwrites, SSD TRIM and cryptographic erasure can prevent it. Preserve important sources independently and use a different physical destination for exports. Frame Witness is not a certified forensic product; independent field validation is still needed for institutional use.&lt;/p&gt;

&lt;p&gt;For a broader testing reference, &lt;a href="https://www.nist.gov/itl/csd/secure-systems-and-applications/computer-forensics-tool-testing-program-cftt" rel="noopener noreferrer"&gt;NIST's Computer Forensics Tool Testing program&lt;/a&gt; develops specifications, procedures and test sets for forensic tools. Linking that methodology is not a claim that Frame Witness was evaluated or endorsed by NIST.&lt;/p&gt;

&lt;p&gt;Which check would you add to a media recovery test before calling a candidate a complete original?&lt;/p&gt;

</description>
      <category>security</category>
      <category>testing</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Test a prompt-redaction workflow with fictional logs</title>
      <dc:creator>aurelio avila</dc:creator>
      <pubDate>Tue, 20 Oct 2026 09:49:34 +0000</pubDate>
      <link>https://dev.to/aurelio_avila/test-a-prompt-redaction-workflow-with-fictional-logs-2jfi</link>
      <guid>https://dev.to/aurelio_avila/test-a-prompt-redaction-workflow-with-fictional-logs-2jfi</guid>
      <description>&lt;p&gt;A debugging prompt can contain two things at once: useful evidence and identifiers the recipient does not need. Removing everything makes the problem impossible to diagnose. Removing only the obvious email address can leave a credential behind.&lt;/p&gt;

&lt;p&gt;Before choosing a redaction tool, define what a useful result should preserve. Here is a small, repeatable review exercise. It uses made-up data and does not require an account, a scanner or a real client document.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Seed a fictional example
&lt;/h2&gt;

&lt;p&gt;Start with a deliberately invented support log:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please explain why this request returned 401.
User: person@example.com
Authorization: Bearer DEMO_NOT_A_REAL_TOKEN
POST /v1/orders
Response: 401 Unauthorized
Timestamp: 2026-10-20T08:00:00Z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;example.com&lt;/code&gt; and the token marker are test data. This is not an incident record, a working credential or output captured from a scanner.&lt;/p&gt;

&lt;p&gt;For this exercise, the method, route and response are the useful context. The email and bearer value are unnecessary for explaining a 401. A manually prepared target might be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please explain why this request returned 401.
User: [email]
Authorization: Bearer [token]
POST /v1/orders
Response: 401 Unauthorized
Timestamp: [time]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is an intended example, not a claim that a particular tool produced it. In a real log, the route, timestamp or identifier might also be confidential. Decide from the task and your organization's handling rules, rather than treating this field list as universally safe.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Test both misses and unnecessary changes
&lt;/h2&gt;

&lt;p&gt;One successful substitution says little about coverage. Keep a small set of cases with an expected review decision:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fictional case&lt;/th&gt;
&lt;th&gt;What to check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A repeated email in a heading and a quoted reply&lt;/td&gt;
&lt;td&gt;Did you inspect both occurrences?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;An authorization header beside a 401 response&lt;/td&gt;
&lt;td&gt;Was the credential removed while the error remained understandable?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A stack trace with a local profile directory&lt;/td&gt;
&lt;td&gt;Could the path identify a person or reveal an internal project?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A harmless placeholder such as &lt;code&gt;[email]&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Was useful placeholder structure needlessly destroyed?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A client-specific project name&lt;/td&gt;
&lt;td&gt;Do you need a protected term beyond generic email or token patterns?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Record the input, the proposed result and your decision. Count a missed value separately from an unnecessary replacement. These are review cases, not a benchmark, and they do not establish a detection rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Trace the processing boundary first
&lt;/h2&gt;

&lt;p&gt;A check performed before an AI model receives a prompt may itself send that prompt to a service. Ask three questions before entering sensitive text:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where does this particular mode run?&lt;/li&gt;
&lt;li&gt;What is retained, and what does the policy actually cover?&lt;/li&gt;
&lt;li&gt;Is the destination permitted for this material?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Encryption in transit and a retention policy address different questions. A server-side check still sends text to a server. If your rules prohibit that transfer, do not use a confidential document to test it.&lt;/p&gt;

&lt;p&gt;I build Redaxa, so its current modes provide a concrete example of why the distinction matters:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Processing path&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free Chrome extension prompt checks&lt;/td&gt;
&lt;td&gt;In the browser, on supported chat sites; the checked text stays on the device.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web or Windows prompt checks, and extension checks with an active plan&lt;/td&gt;
&lt;td&gt;Redaxa's servers; the published policy says text is analyzed and discarded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public repository checks on the web&lt;/td&gt;
&lt;td&gt;Server-side, on the default branch, with detected values hidden in results.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extended repository reviews in Windows&lt;/td&gt;
&lt;td&gt;Local review with accessible Git history and supported archives; downloads and vulnerability lookups require networking.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Repository review is a separate workflow. Private repositories are not supported. Local extended reviews require Pro or Business; they should not be described as part of the free prompt check.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Inspect the result before sharing
&lt;/h2&gt;

&lt;p&gt;Read both versions. Search for repeated identifiers, quoted history and attached fragments. Check that the remaining question is still answerable. An empty finding list is not evidence that every sensitive value was removed, and a replacement does not establish anonymity.&lt;/p&gt;

&lt;p&gt;OWASP's guidance on &lt;a href="https://genai.owasp.org/llmrisk/llm022025-sensitive-information-disclosure/" rel="noopener noreferrer"&gt;sensitive information disclosure&lt;/a&gt; includes sanitization and user education among mitigations. A redaction preview is one review step, not a complete security control.&lt;/p&gt;

&lt;p&gt;If a real credential was already exposed, changing a later copy does not revoke it. Follow the issuing service's revocation or rotation process and your incident procedure.&lt;/p&gt;

&lt;p&gt;To inspect the product example, &lt;a href="https://redaxa.getcertsprint.com/" rel="noopener noreferrer"&gt;compare Redaxa's processing paths and open its fictional preview&lt;/a&gt;. The web example uses made-up data; it is not a live detection test. Free live web prompt checks have a daily allowance shared across the network. Detection can miss information and flag harmless text.&lt;/p&gt;

&lt;p&gt;Which case would you add to this review set before using a redaction workflow with real work?&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>testing</category>
    </item>
    <item>
      <title>Before you uninstall a Windows app, read the command</title>
      <dc:creator>aurelio avila</dc:creator>
      <pubDate>Tue, 20 Oct 2026 07:34:04 +0000</pubDate>
      <link>https://dev.to/aurelio_avila/before-you-uninstall-a-windows-app-read-the-command-17ak</link>
      <guid>https://dev.to/aurelio_avila/before-you-uninstall-a-windows-app-read-the-command-17ak</guid>
      <description>&lt;p&gt;An uninstall button can hide several different operations: running a vendor's uninstaller, removing a Store package, or cleaning files that remain afterward. Treat those as separate decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Identify what you are removing
&lt;/h2&gt;

&lt;p&gt;Read the program name, publisher and install location. A shared runtime is different from an application you no longer use. A removal score can help prioritize a review; it cannot decide whether another program still needs that component.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Read the proposed action
&lt;/h2&gt;

&lt;p&gt;Inspect the exact command and requested permissions before confirming. An administrator prompt describes a privilege boundary, not proof that the operation is harmless.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Check your recovery options
&lt;/h2&gt;

&lt;p&gt;Maintain an independent backup of important data. A Windows restore point may fail, be unavailable or provide limited recovery. Its creation is not a guarantee that a removed app, its settings or personal files can be restored.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Separate estimates from observations
&lt;/h2&gt;

&lt;p&gt;An installed-size value in the registry is an estimate supplied by software. Do not present it as disk space that an uninstall actually recovered. Read the recorded outcome, exit code and reboot requirement before drawing a conclusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Review leftovers individually
&lt;/h2&gt;

&lt;p&gt;A leftover scanner finds candidates for review. A file name or old directory alone does not establish that deletion is safe. Keep anything whose ownership or purpose you cannot establish.&lt;/p&gt;

&lt;h2&gt;
  
  
  A concrete example: inspect the registration without running it
&lt;/h2&gt;

&lt;p&gt;For the per-user NSIS installation of PC Tweaker Uninstaller, this PowerShell snippet reads its registered uninstall entry. It does not launch an uninstaller or change settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\PC Tweaker Uninstaller'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-ItemProperty&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-LiteralPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;DisplayName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;DisplayVersion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Publisher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="n"&gt;UninstallString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;QuietUninstallString&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the entry read on 20 October 2026. This particular installed copy is &lt;strong&gt;0.13.0&lt;/strong&gt;, not a claim about the latest release. The personal profile path was replaced with &lt;code&gt;%LOCALAPPDATA%&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"DisplayName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PC Tweaker Uninstaller"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"DisplayVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.13.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Publisher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Aurelio Avila"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"UninstallString"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;%LOCALAPPDATA%&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;PC Tweaker Uninstaller&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;uninstall.exe&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"QuietUninstallString"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the tool's own registered entry, &lt;strong&gt;not a removal receipt&lt;/strong&gt;. No uninstall was run to obtain it. The empty &lt;code&gt;QuietUninstallString&lt;/code&gt; means this entry supplies no quiet command; it is not permission to invent switches. Other packages can use different registry locations or installation scopes, and a registry key name is not automatically an MSI product code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read an MSI result in its own context
&lt;/h2&gt;

&lt;p&gt;For Windows Installer, Microsoft documents these result codes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Operation completed successfully.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1603&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fatal installation error.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1641&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Success; the installer initiated a restart.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;3010&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Success; a restart is required to complete the operation.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These meanings apply to Windows Installer, not every vendor EXE. A completed process, even with a success code, does not prove that all user data, services or shared components disappeared. Keep the package identity, version, logs and restart state together.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/msiexec" rel="noopener noreferrer"&gt;&lt;code&gt;msiexec&lt;/code&gt; reference&lt;/a&gt; distinguishes &lt;code&gt;/i&lt;/code&gt; installation from &lt;code&gt;/x&lt;/code&gt; removal. Do not mechanically rewrite a registered command, add &lt;code&gt;/quiet&lt;/code&gt;, or execute a command copied from a screenshot. Verify the intended package and the vendor's documented removal route first.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://learn.microsoft.com/en-us/windows/win32/msi/error-codes" rel="noopener noreferrer"&gt;Microsoft's Windows Installer result codes&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the app's removal brief looks like
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F00ktvlwdnbbeqpy55m8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F00ktvlwdnbbeqpy55m8w.png" alt="PC Tweaker Uninstaller 0.13.3 removal brief with example program data, showing command, permissions, estimated size and restore-point status" width="799" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Interface preview from version 0.13.3, using example programs. This is demonstration data, not the registry capture above or evidence of an actual removal. The registry size estimate is not measured freed space, and the restore-point result still needs checking.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I build PC Tweaker Uninstaller. It brings the removal brief and a local outcome ledger into this workflow. Single uninstalls and the leftover scan are free; cleaning detected leftovers and batch removal require Pro. Before elevated removals it attempts a restore point and records the result.&lt;/p&gt;

&lt;p&gt;See the workflow and its limitations: &lt;a href="https://pctweaker.app/uninstaller/" rel="noopener noreferrer"&gt;https://pctweaker.app/uninstaller/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What do you inspect before removing an unfamiliar Windows component?&lt;/p&gt;

</description>
      <category>microsoft</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Turn a website security finding into a client-ready next step</title>
      <dc:creator>aurelio avila</dc:creator>
      <pubDate>Sun, 06 Sep 2026 23:39:35 +0000</pubDate>
      <link>https://dev.to/glarion/turn-a-website-security-finding-into-a-client-ready-next-step-5cch</link>
      <guid>https://dev.to/glarion/turn-a-website-security-finding-into-a-client-ready-next-step-5cch</guid>
      <description>&lt;p&gt;A scanner can identify an observation. It cannot, by itself, settle every business decision that follows.&lt;/p&gt;

&lt;p&gt;For an agency managing client websites, a useful report needs to bridge that gap. The reader should be able to identify the affected website, understand the evidence and decide who should investigate next.&lt;/p&gt;

&lt;p&gt;Here is a practical reporting structure we use in Glarion. The examples below are fictional and illustrate communication, not findings about a real customer's website.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the observation
&lt;/h2&gt;

&lt;p&gt;Compare these two statements:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your website is insecure.&lt;/p&gt;

&lt;p&gt;The homepage response observed during this check did not include a Content-Security-Policy header.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second statement is narrower, but more useful. It identifies an observable condition without claiming that an attack occurred or that the whole website has been assessed.&lt;/p&gt;

&lt;p&gt;Include the domain, the check date and enough context to reproduce the observation. Avoid putting credentials, session tokens or unnecessary personal data into evidence that will be forwarded to a client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explain the consequence separately
&lt;/h2&gt;

&lt;p&gt;For a missing CSP, the explanation might be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This response did not declare a Content Security Policy through an HTTP header. Check whether the page supplies a policy through HTML before concluding that none exists. An appropriate policy can reduce the impact of injected content.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This explains why the finding matters without claiming that a single header prevents every attack. Severity is a useful signal, but it should not replace an explanation of the risk in the website's context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the next step concrete
&lt;/h2&gt;

&lt;p&gt;A recommendation such as “fix security headers” leaves too much work to the reader.&lt;/p&gt;

&lt;p&gt;A more useful next step is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ask the development team to test a report-only Content Security Policy, review the resources the site needs and investigate violations before enforcing it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Report-only mode lets the team observe violations without enforcing that policy. Centralized collection also requires reporting configuration; simply naming the mode is not an implementation plan. The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy-Report-Only" rel="noopener noreferrer"&gt;MDN reference&lt;/a&gt; covers the relevant header and reporting directives.&lt;/p&gt;

&lt;p&gt;Agree on an owner and a follow-up check. Do not mark a finding resolved merely because a change was requested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate actions, decisions and reference observations
&lt;/h2&gt;

&lt;p&gt;Not everything belongs in one list of problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Actions&lt;/strong&gt; have a concrete proposed fix or investigation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decisions&lt;/strong&gt; need context from the people responsible for the website. Publishing a security contact, for example, requires choosing a monitored address and a process for handling reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reference observations&lt;/strong&gt; preserve useful context, such as an observed HTTPS endpoint. They are not a count of security tests passed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping these categories separate helps a client understand what requires a response. It also avoids inflating a report with information that looks more urgent than it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the limits visible
&lt;/h2&gt;

&lt;p&gt;A report describes what was observed within a particular scope and at a particular time. A clean result is not proof that the website has no vulnerabilities today.&lt;/p&gt;

&lt;p&gt;Keep this explanation close to the findings, and retain it in exported documents. A forwarded PDF should still make sense without the application that produced it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist before sending
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Can the reader identify the domain, date and scope?&lt;/li&gt;
&lt;li&gt;Is each observation separated from assumptions?&lt;/li&gt;
&lt;li&gt;Is the consequence understandable without scanner terminology?&lt;/li&gt;
&lt;li&gt;Does each recommendation provide a next step?&lt;/li&gt;
&lt;li&gt;Are context-dependent decisions distinct from reference observations?&lt;/li&gt;
&lt;li&gt;Is there a way to verify the follow-up work?&lt;/li&gt;
&lt;li&gt;Are the limits visible in both the web report and PDF?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We build Glarion for agencies that need this workflow. You can inspect the &lt;a href="https://glarion.app/sample-report.html?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=agency_launch_202609&amp;amp;utm_content=client_report_article" rel="noopener noreferrer"&gt;fictional sample report without signing up&lt;/a&gt;. Glarion provides a limited free public check; full scans require a paid plan and current proof of domain control. It does not replace a manual penetration test.&lt;/p&gt;

&lt;p&gt;What information do you find most useful when turning a technical observation into work a client can approve?&lt;/p&gt;

</description>
      <category>security</category>
    </item>
    <item>
      <title>Redexa Social: building local-first creator analytics for Windows</title>
      <dc:creator>aurelio avila</dc:creator>
      <pubDate>Sun, 06 Sep 2026 07:50:50 +0000</pubDate>
      <link>https://dev.to/aurelio_avila/redexa-social-building-local-first-creator-analytics-for-windows-53m6</link>
      <guid>https://dev.to/aurelio_avila/redexa-social-building-local-first-creator-analytics-for-windows-53m6</guid>
      <description>&lt;p&gt;I build &lt;strong&gt;Redexa Social&lt;/strong&gt;, formerly Social Dashboard: a Windows desktop application for reviewing creator analytics in one workspace.&lt;/p&gt;

&lt;p&gt;Its focus is analysis, not automated posting. It combines local analytics storage, trends and diagnostics, with CSV exports on Pro and Studio. The application uses a Python/FastAPI backend and an HTML, CSS and JavaScript interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local-first does not mean offline-only
&lt;/h2&gt;

&lt;p&gt;A useful distinction for an analytics product is where data is stored versus which services it needs to contact. Redexa Social keeps its analytics cache locally, but platform connections still communicate with provider APIs. Instagram and TikTok token exchanges can use a minimal remote OAuth proxy. Account authorization, billing, license verification and updates also involve remote services.&lt;/p&gt;

&lt;p&gt;On Windows, credentials are protected at rest using DPAPI in the current user’s scope. This helps protect stored credentials, but it does not make them inaccessible to malware already running as that user.&lt;/p&gt;

&lt;p&gt;Locally computed insights do not require calls to an AI model. That keeps those calculations separate from a hosted AI service.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can you connect today?
&lt;/h2&gt;

&lt;p&gt;Updated 20 October 2026.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;YouTube:&lt;/strong&gt; direct connection is available.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instagram and TikTok:&lt;/strong&gt; current use requires your own developer application, subject to provider requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;X:&lt;/strong&gt; credential status only; X analytics are not available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free plan supports one connected account and the core overview. CSV exports and full history require Pro or Studio.&lt;/p&gt;

&lt;p&gt;That distinction matters: this is not yet a one-click connection experience for every platform. The application requests read-only analytics access; it is not a social publishing or scheduling tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Branding and package identity
&lt;/h2&gt;

&lt;p&gt;Version 1.9.3 introduced the Redexa Social branding across the Windows shortcut, application icon and repository. The Windows executables distributed in the release are digitally signed and timestamped. The ZIP is a distribution container, not itself an Authenticode-signed executable.&lt;/p&gt;

&lt;p&gt;Existing WinGet users should note that the package identifier remains &lt;strong&gt;AurelioAvila.SocialDashboard&lt;/strong&gt;, even though the product is now called Redexa Social.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the current release
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://redexa.getcertsprint.com/" rel="noopener noreferrer"&gt;Redexa Social website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://redexa.getcertsprint.com/" rel="noopener noreferrer"&gt;Current release and verification instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AurelioAvila/redexa-social" rel="noopener noreferrer"&gt;Repository and issue tracker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project uses a proprietary license. Please check the repository license before reusing its code.&lt;/p&gt;

&lt;p&gt;I would welcome feedback on the onboarding experience: is it clear which integrations work directly, which require developer setup, and where your data is stored? Please remove tokens, account identifiers and private analytics from any screenshots or logs you share.&lt;/p&gt;

</description>
      <category>python</category>
      <category>showdev</category>
      <category>privacy</category>
      <category>analytics</category>
    </item>
    <item>
      <title>PC Tweaker: reviewable Windows tuning with Rust and Tauri</title>
      <dc:creator>aurelio avila</dc:creator>
      <pubDate>Thu, 03 Sep 2026 10:30:11 +0000</pubDate>
      <link>https://dev.to/aurelio_avila/pc-tweaker-3nkg</link>
      <guid>https://dev.to/aurelio_avila/pc-tweaker-3nkg</guid>
      <description>&lt;p&gt;I build &lt;strong&gt;PC Tweaker&lt;/strong&gt;, a Windows 10/11 utility built with Rust, Tauri and React. It brings performance and privacy settings, maintenance tools and hardware monitoring into one desktop application.&lt;/p&gt;

&lt;p&gt;The useful question for a tuning tool is not just “what can it change?” It is “can I understand the change before I apply it?”&lt;/p&gt;

&lt;h2&gt;
  
  
  What is new in version 1.10.0?
&lt;/h2&gt;

&lt;p&gt;The latest release adds configurable &lt;strong&gt;Gaming, Study and Work profiles&lt;/strong&gt; to the free tier. Optional settings start unchecked, so you can review the proposed changes and choose what fits your PC. Supported settings can be restored individually.&lt;/p&gt;

&lt;p&gt;A profile is a starting point, not a promise of higher FPS. Results depend on your hardware, workload and existing Windows configuration.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust&lt;/strong&gt; handles native Windows operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tauri&lt;/strong&gt; connects the native backend to the web-based interface using Windows WebView2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React&lt;/strong&gt; provides the interface for reviewing controls and monitoring hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This architecture does not by itself prove that an application is faster or safer. Those claims need measurements and testing on representative systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trust and recovery
&lt;/h2&gt;

&lt;p&gt;The version 1.10.0 Windows installer is digitally signed and timestamped with a certificate issued to Aurelio Avila. Code signing helps verify the publisher and detect changes to the signed file; it is not a guarantee that software is risk-free or that Windows will never show a reputation warning.&lt;/p&gt;

&lt;p&gt;Recovery support varies by setting. Restore controls are &lt;strong&gt;not a full system backup&lt;/strong&gt;, so review each operation and keep appropriate backups before making system-level changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it or review the project
&lt;/h2&gt;

&lt;p&gt;PC Tweaker has a free tier and optional paid Pro features. The repository is source-available under a proprietary license, not an OSI-approved open-source license.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pctweaker.app/" rel="noopener noreferrer"&gt;Product website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AurelioAvila/pc-tweaker-app/releases/tag/v1.10.0" rel="noopener noreferrer"&gt;Version 1.10.0 release and downloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AurelioAvila/pc-tweaker-app" rel="noopener noreferrer"&gt;Repository and issue tracker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would particularly appreciate feedback on whether the explanations make it clear what each setting changes and how to restore it. If you report a problem, include your Windows version and reproduction steps, but remove personal information from logs.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>tauri</category>
      <category>react</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
