<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Joseph Curtin</title>
    <link rel="self" type="application/atom+xml" href="https://jbcurtin.io/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://jbcurtin.io"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-06-29T00:00:00+00:00</updated>
    <id>https://jbcurtin.io/atom.xml</id>
    <entry xml:lang="en">
        <title>The Scientists</title>
        <published>2026-06-29T00:00:00+00:00</published>
        <updated>2026-06-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/the-scientists/"/>
        <id>https://jbcurtin.io/philosophy/the-scientists/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/the-scientists/">&lt;p&gt;Science, whether we want to be able to recognize it or not. Requires love and patience to do correctly. If we don&#x27;t have that, then we suffer and struggle to make the right connections. I believe this to be the sole deciding factor for useful science outside of topics around quality checking the work, verification, and replicating results.&lt;&#x2F;p&gt;
&lt;p&gt;I didn&#x27;t happen by chance into Energy Work. I science&#x27;d myself into it. It&#x27;s really the only way I can describe the !@#$, because, well. We just don&#x27;t have language for it yet. If we did, this wouldn&#x27;t, the travesties and trials, I had to endure over the years, would not have happened.&lt;&#x2F;p&gt;
&lt;p&gt;Attachment Theory is part of the way there. It&#x27;s unfinished though.&lt;&#x2F;p&gt;
&lt;p&gt;Before science could be observed, I had to test The Scientists.&lt;&#x2F;p&gt;
&lt;p&gt;Step one was to figure out the quality of The Scientists. Evaluating their merits and integrity without them knowing what I was doing, was probably the hardest part of all this. The retrospection on my end was nessicary because at the end of the day, I didn&#x27;t have any idea who or what was causing alterations to my life. I only knew that it was happening and happening in a way that wasn&#x27;t thoroughly explained to me. Yet, there was an obvious pattern I couldn&#x27;t look past.&lt;&#x2F;p&gt;
&lt;p&gt;Furthermore, if The Scientists were complete shit bags, I wouldn&#x27;t want to learn from them. Today, I think The Scientists are having trouble reaching the autistic community in a way were we can accept. The general resentment we have for scientists, is well. Hard to talk about.&lt;&#x2F;p&gt;
&lt;p&gt;We can&#x27;t exactly do without scientists. At the same time, we absolutely need science. It&#x27;s one of the few institutions that has humility baked right into the culture. Which I personally resonate with. Social Justice can&#x27;t exactly continue in the framework of good vs bad either. The concept needs to evolve beyond our limited understanding of what we perceive to be good and bad, into what we perceive.&lt;&#x2F;p&gt;
&lt;p&gt;Which makes talking about emotions hard, and I think is the primary driver why neurotypicals think autistic types are to literal. You all can slide by on emotional interactions a lot more seamlessly than us. There are parts if our emotional lives that are largely ignored because we don&#x27;t get exposed to other autistics as often.&lt;&#x2F;p&gt;
&lt;p&gt;When we finally get exposed. Its often intense. Emotional regulation requires iteration because it often starts from nothing. Imagine having the mindset of a 5 year old, and not being aware of it, then all of a sudden you get hyper developed. Its not fun.&lt;&#x2F;p&gt;
&lt;p&gt;I personally think, truly bad people are lazy and are repetitively negligent. At the same time, trying to identify solid qualifiers for progressive and degradation is probably one of the hardest things to do between autistic and neurotypical types.&lt;&#x2F;p&gt;
&lt;p&gt;Assuming all nuerotypes act virtuously, our communication can sometimes hurt each another at the same moment where we just want to feel relief and share it. Turns out, our similarities within our identities is the critical factor that makes empathy possible between nuerodivergent minds.&lt;&#x2F;p&gt;
&lt;p&gt;What a journey.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s get one thing clear, if I wasn&#x27;t identifying as an Energy Worker, I&#x27;d identify as a scientist. Unfortunately, I feel i have been gate kept in a way were it&#x27;ll take me years to become the type of scientist I&#x27;d like to be.&lt;&#x2F;p&gt;
&lt;p&gt;First I had to figure out the whole college thing. Then I had to figure out the whole career thing to support my departure from and reapplication back into academia. Then I had to figure out why it felt like the whole world was working against me.&lt;&#x2F;p&gt;
&lt;p&gt;Now I just yell at the gods like a crazy person. It&#x27;s fun.&lt;&#x2F;p&gt;
&lt;p&gt;Everything might seem like a house of cards. The reality is, our psyche, as animals, as humans, are so resilient, than even learning about a reality such as mine wouldn&#x27;t lead to a psychotic break. It&#x27;s safe to assume that given the majority of effort is focused in the right direction, when we become aware of a staggering truth. It is nothing more than a foot note.&lt;&#x2F;p&gt;
&lt;p&gt;For me, it was undeniable assurances. I didn&#x27;t bite back. I chose to take it on the cheek instead.&lt;&#x2F;p&gt;
&lt;p&gt;After the event, I actually was ready to walk away from everything. Then I was stuck with yet another crazy person. I mean seriously. What and why and how would that happen so often?&lt;&#x2F;p&gt;
&lt;p&gt;We have to get used to building the airplane while flying now. Here are the basic building blocks.&lt;&#x2F;p&gt;
&lt;p&gt;The Scientists trying to hold me up, kept disqualifying me when I wasn&#x27;t even aware of what was happening. All I wanted to do was play video games and read books. However, they wanted me to step up and be more than who I was. Problem was, when I was pushed. Nobody wanted to do anything with me. Here I was, ready to learn, and absolutely nobody was around to learn from me. The lack of validation alone made me think that everything I put time into, was a waste if time. As it went on, people would often talk down to me as if I was missing something. However, the people who pushed me into this state did it without any intention of ever continuing contact with me. Took me a bit to come to terms with that.&lt;&#x2F;p&gt;
&lt;p&gt;That is how the apparatus I found myself within was designed. It works, for the majority. I&#x27;m simply an under represented minority within a collection of systems designed to empower low performers.&lt;&#x2F;p&gt;
&lt;p&gt;What they got wrong, was I wanted to be left alone. My freewill was engaged in a way where I needed isolation for optimal mental health. Rewiring myself into something else took years of intense focus.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out my interpretation wasn&#x27;t wrong. What went wrong was, I couldn&#x27;t imagine the reality. The subversion used with me to &quot;wake&quot; me up. It never worked because I was never asleep. My autism was always engaged and because I was completely oblivious, it went on for a long time without me noticing. It wasn&#x27;t until someone made a mistake and tried to manipulate me in such an obtuse way, did I start to question what I was caught up in.&lt;&#x2F;p&gt;
&lt;p&gt;I was actually quite happy ignoring you all until.. well, you know. We&#x27;ve hashed that enough.&lt;&#x2F;p&gt;
&lt;p&gt;What do you do when the autistic neurodivergent boundaries aren&#x27;t as clear? When nuerotypical boundaries are more solidified in the mainstream?&lt;&#x2F;p&gt;
&lt;p&gt;What prompted this decade long study of human communication on my side? An E-mail from someone calling me a terrible person.&lt;&#x2F;p&gt;
&lt;p&gt;The time that email came across to my inbox, this individual had already been attacking my language and word usage. Trying to institute the utilization of the Chicago Manual of Style into my software documentation. This individual was already apt at communication, but was not autistic. Myself, trying to keep a positive and constructive attitude during the exchange of emails, I attempted to change the way I wrote emails to become more descriptive. This inadvertently increased the amount of discourse between us and lead to more cruft in our emails. Regardless of the quality of email I submitted, my correspondent continued to become more and more upset with me and I couldn&#x27;t figure out why.&lt;&#x2F;p&gt;
&lt;p&gt;This someone, was someone I cared for deeply. Who supported me and allied himself with me. For him to turn on me, it didn&#x27;t make sense because I didn&#x27;t do anything to warrant a harmful deed from his side. Or so, I thought.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out, when you listen to someone. You have to understand what they mean to say to you for them to not be emotional in a way that degrades communication. You can&#x27;t just accept what they say and incorporate it. You have to validate it so that they feel you have heard them. Otherwise they will turn on you the moment it doesn&#x27;t make sense to them. This naturally reduces the entropy in the conversations.&lt;&#x2F;p&gt;
&lt;p&gt;This is the key to mindfully combating ADHD like symptoms and moving away from dependency on medication. The more thoughtfulness you put into a relationship, the higher quality the relationship will become. By thoughtfulness, I mean the ability to validate and move with the person you&#x27;re talking with. This is something that isn&#x27;t taught to everyone, a majority of the population learns how to do this inherently.&lt;&#x2F;p&gt;
&lt;p&gt;This is an element associated with conformity to a social group. This is also the primary thing we autistic types run up against when trying to navigate social situations. When the rules change suddenly, and without our notice. We tend to emulate a response and this is where our Autistic Mask can become misaligned with the expectations of reality. Which could lead to, at worst, hopefully, a psychotic break.&lt;&#x2F;p&gt;
&lt;p&gt;I was never so fortunate.&lt;&#x2F;p&gt;
&lt;p&gt;I observed in retrospect, my friend, my correspondent, was unconsciously preventing himself from suffering a psychotic break due to the stress he was put under. I wasn&#x27;t aware of his stress levels at the time, but his attempt to tighten the communication with me was him trying to re-establish his equilibrium and trust in our relationship. However I was unable to provide the correct types of responses to him and the relationship continued to degrade. It wasn&#x27;t his fault, and it wasn&#x27;t my fault. He would eventually committed the Breach of Trust. My response was to terminate the contract. We haven&#x27;t spoken since. I miss him; I don&#x27;t know how I would feel talking with him today. After the shit storm of events that spawned as a result of it.&lt;&#x2F;p&gt;
&lt;p&gt;Luckily we had good friends that supported us both through the break.&lt;&#x2F;p&gt;
&lt;p&gt;Over the a couple months after the break, in my isolation. I would heal myself. Mentally and physically. People like to call this Rest and Relaxation, for me, I was getting out and talking to people. I was having trouble finding traction in the conversations and it felt like a similar situation between my friend and I had. I chose to disengage before anything negative would occur.&lt;&#x2F;p&gt;
&lt;p&gt;This reaction is a trauma response, and the final blow that snaps the Autistic Mask into an unconscious state. The Autistic Mask sits somewhere between belief and logic, super-ego and ego. It&#x27;s not uncommon for us to believe we&#x27;re doing the right thing. What I mean by this, is that sometimes we need to navigate on belief and sometimes we need to navigate with just logic. The lack of ability when it comes to traversing the back and fourth is what limits our potential. This isn&#x27;t unique to autism, but we autistics more often throw things such as philosophy out the window because our belief structure is almost non-existent by the time we reach adulthood.&lt;&#x2F;p&gt;
&lt;p&gt;We naturally think with skepticism. Which allows us to build our reasoning and ethical guidance. The drawback though, is our beliefs are what model and settle our emotional intelligence. The injustices done to us, we sometimes feel we have to accept. Which can lead to logic faults such as autistic supremacy. If we nourish one side of our mental capacity in favor of something else. We won&#x27;t be able to check ourselves and this is what leads to autistic burnout.&lt;&#x2F;p&gt;
&lt;p&gt;When we suddenly meet someone and its a breath of fresh air or a smack in the face. Something shifts in our Autistic Mask that we&#x27;re unaware of. We all have felt this before, how one little chance encounter can lead to detrimental effects in our daily routine. Each and every one of our autistic peers are scared shitless about our routine being disrupted.&lt;&#x2F;p&gt;
&lt;p&gt;This is the primary reason we avoid each other and it&#x27;s completely unconscious. We naturally become used to neurotypical thought patterns and when we&#x27;re unaware of our autistic thought patterns, they are often characterized as negative behavior patterns. This is why anger is important, it provides a sense of self awareness by invoking caution in ourselves and our conversationalists. It&#x27;s step one to becoming more mindful and protecting ourselves.&lt;&#x2F;p&gt;
&lt;p&gt;We often think anger is destructive and verbose. It&#x27;s not, it&#x27;s the primary emotion we need learn more about and not just avoid it. Careless anger is negligent, but tempered anger is powerful.&lt;&#x2F;p&gt;
&lt;p&gt;It turns out if we flip the insecurity of someone being angry with us into an expectation, everything just starts working between autistic types. If we mindfully push ourselves into that chancy situation. We have more control over the outcome. Our Autistic Mask is already pulling us in that direction, if we don&#x27;t pay attention to it or if we pull back from it. It becomes scary for us and this leads to PTSD. If however, we lean into it. It changes everything. We suddenly start exercising our freewill and our emotional responses become logical decisions and we naturally build more emotional intelligence. We turn our serendipitous mistakes into negligent mistakes and we learn how to become less negligent through this process.&lt;&#x2F;p&gt;
&lt;p&gt;There are people watching out for us and willing to give us passes on anything we learn a lesson from. The problem with my version of autism, is that I was used to people attacking me, at least it felt like I was being attacked. Than I accepted it as a way of life and this is what I had to reverse. People just want to connect; and sometimes they suck at it.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;re all ignorant. As leaders in the autistic community, its up to each and everyone of us to share our struggles in a way that doesn&#x27;t involve negative down casting of other groups.&lt;&#x2F;p&gt;
&lt;p&gt;I personally gravitated towards software engineering because it can be a creative outlet. Inspirational writers gravitate towards writing because they love their work, for reasons I wish I could properly reiterate. The same is true for pretty much ever other profession out there. We can always find a way to reinvent ourselves.&lt;&#x2F;p&gt;
&lt;p&gt;The big question: What is it like transitioning from non-verbal?&lt;&#x2F;p&gt;
&lt;p&gt;It is explosive. The first time around, I was scared shitless. Well, actually, there was plenty of shit, but not inside me. Literally diarrhea of the mouth. Shit everywhere, and that was by design because I wanted to be left the alone. I was peer pressured into talking to people and I didn&#x27;t have adequate qualifies to pick and choose the types of people I wanted to talk to.&lt;&#x2F;p&gt;
&lt;p&gt;You see, I was conditioned out of standing up for myself. I was conditioned out of being a self image that I would have enjoyed. I accepted that everyone should come first and I come last. That didn&#x27;t happen through people, this happened through life. I noticed a more timid approach to social dynamics was ideal for me. The sudden peer pressure I felt manifested into me. While never wanting to speak up and stand up for my own rights. Was to much for me. I was never given example, and I was judged harshly for it. Since elementary school I could see the variance in decision making. Since way before anyone willfully got involved. Which is how I determined forgiveness was the best approach.&lt;&#x2F;p&gt;
&lt;p&gt;I was not just a silent victim, I was a victim that had no sense of self empowerment and a victim where my very rescuers had no idea how to empower me.&lt;&#x2F;p&gt;
&lt;p&gt;And they tried. Throughout my life, they would come and go. Only having the capacity to prevent diaster. I think, deep down, they hoped I would see that. Once I had enough life experience to see the difference between, well. I&#x27;ll leave that for another day. If my rescuers, the public servants, had a language to empower me. They would have used it. Luckily this was one of the first things I noticed. I noticed they were desperately struggling to reach me.&lt;&#x2F;p&gt;
&lt;p&gt;Relentless psychological attacks towards me, one after another, they empowered my peers to feel comfortable with me to the point where they were no longer afraid to just talk to me. I became so mentally strong, that I was suddenly in a position of psychological power over my peers and I started having to make mindful decisions to yield my power in a way that didn&#x27;t intimidate anyone.&lt;&#x2F;p&gt;
&lt;p&gt;I diligently decided when to show my abilities at opportune times which allowed me to show a very specific pattern of working towards improvement. While also protecting my autistic peers. I did it in a way that conserved the most energy as possible, because I had to spend a majority of my time healing the general psychological damage I took just talking with my nuerotypical peers.&lt;&#x2F;p&gt;
&lt;p&gt;This is where my abilities as an Energy Worker became essential. It allowed me to self heal and develop abstractions to push myself in a way that matches the rigor of my nuerotypical peers. To them, it felt normal, as they are part of the rat race they choose to be apart of. To me, it was excruciating, but it was not without purpose. I pushed myself to pass their tests and get checked out by them to set and match the expectation.&lt;&#x2F;p&gt;
&lt;p&gt;The unfortunate reality of the divide between nuerotypical and autism is immense. If we start off from a disadvantaged position, there is no support structure autistic types can cling onto outside of the mental health industry to help us up. There is no clear example, because a vast majority of us are already marginalized.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s easier to work within the system, than it is to improve the system. Most people, including myself, don&#x27;t wake up everyday with intent to change things. There is enough general support provided by society to help us find our respective niches in life and be happy.&lt;&#x2F;p&gt;
&lt;p&gt;Sometimes when nuerotypical types communicate with autistic types. Miscommunication is inevitable if the neurotypical type is an authority figure. Since going through that experience with my correspondent, I have seen similar breaks in relationships we other autistic types such as myself. I personally know someone who was so desperate to compete with his brother, he gave himself and his family neurosis. It was and is heart breaking. The damage he did to his own children without even knowing it. It&#x27;s painful to think about.&lt;&#x2F;p&gt;
&lt;p&gt;Still, from that example I was able to see a irreversible pitfall of pushing myself to hard. Knowing about this danger, I bunkered down and protected myself through Energy Work. Spending years, crafting and measuring and recrafting and realigning mental boundaries within myself. Protecting others from what I had to endure. Hardening each alteration to my mind through re-exposure. Preventing the degradation of my personal life, I would lock myself away from my family to protect them from the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;DtWaDLO2qUc?si=8c0WI7dYnbQjRpxD&quot;&gt;Ripple Effect&lt;&#x2F;a&gt; of having to endure the onslaught of mental patterns not natural to my mind, my autistic mind.&lt;&#x2F;p&gt;
&lt;p&gt;I can now feel the difference between someone who is nuerotypical and someone who is not. Furthermore, I can feel the difference of three distinct nuerotypes. Two distinctly different nuerotypical types, and autism.&lt;&#x2F;p&gt;
&lt;p&gt;I did it. I finally achieved the ability to communicate unilaterally between autism and nuerotypical. So much so, my approach breams the right tone, usage, command, and assertion when nessicary. There is a drawback though, I&#x27;m not allowed to be less than who I am any longer. By broadcasting my integrity, I must follow strict guidelines and therefore I must share these guidelines with the public servants. Not because I will hold you to them, but because you must learn these guidelines. These ethical guidelines will help you wake other non-verbals up and protect them from what happened to me. From what you tried to prevent, but inevitably created by mistake, in my life.&lt;&#x2F;p&gt;
&lt;p&gt;First and foremost, you must cultivate free will. The only difference between someone with freewill and someone who believes there isn&#x27;t free will. Is someone who takes responsibility for their actions vs someone ready to make an excuse for themselves.&lt;&#x2F;p&gt;
&lt;p&gt;Accountability can only be taught after enough exposure to following our own interests has been accomplished. You got lucky with me, when this concept was first introduced to me. I was compiling a brand new behavior matrix. The ratification of this behavior came later, only because I had to put the shitty factors of my life together in retrospect.&lt;&#x2F;p&gt;
&lt;p&gt;You don&#x27;t need to validate what the non-verbal says, instead, if you repeat back to them what they&#x27;ve said, to you, to them, immediately. It empowers them. There is more to this, you have to think with intent to empower them and you can&#x27;t fake it. You have to Totoro it and imbue belief into them. Over and over and over and over and never let it get old for yourself. There will be moments where the non-verbal irritates you, and if you precisely time it, even if you say the wrong thing. You won&#x27;t do any harm. They will use what you give them. Don&#x27;t be afraid.&lt;&#x2F;p&gt;
&lt;p&gt;For us, logic rains supreme and our emotions come second. We&#x27;ll be able to measure it appropriately when the time comes. However, if you&#x27;re a piece of shit. Watch your back.&lt;&#x2F;p&gt;
&lt;p&gt;The core problem I ran into with The Scientists is they felt the need to cross check against other relationships. Those cross checks would come in a varity of forms. This is where this apparatus fails to function for an individual such as myself and turns into a platform of ADHD for others like myself. My unconscious ended up preventing the relationship from forming as a result when one cross check went to far. It would take me years to find the answer as to why I was naturally adverse to talking with people. The fact that I&#x27;m mindful of the approach that is taken, is the main reason why I can adequately defend myself from degradation today. A strategy to protect others is not implicitly designed into the processes and therefore the unwitting participates are naturally marginalized. Today, I&#x27;ll just bring attention to it. I recommend observing this as a correction.&lt;&#x2F;p&gt;
&lt;p&gt;The cross-checking is not a thought pattern that is native to autistic Individuals such as myself. I only learned about the thought pattern through chance from openly interacting with someone rather than closing myself off. For the first time in my life, I opened myself up and let out how I really felt about things rather than keeping everything to myself. I also spent that time, encouraging someone to become more than they are. They however, decided to use the relationship to try and teach me about psychology rather than make sense of my feedback. My first attempt to communicate upstream was shuttered when he directed me to a website teaching me the archetypes of Carl Jung psychology.&lt;&#x2F;p&gt;
&lt;p&gt;I tried build up the relationship, believing he was honest with his intentions towards me and I validated his feelings and emotions.. so, at least I thought I had. Turns out, he was lying to me the entire time. He was following instructions from an authority I had long since forgotten about. I eventually accepted, if I was to fully engage my freewill and prevent degradation, I&#x27;ll have to get punchy. I started to develop an elaborate ethical code while still completely unaware of my autism. I wouldn&#x27;t role out these new behaviors for years. Not until I nailed the timing down.&lt;&#x2F;p&gt;
&lt;p&gt;There is a double edge blade when communicating as an autistic. Discord is the safest interaction as in simulated tension. Then, when real tension occurs, we can fall back onto the simulation tension as a baseline for knowing how things should be handled. This is essential for cross nuerotype communication. The tension naturally breeds caution and helps midigate anger. Preventing rapid decline and disruption to our collective psyches.&lt;&#x2F;p&gt;
&lt;p&gt;The Scientists like to call this structure. The problem is, the structure is not familiar to autistic types. I have already begun the process of teaching The Scientists a pattern they can use with other autistics elsewhere. It&#x27;ll take time to propagate, but as more and more people are exposed to the exact variance I&#x27;ve introduced. A steady improvement in mental health across the board will be noticed.&lt;&#x2F;p&gt;
&lt;p&gt;Remember, The Scientists need time to test these results with others and something as delicate as this requires a lot of patience. We&#x27;re building a global society here and one false step could spell disaster. If The Scientists used only my word as their seal of approval, it would be to much risk for them. They have protocols and methods in place to prevent degradation and we need to respect those checks first. They&#x27;re here to help, I&#x27;m just helping them figure out how to help us now, better.&lt;&#x2F;p&gt;
&lt;p&gt;Alterations to the flow of information within a group takes on an additional burden, because the public servants are required to operate in plain view and expose themselves to our peers and must represent themselves in a way where they either retain the influence or can adequately transfer the influence to someone else.&lt;&#x2F;p&gt;
&lt;p&gt;Implicitly creating an unnatural barrier that the unaware participant is restricted by. I first described this as a glass-ceiling, to which a heterosexual white male promptly replied: &quot;Are you a woman?&quot;&lt;&#x2F;p&gt;
&lt;p&gt;Time and time again, social justice indicators would be used against my whiteness to give my marginalized peers a step above me. It is the way our society is built, we support the less fortunate and the marginalized. White people are not the only group who feels this way. The black community likes to push white shame; I&#x27;ve seen the same pattern of shame happen in another country with a completely different groups of people. The utilization of white shame is nessicary to promote optimal mental health for our brothers and sisters of the black community. The resulting irony is, black autistics are even more marginalized than I am because I benefit from white privilege. Being pulled over by the cops, is not as big a fear for me as it would be for my black brothers and sisters within the autistic community.&lt;&#x2F;p&gt;
&lt;p&gt;Social Justice needs to move past redemption and righteousness. Autistic types will not benefit from these concepts because we don&#x27;t see the world in an adversarial context or puzzle. We naturally look at the world as a way to improve our abilities.&lt;&#x2F;p&gt;
&lt;p&gt;Communication between neurodivergence takes on a very specific pattern that requires an attunement of emotional intelligence. This includes coming to terms with our own limitations.&lt;&#x2F;p&gt;
&lt;p&gt;Moving forward.&lt;&#x2F;p&gt;
&lt;p&gt;Posting content like this regularly, is difficult. It requires me to disrupt my flow, but the benefits it brings, far outweighs the cost it takes to write these entries. I do not aspire to be a writer nor am I trained in academic writing yet. Therefore, it&#x27;ll be harder for me to clearly explain some concepts in uniform. Nevertheless, I&#x27;ll try. I however, won&#x27;t commit to writing on a schedule you&#x27;re accustomed to.&lt;&#x2F;p&gt;
&lt;p&gt;Now comes the fun part. I get to derive and iterate math to explain what I&#x27;ve found. It&#x27;ll take me years to learn and discover the correct math to write a proof. Please be patient. I&#x27;ll write occasionally throughout the years.&lt;&#x2F;p&gt;
&lt;p&gt;On the scale of things, society can wait another 10 years while I take the time I need to figure out the right way to communicate and integrate into society. Building a road for those like myself.&lt;&#x2F;p&gt;
&lt;p&gt;I was naturally marginalized using tongue and cheek, I didn&#x27;t have access to a corpus of words to hold me up and empower me. My only option was to become stronger and stronger and stronger until my metal would eventually be tested and I suddenly realized my strength was beyond their measure.&lt;&#x2F;p&gt;
&lt;p&gt;I was finally able to relax. Let&#x27;s take the pressure off the rest of the community now.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Narratives</title>
        <published>2026-06-22T00:00:00+00:00</published>
        <updated>2026-06-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/narratives/"/>
        <id>https://jbcurtin.io/philosophy/narratives/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/narratives/">&lt;p&gt;Autism is complex. Well, no, not really.&lt;&#x2F;p&gt;
