<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Python on Shadow Engineering</title>
    <link>https://shadow.engineering/tags/python/</link>
    <description>Recent content in Python on Shadow Engineering</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© 2026 </copyright>
    <lastBuildDate>Sat, 03 Dec 2022 02:49:03 +0000</lastBuildDate><atom:link href="https://shadow.engineering/tags/python/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Jupyter Notebooks and Pandas for Security Analysis</title>
      <link>https://shadow.engineering/posts/security_analytics_with_pandas/</link>
      <pubDate>Sat, 03 Dec 2022 02:49:03 +0000</pubDate>
      
      <guid>https://shadow.engineering/posts/security_analytics_with_pandas/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Jupyter Notebooks&#xA;    &lt;div id=&#34;jupyter-notebooks&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#jupyter-notebooks&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Jupyter Notebooks are an interactive way to run python commands alongside documenting with rich text. This means we can methodically execute code, track actions undertaken, and recreate events. While the original intent was mainly directed at data scientists, as you can imagine, this is pretty appealing to security analysts.&lt;/p&gt;&#xA;&lt;p&gt;It doesn&amp;rsquo;t matter whether you&amp;rsquo;re a threat hunter, or a forensic analysis - collecting artefacts from multiple sources, and correlating them is a pretty common process. Jupyter notebooks allow us to do this, record the results and potentially manipulate our data to extrapolate additional information.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Python Debugging with Decorators</title>
      <link>https://shadow.engineering/posts/python_debugging_with_decorators/</link>
      <pubDate>Fri, 06 Nov 2020 11:30:03 +0000</pubDate>
      
      <guid>https://shadow.engineering/posts/python_debugging_with_decorators/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Decorators&#xA;    &lt;div id=&#34;decorators&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#decorators&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Often times while writing python code you may encounter a logical error, one that won&amp;rsquo;t be caught in compilation or execution, but rather during run time. Perhaps something didn&amp;rsquo;t execute or return as expected, or maybe a function executed and returned the anticipated result, but took an astounding long time to do it.&lt;/p&gt;&#xA;&lt;p&gt;Test driven development will catch these kind of issues as we work, but traditionally a lot of people will just throw a whole lot of  &lt;code&gt;print&lt;/code&gt; statements throughout their code. This could create more issues that we&amp;rsquo;re fixing.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