&lt;p&gt;Not to us.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s just different, it&#x27;s unintuitive, to nuerotypicals.&lt;&#x2F;p&gt;
&lt;p&gt;As is, nuerotypical is unintuitive, to us.&lt;&#x2F;p&gt;
&lt;p&gt;Yet, we get along great, together.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been thinking for years about what a form of social justice would look like from within the autistic community. The empowerment of social justice is after all, a cornerstone for ourselves to define our collective identities.&lt;&#x2F;p&gt;
&lt;p&gt;The first aspect I thought through, there are those of us who have never been pegged with behavior problems. We&#x27;ve always done what we have believed to be right and that was enough for us to build a life. Woman benefit the most, but autistic males who benefit from this, tend to have more social issues than we care to admit.&lt;&#x2F;p&gt;
&lt;p&gt;I personally felt as if I had to let things pass by, accepting that things are the way they are. This isn&#x27;t unique to autism, but it feels more common to me. A travesty might occur if we become used to things passing by, and don&#x27;t realize we need to wake up from what we&#x27;ve become used to. On the other side, people with behavior issues are already marginalized and this is where the systematic approach to society starts to fail autistics more than our nuerotypical peers.&lt;&#x2F;p&gt;
&lt;p&gt;Nuerodivergence and convergence requires an intuitive aspect to understand. It can be taught, but the psychological boundaries are only available in different authority structures and rapid acclimation and reacclimation can have degenerative effects for our minds.&lt;&#x2F;p&gt;
&lt;p&gt;Assuming we have bioware and that bioware can be mathematically defined. Inferring structure of our bioware would be impossible without intense self introspection. Breaking it down to discrete units of operation, we have to start looking at our inputs and outputs of our whole body as a means of a measure to understand our place.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s best to start with transient phenomena. A shooting star. A potential love interest. A dreary dreadful. Or simply, a sorrow.&lt;&#x2F;p&gt;
&lt;p&gt;Words make this easy, as I can construct this sentence and you can derive meaning. If you subscribe to nuerocolonialism, you might have read that past sentence as: Words have many meanings.&lt;&#x2F;p&gt;
&lt;p&gt;Words do not have more than one meaning. There is a single sense to every word we hear, see, or speak. Looking for meaning behind the sentence, leaves you vulnerable to changing the interpretation of how you perceive realty.&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;re putting yourself at a disadvantage.&lt;&#x2F;p&gt;
&lt;p&gt;Narratives are different. How we tell our stories have always been culturally specific. The flow and cadence of facts and tails iterated in diction is sought as triumph directly associated with creativity, passion, and so much more. It is an exertion of effort into a brevity that makes sense to us, the reader.&lt;&#x2F;p&gt;
&lt;p&gt;That feeling of how a narrative intertwines is well, when you feel it. You know it. And it goes the other way, narratives written by nuerotypicals hail the same type of writing metrics, except, not to us.&lt;&#x2F;p&gt;
&lt;p&gt;This is where it becomes unintuitive. This is where the autistic community, even without talking to each other, just reading what we say to others, to ourselves, in conversation. We just feel it.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve created abstractions such as procedures, law, and process to cover the technical gaps in our communication. A shared effort to achieve a mutual goal. However, when it comes to defining our identities, we don&#x27;t yet have an example to draw from. Which leaves us with disagreement with concord. We have mixed feelings.&lt;&#x2F;p&gt;
&lt;p&gt;I believe this is the main reason why the autistic community strives to take control of the narrative of our neurodivergence. It&#x27;s a peacefilled and intentful action to begin changing the way people think about us as a community. Educating the populous is important for social justice to thrive. A nuerocolonialism in a single word, we could use, is to develop a philosophy.&lt;&#x2F;p&gt;
&lt;p&gt;There are those of us that will fight a philosophy, just because its philosophy. They have trouble understanding the philosophy drives ethical development of a society. Philosophy is at most, a pursuit of argument meant to highlight applicable social structure and at worst, a religion.&lt;&#x2F;p&gt;
&lt;p&gt;At the moment, because the majority of content is largely uncategorized when it comes to understanding if the author is autistic or neurotypical. We struggle to understand some content, while content that aligns with neurodivergence is initially, more common for us.&lt;&#x2F;p&gt;
&lt;p&gt;We don&#x27;t yet have clear indicators to identify autistic-coded or neurotypical-coded writers. However, we can easily identify autistic-coded characters in animation, movies, a series on TV or Netflix. Can nuerotypicals do the same for their neurodivergence?&lt;&#x2F;p&gt;
&lt;p&gt;We collectively need words with explicit meaning to logic ourselves throughout our lives. Providing us with a bedrock of familiarity and understanding. When then need narratives that align with our unique neurodivergent minds to nourish our minds and stimulate our conceptual growth.&lt;&#x2F;p&gt;
&lt;p&gt;For me, this came in the form of listening to my peer&#x27;s fumbles. It gave me a bedrock of stories to make better decisions for myself. The story teller, who went through a traumatic experience, was content with just having their story told and not repeated. I maintain their privacy and build an empathetic relationship with them.&lt;&#x2F;p&gt;
&lt;p&gt;We learn from our mistakes, collectively, when we accept our mutual fallibility.&lt;&#x2F;p&gt;
&lt;p&gt;Fables and stories written in an autistic narrative were just not available. I had to make due with what was available.&lt;&#x2F;p&gt;
&lt;p&gt;This is why we&#x27;re most commonly found online. Talking with others, sharing words, and enjoing feelings with each other in ways that go beyond words. neurotypicals enjoy this medium too, and video games create a system where we can accomplish something cooperatively or strive to compete against each other.&lt;&#x2F;p&gt;
&lt;p&gt;Games are the leading, binding, agent through which neurodivergence thrives. Games provide a system of which a fair game can be played among all participants. Video games, being the most prevalent of example for the socially awkward, recreational sports being more available to the mainstream. There is a natural divide here because of parent participation.&lt;&#x2F;p&gt;
&lt;p&gt;Neurocolonialism prevails in reality while the socially awkward struggle to understand the warmth of neurocolonialism. If we peak inside and peel a layer back, neurocolonialism has elements of authority, social justice, righteousness, shame, conformity, adherence, love, passion, joy, and so much more.&lt;&#x2F;p&gt;
&lt;p&gt;All aspects that are required to build a thriving and functioning society.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not advocating for a neocolonialism on neurocolonism. I&#x27;m simply describing it. It obviously works and we have to understand what works as is presented, in order to improve it.&lt;&#x2F;p&gt;
&lt;p&gt;How do we change a neurocolonialism into something less destructive?&lt;&#x2F;p&gt;
&lt;p&gt;We challenge it.&lt;&#x2F;p&gt;
&lt;p&gt;Writers are in constant competition with each other, yet they draw from their heart. It is the first boundary we much learn to transgress as we move from childhood into adulthood. The act of writing is a liberating experience. Expressing your inner most thoughts on a piece of paper to make a statement. Expressing you opinion and pushing it out there. You craft your identity with every word, sentence, paragraph. You&#x27;re corrected and your pushed and you defeat adversity by building your essay, your narrative, your story.&lt;&#x2F;p&gt;
&lt;p&gt;Deliberately writing out your intent and then following through with it, is powerful. It&#x27;s how you correct your life path. Even by writing it into a private dairy or notebook and never seeing it again. You flush and dump your emotions in the most healthy way possible.&lt;&#x2F;p&gt;
&lt;p&gt;..and then you move on.&lt;&#x2F;p&gt;
&lt;p&gt;Your narrative is a map to your brain patterns. It&#x27;s the most humble of fights. To fight with the gods, you must let the gods know you&#x27;re coming for them. Deception and subversion are elusive and clumsy. Narrative is bold, grand, and boastrieus. You announce yourself, as you are. As we are.&lt;&#x2F;p&gt;
&lt;p&gt;A declaration, a proclamation, an essay can be used to build a country. A narrative, can be used to build your identity.&lt;&#x2F;p&gt;
&lt;p&gt;Start small.&lt;&#x2F;p&gt;
&lt;p&gt;The current apex of the ideal autistic narrative includes an element of presumption and pedantism to it as it is a reflection of how we get along with our relative authorities. We focus more on the rules, because the in-between, the emotions, are constantly in flux beyond our relative human experience. Most, if not all of us, are used to living in bubbles around our monotropism. It keeps us safe. Helps use feel safe, from a long stressful day at work or school.&lt;&#x2F;p&gt;
&lt;p&gt;Neurotypicals would probably call monotropism, a set of interests or hobbies. But it&#x27;s so much more, it is a dysregulation of our lives and a re-regulation of our pursuits. The fact that we have been shamed for what we enjoy, is startling. Using science as a conduit to make argument about our own preferences is a passive approach to social justice.&lt;&#x2F;p&gt;
&lt;p&gt;The best kind, of subtle.&lt;&#x2F;p&gt;
&lt;p&gt;I personally prefer a little more attitude in my narratives. Using an active voice, provides me with imbuing my identity into the words you read. However, the way I govern myself with my relationships, is very passive, mostly non-transactional. I love to feeling of the push and pull of a conversation. I like to provide the converser with my opinion, and fully hear them. When I write, I fully share my opinion as if you&#x27;re an interested reader.&lt;&#x2F;p&gt;
&lt;p&gt;I personally prefer discord over discourse.&lt;&#x2F;p&gt;
&lt;p&gt;We often want to have things work out in a way that makes finite sense to us. This is the crux of the struggle within the autistic community. As we don&#x27;t currently have a clear example of what is possible with our neurodivergence. We&#x27;ve been supported over the years through various means. The added threat of persecution, which we collectively feel, limits our ability to challenge a misbehaving authority.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s easier to conform and collaborate until one of us, such as myself, is pushed to far. Our metal isn&#x27;t tested and there isn&#x27;t a clear picture of what we can endure or endeavor into doing as a result of the artificial stress.&lt;&#x2F;p&gt;
&lt;p&gt;Our society has transitioned from waging war into harboring peace. However, those influential emotions still exist within us and we need to find healthy ways to let our pride and aggression out. Our pride and aggression are key for us to build, because this is where our perseverance and our drive to protect the weak comes from.&lt;&#x2F;p&gt;
&lt;p&gt;If we have more people who can protect the weak. We&#x27;ll have more resources to strengthen the weak and in turn will become a more resilient society as a whole while we embrace each other.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out, it all starts with being nice to those who come behind and below us. When I talk about the hierarchical structure of psychology. It&#x27;s a minor focus on how we have built our society into a series of stacked beliefs and support networks to hold each other up. To empower each other.&lt;&#x2F;p&gt;
&lt;p&gt;When I say, I rather be an Aspie, it means two things. First, it is the most optimal behavior pattern-set that an authority understands. Second, it&#x27;s a knock at the change in definition of autism to include Aspies in the DSM 5 manual as autistic. A slight against an authority that took it up on themselves to refine a clinical definition, without considering the sociological aspects of a thriving culture that was already based in intelligence and aspirations to become more than what we are.&lt;&#x2F;p&gt;
&lt;p&gt;You destroyed a perfectly healthy identity for a majority of us.&lt;&#x2F;p&gt;
&lt;p&gt;By changing our words and redefining our identities. Scientists have chosen to marginalize an entire community, that was already having difficulty defining itself outside of our families, coworkers, and close friends.&lt;&#x2F;p&gt;
&lt;p&gt;You forced us to re-educate our peers..&lt;&#x2F;p&gt;
&lt;p&gt;..and that&#x27;s why we are challenging you for control over the narratives that make up our philosophical identities which govern our lives.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Forgiveness</title>
        <published>2026-06-17T00:00:00+00:00</published>
        <updated>2026-06-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/forbearance/"/>
        <id>https://jbcurtin.io/philosophy/forbearance/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/forbearance/">&lt;p&gt;The world runs on forgiveness.&lt;&#x2F;p&gt;
&lt;p&gt;We just have trouble framing it that way, because we don&#x27;t enter the day with the intent to do harm or the intent to feel harm. We enter the day with intent to do good and reach for goodness.&lt;&#x2F;p&gt;
&lt;p&gt;We build ourselves up strong to support each other. Even forgiveness, when improperly timed, could be detrimental.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;re taught powerful concepts in our schooling, but what&#x27;s missing is the ability to determine and become more comfortable with the unknown of how we feel about things. Being my version of autistic, I am marginally classified as disabled, but I&#x27;m also seen as a privileged individual because of my skin color. Having the ability to prevent myself from being scared, is probably one of the more critical aspects to how I live every day. I&#x27;m constantly pushed out of my comfort zone. Unable to stop, not because I can&#x27;t or don&#x27;t want to. Because the momentum of living at the apex of what we encounter as your peak existence as a species requires us to keep moving forward.&lt;&#x2F;p&gt;
&lt;p&gt;The only thing missing to include autistics like me, are words to help up strong with our nuerotypical peers who want, but don&#x27;t know how to support us.&lt;&#x2F;p&gt;
&lt;p&gt;I long for the days were I can properly show remorse for the trials I&#x27;ve had to endure from the impossible expectations projected upon me by my nuerotypical peers. I do see they struggle too, but they struggle differently than I, than us.&lt;&#x2F;p&gt;
&lt;p&gt;I have determined that for mental health to be properly addressed, we need to be coached and lead by those of us that align to our nuerotypes. Autistic leader to autistic leader and nuerotypical leader to nuerotypical leader.&lt;&#x2F;p&gt;
&lt;p&gt;Our language has evolved to include minorities and subjugated communities, but it hasn&#x27;t yet been adapted to our unique nuerodivergent types.&lt;&#x2F;p&gt;
&lt;p&gt;For example, someone who is a fantastic boss might regard me as a lost cause because I understand him. However, because he is far removed from my day to day. I cannot adequately validate his emotional state as an employee, as a leader, a mentor.&lt;&#x2F;p&gt;
&lt;p&gt;Instead, time and time again, I have gotten used to bosses who have paid no attention to me and I&#x27;ve developed the ability to govern myself and create value. However, because this fantastic boss thinks and speaks in neurocolonialisms, I cannot connect with him. As his attempts to connect with me are, at least by me, interpreted as sincerity, but also contain an element of passive aggressive communication.&lt;&#x2F;p&gt;
&lt;p&gt;Be more like me, or I&#x27;ll drop you.&lt;&#x2F;p&gt;
&lt;p&gt;To which my response is, unapologetically autistic.&lt;&#x2F;p&gt;
&lt;p&gt;Regardless of how I presented myself over the past 10 years, people have constantly put me down every time I tried to take a step up. Reminding me of how I don&#x27;t fit into their world view and not showing a capacity that their world view is capable to expand.&lt;&#x2F;p&gt;
&lt;p&gt;It turns out that when people were putting me down, they were attempting to optimize my approach. They identified that I was struggling, at least to them, and due to my non-verbalism, I didn&#x27;t have adequate communication skills to accept genuinely helpful commentary.&lt;&#x2F;p&gt;
&lt;p&gt;You see, my non-verbalism was caused by a negative feedback loop from my childhood. I would say something, and a response returned was generally uncomfortable. My mind became used to those feedback patterns and I felt as if I couldn&#x27;t break out of them.&lt;&#x2F;p&gt;
&lt;p&gt;An internal dialogue emerged, &quot;look for patterns.&quot; Pretty vague for one of my thought patterns. In retrospect, this might have been something someone said to me and I had completely forgotten. As I read more, I realized that it was probably derived from how Sigmund Freud attempted to describe psychical processes in ones mind. Me being a software engineer, I adhered to a series of while loops as a valid abstraction for a number of years.&lt;&#x2F;p&gt;
&lt;p&gt;The reality is, thought is, well. Indefinable. Only when you make conscious effort to access thought, can you make something distinctly understandable of it.&lt;&#x2F;p&gt;
&lt;p&gt;This is what separates autistic from nuerotypical types. The way we transform thought into conscious-abstraction is distinctly different. The way we collect information is also different.&lt;&#x2F;p&gt;
&lt;p&gt;Naturally, this would marginalize me, because my autistic peers were not part of the same double blind study I was and couldn&#x27;t benefit from it like I had. This naturally separated me from my brothers and sisters of the autistic community and thrust me into a nuerotypical-dominated playhouse.&lt;&#x2F;p&gt;
&lt;p&gt;It wasn&#x27;t fun.&lt;&#x2F;p&gt;
&lt;p&gt;I was either left entirely alone or bullied into panic attacks. Either way, self imposed isolation was the only recourse I would have for decades.&lt;&#x2F;p&gt;
&lt;p&gt;The the group of behavior scientists which decided to enlighten my family with their findings, published in peer reviewed in academia, inadvertently created an adversarial environment for my mother to exist within. Not only in our local community, but also in our church community, elementary and middle school community, and even within our extended family. In every environment my mother existed within, she had trouble finding allies to validate, empower, understand, nor even be nice to her.&lt;&#x2F;p&gt;
&lt;p&gt;She too is autistic, and dreadfully unaware of it. Also part of the boomer generation, which had a different vernacular. Millennials would be the first generation to openly highlight, be shamed into, and combat the pitfalls of nuerocolonialism.&lt;&#x2F;p&gt;
&lt;p&gt;The stories my siblings told me over the years about each one of the communities we belonged to would turn on our mother, our family. My mother would be forced to live her life, desperate to make it to the next day, because the only person she could rely on would be her own mother who was also uncertain about her own daughter&#x27;s capability as a mother, or her husband who had his own issues with parental abuse.&lt;&#x2F;p&gt;
&lt;p&gt;Not exactly a warm environment, for any of us.&lt;&#x2F;p&gt;
&lt;p&gt;Still, my mother prevailed. Like many others marginalized by a community, regardless of the demographic. She found herself interested in Energy Work. Her first endeavor was to study Reiki, and how that went for her, you&#x27;ll have to ask her. What I noticed, was that my father was skeptical, but he didn&#x27;t say anything to negate it. I later concluded that he might have accepted it because he didn&#x27;t know much about it. At least, not enough to determine if it was beneficial or not. By this point, she was already a licensed message therapist and had a steady source of clients. She quickly moved on from Reiki, into Arch, and eventually Bowen. The people she would practice one would be family members and friends willing to volunteer for a free session.&lt;&#x2F;p&gt;
&lt;p&gt;The benefits were immediately noticeable. Every person who engaged with her as a recipient of her healing practice would come out of it with something that could only be described as a placebo effect. It would last for days, sometimes weeks, or months. Some people walked away with a better ability to walk or play with their kids while others would report a reduction in chronic pain.&lt;&#x2F;p&gt;
&lt;p&gt;For me, my mother immediately noticed that my general anxiety level dropped to nothing. At the time, I was a non-verbal, so I heard the words, but I didn&#x27;t know which emotion anxiety was. All I felt was calm, which was a relief. She would then go in to perform Bowen Protocols on me for years.&lt;&#x2F;p&gt;
&lt;p&gt;My school work improved and my ability to focus came back. Around the time I was learning how to play soccer, and even I noticed I played better. I wanted to play more competitively, but well. Circumstances.&lt;&#x2F;p&gt;
&lt;p&gt;Over the years, my mother had built a support structure for her and her family in the most unlikely of places. The alternative healing community, a local community that prefers to remain hidden because to much attention would change the way they are able to do their work.&lt;&#x2F;p&gt;
&lt;p&gt;From within the communities we were ostracized from, she had two friends that were able to transcend the negative commentary and she was able to develop deep an fulfilling friendships that even her children would benefit from.&lt;&#x2F;p&gt;
&lt;p&gt;Not me.&lt;&#x2F;p&gt;
&lt;p&gt;As I start practicing Energy Work on my own, I quickly came up against a limiting factor. People just don&#x27;t accept it, and are skeptical. Therefore having a conversation about it, an unproven pseudo science, would be futile and peg me as someone who doesn&#x27;t know what their talking about. For the following two reasons, first, I never received official training. I only know what I felt and and I practiced while in isolation. Secondly, my life is harder than any one alternative healer would be able to tolerate.&lt;&#x2F;p&gt;
&lt;p&gt;I was shoved into a nuerotypical playhouse against my knowledge and will. I turned to my alternative healing foundation as a sense of self preservation. The last resort I had, before seriously contemplating suicide.&lt;&#x2F;p&gt;
&lt;p&gt;The ramifications of suicide would have been gargantuan because of the life I was forced into. These nuerotypicals were trying to interpret my behavior, randomly at best, and try to provide me with the best kind of future. Themselves, feeling indebted to me, for such a devastating mistake early on in my childhood. They would constantly get involved and make alterations to my life. Often when I would just become comfortable or appropriately acclimate to a new environment.&lt;&#x2F;p&gt;
&lt;p&gt;The moment I felt safe. Things would change, again, again, again, and again. This would go on for decades.&lt;&#x2F;p&gt;
&lt;p&gt;The emergence of my emotions within a community would always be the deciding factor. As community after community tried to get along with me, they&#x27;d be coached into accepting me. Eventually, like any human, I would start letting out what I felt. Sometimes as empathy or resentment. Of the sort, can be interpreted in multiple ways depending on the polarity of the relationship that knocked my feels.&lt;&#x2F;p&gt;
&lt;p&gt;Contentment, happiness, sorrow, sadness, hope, pride, fear, anger, amusement, disgust.&lt;&#x2F;p&gt;
&lt;p&gt;Sometimes they&#x27;d trigger me intentionally.&lt;&#x2F;p&gt;
&lt;p&gt;In a natural environment, where I would attach to my peers in a healthy manor. I would be able to safely examine these feelings from beginning to end. However, because of the artificial apparatus, the moment I would exhibit an emotion. I would be moved to another person or to another group, sometimes as soon as the next day.&lt;&#x2F;p&gt;
&lt;p&gt;This is how my non-verbalism became ADHD.&lt;&#x2F;p&gt;
&lt;p&gt;Yellow cake was a stupid fucking test. In that same test. I also noticed that the scientists attempted to empower me. As much as it hurt me, at that time, to be cut away from people I grow immensely fond of. I decided to focus on the silver lining, that there was someone looking out for me.&lt;&#x2F;p&gt;
&lt;p&gt;That was the canary in the coal mine that made this all possible. That made it possible for me to feel comfortable to get to this stage, to tell you what it&#x27;s like, for someone like me, someone like us(yet to be defined).&lt;&#x2F;p&gt;
&lt;p&gt;Having a sense of comfort is critical.&lt;&#x2F;p&gt;
&lt;p&gt;A valid question would be, why would I wait for so long to start talking about this?&lt;&#x2F;p&gt;
&lt;p&gt;The answer is two fold. First, I had to be certain that my empirical observations lined up with reality. The second reason is, if I started highlighting these faults, before having the scientists feel assured, that we&#x27;re on the right path. Nothing of what I would say here, would hold any merit because I would be just be another person complaining about a machine I didn&#x27;t understand.&lt;&#x2F;p&gt;
&lt;p&gt;I chose to collaborate rather than openly criticize, because together we&#x27;ll be able to figure this out, but separated, it would be hard to replicate a result, such as mine. All be it a very painful experience; my hope is that the pain isn&#x27;t as bad for the next person because my feedback will help improve it for others caught up in a similar nuerotypical playhouse, like I was.&lt;&#x2F;p&gt;
&lt;p&gt;Regardless of good intentions, the challenge you gave me was still within my grasp to come back from. The problem was, that I had already attempted to do this several times before and was cut down. The only thing that&#x27;s changed, is that I allowed you to cut me down, so I can tell you that it hurts.&lt;&#x2F;p&gt;
&lt;p&gt;Now we have a foundation. Let&#x27;s build.&lt;&#x2F;p&gt;
&lt;p&gt;The scientists just didn&#x27;t know it was hurting me until after they saw the result of it sometimes. They even started to justify and rationalize the results, in an attempt to, I guessing here, make themselves feel better. After all, so far removed, how can they really know how I really felt if all my relationships they&#x27;ve engineered were imperfect for me? It&#x27;s not okay, but it&#x27;ll be okay. I can forgive them for these mistakes.&lt;&#x2F;p&gt;
&lt;p&gt;Psychology is an active science that requires constant refinement. The landscape is largely dominated by nuerocolonialism because that is the paradigm it requires. Good vs bad, based on a humans perspective, is open to fallibility while an omnipotent entity, we would have to waste our time questioning fallibility.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve learned from software engineering that at some point in time, we have to ship a feature even if we don&#x27;t think it&#x27;s ready. The same is true for psychology, when a theory is complete enough, it must be tested and the only way to test psychology is to disperse peer reviewed content into the mainstream and see how the mainstream reacts.&lt;&#x2F;p&gt;
&lt;p&gt;This is why Autism Speaks is bottom of the barrel, but at the same time, remains strong a strong influence. It made a mistake, but because we argued with that mistake, we now know not to make that same mistake again.&lt;&#x2F;p&gt;
&lt;p&gt;We learn from our mistakes, or we&#x27;re doomed to repeat our mistakes. Autism Speaks, SAGE, and other journals are learning from their mistakes. Maybe slower than we&#x27;d like, but they&#x27;re making the effort. I applaud their effort.&lt;&#x2F;p&gt;
&lt;p&gt;Hate to say it, but the narrative they put fourth is very constructive. However, also very demeaning. ABA is a hit or miss therapy, as the method is cold and devoid of emotions. So when I say, if our children are going to be inundated with academic expectations, enforced by the parents. Figure out a way for the parents to do it right, with warmer emotions. Don&#x27;t just share the information and try to clean up your mess a decade or two later.&lt;&#x2F;p&gt;
&lt;p&gt;Three fucking decades of my god damn life; and all I was, was an autistic child.&lt;&#x2F;p&gt;
&lt;p&gt;I forgive you.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;ve a struggling autistic individual, I recommend reaching out to the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;autisticadvocacy.org&#x2F;about-asan&#x2F;&quot;&gt;Autistic Self Advocacy Network&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Authority</title>
        <published>2026-06-15T00:00:00+00:00</published>
        <updated>2026-06-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/authority/"/>
        <id>https://jbcurtin.io/philosophy/authority/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/authority/">&lt;p&gt;The age all response to disobedience. After all, it&#x27;s structure protects the known and it&#x27;s structure errods the unknown. It&#x27;s obtuse, invasive, comprehensive, and most of all, it needs constant refinement.&lt;&#x2F;p&gt;
&lt;p&gt;It is generally accepted within the autistic community that neurotypicals are the primary beneficiaries of an authority. We perceive most of the thought patterns in circulation encode various forms of neurocolonialism. If we go long enough without awareness of certain neurocolonialisms, those neurocolonialisms have the ability to trap us into something we dislike. If we&#x27;re lucky, we feel alienated. If we&#x27;re unlucky, we&#x27;re persecuted. If you&#x27;re like me, read on.&lt;&#x2F;p&gt;
&lt;p&gt;Reversing these feelings is critical for long term success as a species and I believe it to be one of the next steps to evolving our species in an effort to become more prepared for what&#x27;s out there, beyond our solar system.&lt;&#x2F;p&gt;
&lt;p&gt;Processing our emotions is an important step, and for the most part. Neurotypicals can do this, autistics struggle because we&#x27;re often made into example. Even by our own kind. I am a very privileged individual, but my privilege is knowledge and does not come in the a form of comfort. I strive to become better and more aware of the psychological boundaries we find ourselves within while learning the edges that make up our consciousness. It has became abundantly clear to me, in my pursuit for freedom and exhortations here on this website. That there is a massive gap between the current understanding of autism and autism.&lt;&#x2F;p&gt;
&lt;p&gt;At the moment, we only know if someone is autistic or not autistic. In our collective attempt to include everyone, nuerodivergence has been framed in a way that includes ADD, ADHD, Dyslexia, Dyspraxia, Dyscalculia, and so much more.&lt;&#x2F;p&gt;
&lt;p&gt;What if, all these diagnosis are a first pass at observing a naturally occurring social structure relative to the relationships we keep?&lt;&#x2F;p&gt;
&lt;p&gt;Would it then become possible to overcome our diagnosis in a way where we can completely remove the symptoms associated with Dyslexia? What about ADHD and ADD? How can we address those in a therapeutic manor that doesn&#x27;t involve taking a medication?&lt;&#x2F;p&gt;
&lt;p&gt;We talk about this sometimes, maybe in a context of how we present ourselves. The reality is, that sometimes we present ourselves in a way we are unfamiliar with. Both nuerotypical and autistic types have done behaviors we would personally feel ashamed about. In my case, being part of a double blind study without my consent or knowledge. Every mistake, blunder, achievement, everything has been recorded.&lt;&#x2F;p&gt;
&lt;p&gt;Most of my mistakes, blunders, and achievements were experiments disguised as casual social encounters. Things that would never have occurred to me, if my life developed outside of the double blind study. I felt a series of emotions about each encounter, until I realized this fact.&lt;&#x2F;p&gt;
&lt;p&gt;My achievements were used to negligently to empower me and my blunders would be used against me. Being autistic, I think you can guess which happened more often.&lt;&#x2F;p&gt;
&lt;p&gt;And it infuriated me once I became aware. I wanted to know why someone felt the need to examine my life in a way where they felt the need to control it&#x27;s outcome. Turns out, they tried to get others to help me along the way, however, because of their involvement. The &quot;others&quot; would rather respond to an authority rather than build a real relationship with me.&lt;&#x2F;p&gt;
&lt;p&gt;Overtime, I could feel this.&lt;&#x2F;p&gt;
&lt;p&gt;Even before you noticed I noticed. Even before I let you notice, I noticed.&lt;&#x2F;p&gt;
&lt;p&gt;Asking why is probably the most powerful thing anyone person could do. It opened me to the possibility that someone was trying to help me, but I also noticed they didn&#x27;t know how to.&lt;&#x2F;p&gt;
&lt;p&gt;So I studied them, back.&lt;&#x2F;p&gt;
&lt;p&gt;Do you know how it feels, to have true feelings of friendship for someone, to want to ask them how they&#x27;re doing and genuinely feel connected with that someone. Only to have them respond with a casual response, that a central group created? Years I spent with this person, turns out there was always some group in the middle of our friendship.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m talking about two people.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out, one friend complained about me continuously to this authority and further more this authority took it up on themselves to hurt me in areas of my life because of those complaints. Mediation was never considered, and it was infuriating once I realized how much this person hated me. Only ejection, and it was heart breaking.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out, one friend just complained about his life to me and I genuinely cared for him and felt like I had to be there to listen to him because he had nobody else. He would then find a girlfriend and I could step away, but in my retrospective analysis of the situation, because he wasn&#x27;t allowed to talk to me about the authority. He had to pretend to be my friend and it never felt the same to me after that. Nor to him, and we both felt it. We didn&#x27;t talk about it. We don&#x27;t talk about it.&lt;&#x2F;p&gt;
&lt;p&gt;What a way to end a friendship based on mutual support.&lt;&#x2F;p&gt;
&lt;p&gt;Decisions were made, changing the way my life progressed because this authority never interacted with me. Instead, they interacted with every single person I would talk to.&lt;&#x2F;p&gt;
&lt;p&gt;It feels like I&#x27;m not allowed to have a long term friendship.&lt;&#x2F;p&gt;
&lt;p&gt;I think the worst part about it, is as I became more and more aware of it. I could start seeing people feel as if they were forced into talking with me. When in actuality, I didn&#x27;t even want to have a conversation with them. I had to be careful, not to show an interest in what they say, even though it was sometimes interesting to me. Other times, I had to emulate a response to them, to show that their effort didn&#x27;t go unappreciated. After all, they did it with good intentions. However, only I knew that they would eventually want to depart for a reason, yet specified. Which I know, sounds self demeaning. However, it was not unfathomable because it was already quite a common occurrence when I noticed it. I eventually realized that I needed to start preventing people from feeling like they might get sucked into something they, nor I, nor anyone willingly, would want to be apart of.&lt;&#x2F;p&gt;
&lt;p&gt;I walk through life with the acceptance that I&#x27;ll never have a real friendship because of the authority. Constantly making decisions for the betterment of the group, knowing that the continuance of the authority interacting, will ultimately create a divide in any relationship I build with any potential friend.&lt;&#x2F;p&gt;
&lt;p&gt;Because we&#x27;re not allowed to talk about it. I can&#x27;t meditate a compromise.&lt;&#x2F;p&gt;
&lt;p&gt;When I first became aware of it, to prevent the inevitable. I accepted self imposed and extreme isolation. First unconsciously though my non verbalism and then consciously through various methods and communication strategies specifically designed to prevent attachment.&lt;&#x2F;p&gt;
&lt;p&gt;When I didn&#x27;t pay attention to it, I would be naturally segregated with people who where either emotionally dense and unavailable, or separated from someone who could actually feel something of a friendship with me. The authority decided a better approach, they made a gut call and it broke my heart over and over. I was forced to get along with terse individuals suffering from various mental disorders and because they knew about my history from the authority. They would most often trigger on me, yelling at me or treating me, poorly, I&#x27;ll add, because they could suck up to the authority beyond my knowledge. Eventually this authority noticed it too and began to use the individual as a conduit to communicate with me by describing their psychological projection of what they see in the participant, but place it onto me instead. Unwittingly, I suddenly became an advisory to the participants and.. well. Once I realized this, it became a session of me mapping out exactly what the observers of the study see in other people and then it was up to me to devise various communication strategies to circumvent their mental deterioration.&lt;&#x2F;p&gt;
&lt;p&gt;Eventually I learned how to promote positive change.&lt;&#x2F;p&gt;
&lt;p&gt;Good people, don&#x27;t waste their time with.. well, negativity. They just don&#x27;t think about it, nor do they want to embrace the ghoulness of such a reality. They are interested in a much more pleasant experience as they haven&#x27;t had to live a life of being threatened or the torment some people have had.&lt;&#x2F;p&gt;
&lt;p&gt;I think one of the more horrendous aspects to what I have had to go through, is that I had to come to the realization that at every level of society, there is always someone looking to scapegoat someone else for things that had happened to them.&lt;&#x2F;p&gt;
&lt;p&gt;People scapegoat each other because they can&#x27;t process their own trauma and the scapegoat is the first boundary person to push back. Often portrayed against fascism. When we bring attention to scapegoating, people need to understand that it is the social behavior of a group that needs to change and not to focus on the victim hood of the scapegoated. The person who is being scapegoated is strong enough to stand up to persecution, to be a beacon of hope and justice. The group needs to show humility to the symbol of virtue and rather than negating behavior, think of ways to remediate the behavior on the group level.&lt;&#x2F;p&gt;
&lt;p&gt;When fascism doesn&#x27;t exist within the social group, but prejudice does. How can you combat prejudice when everyone&#x27;s primary creative product is fashioned for peer review?&lt;&#x2F;p&gt;
&lt;p&gt;Looking at you, academia.&lt;&#x2F;p&gt;
&lt;p&gt;Furthermore, because my history was known and presented to people without my knowledge. An entire written history from peers I have long since forgotten. I would be unprepared for such interactions.&lt;&#x2F;p&gt;
&lt;p&gt;It would take decades for the academic community to develop the language I could use to defend myself from over empathizing peers, emotionally unavailable participants, and the over bearing scientist. I think my experience is unique, because I can clearly see that these people who are now demonized by the autistic community, have gone through painstakingly attempt after attempt, to reach me and communicate with me how sorry they were for what they inadvertently did to me in 2nd grade.&lt;&#x2F;p&gt;
&lt;p&gt;This Authority caused my mutism, as it was called at the time. Today, I call it non-verbalism.&lt;&#x2F;p&gt;
&lt;p&gt;Not academia, the authority I&#x27;m talking to now.&lt;&#x2F;p&gt;
&lt;p&gt;I know today, these people, this authority, is trying to help. However, they&#x27;re nuerotypical and being autistic is just different. Their version of help was painful, most painful, so I had to devise a strategy to teach them to stop trying to help so much.&lt;&#x2F;p&gt;
&lt;p&gt;I had to find a way to sink the pain based feelings and emplace warmer feelings for them.&lt;&#x2F;p&gt;
&lt;p&gt;To get to this point, to turn it from conscious knowledge into unconscious comfort to operate and move forward on.&lt;&#x2F;p&gt;
&lt;p&gt;Was not easy.&lt;&#x2F;p&gt;
&lt;p&gt;Making headway into the direction of overcoming PTSD, numerous PTSD events. It takes patience and perseverance and planning and diligence and a massive focus on the well being of others around me. Who just so happen to fall into a trap, unwittingly aware of the depths they might be asked to perform.&lt;&#x2F;p&gt;
&lt;p&gt;This authority has made attempts to communicate with me over the years. However, me not knowing what I was caught up in, made it impossible for me to parse intentions correctly. When it first came across, it was ridicule from an individual, I thought was a close friend.&lt;&#x2F;p&gt;
&lt;p&gt;All I could do was watch.&lt;&#x2F;p&gt;
&lt;p&gt;The magnitude of those words, would be hidden from me until I used those same words myself for a real friend of mine, who I saw struggle. Someone who I care for deeply, but can&#x27;t talk to because of mistakes made by the authority.&lt;&#x2F;p&gt;
&lt;p&gt;I did everything right and I made them painfully aware of it. It looked spontaneous to them, but it was meticulously planned to cement this next phase in place. Where I start teaching them healthier patterns for other struggling autistic children, adults, like myself.&lt;&#x2F;p&gt;
&lt;p&gt;A child speaking a full sentence is not an achievement. A child being happy and content is the real achievement while having a comprehensive vernacular. To prey on parents expectations with academic expectations is, absurdly cruel. Instead, I highly recommend the importance about increasing the comfort level of the parents.&lt;&#x2F;p&gt;
&lt;p&gt;Non-verbalism is not an escape, it&#x27;s a shell. A boundary. The baby chick peaking it&#x27;s way out of its egg shell, we non-verbals have to pay immense attention at the way language is used around us before we can overcome our non-verbalism.&lt;&#x2F;p&gt;
&lt;p&gt;It takes more time than your have patience for. I measured for it.&lt;&#x2F;p&gt;
&lt;p&gt;It takes conscious thought and diligence. Immense humility, to engage our emotional intelligence and speak empathically. We have to learn to accept that there are those around us, that can&#x27;t make it past first base when it comes to understanding their own emotions, so we must understand theirs, before validating ours.&lt;&#x2F;p&gt;
&lt;p&gt;Turns out, we already naturally do this. Non-verbalism isn&#x27;t a protest, it&#x27;s an empathic response to alleviate the pain and suffering of those around us.&lt;&#x2F;p&gt;
&lt;p&gt;Heal the group, and the non-verbal will cease to be. Stop focusing on what you perceive to be the weakest of us.&lt;&#x2F;p&gt;
&lt;p&gt;Those people around us, hurt us, over and over, don&#x27;t protect us. Are cold to us, or in my case, don&#x27;t want anything to do with us for reasons they care not to explain. However, instead of them seeking therapy and improving the situation. They simply ignore the problem and focus on what makes them happy. Projecting their insecurity onto us, not because they want to, but because they don&#x27;t have the support they needed to support me. Meanwhile, we non-verbals are left under developed and incapable of making progress.&lt;&#x2F;p&gt;
&lt;p&gt;You didn&#x27;t validate her. She exclaimed for years about how I was different. You should be worshipping her for the kind of person I became. I&#x27;m not yet sure about how I feel about it all. However, your honesty helped ease tension.&lt;&#x2F;p&gt;
&lt;p&gt;After reaching adulthood, my second adulthood. I theorized, the relationships we are born into, for us to move forward in life, each of those relationships must meet an emotional threshold for us to break away from it without the negative aspects of codependency. Family isn&#x27;t always there. However, if we pay close attention to what we&#x27;re missing in ourselves. We can always find a family abroad to get us the rest of the way.&lt;&#x2F;p&gt;
&lt;p&gt;We sometimes mistake community for what we need most, because the community is willing to provide what is missed the most. The structure of a community is, well, indefinable.&lt;&#x2F;p&gt;
&lt;p&gt;I have developed several communication methods to circumvent deterioration of a social group and it&#x27;s associated communities. Before I could responsibly allow myself to be apart of another community, I had to learn how to protect that community from an unwanted Authority.&lt;&#x2F;p&gt;
&lt;p&gt;The unwanted Authority that has coexisted with me throughout my life is seeing me do it and is responding to it and I want to validate it, that I see it too. We&#x27;re in good standing now. There are people now, that can see the same things I see and we don&#x27;t have to talk to understand what we see. They can vouch for me when I need my non-verbalism.&lt;&#x2F;p&gt;
&lt;p&gt;I noticed your fight club comment, and I&#x27;ve shown you a better alternative. One that aligns with peer review, but goes beyond words. Reason being is, there aren&#x27;t enough words yet to fully protect me from your negligence.&lt;&#x2F;p&gt;
&lt;p&gt;You&#x27;re not a wanted Authority, at best, I&#x27;ve learned to account for you. It&#x27;s time for me to teach you now, so you can help other autistic children and develop support programs for them to thrive in. The kind of things I&#x27;ve wished for, but never existed. You have earned the opportunity to gain my trust.&lt;&#x2F;p&gt;
&lt;p&gt;Now, we can start a better dialogue.&lt;&#x2F;p&gt;
&lt;p&gt;I assert theology is superior to atheism.&lt;&#x2F;p&gt;
&lt;p&gt;Not because I believe in a super natural being or entity, but because belief is absolutely necessary for humans. The belief in the good nature of something is as powerful as the negation of a god or religion. The question comes down to, at least for me, would I rather spend time fighting my beliefs or would I rather spend time reinforcing my beliefs?&lt;&#x2F;p&gt;
&lt;p&gt;I personally think the whole argument about science and religion is moot.&lt;&#x2F;p&gt;
&lt;p&gt;The discussion should instead be around..&lt;&#x2F;p&gt;
&lt;p&gt;How can we reinforce a faith in humanity?&lt;&#x2F;p&gt;
&lt;p&gt;When you get a beginning, sometimes it looks like an ending because we have to dump the bad emotions before we can have to good emotions.&lt;&#x2F;p&gt;
&lt;p&gt;日本語に始まります。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Language</title>
        <published>2026-05-13T00:00:00+00:00</published>
        <updated>2026-05-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/poetry/language/"/>
        <id>https://jbcurtin.io/poetry/language/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/poetry/language/">&lt;p&gt;I&#x27;m autistic.&lt;&#x2F;p&gt;
&lt;p&gt;They tell me my language isn&#x27;t where it needs to be.&lt;&#x2F;p&gt;
&lt;p&gt;I express my opinion.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m attacked for it.&lt;&#x2F;p&gt;
&lt;p&gt;I express my capabilities.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m attacked for it.&lt;&#x2F;p&gt;
&lt;p&gt;I feel devalued.&lt;&#x2F;p&gt;
&lt;p&gt;Yet I have to pretend, it doesn&#x27;t hurt me.&lt;&#x2F;p&gt;
&lt;p&gt;And it does hurt me.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m just a privileged white guy now.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d rather be an Aspie.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Tomato Sauce</title>
        <published>2026-04-20T00:00:00+00:00</published>
        <updated>2026-04-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/tomato-sauce/"/>
        <id>https://jbcurtin.io/philosophy/tomato-sauce/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/tomato-sauce/">&lt;p&gt;They don&#x27;t know better. They think they do, they need to think they do, but they don&#x27;t. Honestly, we wouldn&#x27;t do much better. Instead, we have to look for ways to help them reach us.&lt;&#x2F;p&gt;
&lt;p&gt;Who am I talking about? Family, Friends, Colleagues, Nuerotypicals &amp;amp; Autistic people.&lt;&#x2F;p&gt;
&lt;p&gt;At some point we have to know what we&#x27;re talking about and being accredited is considered the standard for social achievement. We have a problem, us Autistic types who are starting to identify both for ourselves and those of us to have managed to make it through much of our lives without having to learn about our autism. The good news, is that people who can make it to the top without their own awareness of their own autism  The bad news is, they can stay there without learning how to help those struggling with their identity in autism.&lt;&#x2F;p&gt;
&lt;p&gt;This is where the scientific narrative of autism fails us. As it is the loudest, tucked away in the DSM5 manual, there is simply a diagnostic framework on how to identify a child or adult &quot;with autism.&quot; How do we, however, empower our autistic peers when we don&#x27;t yet have a language of social reform and justice meant to inthrall and empower us?&lt;&#x2F;p&gt;
&lt;p&gt;This is the crux of our main argument against the scientific narrative. It is, at most, a framework meant to remove bias and refine observation and provide empirical evidence based on observation and repeated testing. It&#x27;s beautiful when properly applied because it allows for a scientist with any sort of background, little by little, to chip away at their own biases and misconceptions about life and break things down to the most fundamental parts of what nature has to show us.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s also extremely dehumanizing.&lt;&#x2F;p&gt;
&lt;p&gt;This is where the importance of soft science comes into play. It naturally builds empathy for its participants while scientists not yet familiar with the difference naturally gravitate towards harder science. This includes psychology.  What do I mean by, &quot;not yet familiar&quot; with the difference?&lt;&#x2F;p&gt;
&lt;p&gt;What I mean is, does the scientist have the ability to pull back from pushing to hard. Capable of reversing course when an organism is in distress?&lt;&#x2F;p&gt;
&lt;p&gt;This is where incentives need to be exampled and huge debate still exists today around animal testing. There are controls in the FDA that govern the application of human based testing. Mice are specifically breed and naturally selected for their scientific purposes. Inhuman things are done to these animals because, well, the word is inhuman.&lt;&#x2F;p&gt;
&lt;p&gt;Where is the line?&lt;&#x2F;p&gt;
&lt;p&gt;Sentience. If an animal can feel something, it can think deeply about what is happening to it.&lt;&#x2F;p&gt;
&lt;p&gt;What about psychology?&lt;&#x2F;p&gt;
&lt;p&gt;We must learn to accept that the study of psychology can go both ways. Buttom up and top down. Just because an animal, human or not, can feel, doesn&#x27;t mean we should stop paying attention to it. Infact, we should pay more attention to it with our feelings.&lt;&#x2F;p&gt;
&lt;p&gt;Humans like to dramatize nature as a brutal teacher, but the fact is, nature is probably the most gentle teacher available. If an environment doesn&#x27;t suite your needs, your most likely course of action is to change the environment. When changing the environment, we have an opportunity to change who we are and change ourselves to the needs of the environment we live within. We often like to call this immersion, but really what it is for autistic types, it can be hugely disorienting. The impermanence of nature is a barrier for us, something we long for, to return to when our social struggles go unanswered. We like to return to a point in nature and start over.&lt;&#x2F;p&gt;
&lt;p&gt;What happens in our minds when this happens?&lt;&#x2F;p&gt;
&lt;p&gt;We repeat ourselves, but I misused we. We, Neurotypical and Autistic repeat ourselves. It gives the person we&#x27;re talking to, an opportunity to lock into the correct memory. I noticed this first hand in myself, several times. When a phrase, feeling, or something goes unvalidated for a long enough time, it can turn into a longing for connection from a misconnected connection.&lt;&#x2F;p&gt;
&lt;p&gt;Knowing this in myself, I turned this behavior into a conscious effort with the latest individual it happened with. I began to understand it as a fork between emotions, where we remained friends and still are friends, but we had to go a different path. They had to do what they knew was right and I had to do what I knew was right. My capacity for empathy could see why they chose the different path. The path to put me down, so I kept the door open for them to come back to that moment where we had mutual respect for each other.&lt;&#x2F;p&gt;
&lt;p&gt;Science is about breaking down actions in nature into its most basic elements. Psychology is about the study of human behavior. What if our observations are quantum in nature? What if our behavior has a quantum element to it? Not just our emotions, our thoughts, or memory. What if our very interactivity requires a quantum awareness?&lt;&#x2F;p&gt;
&lt;p&gt;The tomato didn&#x27;t say catch up, it said, hold on a minute. You&#x27;re missing some salt.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll help you teach me better, but you have to be willing to relearn how to teach students. We&#x27;ll take it slow, and I&#x27;ll make sure it doesn&#x27;t disrupt your life. However,  you have to keep an open mind and talk with me when you feel an emotion. Thats how we rehumanize, or if you prefer, reharmonize.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Nuerodivergent Hug of Hurt</title>
        <published>2026-03-31T00:00:00+00:00</published>
        <updated>2026-03-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/poetry/neurodivergent-hug-of-hurt/"/>
        <id>https://jbcurtin.io/poetry/neurodivergent-hug-of-hurt/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/poetry/neurodivergent-hug-of-hurt/">&lt;p&gt;I know you&#x27;re trying to help me.&lt;&#x2F;p&gt;
&lt;p&gt;It hurts.&lt;&#x2F;p&gt;
&lt;p&gt;I know you don&#x27;t, know how it hurts me.&lt;&#x2F;p&gt;
&lt;p&gt;I know you want me to overcome.&lt;&#x2F;p&gt;
&lt;p&gt;It hurts.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll mask.&lt;&#x2F;p&gt;
&lt;p&gt;People don&#x27;t leave as often now.&lt;&#x2F;p&gt;
&lt;p&gt;But it still hurts.&lt;&#x2F;p&gt;
&lt;p&gt;I have a friend. I won&#x27;t do anything to upset him.&lt;&#x2F;p&gt;
&lt;p&gt;He did something to upset me. It hurt, I showed it.&lt;&#x2F;p&gt;
&lt;p&gt;Why won&#x27;t he play with me again?&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m a teenager now. I can learn more complex topics. It doesn&#x27;t hurt as much.&lt;&#x2F;p&gt;
&lt;p&gt;I love knowledge. I love video games.&lt;&#x2F;p&gt;
&lt;p&gt;Your impulsive behavior is confusing to me.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve learned if it hurts too much, and I show that. You&#x27;ll leave too.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m sorry, I don&#x27;t want to be disappointed again. I&#x27;ll leave you.&lt;&#x2F;p&gt;
&lt;p&gt;I have no friends. I feel safe now.&lt;&#x2F;p&gt;
&lt;p&gt;I have people who say things to me.&lt;&#x2F;p&gt;
&lt;p&gt;How do I connect? What do I say?&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m a young adult now.&lt;&#x2F;p&gt;
&lt;p&gt;Desperate to have a friend, and unaware of my own emotional desperation for a friend.&lt;&#x2F;p&gt;
&lt;p&gt;A friend came. I didn&#x27;t let myself become upset. He stayed.&lt;&#x2F;p&gt;
&lt;p&gt;He hurt me. I didn&#x27;t left myself become upset.&lt;&#x2F;p&gt;
&lt;p&gt;I don&#x27;t think he knows.&lt;&#x2F;p&gt;
&lt;p&gt;He seems scared. He did something wrong.&lt;&#x2F;p&gt;
&lt;p&gt;I can&#x27;t pretend like it didn&#x27;t hurt anymore.&lt;&#x2F;p&gt;
&lt;p&gt;How do I show I&#x27;m upset?&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m upset.&lt;&#x2F;p&gt;
&lt;p&gt;He&#x27;s gone now.&lt;&#x2F;p&gt;
&lt;p&gt;I had more friends than I can count.&lt;&#x2F;p&gt;
&lt;p&gt;It hurt, I didin&#x27;t show I was upset.&lt;&#x2F;p&gt;
&lt;p&gt;I have no friends. I have PTSD.&lt;&#x2F;p&gt;
&lt;p&gt;It hurts.&lt;&#x2F;p&gt;
&lt;p&gt;How do I overcome this?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;philosophy&#x2F;molding-phases&quot;&gt;Molding Phases&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Induction Reversals</title>
        <published>2026-03-09T00:00:00+00:00</published>
        <updated>2026-03-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/induction-reversals/"/>
        <id>https://jbcurtin.io/philosophy/induction-reversals/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/induction-reversals/">&lt;p&gt;Question everything.&lt;&#x2F;p&gt;
&lt;p&gt;Commonly throughout my life, I have come across the numerous facsimiles to a common response with authority. The lack of questioning it.&lt;&#x2F;p&gt;
&lt;p&gt;Authority is there to support us and help us feel safe. What happens when that authority begins to fail to keep you, as an individual, safe?&lt;&#x2F;p&gt;
&lt;p&gt;Separation from the authority is the most common response, finding a new authority to work with is the next best thing to develop a fresh viewpoint. However, what happens when your human-local social engagements make it impossible for you to participate in the authority structure you&#x27;d attune best with?&lt;&#x2F;p&gt;
&lt;p&gt;This is the hard version of what it&#x27;s like being non-verbal, we end up sensing our peers and our ability to talk is reduced. On the flip side, those that are used to talking, become accustomed to talk about our verbal atrophy.&lt;&#x2F;p&gt;
&lt;p&gt;Notice how I avoided using the word &quot;communicate&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;We know how to communicate, we use our behavior and our minds to construct distinct responses. Then how can we adapt to include words in our communication without disruption?&lt;&#x2F;p&gt;
&lt;p&gt;I had to stop listening to people who were better established in life than I was. Everyone is willing to share how they did it for themselves. However, for non-verbals like myself, we&#x27;re a different type of person. We&#x27;re not just autistic, we&#x27;re allistic &amp;amp; autistic. We&#x27;ve grown up in an environment that was either hostile, too comfortable, or somewhere in between; that promoted our non-verbal communication.&lt;&#x2F;p&gt;
&lt;p&gt;How did this happen?&lt;&#x2F;p&gt;
&lt;p&gt;It obviously wasn&#x27;t our faults. What lead us to become accustomed to an environment that promotes our non-verbalism you might ask?&lt;&#x2F;p&gt;
&lt;p&gt;This is often where metal health professionals makes an easy decision. They omit the consideration of the parents&#x27; environment, they omit details which are more important to focus on because it becomes to risky to engage with a mentally unbalanced parent.&lt;&#x2F;p&gt;
&lt;p&gt;There is also the consideration that the parent knows enough, about what not to do to their children because they, themselves have had an abusive upbringing. The parent themselves, needs an example to live up to. How do you help without making them dependent on your assistance?&lt;&#x2F;p&gt;
&lt;p&gt;Adaptability as an indicator. Someone who can adapt quickly to change in the environment has a better chance of adapting and learning how to move forward through the adversity of the environment they found themselves within. When you distill the affects of metal health into a social framework, you&#x27;re essentially asking the non-verbal to become accustomed to an adversity that doesn&#x27;t align with their immediate needs.&lt;&#x2F;p&gt;
&lt;p&gt;This isn&#x27;t a chicken or the egg problem. This is a lack of information problem for those that become accustomed to our non-verbal communication.&lt;&#x2F;p&gt;
&lt;p&gt;Hence why, I&#x27;m extremely verbal about my non-verbalism. Contributing my information and dismantling the criticism, through my perception of adversity.&lt;&#x2F;p&gt;
&lt;p&gt;Notice how I didn&#x27;t use the word &quot;narrative&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Using inductive reasoning from my mountain of empirical evidence, I can assert two principles&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Our brains are wired to understand language unique to our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Neurodiversity&quot;&gt;neuro-divergence&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Our brains are wired to understand empathy, first.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I can further derive exercises towards &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Homophily&quot;&gt;homophily&lt;&#x2F;a&gt; regardless of neuro-divergence.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Anger, when unchecked can become difficult to think through. This is were non-verbals are different, we aren&#x27;t angry. We aren&#x27;t upset. We are simply, thoughtful.&lt;&#x2F;li&gt;
&lt;li&gt;Take an extra moment, and if someone tries to take that moment from you. Tell them to wait. It&#x27;s okay to flair your anger, but just for that moment.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We, non-verbals, struggle to turn our thoughts into action. The optimal path to correct this is to argue with the criticisms of our verbal peers. Optimal communication patterns is different between all types of neuro-divergent minds, once you identify the differences, it becomes easier to turn thought into action. You have to exert yourself, emotionally to do so.&lt;&#x2F;p&gt;
&lt;p&gt;Just don&#x27;t get stuck being an angry person. Anger is where it starts, because from anger you can derive focus. From focus, you can gain control over your own behavior and emotions.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s put forth a commonly understood notion of academia:&lt;&#x2F;p&gt;
&lt;p&gt;The primary objective of academia is to teach knowledge. Educators aren&#x27;t baby sitters and there is an implicit expectation put on parents to teach their children good manors.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;What about the parents that don&#x27;t have a good baseline for proper manors for their children?&lt;&#x2F;li&gt;
&lt;li&gt;What about the parents without a good baseline in maintaining their own emotions?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Does this really have to fall on academia or do you need a new type of institution?&lt;&#x2F;p&gt;
&lt;p&gt;If the objective is to proceed with induction or best explanation, than it stands to reason we autistics need to start standing up together to provide better explanations to our own behavior and emotions. How do we unite each other when we&#x27;re limited by our collective imagination filtered through academia expectations?&lt;&#x2F;p&gt;
&lt;p&gt;Playing video games is a good starting point, but how do we transition from the game feel of a video game into our feelings of our own life? What guidance is available for us?&lt;&#x2F;p&gt;
&lt;p&gt;Open questions for academia&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;What challenges can you give your ideal student, not students, to help them improve?&lt;&#x2F;li&gt;
&lt;li&gt;How do you identify a student would work well with you?&lt;&#x2F;li&gt;
&lt;li&gt;Flip it, how would you identify a student you&#x27;d work well with?&lt;&#x2F;li&gt;
&lt;li&gt;What leadership qualities would you encourage in your student to teach their peers?&lt;&#x2F;li&gt;
&lt;li&gt;Are the parents of the students you&#x27;ve identified open to adapting?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Implicit erosion of choice through peer pressure</title>
        <published>2026-02-20T00:00:00+00:00</published>
        <updated>2026-02-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/erosion-of-choice/"/>
        <id>https://jbcurtin.io/philosophy/erosion-of-choice/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/erosion-of-choice/">&lt;p&gt;In a &lt;strong&gt;jo&lt;&#x2F;strong&gt;int effort, it is important to establish guidelines between parties so that mistakes don&#x27;t reoccur. Ethical boundaries are initially formed based on correlated datasets and empirical evidence available at that time. Those boundaries can lead to a number of unfortunate misunderstandings when not re-assessed.&lt;&#x2F;p&gt;
&lt;p&gt;When peer pressure is used to force change in an individual, it erodes their agency and increases the chances of an autistic person masking. Eventually it could dove tail into an interpretation of supremacy. The mirror affect of it would be someone at best, having their free will eroded or at worst becoming a supremacist. Either case, both versions of the individual eventually becomes incapable of providing value back to society as a whole because they are unaware of how their emotions have been intentionally wrapped in order to push change into themselves.&lt;&#x2F;p&gt;
&lt;p&gt;It could also generate grievous misunderstandings which could erode trust between nuerotypes, races, or a miscellaneous-prejudice of your choosing.&lt;&#x2F;p&gt;
&lt;p&gt;What should you do when you find yourself unable to carry out your interests(free will) or unable to absolve yourself of anger(supremacy) towards something?&lt;&#x2F;p&gt;
&lt;p&gt;The first is obvious, at least it was for me. I imbued myself with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Servant_leadership&quot;&gt;servant mindset&lt;&#x2F;a&gt;, as there is an elegance about being a servant. The second is not so obvious, because the negative emotions are harder to work through without attaching to someone or something else.. and thats what you have to do. Attach those emotions to something else and pursue a non-violent solution towards resolve. I attached my emotions to the words I used, when I realized I was pushed down by someone with misguided intentions.&lt;&#x2F;p&gt;
&lt;p&gt;Where do we go from here you might ask?&lt;&#x2F;p&gt;
&lt;p&gt;I pushed back, I let the other side know that their approach was sloppy and that it needs to be cleaned up.&lt;&#x2F;p&gt;
&lt;p&gt;Science is about enriching our lives and outliers such as myself are meant to revise our collective understanding to coalesce a better dataset. Let&#x27;s make a better dataset, together.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Consciousness</title>
        <published>2025-12-02T00:00:00+00:00</published>
        <updated>2025-12-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/consciousness/"/>
        <id>https://jbcurtin.io/philosophy/consciousness/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/consciousness/">&lt;p&gt;Making sense of the world is tedious. I think that is the pursuit we should strive for, to turn over every downed tree or rock and discovering an evergreen or nasty mold can make all the difference in how we decide to proceed.&lt;&#x2F;p&gt;
&lt;p&gt;There are numerous factors which go into developing a mindset capable of remaining stiff, yet resilient enough to function in society. Those privileged to grow up in a life with the right amount of challenge, have a sense of security. Those of us growing up in a dysfunctional environment with unorganized challenges, have a harder time acclimating into society. Attempting to build a baseline around trying to understand our own existence, when the information is confusing to us, can take some time to figure out. Becoming aware of useful tugging on your thoughts requires repetition of behavior. Then you have to think about those tugging-useful thoughts and try to piece the thoughts into a concept. Then you need to decide how to behave relative to those thoughts.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s best to start selfishly.&lt;&#x2F;p&gt;
&lt;p&gt;The world seems like a chaotic mess to the person looking at a collection of behaviors. Trying to make sense from it, top down, is an authoritative approach. Trying to make sense of it, from within, is far more than what your imagination can conceptualize.&lt;&#x2F;p&gt;
&lt;p&gt;It requires a blindness and a sense of familiarity, which society formally filled in with faith. You have to believe in what you can imagine. You also have to act on your imagination in good faith.&lt;&#x2F;p&gt;
&lt;p&gt;My inner atheist screamed bloody murder when I came to terms with this.&lt;&#x2F;p&gt;
&lt;p&gt;My inner feminist exclaimed, &quot;Today, down with patriarchy. Tomorrow, down with neurocolonialism.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;My non-verbalism nodded, with the slightest sense of approval.&lt;&#x2F;p&gt;
&lt;p&gt;Why is it so hard to believe?&lt;&#x2F;p&gt;
&lt;p&gt;Let me rephrase that, &quot;Why was it so hard for me to believe in myself?&quot;&lt;&#x2F;p&gt;
&lt;p&gt;I lived in bias and how I augmented my life through focusing on my biases, framed my viewpoints. My viewpoints influenced the memories incorporated into my emotional chassis as I progressed forward. I failed to re-evaluate my viewpoints for a very long time. I also failed at understanding how my biases were to permissive.&lt;&#x2F;p&gt;
&lt;p&gt;By too permissive, I mean that I was very amenable. I couldn&#x27;t see past my own life experience and realize that others relied on each other to hold each other up. Living in solitude for the majority of my life, I got used to holding myself accountable and correcting my own behavior. I never knew other people needed to hold me accountable; I never realized that other people would feel the need to correct my behavior as a gesture of mutual respect.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s a form of vulnerability, holding someone accountable. You share a standard and you expect the person you&#x27;re sharing it with, to adhere to it. This is the opposite of the autistic centric concept of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autism.org.uk&#x2F;advice-and-guidance&#x2F;topics&#x2F;about-autism&#x2F;autism-and-communication&quot;&gt;non-transactability&lt;&#x2F;a&gt;. Some functioning autistics inherently accept that our reality is filled with non-transactional actors and from that, a majority of us don&#x27;t know how to fit into a social group.&lt;&#x2F;p&gt;
&lt;p&gt;Non-transactability is the understanding we come to when our emotional chassis is used to make a connection with someone, but that someone is unable to follow through relative to our expectations of the relationship. Somehow as a result, we&#x27;ve developed a way to function in the world without the need of having to hold people accountable. Which is a form of power we have over our peers suffering from the negative effects of neocolonialism. Our natural ability to carry on, gives us a sense of resilience when entering into fierce conversations.&lt;&#x2F;p&gt;
&lt;p&gt;What I think we need to work on together, to move beyond the limitations of our non-transactional mindsets. Is figuring out how to direct our effort into an endeavor while avoiding pathological mindsets.&lt;&#x2F;p&gt;
&lt;p&gt;This is why I like capitalism, it provides the vehicle to dynamically change things in a static social environment. Its a social endeavor meant to disrupt the status quo.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Whales</title>
        <published>2025-11-22T00:00:00+00:00</published>
        <updated>2025-11-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/whales/"/>
        <id>https://jbcurtin.io/philosophy/whales/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/whales/">&lt;p&gt;I always found the science of whales fascinating. The process of humans trying to understand how whales communicate is what I focused in on, when I started to question what it was like to exist as an Autistic Individual. Of course, at the time I didn&#x27;t know I was autistic, I did however know there was a variance of interpreting me before anyone provided the words, to me.&lt;&#x2F;p&gt;
&lt;p&gt;By simply paying attention to what people were saying to me, I was able to decern a pattern of communication that would be soft and remain resilient.&lt;&#x2F;p&gt;
&lt;p&gt;I stopped to listen to how people projected their perceptions onto me. I think the key difference between who I was and who I am today, is I can stay in the conversation and not struggle to be apart of the conversation. Learning how not to let how another&#x27;s thought, about me, affect me, took me a while to figure out. Reason being is, people are most interested in getting along. They talk with what they know to be true first and you can either validate their sentiment genuinely or not. People who are extremely perceptive, can tell when you&#x27;re just saying anything to them rather than responding and thinking about your responses for them, regardless of neurotype divergence.&lt;&#x2F;p&gt;
&lt;p&gt;Working with people who are not well practiced in talking with someone who is autistic, takes effort from me. In the autistic community, we put forth the importance of using &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;autisticadvocacy.org&#x2F;about-asan&#x2F;identity-first-language&#x2F;&quot;&gt;identify first language&lt;&#x2F;a&gt;. Most functioning allistics without much exposure to functioning autistics have pretty much zero baseline in understanding how to talk with us. They have to start from something that is common to them, which might also feel insulting to us.&lt;&#x2F;p&gt;
&lt;p&gt;What dose this have to do with whales?&lt;&#x2F;p&gt;
&lt;p&gt;Unlike whales, our voice boxes are very similar to allistic voice boxes. Which allows us to make a lot of the same sounds they do. Allistic brains are a lot closer to our brains, which allows them to understand concepts just as well as we do. Our ears, mouth, and eyes are pretty similar too. We have a lot more in common and our differences help us approach problems with more originality rather than blind conformity, relative to each other.&lt;&#x2F;p&gt;
&lt;p&gt;The internet carries our collective words father than our voices ever will.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Imminent Correction Advised</title>
        <published>2025-11-11T00:00:00+00:00</published>
        <updated>2025-11-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/imminent-correction-advised/"/>
        <id>https://jbcurtin.io/philosophy/imminent-correction-advised/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/imminent-correction-advised/">&lt;p&gt;I&#x27;ve been thinking about the recent video of ICE taking down an autistic hispanic male. As unsettling as it is, the truth is, that is the reality all autistic males have to come to terms with. There will be, at any moment in time, a point where someone will challenge you.&lt;&#x2F;p&gt;
&lt;p&gt;The sad truth is, if you&#x27;re not prepared for it. It could lead to a series of events that further worsen into PTSD. PTSD for autism is slightly different than PTSD for others, as it is a catch all phrase used to identify stress of a previous traumatic incident, the reality is, autistic people have a naturally higher chance of this occurring than allistic people when it comes to casual social interactions.&lt;&#x2F;p&gt;
&lt;p&gt;Which is why I think we need to talk about it more.&lt;&#x2F;p&gt;
&lt;p&gt;Run the numbers all you want, at the end of the day, it&#x27;ll always show that we are naturally marginalized. This isn&#x27;t because we want to be, we don&#x27;t want to be isolated and scared of everything. We need something to believe in and we need something to work up towards.&lt;&#x2F;p&gt;
&lt;p&gt;Funny how capitalistic America can give us that, but our leaders are busy futzing around with their shitty beliefs that quiet quitting is a thing. No, we just want to have lives. Stop wasting our time with your psychological-weakening non-sense, I&#x27;m talking to you, the zero-sum game playing manager. Stop giving us reason to define terms such as late stage capitalism.&lt;&#x2F;p&gt;
&lt;p&gt;The painful part about the version of PTSD we experience, is that it could alter our Autistic Mask in a way that makes it hard to perceive danger. That in there, is the beautify of being autistic, is that, within each and everyone of us, we constantly choose to not do any additional harm. However, allowing harm to come to us, is where I advise we make a change. The autistic person reading this article, take a moment and reassess your mental boundaries. Its not always the police.&lt;&#x2F;p&gt;
&lt;p&gt;We are probably more mentally squishy than allistics, or maybe they&#x27;re quicker to jab and we&#x27;re quicker to evade. I can&#x27;t 100% be certain on this one. What I do know, is that when ICE takes down anyone, for any reason, they have no problem justifying it. We must correct it, with diligence and grace.&lt;&#x2F;p&gt;
&lt;p&gt;Claiming there is a welfare class is insulting and degrading to America. America was founded with immigrants and a pursuit for helping those in need&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;plain&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-plain &quot;&gt;&lt;code class=&quot;language-plain&quot; data-lang=&quot;plain&quot;&gt;&lt;span&gt;Not like the brazen giant of Greek fame,  
&lt;&#x2F;span&gt;&lt;span&gt;With conquering limbs astride from land to land;  
&lt;&#x2F;span&gt;&lt;span&gt;Here at our sea-washed, sunset gates shall stand  
&lt;&#x2F;span&gt;&lt;span&gt;A mighty woman with a torch, whose flame  
&lt;&#x2F;span&gt;&lt;span&gt;Is the imprisoned lightning, and her name  
&lt;&#x2F;span&gt;&lt;span&gt;Mother of Exiles. From her beacon-hand  
&lt;&#x2F;span&gt;&lt;span&gt;Glows world-wide welcome; her mild eyes command  
&lt;&#x2F;span&gt;&lt;span&gt;The air-bridged harbor that twin cities frame.  
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;Keep, ancient lands, your storied pomp!&amp;quot; cries she  
&lt;&#x2F;span&gt;&lt;span&gt;With silent lips. &amp;quot;Give me your tired, your poor,  
&lt;&#x2F;span&gt;&lt;span&gt;Your huddled masses yearning to breathe free,  
&lt;&#x2F;span&gt;&lt;span&gt;The wretched refuse of your teeming shore.  
&lt;&#x2F;span&gt;&lt;span&gt;Send these, the homeless, tempest-tost to me,  
&lt;&#x2F;span&gt;&lt;span&gt;I lift my lamp beside the golden door!
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_New_Colossus&quot;&gt;The New Colossus&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;To my autistic fellows. Less is more, listen to what is said and carve it into your memory. Speak with your voice inside, not your inside voice. Repeat yourself until you&#x27;re &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Emotional_validation&quot;&gt;validated&lt;&#x2F;a&gt;. It&#x27;ll take years to materialize, but if we provide a back-bone, others will notice our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Antifragility&quot;&gt;anti-fragility&lt;&#x2F;a&gt; and move in unison with us.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>`serde`</title>
        <published>2025-10-31T00:00:00+00:00</published>
        <updated>2025-10-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/software-engineering/serde/"/>
        <id>https://jbcurtin.io/software-engineering/serde/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/software-engineering/serde/">&lt;p&gt;Implementing &lt;code&gt;Deserialize&amp;lt;&#x27;de&amp;gt;&lt;&#x2F;code&gt; on a struct always makes me take a step back. I start to question the validity of having to write a &lt;code&gt;Visitor&amp;lt;&#x27;de&amp;gt;&lt;&#x2F;code&gt;-trait compatible struct. Then I slowly remember that JSON can be a nested tree of pretty much any kind of data-object representation and I remember the brilliance of the with &lt;code&gt;serde&lt;&#x2F;code&gt;&#x27;s API approach all over again.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s a good set of feels.&lt;&#x2F;p&gt;
&lt;p&gt;That being said, the documentation always takes a moment for me to remember what to do. Therefore I came up with these snippets to help me remember what I need to do, quicker than it would take for me to wait for ChatGPT to finish its generation phase&lt;&#x2F;p&gt;
&lt;h2 id=&quot;renaming-a-property-on-the-object&quot;&gt;Renaming a property on the Object&lt;&#x2F;h2&gt;
&lt;p&gt;Rust likes to use &lt;code&gt;snake_case&lt;&#x2F;code&gt; pretty much everywhere a variable, method, or function is written. Having the ability to rename the json object properties to something more Rust-like-able, allows to skip having the &lt;code&gt;#[allow(dead_code)]&lt;&#x2F;code&gt; macro&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;use &lt;&#x2F;span&gt;&lt;span&gt;serde::Deserialize;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span&gt;(Debug, Deserialize)]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;pub &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;Content {
&lt;&#x2F;span&gt;&lt;span&gt;	#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;serde&lt;&#x2F;span&gt;&lt;span&gt;(rename&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)]
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;: String,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;tokio&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;async &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; content &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;#&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{&amp;quot;Name&amp;quot;: &amp;quot;my name is, serde&amp;quot;}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;#&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; content: Content &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;serde_json::from_str(content).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;	println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, content.name);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In &lt;code&gt;Content&lt;&#x2F;code&gt;, &lt;code&gt;name&lt;&#x2F;code&gt; is renamed from &lt;code&gt;Name&lt;&#x2F;code&gt; using &lt;code&gt;#[serde(rename=&quot;Name&quot;)&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;deserializing-a-digit-into-an-enum&quot;&gt;Deserializing a digit into an enum&lt;&#x2F;h2&gt;
&lt;p&gt;Sometimes &lt;code&gt;#[derive(Deserialize)]&lt;&#x2F;code&gt; isn&#x27;t enough and we need to drop down into writing a trait implementation. Enums are straight forward using &lt;code&gt;TryFrom&lt;&#x2F;code&gt;. It can be used to map an error into something &lt;code&gt;Deserialize&amp;lt;&#x27;de&amp;gt;&lt;&#x2F;code&gt; will understand.&lt;&#x2F;p&gt;
&lt;p&gt;For example, if trying to keep a log of people logging into and out of an application. Tracking that information in a &lt;code&gt;struct Action{event:String}&lt;&#x2F;code&gt; is one way to do it. I personally would prefer to use a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;book&#x2F;ch06-01-defining-an-enum.html&quot;&gt;Rust enum&lt;&#x2F;a&gt;. The problem though is &lt;code&gt;serde&lt;&#x2F;code&gt; doesn&#x27;t provide a macro to support enums the way I like to implement. ( At least from what I&#x27;m aware of ).&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span&gt;(Debug)]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;pub &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;enum &lt;&#x2F;span&gt;&lt;span&gt;AuditLogAction { 
&lt;&#x2F;span&gt;&lt;span&gt;  LoggedIn,
&lt;&#x2F;span&gt;&lt;span&gt;  LoggedOut,
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Implement the &lt;code&gt;TryFrom&lt;&#x2F;code&gt;  trait on the enum.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;impl &lt;&#x2F;span&gt;&lt;span&gt;TryFrom&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;i32&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;AuditLogAction {
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;type &lt;&#x2F;span&gt;&lt;span&gt;Error &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; AuditEndpointError;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;try_from&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;value&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;i32&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;Self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;Self::&lt;&#x2F;span&gt;&lt;span&gt;Error&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Ok&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; value {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;Self&lt;&#x2F;span&gt;&lt;span&gt;::LoggedIn,
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;Self&lt;&#x2F;span&gt;&lt;span&gt;::LoggedOut,
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;_ =&amp;gt; return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Err&lt;&#x2F;span&gt;&lt;span&gt;(AuditEndpointError::AuditLogActionNotSupported(value))
&lt;&#x2F;span&gt;&lt;span&gt;    })
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Finally, implement the deserialize trait which calls the &lt;code&gt;TryFrom&lt;&#x2F;code&gt; trait and maps the error to something &lt;code&gt;Deserialize&amp;lt;&#x27;de&amp;gt;&lt;&#x2F;code&gt; can understand.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;impl&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;#39;de&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; Deserialize&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;#39;de&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;AuditLogAction {
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;deserialize&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;D&amp;gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;deserializer&lt;&#x2F;span&gt;&lt;span&gt;: D) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;Self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;D::&lt;&#x2F;span&gt;&lt;span&gt;Error&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;where&lt;&#x2F;span&gt;&lt;span&gt; D: serde::Deserializer&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;#39;de&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;i32&lt;&#x2F;span&gt;&lt;span&gt;::deserialize(deserializer)&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;    AuditLogAction::try_from(value).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;map_err&lt;&#x2F;span&gt;&lt;span&gt;(serde::de::Error::custom)
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;With everything setup, time to implement the main function that&#x27;ll run the program and convert an array of integers from JSON into enum variants.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;tokio&lt;&#x2F;span&gt;&lt;span&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;async &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; content &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;#&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;[0, 1]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;#&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; content: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;AuditLogAction&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;serde_json::from_str(content).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;  println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{content:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I&#x27;m still looking for a reason to use the &lt;code&gt;Visitor&amp;lt;&#x27;de&amp;gt;&lt;&#x2F;code&gt; pattern. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bsky.app&#x2F;profile&#x2F;ender-yoga.bsky.social&quot;&gt;Any suggestions?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Full source code can be &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jbcurtin&#x2F;serde-nibs&#x2F;tree&#x2F;main&quot;&gt;found here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Coworkers and the Double Empathy Problem Manifest</title>
        <published>2025-07-24T00:00:00+00:00</published>
        <updated>2025-07-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/double-empathy-problem-manifest/"/>
        <id>https://jbcurtin.io/philosophy/double-empathy-problem-manifest/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/double-empathy-problem-manifest/">&lt;p&gt;It&#x27;s hard to get along with people with my particular version of Autism. Non-verbalism is not easy to move out of. The amount of patience I&#x27;ve had to engage just to endure other people&#x27;s temperaments is, well. Hard to describe here; not because I can&#x27;t but because I don&#x27;t want you to empathize with my negative experiences. Instead I&#x27;d like to help you understand the constructive value of being a stone-faced autistic person that cultivates ethical awareness in an organization.&lt;&#x2F;p&gt;
&lt;p&gt;Typically people in power need to orient their communication into demanding higher standards and the unfortunate truth about my particular flavor of autism, accurately portrayed by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Thaddea_Graham&quot;&gt;Thaddea Graham&lt;&#x2F;a&gt; in her role in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Sex_Education_(TV_series)&quot;&gt;Sex Education&lt;&#x2F;a&gt;. There isn&#x27;t much room for conversation on my end because the feelings I have around something going wrong are well, intense. The slightest mistake I make could be ballooned into a false reality if I vocally discharge. A majority of people I&#x27;ve been around have zero issue reinforcing what I trigger on rather than what I work towards and that further limits my behavior to a very narrow interaction to get things done. The professional environments I&#x27;ve found myself within have cultivated and attempted to reinforce masking behaviors and I have to actively put a stop to it in delicate and diplomatic ways.&lt;&#x2F;p&gt;
&lt;p&gt;Someone was reckless enough to sit in the same room with me and talk to me about my Autism. He was encouraged to do it and this particular individual is someone who is normally kind. My attempts to stabalize the relationship were well, ignored because he was put in a position relative to me and felt as if he had some kind of authority over me. I side stepped his advances to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Psychological_projection&quot;&gt;project onto me&lt;&#x2F;a&gt; and tried to help him understand the fallacy of his behavioism. In the end he chose to cross a series of boundaries and verbally assault me serval times. Not because he felt justified to do it, but because an authority figure gave him permission to do it. These people exist and as much as I live up to a golden standard beyond-reproach when it comes to being autistic, there is always someone ready to justify they know more than I do about autism without actually having a conversation with me.&lt;&#x2F;p&gt;
&lt;p&gt;Normally called scapegoating.&lt;&#x2F;p&gt;
&lt;p&gt;He had recently put his child into ABA therapy and me knowing the landscape of Autism. I knew having a conversation with him about the negative effects of ABA therapy are, well, probably unwelcome because he&#x27;s already in a desperate situation with his child and I don&#x27;t want to get tangled into that emotional mess with him. As much as I feel for his child and the path he is forcing his child to undertake, I couldn&#x27;t help but empathize with his plight, as a parent concern for their child. In reality, he showed all the same signs as someone who is trying to function in a world where he too, has a variation of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autism.org.uk&#x2F;advice-and-guidance&#x2F;professional-practice&#x2F;ptsd-autism&quot;&gt;PTSD&lt;&#x2F;a&gt;. Indoctrinated into the belief system of power and the illusion of comfort it provides.&lt;&#x2F;p&gt;
&lt;p&gt;This is where my version of Autism makes it hard to progress in life. I&#x27;m forced into a behavior pattern which limits my communication to precise and pine-pointed comments. Most people look at me as a white-privileged male first and the conversation of equal rights or gender identity doesn&#x27;t come up. In actuality, I consider myself an advocate for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Intersectionality#Feminist_thought&quot;&gt;intersectionality&lt;&#x2F;a&gt;. Childcare however, is a very subjective subject and the only people making headway in the indurstry are the vultures willing to take advantaged of desperate parents.&lt;&#x2F;p&gt;
&lt;p&gt;Executives are hard to converse with because they have to remain engaged and focused in a field of variables that cultivate nuero-colonialism relevant behaviorism. I take great care to maintain their integrity because their reputations are earned over a series of events that have brought them the grace of good fortune as they&#x27;ve navigated the ethical landscape yet to be influenced by my more relevant narrative on autism. This is where my version of autism makes it hard to navigate relationships on that level too. I have to learn and respond to their &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Intonation_(linguistics)&quot;&gt;intonation&lt;&#x2F;a&gt; because they speak relative to a team that is inundated with nuero-colonialism. If I introduce an ethical dilemma they can&#x27;t navigate, then the most likely course is for me to be terminated and the sad truth is. The ABA narrative is at the forefront of their current understanding.&lt;&#x2F;p&gt;
&lt;p&gt;I perceive &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Controversies_in_autism&quot;&gt;&quot;The War on Autism&quot;&lt;&#x2F;a&gt; as based on a similar narrative from &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;War_on_drugs&quot;&gt;The War on Drugs&lt;&#x2F;a&gt; and has been framed into the minds of multiple generations, including my peers. Hordes of people thrive on competition in games, sports, virtual; it is a very normal these days. We get better at beating the computer and then we get better at beating each other in the games we play. When it comes to life, we are psycologically positioned to work together as long as we say and do the right things. If however the wrong series of words or the wrong series of behaviors occurs. &lt;a href=&quot;&#x2F;philosophy&#x2F;authoritative-feedback-loop&#x2F;&quot;&gt;Social Contracts&lt;&#x2F;a&gt; can break down and everything has to be renegotiated. This happens in companies as a &quot;restructuring&quot; or &quot;lay off&quot;. Numerical quantities are fantastic for knowledge pursuit when tring to understand mathmatical reasoning; but can also serve as a trial to improve when running laps around the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Track_and_field&quot;&gt;track&lt;&#x2F;a&gt;. In a competitive enivornment, qualifiers sometimes become disqualifiers when people become desperate enough to retain what little influance they have if they find themselves disagreeing with you and it can lead to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Workplace_bullying&quot;&gt;workplace bullying&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Enlightenment is not enough; fortitude in a society of people educated with the wrong narratives about autism makes things just a little bit harder. It is easy for people to pin behavior on those they disagree with. This is nuero-coloniasm at it&#x27;s worst, as it demonizes the behavior of another and reinforces the negative affects of behaviorism as a standard to live up to within a social group. Authority figure after authority figure using a person as example on how individuals should behave or should not behave is disheartening. Further by not taking into account the merits and integrity we autistic people breath every day by simply walking into the door and not upsetting the inherited balance to their ideologies and maintaining order within ourselves without suffering from mental illness.&lt;&#x2F;p&gt;
&lt;p&gt;There is hope, the reality is, every single person on this planet is good. Even the worst of the worst of us, are good; science is starting to discover all the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=esPRsT-lmw8&quot;&gt;reasons as to why someone might go bad&lt;&#x2F;a&gt;. The sad truth is, people who can&#x27;t function need to be cut from the group in order to prevent the group from imploding. What is relievant in a social group may not be relievant to you, but there is also structure in that social group that needs to be respected and if that doesn&#x27;t align with your ethics, than you should revisit your association to that social group.&lt;&#x2F;p&gt;
&lt;p&gt;What happens when the core-elements of an institution don&#x27;t align with our unique perspectives?&lt;&#x2F;p&gt;
&lt;p&gt;How do we disconnect when the institution is meant to empower us?&lt;&#x2F;p&gt;
&lt;p&gt;My non-verbalism took root in me before I became a teenager. Visiting and asking my kindergarten teacher why I wasn&#x27;t allowed to be a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Junior_safety_patrol&quot;&gt;safety patrol officer&lt;&#x2F;a&gt;. At the time, her response was complete and utter shock and I was confused as to why she looked at me that way. Searching deep within myself today, the most relevant answer is that I don&#x27;t think she was aware that I had an intelligence underneath my &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autism.org.uk&#x2F;advice-and-guidance&#x2F;topics&#x2F;behaviour&#x2F;masking&quot;&gt;Autistic Mask&lt;&#x2F;a&gt;. Furthermore the concept of an Autistic Mask wasn&#x27;t to be published for at least twenty years after I had asked her that question. In my early twenties, a series of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neuroclastic.com&#x2F;aba-strategies&#x2F;&quot;&gt;behavior manipulation techniques&lt;&#x2F;a&gt; was used to force me into a group of people that would come to hate me and it was my first social experience outside of school. It was absolutely traumatizing and produced trauma in me that I was able to measure and review using an &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.openbci.com&#x2F;AddOns&#x2F;Headwear&#x2F;MarkIV&#x2F;&quot;&gt;OpenBCI Ultracortex Mark IV&lt;&#x2F;a&gt; decades later. I managed to recover from the trauma by inventing a therapy, but at significate cost with over 20 years flopping around between activities and the constant feeling of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=9iO0wu9vyOU&quot;&gt;having to be&lt;&#x2F;a&gt; more than what I was. Truthfully I was ecstatic at what I discovered. Physical, verifiable evidence, that what I experienced is producing physical changes. ..why did it take me that long to learn how to undo the damage that was done to me?&lt;&#x2F;p&gt;
&lt;p&gt;The attempt to fix me in my early twenties is what broke me. Score one for ABA as it silenced me and pushed me into a pipeline that was suppose to improve my quality of life. In the end, I came full circle with the feelings and challenged the status quo after learning enough about myself. Before I learned what the Autistic Mask is, I was already well aware of it. I knew something was off with my ability to interact with people, because I found myself in conversations meaning to say one thing and then completely saying other things. It didn&#x27;t take me long to trace the origin of the misalignment from my early twenties and me not having access to those memories.. I had to develop an elaborate emotional map of every relationship I had with the newly minted emotional chassis I had been developing in secret for nearly a decade.&lt;&#x2F;p&gt;
&lt;p&gt;Gifted with the concept of agency in a form of innocence I hadn&#x27;t seen before. I started to build-out my emotional chassis back in the early 2000s for the first time. The amount of effort it took to assert my inner-self over your Autistic Mask is intangible and I see other autistic people suffering with the same tug of war. I believe our inability to harmonize our Autistic Mask with our innerselves is the primary reason why we have &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autism.org.uk&#x2F;advice-and-guidance&#x2F;professional-practice&#x2F;autistic-burnout&quot;&gt;burnouts&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The amount of false starts and burnouts I went through to find some kind of way to function; is&#x2F;was maddening. In time, it became clear to that the only way I could maintain is if I typed and wrote code and practiced decision making around my computer as it became my agent of creation and the mountain of software I&#x27;ve built both &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jbcurtin&#x2F;&quot;&gt;open-source&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;simple.wikipedia.org&#x2F;wiki&#x2F;Closed_source&quot;&gt;closed-sourced&lt;&#x2F;a&gt; no longer held value to me outside of the people it helped. I eventually gravitated towards an &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=rvskMHn0sqQ&quot;&gt;altruistic&lt;&#x2F;a&gt; belief system that allowed me to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Vairagya&quot;&gt;walk away from a project without attachment&lt;&#x2F;a&gt; and gifted me a sense of disentanglement. One of the first qualifiers I used to identify good executives from bad executives; executives more interested in the building a relationship with you vs executives more interested in the code you&#x27;re writing for them.&lt;&#x2F;p&gt;
&lt;p&gt;With enough of the core of my emotional chassis built and a rudimentary ethical matrix installed in my reasoning. I was now making emotional decisions without showing a hint of emotion. Scientists are looking for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.eurekalert.org&#x2F;news-releases&#x2F;1091740&quot;&gt;visual&#x2F;facial indications&lt;&#x2F;a&gt; of emotional response in Autistic children passing as &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;autism&#x2F;comments&#x2F;zjkw3n&#x2F;comment&#x2F;izwyoeb&#x2F;&quot;&gt;allistic&lt;&#x2F;a&gt;. Which is great that we&#x27;re talking about it, but the writing of the science is already biased as it passively emphasizes the importance of showing an emotional response.. which is another example of nuero-colonialism.&lt;&#x2F;p&gt;
&lt;p&gt;How would you start the conversation with an authority figure with the intention to dispel the negative effects of behaviorism?&lt;&#x2F;p&gt;
&lt;p&gt;Email me or find me on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bsky.app&#x2F;profile&#x2F;ender-yoga.bsky.social&quot;&gt;blue sky&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Liquidity of Feelings &amp; Language</title>
        <published>2025-07-14T00:00:00+00:00</published>
        <updated>2025-07-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/liquidity-of-feelings/"/>
        <id>https://jbcurtin.io/philosophy/liquidity-of-feelings/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/liquidity-of-feelings/">&lt;p&gt;There is a symmetry to language. There is a liquidity to feelings. Together and everything in between is the human experience.&lt;&#x2F;p&gt;
&lt;p&gt;Autistic &amp;amp; Allistic individuals live co-habitably on this planet and for us to develop our optimal psychology we must love, hate, endeavour, resign, and tolerate each others behavior as the root goal of our species is no longer meant to survive, but to thrive. A terse rule-system to be deployed would end in chaos as everyone would start to cut each other off. A more permissive rule-system allows us to learn from our mistakes and become better. As a society, we have whole systems put in place to support individuals struggling with their mental health issues. At the end of the day, those struggles are limited to self observation and the representation of those issues are hard to interpret by observers of the behavior&lt;&#x2F;p&gt;
&lt;p&gt;Science is more permissive and naturally a terse rule-system follower will learn from the thought experiments of those more enlightened in their pursuits of knowledge. Which is why science will continue to thrive, it is embedded into our nature as humans. Our natural curiosity cannot be extinguished, no matter how terse or difficult the environment may be. People following terse rule-systems will try to steal from you, and they will call it that, but the altruism of science is that the information is shared freely. The method though, that takes time to learn and to practice. Don&#x27;t mistake competition and adversarial growth as an enemy to your agency&lt;&#x2F;p&gt;
&lt;p&gt;What is it like being Autistic in a world setup for Allistics? Well, its actually quite pleasant.. once I got a handle on the inversion of feelings relative to allistics, I started making progress. The hard part was figuring out which rules I could break and which ones I had to leave alone. Further more, figuring out which rules I would broadcast to show mutual understanding that respect goes both ways. The human element is this, we all fear reprimand and we all fear our mistakes will be remembered, as much it might haunt us. The truth attached to those mistakes, only exist within us and serve as a standard on how not to repeated. We need to build an emotional chassis around those mistakes as much as we need our drive to thrive. An imbalance can occur when those who are afraid to lose everything are assimilated into shame culture and facilitate the development of terse rule-systems to sustain&lt;&#x2F;p&gt;
&lt;p&gt;Humans make mistakes and its that fallibility that makes us so figgin lovable because we empathize with those mistakes just as much as we empathize with so many other emotions and that is why the world works today. For the majority of people out there, love is our primary driver.. however it is often not talked about because it is easily corruptible and so we protect it. We protect ourselves by not talking about it as much as we could talk about it&lt;&#x2F;p&gt;
&lt;p&gt;There isn&#x27;t a clear guide on how to set standards for anyone. Timeout&#x27;s are the most common thing, but not something that can be done after the person becomes a biological adult. I firmly believe people need to feel included in every regard, but I also hold the belief that if someone is to be included, they need to know how to remain quiet and considerate to the group. At the same time, that person needs to recognize that their participation in the group is only permissible because they follow the social rules that go along with it.. and this is where people, not just autistic people, have trouble interpreting information being spoken&lt;&#x2F;p&gt;
&lt;p&gt;Autistic people are simply the marginalized group bringing it to the forefront of everyone&#x27;s attention&lt;&#x2F;p&gt;
&lt;p&gt;I raise the question. If autistic behavior is an example of what not to do.. then how do we as a group of people, become okay with our behavior, without falling victim the the fallacy of autistic supremacy?&lt;&#x2F;p&gt;
&lt;p&gt;Think about the implications of that question for a moment, a thought experiment, if you will?&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Passionate, yet Sensitive</title>
        <published>2025-05-05T00:00:00+00:00</published>
        <updated>2025-05-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/passionate-yet-sensitive/"/>
        <id>https://jbcurtin.io/philosophy/passionate-yet-sensitive/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/passionate-yet-sensitive/">&lt;p&gt;Finding my inner voice and learning to listen to it has given me the insights I&#x27;ve needed to continue functioning. &lt;a href=&quot;&#x2F;philosophy&#x2F;molding-phases&#x2F;&quot;&gt;The world once seemed hostile to me&lt;&#x2F;a&gt;. It wasn&#x27;t until I said enough is enough, did I take the time to learn a number of methods to test and improve my quality of life. Through utilizing of the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sciencebuddies.org&#x2F;science-fair-projects&#x2F;science-fair&#x2F;steps-of-the-scientific-method&quot;&gt;scientific method&lt;&#x2F;a&gt;, I challenged the voices of my peers&lt;&#x2F;p&gt;
&lt;p&gt;The voice of god is commonly used in meditation and religion text. To me, interpreting that phrase, the voice of god, is more akin to a parent instructing a child on how to behave. It is my belief that all parents want their children to prosper regardless of the upbringing they infuse into their child&#x27;s psychology. A generally accepted idea in America, at least the version of America I grow up in, is that your child should out-grow your teachings. Internally, when I think about teaching my children, I think primarily about giving them the hardest learned lessons I&#x27;ve learned, in the correct temperance relative to the mistakes they made. They have to learn how to prosper on their own, through following their own interests&lt;&#x2F;p&gt;
&lt;p&gt;Whether or not a god exists, as defined by Christianity, Judaism, Islam, Hinduism, Shintoism, Buddhism, or Taoism, is beyond my comprehension. What is within my comprehension is the ability to emulate and characterize myself in the stories I&#x27;m told about a god in a meditative or religious text. Yes, I think a lot about following my own interests vs following what others tell me to do. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autism.org.uk&#x2F;advice-and-guidance&#x2F;topics&#x2F;behaviour&#x2F;masking&quot;&gt;You either do too, or you&#x27;re still masking it through life, in my opinion.&lt;&#x2F;a&gt;. The really lucky of us, manage to develop a vocation around their collective interests. Through like mined individuals identifying each other, crowds form almost effortlessly&lt;&#x2F;p&gt;
&lt;p&gt;The transition from listening to a single voice in the crowd to feeling the momentum of the crowd is insummarizable, it must be experienced. For a crowd to prosper, those with the most historical knowledge must take on the duty to remind and reward others within the crowd of the accomplishments the crowd has made together. The prosperity of the crowd is directly reflected by the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Emotional_intelligence&quot;&gt;Emotional Intelligence&lt;&#x2F;a&gt; of the individuals within the crowd. Through promoting our peers, we strengthen our internal voices collectively and we intuitively develop a set of standards to live up to. By criticizing our peers, we more often repeat mistakes from our past and have to relearn. Through holding each other accountable, we prosper by preventing deterioration&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Reversing the negative effects of ABA Therapy</title>
        <published>2025-04-10T00:00:00+00:00</published>
        <updated>2025-04-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/molding-phases/"/>
        <id>https://jbcurtin.io/philosophy/molding-phases/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/molding-phases/">&lt;p&gt;This is going to be, an emotional article&lt;&#x2F;p&gt;
&lt;p&gt;Molding Phases - Reversing the negative effects of ABA Therapy&lt;&#x2F;p&gt;
&lt;p&gt;We find our way through school, some of us prosper and some of us struggle. Those who are struggling and are incapable of being reached are often left behind. I am one of those strugglers and the therapy used to get through to me was ABA.. but it was incomplete and I had forgotten about the experience. The people performing ABA Therapy had the best of intentions for me, but the application of it left the wrong emotional imprint and I muted myself out of self-preservation since I perceived the environment I was within as hostile&lt;&#x2F;p&gt;
&lt;p&gt;More than three decades passed and the words of the therapy continued to trigger within me and the lack of continuity in my life left me in repetitive trauma and would influence my behavior until I developed a good enough self-awareness to empirically study and test my own life experience, all internally&lt;&#x2F;p&gt;
&lt;p&gt;We constantly talk about changing  and there are a multitude of frameworks out there in order to proved guidance in how to change for the better.. and that is the narrative we follow. Changing the things we say is easy, but changing internal thought processes takes a different set of tools..&lt;&#x2F;p&gt;
&lt;p&gt;..is where the narrative of change would benefit us, as we humans glide through life not necessarily looking for connection, but looking for a way to cohabitate and collaborate with each other through bids for connection&lt;&#x2F;p&gt;
&lt;p&gt;An incorrect emotional imprint can make it nearly impossible to connect with anyone. As thought is the most private experience we can have. Turning thought into action, into behavior, is an expression of a very public thought, of which we have learned from each other ( think about that phrase for a moment )&lt;&#x2F;p&gt;
&lt;p&gt;My first social experience out of my house was emotionally devastating and it left a scare deeper than any other I had, previously. I found myself again, on Autistic Twitter, reading the very statements used to demonize me in the eyes of my caretakers were the exact signatures I found to re-align my empathy to how I really felt about myself. From a young age, I was separated, first naturally through being different and bullied and then intently by my caretakers because they internalized that I miss-behaved constantly&lt;&#x2F;p&gt;
&lt;p&gt;I was one of those Autistic Individuals that didn&#x27;t mind getting loud and scaring people who upset me, away, because, well, it was uncomfortable. No, the police was never called on me, but I was threatened quite a couple times. Due to the incorrect emotional imprint from ABA Therapy with words such as Context, Behavior, Social Cues, Task, and so much more. I was essentially a modern day Huckleberry Finn in the way I spoke, but the negative emotional imprint was cultivated by my parents because they had unconsciously misconstrued the meaning of the words and the reverberations of the words in the echo-chamber I existed within triggered my mutism&lt;&#x2F;p&gt;
&lt;p&gt;My unrealized suffering was further compounded with a terrible reputation, which would permit everyone I came across to use less useful words with me. Teaching me Shit, Fuck, Ass, as if it was part of everyday life and those words would be woven into my psychology. It is kind of surreal when I have a deep faith inside of me and the words I use to articulate my feelings about it are all obscenities&lt;&#x2F;p&gt;
&lt;p&gt;I became self-aware of this behavior in myself and used Computer Science to rewrite a majority of my Operational English and it worked for a long time. However, the most common criticism I&#x27;d come across, would be that my language was to advanced for my peers. Like the smart kid in middle school talking about special relativity or free will. I contemplated the application of computer science to my behavior and made the appropriate adjustments when necessary, and it worked for a while&lt;&#x2F;p&gt;
&lt;p&gt;I started noticing limitations in the way I could interact with people. I would over exert myself and not know when to pull back. I would constantly apply myself and the only consistent behavior I would perform is the application of changing myself over and over and over and over and over and over and over and over.. ..until I stopped&lt;&#x2F;p&gt;
&lt;p&gt;I suddenly had life experience and a mountain of information to shift through. Thinking back to my high-school career, I sat with my counselor and listened to the importance of setting up a 5 year plan for my professional career path.. which seemed to be going no where at the time and I asked the hard question: Why?&lt;&#x2F;p&gt;
&lt;p&gt;Like most people, I looked within to see what I could offer the world in return for its continued co-habitation relative to my behavior and the functions I knew how to perform. I had example of good behavior and bad behavior, but what I couldn&#x27;t reconcile thought-wise, was why would I be seeded with responding to things negatively whenever I engaged with an activity. What would happen if I forced a positive response?&lt;&#x2F;p&gt;
&lt;p&gt;In my early twenties, I went through an experience in my life that left me emotionally traumatized and through my desperation of wanting to have a single friendship. I allowed myself to be used as a tool for people to talk negatively and set me as negative example.. My life experience reinforced this perception time and time again, until I started asking questions. People were talking about me in a negative way, and when time came for them to be honest, they shared with me their honesty and it crushed me because the world view I was taught, yet again, was incorrect.. all thanks to the imperfect application of ABA Therapy and the scare from its emotional imprint I had completely forgotten about, but was constantly reminded of&lt;&#x2F;p&gt;
&lt;p&gt;The emotional imprint, or the impact of that ABA Therapy experience, would constantly reoccur in my life without warning and without causation. Completely disconnected in my mind from any one relationship, it would become stark reminder of warning, but it was actually meant as help&lt;&#x2F;p&gt;
&lt;p&gt;When in isolation, I found myself at ease with everything and was able to finally relax. Over time, as I got used to my isolation in my late twenties and early thirties, I could, for the first time in decades, feel my emotional state again. The last time I had felt this, was in my Middle School and High School days. It was liberating and it allowed me to emotionally connect with myself again and I started making naturally empathic decisions&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately how to circumvent autistic masking is not well understood. The outer-layer of myself behaving one way and the inner-layer behaving another way, over time I would teach my inner-layer to temper itself and gain control over my outer-layer and the apparatuses I used to emerge from my autistic masking was a set of levers and controls to make alterations and adjustments to my behaviors. It became constant for me to pull on these levers and perform trial and error to see what was deemed good behavior and what was deemed bad behavior. I established boundaries and put myself into a box and put a label on it. The then I made a second box and put a label on that one, and a third, fourth, and fifth box.. ..all with labels&lt;&#x2F;p&gt;
&lt;p&gt;Overtime I discovered that every-time I exerted a force on my outer-layer (autistic masking), more genuine thought would be concisely articulated for others to interact with. Some bad, some good. It wasn&#x27;t pretty, like a baby crying out.. I was using words to make sense of the world in a very emotional way to turn my language to an exacting frequency that would stabilize me to talk&#x2F;interact with Nureo Divergent and Nuero Typical minds, unilaterally&lt;&#x2F;p&gt;
&lt;p&gt;James Clear&#x27;s Atomic Habits was the first book I read that described the process I had discovered in myself, to circumvent my autistic masking (outer-layer) and I quickly discovered that the core difference between myself and others is that I&#x27;ve normalized submissive social behavior in myself rather than promoting empathic actions. I was always charismatic, but I could never maintain a charismatic state for a long period of time because I had absolutely zero example of how to develop continuity with people&lt;&#x2F;p&gt;
&lt;p&gt;Through my software, I developed healthy habits, completely unregulated. My peers would compliment my code and I would respond with silence because I didn&#x27;t know how to take a compliment. They&#x27;d eventually want me to leave the team and I&#x27;d be confused as to why, they always thought my code contributions were worth complements. It didn&#x27;t occur to me, that my lack of response was something they had issue with. They didn&#x27;t know how I thought about them..&lt;&#x2F;p&gt;
&lt;p&gt;.. that is where I started developing continuity&lt;&#x2F;p&gt;
&lt;p&gt;It was about this time where I knew I needed to take time off, but due to my inability to communicate effectively, I was in a financial position which limited my ability to take long periods of time off from work. Therefore I had to work.  I resolved to get better at connecting with my colleagues, but before I could. I did a self assessment of my own emotional state to figure out my own emotional needs and what I discovered is that every human on this planet is emotionally driven and that we all have the capacity to feel the same way about something. Not only are we capable of unilateral empathy we&#x27;re capable of connecting with each other using a minimum set of words and actions. The problem which occured with my ABA Thearpy is that, the community I was apart of tried to hold me accountable for my behavior when my behavior wasn&#x27;t even wrong to begin with. Which spawned the trama loop that went on for decades. People would hold me accountable and I would spirl at the slightest offence and eventually, even my caretakers gave up&lt;&#x2F;p&gt;
&lt;p&gt;Here is how I reversed the trauma from ABA Therapy&lt;&#x2F;p&gt;
&lt;p&gt;I started rebuilding my perception with the following axioms&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;All animals are naturally driven to cohabitate&lt;&#x2F;li&gt;
&lt;li&gt;What differentiates Humans from Animals is our ability to make a very complex set of sounds&lt;&#x2F;li&gt;
&lt;li&gt;Our big brain provides the ability to comprehend complex patterns&lt;&#x2F;li&gt;
&lt;li&gt;We share information as a hive-mind and depend on each other, even when divided&lt;&#x2F;li&gt;
&lt;li&gt;We developed written language to store information for longer periods of time&lt;&#x2F;li&gt;
&lt;li&gt;Understanding our own Emotional Intelligence is essential to properly sorting information&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;My experience quickly turned into empirical observations and I started to sort my life&#x27;s experience into buckets of actionable habits, regaining control of my behavior and reasserting my command over my own body. I quickly discovered I could alter my own behavior through trigging  a different set of habits rather than shutting down. Through triggering these different habit sets, I discovered that people reacted differently, and slowly I, I discovered that the people around me responded to me positively. Some excited, some perplexed, as my stoicism was well known.. I suddenly showed, an emotion.. and it was correctly interpreted&lt;&#x2F;p&gt;
&lt;p&gt;People gasped and I&#x27;ve convinced myself that it wasn&#x27;t about me, even though the timing was exact to indicate it was. Still, it was a notable event. I amended to my perception, the following axioms&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Most people react and interact to a thing immediately&lt;&#x2F;li&gt;
&lt;li&gt;Those of us who had a negative experience with that thing, become uncertain with how to react&#x2F;interact immediately&lt;&#x2F;li&gt;
&lt;li&gt;Those of us who are unprepared for an experience, often react in a manor which could foster discontinuity&lt;&#x2F;li&gt;
&lt;li&gt;Most people are quick to point this out&lt;&#x2F;li&gt;
&lt;li&gt;Those of us naturally become more forward thinking in our responses&lt;&#x2F;li&gt;
&lt;li&gt;Neuro Divergent and Neuro Typical Individuals who think fast, burnout&lt;&#x2F;li&gt;
&lt;li&gt;Thinking &amp;amp; moving to fast will make us fall forward from our own inertia&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I spent years struggling, trying to find the right timing on how to activate my different behaviors in a socially compliant way that didn&#x27;t erode my identity. As my self awareness increased, I added the following axioms&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;People are self-aware of their own behavior and all have the same capacity for change&lt;&#x2F;li&gt;
&lt;li&gt;We all use levers and buttons to effect change in our own behavior&lt;&#x2F;li&gt;
&lt;li&gt;Truistic people are commonly nicer to you&lt;&#x2F;li&gt;
&lt;li&gt;Tempered people are commonly kinder to you&lt;&#x2F;li&gt;
&lt;li&gt;Uncomfortable people feel as though they have to interact with you, but don&#x27;t know how to&lt;&#x2F;li&gt;
&lt;li&gt;I get to choose the intensity of every emotional connection I make with someone&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is how I reversed negative effects of ABA Therapy in my life. Not through repetition or re-exposure and hoping for the best, but through hard and meticulous effort because you have to command yourself to activate.. even when you don&#x27;t want to&lt;&#x2F;p&gt;
&lt;p&gt;Taking small incremental steps, is how we improve the quality of life for everyone on our planet&lt;&#x2F;p&gt;
&lt;p&gt;Once you commit to &quot;it&quot;, pursue it, improve it, mold yourself for it. Don&#x27;t apologize for being autistic&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>An Authoritative Feedback Loop</title>
        <published>2025-03-12T00:00:00+00:00</published>
        <updated>2025-03-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/authoritative-feedback-loop/"/>
        <id>https://jbcurtin.io/philosophy/authoritative-feedback-loop/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/authoritative-feedback-loop/">&lt;p&gt;Summarizing the Autistic Experience is futile; and I&#x27;m still going to attempt it through understanding my own behavior and the choices I&#x27;ve made to get to this stage in my life. Self awareness is essential to living with the right emotional attachments and removing the wrong emotional attachments. I purposefully minimize the number of choices I make every day in order to keep track of all the social rules set forth by society&lt;&#x2F;p&gt;
&lt;p&gt;Feedback loops created from our behaviors can result in uncontrollable &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=DtWaDLO2qUc&quot;&gt;ripple effects&lt;&#x2F;a&gt; and highlights how emotional consciousness can be transmitted almost unconsciously, until we become more self aware of it. The effects of which have led me to experience multiple facets of life, from being gleefully happy to chronically depressed, while talking with other people. People like to watch my face while I watch their behavior, in hopes of understanding what kind of emotion I&#x27;m exhibiting and they&#x27;re left astonished that I can have a blank expression while I&#x27;m feeling a whole range of emotions.. and I think that is a key component about the Autistic Experience Neurotypicals(NT) can&#x27;t easily grasp. We, including NT, are capable of feeling more than one emotion at a time. Joy&#x2F;Sadness, Hope&#x2F;Despair, and so much more&lt;&#x2F;p&gt;
&lt;p&gt;The focus of intercommunication between the Autistic Community &amp;amp; Neurotypical Community is through empathy and is a great place to start because in every action we take, we must stay bolted to our emotions as we grow our societies; allowing empathetic connections and to feel for one another while also thanking our ancestors for their contributions to improve our quality of life through their ideation of social rules we must follow&lt;&#x2F;p&gt;
&lt;p&gt;Many Autistic &amp;amp; Neurotypical individuals have attempted to make a connection with me throughout my life, but in the end I would not be able to sustain the relationship because of the way the connections turned into expectations from both sides. Through an expression of kindness, someone attempts to make a connection with me and we connect empathetically. At some later point in time, that someone who showed that kindness corrects their behavior when an authoritative figure becomes involved, dropping the empathic social contract between that person and I. In result, that behavior is locked away again, as the lighting strike of an authority figure communicating a standard supersedes the empathetic exchange. This is commonly referred to as &quot;power&quot;. From within the social group, that &quot;power&quot; keeps people safe, but when you&#x27;re outside the safety of that group.. you don&#x27;t receive the same protections and thats where we autistics find ourselves. With enough of these exchanges, it could have an accumulative effect and dove tail into causing &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autism.org.uk&#x2F;advice-and-guidance&#x2F;professional-practice&#x2F;double-empathy&quot;&gt;miss-alignment of empathy&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Brining it into example, I frequent coffee shops and I&#x27;m very particular about those coffee shops. There are pre-existing social rules that I&#x27;m very much aware of and I abide by them. When someone, through the intent of kindness breaks one of those social rules and I respond in kind to them. I have to be prepared for the inevitable correction of an authority figure to affect the empathic social contract between the person showing me kindness and me sharing gratitude in response&lt;&#x2F;p&gt;
&lt;p&gt;I only drink half of my coffee and I do that for a very particular reason. Therefore, I take the rest home and store it in the fridge for the next day. ( I&#x27;m a fan of cold brew coffee ) About two or three weeks back, a barista offered to take my cup for me before I left the coffee shop. I don&#x27;t know why he offered, but he made the offer and it was interpreted as a kindness. His body language and smile showed kindness and therefore I responded with gratitude, taking the opportunity to share empathy with him. Some time had passed and this new behavior of mine became more consistent, and the feelings from the original act of kindness and exchange of empathy faded. Only the behavior remained and my autistic brain accepted it as a new social rule without running the behavior against my logical framework for social rules relative to authority. I simply basked in the warmth of the mutual empathy. Then I performed the new behavior with an authority figure and it turned from an exchange of empathy into an expectation I had of the establishment. Within days the behavior was corrected in the barista by the authority figure and today I went back to get another coffee, only to be knocked by the correction. The social contract of empathy I had with the barista was abolished. Ouch&lt;&#x2F;p&gt;
&lt;p&gt;Going forward, I&#x27;ll continue to bring home and store my coffee in my fridge. I&#x27;ll also remember the barista&#x27;s empathetic social contract and remember it fondly. My response to his denial of taking my cup, was a kindness on my end. Letting him know, I understand things have changed again and that the empathetic social contract we had is now voided and through my kindness and their mistake, I showed mercy to release them from the expectation they set with me originally&lt;&#x2F;p&gt;
&lt;p&gt;To me, the matter is closed.. but how can I be certain the barista understood my response as merciful? I can&#x27;t, and that is in my opinion, the cosmos of misinterpretation we call the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autism.org.uk&#x2F;advice-and-guidance&#x2F;professional-practice&#x2F;double-empathy&quot;&gt;Double Empathy Problem&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If the exchange was correctly interpreted, than its closure for both sides. In the most non-verbal way possible and all I have to do is take my cup of coffee home with me the next time and not gesture to hand it to him again, reinforcing I understood what was communicated to me&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Nuero-typical Hypoxia</title>
        <published>2025-03-05T00:00:00+00:00</published>
        <updated>2025-03-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/nuerotypical-hypoxia/"/>
        <id>https://jbcurtin.io/philosophy/nuerotypical-hypoxia/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/nuerotypical-hypoxia/">&lt;p&gt;Generally, socially acceptable, to let people know the reason as to why I would take time off and cancel meetings while still staying active at work through pushing code. Like many Autistic Individuals, I&#x27;ve been reprimanded for my behavior and word selection. It had taken a mental toll on me over the years until my naturally inquisitive nature took over. Through considering multiple facets of lexical and behavioral representation of myself, I&#x27;ve managed to pin down some behaviors which occur in myself that lead to Nuero-typical Hypoxia&lt;&#x2F;p&gt;
&lt;p&gt;When I&#x27;m at a party, talking with someone for a really long time sharing a lot of information. I was taught how to do this by other Neuro-divergent individuals who were also experiencing social acclimation issues into a group of people. As I leveled-up my self-awareness, I began to notice what I spoke about, didn&#x27;t have any emotional or vocational relevance to my world view and I was simply syndicating information from someone who made me feel a particular way. This too, was a learned behavior due to my lack of continuity in relationships with people&lt;&#x2F;p&gt;
&lt;p&gt;I like to think most autistic children negatively affected by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autismspeaks.org&#x2F;applied-behavior-analysis&quot;&gt;ABA therapy&lt;&#x2F;a&gt;, like I was. Developed a world view which was much more stark than the presentation of struggles provided by their peers. Rather than being taught how to connect with my peers through empathy, I was taught how not to repeat mistakes through criticism and the result of it was a hotchpotch of life lessons which would continue to dominate my internal governance until I built something better. As the words from ABA therapy faded, the emotional state and trauma remained.. dormant to be reawakened by someone passing by in casual conversation&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Compassion_fatigue&quot;&gt;Compassion fatigue&lt;&#x2F;a&gt;, when I just gave to many shits about another person or something else and I couldn&#x27;t self-regulate myself into a normal state of governance afterwards. This was a double bladed sword for me to fall onto as my internal governance was cultivated by parents ashamed of my behavior without feeling content in their own life lessons from their childhood. It&#x27;s common in psychology to declare that parent(s) have messed up the development of a child.. but what about the parents? It&#x27;s convenient to point to your parent(s) and say they don&#x27;t know what their doing or what they did; and at which point do you take on the responsibility of their failure and make it your own to correct?&lt;&#x2F;p&gt;
&lt;p&gt;Nuero-typicals in general, just talking with them. Takes its toll, and I&#x27;m sorry.. but there is a bio-ware limit to my presentation of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autism.org.uk&#x2F;advice-and-guidance&#x2F;professional-practice&#x2F;double-empathy&quot;&gt;Nuero-typical language patterns&lt;&#x2F;a&gt;. On the flip side, I could talk for hours with someone who is autistic and not feel any sort of fatigue.. but that too is a double bladed sword for me to fall onto because I have to eventually switch back to Nuero-typical language patterns&lt;&#x2F;p&gt;
&lt;p&gt;There is no socially acceptable way to describe this, yet. There is presentation for me to consider and simply dumping my information on people and hoping they organize my information in a meaningful way that benefits me is expecting to much. Therefore I resolve to isolate myself for a couple days as I recuperate and work through thought-product relative to my life experience and produce language meant to inspire my peers to grow out of these behaviors&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Reducing Traumatic Friction</title>
        <published>2025-02-26T00:00:00+00:00</published>
        <updated>2025-02-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/philosophy/reducing-traumatic-friction/"/>
        <id>https://jbcurtin.io/philosophy/reducing-traumatic-friction/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/philosophy/reducing-traumatic-friction/">&lt;p&gt;Its hard to modulate ones emotional state and the pursuit of bringing yourself out of a traumatic experience is a process. Learning how to reduce friction with others can go along way towards correcting the state of affairs in your life and compartmentalizing your emotions is very much a healthy thing to do, because after all, trauma is trauma and the last thing we want to do is rationalize and justify the spread of trauma from ourselves to others&lt;&#x2F;p&gt;
&lt;p&gt;When I was young, the psychological abuse was extensive. So extensive, it has followed me far into my adulthood where I found the only possible solution to my problems was through &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Meditation&quot;&gt;meditation&lt;&#x2F;a&gt; and strict moderation of pharmaceutical application. Throughout my life, I&#x27;ve been searching how to fill a hole in my life and about a decade ago is when I found the answer.. and it wasn&#x27;t easy. Resolution for my own emotional state was in constant flux and I figured out internally that my memories were disjointed and lacked &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;psychcentral.com&#x2F;health&#x2F;continuity-psychology#definition&quot;&gt;continuity&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I had convinced myself I was &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;paautism.org&#x2F;resource&#x2F;understanding-low-self-esteem&#x2F;&quot;&gt;unworthy&lt;&#x2F;a&gt; and I was okay with that because I didn&#x27;t have any immediate goals I wanted to achieve in life. Being content with myself and the best version of myself and just being a good person to people was good enough for me. Over time I found myself gravitating towards writing &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Software&quot;&gt;Software&lt;&#x2F;a&gt; and interpreting the concepts into an ideology. In more personal aspects of my life, I gravitated towards &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Nichiren-sh%C5%AB&quot;&gt;buddhism&lt;&#x2F;a&gt;. Picking all the best parts of it and non of the bad parts of it. My mind, exhausted from &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;smallmatterofsustainability.medium.com&#x2F;voluntary-vs-involuntary-suffering-4075eb1188c7&quot;&gt;involuntary suffering&lt;&#x2F;a&gt;; I latched on to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Cognitive_dissonance&quot;&gt;Cognitive Dissonance&lt;&#x2F;a&gt; and would immediately forgive myself and think nothing of the consequences because all humans, regardless of emotional state, have bad habits. I would later learn to recognize this as &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.autism.org.uk&#x2F;advice-and-guidance&#x2F;topics&#x2F;behaviour&#x2F;masking&quot;&gt;autistic masking&lt;&#x2F;a&gt;. What I didn&#x27;t realize, is my feelings of unworthiness were unconsciously influencing my decision making to where I allowed someone into my life and pushed my boundaries to a point where I could recede into myself and exist, but I couldn&#x27;t develop friendships as a result of it. To prevent myself from doing anything wrong, I became an isolationist.&lt;&#x2F;p&gt;
&lt;p&gt;I eventually told myself I had been taught all the bad things in life because I was autistic, and different, and all the feels which came with it. My &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;White_privilege&quot;&gt;privilege&lt;&#x2F;a&gt; allowed me to get through most of my life without ruffling feathers.. still, it bothered me. I considered myself a friend to everyone and I couldn&#x27;t figure out how to be friendly with anyone and so I turned my involuntary suffering into voluntary suffering and opened my eyes, ears, and mind to listen to every single person who crossed my path. A &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Torii&quot;&gt;gate&lt;&#x2F;a&gt; in my mind and sorted information relative to how I really felt rather than how I was taught to feel.. and without even knowing what autistic masking was, I was already circumventing autistic masking within myself and learning the basics of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mindfulness&quot;&gt;mindfulness&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;From an early age, I could see my words caused suffering for others and those observations contributed to my &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Nonverbal_autism&quot;&gt;non-verbalism&lt;&#x2F;a&gt;. Having been taught such a mess-of-a-lexicon while growing up and not knowing the repercussions of using such a messy lexicon. People often categorized me in the most heinous category and I would not notice it because it seemed normal to me. My thoughts remained unregulated and forgiving and I simply reserved to keep to myself out of silent protest&lt;&#x2F;p&gt;
&lt;p&gt;Software engineering turned into my haven as the emotional information that often comes along with words were never present in documentation or programs and I began to read &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;topics&#x2F;open-source&quot;&gt;open source code&lt;&#x2F;a&gt; in droves. For the first time since playing video games, I performed actions and developed the ability to theorize and learn through &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Trial_and_error&quot;&gt;trial and error&lt;&#x2F;a&gt; and I, like most other privileged men with lingering emotional damage, developed &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Survivorship_bias&quot;&gt;survivorship bias&lt;&#x2F;a&gt; and built a glass house on top of that foundation&lt;&#x2F;p&gt;
&lt;p&gt;There is a sense of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wiktionary.org&#x2F;wiki&#x2F;foundership&quot;&gt;foundership&lt;&#x2F;a&gt; which comes along with software engineering. It is a humiliative experience and turns individuals from learning history into recreating history through the application of developing software. It incorporates first learning and then directly applying that knowledge, we read documentation and develop a program to preform a particular &lt;del&gt;action&lt;&#x2F;del&gt; computation.. and thats it. That&#x27;s all it should be.. however with the lingering emotional damage, its easy to self-medicate using software engineering and develop an ideology without considering the consequences of what it really means to burn down preexisting &lt;del&gt;software&lt;&#x2F;del&gt; infrastructure&lt;&#x2F;p&gt;
&lt;p&gt;We develop software to accomplish a specific goal we have imagined. Either to learn more about it or to automate it. The process is the same. We think about it and we create it. Most of the creative effort relies in developing the program and less in developing the idea and that is, in my opinion, a seed for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Confirmation_bias&quot;&gt;confirmation bias&lt;&#x2F;a&gt;. We don&#x27;t call it that, but the behavior we performed writing software can be easily transplaced into accepting confirmation bias and when we get used to that pattern and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Caetextia&quot;&gt;tell ourselves its good&lt;&#x2F;a&gt;, we fail to compartmentalize it and begin looking for that patterning using our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Human_brain&quot;&gt;neural net&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When that feel-good feeling of foundership jumps from the domain developing software into the domain of molding society &amp;amp; recreating policy, it starts edging on pre-existing history already learned from mistakes past. Foundership often without temperance is often tyranny without limits and the kind of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=XkFKNkAEzQ8&quot;&gt;governance which is occurring in the United States at this time&lt;&#x2F;a&gt; is celebrating all the [wrong things]. The core difference between the Biden administration and the Trump administration joint sessions of Congress is that the Biden administration focused on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;2021_Joe_Biden_speech_to_a_joint_session_of_Congress#Security_and_public_health_measures&quot;&gt;progressive topics.&lt;&#x2F;a&gt; While the Trump administration focused on claiming there was a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;2025_Donald_Trump_speech_to_a_joint_session_of_Congress#Speech&quot;&gt;peace agreement for the war between Ukraine &amp;amp; Russia&lt;&#x2F;a&gt;; when there really &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=kEOv4x_FIsc&quot;&gt;wasn&#x27;t any diplomacy established&lt;&#x2F;a&gt; between our two countries.&lt;&#x2F;p&gt;
&lt;p&gt;If we forget our past failures and don&#x27;t allow ourselves to think and learn from those failures, the pattern we&#x27;ve identified as good can be transplaced from tool building into society building and we have to relearn all those hard lessons again and if we&#x27;re not paying attention, we could start suffering without realizing it.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s not that far of a jump into believing a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;5RpPTRcz1no?si=bAGyjBN3ItlTIpFB&quot;&gt;natural social hierarchy is a good thing&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It should have been Bernie Sanders VS John McCain in 2016 or Kamala Harris VS Sarah Palin in 2024 in my opinion. Both sides need to improve their playbooks. When AOC becomes a presidential candidate, the republicans will need to find someone in her &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Heavyweight&quot;&gt;weight class&lt;&#x2F;a&gt; to compete.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Secure Connections to PostgreSQL</title>
        <published>2025-01-06T00:00:00+00:00</published>
        <updated>2025-01-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/software-engineering/securing-postgresql/"/>
        <id>https://jbcurtin.io/software-engineering/securing-postgresql/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/software-engineering/securing-postgresql/">&lt;p&gt;Securing PostgreSQL using &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mutual_authentication&quot;&gt;mutual authentication&lt;&#x2F;a&gt; over &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Transport_Layer_Security&quot;&gt;TLS&lt;&#x2F;a&gt; commonly known as &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cloudflare.com&#x2F;learning&#x2F;access-management&#x2F;what-is-mutual-tls&#x2F;&quot;&gt;mTLS&lt;&#x2F;a&gt; using a Self Signed Certificate Authority with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Strong_cryptography&quot;&gt;good enough encryption&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The importance of implementing encryption for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Data_in_transit&quot;&gt;data in transit&lt;&#x2F;a&gt; is a basic requirement for GDPR &amp;amp; HIPAA. Through maintaining &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.splunk.com&#x2F;en_us&#x2F;blog&#x2F;learn&#x2F;cyber-hygiene.html&quot;&gt;good security hygiene&lt;&#x2F;a&gt; even if you&#x27;re not interested in compliance, you&#x27;re reducing the chances of data being stolen. Rolling out a Certificate Authority is not an easy task. There are multiple levels to consider. For the purposes of this article, I&#x27;ll show how to configure a Self Signed &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Root_certificate&quot;&gt;Root CA&lt;&#x2F;a&gt;. You could take in further and install the Root CA and Intermediate CAs into &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;manpages.debian.org&#x2F;buster&#x2F;ca-certificates&#x2F;update-ca-certificates.8.en.html&quot;&gt;Linux&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;windows-hardware&#x2F;drivers&#x2F;install&#x2F;trusted-root-certification-authorities-certificate-store&quot;&gt;Windows&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ca-architecture&quot;&gt;CA Architecture&lt;&#x2F;h3&gt;
&lt;p&gt;Certificate Authority architecture is not as complicated as it might sound. There are however significant security considerations to consider when deciding how services will access adjacent or adjoining services. mTLS between services provides two protections, first by enforcing TLS 1.2&#x2F;1.3 it reduces the chances of information being leaked. The second the server will authenticate the client when it connects and verify the connecting cert is valid relative to the Root CA. Those two protections are enough to provide good enough security for data in transit. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rfc-editor.org&#x2F;rfc&#x2F;rfc2818#section-3.1&quot;&gt;Host Name Verification&lt;&#x2F;a&gt; can be used to further increase security between services; more on that later when talking about Common Name and Subject Alt name.&lt;&#x2F;p&gt;
&lt;p&gt;CA Architecture has a Root CA protected on a machine only accessible to the DevOps utilities requesting and distributing certificates, a machine only a Developer can access manually, or inside a Cloud HSM service. There is zero necessity to have the RootCA directly exposed to the internet. If however that is the case.. you should strongly consider removing the RootCA from anything that can be accessed through a public IPAddress&lt;&#x2F;p&gt;
&lt;h4 id=&quot;2-tier-ca-architecture&quot;&gt;2 Tier CA Architecture&lt;&#x2F;h4&gt;
&lt;p&gt;2 Tier Architecture consists of a RootCA and many service Certificates. In the example below, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.postgresql.org&#x2F;&quot;&gt;PostgreSQL&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;valkey.io&#x2F;&quot;&gt;Valkey&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rocket.rs&#x2F;&quot;&gt;Rocket.rs&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;software-engineering&#x2F;securing-postgresql&#x2F;CA%20Architecture.svg&quot; alt=&quot;CA Architecture&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.openssl.org&#x2F;&quot;&gt;OpenSSL&lt;&#x2F;a&gt; provides a command line interface that&#x27;ll allow us to create the RootCA and services. Let&#x27;s walk through an example for PostgreSQL&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; mkdir ca &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span&gt; ca
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl genrsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; ca.key 2048
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl req&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -new -x509 -key&lt;&#x2F;span&gt;&lt;span&gt; ca.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; ca.crt&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -subj&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;C=US&#x2F;ST=None&#x2F;L=None&#x2F;O=Dev&#x2F;CN=root-ca
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl genrsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql.key 2048
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl rsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -in&lt;&#x2F;span&gt;&lt;span&gt; postgresql.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -pubout -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql.pub
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl req&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -new -key&lt;&#x2F;span&gt;&lt;span&gt; postgresql.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -subj&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;C=US&#x2F;ST=None&#x2F;L=None&#x2F;O=Dev&#x2F;CN=postgresql
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl x509&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -req -in&lt;&#x2F;span&gt;&lt;span&gt; postgresql.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CA&lt;&#x2F;span&gt;&lt;span&gt; ca.crt&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAkey&lt;&#x2F;span&gt;&lt;span&gt; ca.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAcreateserial -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql.crt
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;3-tier-ca-architecture&quot;&gt;3 Tier CA Architecture&lt;&#x2F;h4&gt;
&lt;p&gt;3 Tier CA Architecture takes it a step further and allows the creation of Key&#x2F;Cert pairs for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Multitenancy&quot;&gt;Tenants&lt;&#x2F;a&gt;. Anything signed with Tenant A Intermediate CA can only access services from Tenant A. Same for Tenant B, only PostgreSQL B and Valkey B can access each other. Access from PostgreSQL A to PostgreSQL B and vice versa would not work because the connecting Key&#x2F;Cert pair connecting from either service to the other, would not be signed by an adjacent &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Public_key_certificate#Types_of_certificate&quot;&gt;Intermediate CA&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Similar to a 2 Tier CA Architecture, the 3 Tier CA Architecture keeps the Root CA offline and should only be accessed by orchestration software or a developer when necessary&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;software-engineering&#x2F;securing-postgresql&#x2F;CA%20Architecture%203.svg&quot; alt=&quot;CA Architecture&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The process for creating an Intermediate CA is similar to creating Service Key&#x2F;Cert pairs. However, there are specific parameters available in x509, one being the restriction of additional CA creation. We&#x27;ll cover those values in a follow up article. For new, lets move forward with generating two tenants, each with a PostgreSQL Key&#x2F;Cert pair&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; mkdir ca &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span&gt; ca
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d6d6d;&quot;&gt;# Root CA
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl genrsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; ca.key 2048
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl req&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -new -x509 -key&lt;&#x2F;span&gt;&lt;span&gt; ca.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; ca.crt&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -subj&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;C=US&#x2F;ST=None&#x2F;L=None&#x2F;O=Dev&#x2F;CN=root-ca
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d6d6d;&quot;&gt;# Tenant A
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl genrsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; tenant-a.key 2048
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl rsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -in&lt;&#x2F;span&gt;&lt;span&gt; tenant-a.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -pubout -out&lt;&#x2F;span&gt;&lt;span&gt; tenant-a.pub
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl req&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -new -key&lt;&#x2F;span&gt;&lt;span&gt; tenant-a.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; tenant-a.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -subj&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;C=US&#x2F;ST=None&#x2F;L=None&#x2F;O=Dev&#x2F;CN=tenant-a
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl x509&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -req -in&lt;&#x2F;span&gt;&lt;span&gt; tenant-a.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CA&lt;&#x2F;span&gt;&lt;span&gt; ca.crt&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAkey&lt;&#x2F;span&gt;&lt;span&gt; ca.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAcreateserial -out&lt;&#x2F;span&gt;&lt;span&gt; tenant-a.crt
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d6d6d;&quot;&gt;# PostgreSQL A
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl genrsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql-a.key 2048
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl rsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -in&lt;&#x2F;span&gt;&lt;span&gt; postgresql-a.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -pubout -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql-a.pub
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl req&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -new -key&lt;&#x2F;span&gt;&lt;span&gt; postgresql-a.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql-a.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -subj&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;C=US&#x2F;ST=None&#x2F;L=None&#x2F;O=Dev&#x2F;CN=postgresql-a
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl x509&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -req -in&lt;&#x2F;span&gt;&lt;span&gt; postgresql-a.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CA&lt;&#x2F;span&gt;&lt;span&gt; tenant-a.crt&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAkey&lt;&#x2F;span&gt;&lt;span&gt; tenant-a.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAcreateserial -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql-a.crt
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d6d6d;&quot;&gt;# Tenant B
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl genrsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; tenant-b.key 2048
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl rsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -in&lt;&#x2F;span&gt;&lt;span&gt; tenant-b.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -pubout -out&lt;&#x2F;span&gt;&lt;span&gt; tenant-b.pub
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl req&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -new -key&lt;&#x2F;span&gt;&lt;span&gt; tenant-b.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; tenant-b.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -subj&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;C=US&#x2F;ST=None&#x2F;L=None&#x2F;O=Dev&#x2F;CN=tenant-b
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl x509&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -req -in&lt;&#x2F;span&gt;&lt;span&gt; tenant-b.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CA&lt;&#x2F;span&gt;&lt;span&gt; ca.crt&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAkey&lt;&#x2F;span&gt;&lt;span&gt; ca.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAcreateserial -out&lt;&#x2F;span&gt;&lt;span&gt; tenant-b.crt
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d6d6d;&quot;&gt;# PostgreSQL B
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl genrsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql-b.key 2048
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl rsa&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -in&lt;&#x2F;span&gt;&lt;span&gt; postgresql-b.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -pubout -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql-b.pub
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl req&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -new -key&lt;&#x2F;span&gt;&lt;span&gt; postgresql-b.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql-b.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -subj&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;C=US&#x2F;ST=None&#x2F;L=None&#x2F;O=Dev&#x2F;CN=postgresql-b
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl x509&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -req -in&lt;&#x2F;span&gt;&lt;span&gt; postgresql-b.csr&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CA&lt;&#x2F;span&gt;&lt;span&gt; tenant-b.crt&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAkey&lt;&#x2F;span&gt;&lt;span&gt; tenant-b.key&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -CAcreateserial -out&lt;&#x2F;span&gt;&lt;span&gt; postgresql-b.crt
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;setup-postgresql-using-docker&quot;&gt;Setup PostgreSQL using Docker&lt;&#x2F;h2&gt;
&lt;p&gt;For the rest of the article, I&#x27;ll stick to using a 2 Tier CA Architecture. Let&#x27;s go ahead and configure PostgreSQL&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configuration&quot;&gt;Configuration&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;docker-compose-yml&quot;&gt;&lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Adding &lt;code&gt;storage&lt;&#x2F;code&gt; as a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;reference&#x2F;compose-file&#x2F;services&#x2F;&quot;&gt;Docker Service&lt;&#x2F;a&gt; in &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt; provides a bare minimum configuration for a relatively secure PostgreSQL service running locally. The configuration could easily be expanded and deployed using other orchestration software such as &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;topics&#x2F;gitops&#x2F;&quot;&gt;GitOps&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kubernetes.io&#x2F;&quot;&gt;k8s&lt;&#x2F;a&gt;. The &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;get-started&#x2F;docker-concepts&#x2F;the-basics&#x2F;what-is-an-image&#x2F;&quot;&gt;Docker Image&lt;&#x2F;a&gt; used is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;postgres&quot;&gt;postgres:17.2-alpine3.21&lt;&#x2F;a&gt; which is an official image managed and maintained by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;docker-library&#x2F;postgres&quot;&gt;the PostgreSQL Docker Community&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Using the &lt;code&gt;latest&lt;&#x2F;code&gt; tag for an image is something you could do, but I recommend pinning to a specific version(&lt;code&gt;:17.2-alpine3.21&lt;&#x2F;code&gt;) so when it comes time to update the software, it doesn&#x27;t migrate the database from a previous version(16) to the latest version(17) without you realizing it. Automation is great, until it fails and you have to figure out what happened&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;command&lt;&#x2F;code&gt; in docker compose can override &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;blog&#x2F;docker-best-practices-choosing-between-run-cmd-and-entrypoint&#x2F;&quot;&gt;CMD&lt;&#x2F;a&gt; with options or arguments. This is possible because the &lt;code&gt;17.2-alpine3.21&lt;&#x2F;code&gt; image uses &lt;code&gt;CMD&lt;&#x2F;code&gt; to specify a default command. &lt;code&gt;&amp;gt;-&lt;&#x2F;code&gt; is the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stackoverflow.com&#x2F;a&#x2F;75683105&quot;&gt;Block Chomping Indicator&lt;&#x2F;a&gt;. It flags a &lt;code&gt;yaml&lt;&#x2F;code&gt; parser to remove newlines from the multi-line string. You&#x27;ll need to coordinate the filepath location relative to where the RootCA and Key&#x2F;Cert pair is mounted into the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;resources&#x2F;what-container&#x2F;&quot;&gt;container&lt;&#x2F;a&gt; using a few &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;storage&#x2F;volumes&#x2F;&quot;&gt;volume&lt;&#x2F;a&gt; entries in the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;YAML&quot;&gt;yaml&lt;&#x2F;a&gt;. Finally, set default environment variables for the username, database name, and password to access the container while its in operation and expose the container port &lt;code&gt;5432&lt;&#x2F;code&gt; to &lt;code&gt;8432&lt;&#x2F;code&gt; or something more to your liking&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;storage&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;restart&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;always
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;image&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;postgres:17.2-alpine3.21
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;command&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;-
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;    -c ssl=on
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;    -c ssl_min_protocol_version=TLSv1.3
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;    -c ssl_cert_file=&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;postgresql.crt
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;    -c ssl_key_file=&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;postgresql.key
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;    -c ssl_ca_file=&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;ca.crt
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;    -c hba_file=&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;pg_hba.conf
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;environment&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;POSTGRES_DB&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;dbname
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;POSTGRES_USER&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;dbuser
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;POSTGRES_PASSWORD&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;password
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;ports&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;8432:5432
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;volumes&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&#x2F;docker-data&#x2F;postgresql-data:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;data:rw
&lt;&#x2F;span&gt;&lt;span&gt;    - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&#x2F;docker-data&#x2F;configs&#x2F;pg_hba.conf:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;pg_hba.conf:ro
&lt;&#x2F;span&gt;&lt;span&gt;    - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&#x2F;docker-data&#x2F;postgresql-logs:&#x2F;var&#x2F;log&#x2F;postgresql:rw
&lt;&#x2F;span&gt;&lt;span&gt;    - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&#x2F;docker-data&#x2F;ca&#x2F;ca.crt:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;ca.crt:ro
&lt;&#x2F;span&gt;&lt;span&gt;    - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&#x2F;docker-data&#x2F;ca&#x2F;postgresql.crt:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;postgresql.crt:ro
&lt;&#x2F;span&gt;&lt;span&gt;    - &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&#x2F;docker-data&#x2F;ca&#x2F;postgresql.key:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;postgresql.key:ro
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;pg-hba-conf&quot;&gt;&lt;code&gt;pg_hba.conf&lt;&#x2F;code&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;code&gt;pg_hba.conf&lt;&#x2F;code&gt; file provides the configuration entry point to secure connections being made to various databases for all or for each user relative to how it connects. For our purposes, we&#x27;ll want something that is secure enough by asking for two challenges. First set &lt;code&gt;hostssl&lt;&#x2F;code&gt; and require a Key&#x2F;Cert pair signed by the RootCA created above. The second challenge is enabled by specifying &lt;code&gt;scram-sha-256&lt;&#x2F;code&gt; instead of &lt;code&gt;trust&lt;&#x2F;code&gt;, which will prompt the connecting clients for a password&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;plain&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-plain &quot;&gt;&lt;code class=&quot;language-plain&quot; data-lang=&quot;plain&quot;&gt;&lt;span&gt;hostssl dbname  dbuser  127.0.0.1&#x2F;32    scram-sha-256
&lt;&#x2F;span&gt;&lt;span&gt;hostssl dbname  dbuser  ::1&#x2F;128         scram-sha-256
&lt;&#x2F;span&gt;&lt;span&gt;hostssl dbname  dbuser  all             scram-sha-256
&lt;&#x2F;span&gt;&lt;span&gt;# Replication Privilges
&lt;&#x2F;span&gt;&lt;span&gt;local   replication     all                                     trust
&lt;&#x2F;span&gt;&lt;span&gt;host    replication     all             127.0.0.1&#x2F;32            trust
&lt;&#x2F;span&gt;&lt;span&gt;host    replication     all             ::1&#x2F;128                 trust
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The more details for the &lt;code&gt;hb_conf.conf&lt;&#x2F;code&gt; file are available in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;postgres&#x2F;postgres&#x2F;blob&#x2F;30f017626308a06cf0c0c82a706a1ba1b07df34a&#x2F;src&#x2F;backend&#x2F;libpq&#x2F;pg_hba.conf.sample#L16&quot;&gt;PostgreSQL source control&lt;&#x2F;a&gt;. By restricting connections to the one database managed by Docker Compose, attackers will need to guess the exact database name to connect into rather than dropping into a default database. We further reduce the attack surface even more by only allowing &lt;code&gt;dbuser&lt;&#x2F;code&gt; to connect&lt;&#x2F;p&gt;
&lt;h3 id=&quot;connection-testing&quot;&gt;Connection Testing&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; export PGSSLCERT=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;PWD&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;docker-data&#x2F;ca&#x2F;postgresql.crt
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; export PGSSLKEY=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;PWD&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;docker-data&#x2F;ca&#x2F;postgresql.key
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; export PGSSLROOTCERT=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;PWD&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;docker-data&#x2F;ca&#x2F;ca.crt
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; export PGSSLMODE=verify-ca
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; export PGPASSWORD=password
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; psql&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span&gt; 8432&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser dbname
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;openssl-debugging&quot;&gt;OpenSSL Debugging&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;code&gt;OpenSSL&lt;&#x2F;code&gt; ships with a number of utilities that will help you test your TLS implementation. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;html&#x2F;rfc8446&quot;&gt;TLS 1.3&lt;&#x2F;a&gt; provides a specification that both &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.openssl.org&#x2F;index.php&#x2F;TLS1.3&quot;&gt;OpenSSL&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;rustls&#x2F;latest&#x2F;rustls&#x2F;manual&#x2F;_04_features&#x2F;index.html#current-features&quot;&gt;rustls&lt;&#x2F;a&gt; implement in order to provide secure connections for transmitting data between services. The specification is also implemented by other languages; I only make a specific note here about OpenSSL and &lt;code&gt;rustls&lt;&#x2F;code&gt; because we&#x27;ll be using OpenSSL to test &lt;code&gt;rustls&lt;&#x2F;code&gt; in other articles&lt;&#x2F;p&gt;
&lt;h5 id=&quot;openssl-s-client&quot;&gt;&lt;code&gt;openssl s_client&lt;&#x2F;code&gt;&lt;&#x2F;h5&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.openssl.org&#x2F;1.0.2&#x2F;man1&#x2F;s_client&#x2F;&quot;&gt;s_client&lt;&#x2F;a&gt; will connect to a host using DNS, IPv4, or IPv6 with a Port. Let&#x27;s use Docker Service &lt;code&gt;storage&lt;&#x2F;code&gt; to test it out&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl s_client&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -connect&lt;&#x2F;span&gt;&lt;span&gt; localhost:8432 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; debug.log &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Let&#x27;s take a look at the diagnostic information&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;plain&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-plain &quot;&gt;&lt;code class=&quot;language-plain&quot; data-lang=&quot;plain&quot;&gt;&lt;span&gt;$ cat debug.log
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;CONNECTED(00000005)
&lt;&#x2F;span&gt;&lt;span&gt;---
&lt;&#x2F;span&gt;&lt;span&gt;Certificate chain
&lt;&#x2F;span&gt;&lt;span&gt; 0 s:C=US, ST=None, L=None, O=Dev, CN=postgresql
&lt;&#x2F;span&gt;&lt;span&gt;   i:C=US, ST=None, L=None, O=Dev, CN=rootca
&lt;&#x2F;span&gt;&lt;span&gt;   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
&lt;&#x2F;span&gt;&lt;span&gt;   v:NotBefore: Jan  4 09:00:33 2025 GMT; NotAfter: Feb  3 09:00:33 2025 GMT
&lt;&#x2F;span&gt;&lt;span&gt; 1 s:C=US, ST=None, L=None, O=Dev, CN=rootca
&lt;&#x2F;span&gt;&lt;span&gt;   i:C=US, ST=None, L=None, O=Dev, CN=rootca
&lt;&#x2F;span&gt;&lt;span&gt;   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
&lt;&#x2F;span&gt;&lt;span&gt;   v:NotBefore: Jan  4 09:00:33 2025 GMT; NotAfter: Feb  3 09:00:33 2025 GMT
&lt;&#x2F;span&gt;&lt;span&gt;---
&lt;&#x2F;span&gt;&lt;span&gt;Server certificate
&lt;&#x2F;span&gt;&lt;span&gt;-----BEGIN CERTIFICATE-----
&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;redacted&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;-----END CERTIFICATE-----
&lt;&#x2F;span&gt;&lt;span&gt;subject=C=US, ST=None, L=None, O=Dev, CN=postgresql
&lt;&#x2F;span&gt;&lt;span&gt;issuer=C=US, ST=None, L=None, O=Dev, CN=rootca
&lt;&#x2F;span&gt;&lt;span&gt;---
&lt;&#x2F;span&gt;&lt;span&gt;Acceptable client certificate CA names
&lt;&#x2F;span&gt;&lt;span&gt;C=US, ST=None, L=None, O=Dev, CN=rootca
&lt;&#x2F;span&gt;&lt;span&gt;Requested Signature Algorithms: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:RSA+SHA224
&lt;&#x2F;span&gt;&lt;span&gt;Shared Requested Signature Algorithms: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512
&lt;&#x2F;span&gt;&lt;span&gt;Peer signing digest: SHA256
&lt;&#x2F;span&gt;&lt;span&gt;Peer signature type: RSA-PSS
&lt;&#x2F;span&gt;&lt;span&gt;Server Temp Key: ECDH, prime256v1, 256 bits
&lt;&#x2F;span&gt;&lt;span&gt;---
&lt;&#x2F;span&gt;&lt;span&gt;SSL handshake has read 2609 bytes and written 747 bytes
&lt;&#x2F;span&gt;&lt;span&gt;Verification error: self-signed certificate in certificate chain
&lt;&#x2F;span&gt;&lt;span&gt;---
&lt;&#x2F;span&gt;&lt;span&gt;New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
&lt;&#x2F;span&gt;&lt;span&gt;Protocol: TLSv1.3
&lt;&#x2F;span&gt;&lt;span&gt;Server public key is 2048 bit
&lt;&#x2F;span&gt;&lt;span&gt;This TLS version forbids renegotiation.
&lt;&#x2F;span&gt;&lt;span&gt;Compression: NONE
&lt;&#x2F;span&gt;&lt;span&gt;Expansion: NONE
&lt;&#x2F;span&gt;&lt;span&gt;No ALPN negotiated
&lt;&#x2F;span&gt;&lt;span&gt;Early data was not sent
&lt;&#x2F;span&gt;&lt;span&gt;Verify return code: 19 (self-signed certificate in certificate chain)
&lt;&#x2F;span&gt;&lt;span&gt;---
&lt;&#x2F;span&gt;&lt;span&gt;closed
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The diagnostic information provides the full cert chain and verifies the TLS configuration is correct enough for us. What I mean by correct enough, is that we&#x27;re still using a self-signed cert. That part of the validation will fail, and the part that checks the hostname should fail, but everything else should be fine&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;plain&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-plain &quot;&gt;&lt;code class=&quot;language-plain&quot; data-lang=&quot;plain&quot;&gt;&lt;span&gt;Verification error: self-signed certificate in certificate chain
&lt;&#x2F;span&gt;&lt;span&gt;Verify return code: 19 (self-signed certificate in certificate chain)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h5 id=&quot;openssl-x509&quot;&gt;&lt;code&gt;openssl x509&lt;&#x2F;code&gt;&lt;&#x2F;h5&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.openssl.org&#x2F;1.1.1&#x2F;man1&#x2F;x509&#x2F;&quot;&gt;x509&lt;&#x2F;a&gt; provides diagnostic information about &lt;code&gt;crt&lt;&#x2F;code&gt; and other files. It&#x27;s best used when you&#x27;d like to learn more about the service your connecting to, or extract more parameters about the CA that signed the certificate&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; openssl x509&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -noout -text -in&lt;&#x2F;span&gt;&lt;span&gt; docker-data&#x2F;ca&#x2F;ca.crt &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; debug.log
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;-noout&lt;&#x2F;code&gt; and &lt;code&gt;-text&lt;&#x2F;code&gt; together seem odd together, at least to me. Together, the options indicate to &lt;code&gt;x509&lt;&#x2F;code&gt; there will be no output such as a &lt;code&gt;crt&lt;&#x2F;code&gt; or &lt;code&gt;csr&lt;&#x2F;code&gt; file and to print diagnostic information about the certification from the &lt;code&gt;-in&lt;&#x2F;code&gt; option to &lt;code&gt;stdout&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;plain&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-plain &quot;&gt;&lt;code class=&quot;language-plain&quot; data-lang=&quot;plain&quot;&gt;&lt;span&gt;Certificate:
&lt;&#x2F;span&gt;&lt;span&gt;    Data:
&lt;&#x2F;span&gt;&lt;span&gt;        Version: 3 (0x2)
&lt;&#x2F;span&gt;&lt;span&gt;        Serial Number:
&lt;&#x2F;span&gt;&lt;span&gt;            &amp;lt;redacted&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        Signature Algorithm: sha256WithRSAEncryption
&lt;&#x2F;span&gt;&lt;span&gt;        Issuer: C=US, ST=None, L=None, O=Dev, CN=rootca
&lt;&#x2F;span&gt;&lt;span&gt;        Validity
&lt;&#x2F;span&gt;&lt;span&gt;            Not Before: Jan  4 09:00:33 2025 GMT
&lt;&#x2F;span&gt;&lt;span&gt;            Not After : Feb  3 09:00:33 2025 GMT
&lt;&#x2F;span&gt;&lt;span&gt;        Subject: C=US, ST=None, L=None, O=Dev, CN=rootca
&lt;&#x2F;span&gt;&lt;span&gt;        Subject Public Key Info:
&lt;&#x2F;span&gt;&lt;span&gt;            Public Key Algorithm: rsaEncryption
&lt;&#x2F;span&gt;&lt;span&gt;                Public-Key: (2048 bit)
&lt;&#x2F;span&gt;&lt;span&gt;                Modulus:
&lt;&#x2F;span&gt;&lt;span&gt;                    &amp;lt;redacted&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;                Exponent: &amp;lt;redacted&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;        X509v3 extensions:
&lt;&#x2F;span&gt;&lt;span&gt;            X509v3 Subject Key Identifier: 
&lt;&#x2F;span&gt;&lt;span&gt;                &amp;lt;redacted&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;            X509v3 Authority Key Identifier: 
&lt;&#x2F;span&gt;&lt;span&gt;                &amp;lt;redacted&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;            X509v3 Basic Constraints: critical
&lt;&#x2F;span&gt;&lt;span&gt;                CA:TRUE
&lt;&#x2F;span&gt;&lt;span&gt;    Signature Algorithm: sha256WithRSAEncryption
&lt;&#x2F;span&gt;&lt;span&gt;    Signature Value:
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;lt;redacted&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There is quite a bit of information to look at, most notably is &lt;code&gt;Validity&lt;&#x2F;code&gt; and information on how the fingerprints and block ciphers are implemented for the Certificate. I&#x27;ve &lt;code&gt;&amp;lt;redacted&amp;gt;&lt;&#x2F;code&gt; anything that makes the output harder to read&lt;&#x2F;p&gt;
&lt;p&gt;Common Name(&lt;code&gt;CN&lt;&#x2F;code&gt;) and Subject Alt Name(&lt;code&gt;SAN&lt;&#x2F;code&gt;) &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;X.509#Certificate_filename_extensions&quot;&gt;extensions&lt;&#x2F;a&gt; provided can be used to verify the hostname against the Server&#x27;s Certificate to line up with DNS entry or an IPAddress. Traditionally, only Common Name would be used to line up to something like &lt;code&gt;localhost&lt;&#x2F;code&gt; to your server. Subject Alt Name provides the ability to set multiple aliases such &lt;code&gt;localhost&lt;&#x2F;code&gt;, &lt;code&gt;127.0.0.1&lt;&#x2F;code&gt;, or even &lt;code&gt;pc-name.local&lt;&#x2F;code&gt;. Therefore you&#x27;ll be able to have as many DNS or IP entries as you&#x27;d like&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Tracing Crate, an Introduction</title>
        <published>2024-12-23T00:00:00+00:00</published>
        <updated>2024-12-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/software-engineering/tracing-crate-introduction/"/>
        <id>https://jbcurtin.io/software-engineering/tracing-crate-introduction/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/software-engineering/tracing-crate-introduction/">&lt;p&gt;tracing &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;tracing&quot;&gt;crate&lt;&#x2F;a&gt; provides an API to record log messages. When considering what kind of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;grafana.com&#x2F;docs&#x2F;loki&#x2F;latest&#x2F;get-started&#x2F;labels&#x2F;&quot;&gt;labels&lt;&#x2F;a&gt; to log with the messages, I recommend you take into consideration the importance of omitting sensitive information from the long term storage. If I was an infiltrator in your network, one of the first prizes I&#x27;d look the learn more about your network is DNS. The second most valuable prize on your network is a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Security_information_and_event_management&quot;&gt;SIEM&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;UUIDs offer a natural obfuscation for your labels as they&#x27;re generally randomly generated or can be constructed to mean something defined somewhere the SIEM doesn&#x27;t have access to. Additionally you could correlate the UUIDs with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Primary_key&quot;&gt;primary keys&lt;&#x2F;a&gt; in a database&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s get into it with example followed up by description of what&#x27;s going on&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;instrument&lt;&#x2F;span&gt;&lt;span&gt;(name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;operate&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;skip&lt;&#x2F;span&gt;&lt;span&gt;(_option))]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;pub&lt;&#x2F;span&gt;&lt;span&gt; async &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;operate_pepper&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;_option&lt;&#x2F;span&gt;&lt;span&gt;: PepperOption) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;(), PepperError&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;  tracing::info&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Hello, World&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Ok&lt;&#x2F;span&gt;&lt;span&gt;(())
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;instrument&lt;&#x2F;code&gt; had two parameters passed into it. &lt;code&gt;name&lt;&#x2F;code&gt; which creates then &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;tracing&#x2F;latest&#x2F;tracing&#x2F;span&#x2F;struct.Span.html#method.entered&quot;&gt;enters a span&lt;&#x2F;a&gt; and &lt;code&gt;skip&lt;&#x2F;code&gt; which tells which method or function parameters to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;tracing&#x2F;latest&#x2F;tracing&#x2F;attr.instrument.html#skipping-fields&quot;&gt;not include&lt;&#x2F;a&gt; in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;tracing&#x2F;latest&#x2F;tracing&#x2F;attr.instrument.html#adding-fields&quot;&gt;fields&lt;&#x2F;a&gt;. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;tracing&#x2F;latest&#x2F;tracing&#x2F;attr.instrument.html#overriding-span-attributes&quot;&gt;trace level&lt;&#x2F;a&gt; could also be set, but probably isn&#x27;t necessary because we&#x27;ll primarily be using &lt;code&gt;tracing::info!&lt;&#x2F;code&gt;. In the function body of &lt;code&gt;operate_pepper&lt;&#x2F;code&gt; a single log message is recorded: &lt;code&gt;Hello, World&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A single log message is fairly straightforward. I could have used &lt;code&gt;println!&lt;&#x2F;code&gt;, but that would lock up the execution of the program. Reason being, stdout is a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;beta&#x2F;std&#x2F;io&#x2F;struct.Stdout.html&quot;&gt;globally shared resource&lt;&#x2F;a&gt;. &lt;code&gt;tracing&lt;&#x2F;code&gt; however doesn&#x27;t have a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Semaphore_(programming)&quot;&gt;semaphore&lt;&#x2F;a&gt; to a single resource, which makes it ideal for concurrent programs. It does have some interesting design patterns around &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Linearizability&quot;&gt;atomics&lt;&#x2F;a&gt; which provides an &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tokio-rs&#x2F;tracing&#x2F;blob&#x2F;b02a700ba6850ad813f77e65144114f866074a8f&#x2F;tracing&#x2F;src&#x2F;lib.rs#L1020&quot;&gt;interesting read&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s take a look at a program with some concurrency&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;instrument&lt;&#x2F;span&gt;&lt;span&gt;(name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;sitemap&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;skip&lt;&#x2F;span&gt;&lt;span&gt;(_option))]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;pub&lt;&#x2F;span&gt;&lt;span&gt; async &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;operate_sitemap&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;_option&lt;&#x2F;span&gt;&lt;span&gt;: SitemapOption) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;(), SitemapError&amp;gt; {
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; join_set &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;JoinSet::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; idx &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    join_set.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;spawn&lt;&#x2F;span&gt;&lt;span&gt;(async &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;move &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;      tracing::info&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Task {idx}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    }.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;instrument&lt;&#x2F;span&gt;&lt;span&gt;(tracing::info_span&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Spawned&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;idx)));
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  tracing::info&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;SiteMap Hello World&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;_ =&lt;&#x2F;span&gt;&lt;span&gt; join_set.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;join_all&lt;&#x2F;span&gt;&lt;span&gt;().await;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Ok&lt;&#x2F;span&gt;&lt;span&gt;(())
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There is quite a bit going on in the above example. Creating a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;tokio&#x2F;latest&#x2F;tokio&#x2F;task&#x2F;struct.JoinSet.html&quot;&gt;JoinSet&lt;&#x2F;a&gt; takes care of scheduling the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tokio.rs&#x2F;tokio&#x2F;tutorial&#x2F;spawning#tasks&quot;&gt;Tokio Tasks&lt;&#x2F;a&gt;. A &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;book&#x2F;ch13-01-closures.html&quot;&gt;closure&lt;&#x2F;a&gt; is used to create a &lt;code&gt;&#x27;static&lt;&#x2F;code&gt; lifetime for the task compatible with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tokio.rs&#x2F;tokio&#x2F;tutorial&#x2F;spawning#static-bound&quot;&gt;Tokio&#x27;s Spawning&lt;&#x2F;a&gt; API. The &lt;code&gt;async&lt;&#x2F;code&gt; keyword should be intuitive enough to omit &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tokio.rs&#x2F;tokio&#x2F;tutorial&#x2F;async&quot;&gt;immediate explanation&lt;&#x2F;a&gt;. &lt;code&gt;move&lt;&#x2F;code&gt; is used to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;rust-by-example&#x2F;scope&#x2F;move.html&quot;&gt;move&lt;&#x2F;a&gt; &lt;code&gt;idx&lt;&#x2F;code&gt; into the spawned thread which is than rendered in a log message using &lt;code&gt;info!&lt;&#x2F;code&gt;. Finally attach a new &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;tracing&#x2F;latest&#x2F;tracing&#x2F;macro.info_span.html&quot;&gt;info_span!&lt;&#x2F;a&gt;  using the extension trait &lt;code&gt;instrument&lt;&#x2F;code&gt; along with adding &lt;code&gt;idx&lt;&#x2F;code&gt; field to capture program state&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap: sitemap::opt: SiteMap Hello World
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;3
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;2
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;9&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;9
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;INFO&lt;&#x2F;span&gt;&lt;span&gt; sitemap:Spawned{idx&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;}: sitemap::opt: Task &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Fairly intuitive once you develop a feeling for the tracing API&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>ECharts TreeMap &amp; Zola</title>
        <published>2024-12-11T00:00:00+00:00</published>
        <updated>2024-12-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/software-engineering/tree-map/"/>
        <id>https://jbcurtin.io/software-engineering/tree-map/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/software-engineering/tree-map/">&lt;p&gt;I&#x27;ve been working on hierarchical lists of cryptographic algorithms and technology frameworks in my spare time and have been spending a considerable amount of time on how to present the information. As much as I like tech data, I don&#x27;t think the information would be digested well enough using just text. A TreeMap seemed appropriate because I&#x27;d like to show&#x2F;indicate the structure of understanding the information along with the attributes that go along with the information&lt;&#x2F;p&gt;
&lt;div id=&quot;first-map-chart&quot; style=&quot;width: 90%; min-height: 200px; margin-bottom: 10px;&quot;&gt;&lt;&#x2F;div&gt;
&lt;script id=&quot;first-map-template&quot; type=&quot;text&#x2F;template&quot;&gt;
- Root
  - Backend Framework
    - Django
    - Rocket.rs
  - Frontend Framework
    - VueJS
    - ReactJS
&lt;&#x2F;script&gt;
&lt;script type=&quot;text&#x2F;javascript&quot;&gt;
  $(document).ready(async function() {
    $(&#x27;#first-map-chart&#x27;).Chart__TreeMap(&#x27;first-map-template&#x27;);
  })
&lt;&#x2F;script&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;echarts.apache.org&#x2F;en&#x2F;index.html&quot;&gt;echarts&lt;&#x2F;a&gt; provides one of the best &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.typescriptlang.org&#x2F;&quot;&gt;TypeScript&lt;&#x2F;a&gt; APIs I&#x27;ve had the good fortune to encounter for charting. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt; offers an API called &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;content&#x2F;shortcodes&#x2F;&quot;&gt;ShortCodes&lt;&#x2F;a&gt; allowing for dynamic content to be rendered using Markdown Syntax&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span&gt;{% chart__tree_map(name=&amp;#39;first-map&amp;#39;, min_height=200) %}
&lt;&#x2F;span&gt;&lt;span&gt;- Root
&lt;&#x2F;span&gt;&lt;span&gt;  - Backend Framework
&lt;&#x2F;span&gt;&lt;span&gt;    - Django
&lt;&#x2F;span&gt;&lt;span&gt;    - Rocket.rs
&lt;&#x2F;span&gt;&lt;span&gt;  - Frontend Framework
&lt;&#x2F;span&gt;&lt;span&gt;    - VueJS
&lt;&#x2F;span&gt;&lt;span&gt;    - ReactJS
&lt;&#x2F;span&gt;&lt;span&gt;{% end %}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;What really impresses me though, is the interoperability of Rust &amp;amp; Javascript&#x2F;Typescript. Making it possible to embed more than one TreeMap in a single article. &lt;code&gt;name&lt;&#x2F;code&gt; has to be passed creating a new template with a new id&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;javascript&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-javascript &quot;&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;script id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{{name}}-template&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;text&#x2F;template&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Root
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Backend Framework
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Django
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Rocket&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;rs
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Frontend Framework
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;VueJS
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;ReactJS
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;script type&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;text&#x2F;javascript&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt;(document).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;ready&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;async &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;() &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;#{{name}}-chart&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;Chart__TreeMap&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{{name}}-template&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  })
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Converting Markdown into JSON is a two step process. Parsing the content from the &lt;code&gt;&amp;lt;script type=&quot;text&#x2F;template&quot;&amp;gt;&lt;&#x2F;code&gt; tag into tokens using &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;markdown-it&#x2F;markdown-it&quot;&gt;markdown-it&lt;&#x2F;a&gt; and then passing the tokens into a javascript function that&#x27;ll loop over all the tokens and builds a nested dictionary of information to be passed into echarts.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;javascript&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-javascript &quot;&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;Chart__TreeMap &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= async &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;) &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;elm &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d699ff;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;];
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;chart &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;echarts&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;init&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;elm&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;template_data &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;#${&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;md &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= new &lt;&#x2F;span&gt;&lt;span&gt;markdownit();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;tokens &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;md&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;parse&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;template_data&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;innerText&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;const &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;options &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    series: {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;...&lt;&#x2F;span&gt;&lt;span&gt;,
&lt;&#x2F;span&gt;&lt;span&gt;      data: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;tokensToJson&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;tokens&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;...
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Yay&lt;&#x2F;p&gt;
&lt;div id=&quot;second-map-chart&quot; style=&quot;width: 90%; min-height: 200px; margin-bottom: 10px;&quot;&gt;&lt;&#x2F;div&gt;
&lt;script id=&quot;second-map-template&quot; type=&quot;text&#x2F;template&quot;&gt;
- Root
  - Category One
    - Technology One
    - Technology Two
  - Category Two
    - Technology Three
    - Category Three
      - Technology Four
      - Technology Five
&lt;&#x2F;script&gt;
&lt;script type=&quot;text&#x2F;javascript&quot;&gt;
  $(document).ready(async function() {
    $(&#x27;#second-map-chart&#x27;).Chart__TreeMap(&#x27;second-map-template&#x27;);
  })
&lt;&#x2F;script&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title></title>
        <published>2024-11-07T00:00:00+00:00</published>
        <updated>2024-11-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/about/"/>
        <id>https://jbcurtin.io/about/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/about/">&lt;h1 id=&quot;autistic-rustation-pythonista-ecmascribe-mle&quot;&gt;Autistic. Rustation. Pythonista. Ecmascribe. MLE.&lt;&#x2F;h1&gt;
&lt;p&gt;Through my pursuit to understand Machine Learning, I found myself gravitating towards &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gea.esac.esa.int&#x2F;archive&#x2F;&quot;&gt;GAIA&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archive.stsci.edu&#x2F;missions-and-data&#x2F;tess&quot;&gt;TESS&lt;&#x2F;a&gt;, and other datasets collecting astronomical data. The utilization of those datasets remained to far out of reach for me as my immediate goal was to learn how to deploy and operate Machine Learning Pipelines at scale. Therefore I decided to focus on the financial sector where I could learn how to apply Timeseries Analysis and Forecasting to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Open-high-low-close_chart&quot;&gt;OHLC Charts&lt;&#x2F;a&gt;. Figuring out the concise ways to architect and deploy Machine Learning Pipelines at scale.&lt;&#x2F;p&gt;
&lt;p&gt;I started my career at &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.pbs.org&#x2F;&quot;&gt;PBS&lt;&#x2F;a&gt; and then &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nationalgeographic.com&#x2F;&quot;&gt;National Geographic&lt;&#x2F;a&gt; as an &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Nonverbal_autism&quot;&gt;Autistic Mute&lt;&#x2F;a&gt;. I was lucky enough to stumble across the opportunity to interview and work with a variety of talented individuals. Being someone who could write code and learn software without much English context, I first studied User Interface design as a Front End Engineer around the time of AngularJS 1.x. Eventually I picked up &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.python.org&#x2F;&quot;&gt;Python&lt;&#x2F;a&gt; &amp;amp; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.djangoproject.com&#x2F;&quot;&gt;Django&lt;&#x2F;a&gt; and studied the source code for months to learn how various &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;django&#x2F;django&#x2F;tree&#x2F;main&#x2F;django&#x2F;contrib&quot;&gt;&lt;code&gt;contrib&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; packages enhanced core software. From Django I started to learn the basics to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Reverse_engineering&quot;&gt;Reverse Engineering&lt;&#x2F;a&gt; for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;owasp.org&#x2F;www-project-web-security-testing-guide&#x2F;&quot;&gt;Web Application Security&lt;&#x2F;a&gt;. Running &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Penetration_test&quot;&gt;penetration tests&lt;&#x2F;a&gt; against my servers while reducing &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Attack_surface&quot;&gt;attack surfaces&lt;&#x2F;a&gt;. Today I primary focus on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Blue_team_(computer_security)&quot;&gt;defensive strategies&lt;&#x2F;a&gt; and mitigation.&lt;&#x2F;p&gt;
&lt;p&gt;I went on to move out of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;United_States&quot;&gt;America&lt;&#x2F;a&gt; and learned quickly my security skill-set would not be progressively viewed in case of incident. Therefore I altered my abilities and began to focus on Software Architecture and Web Application Development. This was in 2016 when AWS was becoming popular and GCP just started taking part of the market share. As time went on, I found myself writing Python for various startups and enterprise companies. What I lacked though, was the ability to build cohesive relationships with my colleagues. They would constantly complement me and promote my ability, but me not having any success in my personal life building lasting relationships. I didn&#x27;t have a workable blue print on how to develop and cultivate those workplace relationships. A recipe for disaster that would ultimately lead me astray.&lt;&#x2F;p&gt;
&lt;p&gt;I decided to learn a new primary software language. I sat down and studied &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rust-lang.org&#x2F;&quot;&gt;Rust&lt;&#x2F;a&gt; as I had been writing Python for over a decade by this point and was ready for something new. It was refreshing as the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust-analyzer&quot;&gt;Rust Analyzer&lt;&#x2F;a&gt; provided realtime feedback and made learning the language a lot more intuitive.  I also spent a considerable amount of time learning more about &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;otexts.com&#x2F;fpp2&#x2F;toolbox.html&quot;&gt;Timeseries Forcasting&lt;&#x2F;a&gt;. Picking up the basics quickly, I ran out of datasets to continue improving my understanding. Therefore I changed my personal focus to identify features using OHLC Charts and spent a considerable amount of time learning how to hypothesize with a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;otexts.com&#x2F;fpp2&#x2F;regression.html&quot;&gt;Linear Regression&lt;&#x2F;a&gt; and onto &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Probability&quot;&gt;Probability&lt;&#x2F;a&gt; &amp;amp; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Statistics&quot;&gt;Statistics&lt;&#x2F;a&gt; while writing integrations for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.microsoft.com&#x2F;en-us&#x2F;dynamics-365&#x2F;products&#x2F;finance&quot;&gt;D365 F&amp;amp;SC&lt;&#x2F;a&gt; using Python &amp;amp; Django for my colleagues. I ceased from struggling to build work relationships, the position allowed me to manage a team and communicate with directors. It allowed me to establish my variation of leadership rather than having to interpret and emulate professionalism of others in order to advance.&lt;&#x2F;p&gt;
&lt;p&gt;Today in my corporate time I focus on integrating Machine Learning into production pipelines using various best practices learned from the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mlops.community&#x2F;&quot;&gt;mlops community&lt;&#x2F;a&gt;. I primarily focus on using batch-based operations where models are trained on a dataset and then deployed and validated. Leaving the science and algorithm development up to the Data Scientists, I focus more on the engineering side of things with a thorough understanding of statistical inference to quickly learn the metrics used to evaluate a model and stamp the recently learned-understanding into a pipeline one way or another. Productization of a Machine Learning algorithm into a Web Application takes time and planning and is where I utilize my architectural skills to communicate, document, run the SDLC, and collaborate with interested parties.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title> DateTime (de)Serialization Benchmarks from Python, Numpy, Chrono, and Time</title>
        <published>2024-10-06T00:00:00+00:00</published>
        <updated>2024-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/software-engineering/datetime-benchmarks/"/>
        <id>https://jbcurtin.io/software-engineering/datetime-benchmarks/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/software-engineering/datetime-benchmarks/">&lt;p&gt;Datetime parsing and rendering sometimes require optimization when iterating over a large dataset. Say you have about a couple million rows of timestamps you&#x27;d like to parse into a datatype. It could take some time if you use the wrong &lt;code&gt;import&lt;&#x2F;code&gt; or &lt;code&gt;crate&lt;&#x2F;code&gt;. In this article, I&#x27;ll benchmark what it takes to load a couple million datetime stamps with Python&#x27;s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;datetime.html&quot;&gt;datetime&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;numpy.org&#x2F;doc&#x2F;stable&#x2F;reference&#x2F;arrays.datetime.html&quot;&gt;Numpy&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;chrono&quot;&gt;Chrono&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;time&quot;&gt;Time&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ll explore different architectural considerations and design patterns to improve the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2017&#x2F;03&#x2F;02&#x2F;lang-ergonomics.html&quot;&gt;ergonomics&lt;&#x2F;a&gt; of using the different software libraries. Providing you with the ability to drop code into your project with minimal effort.&lt;&#x2F;p&gt;
&lt;p&gt;There are some considerations to apply when selecting the right datetime alteration software.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Leap Seconds&lt;&#x2F;li&gt;
&lt;li&gt;Leap Years&lt;&#x2F;li&gt;
&lt;li&gt;US Daylight Savings Timezone Offsets&lt;&#x2F;li&gt;
&lt;li&gt;Nanosecond Support&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Where to apply these considerations is an architectural decision, for example storing all datetime strings in a database should be in UTC, would take care of Leap Seconds &amp;amp; Leap years and avoid having to manage US Daylight Timezone Offset. When rendering a datetime string on a webpage using technologies such as VueJS or ReactJS. We can leverage &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.typescriptlang.org&#x2F;&quot;&gt;Typescript&lt;&#x2F;a&gt;|&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&quot;&gt;JavaScript&lt;&#x2F;a&gt; to transform those datetime strings from UTC into client-facing timezone aware objects. Client-facing browsers such as &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;&quot;&gt;Firefox&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.google.com&#x2F;chrome&#x2F;&quot;&gt;Chrome&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.microsoft.com&#x2F;en-us&#x2F;edge&#x2F;download?form=MA13FJ&quot;&gt;Edge&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.opera.com&#x2F;download&quot;&gt;Opera&lt;&#x2F;a&gt; know where the user is situated based of their computer system clocks. Therefore, we can pass a UTC datetime string into &lt;code&gt;new Date()&lt;&#x2F;code&gt; and it should render in the correct timezone with the correct offset. Furthermore, we can transform those same UTC datetime strings into Python or Rust and format the objects accordingly in the event we need to render a time-series&lt;&#x2F;p&gt;
&lt;h2 id=&quot;python-s-datetime-module&quot;&gt;Python&#x27;s &lt;code&gt;datetime&lt;&#x2F;code&gt; Module&lt;&#x2F;h2&gt;
&lt;p&gt;I find when working with the &lt;code&gt;datetime&lt;&#x2F;code&gt; module, its fast enough to use in a JSON-WebAPI, but to slow when loading, rendering, or generating large amounts of data. Therefore, its very well suited in enterprise projects which would could include like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;django&#x2F;django&quot;&gt;Django&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fastapi&#x2F;fastapi&quot;&gt;FastAPI&lt;&#x2F;a&gt;, or &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pallets&#x2F;flask&quot;&gt;Flask&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;typing
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;from &lt;&#x2F;span&gt;&lt;span&gt;datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;import &lt;&#x2F;span&gt;&lt;span&gt;datetime, timedelta, timezone
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;T &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;typing.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;TypeVar&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#8cdaff;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;FORMAT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%Y&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%m&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%H&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%M&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%S%z&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__init__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;current_datetime&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff8942;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff8942;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(current_datetime, datetime):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;current_datetime
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(current_datetime, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;strptime&lt;&#x2F;span&gt;&lt;span&gt;(current_datetime, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;FORMAT&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;current_datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff8942;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;now&lt;&#x2F;span&gt;&lt;span&gt;(timezone.utc)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;NotImplementedError&lt;&#x2F;span&gt;&lt;span&gt;(current_datetime.__class__)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__str__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;strftime&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;FORMAT&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__repr__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;DateTimeUTC: &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__eq__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;other&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__eq__&lt;&#x2F;span&gt;&lt;span&gt;(other._datetime)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__ne__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;other&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__ne__&lt;&#x2F;span&gt;&lt;span&gt;(other._datetime)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__lt__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;other&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__lt__&lt;&#x2F;span&gt;&lt;span&gt;(other._datetime)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__le__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;other&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__le__&lt;&#x2F;span&gt;&lt;span&gt;(other._datetime)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__gt__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;other&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__gt__&lt;&#x2F;span&gt;&lt;span&gt;(other._datetime)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__ge__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;other&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__ge__&lt;&#x2F;span&gt;&lt;span&gt;(other._datetime)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__add__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;delta&lt;&#x2F;span&gt;&lt;span&gt;: timedelta &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;T) -&amp;gt; timedelta &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;T:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(delta, timedelta):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;delta)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(delta, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.__class__):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;delta._datetime
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;NotImplementedError&lt;&#x2F;span&gt;&lt;span&gt;(delta.__class__)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__sub__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;delta&lt;&#x2F;span&gt;&lt;span&gt;: timedelta &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;T) -&amp;gt; timedelta &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;T:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(delta, timedelta):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span&gt;delta)
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(delta, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.__class__):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;._datetime &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span&gt;delta._datetime
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;NotImplementedError&lt;&#x2F;span&gt;&lt;span&gt;(delta.__class__)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In the implementation below, there are a series of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;reference&#x2F;datamodel.html#basic-customization&quot;&gt;dunder methods&lt;&#x2F;a&gt; implemented on the &lt;code&gt;DateTimeUTC&lt;&#x2F;code&gt; object. Those methods allow for to transform, subtract, add time to an existing object using &lt;code&gt;timedelta&lt;&#x2F;code&gt;. At the core is the formatting, implemented in a similar way the &lt;code&gt;new Date()&lt;&#x2F;code&gt; object has been implemented in common browsers.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;future_timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timedelta&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;hours&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;future_timestamp
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;2024-10-02T06:12:10+0000&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The format &lt;code&gt;%Y-%m-%dT%H:%M:%S%z&lt;&#x2F;code&gt; provides a datetime string that &lt;code&gt;new Date()&lt;&#x2F;code&gt; can interpret without having to manage timezones in TypeScript.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;typescript&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-typescript &quot;&gt;&lt;code class=&quot;language-typescript&quot; data-lang=&quot;typescript&quot;&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;new &lt;&#x2F;span&gt;&lt;span&gt;Date(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;2024-10-02T06:12:10+0000&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Okay, great. Now that we know how to use the &lt;code&gt;datetime&lt;&#x2F;code&gt; module. Let&#x27;s benchmark the performance of it&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;datetime&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;year&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1800&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;month&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;day&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timedelta&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;seconds&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;idx) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;idx &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;2000000&lt;&#x2F;span&gt;&lt;span&gt;)]
&lt;&#x2F;span&gt;&lt;span&gt;results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;idx &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;  start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;  timestamps_rendered &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;timestamps:
&lt;&#x2F;span&gt;&lt;span&gt;    timestamps_rendered.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(timestamp))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;  duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span&gt;start
&lt;&#x2F;span&gt;&lt;span&gt;  results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(duration)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d6d6d;&quot;&gt;# Rendering timestamp results
&lt;&#x2F;span&gt;&lt;span&gt;[r.seconds &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;r &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;results]
&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Adding the timezone to the &lt;code&gt;datetime&lt;&#x2F;code&gt; object increased the duration of each benchmark by almost a whole second.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;idx &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Iteration: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, idx)
&lt;&#x2F;span&gt;&lt;span&gt;  start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;timestamps_rendered:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;_ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;(timestamp)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DateTimeUTC&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;  duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span&gt;start
&lt;&#x2F;span&gt;&lt;span&gt;  results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(duration)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6d6d6d;&quot;&gt;# Loading timestamp results
&lt;&#x2F;span&gt;&lt;span&gt;[r.seconds &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;r &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;results]
&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As you can see, loading the timestamp is immensely slower. We can extrapolate meaning from these results. If our JSON-WebAPIs are receiving more than, say 500,000 requests per-second. Than this is probably an area we could improve the API performance. Its just a lot of CPU time spent rendering data. We could also consider assuming every datetime string is UTC and drop handling the &lt;code&gt;timezone&lt;&#x2F;code&gt; entirely. I personally wouldn&#x27;t do that; mostly because I think it is more &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stackoverflow.com&#x2F;a&#x2F;25011492&quot;&gt;pythonic&lt;&#x2F;a&gt; to keep &lt;code&gt;timezone&lt;&#x2F;code&gt; intact. &lt;em&gt;Explicit is better than implicit&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;numpy-s-np-datetime64-module&quot;&gt;Numpy&#x27;s &lt;code&gt;np.datetime64&lt;&#x2F;code&gt; module&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;numpy&lt;&#x2F;code&gt; provides &lt;code&gt;datetime64&lt;&#x2F;code&gt; which is timezone unaware. Meaning, it won&#x27;t handle UTC, EST, IST, JPN, or GMT. Therefore we&#x27;ll need to omit the timezone data. This probably improves the performance of the module and is much more ideal for loading data into a database, rending to flat files, or producing &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;parquet.apache.org&#x2F;&quot;&gt;parquet&lt;&#x2F;a&gt; files. Like we did with the &lt;code&gt;DateTimeUTC&lt;&#x2F;code&gt; class, make a &lt;code&gt;Timestamp&lt;&#x2F;code&gt; class to encapsulate logic for datetime alterations.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;TS_FORMAT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%Y&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%m&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%H&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%M&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%S%z&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;NP_TS_FORMAT &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%Y&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%m&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%H&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%M&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;%f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;T &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;typing.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;TypeVar&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#8cdaff;&quot;&gt;DatetimeEncodeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;font-style:italic;color:#8cdaff;&quot;&gt;Exception&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;pass
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#8cdaff;&quot;&gt;TimestampPart&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;font-style:italic;color:#8cdaff;&quot;&gt;enum.Enum&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;  Year &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Y&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;  Month &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;  Week &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;W&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;  Day &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;d&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;  Hour &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;H&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;  Minute &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;M&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;  Second &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;  Nanosecond &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;class &lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;color:#8cdaff;&quot;&gt;Timestamp&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;text-decoration:underline;font-style:italic;color:#8cdaff;&quot;&gt;typing.NamedTuple&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;  value: np.datetime64
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__hash__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__hash__&lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__add__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;: T, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;delta&lt;&#x2F;span&gt;&lt;span&gt;: np.timedelta64) -&amp;gt; T:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if not &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(delta, np.timedelta64):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;TypeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Expected np.timedelta64, got &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt;(delta)}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;__class__&lt;&#x2F;span&gt;&lt;span&gt;(operator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value, delta))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__sub__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;: T, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;delta&lt;&#x2F;span&gt;&lt;span&gt;: np.timedelta64) -&amp;gt; T:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if not &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(delta, np.timedelta64):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;TypeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Expected np.timedelta64, got &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt;(delta)}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;__class__&lt;&#x2F;span&gt;&lt;span&gt;(operator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;sub&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value, delta))
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__gt__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if not &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(timestamp, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.__class__):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;TypeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Expected Timestamp, got &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt;(timestamp)}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;operator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;gt&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value, timestamp.value)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__ge__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if not &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(timestamp, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.__class__):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;TypeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Expected Timestamp, got &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt;(timestamp)}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;operator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;ge&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value, timestamp.value)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__eq__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if not &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(timestamp, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.__class__):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;TypeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Expected Timestamp, got &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt;(timestamp)}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;operator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;eq&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value, timestamp.value)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__le__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if not &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(timestamp, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.__class__):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;TypeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Expected Timestamp, got &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt;(timestamp)}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;operator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;le&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value, timestamp.value)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;__lt__&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span&gt;: T) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bool&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if not &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;isinstance&lt;&#x2F;span&gt;&lt;span&gt;(timestamp, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.__class__):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;TypeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Expected Timestamp, got &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span&gt;(timestamp)}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;    
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;operator.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;lt&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value, timestamp.value)
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;: T, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;TS_FORMAT&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  @&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;classmethod
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;Parse&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;cls&lt;&#x2F;span&gt;&lt;span&gt;: T, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;value&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; T:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;cls&lt;&#x2F;span&gt;&lt;span&gt;(np.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;datetime64&lt;&#x2F;span&gt;&lt;span&gt;(value))
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#ff5e5e;&quot;&gt;def &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;replace&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;: T, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;replace_part&lt;&#x2F;span&gt;&lt;span&gt;: TimestampPart, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;replace_value&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;) -&amp;gt; T:
&lt;&#x2F;span&gt;&lt;span&gt;    result &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span&gt;    skip_one &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff8942;&quot;&gt;False
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;idx, char &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;enumerate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;NP_TS_FORMAT&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;skip_one &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff8942;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        skip_one &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff8942;&quot;&gt;False
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;continue
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;char &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        code &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;NP_TS_FORMAT&lt;&#x2F;span&gt;&lt;span&gt;[idx &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;try&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;          part_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[part &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;part &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;TimestampPart &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;part.value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;== &lt;&#x2F;span&gt;&lt;span&gt;code][&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;except &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;IndexError&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;DatetimeEncodeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Unknown datetime part: &lt;&#x2F;span&gt;&lt;span&gt;{char}{code}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;        &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;part_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span&gt;TimestampPart.Year:
&lt;&#x2F;span&gt;&lt;span&gt;            value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;astype&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;datetime64[Y]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;part_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span&gt;TimestampPart.Month:
&lt;&#x2F;span&gt;&lt;span&gt;            value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;astype&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;datetime64[M]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;rsplit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;part_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span&gt;TimestampPart.Day:
&lt;&#x2F;span&gt;&lt;span&gt;            value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;astype&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;datetime64[D]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;rsplit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;part_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span&gt;TimestampPart.Hour:
&lt;&#x2F;span&gt;&lt;span&gt;            value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;astype&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;datetime64[h]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;rsplit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;part_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span&gt;TimestampPart.Minute:
&lt;&#x2F;span&gt;&lt;span&gt;            value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;astype&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;datetime64[m]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;rsplit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;part_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span&gt;TimestampPart.Second:
&lt;&#x2F;span&gt;&lt;span&gt;            value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;astype&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;datetime64[s]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;rsplit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;part_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span&gt;TimestampPart.Nanosecond:
&lt;&#x2F;span&gt;&lt;span&gt;            value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.value.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;astype&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;datetime64[ns]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;rsplit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;raise &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;NotImplementedError&lt;&#x2F;span&gt;&lt;span&gt;(part_type)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;          
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;replace_part &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span&gt;part_type:
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;part_type &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;is &lt;&#x2F;span&gt;&lt;span&gt;TimestampPart.Nanosecond:
&lt;&#x2F;span&gt;&lt;span&gt;              zero_diff &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;9 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(replace_value))
&lt;&#x2F;span&gt;&lt;span&gt;              result.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;* &lt;&#x2F;span&gt;&lt;span&gt;zero_diff}{replace_value}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;elif &lt;&#x2F;span&gt;&lt;span&gt;replace_value &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;lt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;              result.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;{replace_value}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;              result.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(replace_value))
&lt;&#x2F;span&gt;&lt;span&gt;          &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;            result.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(value)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;          skip_one &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff8942;&quot;&gt;True
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;else&lt;&#x2F;span&gt;&lt;span&gt;:
&lt;&#x2F;span&gt;&lt;span&gt;        result.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(char)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;__class__&lt;&#x2F;span&gt;&lt;span&gt;(np.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;datetime64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span&gt;(result)))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As you can see, there is a lot going on. Most of the logic is used for datetime alterations and not serialization. We&#x27;ll run the rendering benchmark with the same series of timestamps, but down to nanosecond support and without a timezone.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Timestamp&lt;&#x2F;span&gt;&lt;span&gt;(np.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;datetime64&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;datetime&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;year&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1800&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;month&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;day&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;+ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timedelta&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;seconds&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;idx), &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;ns&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;idx &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;2000000&lt;&#x2F;span&gt;&lt;span&gt;)]
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;idx &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;  start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;now&lt;&#x2F;span&gt;&lt;span&gt;(timezone.utc)
&lt;&#x2F;span&gt;&lt;span&gt;  timestamps_rendered &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;timestamps:
&lt;&#x2F;span&gt;&lt;span&gt;    timestamps_rendered.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(timestamp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;())
&lt;&#x2F;span&gt;&lt;span&gt;  stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;now&lt;&#x2F;span&gt;&lt;span&gt;(timezone.utc)
&lt;&#x2F;span&gt;&lt;span&gt;  duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span&gt;start
&lt;&#x2F;span&gt;&lt;span&gt;  results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(duration)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;[r.seconds &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;r &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;results]
&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The results show sub-second serialization; lets find the &lt;em&gt;mean&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;sum&lt;&#x2F;span&gt;&lt;span&gt;([r.microseconds &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;r &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;results]) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&#x2F; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;371&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;548.3
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;371548.3&lt;&#x2F;code&gt; microseconds on average, which comes to about &lt;code&gt;37.1548&lt;&#x2F;code&gt; milliseconds on average for each benchmark. Considerably faster than the &lt;code&gt;datetime&lt;&#x2F;code&gt; module. Which is to be expected, &lt;code&gt;numpy&lt;&#x2F;code&gt; is accelerated using c-code, and the API is in python to make data processing much more manageable. In fact it has been suggested to me in the past, that the for&#x2F;loop might be whats slowing down this code and not the serialization routine &lt;code&gt;numpy&lt;&#x2F;code&gt; is performing changing the datetime from &lt;code&gt;datetime64&lt;&#x2F;code&gt; to a string.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s go ahead and run a benchmark for loading the datetime string.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span&gt;results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;[]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;idx &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;):
&lt;&#x2F;span&gt;&lt;span&gt;  start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;now&lt;&#x2F;span&gt;&lt;span&gt;(timezone.utc)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;timestamps_rendered:
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;_ &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;Timestamp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Parse&lt;&#x2F;span&gt;&lt;span&gt;(timestamp)
&lt;&#x2F;span&gt;&lt;span&gt;  stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;datetime.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;now&lt;&#x2F;span&gt;&lt;span&gt;(timezone.utc)
&lt;&#x2F;span&gt;&lt;span&gt;  duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span&gt;start
&lt;&#x2F;span&gt;&lt;span&gt;  results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;append&lt;&#x2F;span&gt;&lt;span&gt;(duration)
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span&gt;[r.seconds &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;r &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;results]
&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Loading the datetime string shows similar sub-second results. Let&#x27;s again, find the &lt;em&gt;mean&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;sum&lt;&#x2F;span&gt;&lt;span&gt;([r.microseconds &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for &lt;&#x2F;span&gt;&lt;span&gt;r &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span&gt;results]) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&#x2F; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;774&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;868.9
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Definitely a performance hit here when loading the datetime string into &lt;code&gt;np.datetime64&lt;&#x2F;code&gt;. However, it is still a significant performance increase when its compared to Python&#x27;s &lt;code&gt;datetime&lt;&#x2F;code&gt; module.&lt;&#x2F;p&gt;
&lt;p&gt;Moving into Rust, one of the expectations is our code will run at faster speeds. We also have to consider not all Python is the same. Some Python packages ship with c-code to improve performance. For example, take a look at &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MagicStack&#x2F;httptools&quot;&gt;httptools&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MagicStack&#x2F;asyncpg&quot;&gt;asyncpg&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MagicStack&#x2F;uvloop&quot;&gt;uvloop&lt;&#x2F;a&gt;. All developed by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;magic.io&#x2F;&quot;&gt;MagicStack&lt;&#x2F;a&gt;. Yeah, I&#x27;m kind of a fan of the software. With that said, Rust can still be &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;rust&#x2F;comments&#x2F;1fkl97n&#x2F;my_python_code_is_faster_than_my_rust_code_what&#x2F;&quot;&gt;written in a way to run slower than Python&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chrono&quot;&gt;Chrono&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;chrono&#x2F;latest&#x2F;chrono&#x2F;&quot;&gt;Chrono&lt;&#x2F;a&gt; was the first &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;&quot;&gt;crate&lt;&#x2F;a&gt; I used to perform datetime alterations in Rust. As a result I have an affinity for &lt;code&gt;chrono&lt;&#x2F;code&gt; more so than some of the other choices. When I design software in Rust, its primarily for machine-to-machine comms and less for Server&#x2F;Client-Browser comms. With that said, I have rolled a couple Web Stacks and the builtin serialization implementing &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;serde.rs&quot;&gt;serde&lt;&#x2F;a&gt; is used extensively throughout my code.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span&gt;(Debug, Clone, serde::Deserialize, serde::Serialize)]
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;DatetimeString(chrono::DateTime&amp;lt;chrono::Utc&amp;gt;);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;pub &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;static &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;TS_FORMAT&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;str &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%Y-%m-%dT%H:%M:%S%.9f%z&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;only_chrono&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;2_000_000 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(chrono::Utc::now());
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; rendered_timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clear&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;    println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Iteration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, chrono::Utc::now());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;chrono::Utc::now();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; result &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; timestamp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;TS_FORMAT&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;      rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(result);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;chrono::Utc::now();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; start;
&lt;&#x2F;span&gt;&lt;span&gt;    results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(duration);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Serialization Duration: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, results);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Iteration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, chrono::Utc::now());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;chrono::Utc::now();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;_ = &lt;&#x2F;span&gt;&lt;span&gt;chrono::DateTime::parse_from_str(timestamp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;as_str&lt;&#x2F;span&gt;&lt;span&gt;(), &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;TS_FORMAT&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Failed&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;chrono::Utc::now();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; start;
&lt;&#x2F;span&gt;&lt;span&gt;    results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(duration);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Deserialization Duration: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, results);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;with_serde_and_chrono&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;2_000_000 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(DatetimeString(chrono::Utc::now()));
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; rendered_timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clear&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;    println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Iteration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, chrono::Utc::now());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;chrono::Utc::now();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; result &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;serde_json::to_string(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;timestamp).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Failed&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;      rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(result);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;chrono::Utc::now();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; start;
&lt;&#x2F;span&gt;&lt;span&gt;    results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(duration);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Serialization Duration: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, results);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Iteration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, chrono::Utc::now());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;chrono::Utc::now();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;_&lt;&#x2F;span&gt;&lt;span&gt;: DatetimeString &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;serde_json::from_str(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;timestamp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;as_str&lt;&#x2F;span&gt;&lt;span&gt;()).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Failed&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;chrono::Utc::now();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; start;
&lt;&#x2F;span&gt;&lt;span&gt;    results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(duration);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Deserialization Duration: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, results);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For each iteration of 2 million timestamps, which generates considerably faster than Python&#x27;s &lt;code&gt;datetime&lt;&#x2F;code&gt; module. &lt;code&gt;DateTime&amp;lt;UTC&amp;gt;&lt;&#x2F;code&gt; is formatted into a datetime string with nano second precision. I presume the timezone alterations will account for some slowdown, but I won&#x27;t test for that because if the software can support timezones, those should be included in the benchmark so that the maximum amount of information indicates the correct coordinate it time, regardless of where you are on Earth.&lt;&#x2F;p&gt;
&lt;p&gt;The Deserialization will take &lt;code&gt;TS_FORMAT&lt;&#x2F;code&gt; and rebuild the datetime strings into &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;reference&#x2F;types.html&quot;&gt;Rust types&lt;&#x2F;a&gt; of &lt;code&gt;DateTime&amp;lt;UTC&amp;gt;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;Serialization Duration: [
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;548368000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;529499000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;547975000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;532770000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;534317000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;576425000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;519606000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;546453000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;535094000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;8&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;622479000 &lt;&#x2F;span&gt;&lt;span&gt;}]
&lt;&#x2F;span&gt;&lt;span&gt;Deserialization Duration: [
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;785758000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;749219000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;946002000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;846905000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;558516000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;828807000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;566514000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;669675000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;751291000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;431745000 &lt;&#x2F;span&gt;&lt;span&gt;}]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I was staggered by the results. &lt;code&gt;chrono&lt;&#x2F;code&gt; is running multiple orders of magnitude slower than Python&#x27;s &lt;code&gt;datetime&lt;&#x2F;code&gt; module and Numpy&#x27;s &lt;code&gt;datetime64&lt;&#x2F;code&gt; module.&lt;&#x2F;p&gt;
&lt;p&gt;A second pair of Serialization &#x2F; Deserialization benchmarks to see if there is a performance difference using &lt;code&gt;serde&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;Serialization Duration: [
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;741766000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;739703000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;752363000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;757359000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;783687000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;790181000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;739028000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;740279000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;735011000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;733734000 &lt;&#x2F;span&gt;&lt;span&gt;}]
&lt;&#x2F;span&gt;&lt;span&gt;Deserialization Duration: [
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;839185000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;825194000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;813160000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;817082000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;823954000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;814741000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;817677000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;857673000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;819424000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  TimeDelta { secs: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanos: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;818405000 &lt;&#x2F;span&gt;&lt;span&gt;}]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;An obvious performance increase using &lt;code&gt;serde&lt;&#x2F;code&gt;. I didn&#x27;t expect these results, and I hope someone more familiar with the software can point out what why &lt;code&gt;serde&lt;&#x2F;code&gt; can serialize and deserialize &lt;code&gt;DateTime&amp;lt;UTC&amp;gt;&lt;&#x2F;code&gt; quicker than using &lt;code&gt;.format&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;time&quot;&gt;Time&lt;&#x2F;h2&gt;
&lt;p&gt;I haven&#x27;t used &lt;code&gt;time&lt;&#x2F;code&gt; much. and it seems to be used reliably with a number of dependencies I&#x27;ve started pulling from. Therefore it has been pushed into my radar and I&#x27;d like to determine if the software is more performant than &lt;code&gt;chrono&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The benchmark will be setup similar to Chrono benchmarks. We&#x27;ll test formatting &lt;code&gt;OffsetDateTime&lt;&#x2F;code&gt; into a datetime string and back. Then I&#x27;ll implement &lt;code&gt;serde&lt;&#x2F;code&gt; and see if there is a performance gain or loss.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;#[&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;derive&lt;&#x2F;span&gt;&lt;span&gt;(Debug, Clone, serde::Deserialize, serde::Serialize)]
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;struct &lt;&#x2F;span&gt;&lt;span&gt;TimeDateTimeString(#[serde(with = &amp;quot;time::serde::rfc3339&amp;quot;)] time::OffsetDateTime);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;only_time&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;2_000_000 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(time::OffsetDateTime::now_utc());
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; rendered_timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; ts_format &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;[year]-[month]-[day]T[hour repr:24 padding:none]:[minute]:[second].[subsecond digits:9][offset_hour sign:mandatory]&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; ts_format &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;format_description::parse(ts_format).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Unable to set formatter&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clear&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;    println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Iteration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, time::OffsetDateTime::now_utc());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;time::OffsetDateTime::now_utc();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;      rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(timestamp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;ts_format).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span&gt;());
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;time::OffsetDateTime::now_utc();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; start;
&lt;&#x2F;span&gt;&lt;span&gt;    results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(duration);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Serialization Results: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, results);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Iteration: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, time::OffsetDateTime::now_utc());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;time::OffsetDateTime::now_utc();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;_ = &lt;&#x2F;span&gt;&lt;span&gt;time::OffsetDateTime::parse(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;timestamp, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;ts_format).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Failed&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;time::OffsetDateTime::now_utc();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; start;
&lt;&#x2F;span&gt;&lt;span&gt;    results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(duration);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Deserialization Duration: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, results);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;fn &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8cdaff;&quot;&gt;with_serde_and_time&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;2_000_000 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(TimeDateTimeString(time::OffsetDateTime::now_utc()));
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; rendered_timestamps &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clear&lt;&#x2F;span&gt;&lt;span&gt;();
&lt;&#x2F;span&gt;&lt;span&gt;    println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Iteration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, time::OffsetDateTime::now_utc());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;time::OffsetDateTime::now_utc();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; result &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;serde_json::to_string(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;timestamp).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Failed&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;      rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(result);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;time::OffsetDateTime::now_utc();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; start;
&lt;&#x2F;span&gt;&lt;span&gt;    results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(duration);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;  
&lt;&#x2F;span&gt;&lt;span&gt;  println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Serialization Duration: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, results);
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; results &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Vec&lt;&#x2F;span&gt;&lt;span&gt;::new();
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for _ in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;10 &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;    println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Iteration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, time::OffsetDateTime::now_utc());
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; start &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;time::OffsetDateTime::now_utc();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; timestamp &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; rendered_timestamps.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span&gt;() {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;_&lt;&#x2F;span&gt;&lt;span&gt;: DatetimeString &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;serde_json::from_str(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;timestamp.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;as_str&lt;&#x2F;span&gt;&lt;span&gt;()).&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;expect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Failed&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);
&lt;&#x2F;span&gt;&lt;span&gt;    }
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;= &lt;&#x2F;span&gt;&lt;span&gt;time::OffsetDateTime::now_utc();
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fbdfb5;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; duration &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; stop &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; start;
&lt;&#x2F;span&gt;&lt;span&gt;    results.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(duration);
&lt;&#x2F;span&gt;&lt;span&gt;  }
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  println!(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Deserialization Duration: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;{:?}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, results);
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;time::OffsetDateTime&lt;&#x2F;code&gt; API took me some time to get used to, but it seems to be more idiomatic than &lt;code&gt;chrono&lt;&#x2F;code&gt;, &lt;code&gt;datetime&lt;&#x2F;code&gt;, and &lt;code&gt;datetime64&lt;&#x2F;code&gt;. Which I think is great, but at the same time it makes it hard to find the correct syntax for say, the &lt;code&gt;ts_format&lt;&#x2F;code&gt; variable. I have specified that I&#x27;d like to have nanosecond precision, but I have no idea how to set that level of precision using &lt;code&gt;OffsetDateTime::now_utc()&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;Serialization Results: [
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;939048000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;945770000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;956920000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;945419000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;949541000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;947545000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;951264000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;975607000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;949841000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;941445000 &lt;&#x2F;span&gt;&lt;span&gt;}]
&lt;&#x2F;span&gt;&lt;span&gt;Deserialization Results: [
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;333048000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;339670000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;331340000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;323940000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;321096000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;327553000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;349085000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;314581000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;338267000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;324325000 &lt;&#x2F;span&gt;&lt;span&gt;}]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Way better results than &lt;code&gt;chrono&lt;&#x2F;code&gt; datetime string formatting. Fairly close to Python&#x27;s &lt;code&gt;datetime&lt;&#x2F;code&gt; module&#x27;s ability to serialize &lt;code&gt;datetime&lt;&#x2F;code&gt; objects. An obvious performance improvement, but still on par with &lt;code&gt;datetime&lt;&#x2F;code&gt; and behind &lt;code&gt;datetime64&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A second pair of Serialization &#x2F; Deserialization benchmarks to see if there is a performance difference using &lt;code&gt;serde&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-rust &quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span&gt;Serialization Duration: [
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;285355000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;363159000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;300327000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;277747000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;275644000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;279714000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;273839000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;317712000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;297983000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;285739000 &lt;&#x2F;span&gt;&lt;span&gt;}]
&lt;&#x2F;span&gt;&lt;span&gt;Deserialization Duration: [
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;849486000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;826524000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;824564000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;850677000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;822075000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;831446000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;827239000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;826451000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;832332000 &lt;&#x2F;span&gt;&lt;span&gt;},
&lt;&#x2F;span&gt;&lt;span&gt;  Duration { seconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;, nanoseconds: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#fdb082;&quot;&gt;906543000 &lt;&#x2F;span&gt;&lt;span&gt;}]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Only a performance hit with serialization information and a very minor performance hit when deserialization. Very impressive.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comparative-results&quot;&gt;Comparative Results&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Module &#x2F; Software&lt;&#x2F;th&gt;&lt;th&gt;Average Serialization Duration&lt;&#x2F;th&gt;&lt;th&gt;Average Deserialization Duration&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Python&#x27;s &lt;code&gt;datetime&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;3 seconds&lt;&#x2F;td&gt;&lt;td&gt;10 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Numpy&#x27;s &lt;code&gt;datetime64&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;371,548 ms&lt;&#x2F;td&gt;&lt;td&gt;774,868.9 ms&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Chrono&lt;&#x2F;td&gt;&lt;td&gt;8 seconds&lt;&#x2F;td&gt;&lt;td&gt;11 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Chrono &amp;amp; Serde&lt;&#x2F;td&gt;&lt;td&gt;6 seconds&lt;&#x2F;td&gt;&lt;td&gt;7 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Time&lt;&#x2F;td&gt;&lt;td&gt;4 seconds&lt;&#x2F;td&gt;&lt;td&gt;7 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Time &amp;amp; Serde&lt;&#x2F;td&gt;&lt;td&gt;5 seconds&lt;&#x2F;td&gt;&lt;td&gt;7 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;The comparative results have me wondering if there is a correlation between the &lt;code&gt;datetime64&lt;&#x2F;code&gt; and &lt;code&gt;time&lt;&#x2F;code&gt; results. Obviously, if you&#x27;re going to load large amounts of data. Numpy&#x27;s &lt;code&gt;datetime64&lt;&#x2F;code&gt; datetime strings are the way to go for now. I wonder how well &lt;code&gt;datetime64&lt;&#x2F;code&gt; would perform in a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;spark.apache.org&#x2F;&quot;&gt;Spark&lt;&#x2F;a&gt; runtime.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Compression Benchmarks for PostgreSQL Archives</title>
        <published>2024-08-29T00:00:00+00:00</published>
        <updated>2024-08-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://jbcurtin.io/software-engineering/postgresql-compression-benchmark/"/>
        <id>https://jbcurtin.io/software-engineering/postgresql-compression-benchmark/</id>
        
        <content type="html" xml:base="https://jbcurtin.io/software-engineering/postgresql-compression-benchmark/">&lt;p&gt;By far, my favorite RDBMS is PostgreSQL. Having worked with MySQL, MSSQL, Cassandra, Redis and more; the versatility of PostgreSQL continues to inspire me to write better and more complex SQL. I have a piece of software that reaches out to various news websites following best practices for crawling. Scraping content using provided by the &lt;code&gt;sitemap.xml&lt;&#x2F;code&gt; and following the rules set forth by the robots.txt file. The content of these sites can be anything, but the general approach is to collect as much news as possible to see if I can develop a series of heuristics to provide as technical indicators.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been running the software for about two years now, and a massive PostgreSQL table has been created from the result of it. Today, I&#x27;d like to start making regular backups of the data in the table. This article will focus on benchmarking how long it&#x27;ll take to backup a table using the &lt;code&gt;pg_dump&lt;&#x2F;code&gt; program &amp;amp; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Standing on the shoulders of giants, I&#x27;ve found a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;linuxreviews.org&#x2F;Comparison_of_Compression_Algorithms&quot;&gt;comprehensive review of algorithms&lt;&#x2F;a&gt; used for compression. I&#x27;m not concerned with parallel processing; I&#x27;ll stick to evaluating the programs as provided. What I&#x27;m looking to glean is a definitive and consistent measurement of how long it&#x27;ll take to export and compress information for the massive PostgreSQL table.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;benchmark-setup&quot;&gt;Benchmark Setup&lt;&#x2F;h2&gt;
&lt;p&gt;Benchmark setup is fairly straightforward. A table called &lt;code&gt;location&lt;&#x2F;code&gt; tracks various metrics about URLs such as &lt;code&gt;crawl_delay&lt;&#x2F;code&gt;, &lt;code&gt;domain&lt;&#x2F;code&gt; of the URL, &lt;code&gt;change_ferq&lt;&#x2F;code&gt;, and &lt;code&gt;lastmod&lt;&#x2F;code&gt;. Properties provided by a sites&#x27; &lt;code&gt;sitemap.xml&lt;&#x2F;code&gt;. Which in turn allows for the development of an algorithm to select more relevant pages, yet still allow the crawler to search for archived content while not overburdening the website. The &lt;code&gt;location&lt;&#x2F;code&gt; table will be used to identify the best compression algorithm benchmark for the much larger table&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; exec &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; location&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;host_filepath
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The database is ran using docker, specifically the &lt;code&gt;postgis:15-3.3-alpine&lt;&#x2F;code&gt; image. Port &lt;code&gt;5432&lt;&#x2F;code&gt; is exposed to the host, but we won&#x27;t use it because it seems that connecting to a port exposed to the host will route traffic through the LAN. Instead we&#x27;ll export data in the container and compress the output from the &lt;code&gt;exec&lt;&#x2F;code&gt; command to a &lt;code&gt;filepath&lt;&#x2F;code&gt; on the host.&lt;&#x2F;p&gt;
&lt;p&gt;How the database has been initialized using Docker&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -p &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;5432:5432&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; --name&lt;&#x2F;span&gt;&lt;span&gt; postgresql-datastore&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;POSTGRES_USER=dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;POSTGRES_PASSWORD=password&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;POSTGRES_DB=dbname&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d --shm-size&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;12g postgis:15-3.3-alpine
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The compression algorithms to be tested are &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;facebook&#x2F;zstd&quot;&gt;zstd&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gzip.org&#x2F;&quot;&gt;gzip&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;bzip2&#x2F;bzip2&#x2F;&quot;&gt;bzip2&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lz4&#x2F;lz4&quot;&gt;lz4&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tukaani-project&#x2F;xz&quot;&gt;xz&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Here is the full script to run the benchmark&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#6d6d6d;&quot;&gt;#!&#x2F;usr&#x2F;bin&#x2F;env bash
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;set &lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt;-e
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;TABLES&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;location&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dump_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&#x2F;datatore&#x2F;backups
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; table &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;in &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;TABLES&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;; do
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;ZSTD Benchmark&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dump_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.sql-data.zstd
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Dumping table &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&amp;#39; to &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; ps&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;grep&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; datastore&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; exec &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;\
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;zstd&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -T2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;du&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Benchmark for Table: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;, Compression: ztsd. Filesize: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;. Took &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; seconds&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;GZIP Benchmark&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dump_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.sql-data.gzip
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Dumping table &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&amp;#39; to &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; ps&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;grep&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; datastore&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; exec &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;\
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;gzip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;du&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Benchmark for Table: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;, Compression: gzip. Filesize: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;, Took &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; seconds&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;bzip2 Benchmark&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dump_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.sql-data.bzip2
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Dumping table &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&amp;#39; to &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; ps&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;grep&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; datastore&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; exec &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;\
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;bzip2&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -cz &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;du&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Benchmark for Table: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;, Compression: bzip2. Filesize: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;. Took &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; seconds&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;lz4 Benchmark&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dump_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.sql-data.lz4
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Dumping table &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&amp;#39; to &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; ps&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;grep&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; datastore&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; exec &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;\
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;lz4 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;du&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Benchmark for Table: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;, Compression: lz4. Filesize: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;. Took &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; seconds&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;xz Benchmark&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dump_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;.sql-data.xz
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Dumping table &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;&amp;#39; to &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; ps&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;grep&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; datastore&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span&gt; exec &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;container_id&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span&gt;\
&lt;&#x2F;span&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;xz&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -cz &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;+%Y-%m-%dT%H:%M:%S&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -d &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_stop_interval &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_start_interval&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;du&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -sh &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filepath&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;awk &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;{print $1}&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#6699cc;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;Benchmark for Table: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;table&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;, Compression: xz. Filesize: &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;filesize&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt;. Took &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;timestamp_diff&lt;&#x2F;span&gt;&lt;span style=&quot;color:#fbe3bf;&quot;&gt; seconds&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ffffff;&quot;&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;done
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;benchmark-results&quot;&gt;Benchmark Results&lt;&#x2F;h2&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Benchmark&lt;&#x2F;span&gt;&lt;span&gt; for Table: location, Compression: ztsd. Filesize: 1.6G. Took 88 seconds
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Benchmark&lt;&#x2F;span&gt;&lt;span&gt; for Table: location, Compression: gzip. Filesize: 1.7G, Took 200 seconds
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Benchmark&lt;&#x2F;span&gt;&lt;span&gt; for Table: location, Compression: bzip2. Filesize: 1.3G. Took 1144 seconds
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Benchmark&lt;&#x2F;span&gt;&lt;span&gt; for Table: location, Compression: lz4. Filesize: 2.5G. Took 88 seconds
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;Benchmark&lt;&#x2F;span&gt;&lt;span&gt; for Table: location, Compression: xz. Filesize: 1.3G. Took 2662 seconds
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;understanding-the-benchmark-results&quot;&gt;Understanding the Benchmark Results&lt;&#x2F;h3&gt;
&lt;p&gt;A core trade off when selecting an optimal compression algorithm is the amount of time taken; relative to the ratio of the file before compression size over after compression size.&lt;&#x2F;p&gt;
&lt;p&gt;$$ Compression Ratio = {Uncompressed Size\over{Compressed Size}} $$&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m more interested in the backup running quickly and am willing to accept slightly larger archived files. &lt;code&gt;bzip2&lt;&#x2F;code&gt; and &lt;code&gt;xz&lt;&#x2F;code&gt; both provided the smallest filesize, but the time to archive took well over twenty minutes for each. &lt;code&gt;ztsd&lt;&#x2F;code&gt; took about a minute and a half, and provided a slightly larger file at &lt;code&gt;1.6GB&lt;&#x2F;code&gt; in size&lt;&#x2F;p&gt;
&lt;h4 id=&quot;data-stream&quot;&gt;Data Stream&lt;&#x2F;h4&gt;
&lt;p&gt;I&#x27;m not archiving files. I&#x27;m archiving a stream coming from a &lt;code&gt;docker exec&lt;&#x2F;code&gt; command and that has additional overhead to consider. Rather than understanding the overhead, produce a metric for how many MB&#x2F;s of information is being transmitted from the &lt;code&gt;docker exec&lt;&#x2F;code&gt; command.&lt;&#x2F;p&gt;
&lt;p&gt;Exporting the same stream to &lt;code&gt;dd&lt;&#x2F;code&gt; for about a minute will tell us the maximum &lt;code&gt;TransmissionRate&lt;&#x2F;code&gt; of data being sent to various compression algorithms. Interprocess communication is synchronous between bash processes when using a pipe. Therefore, the &lt;code&gt;TransmissionRate&lt;&#x2F;code&gt; will only be as fast as the compression algorithm can compress the information.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#191919;color:#f8f8f2;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; docker exec container_id &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; location&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dd&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;zstd&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -T2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;6886619648&lt;&#x2F;span&gt;&lt;span&gt; bytes (6.9 GB, 6.4 GiB) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;copied,&lt;&#x2F;span&gt;&lt;span&gt; 65.8708 s, 105 MB&#x2F;s
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; docker exec container_id &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; location&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dd&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;gzip&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;2551970816&lt;&#x2F;span&gt;&lt;span&gt; bytes (2.6 GB, 2.4 GiB) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;copied,&lt;&#x2F;span&gt;&lt;span&gt; 61.7171 s, 41.3 MB&#x2F;s
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; docker exec container_id &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; location&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dd&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;bzip2&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -cz &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;422925824&lt;&#x2F;span&gt;&lt;span&gt; bytes (423 MB, 403 MiB) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;copied,&lt;&#x2F;span&gt;&lt;span&gt; 63.8073 s, 6.6 MB&#x2F;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; docker exec container_id &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; location&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dd&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;lz4 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;6205816832&lt;&#x2F;span&gt;&lt;span&gt; bytes (6.2 GB, 5.8 GiB) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;copied,&lt;&#x2F;span&gt;&lt;span&gt; 61.3169 s, 101 MB&#x2F;s
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; docker exec container_id &#x2F;usr&#x2F;local&#x2F;bin&#x2F;pg_dump&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;span&gt; localhost&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;span&gt; dbuser&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; location&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -a -d&lt;&#x2F;span&gt;&lt;span&gt; dbname&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;dd&lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;xz&lt;&#x2F;span&gt;&lt;span style=&quot;font-style:italic;color:#fc9354;&quot;&gt; -cz &lt;&#x2F;span&gt;&lt;span style=&quot;color:#ff5e5e;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;dev&#x2F;null
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;704544768&lt;&#x2F;span&gt;&lt;span&gt; bytes (705 MB, 672 MiB) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#e9fdac;&quot;&gt;copied,&lt;&#x2F;span&gt;&lt;span&gt; 61.2334 s, 3.0 MB&#x2F;s
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Calculate the &lt;code&gt;UncompressedSize&lt;&#x2F;code&gt; of each archive.&lt;&#x2F;p&gt;
&lt;p&gt;$$ UncompressedSize = Seconds \times \text{Average MB&#x2F;s} $$&lt;&#x2F;p&gt;
&lt;p&gt;Calculate the &lt;code&gt;CompressionRatio&lt;&#x2F;code&gt; of each archive.&lt;&#x2F;p&gt;
&lt;p&gt;$$ CompressionRatio = {UncompressedSize \over {CompressedSize}} $$&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Algorithm&lt;&#x2F;th&gt;&lt;th&gt;Math&lt;&#x2F;th&gt;&lt;th&gt;Ratio&lt;&#x2F;th&gt;&lt;th&gt;Time&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;zstd&lt;&#x2F;td&gt;&lt;td&gt;$$ 88 \times 105.0 \over {1600} $$&lt;&#x2F;td&gt;&lt;td&gt;5.775&lt;&#x2F;td&gt;&lt;td&gt;1 minute 28 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;gzip&lt;&#x2F;td&gt;&lt;td&gt;$$ 200 \times 41.3 \over {1700} $$&lt;&#x2F;td&gt;&lt;td&gt;4.8588&lt;&#x2F;td&gt;&lt;td&gt;3 minutes 20 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;bzip2&lt;&#x2F;td&gt;&lt;td&gt;$$ 1144 \times 6.6 \over {1300} $$&lt;&#x2F;td&gt;&lt;td&gt;5.808&lt;&#x2F;td&gt;&lt;td&gt;19 minutes 4 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;lz4&lt;&#x2F;td&gt;&lt;td&gt;$$ 88 \times 101.0 \over {2500} $$&lt;&#x2F;td&gt;&lt;td&gt;3.5552&lt;&#x2F;td&gt;&lt;td&gt;1 minute 28 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;xz&lt;&#x2F;td&gt;&lt;td&gt;$$ 2262 \times 3.0 \over {1300} $$&lt;&#x2F;td&gt;&lt;td&gt;5.22&lt;&#x2F;td&gt;&lt;td&gt;44 minutes 22 seconds&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Compression Ratios can vary based on a multitude of factors, most notably is the amount of repeated information in the file being archived. For instance, text data often repeats while random data does not. Therefore we&#x27;ll be able to achieve higher compression ratios on archives with text data (such as a PostgreSQL dump).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;good-enough&quot;&gt;Good enough&lt;&#x2F;h2&gt;
&lt;p&gt;The archival software can only archive information at a certain rate. Compression software is generally tested based on how quickly the archive can be generated from a file-descriptor or streaming input. Rather than re-creating those test results, I came up with what I&#x27;ve seen in initial iterations. Something quick that could be refactored at a later time to be more robust. I&#x27;ve also omitted talking about decompression metrics, as the goal here was to identify how quickly the archive can be created. I purposefully left out considerations on file-system performance.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;article-references&quot;&gt;Article References&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rootusers.com&#x2F;gzip-vs-bzip2-vs-xz-performance-comparison&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.rootusers.com&#x2F;gzip-vs-bzip2-vs-xz-performance-comparison&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;linuxreviews.org&#x2F;Comparison_of_Compression_Algorithms&quot;&gt;https:&#x2F;&#x2F;linuxreviews.org&#x2F;Comparison_of_Compression_Algorithms&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Data_compression_ratio#Definition&quot;&gt;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Data_compression_ratio#Definition&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
</feed>
