diff --git a/content/blog/2010-10-29-brambled-velvet-bloody-thorns.html.md b/content/blog/2010-10-29-brambled-velvet-bloody-thorns.html.md
index 67a84f7b63e316f8956508c80d1228431af07004..6258a5803484f7f57e7f263d49344b4c7c3ce9fa 100644
--- a/content/blog/2010-10-29-brambled-velvet-bloody-thorns.html.md
+++ b/content/blog/2010-10-29-brambled-velvet-bloody-thorns.html.md
@@ -1,9 +1,8 @@
 ---
 slug: brambled-velvet-bloody-thorns
 title: Brambled Velvet Bloody Thorns
-date: '2010-10-29T22:36:20.122Z'
-tags:
-- Poetry & Literature
+date: '2010-10-29'
+tags: [Poetry & Literature]
 draft: false
 ---
 
diff --git a/content/blog/2010-10-29-light-on-the-other-side.html.md b/content/blog/2010-10-29-light-on-the-other-side.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..b66093f8bfbfee264201532ebbccf7c21d5fe48b
--- /dev/null
+++ b/content/blog/2010-10-29-light-on-the-other-side.html.md
@@ -0,0 +1,28 @@
+---
+title: Light On the Other Side
+date: 2010-10-29
+tags: [Poetry & Literature]
+layout: post
+---
+
+> The heart of man is burnt and gray;<br/>
+for all our greatness we lost our way.<br/>
+<br/>
+All alone the blind prevail;<br/>
+no more love and we will fail.<br/>
+<br/>
+Honesty and integrity crumble;<br/>
+kings of men fall and fumble.<br/>
+<br/>
+Love is lost, people torn<br/>
+we die everyday and never mourn.<br/>
+But there is light in babies born.<br/>
+<br/>
+Hope exists for those who love;<br/>
+the light is in us, not from above.<br/>
+<br/>
+Give of yourself and you will find;<br/>
+the part of you greater than the mind.<br/>
+<br/>
+-All my love to the reader,<br/>
+Jeffrey Phillips Freeman
diff --git a/content/blog/2010-10-29-take-my-soul-upon-your-heart.html.md b/content/blog/2010-10-29-take-my-soul-upon-your-heart.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..893597cd54aabdfff4e1d9580db1b5546888b3d2
--- /dev/null
+++ b/content/blog/2010-10-29-take-my-soul-upon-your-heart.html.md
@@ -0,0 +1,28 @@
+---
+title: Take My Soul Upon Your Heart
+date: 2010-10-29
+tags: [Poetry & Literature]
+layout: post
+---
+
+> Take my soul upon your heart;<br/>
+know that I shall never part.<br/>
+<br/>
+All the void of heaven and earth;<br/>
+can not weaken my love's worth.<br/>
+<br/>
+Not time nor death nor land nor sea;<br/>
+none of these are stronger then we.<br/>
+<br/>
+For all my heart is fixed on you;<br/>
+no wish of mine will ever undo,<br/>
+the undying love I feel for two.<br/>
+<br/>
+As I slip into the dark;<br/>
+thoughts of you are in my heart.<br/>
+<br/>
+You have been my guiding light;<br/>
+and so you will remain, through eternal night.<br/>
+<br/>
+-My love forever,<br/>
+Jeff
diff --git a/content/blog/2010-11-27-responsibility-of-the-human.html.md b/content/blog/2010-11-27-responsibility-of-the-human.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..740830cea8d95a0e2be9a14743e54eaf26197107
--- /dev/null
+++ b/content/blog/2010-11-27-responsibility-of-the-human.html.md
@@ -0,0 +1,10 @@
+---
+title: Responsibility of the Human
+date: 2010-11-27
+tags: [Poetry & Literature]
+layout: post
+---
+
+Lives around us are born and die. We live to see the life and death of the plants, animals, and people that surround us. Every year an entire world of plants, insects, and animals die around us leaving a barren icy world reborn new just as quickly as it died. Our beloved pets, our loved Grandparents, uncles, cousins, friends, and even parents are taken from us. All the while we gain life long friends, and new fragile babies are born to our families and friends. As death overtakes you, and everyone you came to this world with, you see the beauty and light in these small innocent lives ready to reseed the world to be reborn new again. For those of us lucky enough to live to an old age, we have experienced not only our own lives but have witnessed and shaped entire lives around us. We have the wisdom of all the lives around us; if we use our life to see, and learn and grow, the powerful wisdom and responsibility that is gained is astounding.
+
+We are creatures with great power, knowledge and wisdom. It is a grave responsibility we have as humans; we are responsible to the earth that feeds us, gave birth to us, it is our medicine, it is our family, our mother, our life support, our responsibility. Mother earth has given birth to us, has let us evolve and grow to have the ability to step out on our own, and make our own decisions, and like any good mother she left us with the keys to the house, and trusts us not to trash the place. For the first time in all of known history a species has evolved to have the power, both to destroy and create, that we have been given. This responsibility is not to be taken lightly. We are the guardians and caretakers of all life on earth now. The world outside your door, to the left, and to the right, that is your world, your sacred grove of life that you are to tend and nurture. It doesn't matter if you are in the city or on the top of a mountain, your neighbor, the woods across the street, the little kids that play outside, your best friend across town, your children, they are all yours to care for, to make sure you don't harm them, and protect and help them.
diff --git a/content/blog/2012-06-12-in-days-of-old.html.md b/content/blog/2012-06-12-in-days-of-old.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..4c100da90b944664b8daf2b06086147603d36df4
--- /dev/null
+++ b/content/blog/2012-06-12-in-days-of-old.html.md
@@ -0,0 +1,21 @@
+---
+title: In Days of Old
+date: 2012-06-12
+tags: [Poetry & Literature]
+layout: post
+---
+
+> In days of old, with heart so bold;<br/>
+when courage finds its way.<br/>
+<br/>
+A man comes forth who finds his worth,<br/>
+in love and righteous action.<br/>
+<br/>
+With strength of heart he fulfills his part,<br/>
+and confronts the popular passion.<br/>
+<br/>
+Fighting long and strong in a world gone wrong;<br/>
+the masses fight and plunder.<br/>
+<br/>
+Finding worth in one, then hope did come,<br/>
+the masses pushed asunder.
diff --git a/content/blog/2012-08-05-the-angel-with-cracked-wings.html.md b/content/blog/2012-08-05-the-angel-with-cracked-wings.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..1ac9cc5b1911f8e99ed902ef69a794e250b714fc
--- /dev/null
+++ b/content/blog/2012-08-05-the-angel-with-cracked-wings.html.md
@@ -0,0 +1,40 @@
+---
+title: The Angel with Cracked Wings
+date: 2012-08-05
+tags: [Poetry & Literature]
+layout: post
+---
+
+> Light pierces through wind torn holes.<br/>
+My eyes ache adjusting to the light.<br/>
+Shapes and figures barely formed.<br/>
+A sweet scent calls me forward.<br/>
+But I know nothing of the day;<br/>
+like a blind man,<br/>
+seeking the sight he once knew.<br/>
+<br/>
+But it is not in the light one finds sight.<br/>
+It is in the darkness.<br/>
+Here the sightless have sight.<br/>
+Those who see are lost.<br/>
+In this place beauty is more than a word,<br/>
+more than a thing to look upon.<br/>
+It is the essence of our soul.<br/>
+Our own personal angel.<br/>
+<br/>
+Rise then!<br/>
+Lift yourself up!<br/>
+To the clouds where angels sing.<br/>
+Embrace your wind torn wings and soar once more.<br/>
+For only with a heavy heart shall you be bound to the dirt.<br/>
+Fly ever higher towards the sun.<br/>
+Embrace its life giving warmth;<br/>
+and in this place,<br/>
+your happiness,<br/>
+your heart,<br/>
+your love,<br/>
+will know no bounds.<br/>
+<br/>
+By: Jeffrey Phillips Freeman
+
+2nd poem I've written recently. Took me just a few minutes to write but I think its one of my best poems. It was inspired by Amanda.
diff --git a/content/blog/2012-08-18-the-fire.html.md b/content/blog/2012-08-18-the-fire.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..be31df80f86be84393cc6f76702817c587fee27a
--- /dev/null
+++ b/content/blog/2012-08-18-the-fire.html.md
@@ -0,0 +1,27 @@
+---
+title: The Fire
+date: 2012-08-18
+tags: [Poetry & Literature]
+layout: post
+---
+
+I completed my first poem in 2 years last night. Id love any objective feedback anyone has for me.
+
+> With arms outstreched, still too far to hold.<br/>
+The moon's light touching my weary hand;<br/>
+as ice melting through clenched fingers.<br/>
+My soul is a fire and its warmth betrays me.<br/>
+<br/>
+But fire is light<br/>
+bathe in the light;<br/>
+and glow from its warmth.<br/>
+<br/>
+Don't curse the moon because the sun has set.<br/>
+Reach for its cold light<br/>
+and give it your heat<br/>
+For when it has melted away,<br/>
+leaving your hands cold and dry,<br/>
+the sun will rise,<br/>
+and you will bathe in its warmth.<br/>
+<br/>
+By: Jeffrey Phillips Freeman
diff --git a/content/blog/2012-09-05-a-warrior-bold.html.md b/content/blog/2012-09-05-a-warrior-bold.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..1b2ec10644fd8c32fb8d7bf238aa567382a3294a
--- /dev/null
+++ b/content/blog/2012-09-05-a-warrior-bold.html.md
@@ -0,0 +1,40 @@
+---
+title: A Warrior Bold
+date: 2012-09-05
+tags: [Poetry & Literature]
+layout: post
+---
+
+This was the song my grandfather used to sing to me as kid. He used to sing it with his army buddies during World War II.
+
+> In days of old, when knights were bold,<br/>
+And barons held their sway,<br/>
+A warrior bold, with spurs of gold,<br/>
+Sang merrily his lay;<br/>
+Sang merrily his lay:<br/>
+"My love is young and fair,<br/>
+My love hath golden hair,<br/>
+And eyes so blue, and heart so true,<br/>
+That none with her compare.<br/>
+So what care I tho' death be nigh,<br/>
+I'll live for love or die.<br/>
+So what care I, tho' death be nigh,<br/>
+I'll live for love or die."<br/>
+<br/>
+So this brave knight, in armor bright,<br/>
+Went gayly to the fray;<br/>
+He fought the fight, but ere the night,<br/>
+His soul had pass'd away,<br/>
+His soul had pass'd away.<br/>
+The plighted ring he wore<br/>
+Was crush'd and wet with gore,<br/>
+Yet ere he died, he bravely cried,<br/>
+"I've kept the vow I swore.<br/>
+So what care I tho' death be nigh,<br/>
+I've fought for love and die,<br/>
+So what care I, tho' death be nigh,<br/>
+I've fought for love, for love I die<br/>
+I've fought for love,<br/>
+For love, for love I die."<br/>
+<br/>
+--Edwin Thomas & Steven Adams, Published 1912
diff --git a/content/blog/2012-09-06-the-seas-of-time.html.md b/content/blog/2012-09-06-the-seas-of-time.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..845656deb6f4cd3f5f0779f7a9b25a2a649fa466
--- /dev/null
+++ b/content/blog/2012-09-06-the-seas-of-time.html.md
@@ -0,0 +1,41 @@
+---
+title: The Seas of Time
+date: 2012-09-06
+tags: [Poetry & Literature]
+layout: post
+---
+
+> I hear the waves crashing on time's distant shore.<br/>
+Its salty mist hangs in the air.<br/>
+I can taste its dry burning on my tongue.<br/>
+Feel its sticky film on my skin.<br/>
+It coats every surface,<br/>
+fills every space.<br/>
+I invite it into my body with each breath,<br/>
+though it burns like acid.<br/>
+<br/>
+Yet I welcome its relaxing song.<br/>
+With its hypnotic ebb and flow,<br/>
+it calls me to a peaceful sleep.<br/>
+With no destination,<br/>
+always in motion,<br/>
+always alive.<br/>
+<br/>
+As I stand at the water's edge.<br/>
+With every crash of the waves.<br/>
+My feet sink deeper into the sand.<br/>
+My heart slows.<br/>
+My mind drifts off.<br/>
+The cool waters wash over me.<br/>
+<br/>
+Cradled by the sand's embrace,<br/>
+the world fades,<br/>
+time washes away.<br/>
+Leaving me to drift,<br/>
+peacefully,<br/>
+in the waters of time.<br/>
+In this moment,forever.<br/>
+<br/>
+By: Jeffrey Phillips Freeman
+
+After seeing Amanda last Sunday I felt inspired to write this poem. It represents how sometimes I have been troubled by either the past or the future. But because of her I find myself no longer troubled by such things. We have always found ourselves peacefully adrift in the moment, and last time I saw her reminded me of that
diff --git a/content/blog/2012-09-19-the-mages-tavern.html.md b/content/blog/2012-09-19-the-mages-tavern.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..de740055bc2b6ca00af14f12da1b17fc63395978
--- /dev/null
+++ b/content/blog/2012-09-19-the-mages-tavern.html.md
@@ -0,0 +1,55 @@
+---
+title: The Mage's Tavern
+date: 2012-09-19
+tags: [Poetry & Literature]
+layout: post
+---
+
+> In misty lands that the pale moonlight brings,<br/>
+There stands a tavern where it shines and it sings.<br/>
+In this warm place eternal laughter does flow;<br/>
+with a smile for each of the winds that will blow.<br/>
+<br/>
+To seek this land out less must be so much more,<br/>
+then set yourself free to drift to night's shore.<br/>
+The familiar road finds unfamiliar friends door,<br/>
+filled with mirth, merriment, magick, and lore.<br/>
+<br/>
+When ready to pass open wide wooden gate,<br/>
+a cool wind then blows that shows one their fate.<br/>
+The room there well lit by passion's great fire,<br/>
+it's smoke will hang thick from our love's own desire.<br/>
+<br/>
+There in the sky dances god borealis,<br/>
+and there on the bar sits the bust of the Pallas.<br/>
+But never there seen is the raven of yore,<br/>
+for only the wise can be king evermore.<br/>
+<br/>
+There in the corner stands a gargoyle's head,<br/>
+where out of it's mouth flows hot earthen lead.<br/>
+Into a dirt cup it's flow does seek end,<br/>
+but as shining gold it does then transcend.<br/>
+<br/>
+The food and the drink shared to all those around,<br/>
+Not one to the other was any one bound.<br/>
+With plates of clear manna that did sparkle white,<br/>
+and cups of ambrosia kept full through the night.<br/>
+<br/>
+Here pixie's dust used in shakers to fill,<br/>
+and surely dragon tails do remain in there still.<br/>
+For what fool would eat from a dragon's great tail,<br/>
+only to have all of their passions fail.<br/>
+<br/>
+Moon's magick glow fills the room well dispersed,<br/>
+While time's wanting path remains untraversed.<br/>
+The moments found here are well unrehearsed;<br/>
+The truth is abound, not found interspersed.<br/>
+<br/>
+In this place here exists just the one,<br/>
+Embrace silver moon, to become golden sun.<br/>
+Odal reunites ancient gods of the night,<br/>
+to let us be one, so we shine with their light.<br/>
+<br/>
+--Jeffrey Phillips Freeman
+
+I wrote a new poem. Not surprisingly to many of you it was again inspired by the wonderful Amanda and the most recent weekend I spent with her. She had a dream of a magickal tavern she told me about when I went to see her this weekend. As we enjoyed the weekend, oddly, it seemed to only reflect the energy from her dream. The following night I had a dream of the same place as the one from her dream. I wrote this poem to represent both the feelings from this weekend that borrows elements from the dream itself.
diff --git a/content/blog/2012-09-28-a-part-of-me-forever.html.md b/content/blog/2012-09-28-a-part-of-me-forever.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..5955041e22fc5df3a04ea8b2e49a1c558c184873
--- /dev/null
+++ b/content/blog/2012-09-28-a-part-of-me-forever.html.md
@@ -0,0 +1,60 @@
+---
+title: A Part of Me Forever
+date: 2012-09-28
+tags: [Poetry & Literature]
+layout: post
+---
+
+> I am not the person from when first we met.<br/>
+Back then I was only a seed, not even yet alive.<br/>
+But watered by your love, you gave me my life.<br/>
+So that my roots did imbibe you.<br/>
+So that I did grow,<br/>
+reaching towards the light,<br/>
+while drawing you into me,<br/>
+and you became a part of me.<br/>
+<br/>
+Every thought of you,<br/>
+will flutter its way,<br/>
+from my naval to my heart,<br/>
+carrying with it,<br/>
+your intoxicating smile.<br/>
+<br/>
+All the confidence I show,<br/>
+will trickle it's way down,<br/>
+from my crown to my chest,<br/>
+suspended within it,<br/>
+your tender passion.<br/>
+<br/>
+The very peace I feel,<br/>
+will stretch it's warmth out,<br/>
+from my soul to my body,<br/>
+glowing through it,<br/>
+your loving touch.<br/>
+<br/>
+No matter what may divide us;<br/>
+I will always be able to find you.<br/>
+There in my heart where you will sit,<br/>
+making goofy sounds and scrunching your face,<br/>
+curling your toes while we hold each other tightly,<br/>
+smiling with a brilliance that makes my whole being sing.<br/>
+<br/>
+Thus I sing my song of love for you,<br/>
+so that I may always keep you in my heart.<br/>
+There in my atrium,<br/>
+happily content,<br/>
+tapping to the beat,<br/>
+keeping me in perfect rhythm.<br/>
+<br/>
+There my love will sit,<br/>
+forever smiling,<br/>
+forever tapping.<br/>
+For never can I sever a part of myself.<br/>
+Then never can I separate you from me.<br/>
+So there you will remain,<br/>
+a part of me,<br/>
+forever.<br/>
+<br/>
+--Jeffrey Phillips Freeman
+
+This is a new poem I wrote, inspired by Amanda and all the wonderful time I've been spending with her. It represents many of the wonderful feelings she gives me, and memories. Best yet, we create new ones every day :)
diff --git a/content/blog/2012-10-07-initiation.html.md b/content/blog/2012-10-07-initiation.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..0f5ef4cd5ce30b7c6f49e38c98be8961e490101e
--- /dev/null
+++ b/content/blog/2012-10-07-initiation.html.md
@@ -0,0 +1,81 @@
+---
+title: Initiation
+date: 2012-10-07
+tags: [Poetry & Literature]
+layout: post
+---
+
+> There in the living wood,<br/>
+I found the moon,<br/>
+and she gave herself to me.<br/>
+<br/>
+She is mine,<br/>
+though not to be owned.<br/>
+Sitting high in the heavens,<br/>
+radiating her grace for all to love.<br/>
+Though still all the more mine.<br/>
+<br/>
+All I knew was emptiness,<br/>
+knowing of nothing,<br/>
+blind to my existence.<br/>
+Never seeing color.<br/>
+Never seeing white, nor black.<br/>
+<br/>
+Then,<br/>
+there in the heavens,<br/>
+there she hung,<br/>
+the newborn moon.<br/>
+Born to an endless darkness,<br/>
+my world was given contrast.<br/>
+Where once there was nothing<br/>
+now lay mysterious shadows,<br/>
+hinting at distant memories.<br/>
+Her beauty crisp and clear,<br/>
+merely a sliver,<br/>
+a faint whisper,<br/>
+a hint of her full glory,<br/>
+yet glowing brightly.<br/>
+<br/>
+She taught me.<br/>
+Taught me shapes, lines, form.<br/>
+Taught me light and dark.<br/>
+She gave me a world beyond myself.<br/>
+Gave me a reason to open my eyes.<br/>
+A reason to be alive.<br/>
+<br/>
+But her radiance grew,<br/>
+and the stars themselves did envy her.<br/>
+Yet she gave of herself freely,<br/>
+turning envy to love.<br/>
+So that they did dance,<br/>
+the stars with the moon,<br/>
+happily overhead,<br/>
+for all to see.<br/>
+<br/>
+And as blissful love shined down,<br/>
+a pale blue earth was brought to my eyes,<br/>
+giving my world substance.<br/>
+Once all that was real hung distantly out of reach,<br/>
+yet now it surrounds me,<br/>
+giving me purpose,<br/>
+revealing the depth of my kingdom.<br/>
+<br/>
+In every crack there I find her,<br/>
+reminding me she will always be there,<br/>
+always sharing herself,<br/>
+always lighting my path,<br/>
+never letting go.<br/>
+<br/>
+And though her light may wane,<br/>
+it is never extinguished.<br/>
+For all I need do is look to her,<br/>
+and she will wax full again.<br/>
+<br/>
+I no longer fear the night,<br/>
+because the moon is mine.<br/>
+<br/>
+--Jeffrey Phillips Freeman
+
+
+
+This is a poem I just wrote about Amanda. I was feeling inspired and only wrote it over about 15 minutes. But I'm just glad poetry is coming so easy to me lately! I will be curious to hear what people think of it.
diff --git a/content/blog/2012-10-14-holy-guardian-angel.html.md b/content/blog/2012-10-14-holy-guardian-angel.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..81bd80db556906d421df0c7a22e1f2185968e18c
--- /dev/null
+++ b/content/blog/2012-10-14-holy-guardian-angel.html.md
@@ -0,0 +1,58 @@
+---
+title: Holy Guardian Angel
+date: 2012-10-14
+tags: [Poetry & Literature]
+layout: post
+---
+
+> Giving part of one's self so another can thrive,<br/>
+no greater a gift could I ever contrive.<br/>
+Thus my soul I do give to your worthy embrace,<br/>
+to an endless quest, for your fears to displace.<br/>
+Oh!<br/>
+To give you a world where your happiness thrives,<br/>
+that fate I shall seek through both of our lives.<br/>
+<br/>
+For once the great goal is no longer self pride,<br/>
+the entire vast universe does stand by our side.<br/>
+Not a fault can we have that we don't overcome,<br/>
+the whole of our parts is the lesser to our sum.<br/>
+Ah!<br/>
+To make us a life where our true selves do reign,<br/>
+what a glorious cause I shall never need feign.<br/>
+<br/>
+So here we do stand with our flaws to be seen;<br/>
+the trust in each other does wash it all clean.<br/>
+My love for myself is my love for you too,<br/>
+for your love is my love, we both can imbue.<br/>
+See!<br/>
+I need naught from you, for its part of myself,<br/>
+and to give from that part only strengthens ourself.<br/>
+<br/>
+But what if the chaos does haunt us one night?<br/>
+Our blessed holy guards will then give us true sight.<br/>
+For chaos is born of illusion's worst fear,<br/>
+be true to ourselves so it shall never be near.<br/>
+Eh.<br/>
+The storm was a dream, not a thing to contend,<br/>
+I have found us clear skies that never will end.<br/>
+<br/>
+If the body only gives what it will there receive,<br/>
+then the mind will be hollow with no hope to relieve.<br/>
+Thus I use all I have just to light up your eyes,<br/>
+because I wish you to live, to reach past compromise.<br/>
+So!<br/>
+To bring you to life is all I ever did want,<br/>
+your soul just to smile, not a trophy to flaunt.<br/>
+<br/>
+Take all that I give, because you give it to me,<br/>
+since two are the one it brings both of us glee.<br/>
+Consume all my love, never fear you'll do pain,<br/>
+for truth of one's self is never heart's bane.<br/>
+Ah-ha!<br/>
+The key to our world is the truth held inside,<br/>
+So forever will I seek ourselves to confide.<br/>
+<br/>
+--Jeffrey Phillips Freeman
+
+A poem I wrote inspired by Amanda. She has really opened up with me lately, and me to her. I'm glad I get to talk to her as often as I do, she inspires great poems. So this poem talks about finding ones "Holy Guardian Angel" or in occult terms "one's true self". The conversations is directed both at Amanda, and at my HGA simultaneously.
diff --git a/content/blog/2016-02-02-easy-to-remember-secure-passwords.html.md b/content/blog/2016-02-02-easy-to-remember-secure-passwords.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..f5ea5a9eb2eeb4779dd0cf7bbcd40fd2bbc50689
--- /dev/null
+++ b/content/blog/2016-02-02-easy-to-remember-secure-passwords.html.md
@@ -0,0 +1,129 @@
+---
+title: Easy to Remember, Secure, Passwords
+date: 2016-02-02
+tags: [Security]
+layout: post
+---
+
+A few years back XKCD, as it so often does, got me thinking; this time about my choice of passwords. Up until that point I had always seen it as an intellectual challenge to memorize long random passwords for all my logins; usually 16 random characters, numbers, and symbols. But I've since learned that it is easier, and more importantly, more secure, to pick easy to memorize passwords. But how can we do this and still ensure the password is actually secure, it seemed a more in-depth analysis was in order.
+
+![XKCD: Password Strength](/images/password_strength.png)
+
+## Picking a Secure Password
+
+The first thing we need to break down is the bits of entropy mentioned in the original XKCD comic; what is that all about? Simply put if i had a password that was a single bit long it would basically be either a 1 or a 0, therefore it has a single bit of entropy. This means there are only 2 possible passwords, and as such it would be extremely easy to guess. However when we evaluate words, instead of letters or numbers, we have to ask "how many possible words are there?". If we were truly picking from every single word in the English language this would be huge; there are tens or even hundreds of thousands of words in the English language. However in reality your vocabulary probably isn't quite so comprehensive, and even if it were it might be hard to remember a password like this one.
+
+    Pseudoturbinal_Huswifery_Climbable_Eburin
+
+Instead we want to choose a more limited, and easier to remember, vocabulary from which to generate our passwords. Similarly if we want to calculate the difficulty in hacking a password, via a brute force attack, we should recognize the possible vocabulary we want to target. For example if I chose to write a script to hack your account, and the script tries every possible combination of the 200 most common vocabulary words in various sequences, then it will eventually hack your account; it is just a question of how long it would take.
+
+Lets run those numbers and see what we get. How long would it take to hack your password if you picked 4 words from the 200 most common English words, assuming the script used to hack the account could make 1000 guesses per second.
+
+<br/>
+\\(200^4 = 1,600,000,000\\) possible passwords
+
+\\(\frac{1,600,000,000}{1,000} = 1,600,000\\) seconds
+
+\\(\frac{1,600,000}{60} = 26,667\\) minutes
+
+\\(\frac{26,667}{60} = 444\\) hours
+
+\\(\frac{444}{24} = 18.5\\) days
+
+<br/>
+For fun we can also figure out how many bits of entropy that represents.
+
+<br/>
+\\(1,600,000,000 = 2^n\\)
+
+\\(n = \frac{log(1,600,000,000)}{log(2)}\\)
+
+\\(n \approx 30.575\\)
+
+<br/>
+
+Of course we can't have a fraction of a bit, so we round n up to the nearest whole number indicating that the current password scheme would give us exactly 31 bits of entropy.
+
+It is clear from the math above that there are 1,600,000,000 possible passwords that can be created when using 200 of the most common English words combined in any combination of 4 words. If we can try each possible combination at a rate of 1,000 per second then it would only take 18.5 days to determine the password. In reality this is doable on a basic desktop computer, and could be hacked in a much shorter time on a Mainframe computer. Clearly that won't do.
+
+If we truly want a secure password we are going to have to increase the number of bits of entropy, but hopefully without making the password significantly more difficult to remember. One way we can do that, as we already discussed, is simply by increasing the vocabulary used to generate your password. Lets try it with a vocabulary of 5,000 words.
+
+<br/>
+\\({5,000}^{4} \approx 6.25 \cdot {10}^{14}\\) possible passwords
+
+\\(\frac{6.25 \cdot {10}^{14}}{1,000} \approx 6.25 \cdot {10}^{11}\\) seconds
+
+\\(\frac{6.25 \cdot {10}^{11}}{60} \approx 1.041 \cdot {10}^{10}\\) minutes
+
+\\(\frac{1.041 \cdot {10}^{10}}{60} \approx 1.736 \cdot {10}^{8}\\) hours
+
+\\(\frac{1.736 \cdot {10}^{8}}{24} \approx 7.233 \cdot {10}^{6}\\) days
+
+\\(\frac{7.233 \cdot {10}^{6}}{365} \approx 19,818.61\\) Years
+
+<br/>
+and the entropy...
+
+<br/>
+\\(6.25 \cdot {10}^{14} = 2^n\\)
+
+\\(n = \frac{log(6.25 \cdot {10}^{14})}{log(2)}\\)
+
+\\(n \approx 49.151\\)
+
+<br/>
+
+Well that looks much better. Now we have 50 bits of entropy which would take about 19,818.61 years at 1,000 tries per second to figure out your password. That is probably secure enough, however a Mainframe could probably still crack it in under a year. But unless the CIA is trying to get into your account, you are most likely safe if you wanted to stop there. For reference check out this site for [a list of the 5,000 most common words](http://www.wordfrequency.info/free.asp) in the English language. You can even use this list to generate your password by picking words from the list at random.
+
+Still I am left wondering if there are any other simple steps we can take to increase the security without sacrificing anything. One thing you can do is add one more word into the mix that is not in the list of 5,000 most common English words, but still easy to remember; even better if the word is entirely unique. Some good examples might be a friend's nick name, an uncommon last name of a friend, or a proper noun of an obscure person, place, or thing; a good example would be a character from a little known book or play. This would expand the vocabulary needed to hack the account well beyond the 5,000 word vocabulary and as such would significantly increase the Security of the chosen password.
+
+## Make It Easy to Remember
+
+Now that we know how to pick a secure password it still may not be terribly easy for you to remember. One trick you can use to get around that is to make your passwords into sentences that are easier to remember, but obscure enough that it isnt easy for a computer to guess. The following are a few examples.
+
+    SunDestroysVirginFlowers
+    AppleHurtsBabyTongue
+    LispKillsNewDevelopersJoy
+
+To make it even easier to remember you can pick passwords which might remind you of the topic of the website it is to be used on. For example the first password of "SunDestroysVirginFlowers" might be the perfect password to use on a website for gardening. It may also help to remember if you make the sentence structure the same for every password. Here are some examples all using the same sentence structure.
+
+    HelpCatsWantLove
+    AdoptABabyINeedCompany
+    MakeJuiceQuenchThirst
+
+In all these cases we have a verb, followed by a noun, followed by the reason the action was taken. By following a consistent structure your brain will have more clues to remember the password and thus will make remembering it much easier. Also you will notice I capitalized the first letter of each word, one variant that is slightly more obscure is to pick some other pattern of capitalization. You could pick the last letter of every word, or even the second letter, just be consistent with all your passwords so it is easier to remember.
+
+## Make Sure It Can Be Used
+
+The only other consideration is to make sure the password can actually be used on the desired site. Also if you tend to reuse passwords, which isn't the best of ideas, then you want to make sure the password will be accepted by most websites. Since websites have some rules to make sure a password is acceptable we should pick a password that can pass most of these rules. Usually you are covered if your password has at least one of each of the following: capital letter, lower case letter, digit, and symbol. We already covered the capitalization, so all we need to throw into the mix are some digits and punctuation. Punctuation is easy, since we are already using sentence-like structures we can just throw in some punctuation.
+
+    Help!CatsWantLove.
+    AdoptABaby.INeedCompany.
+    MakeJuice,QuenchThirst!
+
+Digits are a little more difficult. You have two options; the first is to replace letters with a number that looks similar to the letter being replaced.
+
+    3 -> B
+    1 -> I
+    7 -> T
+
+The other option is to use the number to represent a word that has the same sound.
+
+    2 -> to, too
+    4 -> for
+    6 -> sex
+    8 -> ate
+
+The key here, again, is to be consistent so you don't get confused. So for example if you choose to replace the letter with the number it looks like, make sure you replace the same letter with the same number in all your passwords. This way you don't need to remember what pattern you used on a case by case basis. It is important to note if you use the number to represent an entire word it should not replace one of the four typed words chosen earlier but rather should be in addition to it. This ensures you don't reduce the overall entropy of your password.
+
+In the end you should wind up with some passwords like the following:
+
+    Help!Cats8AllTheFood!
+    AdoptABaby.No64Me.
+    MakeJuice4Tolkein!
+
+## Conclusions
+
+It should be clear now that it is trivial to create easy to remember passwords that are also secure.The only other thing I'd suggest is to keep the number of passwords you need to memorize to a minimum. Use a secure password store like [LastPass](http://www.lastpass.com) to store all your passwords and instead only memorize a master password for encrypting your LastPass vault. This way you can make sure your master password is secure and you only need to remember one password. I like to have about 5 or 6 passwords I memorize for all my high security stuff like root login, LastPass, or encryption keys, and then keep the rest stored in LastPass. Any password which I rely on LastPass to store I won't need to memorize so they are psudorandom strings.
+
+I hope that helps. Stay safe everyone.
diff --git a/content/blog/2016-02-05-a-badass-ethereum-mining-rig.html.md b/content/blog/2016-02-05-a-badass-ethereum-mining-rig.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..9dd0dbae65388d2bae83d635cee97cc4dd57e119
--- /dev/null
+++ b/content/blog/2016-02-05-a-badass-ethereum-mining-rig.html.md
@@ -0,0 +1,72 @@
+---
+title: The Ultimate Ethereum Mining Rig
+date: 2016-02-05
+tags: [Cryptocurrency]
+layout: post
+---
+
+As many of you know for many years now I've invested in, and had an interest in, cryptocurrency. However until now I never owned a mining rig simply because it didn't seem profitable enough to be worth the trouble. However recently a few things changed; first, with Ethereum entering the scene it became a profitable endeavor with a ROI that would exceed the initial investment in less than a year. So after running all the numbers to make sure it was profitable, and testing it out on genesis-mining.com to see some cash flow first, I decided to give in and invest in a top of the line mining rig. Since I also do a lot of R&D in Machine Learning and Parallel Processing I figured it could double as a useful tool for my day job, one that will pay for itself when not actively being used. Really in many ways it is a win-win proposition.
+
+Like so many other things I get into I had to take my endeavor to the extreme. I wanted the best, most profitable, mining rig I could build; something that would be equally powerful for my professional endeavors as well. This meant top of the line AMD OpenCL compatible GPUs with a significant number of cores, memory, and memory bandwidth. Of course I also needed to figure out how to accommodate four double-wide graphics cards on any normal motherboard. I spent about 2 days surfing NewEgg.com and Amazon.com and finally arrived at all the parts to build this beautiful mining rig.
+
+![Front View of Rig](/images/ethereum-rig-front.jpg)
+
+![Side View of Rig](/images/ethereum-rig-side.jpg)
+
+UPDATE: Added some velcro to secure that 4th card. Looks much better now and is a bit safer than before.
+
+![Velcro used to fix the 4th card (light)](/images/ethereum-rig-side-velcro.jpg)
+
+![Velcro used to fix the 4th card (dark)](/images/ethereum-rig-side-lights.jpg)
+
+The specifications are as follows:
+
+    4x Radeon R9 Fury X Graphics Cards
+    1x AMD FX 4350 Unlocked Quad Core Processor (4.2 Ghz)
+    1x Corsair RM Series, RM1000, 1000 Watt PSU
+    1x Thermaltake CORE P5 ATX Open Frame Case
+    1x ASUS Crosshair V Formula-Z Motherboard
+    4x Kingston HyperX FURY 4GB 1600MHz DDR3 Memory
+    1x Samsung 850 EVO 120GB SATA III SSD Harddrive
+    4x PCI-e X16 Reisers
+
+In the end once it was all setup and configured this beast produced an impressive hash rate.
+
+    111,149,056 hashes per second (111 MH/s)
+
+With current network parameters; that means I mine about one block each day at about 5 ETH per block. Market prices fluctuate wildly so by the time you read this these numbers may change, but that is somewhere on the order of about 10$ per day. So the cost invested to build the computer should pay for itself in about a year assuming there aren't any significant changes to the network in that time. Not too shabby.
+
+## Roadblocks
+
+It took me about 2 days to fully assemble the box and get it to the point where it was mining Ethereum. I am an Arch Linux fan so most of that time I spent trying to get it to run under Arch Linux. While normally Arch Linux is a pleasure to work with, no matter what I tried i found it impossible to get it to get the C++ Ethereum client to mine successfully. There were a slew of problems, with xorg-server being the wrong version as a dependency, and OpenCL throwing segfaults complaining "PPLib wasn't enabled". In the end I gave up and moved to Ubuntu. While I'm not usually a huge Ubuntu fan for day-to-day stuff, in this case it really did make the setup much easier.
+
+Once Ubuntu was freshly installed on the system I just had to add a few repositories and install a few packages. I [found a tutorial](https://ethereum.gitbooks.io/frontier-guide/content/gpu.html) which described the process pretty accurately. Only difference was I didn't find i had to install AMD-APP-SDK or the C++ Ethereum code manually, all these were available precompiled in the repositories so I just installed them with apt-get.
+
+One thing did perplex me though; anytime I tried to run the miner using the eth command as described in the tutorial it would run for a minute and then abort claiming it was "killed" without any details. After racking my head for hours I found that if i ran it with the ethmine command instead it ran successfully. Here are the commands I ran to get the miner going.
+
+    geth --rpc --rpccorsdomain localhost &
+    ethmine -G
+
+## Tweaking
+
+Never content to just leave things as they are, I wanted to try to find ways to tweak the settings to boost performance slightly. While I wouldn't be willing to run a custom kernel, since security is still a major concern, that left me mostly with just the ethmine settings with which to tweak. Two settings in particular struck me as useful, as they effected how much work is sent to the GPU at one time. These were `--cl-local-work` and `--cl-global-work`. Knowing I had a top of the line GPU I figured boosting these values a bit might increase performance. Indeed they did, but I had to play with a lot of different numbers to get the benchmarks to max out. Finally the max hash rate I mentioned above of 111,149,056 hashes per second (111 MH/s) was achieved with the following command. This was about a 10% improvement over the default settings.
+
+    ethmine -G --cl-local-work 256 --cl-global-work 8192
+
+I tried enabling the CPU too with `--enable-opencl-cpu` however that produced a segfault. So I left it out.
+
+## Conclusions
+
+With an ROI that pays for itself in under a year, and the future usefulness of such a rig, it is really a no brainer for me to have set this up. It was also a lot of fun, and profitable. Though I think a cost-analysis might be useful to compare different rigs and hash rates to ultimately figure out what is the cheapest rig for the output it produces. Sadly I don't have the information on other rigs to be able to do this, nor do I have the time. Also it should be noted that while this rig works really well for Ethereum it would be far less effective on other cryptocurrency where the memory bandwidth isn't as critical; so don't expect it to be the ultimate rig for all cryptocurrency mining needs.
+
+I hope that helps you guys in setting up your own mining rigs, happy mining!
+
+## Updates
+
+turns out the power supply is under-powered for the system. I advice upgrading to something with a bit more power, next model up should do it.
+
+### Clones
+
+Since I've posted this article there have been a few clones of the miner. I will add names and pictures here. The following is from Rolf Versluis <rolfv@prioritycue.org>:
+
+![Rolf's Ethereum Miner](/images/ethereum-rig-clone.jpg)
\ No newline at end of file
diff --git a/content/blog/2016-03-07-my-new-high-frequency-vertical-antenna.html.md b/content/blog/2016-03-07-my-new-high-frequency-vertical-antenna.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..0f8046eab0297673ffc393f6bf8a254343bb029f
--- /dev/null
+++ b/content/blog/2016-03-07-my-new-high-frequency-vertical-antenna.html.md
@@ -0,0 +1,44 @@
+---
+title: My New High Frequency Vertical Antenna
+date: 2016-03-07
+tags: [Ham Radio, Electrical Engineering]
+layout: post
+---
+
+For several years now I wanted to replace my older High Frequency antenna which had partially fallen down; it was a G5RV Jr. However it never really worked right; it used a metal mast which had detuned the antenna and after about a year it started to fall down and became completely inoperative anyway. Throughout the years it got me some DX, but overall it really never performed that well.
+
+I am in a rather unique situation when it comes to antenna options. I live in south Philadelphia; that means there aren't many sky-scrappers immediately around my house, however, I am surrounded by a sea of row homes as far as the eye can see. Since a tower of any reasonable size is clearly off limits that meant my backyard wouldn't be a particularly useful place for an antenna. That left me with just one option, my roof. This of course has the advantage of being 25 feet off the ground and giving me a reasonably decent view of the horizon. Of course it also has the disadvantage of having very little room to work with.
+
+In the end a vertical type antenna, with coil traps to make the size manageable, was selected; Specifically the Hustler BTV-6 antenna which is designed to work everything from 80m to 6m. A balanced dipole type antenna wouldn't work too well since I would have had very little control over the takeoff angle since the ground plane for such an antenna would be 25 feet down, and through my house. That meant a dipole type balanced antenna would be very hard to configure effectively. With a Vertical type antenna, however, the radials act as the ground plane, so seemed like a far better choice.
+
+One other advantage to using the roof is that the distance to run the coaxial feed line from the radio to the antenna is very short. With only 10 to 15 feet of coax that means feed line loss will be very low even when the Standing Wave Ratio is high. I tried to position the coax on the roof such that the run is as short as possible. This should help prevent common mode current which could occur if the shielding of the coax becomes inductively coupled with active element of the antenna. Since the coax is significantly shorter than the wavelength being transmitted this effect should be minimized. Of course when putting a vertical in a yard you can actually dig a trench for the feed line placing it beneath the radials. Since this wasn't an option in my setup it became critical to keep the coax line as short as possible.
+
+Here are some pictures of the newly installed antenna including all the radials.
+
+![Hustler BTV-6 Active Element](/images/btv6-active-element.jpg)
+![Hustler BTV-6 Base](/images/btv6-base.jpg)
+![Radials Towards Front of House](/images/radials-front.jpg)
+![Radials Towards Back of House](/images/radials-back.jpg)
+
+As you can see in the last picture the antenna occasionally made contact with the metal mast which supported it. When this happened it would create a short to ground and completely detune the antenna. As such I added some insulating foam to the supporting mast to ensure it wouldn't be able to make conductive contact with the antenna.
+
+![Mast Insulated](/images/mast-insulated.jpg)
+
+Finally to top everything off I added a new 8 foot by 5/8 inch ground rod to the system. For that I chipped a hole in the cement in my back yard and hammered it into the ground just outside the radio shack's window. I then attached a ground clamp to it and ran some solid bare copper wire (4 AWG) to the window on the second floor.
+
+![Ground Rod](/images/ground-rod.jpg)
+![Groudn Rod Wide Angle](/images/ground-rod-wide.jpg)
+
+For now I have the coax and grounding cable coming directly through an open window. But I have a window panel to be installed to fix that. The ground cable must be connected with the house's electrical ground or else dangerous ground loops can occur; this connection was made in the shack and an additional connection will be added in the basement to ensure it is up to electrical code. Inside the shack at the window I installed an automatic remote tuner. The ground wire connects to the Tuner as well as running to a junction box which connects together all the radio equipment in the shack.
+
+![Remote Tuner](/images/remote-tuner.jpg)
+
+![Ground Junction](/images/ground-junction.jpg)
+
+It is important you use a grounding junction such as the one above rather than daisy chaining your ground together between devices. This ensures that even if one connection becomes loose all the others still maintain their connection to ground.
+
+By having additional paths to ground it reduces the impedance as well as resistance for the path from the radio and antenna to the ground rod. This can and has had a noticeable effect on reducing unwanted effects and RF Interference.
+
+And finally a picture of the entire shack just for completeness.
+
+![HAM Radio Shack](/images/ham-shack.jpg)
\ No newline at end of file
diff --git a/content/blog/2016-03-14-chenglish-and-the-beofang.html.md b/content/blog/2016-03-14-chenglish-and-the-beofang.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..d92ac63e346f5e22e4426e4c93e6f23917d0f9dc
--- /dev/null
+++ b/content/blog/2016-03-14-chenglish-and-the-beofang.html.md
@@ -0,0 +1,27 @@
+---
+title: Chenglish and the Baofang
+date: 2016-03-14
+tags: [Ham Radio]
+layout: post
+---
+
+Found this little gem on the bottom of the cradle charger for my Beofang.
+
+![Label on a Beofang Charger](/images/beofang-chenglish.jpg)
+
+It reads as follows:
+
+    PLACE TYPE Li-ion BATTERY CHARGER
+    
+    Note: Prevent cooks meals or is injured, only battery assigns carry on the charge.
+    
+    Input: DC 10V
+    Output: DC 8.4V 400mA
+
+    Charging
+
+    The charge completes
+
+    Bright trickling charge (battery stops using has been long) / the chareto mistake.
+
+I'm just going to leave this here, and remember Beofang puts just as much attention to detail into their hardware as they do their English. But hey, at least their punctuation was completely correct.
\ No newline at end of file
diff --git a/content/blog/2016-03-21-getting-kam-xl-aprs-tnc-up-and-working.html.md b/content/blog/2016-03-21-getting-kam-xl-aprs-tnc-up-and-working.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..8c6f1609f7458bc6ffe56bbd64f6c65cf2ba176d
--- /dev/null
+++ b/content/blog/2016-03-21-getting-kam-xl-aprs-tnc-up-and-working.html.md
@@ -0,0 +1,24 @@
+---
+title: Getting KAM-XL APRS TNC up and working
+date: 2016-03-21
+tags: [Ham Radio]
+layout: post
+---
+
+After much frustration trying to get my old KAM-XL TNC up and working I finally got it all back up a few weeks ago. For the sake of future hackers I'd like to share the steps it took to get it all configured.
+
+First off, buy the correct cables for your radio and hook it up. Less problems to troubleshoot for you in case things don't work right. For me both the Yeasu FT-2000 and my Kenwood D710 radio hooked directly to a single port on each radio. For the Kenwood D710 You want to attach to the DATA port on the back of the unit; for the YEasu FT-2000 you connect it to the PACKET port. Obviously each radio type has its own name for the port to use, so that part you will need to figure out for yourself.
+
+![KAM-XL in action](/images/kam-xl-working.jpg)
+
+The hard part for me was getting the radios configured and properly tuned. Most of the information I could find on the internet gave misleading and often blatantly wrong information as far as this goes. The first, and most glaring issue, is that most internet sources claim the tuning frequency for the KAM line of TNCs (which I took to include the KAM-XL) was 10.14760 MhZ USB or the equivalent LSB frequency. I prefer to use USB since the frequency is so close to the band edge and some radios will erroneously block transmission if using USB; which was the case on my FT-2000. The actual frequency you want on HF for use with the KAM XL is 10.14710 Mhz USB. For the VHF radio you will want to tune to 144.390 Mhz FM in the USA, outside of the USA the frequency may differ.
+
+This should be enough for the radio to work, but there are a few other settings I found improved reception on the HF radio, my Yeasu FT-2000. The ideal settings for me were as follows: Attenuator off, IPO ON (no pre-amp), FLT Thru (the VRF should be turned off), R. FLT 6Khz, AGC off, Noise Blanker off, Transmit Power 25W or less. Since I see no difference when i transmit at a full 100W either way I keep it under 25W. Though for my radio I did not see any decrease in performance at full power.
+
+For the Kenwood D710 the only important settings seem to be the squelch and the TNC setting. Squelch should be set such that you hear incoming beacons but static gets squelched when no incoming signal occurs. If you don't do this the TNC will think the radio is always busy and will never send outgoing packets, only receive them. The TNC setting should be off such that neither the APRS TNC nor the KISS TNC are engaged. If you see any of the following on the display then the TNC is still engaged and must be turned off: Packet12 or APRS12. The number 12 may vary depending on the baud setting of the radio at the time.
+
+Next, we want to set a few things on the TNC itself. The easiest approach is to use KISS mode, in which case none of this matters and you can get up and running right now. ui-view or any APRS software can get you up and running in KISS mode. However if you wish to use the TNC in host mode or as a standalone TNC not hooked up to a computer then you will need to tweak the settings a bit. Also ui-view can still work with the TNC in host mode (as opposed to KISS mode) but since the TNC will send out its own beacons and status packets you will want to disable ui-view from doing this or else you will have duplicate packets.
+
+The settings of the KAM-XL you need to set, at a minimum, in host mode are as follows: MYCALL, HBAUD, and BTEXT. MYCALL should be set to the call you want to use on each port separated by a slash. So if you want no ssid on the HF port (same as ssid of 0) and a ssid of 1 on the VHF port you would do something like "WI2ARD/WI2ARD-1". Similarly if you want to transmit out of both ports you will need to set HBAUD to "300/1200". Finally set BTEXT to be your beacon text including coordinates (if you use a GPS attached to the KAM-XL this can get set automatically). My BTEXT for me was set to "!3955.05N/07510.06W&http://JeffreyFreeman.me". Everything after the ampersand is the comment, this can be anything, and the data before the ampersand are the coordinates.
+
+That's all there is to it, your KAM-XL should now be up and running in host mode. One thing to point out though, do not expect to hear many incoming packets, a few a day at most. The KAM-XL works with the older AX.25 over FSK modulation which isnt very good on HF (though works fine still on VHF). For this reason not very many packets will get through. Luckily Robust Packet Radio (RPR) is a new type of modulation that is quickly replacing APRS on HF. While RPR is backwards compatible and will still pick up the older APRS beacons the KAM-XL itself is not capable of RPR. By moving to RPR you will notice a significant increase in the quantity of received packet from the APRS network. I highly recommend updating to a SCS Tracker (the only TNC capable of RPR) if you want the best results from APRS over HF.
\ No newline at end of file
diff --git a/content/blog/2016-03-22-apex-new-aprs-protocol-new-paradigm-new-software.html.md b/content/blog/2016-03-22-apex-new-aprs-protocol-new-paradigm-new-software.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..58479ac361e31addd059b08055285ed6dd14f28d
--- /dev/null
+++ b/content/blog/2016-03-22-apex-new-aprs-protocol-new-paradigm-new-software.html.md
@@ -0,0 +1,111 @@
+---
+title: APEX, New APRS Protocol, New Paradigm, New Software
+date: 2016-03-22
+tags: [Ham Radio]
+layout: post
+---
+
+APEX stands for "APrs EXtended"; It will be a new protocol which expands on and fixes most of the issues in the older APRS protocol while still remaining backwards compatible.
+
+APEX defines both a new protocol and a new paradigm. Since much of the new protocol will not run on existing hardware APEX also includes a Python reference implementation that will provide a full APEX application out of the box. Since APEX is backwards compatible with APRS it can fully utilize existing APRS hardware to route APEX packets across the network. Though only APEX capable stations would be able to make full use of the information in an APEX packet.
+
+The software for the project can currently be found at the [APEX GitHub page](https://github.com/freemo/apex).
+
+# APEX Routing Paradigm
+
+The APEX routing paradigm defines a few new routing identifiers in addition to the common ones such as "WIDE2-2", and a few new behaviors on how the paths are consumed.
+
+The problems with the current APRS model are numerous. One problem is that aside from the use of WIDE and GATE there isn't much flexibility on how we can route packets when we don't know the explicit digipeaters with which to specify; Using WIDEN-n is more of a sledgehammer when we need a scalpel. It is also completely ineffective at being able to route a VHF message across HF channels which may be critical during an emergency. A similar problem occurs when we consider multiple HF nets across multiple bands; as it stands right now there is no paradigm that defines cross-band digipeating paths. The closest we have is the GATE path which is generally used to only digipeat from HF into VHF. This has some limited usefulness at best. As such the initial release of the APEX reference application attempts to address these problems (though testing and feedback may change the details of the specification as described here).
+
+## Cross-band Path Routing
+
+In order to facilitate cross-band routing the APEX protocol defines several new designators as well as includes many of the old ones. Obviously WIDEN-n, GATE, and your own callsign will behave similarly to how they behaved in the old paradigm. However the new band-specific designators will have a form of ##M### or ###M## where # represents any digit 0 to 9. The first group of numbers specifies the band ID, while the second group of numbers is the net ID and is optional. In this way the designator 30M would represent the 30 meter band as a whole (specifically any nets on that band the station is capable of). When 30M is specified in a path, a station will digipeat that packet out on any port which is tuned to the 30M band. Similarly 30M1 would specify a frequency (net) that resides within the 30M band. The list of identifiers for the various nets will be updated periodically as new nets show up. However right now 30M1 would specify the world wide FSK based APRS network residing on 10.1476 Mhz USB; similarly 30M2 would specify the world wide Robust Packet Radio based APRS network which resides on 10.1473 Mhz USB. similarly other designations would be chosen for other networks throughout the world. A complete list would have to be compiled.
+
+Using these new designators in a path would be relatively straight forward. If, for example, you wanted a packet to take one hop, then move over to the 30 meter Robust Packet Radio channel, then move back to ordinary VHF for its last hop, and you dont care what the specific frequency on that hop, then you would construct your path as follows:
+
+    WIDE1-1,30M2,2M
+
+Notice the last hop is just 2M with no number suffix. This is because we just want it to gate into 2M network and don't care which frequency on that band it is gating into. As a side note the GATE specifier would actually perform the same function as the 2M specifier.
+
+## Preemptive Routing
+
+Preemptive routing is unique to APEX and also made it into the initial release of the APEX reference implementation. With preemptive routing a digipeater can respond to certain specifiers in the path even when they are not the next hop in the path. With the cross-band path specifier mentioned above, ###M##, an optional ssid can be added to the end. If the ssid is not 0 then it specifies that the path should be treated preemptively. Essentially what that means is if it is the next hop then treat it normally however if it is a future hop you can skip all the hops in between and go straight to the hop, assuming the station is capable of operating that band (otherwise it is ignored).
+
+For example say we wanted to create a path where I get a packet out over HF and thats all I want to do. Consider the following path:
+
+    WIDE1-1,WIDE2-2,30M-1
+
+In this case since 30M-1 is preemptive then the packet will hop across the WIDE path but every station that hears it along the way that is capable of 30M band transmission will emit the packet on that port as well. Contrast this without preemptive paths where it would look like:
+
+    WIDE1-1,WIDE2-2,30M
+
+In this case the packet would follow the WIDE path and even if they are capable at digipeating on 30M it will not do so. Only the very last stations that hear the packet after the WIDE portion of the path is spent will actually be the ones to digipeat over to 30M. This would cause far fewer emissions on the 30M band while still ensuring the transmitting stations are geographically spread out. In an emergency this might be a good way to send an emergency packet out.
+
+When a path specifier has a non-zero ssid it is preemptive. The value of the ssid indicates its priority. So when there is a long path with several preemptive routes specified it is always the one that is the highest priority and when there is a tie it is always the right-most (last in the path) specifier that gets triggered. For example say we had the following path:
+
+    ECHO*,80M-2,WIDE1,30M-2,80M-1
+
+In this case if the packet is received from a all-band capable station then it would emit the path for 30M-2 when digipeating the packet. The reason is that 2 is a higher priority than 1 and of those of equal priority the 30M-2 was the later one in the path.
+
+Also important to note is that when preemptive pathing is executed all the intermediary paths that were skipped get dropped from the path entirely. So the above path, once digipeated, would be transformed to the following path:
+
+    ECHO*,WI2ARD-1*,30M-2*,80M-1
+
+Another interesting twist is how preemptive routing handles the other types of path specifiers. Basically the WIDEN-n type specifiers are never treated preemptively. However specifiers which reflect the stations own callsign are always treated preemptively. callsigns, unlike cross-band specifiers do not have their priority reflected by the presence of an ssid; they are also still treated as preemptive even when they have an ssid of 0.
+
+When there is a mix of callsign and cross-band preemptive specifiers in the same path then first the cross-band preemptive specifier is determined as before, second the right most occurrence of the station's callsign is determined. Which ever of the two occur right most in the path is the one that wins. For example:
+
+    WIDE2-2,WI2ARD-1,30M-1
+
+In this case the preemptive path would jump to 30M1. However if instead we had the following:
+
+    WIDE2-2,30M-1,WI2ARD-1
+
+In this case the preemptive pathing would jump right to the WI2ARD-1 path.
+
+# APEX Reference Implementation
+
+As part of the APEX initiative the project includes an APEX and APRS client that acts as the APEX reference implementation. It is extensible and anyone with python experience can write plugins to expand it and hook their own software into it. This allows for lots of opportunities from the community to get involved and contribute to the project.
+
+Currently the reference implementation implements all the features I described here so far. It also includes the transmitting beacon, status, and id packets, and digipeating. So everything is ready to be played with. As new features roll out they will be added to the APEX Reference Implementation as well. It is a command line Python 3 application and you can find it [on github](https://github.com/freemo/apex). It is very simple to run and you just need to configure a few things in the config file to get it up and running.
+
+Below is a screenshot showing it digipeating packets as they come in across two TNCs.
+![APEX screen shot](/images/peak-screenshot.png)
+
+# What's Next?
+
+There are many features that have yet to be implemented and we have some pretty lofty goals in store for APEX. A lot of this is brainstorming from the team so it is subject to change as well. But here are the ideas we have so far on what needs to get implemented into APEX and defined within the protocol.
+
+* Ability to send a signal check packet. These will never get digipeated. Instead you send a packet which contains some diagnostic information about the antenna (HAAT, Power, gain, etc). Next any station which directly heard you will respond immediately with information regarding their own antenna information. Also if possible data will be encoded to indicate received signal strength of the received packet (on most setups this information wont be encoded). The signal test request packet will also specify if they desire the reply packet to be over the air, or through APRS-IS or both. In this way the information can be used for someone to probe band conditions as well as objectively try to configure a new antenna installation.
+
+* When possible encapsulate all existing AX.25 packets in FX.25 packets instead, thereby introducing backwards-compatible Forward Error Correction.
+
+* Provide throttling to prevent congestion. Packets are given priority based on several factors such as the length of the packet, and how frequent the sender sends packets, to determine a packets priority. Higher packets go through while lower priority packets get dropped. Misbehaving nodes, or out of date notes not running APEX would be potential reasons to give a packet a lower priority in addition to traffic statistics.
+
+* Include the ability to send images and other media, potentially across multiple packets.
+
+* Optionally request acks at the packet level. This is particularly useful when using callsign paths. Though for WIDE paths it is still useful to know what paths a packet took for diagnostic reasons and path discovery reasons. In this way an initial packet in a series can use wide but once the paths are discovered then the explicit paths can be used for the subsequent packets. This would reduce network congestion.
+
+* Subscribe-to-callsign: a mechanism whereby a request can be sent to a normally out-of-range station to send me periodic updates to their beacon or other similar packets (comment, id). This is useful for tracking a friend when the station doesnt have internet access of their own.
+
+* Improve or replace the IGATE system so that multiple instances of the same packet can be reported to it (with different paths)
+
+* Rolling beacon ranges. Stations will move over to a store and forward approach. Essentially they will cache as much information about the system as possible. The longer it stays on the net the more information it should receive from distance nodes. This is accomplished with rolling beacons. Basically every station will keep track of how many times they have heard a beacons from the various stations. Any time a beacon is heard more than 'D' times where the receiving station is the last hop, then it will digipeat the beacon, and reset the counter. The value of D is an integer representing decay rate. A higher letter for D and stronger the decay rate. What this will cause is a beacon from a station that has been on a long time will get their beacon across the world hundreds of hops, but very slowly. Because the packets decay with distance this also wont cause a lot of net congestion. For example you might hear a beacon on VHF come from across the continent, but such occurrences would be very rare as well. So it may be exciting to follow rare DX like that. Using this system even if the network went down across the world (not an expected occurrence) it would still be possible for systems to communicate across long distance APRS links, by leveraging the stores cache of beacons every station has they can easily form a path.
+
+* Smart routing for internet capable stations. When considering #8 combined with IGATE access it makes smart routing a possibility. Smart routing would be the process where the route of a packet to reach its destination can be discovered from the fixed stations in a region. The idea is that if the internet goes down these stations still have a cache locally of where the stations are around the world and in their area. This information can be used to create more direct route for message-type packets with a specific destination. This will significantly help congestion since these packets no longer need to try to follow WIDE type paths. Plus a system like this will be more resilient in situations where you have wide spread internet outages.
+
+* Enforcement of certain behavioral rules for stations and to react automatically to a misbehaving station. For example if a beacon rate is too high then all beacons above the accepted rate will be dropped. This will also penalize the priority that station gets when routing its packets.
+
+* Proper standards defined and implemented to encode the protocol version into the packets.
+
+* Geographic routing: We want to add the ability to route packets to approximate geographic coordinates, either in an attempt to send a specific message or to transmit a WIDE message at that location to seek contact with anyone who may be actively listening.
+
+* Better software messages for responding to various types of messaging: CQ, Bulletins, and messages need a nice clean GUI to work with or command line tool
+
+* Delay Tolerant Networks - The general use case is to leverage moving cars for long-distance packets where latency isnt a top concern. It can transport high volumes of data long distance where normal packets could not.
+
+* Retry packets from partial path: When a packet doesnt get to its destination, since stations will be expected to a have a large cache of packets heard, delivery can be retried by the closest node that successfully received the packet. This would make long-distance packets far more feasible.
+
+* Mobile stations can announce stationary "home station". Once geographic packet routing is in place then two mobile stations can stay in touch by simply knowing their route to the home station at anytime. This simplifies discovering routes that would otherwise be impossible between two mobile stations without the use of the internet.
+
+* Formalize the use of ID packets to clearly specify the various path identifiers that can be used with the station and their effects. for example "WI2ARD/30M2 IGATE" might specify I have a station with ID WI2ARD on 30 meter robust packet radio, and it is also igate capable. This, along with position beacons, should make it possible to discover paths dynamically.
\ No newline at end of file
diff --git a/content/blog/2016-04-01-apex-running-on-a-raspberry-pi.html.md b/content/blog/2016-04-01-apex-running-on-a-raspberry-pi.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..dfdc29d4a160ee1a0354b87483c30fe2d66dc694
--- /dev/null
+++ b/content/blog/2016-04-01-apex-running-on-a-raspberry-pi.html.md
@@ -0,0 +1,10 @@
+---
+title: APEX running on a Raspberry Pi
+date: 2016-04-01
+tags: [Ham Radio]
+layout: post
+---
+
+We got [APEX](http://ApexProtocol.com) running on a Raspverry Pi today. Wonderful new addition to the shack.
+
+![APEx running on Raspberry Pi](/images/peak-on-pi.jpg)
\ No newline at end of file
diff --git a/content/blog/2016-05-27-the-great-nebula-in-orion.html.md b/content/blog/2016-05-27-the-great-nebula-in-orion.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..b24fa70682296dbd754bd9790142dbd5b9a14bd5
--- /dev/null
+++ b/content/blog/2016-05-27-the-great-nebula-in-orion.html.md
@@ -0,0 +1,22 @@
+---
+title: The Great Nebula in Orion
+date: 2016-05-27
+tags: [Astronomy]
+layout: post
+---
+
+As some of you may already know I am an avid Astrophotographer. Several years back I set out to photograph the Great Nebula in orion, particularly focusing on the 4 brightest stars at its center, called the trapezium. These stars produce the majority of the light responsible for lighting up the entire nebula. They are also so bright and closely spaced together that they often appear to the onlooker to be a single super bright star. My primary focus in this shoot was to be able to provide enough resolution to be able to see the trapezium as 4 distinct stars.
+
+![Deep field image of The Great Nebula in Orion](/images/great-nebula-trapezium.jpg)
+
+The image you see above is the final product of several days worth of work trying to capture and process the Orion Nebula (NGC 1976 / The Great Nebula in Orion / M42) taken on November 12th 2010. It also includes a faint wisp of De Mairan's Nebula (NGC 1982 / M43). The shot was taken with an EQ-6 Mount without an autoguider attached to an 800mm focal length, 8&quot; Aperture, f/4 Newtonian style Telescope. Finally my Canon Rebel T1i acted as the imager. I used a 3x Barlow without an eyepiece to increase the focal length (zoom). The majority of the shot is the result of 6 stacked 30 second 3200 ISO shots. A stack of 15 additional shots were used on the Trapezium star cluster in the center. This shot was also post-processed to improve contrast and light levels. The primary goal was to show the detail of the inner core of the Orion Nebula.
+
+Of course in the interest of science I couldn't just stop there. I felt it was important, and hopefully useful, to chart the various stars in the image so people knew exactly what they were looking at, as well as cross reference it with any catalogs.
+
+![Simple annotated image of The Great Nebula in Orion](/images/great-nebula-trapezium-charted-common.jpg)
+
+In the above picture all the stars big enough to have common names have been labeled with their common names. Unfortunately none of the other stars in the picture have names so the majority were left blank.
+
+![Extended annotated image of The Great Nebula in Orion](/images/great-nebula-trapezium-charted-all.jpg)
+
+Of course I wasn't going to stop there. While many stars didn't have names, at the very least, they showed up in a few star catalogs somewhere. The final image above labels every single star, no matter how faint, with the catalog identification value. Since some of the stars show up in multiple catalogs in those cases multiple identifiers are listed.
diff --git a/content/blog/2016-05-30-restricted-logarithmic-growth-with-injection.html.md b/content/blog/2016-05-30-restricted-logarithmic-growth-with-injection.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..bd3e67f18ffce6c051b74a146ae442f78d89ec53
--- /dev/null
+++ b/content/blog/2016-05-30-restricted-logarithmic-growth-with-injection.html.md
@@ -0,0 +1,124 @@
+---
+title: Restricted Logarithmic Growth with Injection
+date: 2016-05-30
+tags: [Mathematics]
+layout: post
+---
+
+The Logistic Function, sometimes with modifications, has been used successfully to model a large range of natural systems. Some examples include bacterial growth, tumor growth, animal populations, neural network transfer functions, chemical reaction rates, language adoption, and diffusion of innovation, to name a few. The real world applications are simply staggering.
+
+Because of the utility of this powerful little equation it has lead me to investigate more thoroughly how it works, and how it can be applied to novel innovations.
+
+There have been many contributions that have led to numerous variations of the Logistic function. One that struck my attention in particular is the Verhulst Equation, sometimes referred to descriptively as the "Restricted Logarithmic Growth Function", or simply "Logistic Growth Function". It is used in ecology to model the expected growth of a population while taking into consideration that resources, such as food, are finite, resulting in a maximum sustainable population, called the carrying capacity. The model demonstrates an exponential growth of the population when it is significantly below this carrying capacity, but as the population approaches the carrying capacity, and resource competition increases, the growth rate slows asymptotically. The Verhulst Equation has been tested against numerous real world populations, including Seals and Elk, and has been shown to be a relatively accurate model.
+
+Of course the Verhulst Equation isn't limited to modeling animal populations, it has also been successfully used to model diffusion of innovation. In this sense it can be used to represent how ideas spread throughout a population. It is this particular application that was most interesting to me.
+
+# Unrestricted Exponential Growth
+
+As with any complex idea we have to start with the basics. Whether we are talking about an idea or an organism, if it is capable of spreading through multiplying itself, then obviously the more it spreads, the faster it will spread. You start out with one, which turns into two, then four, then eight, in just a few iterations you will have billions; if there is nothing to impede the growth, then it will follow an exponential curve.
+
+We can model this sort of growth quite simply; the rate at which new members of the population will be observed can be represented as the growth rate, G, multiplied by the population, p. 
+
+![](/images/UnresGrowRate.png)
+
+You will notice in the above equation that there is a derivative on the left hand side of the equation. The equation can therefore be read as "The rate of change in the population for each unit of time is equal to the growth rate multiplied by the current population". If the population is seen to double each year, for example, then time would have a unit of years, and G would be 2.
+
+Of course the equation becomes much more useful if we can get rid of the derivative and simply express the total population at any point in time. To do that we integrate the equation, while solving for p and we arrive at the following equation.
+
+![](/images/UnresPopu.png)
+
+Here the variable e is Euler's constant, and P<sub>0</sub> is our constant of integration which represents the population when time, t, is equal to 0.
+
+To help visualize whats going on lets try some arbitrary values for our constants. Lets suppose the growth rate is 0.1, and our P<sub>0</sub> is 1. This would represent a initial population with only one member capable of replicating once for every 10 units of time that have passed. If we plug these values in and simplify we arrive at the following equation.
+
+![](/images/UnresPopEx.png)
+
+It is immediately obvious this is an exponential function, nothing too special about that. We can see from the graph below that the population would continue to grow exponentially and unrestricted.
+
+![](/images/expo.png)
+
+# Restricted Logarithmic Growth
+
+Of course in the real world it is rare that anything will truly grow in an unrestricted manner. Space is finite, resources are finite, eventually everything must stop growing. This brings us to the Restricted Logarithmic Growth model, also called the Verhurst Equation.
+
+Verhurst recognized that, at least amongst animals, resources are limited. When unlimited resources are available to an organism it will grow and reproduce unrestricted. However as the population grows resources become scarce. The more scarce the resources, the greater the restriction on growth and reproduction, and this effect will scale according to the proportion of the resources which are free. Therefore as the population reaches the carrying capacity of the environment then the growth rate should approach 0 in a linear fashion.
+
+Therefore if we take the growth rate equation from before, we can add an additional term to represent the availability of resources.
+
+![](/images/ResGrowthRate.png)
+
+In the above equation we can see that we multiply by a term that scales proportionally to the population. The term will evaluate to 1 when the population is 0, and will approach 0 as the population approaches the carrying capacity, represented as k(t). This is where the population's growth restriction is represented.
+
+Before we can actually solve the equation above, we have to actually know what the k(t) function evaluates to; after all we can't perform integration on a function if we don't know what that function is. So lets just assume the carrying capacity is a constant we will call K.
+
+![](/images/ResGrowthRateConst.png)
+
+At this point we can solve for p and integrate the equation as before. This will give us an equation which models the total population as a function of time.
+
+![](/images/ResPop.png)
+
+The above equation is usually what people refer to when they talk about the Verhulst equation, but it might help to see what it looks like with some actual values plugged in for the constants. Lets pick similar values with a growth rate, G, of 0.1, an initial population, P<sub>0</sub> of 1, and a carrying capacity, K, of 100.
+
+![](/images/ResPopEx.png)
+
+Once we plug these values in and simplify we arrive at the above equation. It is a specific form of the Logistic Function. If we graph that we will get the following graph.
+
+![](/images/ResPopExGraph.png)
+
+In the above graph the dotted horizontal orange line represents the carrying capacity, K. This is of course a constant with a value of 100. We can see that early on the population has what appears to be an exponential growth pattern, but as it begins to approach the orange dashed line it asymptotically tappers off. Of course as time approaches infinity (the x axis) then the population approaches the carrying capacity. 
+
+## Time-varying Carrying Capacity
+
+If we want to play with this equation a bit more we can make things more complex (and fun) by picking a carrying capacity that actually changes with time. If we go back to the original growth rate equation we can make k(t) a function equal to (t/10)+100, rather than a constant. If we do this, and keep the growth rate and P<sub>0</sub> constants the same as before, then we will get the following equation.
+
+![](/images/ResGrowthRateSlopedEx.png)
+
+Again we can solve for p, integrate, and simplify and we will arrive at the following equation.
+
+![](/images/ResGrowthSlopedEx.png)
+
+In the above equation Ei is the Exponential Integral Function. If you don't know what that is don't worry, we can just graph the equation below to get a better understanding of how it behaves.
+
+![](/images/ResGrowthSlopedExGraph.png)
+
+You can see the equation behaves similarly in this graph as in the last graph. The only exception is that the carrying capacity starts at 100 and slowly increases over time. As this happens the population also increases to match the carrying capacity without ever exceeding the carrying capacity. Pretty much how we would expect it to work.
+
+# Restricted Logarithmic Growth with Injection
+
+This is where the lessons of history end, and my own contribution begins. I was left considering the effects of a modern world and how they could be reflected in the Verhurst model.
+
+As I mentioned in the introduction the Verhurst equation has since been used in countless applications outside of ecology models. One that was particularly interesting is that it has been used successfully to model the Diffusion of Innovation. Essentially it can accurately describe the adoption of an idea within a population. For example it can model the proliferation of linguistic changes such as the change in the spelling of a word, or even the adoption of an entirely new word.
+
+All of this, of course, has implications in marketing where the marketing penetration of a product can spread through word of mouth alone and can therefore be modeled using the Verhurst equation. But how could we use this to also account for the effects of advertising, which can often act as an accelerant to the spreading of an idea that is still primarily driven by word of mouth. Thats when inspiration struck.
+
+If we accept that ideas spreading through word of mouth will often fit a model similar to population growth, then advertising is a bit like artificially injecting new members into a population as it grows. The advertising acts as a jump start to the population growth, accelerating it, and magnifying the effects that would be seen from word of mouth alone.
+
+If I could incorporate this effect into the model not only could it be used for modeling product adoption, but conservationism efforts as well. It is not uncommon for conservationists to breed in captivity and then release in the hopes of supplementing a specie's population. In this sense it would be modeled with the same artificial injection.
+
+In fact almost all the examples given earlier where the Verhurst model has been used in the past could potentially benefit from this addition. Consider chemical reactions; an artificial injection factor could represent the effects of slowly adding new reactants to a reaction as it progresses.
+
+So I had to figure out where this new function might fit in. When we go back and take a look at our original differential growth rate equation we have two terms, the left hand term represented the unrestricted growth rate, and the right hand term represented the constraint on growth as the resource contention grows. So all it really takes is adding an injection factor to the left hand term. The new equation looks like the following.
+
+![](/images/ResInjGrowthRate.png)
+
+You will notice in the above equation all we did was add the new injection function, shown as i(t). This is just the number of artificially injected members of the population per unit of time. By representing it as a function it can of course change over time such that we can inject a varying number of members over time.
+
+It is important to keep in mind that this injection is still scaled by the right hand term. The more resource contention there is the less effective the injection is likely to be. If we consider the earlier example of breeding animals in captivity and releasing them into the wild then this represents the fact that if resources are scarce many of the animals released are likely to die of starvation before they have a chance to have children. In the case of advertisement, or Diffusion of Innovation in general, then it is reasonable to expect that the more people that know about an idea the harder it would be for your advertisements to reach new people who have yet to hear word of it. If Pepsi plays a commercial on TV, for example, you might expect the vast majority of people who see it to already know about the Pepsi brand.
+
+As before if we want to play around with the equation a bit to see how the model plays out we are going to have to create some definitions for our functions.
+
+![](/images/ResInjGrowthRateConst.png)
+
+For the sake of simplicity we turned our injection function, i(t), into the constant I, and the carrying capacity, k(t), into the constant K. This just gives us something to play with and allows us to solve for p and integrate in the following equation.
+
+![](/images/ResInjGrowthConst.png)
+
+Now lets plug in some arbitrary values for our constants and see how it graphs out. Lets pick a value of 1/2 for I, 1/10 for G, 100 for K, and 1 for P<sub>0</sub>. If we plug these values in and simplify we arrive at the following equation.
+
+![](/images/ResInjGrowthConstExHalf.png)
+
+Finally, lets graph the carrying capacity and growth model as before. In the graph below carrying capacity is once again represented by the dashed yellow line, and the solid blue line is the population. We can immediately notice that while the graph still has a logistic curve to it that the population grows significantly quicker in the beginning than with the other models, but despite the injection it still does not exceed the carrying capacity at any point.
+
+![](/images/ResInjGrowthConstExHalfGraph.png)
+
+While this model has yet to be tested against real world data I am hopeful that it will provide an accurate representation of an artificial population injection in growth models. I am looking forward to see how I and others might apply this and similar models to data in the future.
\ No newline at end of file
diff --git a/content/blog/2017-04-06-conditional-probabilities-and-bayes-theorem.html.md b/content/blog/2017-04-06-conditional-probabilities-and-bayes-theorem.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..48c0545b0876890dea49b06c2a2ca36a7eda7caa
--- /dev/null
+++ b/content/blog/2017-04-06-conditional-probabilities-and-bayes-theorem.html.md
@@ -0,0 +1,329 @@
+---
+title: Conditional Probabilities and Bayes Theorem
+date: 2017-04-06
+tags: [Mathematics, Tutorial, Statistics]
+layout: post
+---
+
+I've been getting a lot of questions from friends lately about what Bayes
+Theorem means. The confusion is understandable because it appears in a few
+models that seem to be completely unrelated to each other. For example
+we have Naive Bayes Classifiers and Bayesian Networks which operate on
+completely different principles. Moreover this is compounded with a lack of
+understanding regarding unconditional and conditional probabilities.
+
+In this article I offer a tutorial to help bring the lay person up to speed
+with some basic understanding on these concepts and how Bayes Theorem can be
+applied.
+
+# Probability Space
+
+We have to start by explaining a few terms and how they are used.
+
+A **Random Trial** is a trial where we perform some random experiment. For
+example it might be flipping a coin or rolling dice.
+
+The **Sample Space** of a Random Trial, typically denoted by \\(\Omega\\),
+represents all possible outcomes for the Random Trial being performed. So for
+flipping a coin the outcome can be either heads or tails, so the Sample Space
+would be a set containing only these two values.
+
+$$ \Omega = \{Heads, Tails\} $$
+
+For rolling dice the Sample Space would be the set of all the various faces for
+the dice being rolled. When rolling only one standard six sided die the Sample
+space would be as follows.
+
+$$ \Omega = \{1, 2, 3, 4, 5, 6\} $$
+
+In both of these examples the Random Trial being performed will select an
+outcome from their respective Sample Space at random. In these trials each
+outcome has an equal chance of being selected, though that does not necessarily
+need to be the case.
+
+For our purposes here I want to formulate a Random Trial thought experiment that
+simulates a medical trial consisting of 10 patients. We will be using this
+example throughout much of this tutorial. Therefore our Sample Space will
+be a set consisting of 10 elements, each element represents a single unique
+patient in the trial. Patients are represented with the variable *x* with a
+subscript from 1 to 10 that uniquely identifies each patient.
+
+$$ \Omega = \{x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8, x_9, x_{10}\} $$
+
+An **Event** in the context of probabilities is a set of outcomes that can be
+satisfied. Typically these sets are represented using lowercase greek letters
+such as \\(\alpha\\) or \\(\beta\\). For example if we were rolling a single
+die and wanted it to land on an odd number then the Event representing an odd
+outcome would be represented as the following set.
+
+$$ \alpha = \{1, 3, 5\} $$
+
+Similarly if we simply wanted to roll the number 6 then the Event would be a set
+containing only that one number.
+
+$$ \alpha = \{6\} $$
+
+The **Event Space**, often denoted by \\(\mathcal{F}\\), is the set of all
+Events to be observed. It is a set of sets that represents every possible
+combination of subsets of the Sample Space or some part thereof. Not all Events
+in the event space need to be possible however. For example if we are talking
+about flipping a coin then the Event Space would have, at most, 4 members
+representing outcomes for Heads, Tails, either Heads or Tails, and neither Heads
+nor Tails. We could represent this with the following set notation.
+
+$$ \mathcal{F} = \{\{\}, \{Heads\}, \{Tails\}, \{Heads, Tails\}\} $$
+
+The empty set is usually represented with the \\(\emptyset\\) symbol. So the
+previous set can be rewritten using this shorthand as follows.
+
+$$ \mathcal{F} = \{\emptyset, \{Heads\}, \{Tails\}, \{Heads, Tails\}\} $$
+
+Notice that one of the members of the Event Space is equivalent to the Sample
+space. the fact that it contains both the empty set and the Sample Space as
+members is more a matter of mathematical completeness and plays a role in making
+some mathematical proofs easier to carry out. For our purposes here they will
+largely be ignored.
+
+At this point I want to go over a little bit of mathematical notation that may
+help when reading other texts on the subject. The first is the concept of a
+**Power Set**. The Power Set is simply every possible combination of subsets for
+a particular set. In the example above regarding the coin toss Event Space we
+can say that the Event Space specified is the Power Set of the Sample Space. The
+notation for the Power Set is the number 2 with an exponent that is a set. For
+example short hand for the above Event Space definition could have been the
+following.
+
+$$ \mathcal{F} = 2^{\Omega} $$
+
+Every Event Space must be either equal to, or a subset of, the Power Set of the
+Sample Space. We can represent that with the following set notation.
+
+$$ \mathcal{F} \subseteq 2^{\Omega} $$
+
+Going back to our example of patients in a clinical trial we might want to know
+what the chance is of selecting a patient at random that has a fever. In that
+case the Event would be the set of all patients that have a fever and the
+outcome would be a single patient selected at random. Each Event is an element
+in the Event Space. So we will denote it as \\(\mathcal{F}\\) with a subscript
+so it is easier to read than it would be using arbitrary greek lowercase
+letters, as is the usual convention. If 3 of the 10 patients in our Sample Space
+have a fever we can represent the fever Event as follows.
+
+$$ \mathcal{F}_{fever} = \{x_1, x_6, x_8\} $$
+
+This means that if we select a patient at random and that patient is a member of
+the \\(\mathcal{F}_{fever}\\) set then that patient has a fever and the outcome
+has satisfied the event. Similarly we can define the event representing patients
+that have the flu with the following notation.
+
+$$ \mathcal{F}_{flu} = \{x_2, x_4, x_6, x_8\} $$
+
+As stated earlier Events are simply members of the Event Space. This can be
+indicated using the following set notation which simply states that the
+flu Event is a member of the Event Space and the fever Event is also a member of
+the Event Space.
+
+$$ \mathcal{F}_{fever} \in \mathcal{F} $$
+
+$$ \mathcal{F}_{flu} \in \mathcal{F} $$
+
+Similarly if we wish to indicate that the fever and flu Events are subsets of
+the Event Space we can do so using the following notation.
+
+$$ \mathcal{F}_{fever} \subset \Omega $$
+
+$$ \mathcal{F}_{flu} \subset \Omega $$
+
+The only term left to define is the **Probability Space**. This is just the
+combination of the Event Space, the Sample Space, as well as the probability of
+each of the Events taking place. It represents all the information we need to
+determine the chance of any possible outcome occurring. It is denoted as a
+3-tuple containing these three things. The probability, P, represents a function
+that maps Events in \\(\mathcal{F}\\) to probabilities.
+
+$$ (\Omega, \mathcal{F}, P) $$
+
+# Unconditional Probability
+
+This is where things get interesting. Since we have all the important terms
+defined we can start talking about actual probabilities. We start with the
+simplest type of probability, the **Unconditional Probability**. These are the
+sort of probability most people are familiar with. It is the chance that an
+outcome will occur independent of any other Events. For example if I flip
+a coin I can say the probability of it landing on Heads is 50%; this would be
+an Unconditional Probability.
+
+If all the outcomes in our Sample Space have the same chance of being selected
+by a Random Trial then calculating the Unconditional Probability is rather easy.
+The Event would represent all desired outcomes from our Sample Space. So if we
+wanted to flip a coin and get heads then our Event is a set with a single member
+and the Sample Space consists of only two members, the possible outcomes. We
+can write this as the following.
+
+$$ \Omega = \{Heads, Tails\} $$
+
+$$ \mathcal{F}_{Heads} = \{Heads\} $$
+
+If the above event is satisfied by the flip of a coin it means the outcome of
+the coin toss was heads. To calculate the probability for this event we simply
+count the number of members in the Event Set and divide it by the number of
+members in the Sample Space. In this case the result is 50% but we can represent
+that as follows.
+
+$$ P(\mathcal{F}_{Heads}) = \frac{1}{2} $$
+
+The number of members in a set is called **Cardinality**. We can represent that
+using notation that is the same as the absolute value sign used around a set.
+Therefore we can represent the previous equation using the following notation.
+
+$$ P(\mathcal{F}_{Heads}) = \frac{\mid \mathcal{F}_{Heads} \mid}{\mid \Omega \mid} = \frac{1}{2} $$
+
+We can generalize this for any Event represented as \\(\mathcal{F}_{i}\\) with
+the following definition for calculating an Unconditional Probability.
+
+$$ P(\mathcal{F}_{i}) = \frac{\mid \mathcal{F}_{i} \mid}{\mid \Omega \mid} $$
+
+Now let's apply this to our clinical trial example from earlier. Say we wanted to
+calculate the chance of selecting someone from the 10 patients in the trial, at
+random, such that the person selected has a fever. We can calculate that with
+the following.
+
+$$ P(\mathcal{F}_{fever}) = \frac{\mid \mathcal{F}_{fever} \mid}{\mid \Omega \mid} = \frac{3}{10} $$
+
+We can also do the same for calculating the chance of randomly selecting a
+patient that has the flu.
+
+$$ P(\mathcal{F}_{flu}) = \frac{\mid \mathcal{F}_{flu} \mid}{\mid \Omega \mid} = \frac{4}{10} = \frac{2}{5} $$
+
+# Conditional Probability
+
+A **Conditional Probability** takes this idea one step further. A Conditional
+Probability specifies the probability of an event being satisfied if it is known
+that another event was also satisfied. For example using our clinical trial
+thought experiment one might ask what is the probability of someone having the
+flu if we know that person has a fever. This would be represented with the
+following notation.
+
+$$ P(\mathcal{F}_{flu} \mid \mathcal{F}_{fever}) $$
+
+Assuming that having a fever has some effect on the likelihood of having the flu
+then this probability would be different than the chance for just any randomly
+selected member having the flu, after all people with fevers are more likely to
+have the flu than people without a fever.
+
+Since we already know which patients have the flu and which have a fever it is
+easy to determine an answer to this question. To calculate the probability we
+can look at how many patients in our Sample Space have a fever and what
+percentage of those patients with fever also have the flu. By looking at the
+data we can see that there are 3 patients with fevers and of those patients only
+2 of them have the flu. So the answer is \\(\frac{2}{3}\\).
+
+$$ \mathcal{F}_{fever} = \{x_1, x_6, x_8\} $$
+
+$$ \mathcal{F}_{flu} = \{x_2, x_4, x_6, x_8\} $$
+
+$$ P(\mathcal{F}_{flu} \mid \mathcal{F}_{fever}) = \frac{2}{3} $$
+
+We can generalize this statement by saying that we take the intersection of the
+sets that represent the Event for patients with the flu and patients with a
+fever. The intersection is just the set of all the elements that those two sets
+have in common.
+
+The symbol for intersection is \\(\cap\\), therefore we can show the
+intersection of these two sets as follows.
+
+$$ \mathcal{F}_{flu} \cap \mathcal{F}_{fever} = \{x_6, x_8\} $$
+
+Another way to look at calculating the Conditional Probability would be to
+take the Cardinality of the intersection of these two Events and divide it by
+the cardinality of the conditional Event that has been satisfied. So now we have
+the following.
+
+$$ P(\mathcal{F}_{flu} \mid \mathcal{F}_{fever}) = \frac{\mid \mathcal{F}_{flu} \cap \mathcal{F}_{fever} \mid}{\mid \mathcal{F}_{fever} \mid} = \frac{2}{3} $$
+
+We can also ask a similar, but markedly different, question. If we know a
+patient has the flu what is the chance that same patient will have a fever. For
+this we can use the same logic as above and come up with the following.
+
+$$ P(\mathcal{F}_{fever} \mid \mathcal{F}_{flu}) = \frac{\mid \mathcal{F}_{flu} \cap \mathcal{F}_{fever} \mid}{\mid \mathcal{F}_{flu} \mid} = \frac{2}{4} = \frac{1}{2} $$
+
+As you can see the only thing that changed is the denominator which is now the
+Cardinality of the flu Event rather than the fever Event. We can generalize the
+equation for calculating a Conditional Probability as follows.
+
+$$ P(\mathcal{F}_{i} \mid \mathcal{F}_{j}) = \frac{\mid \mathcal{F}_{i} \cap \mathcal{F}_{j} \mid}{\mid \mathcal{F}_{j} \mid}$$
+
+# Bayes Theorem
+
+**Bayes Theorem** itself is remarkably simple on the surface yet immensely useful
+in practice. In its simplest form it lets us calculate a Conditional Probability
+when we have limited information to work with. If we only knew, for example, the
+probabilities for \\(P(F_i \mid F_j)\\), \\(P(F_i)\\), and \\(P(F_j)\\), then using
+Bayes Theorem we could calculate the probability for \\(P(F_j \mid F_i)\\). The
+precise equation for Bayes Theorem is as follows.
+
+$$ P(\mathcal{F}_{i} \mid \mathcal{F}_{j}) = \frac{ P(\mathcal{F}_{j} \mid \mathcal{F}_{i}) \cdot P(\mathcal{F}_{i}) }{ P(\mathcal{F}_{j}) } $$
+
+Let's say we didn't know all the details of the clinical trial from earlier; we
+have no idea what the Sample Space is or what members belong to each Event set.
+All we know is the probability that someone will have a fever at any given time,
+the probability they will have the flu, and the probability that someone with
+the flu has a fever. From this limited information, and using Bayes Theorem it
+would be possible to infer the probability of having the flu if you have a
+fever. First let's copy the probabilities we know to match what we previously
+calculated manually.
+
+$$ P(\mathcal{F}_{fever}) = \frac{3}{10} $$
+
+$$ P(\mathcal{F}_{flu}) = \frac{2}{5} $$
+
+$$ P(\mathcal{F}_{fever} \mid \mathcal{F}_{flu}) = \frac{1}{2} $$
+
+Using only this information, along with Bayes Theorem, we can calculate the
+probability of someone having the flu if they have a fever as follows.
+
+$$ P(\mathcal{F}_{flu} \mid \mathcal{F}_{fever}) = \frac{ P(\mathcal{F}_{fever} \mid \mathcal{F}_{flu}) \cdot P(\mathcal{F}_{flu}) }{ P(\mathcal{F}_{fever}) } $$
+
+$$ P(\mathcal{F}_{flu} \mid \mathcal{F}_{fever}) = \frac{ \frac{1}{2} \cdot \frac{2}{5} }{ \frac{3}{10} } $$
+
+$$ P(\mathcal{F}_{flu} \mid \mathcal{F}_{fever}) = \frac{2}{3} $$
+
+This solution of course agrees with our earlier results when we were able to
+calculate the answer by manually counting the data. However, this time we did
+not have to use the data directly.
+
+Let's do one more example to drive the point home. Say we have a test for
+Tuberculosis, TB, that is 95% accurate. That is to say that if you have TB then
+95% of the time the test will give you a positive result. Similarly if you do
+not have TB then only 95% of the time will you get a negative result. We can
+represent this as follows.
+
+$$ P(\mathcal{F}_{positive} \mid \mathcal{F}_{infected}) = \frac{19}{20} $$
+
+Furthermore let's say we know that only one in a thousand members of the
+population are infected with TB at any one time. We can demonstrate this as
+follows.
+
+$$ P(\mathcal{F}_{infected}) = \frac{1}{1000} $$
+
+Finally let's say when tested on the general population that 509 out of every
+10,000 people received a positive result. We can represent that with the
+following.
+
+$$ P(\mathcal{F}_{positive}) = \frac{509}{10000} $$
+
+With this information it is possible to calculate the probability someone will
+have TB if they receive a positive test result. Using Bayes Theorem we can solve
+for the probability as follows.
+
+$$ P(\mathcal{F}_{infected} \mid \mathcal{F}_{positive}) = \frac{ P(\mathcal{F}_{positive} \mid \mathcal{F}_{infected}) \cdot P(\mathcal{F}_{infected}) }{ P(\mathcal{F}_{positive}) } $$
+
+$$ P(\mathcal{F}_{infected} \mid \mathcal{F}_{positive}) = \frac{ \frac{19}{20} \cdot \frac{1}{1000} }{ \frac{509}{10000} } $$
+
+$$ P(\mathcal{F}_{infected} \mid \mathcal{F}_{positive}) = \frac{ 19 }{ 1018 } = 0.018664 = 1.8664\% $$
+
+This gives us a very surprising result. It says that of the people who take the
+TB test and show up positive less than 2% of them actually have TB. This
+demonstrates the importance of using very accurate clinical tests when testing
+for diseases that have a low occurrence in the population. Even a small error
+in the test can give false positives at an alarmingly high rate.
diff --git a/content/blog/2017-04-09-latex-inspired-rendering-of-algorithms-in-html.html.md b/content/blog/2017-04-09-latex-inspired-rendering-of-algorithms-in-html.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..a13683b020a7b0cb7c14485cd873d4d5e0e4d921
--- /dev/null
+++ b/content/blog/2017-04-09-latex-inspired-rendering-of-algorithms-in-html.html.md
@@ -0,0 +1,74 @@
+---
+title: Latex Inspired Rendering of Algorithms in HTML
+date: 2017-04-09
+tags: [Programming]
+layout: post
+---
+
+I recently updated the code for my blog (yes, this one) to render, in classic latex style, algorithms as pseudocode. This
+style has been so extensively used from the 80's and continues to be used as a standard format for rendering algorithms
+as pseudocode. Below is an example of what I'm talking about, its the Quicksort algorithm rendered using this
+style.
+
+<pre class="pseudocode">
+% This quicksort algorithm is extracted from Chapter 7, Introduction to Algorithms (3rd edition)
+\begin{algorithm}
+\caption{Quicksort}
+\begin{algorithmic}
+\PROCEDURE{Quicksort}{$A, p, r$}
+  \IF{$p < r$}
+    \STATE $q = $ \CALL{Partition}{$A, p, r$}
+    \STATE \CALL{Quicksort}{$A, p, q - 1$}
+    \STATE \CALL{Quicksort}{$A, q + 1, r$}
+  \ENDIF
+\ENDPROCEDURE
+\PROCEDURE{Partition}{$A, p, r$}
+  \STATE $x = A[r]$
+  \STATE $i = p - 1$
+  \FOR{$j = p$ \TO $r - 1$}
+    \IF{$A[j] < x$}
+      \STATE $i = i + 1$
+      \STATE exchange
+      $A[i]$ with     $A[j]$
+    \ENDIF
+    \STATE exchange $A[i]$ with $A[r]$
+  \ENDFOR
+\ENDPROCEDURE
+\end{algorithmic}
+\end{algorithm}
+</pre>
+
+If you'd like to use it yourself then it isn't too hard. You can get most of the magic from a nice little java script
+library that you can find [on github called pseudocode.js](https://github.com/tatetian/pseudocode.js). The problem is
+that you will only get half way there using the javascript alone. The parts that are there work great, but it won't
+search your html for you and render anything, you have to write that yourself. For that if you put the following block
+of code at the end of your page's source, and make sure the project I linked earlier is already installed, then it will
+solve that problem for you.
+
+~~~javascript
+  var blocks = document.getElementsByClassName("pseudocode");
+  for(var blockId = 0; blockId < blocks.length; blockId++) {
+    var block = blocks[blockId];
+
+    var code = block.textContent;
+    var options = {
+      lineNumber: true
+    };
+
+    var outputEl = document.createElement('div');
+    outputEl.className += " pseudocode-out";
+    block.parentNode.insertBefore(outputEl, block.nextSibling);
+
+    pseudocode.render(code, outputEl, options);
+  }
+
+  while( blocks[0]) {
+    blocks[0].parentNode.removeChild(blocks[0]);
+  }
+  
+~~~
+
+Now all you have to do is add any element with a class of "pseudocode" and write the actual psueudocode inside the
+element, following the format specified in the [pseudocode project](https://github.com/tatetian/pseudocode.js). I prefer
+to define this as a "pre" element so if javascript is turned off it will still produce a human readable block. So other
+then that I didn't have to do anything too special to get it working.
\ No newline at end of file
diff --git a/content/blog/2017-04-13-hyperassociative-map-explanation.html.md b/content/blog/2017-04-13-hyperassociative-map-explanation.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..54c56634c4f1e224b7600ac15ec52147a8c244c2
--- /dev/null
+++ b/content/blog/2017-04-13-hyperassociative-map-explanation.html.md
@@ -0,0 +1,502 @@
+---
+title: Hyperassociative Map Explanation
+date: 2017-04-13
+tags: [Mathematics, Programming]
+layout: post
+---
+
+# Introduction
+
+Almost 8 years ago, on Aug 15, 2009, I invented a new game-changing algorithm called the Hyperassociative Map algorithm.
+It was released as part of the [dANN v2.x library](https://github.com/Syncleus/dANN-core/tree/v2.x). The HAM algorithm, 
+as it is often called, has since been used by countless developers and in hundreds of projects. HAM is a Graph Drawing
+algorithm that is similar to force-directed algorithms but in a class all its own. Unlike other force-directed
+algorithms HAM does not have a sense of momentum or acceleration which makes it debatable if it can even still be called
+force-directed.
+
+Below is a video demonstration of HAM in action. In this 3D visualization the vertices of the graph are displayed as
+grey spheres but the edges are not rendered. The graph's topology is relatively simple containing 128 nodes in groups of
+16 layered such that each group is fully connected to each adjacent group. This results in 256 edges between each
+adjacent group. Since the groups on either end only have one other group they are adjacent to that means there is a
+total of 1,792 edges. Despite this the graph aligns quickly and smoothly on a single 1 Ghz processor as demonstrated in
+the video. It starts with randomized locations for each vertex and then aligns. After each alignment the graph is reset
+with new random starting positions to show that the same alignment is achieved every time.
+
+<div class="video-container"><iframe width="853" height="480" src="https://www.youtube.com/embed/dyp1m-LtKRM?rel=0" frameborder="0" allowfullscreen></iframe></div><br/>
+
+What makes HAM so special is that it retains many of the advantages that have made force-directed algorithms so popular
+while simultaneously addressing their short comings.
+[Wikipedia describes](https://en.wikipedia.org/wiki/Force-directed_graph_drawing) the following advantages to using
+force-directed algorithms, all of which hold true for the HAM algorithm.
+
+* **Good-quality results** - The output obtained usually have very good results based on the following criteria: uniform
+edge length, uniform vertex distribution and showing symmetry. This last criterion is among the most important ones and
+is hard to achieve with any other type of algorithm.
+* **Flexibility** - Force-directed algorithms can be easily adapted and extended to fulfill additional aesthetic
+criteria. This makes them the most versatile class of graph drawing algorithms. Examples of existing extensions include
+the ones for directed graphs, 3D graph drawing, cluster graph drawing, constrained graph drawing, and dynamic graph
+drawing.
+* **Intuitive** - Since they are based on physical analogies of common objects, like springs, the behavior of the
+algorithms is relatively easy to predict and understand. This is not the case with other types of graph-drawing
+algorithms.
+* **Simplicity** - Typical force-directed algorithms are simple and can be implemented in a few lines of code. Other
+classes of graph-drawing algorithms, like the ones for orthogonal layouts, are usually much more involved.
+* **Interactivity** - Another advantage of this class of algorithm is the interactive aspect. By drawing the
+intermediate stages of the graph, the user can follow how the graph evolves, seeing it unfold from a tangled mess into a
+good-looking configuration. In some interactive graph drawing tools, the user can pull one or more nodes out of their
+equilibrium state and watch them migrate back into position. This makes them a preferred choice for dynamic and online
+graph-drawing systems.
+* **Strong theoretical foundations** - While simple ad-hoc force-directed algorithms often appear in the literature and
+in practice (because they are relatively easy to understand), more reasoned approaches are starting to gain traction.
+Statisticians have been solving similar problems in multidimensional scaling (MDS) since the 1930s, and physicists also
+have a long history of working with related n-body problems - so extremely mature approaches exist. As an example, the
+stress majorization approach to metric MDS can be applied to graph drawing as described above. This has been proven to
+converge monotonically. Monotonic convergence, the property that the algorithm will at each iteration decrease the
+stress or cost of the layout, is important because it guarantees that the layout will eventually reach a local minimum
+and stop. Damping schedules cause the algorithm to stop, but cannot guarantee that a true local minimum is reached.
+
+However the two disadvantages described of force-directed algorithms, namely high running time and poor local minima,
+have been corrected in the HAM algorithm. As described earlier HAM is not a true force-directed algorithm because
+it lacks any sense of momentum. This was intentional as it ensures there is no need for a dampening schedule to
+eliminate oscillations that arise from the momentum of nodes. This has the added advantage that the algorithm does not
+prematurely come to rest at a local minima. It also means fewer processing cycles wasted on modeling oscillations and
+vibrations throughout the network.
+
+These properties alone already make HAM a worthwhile algorithm for general study and real-world applications, however it
+is important to note that HAM was originally designed with a very specific use case in mind. Originally HAM was designed
+to facilitate the distribution of massive real-time graph processing networks. The sort of scenario where each
+vertex in a graph had to process some input data and produce some output data and where each vertex is part of a large
+interdependent graph working on the data in real time. When distributing the tasks across a cluster of computers it is
+critical that vertices that are highly interconnected reside on the same computer in the cluster and physically close to
+the computers housing the vertices that will ultimately receive the data, process it and then carry it throughout the
+rest of the network. For this purpose HAM was created to model graphs such that each node in a compute cluster took
+ownership of tasks associated with vertices that were spatially close to each other according to the HAM's drawing of
+the compute graph.
+
+In order for HAM to be successful at it's job it needed to exhibit a few very specific properties. For starters the
+interactivity property mentioned earlier was a must. HAM needed to be able to work with a graph that is constantly
+changing its topology with new vertices able to be added, removed, or reconfigured in real time. This is ultimately
+what led the algorithm to be modeled in a way that made it similar to force-directed algorithms.
+
+The other requirement is that the motion of the vertices had to be smooth without any oscillations as they align. This
+was critical because if oscillations occurred on a vertex as it was near the border that distinguishes one compute node
+from another then those oscillations across that border would cause the task in the compute cluster to be transferred
+between the nodes in the cluster each time. Since this is an expensive operation it is important that as HAM aligned the
+vertices didn't jitter causing them to cross these borders excessively.
+
+Finally HAM needed to be able to be parallelized and segmented. That means that it needed to scale well for
+multi-threading but in such a way that each thread didn't need to be aware of the entire graph in order to process it;
+instead each thread had to be capable of computing the alignment of HAM on an isolated section of the graph. This is
+obviously critical because of the distributed nature of the compute graph, particularly if we want something capable of
+unbounded scaling. I basically wanted an algorithm that could be successful on even massively large graphs.
+
+With almost 8 years of testing it has become evident that HAM is top in its class compared to many graph drawing
+algorithms. Despite this it is still scarcely understood by those studying graph drawing algorithms. For this reason
+I wanted to write this article to share some of its internal workings so others can adapt and play with the algorithm
+for their own projects.
+
+# The Algorithm
+
+In this section I want to get into the internal workings of the Hyperassociative Map algorithm, HAM. Below is the
+pseudocode breakdown explaining the algorithm. Notice I use some math notation here for simplicity. Most notably I use
+vector notation where all variables representing vectors have a small arrow above the variable and the norm, or
+magnitude, of the vector is represented by double vertical bars on either side, for example \\(||\vec{p}||\\). If you
+have trouble with vector notation or just want to see a concrete example the full working java code can be found at the
+end of this article for reference.
+
+<pre class="pseudocode">
+\begin{algorithm}
+\caption{Hyperassociative Map}
+\begin{algorithmic}
+% equilibrium distance
+\REQUIRE $\tilde{\chi} > 0$
+%repulsion strength
+\REQUIRE $\delta > 1$
+% learning rate
+\REQUIRE $\eta = 0.05$
+% alignment threshold (determines when graph is aligned)
+\REQUIRE $\beta =$ 0.005
+\PROCEDURE{HAM}{Vertex Set \textbf{as} $g$}
+  \STATE \CALL{Randomize}{$g$}
+  \WHILE{\CALL{AlignAll}{$g$} $> \beta \cdot \tilde{\chi}$}
+    \STATE optionally recenter the graph
+  \ENDWHILE
+\ENDPROCEDURE
+\PROCEDURE{AlignAll}{Vertex Set \textbf{as} $g$}
+  \STATE $\zeta = 0$
+  \FORALL{$v$ \textbf{in} $g$}
+    \STATE $\vec{{\scriptsize \triangle} p}  =$ \CALL{Align}{$v$}
+    \IF{$||\vec{{\scriptsize \triangle} p}|| > \zeta$}
+      \STATE $\zeta = ||\vec{{\scriptsize \triangle} p}||$
+    \ENDIF
+    \STATE \CALL{Place}{$v$, \CALL{Position}{$v$} $+ \vec{{\scriptsize \triangle} p}$}
+  \ENDFOR
+  \RETURN $\zeta$
+\ENDPROCEDURE
+\PROCEDURE{Align}{Vertex \textbf{as} $v$}
+  \STATE $\vec{p} =$ \CALL{Position}{$v$}
+  \STATE $\vec{{\scriptsize \triangle} p} = 0$
+  \FORALL{$m$ \textbf{in} \CALL{Neighbors}{$v$}}
+    \STATE $\vec{q} =$ \CALL{Position}{$m$} - $\vec{p}$
+    \STATE $\vec{{\scriptsize \triangle} p} = \vec{{\scriptsize \triangle} p} + \vec{q} \cdot \frac{(||\vec{q}|| - \tilde{\chi}) \cdot \eta}{||\vec{q}||}$
+  \ENDFOR
+  \FORALL{$m$ \textbf{in} \CALL{NotNeighbors}{$v$}}
+    \STATE $\vec{q} =$ \CALL{Position}{$m$} - $\vec{p}$
+    \STATE $\vec{c} = \vec{q} \cdot \frac{-\eta}{{||\vec{q}||}^{\delta + 1}}$
+    \IF{$||\vec{c}|| > \tilde{\chi}$}
+      \STATE $\vec{c} = \vec{c} \cdot \frac{\tilde{\chi}}{||\vec{c}||}$
+    \ENDIF
+    \STATE $\vec{{\scriptsize \triangle} p} = \vec{{\scriptsize \triangle} p} + \vec{c}$
+  \ENDFOR
+  \RETURN $\vec{{\scriptsize \triangle} p}$
+\ENDPROCEDURE
+\PROCEDURE{Randomize}{Vertex Array \textbf{as} $g$}
+  \STATE randomise position of all vertex in $g$
+\ENDPROCEDURE
+\PROCEDURE{Place}{Vertex \textbf{as} $v$, Vector \textbf{as} $\vec{p}$}
+  \STATE sets the position of $v$ to $\vec{p}$
+\ENDPROCEDURE
+\PROCEDURE{Neighbors}{Vertex \textbf{as} $v$}
+  \RETURN set of all vertex adjacent to $v$
+\ENDPROCEDURE
+\PROCEDURE{NotNeighbors}{Vertex \textbf{as} $v$}
+  \STATE $s =$ set of all vertex not adjacent to $v$
+  \STATE $w =$ set of all vertex whose position is close to that of $v$
+  \RETURN $s \cap w$
+\ENDPROCEDURE
+\PROCEDURE{Position}{Vertex \textbf{as} $v$}
+  \RETURN vector representing position of $v$
+\ENDPROCEDURE
+\end{algorithmic}
+\end{algorithm}
+</pre>
+
+Obviously the pseudocode packs a lot of information into only a few lines so I'll try to explain some of the more
+important parts so you have an idea at what you're looking at.
+
+## Constants
+
+First, lets consider the constants defined at the beginning. the variable \\(\tilde{\chi}\\) is called the Equilibrium
+Distance. It defines the ideal distance between two vertices connected by an edge. If a pair of vertices connected by
+a single edge are the only vertices present then they will align such that they are approximately as far apart as the
+value of \\(\tilde{\chi}\\). For simplicity here we have represented \\(\tilde{\chi}\\) as a single constant but in
+practice it is also possible to assign a different value to this constant for each edge, resulting in a graph with
+different aesthetic qualities. This value must of course always be a positive number greater than \\(0\\). The default
+value, and the one used in the demonstration video, is \\(1\\).
+
+The second constant is called the Repulsion Strength and is represented by the \\(\delta\\) variable. This constant
+determines how strong the repulsion between two unconnected vertices are, that is two vertices not connected by an
+edge. Lower values for \\(\delta\\) result in a stronger repulsion and larger numbers represent a weaker repulsion. The
+default value is \\(2\\) and this is the value used in the demonstration video.
+
+Next is the Learning Rate constant, \\(\eta\\). This is simply a scaling factor applied when the vertices are aligned to
+ensure the graph is aligned to each node with equivalent effect rather than over-fitting to the last node processed.
+
+The last constant is the Alignment threshold, \\(\beta\\), this represents the minimum movement threshold. Once the
+vertices move less than this value during an alignment cycle it is presumed the graph is sufficiently aligned and the
+loop ends.
+
+## Align Procedure
+
+The algorithm itself is represented such that it is broken up into three major procedures. The procedure named HAM is
+the entry point for the algorithm, the procedure named Align calculates the incremental alignment for a single vertex, 
+and the procedure named AlignAll calculates alignment once for every vertex in the graph.
+
+Lets first explain what is going on in the Align procedure. Here we have a single value being passed in, the vertex to
+be aligned, \\(v\\). On line 19 the current position of the vertex is obtained and represented as a euclidean vector,
+\\(\vec{p}\\). Next on line 20 a zero vector is initialized and represented as \\(\vec{{\scriptsize \triangle} p}\\).
+The vector \\(\vec{{\scriptsize \triangle} p}\\) is calculated throughout the procedure and represents the desired
+change to the current position of the vector \\(\vec{p}\\). In other words once \\(\vec{{\scriptsize \triangle} p}\\)
+is calculated it can be added to the current position of the vertex and will result in the new position for the vertex.
+Just as if calculating forces the \\(\vec{{\scriptsize \triangle} p}\\) will be the sum of all the composite influences
+acting on the vertex; so it represents the overall influence exerted on the vertex at any time.
+
+When calculating \\(\vec{{\scriptsize \triangle} p}\\) the procedure must iterate through all the other vertices
+that have an effect on the vertex being aligned. There are two type of vertices each with different effects: neighbors,
+and non-neighbors. Neighbors are all the vertices connected directly to the current vertex by an edge, non-neighbors are
+all the other vertices not connected by an edge.
+
+First the influence from the neighbor vertices is calculated on lines 21 - 24. The influence two neighbor vertices
+have on each other is different depending on how far apart they are. If they are closer than the Equilibrium Distance, 
+\\(\tilde{\chi}\\), then the effect is repulsive. If they are farther apart than \\(\tilde{\chi}\\) then the effect
+is attractive. The calculation for this is represented by line 23. It basically calculates the vector that
+represents the difference between the position of the vertex being aligned and its neighbor and reduces the magnitude of
+the vector back to \\((||\vec{q}|| - \tilde{\chi}) \cdot \eta\\). To look at it another way if the equation was just
+\\(||\vec{q}|| - \tilde{\chi}\\) then the new position of the vector would be exactly at the Equilibrium
+Distance, but instead it is scaled to a fraction of this by \\(\eta\\) which adjusts how quickly the vertex will
+approach its equilibrium point.
+
+Next the influence between non-neighbor vertices is calculated on lines 25 - 32. Non-neighbor vertices, that is
+vertices not connected by an edge, always exhibit a purely repulsive influence. Line 27 calculates this in a
+similar technique as before. That is the difference between the position of the two vertices is represented by
+\\(\vec{q}\\) and then its magnitude is scaled. Of course it's also negative to indicate that the force is repulsive.
+The equation just seems confusing in its simplified and compacted form. Initially it was derived by calculating the new
+magnitude of \\(\vec{q}\\) as the following.
+
+$$  \frac{-1}{{\mid\mid\vec{q}\mid\mid}^{\delta}} \cdot \eta $$
+
+This makes a lot more sense as we know in nature repulsive forces are the inverse square of their distance. So this
+accurately represents a repulsive influence that diminishes with distance. Once we actually apply that magnitude to the
+vector and simplify we arrive at our final equation.
+
+$$ \vec{q} \cdot \frac{\frac{-1}{{\mid\mid\vec{q}\mid\mid}^{\delta}} \cdot \eta}{\mid\mid\vec{q}\mid\mid} \Rightarrow \vec{q} \cdot \frac{-\eta}{{||\vec{q}||}^{\delta + 1}}$$
+
+The only caveat to this is seen in lines 28 to 30 where it checks the distance moved as a result of the repulsive
+influence. If it is greater than the Equilibrium Distance, \\(\tilde{\chi}\\), then its magnitude is scaled back to be
+\\(\tilde{\chi}\\). This is done because at very close distances the exponential nature of the repulsive influence
+becomes overwhelming and we want to ensure the majority of this influence works at a distance to allow the graph to
+spread apart but still allow the other influences to be the dominate influences on the graph.
+
+At this point the computed change in position for the vertex is simply returned at line 33 for further processing
+by the AlignAll procedure.
+
+## AlignAll Procedure
+
+The AlignAll Procedure is extremely straight forward. It is passed in the set of all vertices in the graph as \\(g\\)
+and iterates over the set while aligning them one at a time. Each vertex will get aligned once per call to the
+procedure, this means the procedure will usually need to be called multiple times.
+
+On line 8 the Maximum Vertex Movement variable, represented as \\(\zeta\\), is initialized to \\(0\\). This variable
+represents the greatest distance any vertex moved during the alignment; after being calculated it's value is returned on
+line 15. The Maximum Vertex Movement is important for determining when the HAM algorithm has finished processing.
+
+Other than that this procedure doesn't do anything special, the vertex alignment vector is calculated on line 10 and
+the new position for the vertex is set on line 14.
+
+## HAM Procedure
+
+The HAM procedure is another rather straight forward procedure to explain. It starts by assigning some initial random
+coordinates to each vertex in the graph. After that it continually loops calling AlignAll until the graph is
+sufficiently aligned.
+
+On line 3 the AlignAll procedure is called in a loop until the Max Vertex Movement returned is less than
+\\(\beta \cdot \tilde{\chi}\\). This is just the Alignment Threshold normalized by the Equilibrium Distance constant.
+The Alignment Threshold is sufficiently small such that if the movements in the graph are less than this value then they
+are considered negligible and the alignment can end.
+
+As an optional step after each alignment iteration it may be desired to translate the entire graph so it is centered
+around the zero vector. There is a small amount of drift as the alignment of the graph is calculated and by doing this
+it ensures the graph remains in the center of the view when rendered. The drift is usually negligible however so this
+step is entirely optional. In the full java example below the logic for centering the graph is included.
+
+# Appendix: Full Java Code
+
+~~~java
+public class HyperassociativeMap<G extends Graph<N, ?>, N> implements 
+        GraphDrawer<G, N> {
+    private static final double REPULSIVE_WEAKNESS = 2.0;
+    private static final double DEFAULT_LEARNING_RATE = 0.05;
+    private static final double EQUILIBRIUM_DISTANCE = 1.0;
+    private static final double EQUILIBRIUM_ALIGNMENT_FACTOR = 0.005;
+
+    private final G graph;
+    private final int dimensions;
+    private Map<N, Vector> coordinates = Collections.synchronizedMap(new 
+            HashMap<N, Vector>());
+    private static final Random RANDOM = new Random();
+    private final boolean useWeights;
+    private double equilibriumDistance;
+    private double learningRate = DEFAULT_LEARNING_RATE;
+    private double maxMovement = 0.0;
+
+    public HyperassociativeMap(final G graph, final int dimensions, final 
+    double equilibriumDistance, final boolean useWeights) {
+        if (graph == null)
+            throw new IllegalArgumentException("Graph can not be null");
+        if (dimensions <= 0)
+            throw new IllegalArgumentException("dimensions must be 1 or more");
+
+        this.graph = graph;
+        this.dimensions = dimensions;
+        this.equilibriumDistance = equilibriumDistance;
+        this.useWeights = useWeights;
+
+        // refresh all nodes
+        for (final N node : this.graph.getNodes()) {
+            this.coordinates.put(node, randomCoordinates(this.dimensions));
+        }
+    }
+
+    @Override
+    public G getGraph() {
+        return graph;
+    }
+
+    public double getEquilibriumDistance() {
+        return equilibriumDistance;
+    }
+
+    public void setEquilibriumDistance(final double equilibriumDistance) {
+        this.equilibriumDistance = equilibriumDistance;
+    }
+
+    public void resetLearning() {
+        maxMovement = 0.0;
+    }
+
+    @Override
+    public void reset() {
+        resetLearning();
+        // randomize all nodes
+        for (final N node : coordinates.keySet()) {
+            coordinates.put(node, randomCoordinates(dimensions));
+        }
+    }
+
+    @Override
+    public boolean isAlignable() {
+        return true;
+    }
+
+    @Override
+    public boolean isAligned() {
+        return isAlignable()
+                && (maxMovement < (EQUILIBRIUM_ALIGNMENT_FACTOR * 
+                equilibriumDistance))
+                && (maxMovement > 0.0);
+    }
+
+    @Override
+    public void align() {
+        // refresh all nodes
+        if (!coordinates.keySet().equals(graph.getNodes())) {
+            final Map<N, Vector> newCoordinates = new HashMap<N, Vector>();
+            for (final N node : graph.getNodes()) {
+                if (coordinates.containsKey(node)) {
+                    newCoordinates.put(node, coordinates.get(node));
+                } else {
+                    newCoordinates.put(node, randomCoordinates(dimensions));
+                }
+            }
+            coordinates = Collections.synchronizedMap(newCoordinates);
+        }
+
+        maxMovement = 0.0;
+        Vector center;
+
+        center = processLocally();
+
+        // divide each coordinate of the sum of all the points by the number of
+        // nodes in order to calculate the average point, or center of all the
+        // points
+        for (int dimensionIndex = 1; dimensionIndex <= dimensions; 
+             dimensionIndex++) {
+            center = center.setCoordinate(center.getCoordinate
+                    (dimensionIndex) / graph.getNodes().size(), dimensionIndex);
+        }
+
+        recenterNodes(center);
+    }
+
+    @Override
+    public int getDimensions() {
+        return dimensions;
+    }
+
+    @Override
+    public Map<N, Vector> getCoordinates() {
+        return Collections.unmodifiableMap(coordinates);
+    }
+
+    private void recenterNodes(final Vector center) {
+        for (final N node : graph.getNodes()) {
+            coordinates.put(node, coordinates.get(node).calculateRelativeTo
+                    (center));
+        }
+    }
+
+    public boolean isUsingWeights() {
+        return useWeights;
+    }
+
+    Map<N, Double> getNeighbors(final N nodeToQuery) {
+        final Map<N, Double> neighbors = new HashMap<N, Double>();
+        for (final TraversableCloud<N> neighborEdge : graph.getAdjacentEdges
+                (nodeToQuery)) {
+            final Double currentWeight = (((neighborEdge instanceof Weighted)
+                    && useWeights) ? ((Weighted) neighborEdge).getWeight() : 
+                    equilibriumDistance);
+            for (final N neighbor : neighborEdge.getNodes()) {
+                if (!neighbor.equals(nodeToQuery)) {
+                    neighbors.put(neighbor, currentWeight);
+                }
+            }
+        }
+        return neighbors;
+    }
+
+    private Vector align(final N nodeToAlign) {
+        // calculate equilibrium with neighbors
+        final Vector location = coordinates.get(nodeToAlign);
+        final Map<N, Double> neighbors = getNeighbors(nodeToAlign);
+
+        Vector compositeVector = new Vector(location.getDimensions());
+        // align with neighbours
+        for (final Entry<N, Double> neighborEntry : neighbors.entrySet()) {
+            final N neighbor = neighborEntry.getKey();
+            final double associationEquilibriumDistance = neighborEntry
+                    .getValue();
+
+            Vector neighborVector = coordinates.get(neighbor)
+                    .calculateRelativeTo(location);
+            double newDistance = Math.abs(neighborVector.getDistance()) - 
+                    associationEquilibriumDistance;
+            newDistance *= learningRate;
+            neighborVector = neighborVector.setDistance(newDistance);
+            compositeVector = compositeVector.add(neighborVector);
+        }
+        // calculate repulsion with all non-neighbors
+        for (final N node : graph.getNodes()) {
+            if ((!neighbors.containsKey(node)) && (node != nodeToAlign)
+                    && (!graph.getAdjacentNodes(node).contains(nodeToAlign))) {
+                Vector nodeVector = coordinates.get(node).calculateRelativeTo
+                        (location);
+                double newDistance = -1.0 / Math.pow
+                        (nodeVector.getDistance(), REPULSIVE_WEAKNESS);
+                if (Math.abs(newDistance) > Math.abs(equilibriumDistance)) {
+                    newDistance = Math.copySign(equilibriumDistance, 
+                            newDistance);
+                }
+                newDistance *= learningRate;
+                nodeVector = nodeVector.setDistance(newDistance);
+                compositeVector = compositeVector.add(nodeVector);
+            }
+        }
+        Vector newLocation = location.add(compositeVector);
+        final Vector oldLocation = coordinates.get(nodeToAlign);
+        double moveDistance = Math.abs(newLocation.calculateRelativeTo
+                (oldLocation).getDistance());
+
+        if (moveDistance > maxMovement) {
+            maxMovement = moveDistance;
+        }
+
+        coordinates.put(nodeToAlign, newLocation);
+        return newLocation;
+    }
+    public static Vector randomCoordinates(final int dimensions) {
+        final double[] randomCoordinates = new double[dimensions];
+        for (int randomCoordinatesIndex = 0; randomCoordinatesIndex < 
+                dimensions; randomCoordinatesIndex++) {
+            randomCoordinates[randomCoordinatesIndex] = (RANDOM.nextDouble() 
+                    * 2.0) - 1.0;
+        }
+
+        return new Vector(randomCoordinates);
+    }
+
+    private Vector processLocally() {
+        Vector pointSum = new Vector(dimensions);
+        for (final N node : graph.getNodes()) {
+            final Vector newPoint = align(node);
+            for (int dimensionIndex = 1; dimensionIndex <= dimensions; 
+                 dimensionIndex++) {
+                pointSum = pointSum.setCoordinate(pointSum.getCoordinate
+                        (dimensionIndex) + newPoint.getCoordinate
+                        (dimensionIndex), dimensionIndex);
+            }
+        }
+        return pointSum;
+    }
+}
+~~~
diff --git a/content/blog/2017-04-19-latex-pdf-from-markdown.html.md b/content/blog/2017-04-19-latex-pdf-from-markdown.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..75ffd5207d7d259cc61f4d967cd49bb96a8c06e7
--- /dev/null
+++ b/content/blog/2017-04-19-latex-pdf-from-markdown.html.md
@@ -0,0 +1,116 @@
+---
+title: Latex PDF from Markdown
+date: 2017-04-19
+tags: [Programming]
+layout: post
+---
+
+I write a lot of technical documents, and it is important to me that they look nice. In the past I have always resorted
+to using latex directly. It's an ugly language, hard to maintain, but it has always been the best solution. Microsoft
+Word completely fails at complex documents, and is tedious and buggy if you want to do anything technical with it.
+If I have a simpler document without much math or special formatting I've always used Markdown.
+
+Recently however I was able to get the best of both worlds. Using R-script's flavored Markdown it adds a tremendous
+amount of power to Markdown. The most important feature is the fact that it uses pandoc in order to compile your
+Markdown text into a latex template which is then used to compile a PDF. This means I get all the power of latex with
+all the simplicity of Markdown. That alone made it a winner for me, but it also allows you to compile into HTML and
+a number of other formats which can make it even more useful.
+
+It also has one other very sweet added bonus if you don't mind coding in R-Script: you can put R-script code directly
+into your markdown in order to produce charts or other output programmatically. R-script is a heavily math oriented
+programming language so it can be extremely powerful when writing math papers.
+
+# Getting Started
+
+If you want to get started using R-flavored Markdown to compile into latex and PDF I have
+[provided my templates on GitHub](https://github.com/Syncleus/syncleus-white). I also have
+[another GitHub repository](https://github.com/Syncleus/syncleus-white-example) where I provide a complete example of
+a markdown document and makefile that will compile it into a PDF. Really simple to figure it out, just clone the
+repository and start editing it. Make sure, of course, that you have R-script installed and all the prerequisites you
+might need. Finally I also have [a third GitHub repository](https://github.com/freemo/rmarkdown-env) with even more
+templates and examples. Some of the examples go in depth on showing how you can use r-script inside the Markdown
+to generate plots and graphs or other data. Worth a look there are templates for CVs/resumes, articles, powerpoint
+presentations, syllabus, etc.
+
+R-flavored Markdown files use the extension "Rmd" and use all the conventional Markdown syntax with some additions.
+All you need to do is add some front-matter to the begining of the Markdown file which provides some hints to the
+latex template to do some formatting. The front-matter looks like the following, taken directly from the example I
+linked. The rest of the content of the file is just the Markdown, very simple. You can see the [full file with
+front-matter and Markdown](https://raw.githubusercontent.com/Syncleus/syncleus-white-example/master/probabilities.Rmd)
+as used in this example by clicking the link.
+
+~~~yaml
+output:
+  pdf_document:
+    citation_package: natbib
+    keep_tex: true
+    fig_caption: true
+    latex_engine: pdflatex
+    template: templates/syncleus-white.tex
+
+# Required properties
+title: "Conditional Probabilities and Bayes Theorem"
+abstract: "A simple explanation of conditional probabilities."
+author:
+  name: Jeffrey Phillips Freeman
+  affiliation: Syncleus
+  correspondence: jeffrey.freeman@syncleus.com
+
+# Optional Properties
+other-authors:
+- name: John Doe
+  affiliation: NoTech
+tags: Statistics, Math
+start-date: "April 6, 2017"
+date: "`r format(Sys.time(), '%B %d, %Y')`"
+draft: "`r format(Sys.time(), '%B %d, %Y')`"
+revision: 1.1
+tocdepth: 5
+title-color: 0,0,90
+# No indentation
+indent: 0pt
+parskip: 3mm
+# Standard Anglo-american indentation
+#indent: 15pt
+#parskip: 0mm
+archive: Pseudoscience Journal of America
+geometry: left=2cm, right=2cm, top=2.25cm, bottom=2.25cm, headheight=13.6pt, letterpaper
+bibliography: ./probabilities.bib
+biblio-style: plainnat
+biblio-title: References
+~~~
+
+Below you will see the output of the compiled pdf using this example, different temples can give different
+layouts and formatting.
+
+<p>
+  <iframe height="800" src="/ViewerJS/#../files/syncleus-white-example.pdf" width="100%"></iframe>
+</p>
+
+In the above examples you can see how the date properties are generated dynamically as the current date using R-script.
+This gives you just a small taste of how you can use R-script directly inside the Markdown files. Most of the properties
+above are self explanatory but let me provide a few descriptions for clarity all the same.
+
+* **title** - The title of the document.
+* **abstract** - A few sentences describing the document used int he abstract box once rendered.
+* **author** - Information about the author
+* **other-authors** - Optional supplemental authors.
+* **tags** - optional list of keywords.
+* **start-date** - Date the author began working on the paper. This is used int he copyright information.
+* **date** - Date the paper was released, this is used int he copyright information.
+* **draft** - Optional text which will appear in a Draft watermark on the paper. If this property is left out then no
+draft watermark will be added.
+* **revision** - The revision version number of the paper displayed int he upper right corner.
+* **tocdepth** - The maximum depth displayed int he table of contents for nested sections.
+* **title-color** - 3 comma separated integers from 0 to 255 representing the RGB color of the title text.
+* **indent** - The size of the paragraph indentation.
+* **parskip** - The vertical distance between paragraphs.
+* **archive** - The name of the journal or archive the paper is to be published in.
+* **geometry** - Optional parameters that overrides the latex geometry, useful for setting custom margins.
+* **bibliography** - location of the natbib or bibtext bibliography file.
+* **biblio-style** - Optional override for the bibliography style.
+* **biblio-title** - The title used for the bibliography section.
+
+Thats really all there is to it. One last thing, I made sure the properties I picked for my template match those
+expected in a middleman blog written in markdown. This adds some convenience that the same source file can be compiled by
+either Middleman or R-script.
diff --git a/content/blog/2017-06-28-frequency-domain-circuit-analysis-tutorial.html.md b/content/blog/2017-06-28-frequency-domain-circuit-analysis-tutorial.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..f78e9087e3bd37deee8024ac898293404f33bf75
--- /dev/null
+++ b/content/blog/2017-06-28-frequency-domain-circuit-analysis-tutorial.html.md
@@ -0,0 +1,15 @@
+---
+title: Frequency Domain Circuit Analysis Tutorial
+date: 2017-06-28
+tags: [Electrical Engineering]
+layout: post
+---
+
+Some time back I started writing a book in an attempt to help explain how to do circuit analysis by hand. Originally it was going to include both time-domain analysis as well as frequency-domain analysis. The book is incomplete and I never got to cover the time-domain but has several complete examples showing frequency-domain analysis on many common circuits. I’ve gotten some compliments over the years, particularly from HAM radio operators, on how useful the book has been to them. I’d like to share here what I have so far in case anyone might find it useful.
+
+As a side note if anyone would like to revive the project and work with me on expanding and completing the book it would be most welcome. Please feel free to contact me. In the meantime here is the compiled book in its current form. I don’t currently have the latex source code published anywhere but if there is any interest I will happily publish it and open-source it on github.
+
+<p>
+  <iframe height="800" src="/ViewerJS/#../files/demonstrations-for-modeling.pdf" width="100%"></iframe>
+</p>
+
diff --git a/content/blog/2018-04-07-nodal-analysis-tutorial.html.md b/content/blog/2018-04-07-nodal-analysis-tutorial.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..9aa586c672bbad5f222838fa153a03d2778c5982
--- /dev/null
+++ b/content/blog/2018-04-07-nodal-analysis-tutorial.html.md
@@ -0,0 +1,131 @@
+---
+title: Nodal Analysis Tutorial
+date: 2018-04-07
+tags: [Electrical Engineering]
+layout: post
+---
+
+Nodal Analysis is a technique for circuit analysis where each node (A point where two or more components are connected) is interpreted individually. This analysis can be used to determine the voltage, or any other variable, at any point in the circuit, sometimes as a function of time. It is based on the fact that at any node all the current that enters the node will be equal to all the current leaving that same node. By doing this we are able to reduce each node to an equation, and then, the entire circuit to a set of simultaneous equations.
+
+# Identifying nodes
+
+First you need to learn how to identify nodes in a circuit. A node is simply the junction where two or more components are connected by wire. The following diagram shows a circuit where the nodes are circled in red:
+
+![](/images/nodal-analysis-tutorial-1.png)
+
+# Analyzing a node
+
+The next step is to represent each node in your circuit as an equation. If you are doing an analysis in the time domain then this is usually represented as voltage as a function of time \\(V(t)\\). This can also be done in the frequency domain using Phasors. For this example we will work in the time domain. Let's use the same circuit as the one above:
+
+![](/images/nodal-analysis-tutorial-2.png)
+
+First we need to assign arbitrary directions for the current flow in and out of each component on the circuit. It doesn't need to match the direction the actual current flows because if we reverse it then the values we get for the current through that component will just come out to be negative. What is important is that if current goes in one side of a component it goes out the other side. Other than that it's completely arbitrary. So lets pick some random directions for the current flow in our diagram:
+
+![](/images/nodal-analysis-tutorial-3.png)
+
+You probably also noticed the ground point. This is also arbitrary, you can pick any node in the circuit as your ground. Mathematically you represent whatever node you pick as ground to be 0 volts. Depending on which point you pick as ground it will effect the voltage values you get for the other nodes, but they will all be the same relative to each other.
+
+Lets assume \\(I_{1}\\) varies with time. Therefore it will be represented as a mathematical function: \\(I_{1}(t)\\). Now lets look at each node individually and represent them as mathematical functions. In addition let's assign a variable to each node representing that node's voltage.
+
+![](/images/nodal-analysis-tutorial-4.png)
+
+First let's look at the upper left node labeled \\(V_{1}\\), the one connecting \\(I_{1}\\), \\(R_{1}\\), and \\(C_{1}\\). It has three paths for current to flow in/out from each of the three components. We know these three currents will add up to zero because all the current coming into the node (positive values) must equal all the current exiting the node (negative values). With this knowledge we can represent the node mathematically.
+
+The current coming in from \\(I_{1}\\) is easy, since this is a current source that varies with time it is simply \\(I_{1}(t)\\).
+
+We then need to consider the current coming into the node from \\(R_{1}\\). Since we know Ohm's Law which states \\(I=V/R\\) we can represent the current flowing through \\(R_{1}\\) in these terms. Since \\(V_{4}\\) is our ground point it will always have a voltage of 0. Therefore the current flowing through \\(R_{1}\\) is simply:
+
+$$ \frac{0-V_{1}(t)}{R_{1}} $$
+
+Now the current through \\(C_{1}\\) is a bit more tricky since we need to use differential equations to model a capacitor in the time domain. The differential equation representing the current flowing through a capacitor is:
+
+$$ I=C\frac{\,dv}{\,dt} $$
+
+Therefore we represent the current through \\(C_{1}\\) as:
+
+$$ C_{1}\frac{\,d}{\,dt}(V_{1}(t)-V_{2}(t)) $$
+
+Remembering that the sum of these three currents will equal zero we come up with the equation:
+
+$$ I_{1}(t)+\frac{0-V_{1}(t)}{R_{1}}-C_{1}\frac{\,d}{\,dt}(V_{1}(t)-V_{2}(t))=0 $$
+
+The final step is to get this into a function representing the node's voltage as a function of time, in other words \\(V_{1}(t)\\). To do this we just use some calculus and differential math to solve for \\(V_{1}(t)\\) in the above equation. Teaching calculus is outside the scope of this document so we will leave it to the reader to solve for \\(V_{1}(t)\\). Once we solve for \\(V_{1}\\) we get the following:
+
+$$
+V_{1}(t)=
+\frac
+{
+  (
+    \int\limits_0^t
+    (
+        e^{-\frac{t}{C_{1}R_{1}}}
+        (
+          I_{1}(t)+C_{1}
+          (
+            \frac{\,d}{\,dt}V_{2}(t)
+          )
+        )
+    )
+    \,dt
+  )e^{\frac{t}{C_{1}R_{1}}}
+}
+{C_{1}}
+$$
+
+We now know the voltage of this node (\\(V_{1}\\)) as a function of time. The only problem is that this function also seems to depend on the voltage functions for the other 3 nodes. That's why the next step is to obtain the voltage as a function of time for the other 3 nodes in the same way we did for this node. Once we do that we will have 4 simultaneous equations and we will have what we need to solve for any variable we want.
+
+Lets quickly go through and perform nodal analysis on the other 3 nodes starting with node \\(V_{2}\\):
+
+$$ C_{1}\frac{\,d}{\,dt}(V_{1}(t)-V_{2}(t))+\frac{V_{3}(t)-V_{2}(t)}{R_{2}}=0 $$
+
+Solve for \\(V_{2}(t)\\) to get:
+
+$$ V_{2}(t)=\frac{(\int\limits_0^t (e^{\frac{t}{C_{1}R_{2}}}(C_{1}R_{2}(\frac{\,d}{\,dt}V_{1}(t))+V_{3}(t)))\,dt)e^{-\frac{t}{C_{1}R_{2}}}}{C_{1}R_{2}} $$
+
+The last two nodes will be much simpler since they don't connect to the capacitor, therefore we don't need to deal with differential equations. For \\(V_{3}\\) we get:
+
+$$ -\frac{V_{3}(t)-V_{2}(t)}{R_{2}}+\frac{0-V_{3}(t)}{R_{3}}=0 $$
+
+Solve for \\(V_{3}(t)\\) and you get:
+
+$$ V_{3}(t)=\frac{R_{3}V_{2}(t)}{R_{3}+R_{2}} $$
+
+For node \\(V_{4}\\) we already know its value is 0 so we can skip this node all together.
+
+We now have 3 simultaneous equations, one for each node of the circuit (except ground). In the next section we will use them to solve for the voltage at any point as a function of time.
+
+# Bringing it all together
+
+The rest of the process should be pretty apparent right now if you're familiar with solving for simultaneous equations. Since this isn't meant to be a math tutorial we won't go into the details on how to solve simultaneous equations.
+
+There are basically two approaches to simultaneous equations. Either substitution, which is more tedious but doesn't require any advanced math, or linear algebra matrices. Generally if you aren't familiar with linear algebra and are doing it by hand you're gonna want to use substitution, which is the same as the process in basic algebra. However if you are familiar with linear algebra and plan to use a calculator to get your answer then matrices are much easier to work with.
+
+The first step is to assign some values to our components (normally this is done for you of course):
+
+$$ C_{1}=\frac{1}{100000} F $$
+
+$$ R_{1}=100 \Omega $$
+
+$$ R_{2}=1000 \Omega $$
+
+$$ R_{3}=10000 \Omega $$
+
+Similarly we need to define the function governing the current source. We will use a simple sinusoidal current source:
+
+$$ I_{1}(t)=sin(t) $$
+
+Since the scope of this tutorial doesn't include calculus we will show the quick way to do this in maple. To solve for multiple simultaneous equations in maple simply use the dsolve command like this:
+
+```
+dsolve({<equation 1>,<equation 2>,...<equation n>},[<unknown 1>, <unknown 2>,...<unknown n>])
+```
+
+Maple will now produce the three independent functions for the 4 nodes. When we plug the values for the components in and solve for the various nodes simultaneously we get the following equations:
+
+$$ V_{1}(t)=100 sin(t)-\frac{100}{111} e^{-\frac{1000}{111}t}(\int\limits_0^t (cos(t)e^{\frac{1000}{111}t}) \,dt) $$
+
+$$ V_{2}(t)=\frac{11000}{111} e^{-\frac{1000}{111}t}(\int\limits_0^t (cos(t)e^{\frac{1000}{111}t}) \,dt) $$
+
+$$ V_{3}(t)=\frac{10000}{111} e^{-\frac{1000}{111}t}(\int\limits_0^t (cos(t)e^{\frac{1000}{111}t}) \,dt) $$
+
+Thats all there is to analyzing a circuit in the time domain!
diff --git a/content/blog/2020-02-09-rotations-in-d-dimensions.html.md b/content/blog/2020-02-09-rotations-in-d-dimensions.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..c547cb3df12946dab10b3aca049a6532eaaa8a23
--- /dev/null
+++ b/content/blog/2020-02-09-rotations-in-d-dimensions.html.md
@@ -0,0 +1,12 @@
+---
+title: Rotations in N dimensions
+date: 2020-02-09
+tags: [Mathematics]
+layout: post
+---
+
+Several years ago I was writing a Machine Learning paper that required me to do rotations in an arbitrary number of dimensions. As such I had an entire section of the paper devoted to explaining how that was done before moving on to the actual algorithm. Here I extracted the portion where I explain N-dimensional rotations, basically rotations in 4-dimensional space or higher, and created its own PDF out of it. I hope this will be of use to some of you to help explain the process. Its a bit math-heavy but I am, as always, happy to answer any questions.
+
+<p>
+  <iframe height="800" src="/ViewerJS/#../files/rotations-in-n-dimensions.pdf" width="100%"></iframe>
+</p>
diff --git a/content/blog/2020-09-10-understanding-the-reflection-coefficient.html.md b/content/blog/2020-09-10-understanding-the-reflection-coefficient.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..68d441f9180ef335699e607b7dccb7047b6889f9
--- /dev/null
+++ b/content/blog/2020-09-10-understanding-the-reflection-coefficient.html.md
@@ -0,0 +1,168 @@
+---
+title: Understanding the Reflection Coefficient
+date: 2020-09-10
+tags: [Mathematics]
+layout: post
+---
+
+Today I hope to answer a rather complex question: What does the Reflection Coefficient mean exactly, how do we measure it, and what can we do with it once we do. For example if we have a reflection coefficient of \\(0.5 \angle 30^{\circ}\\) at at some point in a feedline what does that mean and how can we use it?
+
+There is a lot to unpack in such a short question, there are many things the reflection coefficient can tell us on its own, and quite a few more things it can tell us when we know a few other variables.
+
+In simplest english terms it means that the reflected wave is half the peak voltage of the forward wave, and that at any moment the reflected wave is 30 degrees ahead in its phase compared to the forward wave. So if measured on an oscilloscope comparing the waves would look something like this.
+
+![](/images/wave30phase.jpg)
+
+Keep in mind the waves on an oscilloscope would both be moving to the right on the display at the same speed, so they will always have the same orientation relative to each other. Meanwhile the actual waves in the feedline are moving in opposite directions so their peaks are constantly moving away from each other. Consequently this is why the phase relationship between the two waves will vary depending on the position you measure it at.
+
+Here is what the actual waves would look like in the feedline where the x-axis here would be the position on the feedline (not to be confused with the above image that you would see on an oscilloscope).
+
+![](/images/standingwave.gif)
+
+So imagining the above image is voltage we see the green wave moving in one direction on the feedline and the blue wave moving in the opposite direction. The redline is the actual voltage at the respective point on the feedline as it changes with time. The situation here is what you would see if the far end of the feedline where the antenna should be had either an open connection or was short circuited. The red wave we see is what we call a Standing Wave. So what we are really doing when we measure the reflection coefficient is we measure the red wave in the above image at a particular point in the feedline for voltage, then do the same for current, and by comparing the two 
+
+Now let's talk a little about how knowing the reflection coefficient is useful and how you can calculate it.
+
+# Calculating  \\(\Gamma\\) 
+
+As was already pointed out the reflection coefficient tells you the signal that is reflected relative to the forward signal. So per the example I gave at the begining you would say:
+
+$$ \Gamma = 0.5 \angle 30^{\circ} $$
+
+The above is in polar form but its good to remember this is little more than a complex number closely related to phasors (both voltage and current phasors). In complex form we have:
+
+$$ \Gamma = 0.43 + 0.25 i\mkern1mu $$ 
+
+Now the first thing it can tell us other than the relationship between forward and reverse voltage signals is it can also tell us the relationship between forward and reverse current signals. The relationship being the same but of opposite sign.
+
+$$ \Gamma = -\frac{I_{refl}}{I_{fwd}} = \frac{V_{refl}}{V_{fwd}} $$ 
+
+Where  \\(I\\)  and  \\(V\\)  are their respective current and voltage phasors. Remember a phasor represents the amplitude and phase of the signal relative to some reference point, usually whatever we consider ground. So from this it tells us that in our example the reflected current signal will have an amplitude of 0.5 relative to the forward current and a phase of 210 degrees, or -150 degrees whichever you'd like.
+
+# Calculating SWR from  \\(\Gamma\\) 
+
+The other thing we can calculate directly from the reflection coefficient is the SWR, which is no longer a complex value, it's a dimensionless ratio. We lose a bit of information (the complex part) in doing this conversion but it is often a useful number used in tuning radio systems. I will explain exactly how SWR is helpful in a minute but first let's show how to calculate it.
+
+$$ SWR = \frac{1 + \mid \Gamma \mid}{1 - \mid \Gamma \mid} $$ 
+
+So again taking the initial example we would have the following SWR:
+
+$$ SWR = \frac{1 + 0.5}{1 - 0.5} $$ 
+
+$$ SWR = \frac{1.5}{0.5} $$ 
+
+$$ SWR = \frac{3}{1} $$ 
+
+So we would say here we have an SWR of  \\(3:1\\) . SWR basically tells us how bad of a mismatch we have without worrying about if the mismatch is resistive or reactive. In a perfectly matched system there would be no reflected wave so your SWR is always 1:1 and thus shows us a perfect impedance match. Similarly the worst possible match we could have would be an open circuit or a short circuit, both of which would produce an infinite SWR.
+
+Now its important to note it **only** tells us about what the impedance match is at the point in the circuit we measure. With a 1:1 SWR or a reflection coefficient of 0 telling us that whatever feedline and antenna is on the load end of the meter **as a whole** is the same impedance as the feedline and transmitter system on the source side of the meter. By itself it tells us nothing about if the antenna is well matched or well tuned, or the efficiency of the system, or even what the SWR might be at any other point in the feedline. To figure out any of that we would either need to measure at multiple points or need some more information about the components in the system.
+
+Typically SWR meters, and therefore indirectly the reflection coefficient, is useful if it is measured at the point where a transmitter connects to a long feedline which ultimately feeds some load (usually an antenna). A large mismatch at this point will cause any power a transmitter creates intended for the antenna to be reflected back into the transmitter at its outgoing port rather than making it onto the feedline. This causes that energy to be dissipated by the transmitter and ultimately will heat up the transmitter and in some cases can fry it. So it is important to have an SWR that is relatively low for the safety of the transmitter.
+
+# Relationship of Load and Source Impedance
+
+From this point on I want to be clear on some terminology I am about to use. If I say "load impedance" I will be talking about the total impedance of the system from the point the reflection coefficient was measured all the way to the far end of the transmission line. This means we are talking about the impedance of that whole half of the system, usually a transmission line, antenna, and maybe even a tuner. It does not refer to just what is connected at the end of the transmission line itself (usually the antenna), we will get to that later. Similarly when I say "source impedance" I will also be talking about the whole system on the transmitting side of where the reflection coefficient was measured.
+
+So with that said the other thing the reflection coefficient tells us is the relationship between the load impedance and the source impedance. The equation for that is as follows:
+
+$$ \Gamma = \frac{Z_L - Z_S}{Z_L + Z_S} $$ 
+
+Therefore if we have a transmitter that connects directly to our meter and the transmitter has a  \\(50\Omega\\)  antenna port on it then we know the source impedance is  \\(50\Omega\\)  and can then calculate the impedance of our load. So again going back to the initial example if given the situation I just explained we would calculate the load impedance as follows:
+
+$$ \Gamma = \frac{Z_L - 50}{Z_L + 50} $$ 
+
+$$ Z_L = \frac{-50 \cdot (\Gamma + 1)}{\Gamma - 1} $$ 
+
+Note that if  \\(\Gamma\\)  is one the equation is undefined, but that would mean the load impedance is infinite, an open circuit.
+
+$$ Z_L = \frac{-50 \cdot (0.43 + 0.25 i\mkern1mu + 1)}{0.43 + 0.25 i\mkern1mu - 1} $$ 
+
+$$ Z_L = \frac{-50 \cdot (1.43 + 0.25 i\mkern1mu)}{-0.57 + 0.25 i\mkern1mu} $$ 
+
+$$ Z_L = \frac{-71.5 - 12.5 i\mkern1mu}{-0.57 + 0.25 i\mkern1mu} $$ 
+
+$$ Z_L \approx 97.1347 + 64.5328 i\mkern1mu $$ 
+
+$$ Z_L \approx 116.6174610 \angle -146.401367^{\circ} $$ 
+
+# Relationship of Feedline Length and Phase
+
+If we know the position on the feedline that we measured the signal relative to the far end of the load, where the antenna normally is, then we can calculate a few other meaningful things. Keep in mind in the real world the speed at which an electrical signal travels through the feedline is close to the speed of light but not quite. Each feedline is a bit different and we would look at a datasheet for our particular feedline to get what is called the Velocity Factor. This is a percentage or ratio that tells us the percentage of the speed of light a wave will propagate through the feedline. So we would calculate the actual speed of our waves as follows.
+
+$$ c = C \cdot V_f $$ 
+
+Because of this not only will the wave move slower through the feedline but it will also have a shorter wavelength than what it would when propagating through a vacuum. Let's look at the equation for wavelength real quick.
+
+$$ \lambda = \frac{c}{f} $$ 
+
+Where c is the speed of the wave through the medium as we calculated above and f is the frequency, giving us  \\(\lambda\\)  as our wavelength.
+
+When talking about a reflection coefficient we are talking about the reflected wave relative to the forward wave. So we can consider the forward wave as our reference wave and take that as our phase reference point. We know that the reflected wave needs to travel from the point being measured to the far end of the load side and then back again, so it travels a total of twice the distance of the load side. Therefore we can calculate the phase shift with the following equation.
+
+$$ \phi = \{ \frac{2 \cdot l_L}{\lambda} \} \cdot 360^{\circ} $$ 
+
+Where  \\(l_L\\)  is the length from the point being measured to the far end of the load,  \\(\lambda\\)  is the adjusted wavelength from earlier, and  \\(\phi\\)  is the difference in phase shift of the reflected wave relative to the forward wave. Also the curly brackets is a mathematical notation saying to take the fractional part (drop the whole number and just keep the decimal). As you can see by varying the length of the transmission line on the far side of the load we can vary the phase as we wish and thus modify our reflection coefficient to some extent.
+
+# Measuring  \\(\Gamma\\) 
+
+One very important thing to point out here, because this is where a lot of people get things wrong. Since we are measuring a single point in the feedline we are measuring the sum of the actual forward and reverse waves at that point and we can't measure the two waves directly, all we know is how the voltage and current is changing at that one point in the line. So to say we are measuring the reflected wave at all is a bit of a lie, we are really just measuring the voltage and current values at a single point and then reconstructing the forward and reverse waves from that. While this may confuse your current understanding this is very important because this is where almost everyone goes wrong on understanding these concepts. But keep in mind just because we cant measure them directly, the two waves are still there. The following is a schematic showing a circuit called a Directional Coupler, this is how we would measure the forward and reverse waves at a point in the feedline.
+
+![](/images/directionalcoupler.jpg)
+
+Notice from the above schematic all we are really doing is Sampling the forward current with  \\(X_1\\)  and sampling the forward voltage with  \\(X_2\\)  and then biasing the forward signal by the reflected and vice versa. This is how we reconstruct forward and reverse signals when all we know is the voltage and current at a single point.
+
+Imagine we have a perfectly matched system where the characteristic impedance of the feedline is the same as the load and source impedance. What we would see is only a single forward moving wave, no reflected wave at all. Also, if you recall a resistor always has its current in phase with its voltage, this holds true in a matched feedline as well since all the components are real resistance with no reactance. So we would expect the forward voltage wave and the forward current wave to both be in phase without any reflected wave to interfere with them. Looking back at the above schematic we see that the  \\(X_2\\)  transformer would sample the forward voltage, which would cause the FWD output to cycle through positive and negative while the other terminal would want to swing the opposite, when fwd is high the other terminal will try to go negative, however its biased by the refl power, so we have to consider that as well. Since current is in phase and the  \\(X_1\\)  transformer is similarly going to swing inphase with the fwd port but since its connected to the opposite terminal of  \\(X_1\\)  it will essentially cancel out and the reflected port will stay at ground. However if the phase of the current and voltage were not the same then the circuit would respond very differently and we would see a signal out of the reflected port. So really the circuit is measuring the phase difference between voltage and current and using this to reconstruct the forward and reverse waves.
+
+As an example here is what the voltage and phase relationship would look like in a feedline with an open circuit at the antenna end:
+
+![](/images/voltagecurrentstandingwave.gif)
+
+As we know impedance in its polar form has an amplitude and a phase component just like our reflection coefficient does. The phase component of an impedance value basically just tells you if you apply a voltage signal across the device how much the voltage and current signals will be out of phase with each other. A resistor always has an impedance that is equal to its resistance and has no imaginary component, and also has a phase of 0 degrees. This agrees with what I said earlier regarding a resistors voltage and current always being inphase with each other. We also know that a capacitor and the inductor always has its current 90 degrees out of phase with its voltage.
+
+We just learned from the above schematic that the voltage-current relationship is in fact equivalent to the forward-reflected wave relationship. One can be used to determine the other and vice versa. Therefore we know that the impedance of the antenna can not just affect the amplitude of the wave it reflects back, but can also dictate its phase.
+
+# Feedline as an Impedance Transformer
+
+We mentioned earlier how the reflection coefficient can be calculated by simply knowing the total impedance on one side of the point being measured vs that on the other side. I also pointed out how the load impedance in that calculation described the entire system on the load side including the feedline and wasn't necessarily the same as the load at the terminating end of the feedline, usually an antenna. Since we now know that the impedance of the antenna dictates not just the amplitude of the wave reflected, but also its phase, and we also know that the length of the feedline itself can shift the phase as well, it should be obvious that we can view a transmission line as an impedance transformer where the impedance of the antenna is transformed into a different impedance based on the length of the transmission line.
+
+In essence we can tweak the load end of the transmission line by making it longer up to one wavelength and as such adjust our reflected wave's phase to whatever value we want, thus allowing us to change the reflection coefficient we see which is equivalent to changing the load side's impedance.
+
+Going back to our original example if the reflected wave is 30 degrees out of phase lets see what would happen if we brought it inphase to 0 degrees. To do that lets calculate the length change of the feedline we would need, we will assume we are working with a wavelength of one meter.
+
+$$ \phi = \{ \frac{2 \cdot l_L}{\lambda} \} \cdot 360^{\circ} $$ 
+
+$$ -30^{\circ} = \frac{2 \cdot l_L}{1} \cdot 360^{\circ} $$ 
+
+$$ \frac{-30^{\circ}}{360^{\circ}} = 2 \cdot l_L $$ 
+
+$$ \frac{-30^{\circ}}{2 \cdot 360^{\circ}} = l_L $$ 
+
+$$ \frac{-1}{24} = l_L $$ 
+
+So we know that if we subtract  \\(\frac{1}{24}\\)  of a meter off we will get the desired effect, or of course we could add  \\(\frac{23}{24}\\)  of a meter and get the same effect. This would change our reflection coefficient to:
+
+$$ \Gamma = 0.5 \angle 0^{\circ} $$ 
+
+or
+
+$$ \Gamma = 0.5 + 0 i\mkern1mu $$ 
+
+What is interesting is, as I said, this also changes what the load impedance looks like (the feedline plus antenna). Where before the impedance appeared mostly resistive with a small reactive component it now looks indistinguishable to our meter as a purely resistive load impedance, albeit still a mismatched one though. If we take our impedance equation from earlier and calculate it for our new reflection coefficient we can see exactly what that would be.
+
+$$ Z_L = \frac{-50 \cdot (\Gamma + 1)}{\Gamma - 1} $$ 
+
+$$ Z_L = \frac{-50 \cdot (0.5 + 1)}{0.5 - 1} $$ 
+
+$$ Z_L = \frac{-50 \cdot 1.5}{-0.5} $$ 
+
+$$ Z_L = \frac{-75}{-0.5} $$ 
+
+$$ Z_L = 150 $$ 
+
+So we effectively changed the old impedance of the load side from  \\(116.61 \angle -146.40^{\circ} \Omega\\)  to just  \\(150 \Omega\\) , pretty neat.
+
+Similarly we can look at this slightly differently. We can say if we know the feedline's length, and the complex impedance of the antenna, then what would be the impedance we see if we measure the antenna through the feedline. For that the equation is as follows:
+
+$$ Z_L =  Z_0 \cdot \frac{Z_{ANT} + Z_0 \cdot \tan(\frac{2\pi}{\lambda} \cdot l) i\mkern1mu}{Z_0 + Z_{ANT} \cdot \tan(\frac{2\pi}{\lambda} \cdot l) i\mkern1mu} $$ 
+
+Where \\(Z_L\\)  is the impedance measured through the feedline,  \\(Z_0\\)  is the characteristic impedance of the feedline,  \\(l\\)  is the length of the feedline,  \\(\lambda\\)  is the wavelength of the signal in the feedline, and  \\(Z_{ANT}\\)  is the impedance of the antenna at the far end of the feedline, or some other load.
diff --git a/content/blog/2020-09-28-an-indepth-look-at-duals-and-their-circuits.html.md b/content/blog/2020-09-28-an-indepth-look-at-duals-and-their-circuits.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..6483b82273f2a96e313672adaa4f02ef412ca41b
--- /dev/null
+++ b/content/blog/2020-09-28-an-indepth-look-at-duals-and-their-circuits.html.md
@@ -0,0 +1,1004 @@
+---
+title: An In-depth Look at Duals and Their Circuits
+date: 2020-09-28
+tags: [Mathematics, Electrical Engineering]
+layout: post
+---
+
+\\(\definecolor{current}{RGB}{0, 255, 221}\\)
+\\(\definecolor{voltage}{RGB}{181, 181, 98}\\)
+\\(\definecolor{impedance}{RGB}{18,110,213}\\)
+\\(\definecolor{resistance}{RGB}{114,0,172}\\)
+\\(\definecolor{reactance}{RGB}{45,177,93}\\)
+\\(\definecolor{imaginary}{RGB}{251,0,29}\\)
+\\(\definecolor{capacitance}{RGB}{255, 127, 0}\\)
+\\(\definecolor{inductance}{RGB}{255,0,255}\\)
+\\(\definecolor{permeability}{RGB}{0,255,0}\\)
+\\(\definecolor{permittivity}{RGB}{255,0,0}\\)
+\\(\definecolor{normal}{RGB}{0,0,0}\\)
+
+Duality is an approach that has been applied across countless disciplines where one takes an existing structure and transforms it into an equivalent structure, often with the intention of making it more useful for a particular context. In electronic circuits this usually means we take an existing circuit schematic and transform it in such a way that it serves a similar purpose but suited to our specific use case. One extremely trivial example of this would be converting two resistors in series, which act as a voltage divider, into two resistors in parallel producing a current divider. Another similarly trivial example would be to take a voltage divider and double the values of its resistors such that it divides the voltage by the same ratio but uses half the current to do so. In both cases the fundamental idea of dividing a value by a given ratio is the same, we just transform the circuit in different ways that are suited to our needs.
+
+One of the key advantages of duality is that it is feature-preserving, as such if the original circuit has particular desirable features but otherwise may not be well suited for our application we can transform the circuit into a dual in such a way as to preserve the desirable features but transform the undesirable features. For example a resistor based voltage divider has the advantageous feature of being relatively stable across various frequencies where other types of voltage dividers may have a very limited frequency range, so a resistor based voltage divider may be best suited for an extremely broadband application (large range of frequencies). However our application may require low-power consumption and the voltage divider may not need to drive a load and only need to be provided as an input to an IC with high impedance. As such if our reference circuit is for a voltage divider that uses relatively small values for resistors, and thus draws too much power, we can transform the voltage divider into its dual that preserves the frequency-stability of the original but reduces the current draw. This of course is a very trivial example, the concept of duality can, and often is, applied to much larger complex circuits as well. For this reason understanding circuit duality, and duality in general, specifically how to recognize it, apply it, and common circuit applications is a vital tool in anyone's mental toolbox.
+
+* Table of Contents will go here.
+{:toc}
+
+# What is a Dual?
+
+Duality is the transformation of a mathematical model or structure into an equivalent mathematical model or structure such that each element of the original has a one-to-one relationship with an element in the result. The transformation between its elements usually represents an involution, which means if the same transformation is applied twice you wind up with the original; at the very least the transformation must be reversible (invertible) back to its original form. This implies that the transformation must be unique for any given input. Both the overall structure once converted is said to be the dual of the original, but so too are the individual elements of the structure considered the dual of their counterpart in the dual structure.
+
+Taking the reciprocal is an example of an involution, and thus a trivial example of duality.
+
+$$
+f(x) = \frac{1}{x}
+$$
+
+Since \\(f(x)\\) is an involution the following must be true for any involution function.
+
+$$f(f(x)) = x$$
+
+Of course for the reciprocal this holds true.
+
+$$x = 5$$
+
+$$f(5) = \frac{1}{5}$$
+
+$$f(\frac{1}{5}) = 5$$
+
+Therefore we can say \\(5\\) is the dual of \\(\frac{1}{5}\\) under the reciprocal transformation.
+
+An involution can sometimes be an identity function, and thus create fixed points where the involution of one element is unchanged. This of course still holds true to the rules of a duality transformation whereby if the involution is applied twice you still wind up at the original, it is invertible. The identity transformation would be:
+
+$$ f(x) = x $$
+
+Therefore it is trivial to see this holds true as an involution since the following is true.
+
+$$ f(f(x)) = x $$
+
+In this case any value is the dual of itself under the identity transformation. Which isn't really saying much, but it is important to understand a fixed point is still a dual caused by an involution.
+
+As stated earlier duals are usually transformed between each other through an involution function, but this does not need to be the case. Any invertible (reversible) function can be a valid way to express duality. The technical term for the property of a function to be reversible is to say it is bijective But this is just a fancy way of saying you can reverse the function to get to where you started. For example adding one to a value is a bijective function since you can also subtract one and always get to where you started and there is no ambiguity in doing so. However multiplying by 0 is not bijective (invertible) because once you multiply by 0 you have no way of getting back to where you started, all numbers would transform into 0. In other words in order for a function to be invertible the output of the function must be a unique value for any given input of the function, otherwise ambiguity is introduced and there would be no way to reverse the process.
+
+$$ f(x) = x + 1 \label{addone}$$
+
+As stated equation \\(\eqref{addone}\\) is invertible as you can always subtract \\(1\\) and get back to where you started.
+
+$$ f^{-1}(x) = x - 1 $$
+
+$$ f^{-1}(f(x)) = x \label{inv} $$
+
+In this case \\(f^{-1}(x)\\) is called the inverse function to \\(f(x)\\) and the notation used in equation \\(\eqref{inv}\\) is the typical notation used to represent an inverse function. It should be trivially obvious but keep in mind an inverse function must work in both directions, in other words.
+
+$$ f(f^{-1}(x)) = f^{-1}(f(x)) = x $$
+
+It should be noted that an involution function is closely related to a function and its inverse. All an involution function really is is a function where its inverse is itself.
+
+Also bear in mind not all values will have a dual, consider the reciprocal function, which is an involution (its own inverse) and thus a valid transformation.
+
+$$ f(x) = f^{-1}(x) = \frac{1}{x} $$
+
+In the case of the reciprocal function a value of 0 for x is undefined since you can not divide by 0, any other real value other than 0, however, is valid. Therefore we can say that under the reciprocal transformation all real number values have a dual except for 0, which does not have a dual.
+
+# Examples of Duals
+
+There are many common examples of duals in almost every subject from philosophy, to mechanical engineering, it is a pervasive idea that can often be useful in many fields. Here are a few example values and their duals under different inversion transformations.
+
+* True is the dual of False under the negation transformation
+* 10 is the dual of 0.1 under the reciprocal transformation
+* 5 is the dual of -5 under the negation transformation.
+* A current divider circuit is the dual of a voltage divider circuit under series-parallel transformation
+* A capacitor based high-pass filter is the dual of an inductor based high-pass filter under reciprocal impedance transformation
+* A bandpass filter is the dual of a band-stop filter under series-parallel transformation
+* Position is the dual of velocity under the derivative/integral transformation
+* Up is the dual of Down under vertical flip transformation
+* In philosophy the mind is the dual of the physical world under dual-aspect theory
+
+Similarly here are some examples of transformations and their inverse that are therefore capable of producing duals
+
+* Reciprocal transformation is its own inverse, an involution.
+* Negation transformation is its own inverse, an involution.
+* derivative transformation is the inverse of an integral transformation
+* A geometric flip transformation is its own inverse, an involution
+* doubling a value is the inverse of halving a value
+
+# The Dual of a function
+
+Just as we have shown above that individual variables and values have a dual under an invertible function, likewise functions can also have duals in the same manner. Imagine we have an invertible function \\(T(x)\\) which will convert something to its dual, and we have some function \\(f(x)\\) we wish to find the dual of, then simply by passing the function into T we can produce its dual. Specifically \\(T(f(x)) = f^T(x)\\) where the functions \\(f(x)\\) and \\(f^T(x)\\) are duals of each other. It is important to note here only \\(T(x)\\) needs to be invertible; neither \\(f(x)\\) nor \\(f^T(x)\\) needs to have this property. For example; say the transformation under which we create the duals is the reciprocal function, which is invertible, but \\(f(x)\\) is the square function, which is not invertible. We know it isn't invertible because 10 squared is 100 and -10 squared is also 100. So there is no way to reverse the value of 100 and get the original value since some information was lost, we no longer know if the original value was positive or negative.
+
+$$T(x) = \frac{1}{X}$$
+
+$$f(x) = x^2$$
+
+$$f^T(x) = T(f(x)) = \frac{1}{x^2}$$
+
+We can now see the function \\(f(x) = x^2\\) is the dual of \\(f^T(x) = \frac{1}{x^2}\\) under the reciprocal transformation.
+
+# Manipulating A System of Equations
+
+Things get slightly more complicated when we start talking about systems rather than single variables or functions. A system is a collection of variables where some or all of the variables are dependent on the others; in other words, two or more mathematical functions dictate the value of one or more variables in relationship to other variables. In fact if you're reading this blog you are already familiar with one very important type of system we all care about, an electrical circuit. In an electrical circuit, the variables are things like the *voltage*{: style="color: rgb(181, 181, 98)"} at various points in the circuit and the system of functions are the electrical components that connect these points.
+
+## Mapping a System of Equations
+
+From this point on we need a good way to visualize systems of equations so I can do a better job talking about them. So I want to describe a graphical language for diagramming systems of equations. Let's start with a simple generic component that provides an *impedance*{: style="color: rgb(18, 110, 213)"}, doesn't matter just yet if it's a resistor or something else. The following is a simple schematic of a lone component where some of the variables we care about are labeled.
+
+![Simple Resistor](/images/simple-resistor.png)
+
+Keep in mind when we talk about Ohm's Law, we usually talk about the *voltage*{: style="color: rgb(181, 181, 98)"} across a component but here I have separated out the *voltage*{: style="color: rgb(181, 181, 98)"} on each terminal instead; it will make things a little more straight forward. Just keep in mind the *voltage*{: style="color: rgb(181, 181, 98)"} across the component is simply \\(\color{voltage}V_+\color{normal} - \color{voltage}V_-\color{normal}\\) in this case. Let's represent that component in terms of Ohm's Law which will give us the relationship between its *voltage*{: style="color: rgb(181, 181, 98)"}, *impedance*{: style="color: rgb(18, 110, 213)"}, and *current*{: style="color: rgb(0, 255, 221)"}. I will intentionally arrange the equation in such a way that doesn't give any one variable preferential treatment by solving for 0, this is to emphasize the fact that it is a relationship between all of the variables.
+
+$$ \color{current}I\color{normal} \cdot \color{impedance}Z\color{normal} + \color{voltage}V_-\color{normal} - \color{voltage}V_+\color{normal} = 0 $$
+
+The way I want to diagram an equation such as this would be as follows.
+
+![](/images/ohms-law-diagram.png)
+
+In this diagram we have variables in circles, these can have any arbitrary name and dont need to be the same name as the variables in the equations (you will see why that is necessary soon). The rectangles contain the equation, and the lines that connect it associate the shared variables, in circles, with the local variables defined in the equation. So here we have the variable \\(W\\) associated with \\(\color{current}I\color{normal}\\) for example. Lets apply this to a slightly more complex example, a simple *voltage*{: style="color: rgb(181, 181, 98)"} divider circuit.
+
+![](/images/voltage-divider.png)
+
+![](/images/voltage-divider-syseq.png)
+
+As you can see here we now have two equations, one for each component in our circuit which is capable of relating every variable/point in our circuit to every other. Some variables like *current*{: style="color: rgb(0, 255, 221)"} are shared between both components and relate to the same local variable in each equation. However others, like \\(\color{voltage}V_{out}\color{normal}\\), are also shared between both components, and both equations, but represents a different variable in each equation. This is the reason we needed to pick the specific format for our diagrams where the shared variables depicted in circles often have different names from the local variables in the equations. One important rule these diagrams will always follow is that the number of lines that connect to any particular equation will be exactly equal to the number of variables in the equation. Also note that at this stage we don't make any distinction between if a variable is a constant, or an unknown, every variable is treated the same. We will call this form of the diagram the **variable relationship diagram** as it shows the relationship between variables.
+
+The diagram as it stands now, however, is only the first step if we want to actually solve for the variables and, for example, determine the actual *voltage*{: style="color: rgb(181, 181, 98)"} at \\(\color{voltage}V_{out}\color{normal}\\); for that we need to actually figure out what variables have known quantities, and the relationship between them. The first step to do that is to pick whichever variables have known values and plug in the actual values for those variables into the circles. We also need to change the lines in the diagram into one-directional arrows. Any known variables will always have all of the connections facing outward. Presuming we know the source *voltage*{: style="color: rgb(181, 181, 98)"} and the *impedance*{: style="color: rgb(18, 110, 213)"} of our two components lets fill in some arbitrary values now and show how that might look.
+
+![](/images/voltage-divider-syseq-knowns.png)
+
+Here the known variables are highlighted in green, the unknown variables are highlighted in red, and the appropriate arrows were added. Notice we have two shared variables left, since we have two simultaneous equations we already know these can be treated as unknowns and solved for. Since in the convention we are using an arrow pointing into an equation is a variable that will be plugged into it, then an arrow pointing out of an equation will be a value the equation will solve for. As we know we can solve for any single variable in an equation and as long as all the other variables are known then we can turn our equation into a function and solve it. For example we could rearrange our equation into the following function.
+
+$$ \color{voltage}I \cdot Z\color{normal} + \color{voltage}V_-\color{normal} - \color{voltage}V_+\color{normal} = 0 $$
+
+$$ \color{voltage}V_+\color{normal} = \color{voltage}I \cdot Z\color{normal} + \color{voltage}V_-\color{normal} $$
+
+All we did was isolate the \\(\color{voltage}V_+\color{normal}\\) on one side of the equation and now it is a function. We can represent this in our diagram by making a rule for ourselves such that when we are trying to solve for a system of equations every equation in a box in our diagram should have one and only one outgoing arrow and all other arrows should be incoming. The outgoing arrow simply represents which of the variables we are choosing to solve for in the local equation. The other rule is that any unknown we can solve for must have at least one (and usually only one) incoming arrow and the rest of the arrows are outgoing. Finally, all lines must be converted to arrows. If we can follow these stated rules and ensure each unknown we care about has an incoming arrow then the system of equations should be solvable. For example here is what the final solvable diagram would look like in this case.
+
+![](/images/voltage-divider-syseq-fin.png)
+
+Keep in mind in the above diagram there is more than one way we could have made the system solvable and still followed the outlined rules. For example the arrows connected to \\(\color{voltage}V_{out}\color{normal}\\) could have been reversed along with the arrows connection to \\(\color{current}I\color{normal}\\) also being reversed in which case we would also have had a solvable system of equations. We will call this final form of the diagram the **variable dependency diagram**.
+
+Lets recap real quick the rules for a variable relationship diagram:
+
+1. Each equation, denoted by a rectangular box, should have exactly one line for each variable in the equation.
+2. Each global variable, denoted by a circle, should have one line connecting it to each equation it is used in.
+3. Lines can only connect variables (circles) with equations (rectangles)
+4. The variable name next to a line should match one of the variable names in the equation it connects to.
+5. The global variable name depicted inside a circle does not need to match the variable name on a line that connects it, but it is allowed to.
+6. At this stage none of the lines should have arrows associated with it.
+
+Similarly lets recap the rules for a variable dependency diagram:
+
+1. Rules 1 through 5 above also apply here.
+2. All lines in the diagram should be depicted as one-directional arrows.
+3. For each equation in diagram one and only one line should be an outgoing arrow, all other arrows should be inbound.
+4. All known global variables, depicted with a circle, should have all of its lines as outgoing arrows only.
+5. All unknown global variables, depicted with a circle, should have at least one, and usually only one, incoming arrow, all others should be outgoing. If this rule can not be satisfied then the system is not solvable.
+6. There may be more than one configuration that satisfies the above rules, if so pick any arbitrary layout capable of satisfying the rules.
+
+Let's finish up by actually solving for the unknowns in the above variable dependency diagram.
+
+First let's take the left-hand equation.
+
+$$ \color{voltage}I \cdot Z\color{normal} + \color{voltage}V_-\color{normal} - \color{voltage}V_+\color{normal} = 0 $$
+
+$$ \color{voltage}I \cdot 7\Omega\color{normal} + \color{voltage}0V\color{normal} - \color{voltage}V_{out}\color{normal} = 0 $$
+
+$$ \color{voltage}V_{out}\color{normal} = \color{voltage}I \cdot 7\Omega\color{normal} + \color{voltage}0V\color{normal} $$
+
+$$ \color{voltage}V_{out}\color{normal} = \color{voltage}I\cdot 7\Omega\color{normal} $$
+
+This now represents the value of \\(\color{voltage}V_{out}\color{normal}\\) which can then be used when we solve the right-hand equation.
+
+$$ \color{voltage}I \cdot Z\color{normal} + \color{voltage}V_-\color{normal} - \color{voltage}V_+\color{normal} = 0 $$
+
+$$ \color{voltage}I \cdot 10\Omega\color{normal} + \color{voltage}I \cdot 7\Omega\color{normal} - \color{voltage}10V\color{normal} = 0 $$
+
+$$ \color{voltage}I \cdot 10\Omega\color{normal} + \color{voltage}I \cdot 7\Omega\color{normal} = \color{voltage}10V\color{normal} $$
+
+$$ \color{voltage}I \cdot (10\Omega + 7\Omega)\color{normal} = \color{voltage}10V\color{normal} $$
+
+$$ \color{voltage}I \cdot 17\Omega\color{normal} = \color{voltage}10V\color{normal} $$
+
+$$ \color{current}I\color{normal} = \color{current}\frac{10}{17}A \color{normal}$$
+
+Now that we have solved for \\(\color{current}I\color{normal}\\) we can finish solving the left-hand equation where we left off.
+
+$$ \color{voltage}V_{out}\color{normal} = \color{voltage}I \cdot 7\Omega\color{normal} $$
+
+$$ \color{voltage}V_{out}\color{normal} = \color{voltage}\frac{10}{17}A \cdot 7\Omega\color{normal} $$
+
+$$ \color{voltage}V_{out}\color{normal} = \color{voltage}\frac{70}{17}V\color{normal} $$
+
+$$ \color{voltage}V_{out}\color{normal} = \color{voltage}4 \frac{2}{17}V\color{normal} $$
+
+Easy right?
+
+## Manipulating a Variable Relationship Diagram
+
+One thing we also need to know how to do is manipulate the variable relationship diagram, which is exactly the same as manipulating a system of equations. Obviously if we have two equations that share a common variable we can combine them into a single equation which eliminates the common variable by simple substitution. A simple example of that is as follows.
+
+$$ f = 2x+t $$
+
+$$ t = 7+y $$
+
+These can be combined into:
+
+$$ f = 2x + 7 + y \label{combined}$$
+
+Notice the variable \\(t\\) disappears when we do this. Of course the same is true in reverse, we can pull out some terms in an equation, replace it with a variable, and get two new equations as a result and one additional variable. For example in the equation \\(\eqref{combined}\\) we can pull out \\(7 + y\\) as a term, replace it with \\(t\\) and wind up with the two equations we started with.
+
+We can likewise do the same with our variable relationship diagram, afterall it is just a way of visualizing systems of equations. Let's say we took our earlier example of a *voltage*{: style="color: rgb(181, 181, 98)"} divider and its corresponding variable relationship diagram. The following is what it would look like if we split up the equation \\(\color{voltage}I \cdot Z\color{normal} + \color{voltage}V_-\color{normal} - \color{voltage}V_+\color{normal} = 0\\) by pulling out the \\(\color{voltage}I \cdot Z\\color{normal}\\) term and replacing it with a new variable we will call \\(\color{voltage}V\color{normal}\\).
+
+![Separated system of equations](/images/voltage-divider-syseq-sep.png)
+
+Here we can see two new shared variables are created, one called \\(\color{voltage}V_1\color{normal}\\) and the other \\(\color{voltage}V_2\color{normal}\\), both represent the *voltage*{: style="color: rgb(181, 181, 98)"} across their respective components. Other than the addition of two new variables, and changing 2 equations into four, this diagram still represents the same *voltage*{: style="color: rgb(181, 181, 98)"} divider as before. It can often be useful to break up equations in this way when we are considering how to construct duals for a system of equations, but we will get to that later. Usually what we find though is breaking up equations into smaller ones is only useful down to three variables, anymore than that and we just get long chains that add a lot of verbosity to the diagram but don't really add much value beyond that. So typically when transforming to a dual we start by representing a system with three-variable equations and then we can make it more compact as we work with it.
+
+One interesting aspect of working with things visually is it gives us clues as to which equations can be combined simply due to how the diagram is laid out. For example if you start at any equation and draw a path following the connecting lines and variables to any other equation, even if you go through multiple equations in the diagram to get there, then the path you created can be combined into a single equation. For example if we create a vertical path between the pair of equations \\(\color{voltage}I \cdot Z\color{normal} - \color{voltage}V\color{normal} = 0\\) up to \\(\color{voltage}V\color{normal} + \color{voltage}V_-\color{normal} - \color{voltage}V_+\color{normal} = 0\\) then those two paths can combine the equations and we would wind back at where we started before we split the equations up. Likewise we can also create a path starting at any of the four equations creating a loop through the other three such that the path goes through all four equations and in doing so can compact all four equations into one big equation. In fact being able to combine all the equations into one big equation is always possible as long as the system of equations we are representing is solvable.
+
+# The Dual of a Circuit
+
+Now lets reiterate what we said earlier when we defined what a dual is: The transformation of a mathematical model or structure into an equivalent model or structure such that each element of the original has a one-to-one relationship with an element in the result, where the transformation between its elements is invertible.
+
+At this point it should be obvious that when we talk about a mathematical model it is analogous to a system of equations, and for our focus here the equations describe an electrical circuit. Let's take a minute and consider what our definition of a dual means when we talk about a circuit. We are saying that a dual of a circuit must be functionally equivalent, in other words it is at least partially feature-preserving, and each of its components must have a one-to-one relationship between the circuits. This doesn't necessarily mean the dual will have the same components or that the *voltage*{: style="color: rgb(181, 181, 98)"}, *current*{: style="color: rgb(0, 255, 221)"}, *resistance*{: style="color: rgb(114,0,172)"}, or any other value, will be the same in one circuit or its dual, however they do need a one-to-one relationship where some value at some point in one circuit can serve the same function at some point in the dual of that circuit. For example if we create a dual circuit and find the output of the circuit is inverted from the original then that is acceptable since it can be seen as representing the same information in a different but equivalent way. In other words for every one-to-one relationship in a circuit and its dual, the values or components in each must also be duals of each other. In fact that's all the dual of a system really is, some system where you replace part or all of the system with its dual in such a way that the utility of the overall system is preserved.
+
+## The Circuit Dual Under Reciprocal Impedance
+
+There are many different types of circuit duals and even more types of duals in the general sense. The most commonly taught circuit dual is the reciprocal *impedance*{: style="color: rgb(18, 110, 213)"} circuit dual. In this form of dual circuit each component is replaced with an equivalent component that has reciprocal *impedance*{: style="color: rgb(18, 110, 213)"} characteristics. Simultaneously power sources such as batteries have their polarity reversed. This will result in a dual circuit where the amplitude of the signals at any point in the circuit is unchanged but are in different locations in the new circuit. If you flip the components around the power source however instead of flipping the power source, which is functionally the same thing, the position of the *voltage*{: style="color: rgb(181, 181, 98)"} points will remain unchanged; which tends to be a more convenient way to visualize it. The phase of the signals, as well as the *current*{: style="color: rgb(0, 255, 221)"}, at any point undergoes a transformation however and is not preserved. Generally forward phase shifts become negative phase shifts of the same degree. In this type of circuit inductors become the dual of capacitors as they always have reciprocal *impedance*{: style="color: rgb(18, 110, 213)"} of each other for the same value component.
+
+The type of circuit dual here, the dual under reciprocal *impedance*{: style="color: rgb(18, 110, 213)"}, is typically the type of Dual that is intended when an electrical engineer talks about a circuit dual. Let's start with a really simple example to show what we mean, consider the following RC circuit that acts as a low-pass filter.
+
+![Capacitor Low Pass Filter](/images/cap-low-pass.png)
+
+It should be apparent right away that this is very similar to our *voltage*{: style="color: rgb(181, 181, 98)"} divider from before except that now instead of specifying some generic unnamed components we are defining \\(\color{impedance}Z_1\color{normal}\\) to be the value from a resistor and \\(\color{impedance}Z_2\color{normal}\\) to be the value from a capacitor. This will function as a low pass filter allowing low frequency signals from \\(\color{voltage}V_s\color{normal}\\) to pass relatively unattenuated out of \\(\color{voltage}V_{out}\color{normal}\\) while attenuating higher frequency signals. A DC signal will pass through completely unaffected and as the frequency increases less of the signal will make it out.
+
+For those of you who are familiar with this circuit you probably already know there is another way you can construct a low-pass filter that is very similar but uses an inductor in place of a capacitor. That circuit would look like this.
+
+![Capacitor Low Pass Filter](/images/ind-low-pass.png)
+
+Assuming the correct values are picked for the components in each of these circuits then these two circuits will behave similarly and either circuit would be an effective low-pass filter.
+
+In this case these two circuits are what we would call duals of each other whereby the inductor is the dual of the capacitor, the position of the two components are reversed, but everything in one circuit has a one to one relationship with the other one. This is one of the simplest examples of a circuit dual. Similarly the system of equations that describe these two circuits will also be duals of each other, let's take a look at that.
+
+Since the above two circuits are essentially *voltage*{: style="color: rgb(181, 181, 98)"} dividers, where the *impedance*{: style="color: rgb(18, 110, 213)"} of the capacitor and inductor change according to frequency, we can describe both systems using a similar set of equations as we did above, just with a bit of extra detail. Let's start by looking at the system of equations that would describe the capacitor based low-pass filter. We already know the *impedance*{: style="color: rgb(18, 110, 213)"} of a resistor is simply its *resistance*{: style="color: rgb(114,0,172)"}, the *impedance*{: style="color: rgb(18, 110, 213)"} of a capacitor is as follows.
+
+$$\color{impedance}Z_2\color{normal} = \color{impedance}\frac{1}{2\pi f C j}\color{normal} = \color{reactance}-\frac{1}{2\pi f C}\color{imaginary}j\color{normal} $$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(f\\)* is the frequency applied in Hz,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{capacitance}C\color{normal}\\)* is *capacitance*{: style="color: rgb(255, 127, 0)"} in Farad, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{imaginary}j\color{normal}\\)* is the *imaginary*{: style="color: rgb(251,0,29)"} number.
+
+If complex numbers confuse you don't worry, for the most part for what we will be discussing you can simply ignore the *imaginary*{: style="color: rgb(251,0,29)"} number. If we apply this to our earlier variable relationship diagram then it would look something like this.
+
+![](/images/voltage-divider-syseq-caplow.png)
+
+If we want to create a dual for the circuit represented by the above variable relationship diagram we can start by rearranging the diagram following certain rules. Keep in mind, however, that in the context here the system of equations we are working with is intended to represent a circuit. If we were dealing with a pure system of equations, that were not intended to represent something physical like a circuit, then we would have a great deal of freedom in the sorts of duals we could create by rearranging the system of equations. But since we are specifically interested in talking about circuits, we need to be mindful that any rearrangement we do can actually be represented as a circuit in the real world, it is more than just a lump of equations on a piece of paper. One simple mental check you can do when working with physical systems, like a circuit, is when creating a dual make sure when you move something around that the units associated with the various variables still make sense. If \\(\color{impedance}Z_1\color{normal}\\) is an *impedance*{: style="color: rgb(18, 110, 213)"} you can't just go plugging it into an equation for a variable where *voltage*{: style="color: rgb(181, 181, 98)"} is expected, for example, that just wouldn't make much sense.
+
+The other important factor to consider here is that because we are talking about a dual, and because a dual needs to maintain a one-to-one relationship between elements of its dual, we need to ensure that all of the relevant elements in our circuit are represented in our variable relationship diagram. This means that at a minimum there should be one shared variable representing the *voltage*{: style="color: rgb(181, 181, 98)"} at each node in our circuit, here those would be \\(\color{voltage}Gnd\color{normal}\\), \\(\color{voltage}V_{out}\color{normal}\\), and \\(\color{voltage}V_s\color{normal}\\). We also need to represent the *current*{: style="color: rgb(0, 255, 221)"} for each mesh in the circuit; since our circuit here is just a single loop we only have one variable representing *current*{: style="color: rgb(0, 255, 221)"}, \\(\color{current}I\color{normal}\\). Naturally since the components themselves represent *impedances*{: style="color: rgb(18, 110, 213)"}, and ultimately the components will be what get manipulated in order to create our dual, it is useful to also insure the *impedance*{: style="color: rgb(18, 110, 213)"} for each component is represented in our diagram as well; here we have \\(\color{impedance}Z_1\color{normal}\\) and \\(\color{impedance}Z_2\color{normal}\\) doing just that.
+
+One way we can create a dual from our variable relationship diagram is to pick two shared variables of the same type, such as *impedances*{: style="color: rgb(18, 110, 213)"}, with the intention of flipping their positions. In this case we want to flip the *impedance*{: style="color: rgb(18, 110, 213)"} of our two components so we will pick \\(\color{impedance}Z_2\color{normal}\\) and \\(\color{impedance}Z_1\color{normal}\\) to be flipped to create our dual. Let's color that in our diagram blue. At the same time take any equations connected to the selected nodes that do not lie between some path between the nodes and color them green. For example the equation for the *impedance*{: style="color: rgb(18, 110, 213)"} of a capacitor fits that description so we will color it green, however, the equation \\(\color{voltage}I \cdot Z\color{normal} - \color{voltage}V\color{normal} = 0\\) does lie on a path between the two blue nodes, so we will not color it green. Next, repeat the process such that everything you just colored green has everything attached to it that is not already colored changed to green as well; repeat until there is nothing left to color. When we are done the parts colored green should not lie on a path between the two blue points. After this the diagram would be as follows.
+
+![](/images/voltage-divider-syseq-caplow-flip.png)
+
+The areas in green in our graph are the parts we intend to flip across the blue shared variables. The next step is to start at each of the two shared variables colored in blue, in this case \\(\color{impedance}Z_1\color{normal}\\) and \\(\color{impedance}Z_2\color{normal}\\), and find the shortest path between them and color it blue. We want to ensure that every non-green line connected to these variables is blue when we are done; if needed we may need to pick more than one path to accomplish that, but using the least number of paths to do so is ideal. In this case we can select a single path and satisfy that condition.
+
+![](/images/voltage-divider-syseq-caplow-path.png)
+
+Next combine the equations in blue into a single equation.
+
+$$ \color{voltage}I \cdot Z\color{normal} - \color{voltage}V\color{normal} = 0$$
+
+$$ \color{voltage}I \cdot Z\color{normal} = \color{voltage}V\color{normal} $$
+
+$$\color{current}I\color{normal} = \color{current}\frac{V}{Z}\color{normal}$$
+
+$$\color{current}\frac{V_1}{Z_1}\color{normal} = \color{current}\frac{V_2}{Z_2}\color{normal}$$
+
+$$ \color{current}\frac{V_1}{Z_1}\color{normal} - \color{current}\frac{V_2}{Z_2}\color{normal} = 0 $$
+
+Giving us the following diagram.
+
+![](/images/voltage-divider-syseq-caplow-path-combine.png)
+
+This of course creates a problem, we eliminated the global variable for *current*{: style="color: rgb(0, 255, 221)"}, \\(\color{current}I\color{normal}\\), and as stated earlier when creating duals we care about the value of \\(\color{current}I\color{normal}\\) so we need to add it back somewhere else in the system of equations. There are multiple places we can add \\(\color{current}I\color{normal}\\) back into our equation, for example the *voltage*{: style="color: rgb(181, 181, 98)"} across either of our two components in the circuit, divided by the *impedance*{: style="color: rgb(18, 110, 213)"} of that component, would give us \\(\color{current}I\color{normal}\\); as such we could create the equation for that and connect the \\(\color{voltage}V_2\color{normal}\\) shared variable and the \\(\color{impedance}Z_2\color{normal}\\) shared variable to it and add \\(\color{current}I\color{normal}\\) hanging off in our diagram on the left side. We can also do the same on the right side for the other component and get the same value of \\(\color{current}I\color{normal}\\). However if we did it this way we would find we would need to rearrange the diagram because if you recall the rules earlier when we defined our paths, colored in blue, this would mean we would have to create an additional path through the new equation. The path in either of those cases would mean we would have to combine and manipulate the additional path in the same way we are currently doing with the one path we have. Therefore the easier way to add \\(\color{current}I\color{normal}\\) back for our purposes is as a relationship between our two *impedances*{: style="color: rgb(18, 110, 213)"} and \\(\color{voltage}V_s\color{normal}\\) with the following equation.
+
+$$\color{current}I\color{normal} = \color{current}\frac{V_s}{Z_1 + Z_2}\color{normal}$$
+
+$$\color{current}\frac{V_s}{Z_1 + Z_2}\color{normal} - \color{current}I\color{normal} = 0$$
+
+This equation is just Ohm's law applied to the whole circuit with the *voltage*{: style="color: rgb(181, 181, 98)"} across the circuit being \\(\color{voltage}V_s\color{normal}\\) and the total *impedance*{: style="color: rgb(18, 110, 213)"} of the circuit being the sum of our two individual *impedances*{: style="color: rgb(18, 110, 213)"}. Defining it in this way isn't necessary but it will save us the headache of doing additional work manipulating our diagram to get it into the proper form to calculate our dual.
+
+![](/images/voltage-divider-syseq-caplow-path-combine-i.png)
+
+Next if the combined equation has more than three variables associated with it, split out the variables that are not part of the path. Let's start with the equation on the right hand side, in that equation we want to split out \\(\color{voltage}V_1\color{normal}\\) and \\(\color{voltage}V_2\color{normal}\\).
+
+$$ \color{current}\frac{V_1}{Z_1}\color{normal} - \color{current}\frac{V_2}{Z_2}\color{normal} = 0 $$
+
+$$ \color{current}\frac{V_1}{Z_1}\color{normal} = \color{current}\frac{V_2}{Z_2}\color{normal} $$
+
+$$ \color{voltage}\frac{V_1 \cdot Z_2}{Z_1}\color{normal} = \color{voltage}V_2\color{normal} $$
+
+$$ \frac{\color{impedance}Z_2\color{normal}}{\color{impedance}Z_1\color{normal}} = \frac{\color{voltage}V_2\color{normal}}{\color{voltage}V_1\color{normal}} $$
+
+$$ \frac{\color{impedance}Z_2\color{normal}}{\color{impedance}Z_1\color{normal}} - \frac{\color{voltage}V_2\color{normal}}{\color{voltage}V_1\color{normal}} = 0 $$
+
+$$ \frac{\color{impedance}Z_2\color{normal}}{\color{impedance}Z_1\color{normal}} - X = 0 $$
+
+That is one equation, and the second:
+
+$$ X = \frac{\color{voltage}V_2\color{normal}}{\color{voltage}V_1\color{normal}} $$
+
+$$ \frac{\color{voltage}V_2\color{normal}}{\color{voltage}V_1\color{normal}} - X = 0$$
+
+Again lets apply this to our diagram
+
+![](/images/voltage-divider-syseq-caplow-path-split.png)
+
+We also want to split the equation on the right hand side for the same reason.
+
+$$ \color{current}\frac{V_s}{Z_1+Z_2}\color{normal} - \color{current}I\color{normal} = 0 $$
+
+$$ \color{current}\frac{V_s}{Z_1+Z_2}\color{normal} = \color{current}I\color{normal} $$
+
+$$ \color{impedance}\frac{1}{Z_1+Z_2}\color{normal} = \color{impedance}\frac{I}{V_s}\color{normal} $$
+
+$$ \color{impedance}Z_1\color{normal} + \color{impedance}Z_2\color{normal} = \color{impedance}\frac{V_s}{I}\color{normal} $$
+
+$$ \color{impedance}Z_1\color{normal} + \color{impedance}Z_2\color{normal} - \color{impedance}\frac{V_s}{I}\color{normal} = 0 $$
+
+Which we can split into our two new equations.
+
+$$ \color{impedance}Z_1\color{normal} + \color{impedance}Z_2\color{normal} - Y = 0 $$
+
+$$ \color{impedance}\frac{V_s}{I}\color{normal} - Y = 0 $$
+
+Representing that in the diagram we get.
+
+![](/images/voltage-divider-syseq-caplow-path-split-2.png)
+
+We should now take a moment to consider what properties the dual circuit we want to create needs to have in order for it to meet our use case. For the sake of simplicity let's start by saying we don't care about the phase of the AC signals throughout the circuit, only the amplitude. This lets us get rid of the *imaginary*{: style="color: rgb(251,0,29)"} number, \\(\color{imaginary}j\color{normal}\\), in our equation for capacitor *impedance*{: style="color: rgb(18, 110, 213)"} and lets us treat all the variables throughout our system of equations as real numbers. We could handle the complex case if we wanted but for now I think it's important we keep this example simple.
+
+Since we've done away with *imaginary*{: style="color: rgb(251,0,29)"} and complex numbers let's consider what shared variables in our system of equations need to remain fixed points when we transform it to our dual and what variables are free to change. Keep in mind all the variables in the end will always be a dual of their counterpart in the original, we just decide which variables are fixed points, and thus their own dual, and which are not fixed. Remember an element in a system can always be a dual of itself so this isn't a problem.
+
+Well, \\(\color{voltage}V_s\color{normal}\\) represents our input signal and \\(\color{voltage}Gnd\color{normal}\\) defines the bias, or in this case lack of a bias, applied to that signal, so we know those values must be fixed. Similarly we know we want our dual circuit to behave as an equivalent low-pass filter to the original therefore we can also assert that \\(\color{voltage}V_{out}\color{normal}\\) must likewise be fixed. The rest of the variables we aren't too concerned with, so let's start by coloring our fixed points red.
+
+![](/images/voltage-divider-syseq-caplow-fixed.png)
+
+By defining a certain point as fixed this will cause this effect to propagate throughout a portion of our diagram. Essentially any variables in our diagram which are dependent solely on other fixed variables will themselves become fixed variables. To illustrate this first find any equations where either all but one variable directly connected to it is red, or where all variables are red, and make that equation red. Likewise after doing that any equation which is red which connects to a black variable, make that variable red. Repeat this until there are no more changes to be made. Note that at no point will you change the color of anything that is in blue in the diagram.
+
+![](/images/voltage-divider-syseq-caplow-fixed-all.png)
+
+At this point we have defined our expectations and appropriately annotated our diagram. Everything in red represents the portion of the system that will remain fixed while the black portion will be free to transform. It is important to note that not all choices for fixed points are possible or useful, for example in this case if we had also defined *current*{: style="color: rgb(0, 255, 221)"}, \\(\color{current}I\color{normal}\\), as a fixed point then there would be no valid transformation that would satisfy this, we will see why in a moment.
+
+In our diagram any blue equations connected with a red portion will be the equation that will dictate the transform we must use when flipping the green portion of our graph to the other shared variable. If both of the blue equations were connected to a red variable then that would mean that we must satisfy the transform, which we will calculate in a minute, to satisfy both of these equations simultaneously. Often that is not possible, it would only be possible if both equations would somehow dictate the same transform. As we will see in a minute that is not the case here so we know that only one of the two blue equations is allowed to be connected to a red segment. As such we also know that given the fixed points we already selected, annotated in red, it is not possible to also make \\(\color{current}I\color{normal}\\) fixed. With that said if all we really cared about was \\(\color{current}I\color{normal}\\) and \\(\color{voltage}V_s\color{normal}\\) remaining fixed, and allowed the other variables to transform, then that would be doable as well. But if we did that we would be solving a very different problem since we are trying to create a dual which is feature-preserving with regards to still being low-pass filter.
+
+The final step is to figure out the transformation the left-hand blue equation will dictate for a flip across \\(\color{impedance}Z_2\color{normal}\\) and \\(\color{impedance}Z_1\color{normal}\\). To do that pick for one of the shared variables at either end and solve for it. In this case we will start with \\(\color{impedance}Z_1\color{normal}\\).
+
+$$ \color{impedance}Z_2\color{normal} = X \cdot \color{impedance}Z_1\color{normal} $$
+
+$$ \color{impedance}Z_2\color{normal} = X \cdot \color{impedance}Z_1\color{normal} $$
+
+$$ \color{impedance}Z_1\color{normal} = \color{impedance}Z_2\color{normal} \cdot \frac{1}{X} $$
+
+Now solve for the other variable, in this case \\(\color{impedance}Z_2\color{normal}\\)
+
+$$ \frac{\color{impedance}Z_2\color{normal}}{\color{impedance}Z_1\color{normal}} - X = 0 $$
+
+$$ \frac{\color{impedance}Z_2\color{normal}}{\color{impedance}Z_1\color{normal}} = X $$
+
+$$ \color{impedance}Z_2\color{normal} = X \cdot \color{impedance}Z_1\color{normal} $$
+
+These two equations represent inverses of each other, obviously. Next lets represent them as functions of \\(X\\) and also make \\(\color{impedance}Z_1\color{normal}\\) and \\(\color{impedance}Z_2\color{normal}\\) the same variable as follows.
+
+$$ \color{impedance}Z_1(X)\color{normal} = \frac{1}{X} \cdot \color{impedance}Z\color{normal} $$
+
+$$ \color{impedance}Z_2(X)\color{normal} = X \cdot \color{impedance}Z\color{normal} $$
+
+Next we want to figure out what transformation we have to do to X in one function in order to produce the other function. In other words, we want to figure out what the function \\(T(x)\\) needs to be in the following equation.
+
+$$ \color{impedance}Z_1(T(X))\color{normal} = \color{impedance}Z_2(X)\color{normal} \label{argtrans} $$
+
+Since the equation here is simple it is probably already obvious, but let's expand our functions and work through it anyway; expanding our two functions for equation \\(\eqref{argtrans}\\) and we get.
+
+$$ \color{impedance}Z\color{normal} \cdot \frac{1}{T(X)} = X \cdot \color{impedance}Z\color{normal} $$
+
+Let's just solve for \\(T(X)\\) to see what the function definition is.
+
+$$ \frac{1}{T(X)} = \frac{X \cdot \color{normal}Z\color{impedance}}{\color{impedance}Z\color{normal}} $$
+
+$$ \frac{1}{T(X)} = X $$
+
+$$ T(X) = \frac{1}{X} $$
+
+We also need to find the inverse function of \\(T(X)\\) which would be the function that satisfies the following.
+
+$$ f^{-1}(T^{-1}(X)) = f(X) $$
+
+Another way of stating the same thing is you just take the function \\(T(X)\\) and solve for X.
+
+$$ T(X) = \frac{1}{X} $$
+
+$$ y = \frac{1}{X} $$
+
+$$ x = \frac{1}{y} $$
+
+$$ T^{-1}(X) = \frac{1}{X} $$
+
+As we can see in this case the inverse of \\T(X)\\) is itself. This isnt always the case, as we discussed earlier this makes the transform in this case an involution.
+
+Now we know in order to perform the flip between the two components in the circuit we must perform the reciprocal transform on each component when we do. To do this we can flip the two nodes and insert our reciprocal transformation between each of them. If the transform were not an involution then we would perform the inverse transform on \\(\color{impedance}Z_2\color{normal}\\) to get \\(\color{impedance}Z_{\hat{1}}\color{normal}\\) and vice versa as follows.
+
+$$ \color{impedance}Z_{\bar{1}}\color{normal} = T^{-1}(\color{impedance}Z_2\color{normal}) $$
+
+$$ \color{impedance}Z_{\bar{2}}\color{normal} = T(\color{impedance}Z_1\color{normal}) $$
+
+If we were talking about a simple *voltage*{: style="color: rgb(181, 181, 98)"} divider made with two resistors, where \\(\color{impedance}Z_1\color{normal} = \color{resistance}100\Omega\color{normal}\\) and \\(\color{impedance}Z_2\color{normal} = \color{resistance}10\Omega\color{normal}\\), then we could flip the position of these components, take the reciprocal of each and we would have an equivalent system, where \\(\color{impedance}Z_{\bar{1}}\color{normal} = \color{resistance}\frac{1}{10}\Omega\color{normal}\\) and \\(\color{impedance}Z_{\bar{2}}\color{normal} = \color{resistance}\frac{1}{100}\Omega\color{normal}\\), and in doing so all other variables in red will remain fixed. Meanwhile, as expected, *current*{: style="color: rgb(0, 255, 221)"}, \\(\color{current}I\color{normal}\\), will change significantly. However in this case we are working with a capacitor and a resistor and not two resistors so that changes things. Let's illustrate our new diagram under the transform.
+
+![](/images/voltage-divider-syseq-caplow-trans.png)
+
+Lets expand the transform function and we get the following.
+
+![](/images/voltage-divider-syseq-caplow-trans-full.png)
+
+We quickly notice that if we combine the reciprocal equation and the *impedance*{: style="color: rgb(18, 110, 213)"} equation for the capacitor, it would take the reciprocal and thus eliminate the fraction. What we wind up with looks identical at that point to the equation for an inductor. That is because the *impedance*{: style="color: rgb(18, 110, 213)"} for an inductor is always the dual of the *impedance*{: style="color: rgb(18, 110, 213)"} of a capacitor of the same value under the reciprocal transform. As such our capacitor becomes an inductor, therefore we can combine these two equations in our diagram and  arrive at the equation for an inductor by changing the variable \\(\color{capacitance}C\color{normal}\\) to \\(\color{inductance}L\color{normal}\\), which is convention for representing *inductance*{: style="color: rgb(255,0,255)"}. Similarly the dual of a resistor's *impedance*{: style="color: rgb(18, 110, 213)"} under the reciprocal transform would be admittance, which is just the reciprocal of *resistance*{: style="color: rgb(114,0,172)"}. Therefore we can likewise change the resistor in our original circuit with a new resistor where the capacitor used to be that has an admittance value that is the same as the *resistance*{: style="color: rgb(114,0,172)"} value of the old resistor. The standard variable for admittance is \\(Y\\) so lets likewise make that change in our diagram.
+
+![](/images/voltage-divider-syseq-indlow.png)
+
+This final diagram is our dual where \\(\color{capacitance}C\color{normal} = \color{inductance}L\color{normal}\\) in the original circuit and \\(Y_{\bar{2}} = \color{inductance}Z_2\color{normal}\\) as well. This now represents an inductor based low-pass filter as we illustrated in the circuit diagram earlier.
+
+To recap, we know that the *impedance*{: style="color: rgb(18, 110, 213)"} equation for an inductor is the reciprocal of that of a capacitor, so in our capacitor based low-pass filter we know we can swap the position of the capacitor and the resistor, use the reciprocal value for the new resistor, and since an inductor is already the reciprocal of a capacitor, we just ensure the inductor has the same *inductance*{: style="color: rgb(255,0,255)"} in Henrys as the capacitor has *capacitance*{: style="color: rgb(255, 127, 0)"} in Farads. Thus transforming our capacitor based low-pass filter into its inductor based dual.
+
+## The Voltage-current Dual Under Parallel-series Transformation
+
+A *voltage*{: style="color: rgb(181, 181, 98)"}-*current*{: style="color: rgb(0, 255, 221)"} circuit dual under parallel-series transformation is another valid type of dual. In this sort of dual points in the circuit that represent *voltage*{: style="color: rgb(181, 181, 98)"} signals are transformed into equivalent *current*{: style="color: rgb(0, 255, 221)"} signals and vice versa. Every point in the original circuit that represents a *voltage*{: style="color: rgb(181, 181, 98)"} has an equivalent *current*{: style="color: rgb(0, 255, 221)"} through a mesh in the dual circuit. As such the number of nodes in the original circuit (not counting ground) is equal to the number of meshes in the dual circuit and vice versa. This is accomplished by transforming each component from its series topology to a parallel topology and vice versa.
+
+The process for working with the system of equations that define this type of dual is similar to the process we used earlier except we are simply flipping around different parts of the graph and choosing different relationships. I encourage you to give it a try for yourself.
+
+Under this type of dual a *voltage*{: style="color: rgb(181, 181, 98)"} divider becomes its equivalent, a *current*{: style="color: rgb(0, 255, 221)"} divider. Take the following *voltage*{: style="color: rgb(181, 181, 98)"} divider as an example.
+
+![](/images/series-voltage-divider.png)
+
+Likewise here is its *voltage*{: style="color: rgb(181, 181, 98)"}-*current*{: style="color: rgb(0, 255, 221)"} dual under parallel-series transformation, a current divider.
+
+![](/images/parallel-current-divider.png)
+
+As you can see \\(\color{current}I_1\color{normal}\\) becomes equivalent to \\(\color{voltage}V_1\color{normal}\\) and \\(\color{current}I_2\color{normal}\\) becomes equivalent to \\(\color{voltage}V_2\color{normal}\\). We can also see that the second circuit has two meshes and one node; meanwhile, the first circuit has two nodes and one mesh. More importantly, however, the ratio of the *current*{: style="color: rgb(0, 255, 221)"} being divided between \\(\color{current}I_1\color{normal}\\) and \\(\color{current}I_2\color{normal}\\) in the *current*{: style="color: rgb(0, 255, 221)"} divider is the same as the ratio between voltages \\(\color{voltage}V_1\color{normal}\\) and \\(\color{voltage}V_2\color{normal}\\) in the *voltage*{: style="color: rgb(181, 181, 98)"} divider.
+
+## The Electric-magnetic Dual under Capacitance-permeance Transformation
+
+There is another type of circuit dual that is far more obscure, rarely understood, and almost never considered, that is the circuit dual created by swapping the magnetic field and the electric field in much the same way we can create a circuit dual that swaps the *voltage*{: style="color: rgb(181, 181, 98)"} and *current*{: style="color: rgb(0, 255, 221)"} values. Every electric circuit has an equivalent magnetic circuit as its dual, though in practice this isnt always all that useful to create such a dual. In a magnetic circuit dual of an electric circuit *resistance*{: style="color: rgb(114,0,172)"} becomes *magnetic resistance*{: style="color: rgb(114,0,172)"}, electric fields are replaced with magnetic fields, inductors behave like capacitors, capacitors behave like inductors, Electromotive Force (EMF), measured in *volts*{: style="color: rgb(181, 181, 98)"}, is replaced with Magnetomotive Force (MMF), measured in amps, and *current*{: style="color: rgb(0, 255, 221)"} is replaced with magnetic *current*{: style="color: rgb(0, 255, 221)"} which is the rate of change of magnetic flux, which conveniently enough has the units of volts. In other words a magnet or inductor where the field is collapsing or growing at a constant rate in a magnetic circuit is equivalent to a DC an electric circuit. Similarly since a spinning magnet by definition is constantly accelerating at the edges where its two poles are located (remember rotating objects are constantly accelerating at their edge by definition) would be equivalent to an AC electric citcuit.
+
+*Resistance*{: style="color: rgb(114,0,172)"} is the property of a material to impede the flow of *current*{: style="color: rgb(0, 255, 221)"} and reluctance is the property of a material to impede the propagation of a magnetic field. *Magnetic resistance*{: style="color: rgb(114,0,172)"} is closely related to reluctance, at least when represented as a complex number which we will calculate later on. Low reluctance, coupled with high electrical resistivity, gives us low *magnetic resistance*{: style="color: rgb(114,0,172)"}, however reluctance is a complex value and varies with frequency. Since energy isn't dissipated when a static magnetic field is applied, and thus a static magnetic field does not represent current flow in a magnetic circuit. When a changing magnetic field is applied *magnetic resistance*{: style="color: rgb(114,0,172)"} does dissipate energy fom magnetic field, so it is functionally equivalent with regard to its ability to do work just as a resistor would be in an electrical circuit. Because of this distinction even copper wires which tend to have relatively low *resistance*{: style="color: rgb(114,0,172)"} but high reluctance would need to be replaced with iron wires that have a higher *electrical resistance*{: style="color: rgb(114,0,172)"} but a very low reluctance. So in the end the dual of an electric circuit creates a magnetic circuit that really doesn't look much like what we think of as a circuit at all, but functionally, and in terms of its ability to do work, it will be equivalent.
+
+Even though in a magnetic circuit the units for *voltage*{: style="color: rgb(181, 181, 98)"} and *current*{: style="color: rgb(0, 255, 221)"} get swapped this is very different than the *voltage*{: style="color: rgb(181, 181, 98)"}-*current*{: style="color: rgb(0, 255, 221)"} dual under parallel-series transformation. In this case we aren't actually swapping the arrangement of components but rather *voltage*{: style="color: rgb(181, 181, 98)"} and *current*{: style="color: rgb(0, 255, 221)"} become swapped in place and are represented by entirely different forces, namely those caused by the magnetic field. In doing so the transform is no longer a Series-parallel, the transform is called the capacitance-permeance transform, which we will explain later on.
+
+Keep in mind there are actually two types of magnetic duals, both of which are refered to as a magnetic circuit, and they tend to be a bit different. The type we are describing here is an equivalent-work dual in the sense that if you have an electric circuit that does work, then its magnetic dual as described here will also be doing the same amount of work. This is called the gyrator-capacitor model or less commonly the capacitor-*permeance*{: style="color: rgb(255, 127, 0)"} model for a magnetic circuit. There is another type of magnetic circuit dual which is more often described but does not preserve work-equivalence, that is called the *resistance*{: style="color: rgb(114,0,172)"}-reluctance model.
+
+### Equivalence
+
+First let's start with an illustration to show how in a magnetic circuit the magnetic field can propagate through an iron wire in much the same way an electric field propagates through a copper wire.
+
+![](/images/magnetic-simple.png)
+
+Here we see a permanent bar magnet at the top of each segment and a compass at the bottom. Assume that the distance between the bar magnetic at the top and the compass at the bottom is significant such that the without the iron wire to propagate the magnetic field around the outside, then the bar magnet would have no effect on the compass. We see that by adding the iron wire to propagate the magnetic field we can produce a similar magnetic field at the far end where the compass is at.
+
+Now in this image the bar magnet in each frame is intended to illustrate a stationary magnet. As such under ordinary conditions the magnet can not do any actual work, the compass will remain in its fixed position. This would be similar to an ordinary electric circuit with a *voltage*{: style="color: rgb(181, 181, 98)"} applied and no *current*{: style="color: rgb(0, 255, 221)"} flowing, with a *volt*{: style="color: rgb(181, 181, 98)"} meter attached in place of the compass. This is not intended to represent the circuit dual of the above but only a demonstration of how magnetic flux propagates through a magnetic conductor in much the same way electric fields propagate through an electric wire.
+
+![](/images/electric-simple.png)
+
+Before we show actual examples of circuit duals lets cover some of the relevant properties of an electric circuit and their dual in a magnetic circuit.
+
+<table border="1" style="text-align: center;">
+    <tr>
+        <th colspan="3" style="text-align: center;">Magnetic</th>
+        <th></th>
+        <th colspan="3" style="text-align: center;">Electric</th>
+    </tr>
+    <tr>
+        <th style="text-align: center;">Name</th>
+        <th style="text-align: center;">Symbol</th>
+        <th style="text-align: center;">Units</th>
+        <th style="text-align: center;"></th>
+        <th style="text-align: center;">Name</th>
+        <th style="text-align: center;">Symbol</th>
+        <th style="text-align: center;">Units</th>
+    </tr>
+    <tr>
+        <td>Magnetomotive force (MMF)</td>
+        <td>\(\color{voltage}\mathcal{F}\color{normal} = \color{voltage}\int \mathbf{H}\cdot\operatorname{d}\mathbf{l}\color{normal} \)</td>
+        <td>ampere</td>
+        <td></td>
+        <td>Electromotive force (EMF)</td>
+        <td>\( \color{voltage}V\color{normal} = \color{voltage}\int \mathbf{E}\cdot\operatorname{d}\mathbf{l}\color{normal} \)</td>
+        <td>volt</td>
+    </tr>
+    <tr>
+        <td>Magnetic field</td>
+        <td>H</td>
+        <td>ampere/meter = newton/weber</td>
+        <td></td>
+        <td>Electric field</td>
+        <td>E</td>
+        <td>volt/meter = newton/coulomb</td>
+    </tr>
+    <tr>
+        <td>Magnetic flux</td>
+        <td>\(\Phi\)</td>
+        <td>weber</td>
+        <td></td>
+        <td>Electric charge</td>
+        <td>Q</td>
+        <td>Coulomb</td>
+    </tr>
+    <tr>
+        <td>Magnetic Current</td>
+        <td>\( \color{current}\dot \Phi\color{normal} = \color{current}\frac{d\Phi}{dt}\color{normal} \)</td>
+        <td>weber/second = volt</td>
+        <td></td>
+        <td>Current</td>
+        <td>\( \color{current}I\color{normal} \)</td>
+        <td>coulomb/second = ampere</td>
+    </tr>
+    <tr>
+        <td>Magnetic impedance</td>
+        <td>\( \color{impedance}\mathcal{Z}(\omega)\color{normal} = \color{impedance}\frac{\mathcal{F}(\omega)}{\dot \Phi(\omega)}\color{normal} \)</td>
+        <td>1/ohm = mho = siemens</td>
+        <td></td>
+        <td>Impedance</td>
+        <td>\( \color{impedance}Z(\omega)\color{normal} = \color{impedance}\frac{V(\omega)}{I(\omega)}\color{normal} \)</td>
+        <td>ohm</td>
+    </tr>
+    <tr>
+        <td>Magnetic resistance</td>
+        <td>\( \color{resistance}\mathcal{R}\color{normal} =  \color{resistance}\operatorname{Re}(\mathcal{Z}(\omega))\color{normal} \)</td>
+        <td>1/ohm = mho = siemens</td>
+        <td></td>
+        <td>Resistance</td>
+        <td>\( \color{resistance}R\color{normal} =  \color{resistance}\operatorname{Re}(Z(\omega))\color{normal} \)</td>
+        <td>ohm</td>
+    </tr>
+    <tr>
+        <td>Magnetic reactance</td>
+        <td>\( \color{reactance}\mathcal{X}\color{normal} =  \color{reactance}\operatorname{Im}(\mathcal{Z}(\omega))\color{normal} \)</td>
+        <td>1/ohm = mho = siemens</td>
+        <td></td>
+        <td>Reactance</td>
+        <td>\( \color{reactance}X\color{normal} =  \color{reactance}\operatorname{Im}(Z(\omega))\color{normal} \)</td>
+        <td>ohm</td>
+    </tr>
+    <tr>
+        <td>Magnetic admittance</td>
+        <td>\( \mathcal {Y}(\omega)=\frac{\color{current}\dot \Phi(\omega)\color{normal}}{\color{voltage}\mathcal{F}(\omega)\color{normal}}\)</td>
+        <td>ohm</td>
+        <td></td>
+        <td>Admittance</td>
+        <td>\( Y(\omega)=\frac{\color{current}I(\omega)\color{normal}}{\color{voltage}\mathcal{E}(\omega)\color{normal}} \)</td>
+        <td>1/ohm = mho = siemens</td>
+    </tr>
+    <tr>
+        <td>Magnetic conductance</td>
+        <td>\( \mathcal{G} =  \operatorname{Re}(\mathcal{Y}(\omega)) \)</td>
+        <td>ohm</td>
+        <td></td>
+        <td>Electric conductance</td>
+        <td>\( G =  \operatorname{Re}(Y(\omega)) \)</td>
+        <td>1/ohm = mho = siemens</td>
+    </tr>
+    <tr>
+        <td>Magnetic susceptance</td>
+        <td>\( \mathcal{B} =  \operatorname{Im}(\mathcal{Y}(\omega)) \)</td>
+        <td>ohm</td>
+        <td></td>
+        <td>Electric susceptance</td>
+        <td>\( B =  \operatorname{Im}(Y(\omega)) \)</td>
+        <td>1/ohm = mho = siemens</td>
+    </tr>
+    <tr>
+        <td>Magnetic inductance</td>
+        <td>\( \color{inductance}\mathcal{L}\color{normal} = \color{inductance}\frac{\mathcal{X}(\omega)}{\omega}\color{normal} \)</td>
+        <td>Farad</td>
+        <td></td>
+        <td>Inductance</td>
+        <td>\( \color{inductance}L\color{normal} = \color{inductance}\frac{X(\omega)}{\omega}\color{normal} \)</td>
+        <td>Henry</td>
+    </tr>
+    <tr>
+        <td>Permeance / magnetic capacitance</td>
+        <td>\( \color{capacitance}\mathcal{C}\color{normal} = \color{capacitance}\frac{\mathcal{B}(\omega)}{\omega}\color{normal} \)</td>
+        <td>Henry</td>
+        <td></td>
+        <td>Capacitance</td>
+        <td>\( \color{capacitance}C\color{normal} = \color{capacitance}\frac{B(\omega)}{\omega}\color{normal} \)</td>
+        <td>Farad</td>
+    </tr>
+    <tr>
+        <td>Power</td>
+        <td>\( P = \color{voltage}\mathcal{F}\color{normal} \cdot \color{current}\bar{\dot \Phi}\color{normal} \)</td>
+        <td>Watts = Joule/second</td>
+        <td></td>
+        <td>Power</td>
+        <td>\( P = \color{voltage}V\color{normal} \cdot \color{current}\bar{I}\color{normal} \)</td>
+        <td>Watts = Joule/second</td>
+    </tr>
+</table>
+
+Ohms law also has its dual for use in a magnetic circuit and it is called Hopkinson's law and is defined in a similar way as Ohm's law except by simply substituting our duals for each property as noted in the above table[^magmodel].
+
+$$ \color{voltage}\mathcal{F}\color{normal} = \color{current}\frac{d \Phi}{dt}\color{normal} \cdot \color{impedance}\mathcal{Z}\color{normal} $$
+
+Which is sometimes simplified to just the following.
+
+$$ \color{voltage}\mathcal{F}\color{normal} = \color{current}{\dot \Phi}\color{normal} \cdot \color{impedance}\mathcal{Z}\color{normal} $$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{voltage}\mathcal{F}\color{normal}\\)* is the magnetomotive force, also called *magnetic voltage*{: style="color: rgb(181, 181, 98)"}, and is in ampere,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{current}\frac{d \Phi}{dt}\color{normal}\\)* or \\(\color{current}{\dot \Phi}\color{normal}\\) is the rate of change of the magnetic flux also called the *magnetic current*{: style="color: rgb(0, 255, 221)"}, measured in volts, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{impedance}\mathcal{Z}\color{normal}\\)* is the *magnetic impedance*{: style="color: rgb(18, 110, 213)"}, which is measured in siemens, the reciprocal unit of the ohm.
+
+As long as these equivalences are kept in mind then we can easily calculate the power of our magnetic circuit in the same way we would an electric circuit. Since this model is work-equivalent a magnetic circuit which is the dual of an electric circuit will always have the same power per component, at least when we represent the components as ideal components. Since power is a measure of the rate at which work is being done we likewise will always have the same work being done by these two circuit duals. This is defined by Joule's Law which in a magnetic circuit is as follows[^magmodel].
+
+$$ P = \color{voltage}\mathcal{F}\color{normal} \cdot \bar{\color{current}\dot \Phi\color{normal}} $$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(P\\)* is the power in watts,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{voltage}\mathcal{F}\color{normal}\\)* is the *MMF*{: style="color: rgb(181, 181, 98)"}. in ampere, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\bar{\color{current}\dot \Phi\color{normal}}\\)* is the conjugate of the *magnetic current*{: style="color: rgb(0, 255, 221)"}, in volts.
+
+Of course you only need to take the conjugate when dealing with complex numbers in the frequency domain, in the time domain where we use real numbers the conjugate of a real number is always itself, so this can be ignored. Keep in mind in the frequency domain these values must be in RMS form and not absolute magnitudes.
+
+One other minor consideration here is that a magnetic dual circuit will have magnetic field lines that are perpendicular to the orientation of magnetic fields in its electric dual. Similarly the magnetic field lines in the magnetic circuit will be parallel to the electric field lines in the electric circuit. For example the magnetic field lines which surround the wires in a magnetic circuit run parallel and along the wires unlike in an electric circuit where they form concentric circles around the wires.
+
+### Magnetic DC and AC Current
+
+When we talk about magnetic DC or AC *current*{: style="color: rgb(0, 255, 221)"} things get a bit confusing. In practice most authors would simply avoid these terms all together, and for good reason. But as should be obvious at this point every concept in our electric circuit model has a dual in the magnetic circuit model, so it is worth touching on this.
+
+The reason it is a bit misleading is because in an electric circuit a DC *current*{: style="color: rgb(0, 255, 221)"} implies electrons are moving in a single direction at a constant rate, the electrons never speed up or slow down. However remember that in a magnetic circuit *current*{: style="color: rgb(0, 255, 221)"} is defined as the rate of change of flux, \\(\color{current}\dot{\Phi}\color{normal} = \color{current}\frac{d\Phi}{dt}\color{normal}\\). This means the dual of a DC *current*{: style="color: rgb(0, 255, 221)"} from an electric circuit would be a constantly increasing (or decreasing) flux, \\(\Phi\\), in a magnetic circuit. Such an effect could be produced if the source of the magnetic field feeding into our magnetic circuit happened to be an ideal *voltage*{: style="color: rgb(181, 181, 98)"} source connected to an ideal inductor. As you know as an inductor decreases its *impedance*{: style="color: rgb(18, 110, 213)"} in the time-domain as it charges, therefore in order to maintain a constant *voltage*{: style="color: rgb(181, 181, 98)"} across an inductor the *current*{: style="color: rgb(0, 255, 221)"} through the inductor would have to increase at a constant rate, thus resulting in a constant rate of increase in the magnetic flux it produces.
+
+While in a theoretical context where we are modeling a magnetic circuit with ideal components this sense of a DC circuit works just fine. However in the real world parasitic *resistance*{: style="color: rgb(114,0,172)"} would quickly overwhelm the ever increasing *current*{: style="color: rgb(0, 255, 221)"} and make any magnetic DC *current*{: style="color: rgb(0, 255, 221)"} that is sustained for an appreciable length of time impractical. So while we can talk about magnetic DC *currents*{: style="color: rgb(0, 255, 221)"} as a way of better understanding the duality, in practice, they're not something we are likely to employ for any length of time as we we would with DC in an electric circuit.
+
+On the other hand AC magnetic circuits are perfectly fine and in fact the norm. If the same *voltage*{: style="color: rgb(181, 181, 98)"} source combined with an inductor was used as the power source but the *voltage*{: style="color: rgb(181, 181, 98)"} source was made into a sinusoidal AC *voltage*{: style="color: rgb(181, 181, 98)"} instead then the resulting changing magnetic flux would represent an AC magnetic circuit. This would also be equivalent to a rotating magnet with a constant angular velocity in place of the inductor and *voltage*{: style="color: rgb(181, 181, 98)"} source.
+
+### The Magnetic Capacitor
+
+Much as an electric capacitor is a component which acts as a reservoir able to to store energy in the form of an electric field or convert that stored energy back into *current*{: style="color: rgb(0, 255, 221)"} in an electric circuit, a magnetic capacitor is a component of a magnetic circuit that acts as a reservoir for energy in the form of a magnetic field. Similarly an electric capacitor is made of two electrically conductive plates with a material in between them which has high *permittivity*{: style="color: rgb(255,0,0)"} and high *resistance*{: style="color: rgb(114,0,172)"} a good magnetic capacitor would consist of two plates made of material with high magnetic conductivity with a material between them which has high *permeability*{: style="color: rgb(0,255,0)"} and a low *magnetic resistance*{: style="color: rgb(114,0,172)"}, which we will cover in the next section. Remember as we pointed out in our table of duals above, *permeability*{: style="color: rgb(0,255,0)"} is to the magnetic field what *permittivity*{: style="color: rgb(255,0,0)"} is to the electric field, and *electric resistance*{: style="color: rgb(114,0,172)"} has the reciprocal units of *magnetic resistance*{: style="color: rgb(114,0,172)"}. We cover the relationship between *electrical resistance*{: style="color: rgb(114,0,172)"} and *magnetic resistance*{: style="color: rgb(114,0,172)"} in more detail in the next section but for now just keep in mind that higher *electrical resistance*{: style="color: rgb(114,0,172)"} of a material results in lower *magnetic resistance*{: style="color: rgb(114,0,172)"} for that same material. As such a good magnetic capacitor will usually be made of a material with high *electrical resistance*{: style="color: rgb(114,0,172)"}.
+
+In practice since the wires that connect the components in a magnetic circuit tend to have low *magnetic resistance*{: style="color: rgb(114,0,172)"} by design, usually made of iron ferrite, it is typical that the plates of a magnetic capacitor are made of the same material as that which is filling the space between the plates, where you would normally expect a dielectric to be in an electric capacitor. As such a magnetic capacitor is nothing more than a block of material usually of the same construction as your magnetic wires, and there are effectively no actual plates of any kind, just the surface at each end of the block. None the less the surface area of the plane at each end of the block of material determines the *magnetic capacitance*{: style="color: rgb(255, 127, 0)"} in much the same way the surface area of the plates in an electric capacitor would, that is, the larger the surface area the greater the *capacitance*{: style="color: rgb(255, 127, 0)"} in both the electric and magnetic duals of a capacitor. Similarly in much the same way the distance between the two plates lowers the *capacitance*{: style="color: rgb(255, 127, 0)"} in an electric capacitor, the length of the block of material making up our magnetic capacitor also lowers the *magnetic capacitance*{: style="color: rgb(255, 127, 0)"} of our magnetic capacitor.
+
+This contrast may seem odd at first but when you think about it a bit further it actually makes a lot of sense. In an electric circuit an inductor is really just a long wire, we tend to coil them up to save some space or help direct the magnetic field, but a copper wire is just an inductor. The only real difference between an inductor and a wire is the geometry, and the specific geometry or a wire, particularly if it is very long, along with the frequency traveling through it, determines if the inductive effects are significant or not. In electric circuits when an ordinary wire happens to be long enough where the inductive effects become significant we would call that *parasitic inductance*{: style="color: rgb(255,0,255)"}. Likewise if a magnetic wire has dimensions that are sufficient to cause it to have a significant and unwanted magnetic capacitance that would simply be *parasitic capacitance*{: style="color: rgb(255, 127, 0)"} for a magnetic circuit. So its really not that odd at all that every magnetic wire is effectively a magnetic capacitor since in the electric domain every electric wire is effectively an inductor.
+
+The fact that a magnetic capacitor is just a block of iron or iron ferrite actually makes a lot of sense when you think about it, afterall in a ferrite core inductor the core's purpose is to act as a reservoir to hold the magnetic field in a smaller space than what would be needed for an air core. So even in an electric circuit iron ferrite acts as a magnetic field reservoir.
+
+Note that *magnetic capacitance*{: style="color: rgb(255, 127, 0)"} is just another word for **permeance**{: style="color: rgb(255, 127, 0)"}, the two terms can be used interchangeably. Likewise *permeance*{: style="color: rgb(255, 127, 0)"} is also simply the reciprocal of **reluctance**. Usually when modeling capacitors in either an electric circuit or magnetic circuit we treat the capacitors as ideal components that experience no resistive loss; resistive loss in a capacitor is called ESR, effective series *resistance*{: style="color: rgb(114,0,172)"}. However in the real world if we wish to model a real electrical or magnetic capacitor we must measure their respective *capacitance*{: style="color: rgb(255, 127, 0)"} as complex values instead, which enables us to calculate the ESR. For the same reason we also use *complex permittivity*{: style="color: rgb(255,0,0)"} or *complex permeability*{: style="color: rgb(0,255,0)"} when calculating the *capacitance*{: style="color: rgb(255, 127, 0)"}/*permeance*{: style="color: rgb(255, 127, 0)"} for the same reason, at least when we aren't dealing with an ideal model. We cover all this in more detail in the section on *magnetic resistance*{: style="color: rgb(114,0,172)"}, but for now just keep in mind *magnetic capacitance*{: style="color: rgb(255, 127, 0)"} can be represented as a complex value if we wish to determine the ESR. Many of you who are used to doing models of electric circuits likely only ever considered capacitors as ideal components and thus are only familiar with real number values for *capacitance*{: style="color: rgb(255, 127, 0)"}; the same ideal model approach can be used here. If considering a magnetic capacitor as ideal then it is usually acceptable to simply represent its *capacitance*{: style="color: rgb(255, 127, 0)"} as a real number as we would with analysis of electric circuits.
+
+The following is the equation for determining the **complex magnetic capacitance**{: style="color: rgb(255, 127, 0)"} of a component[^theoryofcircuits].
+
+$$ \color{capacitance}\mathcal{C}_{_{real}}\color{normal} = \color{capacitance}\mu\cdot\frac{S}{L}\color{normal} \label{realcap}$$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{capacitance}\mathcal{C}_{_{real}}\color{normal}\\)* is the *complex magnetic capacitance*{: style="color: rgb(255, 127, 0)"}, also called *permeance*{: style="color: rgb(255, 127, 0)"}, the unit of which is the Henry,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{permeability}\mu\color{normal}\\)* is the complex[^theoryofcircuits] *permeability*{: style="color: rgb(0,255,0)"} of the material at the given frequency,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(S\\)* is the cross sectional surface area of the material, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(L\\)* is the length of the material.
+
+If we wish to calculate the real-value *magnetic capacitance*{: style="color: rgb(255, 127, 0)"} of an idealized capacitor the equation is the same except \\(\color{permeability}\mu\color{normal}\\) becomes a real number; specifically it looses its real component and only represents the magnitude of the *imaginary*{: style="color: rgb(251,0,29)"} part of the complex *permeability*{: style="color: rgb(0,255,0)"}[^magmodel]. The specific equation would then look like the following.
+
+$$ \color{capacitance}\mathcal{C}_{_{ideal}}\color{normal} = \color{capacitance}\mu'' \frac{S}{L}\color{normal} \label{idealcap}$$
+
+where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{capacitance}\mathcal{C}_{_{ideal}}\color{normal}\\)* is the idealized *real-value magnetic capacitance*{: style="color: rgb(255, 127, 0)"}, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\mu^{\prime\prime}\\)* is the *imaginary*{: style="color: rgb(251,0,29)"} component of the complex[^theoryofcircuits] *permeability*{: style="color: rgb(0,255,0)"} of the material at the given frequency.
+
+Specifically \\(\mu^{\prime\prime}\\) relates to the complex *permeability*{: style="color: rgb(0,255,0)"} as follows.
+
+$$ \color{permeability}\mu\color{normal} = \color{permeability}\mu' - j\mu''\color{normal} $$
+
+The following diagram shows an example demonstrating the above equation for a block of material.
+
+![](/images/magnetic-capacitor.png)
+
+Keep in mind depending on if you use the *complex capacitance*{: style="color: rgb(255, 127, 0)"} equation above \\(\eqref{realcap}\\), or the idealized form \\(\eqref{idealcap}\\), would affect how you construct *reactance*{: style="color: rgb(45,177,93)"} and *impedance*{: style="color: rgb(18, 110, 213)"} equations. The ideal form drops the *imaginary*{: style="color: rgb(251,0,29)"} number and as such is always positive, so when constructing the *impedance*{: style="color: rgb(18, 110, 213)"} you must explicitly add the *imaginary*{: style="color: rgb(251,0,29)"} number back in, for example. This is the approach most people are used to since capacitors are usually modeled as ideal. However in the real-world *capacitance*{: style="color: rgb(255, 127, 0)"} equation the *imaginary*{: style="color: rgb(251,0,29)"} number is already included in the complex value \\(\color{permeability}\mu\color{normal}\\) therefore when using that form of the equation to construct your *impedance*{: style="color: rgb(18, 110, 213)"} values you do not need to add the *imaginary*{: style="color: rgb(251,0,29)"} number back in, however when using it to construct the *reactance*{: style="color: rgb(45,177,93)"} value you must make sure to take the *imaginary*{: style="color: rgb(251,0,29)"} part, which will be negative, and drop the \\(\color{imaginary}j\color{normal}\\). Whichever approach you use, be sure to be consistent. The following demonstrates this.
+
+$$ \color{impedance}\mathcal{Z}\color{normal} = \frac{1}{\omega\color{capacitance}\mathcal{C_{_{ideal}}}\color{imaginary}j\color{normal}} = \frac{1}{\omega\color{capacitance}\mathcal{C_{_{real}}}\color{normal}} $$
+
+$$ \color{reactance}\mathcal{X}\color{normal} = -\frac{1}{\omega\color{capacitance}\mathcal{C_{_{ideal}}}\color{normal}} = \operatorname{Im}\left(\frac{1}{\omega\color{capacitance}\mathcal{C_{_{real}}}\color{normal}}\right) $$
+
+### The Magnetic Inductor and Gyrator
+
+As discussed in the previous section in an electric circuit a capacitor is a component which acts as a reservoir for an electric field where it can store energy from the circuit as well as deliver that energy back into the circuit. Similarly in an electric circuit an inductor is a component which acts as a reservoir for a magnetic field which can store or deliver energy from, and to, the circuit. In addition a capacitor in an electrical circuit is storing the type of field, the electric field, being worked within the wires of an electrical circuit, this should be obvious as an *electric voltage*{: style="color: rgb(181, 181, 98)"} between two points is the measure of the difference in the strength of the electric field between those points, and *electric current*{: style="color: rgb(0, 255, 221)"} is the movement of electrons, an electric charge carrier. This is why we can measure the *voltage*{: style="color: rgb(181, 181, 98)"} across a capacitor and use that to indicate how full the capacitor happens to be. Likewise as we recently covered the magnetic capacitor stores a magnetic field instead, which is similarly the type of field inherent to a magnetic circuit. This is contrasted with an electric inductor; in an electric circuit, an inductor stores energy in the form of a magnetic field, which is not the type of field propagating through an electric circuit's copper wires, outside of parasitic effects or inductors anyway, though even in that case the magnetic field largely manifests outside of the copper wires themselves. So in a sense the purpose of an inductor in an electric circuit is to convert the intrinsic electric field energy of the circuit into magnetic field energy, and then store it. In the case of an electric inductor this is stored in the ferrite core, in the case of an air core inductor it is stored in the space around the inductor. This analogy also applies when we talk about magnetic inductors, that is, their purpose is to convert the intrinsic magnetic field energy of a magnetic circuit into electrical field energy and store this energy, or to deliver that stored energy back into the magnetic circuit.
+
+One thing that may be obvious from the description I just gave is that an electric inductor, like its magnetic inductor counterpart, is a component that is capable of converting electric energy into magnetic energy, and its magnetic inductor counterpart must reverse this process and be able convert magnetic energy into electric energy. However we already know that an electric inductor works in both directions; just as the electric energy of the circuit can charge it, converting it to magnetic energy stored in its ferrite core, it can also take that stored magnetic energy in the ferrite core and deliver it back into the circuit in the form of electric energy. In magnetic circuits a component that is able to convert electric energy into magnetic energy, and magnetic energy into electric energy is called a **gyrator**, and it's really no different than what we think of as an electric inductor already, just working in the opposite direction. Keep in mind a gyrator is not the magnetic dual of an electric inductor, a magnetic inductor, but it is essential in getting there, which we will do in a moment, first let me finish explaining what a gyrator is.
+
+Again, a gyrator is nothing more than an electrical inductor wrapped around a magnetic conductor of some type, usually a ferrite core or a piece of iron. Despite this, because it is viewed a bit differently than we tend to view an inductor used an electric circuit it is given a special name, and even its own circuit symbol. It is best to view a gyrator as a component that converts between electrical and magnetic energy. The following is a diagram that demonstrates this.
+
+![](/images/gyrator.png)
+
+In the above diagram we see the physical gyrator on the left hand side as an inductor wrapping around a ferrite core, with electrical leads protruding to the left, and then the ferrite core becomes the wires of the magnetic circuit. The leads to the magnetic circuit extend to the right of the diagram.  On the right hand side of the diagram we see what the schematic symbol for a gyrator looks like in a magnetic circuit schematic.
+
+One interesting point is that your instinct might be to think of the electrical *current*{: style="color: rgb(0, 255, 221)"} through the inductor as being translated to the *magnetic current*{: style="color: rgb(0, 255, 221)"} in the core, but in fact that isn't the case. If you recall from our table above relating the duals in a magnetic circuit to those in an electric circuit you can see that the dual for the EMF (Electromotive Force), measured in *volts*{: style="color: rgb(181, 181, 98)"}, of an electric circuit is the MMF (Magnetomotive Force), measured in ampere[^magmodel][^multidomain], in a magnetic circuit; likewise the dual for the *electric current*{: style="color: rgb(0, 255, 221)"}, measured in ampere, is the *magnetic current*{: style="color: rgb(0, 255, 221)"}, measured in *volts*{: style="color: rgb(181, 181, 98)"}, and is equivalent to the rate of change of the magnetic flux in the circuit, \\(\dot{\Phi}\\)[^multidomain][^magwithinelec]. This may seem odd but it actually makes some sense when you consider the context of a gyrator. Consider Faraday's law which relates the rate of change of the magnetic flux of an inductor with the *voltage*{: style="color: rgb(181, 181, 98)"} across it.
+
+$$ \color{voltage}V\color{normal} = N \cdot \color{current}\frac{d\Phi}{dt}\color{normal} = N \cdot \color{current}\dot{\Phi}\color{normal}$$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{voltage}V\color{normal}\\)* is the *EMF*{: style="color: rgb(181, 181, 98)"} (*Electromotive Force*{: style="color: rgb(181, 181, 98)"}) in volts,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(N\\)* is the number of turns of the inductor, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{current}\frac{d\Phi}{dt}\color{normal}\\)* and *\\(\color{current}\dot\Phi\\\color{normal})* are the rate of change of the magnetic flux, also called the *magnetic current*{: style="color: rgb(0, 255, 221)"}, in volts.
+
+It should be clear from this relationship that the *magnetic current*{: style="color: rgb(0, 255, 221)"}, \\(\color{current}\dot\Phi\color{normal}\\), is simply the *voltage*{: style="color: rgb(181, 181, 98)"} across the inductor divided by the number of turns in the inductor.
+
+$$ \color{current}\dot\Phi\color{normal} = \frac{\color{voltage}V\color{normal}}{N}$$
+
+Since \\(N\\) is a dimensionless unit we can presume that \\(\color{current}\dot\Phi\color{normal}\\) uses the same units as \\(\color{voltage}V\color{normal}\\), volts. Similarly the *Magnetomotive Force*{: style="color: rgb(181, 181, 98)"}, *MMF*{: style="color: rgb(181, 181, 98)"}, of an inductor is defined as the *current*{: style="color: rgb(0, 255, 221)"} through the inductor multiplied by the number of turns of the inductor[^magmodel].
+
+$$ \color{voltage}\mathcal{F}\color{normal} = N \cdot \color{current}I\color{normal} $$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{voltage}\mathcal{F}\color{normal}\\)* is the *MMF*{: style="color: rgb(181, 181, 98)"} (*Magnetomotive Force*{: style="color: rgb(181, 181, 98)"}) in ampere,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(N\\)* is the number of turns of the inductor, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{current}I\color{normal}\\)* is the *current*{: style="color: rgb(0, 255, 221)"} through the inductor in ampere.
+
+One problem with the standard diagram for a gyrator as shown above is it doesn't actually indicate what side is the electric side housing the leads into the electric inductor, and what side is the magnetic side. This is somewhat intentional as it is intended to be a generic component acting as a blackbox which inverts *voltage*{: style="color: rgb(181, 181, 98)"} and *current*{: style="color: rgb(0, 255, 221)"} from wide side onto the inverse on the other. Since in the real world the distinction between the two halves of a gyrator is important lets use the following block diagram for a gyrator instead so I can explicitly illustrate the electric side, on the left in this block diagram, and the magnetic side, on the right.
+
+![](/images/gyrator-block.png)
+
+Here is the cool part, if we put two gyrators in series connected by the magnetic side, and optionally adjust the number of turns in the inductor, we have a plain old electric transformer with an iron or iron ferrite core, such as the following.
+
+![](/images/gyrator-transformer-electric.png)
+
+Likewise if we connect two gyrators in series but this time connect them on their electric side, again optionally carrying the number of turns, we would have the magnetic circuit dual of a transformer.
+
+![](/images/gyrator-transformer-magnetic.png)
+
+So by now you might be wondering how all this ties into the magnetic circuit dual of an inductor, the magnetic inductor. Well as described in the introduction to this section a magnetic inductor is a component that converts the magnetic energy in a magnetic circuit into an electric field and stores it, and is able to deliver that energy back into the circuit. To do that we simply use a gyrator to convert the magnetic energy into electric, and then use an electric capacitor hooked up to the leads in order to act as the reservoir for the energy stored as an electric field. The following diagram would illustrate a magnetic inductor.
+
+![](/images/magnetic-inductor.png)
+
+### Magnetic Impedance, Resistance, and Reactance
+
+*Magnetic resistance*{: style="color: rgb(114,0,172)"} is the dual of *electrical resistance*{: style="color: rgb(114,0,172)"}; just as *electrical resistance*{: style="color: rgb(114,0,172)"} impedes the flow of *electric current*{: style="color: rgb(0, 255, 221)"} by converting its energy into heat, *magnetic resistance*{: style="color: rgb(114,0,172)"} impedes the flow of a changing magnetic field, *magnetic current*{: style="color: rgb(0, 255, 221)"}, by converting some portion of that energy into heat.
+
+In the *resistance*{: style="color: rgb(114,0,172)"}-reluctance Model of a magnetic circuit, which is not the model we have been discussing, the dual of *resistance*{: style="color: rgb(114,0,172)"} is simply reluctance. Reluctance does change with frequency, and can attenuate the propagation of magnetic flux through it. Materiales with high reluctance will show the magnetic flux declining at a greater rate due to distance. However this is not necceseraly due to energy dissipation of the magnetic field itself, particularly when dealing with a static magnetic field, no energy is lost due to reluctance. Reluctance of a material will effect a static magnetic field such as a permanent magnet and not just changing fields. Since it doesn't necceseraly reduce the quantity of energy in the system, then by definition, it is not *resistance*{: style="color: rgb(114,0,172)"}.
+
+In the model for magnetic circuits we are discussing, the capacitor-*permeance*{: style="color: rgb(255, 127, 0)"} model, the dual of *electrical resistance*{: style="color: rgb(114,0,172)"} is called *magnetic resistance*{: style="color: rgb(114,0,172)"}. Bear in mind that in this particular model both *magnetic current*{: style="color: rgb(0, 255, 221)"} and *magnetic resistance*{: style="color: rgb(114,0,172)"} mean something different than in the *resistance*{: style="color: rgb(114,0,172)"}-reluctance model. In the *resistance*{: style="color: rgb(114,0,172)"}-reluctance model *magnetic current*{: style="color: rgb(0, 255, 221)"} is the magnetic field itself, and as such a static field, such as with a permanent magnet, constantly has *current*{: style="color: rgb(0, 255, 221)"}, and reluctance impedes that *current*{: style="color: rgb(0, 255, 221)"}. However as mentioned earlier because that model is not work-equivalent to an electric circuit the presence of *current*{: style="color: rgb(0, 255, 221)"} or *resistance*{: style="color: rgb(114,0,172)"} in that case does not imply any loss of energy as we normally would think of when we talk about a *current*{: style="color: rgb(0, 255, 221)"} relative to *resistance*{: style="color: rgb(114,0,172)"}. This is the reason the *resistance*{: style="color: rgb(114,0,172)"}-reluctance Model is rarely used, it isn't consistent with the expected meaning of those terms. However in the capacitor-*permeance*{: style="color: rgb(255, 127, 0)"} model we have been discussing the *current*{: style="color: rgb(0, 255, 221)"} is not the magnetic field but rather the rate of change of the magnetic field, and *resistance*{: style="color: rgb(114,0,172)"} is not reluctance but *magnetic resistance*{: style="color: rgb(114,0,172)"} which is a materials ability to convert a changing magnetic field into heat. This is analogous with dielectric Loss of a capacitor in a changing electric field, which we often see in capacitors and give rise to their ESR, and thus energy loss as heat. In case of *magnetic resistance*{: style="color: rgb(114,0,172)"} it is the same effect but with regards to the magnetic field instead.
+
+Remember from earlier in the section where we discussed magnetic capacitors that we pointed out that a magnetic capacitor is the same as a magnetic wire, a ferrite core usually, with dimenions sufficient enough for the *capacitance*{: style="color: rgb(255, 127, 0)"} to be relevant, and like electric capacitors a magnetic capacitor is designed using materials that ensure it has a low *magnetic resistance*{: style="color: rgb(114,0,172)"}, which implies it will also have a high *electrical resistance*{: style="color: rgb(114,0,172)"}. So the only real difference between a magnetic capacitor and a magnetic wire is that the material and dimensions of a magnetic wire is selected to minimize both *magnetic resistance*{: style="color: rgb(114,0,172)"} and *magnetic capacitance*{: style="color: rgb(255, 127, 0)"}, meanwhile a magnetic capacitor has materials and dimensions selected to minimize *magnetic resistance*{: style="color: rgb(114,0,172)"} but maximize *magnetic capacitance*{: style="color: rgb(255, 127, 0)"}. In the same sense a magnetic resistor is no different; it is a block of material representing the component where the materials and dimensions are selected so as to have the *magnetic resistance*{: style="color: rgb(114,0,172)"} match the intended *resistance*{: style="color: rgb(114,0,172)"} value while minimizing *magnetic capacitance*{: style="color: rgb(255, 127, 0)"}. This is not all that different from an electric resistor in the sense that its materials and dimensions are selected to match a particular *electrical resistance*{: style="color: rgb(114,0,172)"} while minimizing its *electrical inductance*{: style="color: rgb(255,0,255)"}. This is why we dont use long copper wires for resistors, if the wire is long enough it can have the desired *electrical resistance*{: style="color: rgb(114,0,172)"} but its *inductance*{: style="color: rgb(255,0,255)"} would be too high to be useful, so we usually try to design electric resistors to be as short as possible.
+
+Before we can understand *magnetic resistance*{: style="color: rgb(114,0,172)"} I think its important to understand the analogous concept of *electrical resistance*{: style="color: rgb(114,0,172)"} of materials and how it arises at various frequencies, especially since most of the time it is grossly oversimplified and misunderstood even in electrical circuits. Contrary to typical thinking *electrical resistance*{: style="color: rgb(114,0,172)"} isn't simply a static property where materials have inherent *resistance*{: style="color: rgb(114,0,172)"}, although that can sometimes be the case. A resistor for example always has about the same *resistance*{: style="color: rgb(114,0,172)"}, sure it varies a little with heat or other conditions, but for the most part the *resistance*{: style="color: rgb(114,0,172)"} will stay about the same regardless of frequency or other influences. But a resistor is just one very straight forward and simple example of how *electrical resistance*{: style="color: rgb(114,0,172)"} may present in a circuit. In reality *resistance*{: style="color: rgb(114,0,172)"} is a much more generalized idea, *electrical resistance*{: style="color: rgb(114,0,172)"} represents the ability of a material or component to convert *current*{: style="color: rgb(0, 255, 221)"} into energy that escapes the circuit in some way. In the case of a electical resistor it is converting energy from the *electrical current*{: style="color: rgb(0, 255, 221)"}, and thus reducing the flow of *current*{: style="color: rgb(0, 255, 221)"} by doing so, and releasing that energy into the surrounding air in the form of heat. The energy contained in the heat released will be the same quantity of energy as the energy that was removed from the circuit.
+
+When we talk about power in a circuit, more specifically real power, which is the real value component of power when power is represented as a complex number, we are talking about the rate at which a circuit does work. This is another way of saying, in the case of resistors anyway, the rate at which energy in the circuit is converted into heat energy. This definition is the same whether we are talking about magnetic circuits or electric, therefore the real measured *resistance*{: style="color: rgb(114,0,172)"} of a circuit also means the same between between an electric and magnetic circuit, that is, the ability to convert their respect forms of *current*{: style="color: rgb(0, 255, 221)"} into heat. Where the difference between these crops up is in the nuance, in realizing that measured real world *resistance*{: style="color: rgb(114,0,172)"} is not completely determined by circuit *resistance*{: style="color: rgb(114,0,172)"} due to resistivity. Let me give a real world example of this, again, in the simple to understand electrical circuit model. If you have an antenna and that antenna is well tuned to the frequency of the signal in a circuit it will typically be said to have a 50 ohm *impedance*{: style="color: rgb(18, 110, 213)"}, this is a real value *impedance*{: style="color: rgb(18, 110, 213)"}, therefore it is *resistance*{: style="color: rgb(114,0,172)"}, not *reactance*{: style="color: rgb(45,177,93)"}. In other words at that particular frequency it is behaving as if it were a physical 50 ohm resistor. The difference is that while a resistor is doing work that causes heat to be produced the antenna is doing work that causes RF waves to be propagated out into space. But in terms of your instruments if you measure the real *resistance*{: style="color: rgb(114,0,172)"} in the circuit due to the antenna at the given frequency it will have real (not *imaginary*{: style="color: rgb(251,0,29)"}) *resistance*{: style="color: rgb(114,0,172)"}, it will look indistinguishable from a resistor; the same energy is being lost at the same rate as in a resistor but simply as RF energy rather than heat. In other words the circuit has real *resistance*{: style="color: rgb(114,0,172)"} despite the fact that the components itself have 0 resistivity; if you measured resistance using an ohm meter, which measures DC resistance only, it would not be the same. As an important side note, the antenna *would* be distinguishable, however, from a capacitor or inductor with a 50 ohm *impedance*{: style="color: rgb(18, 110, 213)"}. In that case the *impedance*{: style="color: rgb(18, 110, 213)"} of a capacitor or inductor at 50 ohms would be entirely *imaginary*{: style="color: rgb(251,0,29)"}, not real, and as such would not look at all like the antenna or a resistor in our case; we would call this *reactance*{: style="color: rgb(45,177,93)"}, not *resistance*{: style="color: rgb(114,0,172)"}. Because capacitors and inductors have minimal real *resistance*{: style="color: rgb(114,0,172)"} they don't do any work, no energy is released from the circuit, instead the energy is stored in the capacitor or inductor and usually injected back into the circuit at a later point, which is not at all the same thing.
+
+So now that we understand a bit about the nature of real measured *resistance*{: style="color: rgb(114,0,172)"} of a circuit at a given frequency is not the same as the *resistance*{: style="color: rgb(114,0,172)"} of a circuit at DC, or its resistivity, lets try to express how we define that in the electric world using some actual math. This should give us an understanding that we can use to see how this is similar to the same sorts of equations in our magnetic circuit dual. A great example of this in electric circuits is the ESR, equivalent series *resistance*{: style="color: rgb(114,0,172)"}, that arises when we add a capacitor to a circuit that uses a dielectric material other than a vacuum. Bear in mind a capacitor is very similar to an open circuit where the high *resistance*{: style="color: rgb(114,0,172)"} is due to a dielectric rather than air. In this case the ESR arises due to two factors, one is the actual real *resistance*{: style="color: rgb(114,0,172)"} of the material at DC, which tends to be very high, and as such has minimal effect on ESR. The other is due to losses caused by a changing electric field through the dielectric material, it is this part of the real *resistance*{: style="color: rgb(114,0,172)"} which will vary significantly with frequency and as such the ESR of a capacitor also varies significantly with frequency.
+
+Keep in mind that because in a magnetic circuit wires, capacitors, and resistors are all modeled similarly we will find the equations we go over when talking about electrical capacitors will have direct relevance in describing *magnetic resistance*{: style="color: rgb(114,0,172)"}, so just bear with me and this will all make sense by the end.
+
+The loss rate of energy in a material at a particular frequency is called the **loss tangent** it is also called the **dissipation factor**, it is a unitless ratio and is almost always a positive value. A value of infinity indicates that all the energy it takes from the circuit is lost. For example a resistor has a loss tangent that is extremely large at most frequencies since almost all of the energy it consumes is lost as heat. Likewise a perfectly resonant antenna presenting as 50 ohms real *resistance*{: style="color: rgb(114,0,172)"} at a given frequency has a similarly extremely large loss tangent at that given frequency; though unlike the resistor the loss tangent will vary as the frequency changes and the antenna is no longer in tune. Similarly an ideal capacitor or inductor, which by definition would have an ESR of 0, has a loss tangent value of 0 because all the energy consumed by the capacitor or inductor is stored in their respective fields and are not lost to the circuit; at a later point in the AC cycle that energy can, and often is, recovered by injecting that energy back into the circuit as the component discharges. In reality most real world components exhibit a finite, non-zero, loss tangent. In addition there are several types of loss tangent, and more generally energy loss, for any any component, at a given frequency, which combine to give the overall loss tangent. For example there is a loss tangent due to the magnetic field, a loss tangent due to the electric field, and energy loss due to resistivity, which can be measured as DC resistance. In some cases, depending on how deep your analysis is going, each of these loss tangents maybe be broken down further into multiple loss tangents that add up as well, but we wont go that deep here. Typically in many real world applications only one of the two types of loss tangent mentioned is dominant or relevant; for example in an electrical capacitor the majority of the loss is due to the dielectric's interaction with the changing electric field, since that is the dominant field passing through the dielectric. Similarly for an electrical inductor it is mostly the magnetic loss that is dominant, and for an electrical resistor it is mostly loss due to resistivity. However even though only one tend to dominate for each component in reality all three do have some effect in order to add up to the total loss tangent.
+
+As mentioned for an electrical capacitor the dominant loss tangent is the electric loss tangent, however even though the loss due to resistivity is minimal it does have an effect, and that effect becomes significant if the dielectric is not a very good resistor. When we analyze a capacitor we usually consider the combined effect of the electric loss tangent and the resistive loss, which is called the **dielectric loss tangent**. The following is the definition for the dielectric loss tangent[^maxwell]:
+
+$$ \tan{(\delta_d)}  = \frac{\omega\varepsilon'' + \sigma}{\omega\varepsilon'} \label{dieleclosstan}$$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\omega\\)* is the angular frequency of the signal,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\sigma\\)* is the DC conductivity of the material, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\varepsilon'\\)* and *\\(\varepsilon^{\prime\prime}\\)* are components of the complex *permittivity*{: style="color: rgb(255,0,0)"}, \\(\color{permittivity}\varepsilon\color{normal}\\) of the material such that.
+
+$$ \color{permittivity}\varepsilon\color{normal} = \color{permittivity}\varepsilon' - j\varepsilon''\color{normal} $$
+
+As mentioned the dielectric loss tangent present in equation \\(\eqref{dieleclosstan}\\) is the combination of two different types of loss, the loss due to the changing electric field's interaction with the dielectric, this is determined by the complex *permittivity*{: style="color: rgb(255,0,0)"} of a material, and loss due to resistivity, the DC *resistance*{: style="color: rgb(114,0,172)"} loss, which is the result of a dielectric having some finite *resistance*{: style="color: rgb(114,0,172)"}. When the *resistance*{: style="color: rgb(114,0,172)"} of the dielectric approaches infinity, or to put it another way when the conductivity, \\(\sigma\\), of the dielectric material approaches 0, the limit of this will give us the **electric loss tangent**[^maxwell]. Since most dielectrics used in capacitors have low conductivity the electric loss tangent is usually a good approximation in that case.
+
+$$ \tan{(\delta_e)}  = \lim_{\sigma \to 0} \frac{\omega \varepsilon'' + \sigma} {\omega \varepsilon'} \label{diaelectloss} $$
+
+$$ \tan{(\delta_e)}  = \frac{\varepsilon''}{\varepsilon'} \label{eleclosstan} $$
+
+In this context we would call \\(\tan{(\delta_e)}\\) the **electric loss tangent**, while \\(\delta_e\\) we would call the **electric Loss tangent angle**.
+
+The dielectric loss tangent for a component is the result of many different nuanced and complicated effects including, but not limited to, polarization of a dielectric, concentration of *current*{: style="color: rgb(0, 255, 221)"} due to the skin effect, inadvertent dielectric coupling, RF emissions, and DC *resistance*{: style="color: rgb(114,0,172)"}. The result of such complicated interactions is that it can be difficult to predict the loss tangent of a electrical capacitor at a particular frequency. However once the complex *permittivity*{: style="color: rgb(255,0,0)"} and conductance value is known then we can use equation \\(\eqref{dieleclosstan}\\) to calculate a reasonable approximation of the overall loss tangent.
+
+The dielectric loss tangent angle is the angle on the complex plane between the vector representing the *complex impedance*{: style="color: rgb(18, 110, 213)"} of the capacitor at the desired frequency and the negative axis for *reactance*{: style="color: rgb(45,177,93)"}. Remember that the real axis part of *impedance*{: style="color: rgb(18, 110, 213)"} represents real measured *resistance*{: style="color: rgb(114,0,172)"} at a given frequency, which in this case is the ESR, and is different from the DC *resistance*{: style="color: rgb(114,0,172)"}, however it is always less than the DC *resistance*{: style="color: rgb(114,0,172)"}; meanwhile the negative *reactance*{: style="color: rgb(45,177,93)"} part of *impedance*{: style="color: rgb(18, 110, 213)"} represents mostly the ideal *capacitance*{: style="color: rgb(255, 127, 0)"} of our capacitor. We can illustrate this with the following diagram of the complex plane.
+
+![](/images/dielectric-loss-tangent-angle.png)
+
+The angle here is the **dielectric loss tangent angle** specifically, which would be equal to the **electric loss tangent angle** if the dielectric has negligable conductivity. If we were measuring the magnetic loss tangent angle then the angle would be measured relative to the *positive* reactive axis instead. As such any loss tangent angle is always a positive value between 0 and 90 inclusive[^considercap]. From this diagram it should also become obvious that the dielectric loss tangent angle is the ratio of the ESR over the *reactance*{: style="color: rgb(45,177,93)"} as a positive value. If this isn't immediately obvious to you try to remember your geometry classes where the tangent of the angle is defined as the ratio of the opposite side from the angle (ESR) divided by the adjacent side (*reactance*{: style="color: rgb(45,177,93)"}). Therefore we can define the following equation.
+
+$$ \color{impedance}Z\color{normal} = \color{resistance}R_{_{ESR}}\color{normal} + \color{reactance}X\color{imaginary}j\color{normal} $$
+
+$$ \tan{(\delta)} = \frac{\color{resistance}R_{_{ESR}}\color{normal}}{|\color{reactance}X\color{normal}|} \label{losstan}$$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(|\color{reactance}X\color{normal}|\\)* is the positive value of the *impedance's*{: style="color: rgb(18, 110, 213)"} reactive component, it should not include the *imaginary*{: style="color: rgb(251,0,29)"} unit \\(\color{imaginary}j\color{normal}\\).
+
+Notice that in the above equation we did not specify the \\(e\\) subscript, that is because the same equation will work for both the loss tangent of a capacitor or an inductor owing to the fact that each respective version would always take the loss tangent angle relative to either the negative reactive axis or the positive. So this works equally well for either situation.
+
+At this point all we know is the ratio of real *resistance*{: style="color: rgb(114,0,172)"} to *reactance*{: style="color: rgb(45,177,93)"} of a material at the giving frequency, but much like conductivity and resistivity you cant really use this information to define the *impedance*{: style="color: rgb(18, 110, 213)"} or *resistance*{: style="color: rgb(114,0,172)"} of a component; for that you need to know its physical dimensions or its *reactance*{: style="color: rgb(45,177,93)"}. So the loss tangent is a property of the material and at a given frequency is more or less the same regardless of the size of the material, as is the *complex permittivity*{: style="color: rgb(255,0,0)"} and conductivity that define the dielectric loss tangent. Therefore to actually go from this to the *impedance*{: style="color: rgb(18, 110, 213)"} value we need to take a few extra steps.
+
+Lets start by defining the *reactance*{: style="color: rgb(45,177,93)"} of a capacitor relative to its *capacitance*{: style="color: rgb(255, 127, 0)"}.
+
+$$ \color{reactance}X\color{normal} = \color{reactance}-\frac{1}{\omega C_{_{ideal}}}\color{normal} $$
+
+From this we know what we need a capacitor's *reactance*{: style="color: rgb(45,177,93)"} and dielectric loss tangent in order to calculate the ESR as follows.
+
+$$ \color{resistance}R_{_{ESR}}\color{normal} = \left\lvert\color{reactance}-\frac{1}{\omega C_{_{ideal}}}\color{normal}\right\rvert \cdot \tan{(\delta_e)}$$
+
+Since we are trying to cancel out the denominator in equation \\(\eqref{losstan}\\), which is an absolute value, we should also take the absolute value of our *reactance*{: style="color: rgb(45,177,93)"} here. We can also define the ESR in terms of physical dimensions of the capacitor instead with the following equation.
+
+$$ \color{capacitance}C_{_{real}}\color{normal} = \color{permittivity}\varepsilon\color{normal}\frac{A}{D} $$
+
+where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{capacitance}C_{_{real}}\color{normal}\\)* is the *complex capacitance*{: style="color: rgb(255, 127, 0)"}, in farads,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(A\\)* is the area of overlap of the two plates, in square meters,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{permittivity}\varepsilon\color{normal}\\)* is the *complex absolute permittivity*{: style="color: rgb(255,0,0)"} of the dielectric, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(D\\)* is the separation between the plates, in meters.
+
+One important point here, is that when dealing with an ideal capacitor the *complex absolute permittivity*{: style="color: rgb(255,0,0)"}, \\(\color{permittivity}\varepsilon\color{normal}\\), would have a finite *imaginary*{: style="color: rgb(251,0,29)"} component, representing the *reactance*{: style="color: rgb(45,177,93)"}, but the real component would effectively be infinite, representing a *resistance*{: style="color: rgb(114,0,172)"} of 0. The real component would be where the dielectric loss would be represented if it were a finite value. If we used a capacitors real-world *complex absolute permittivity*{: style="color: rgb(255,0,0)"}, this would similarly result in a complex-valued *capacitance*{: style="color: rgb(255, 127, 0)"}, which could be used as an alternative route to calculating the ESR from the approach we are currently taking. Since most people are used to working with circuit models that represent capacitors as ideal they are also used to a simplified equation here where the *permittivity*{: style="color: rgb(255,0,0)"} is represented as a real number which is the magnitude of the *imaginary*{: style="color: rgb(251,0,29)"} component of the *complex permittivity*{: style="color: rgb(255,0,0)"}; this in turn causes the *capacitance*{: style="color: rgb(255, 127, 0)"} to be a real number as well. This is the reason the equation for the *impedance*{: style="color: rgb(18, 110, 213)"} of a capacitor is usually represented as \\(\color{impedance}\frac{1}{\omega C j}\color{normal}\\); basically the *imaginary*{: style="color: rgb(251,0,29)"} number needs to be added back in. If you use the complex-valued *capacitance*{: style="color: rgb(255, 127, 0)"} for \\(\color{capacitance}C\color{normal}\\) the *imaginary*{: style="color: rgb(251,0,29)"} number is already a part of the *capacitance*{: style="color: rgb(255, 127, 0)"} value and wouldn't be added in when calculating the complex *impedance*{: style="color: rgb(18, 110, 213)"}. In our situation we are accounting for the ESR through the electric loss tangent side of the equation, and we are trying to find the purely *imaginary*{: style="color: rgb(251,0,29)"} part of the complex capacitor, the *reactance*{: style="color: rgb(45,177,93)"}, so instead we would want to use the equation for an ideal capacitor, which would be as follows.
+
+$$ \color{capacitance}C_{_{ideal}}\color{normal} = \color{capacitance}\varepsilon''\frac{A}{D}\color{normal} $$
+
+where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{capacitance}C_{_{ideal}}\color{normal}\\)* is the positive real-valued *capacitance*{: style="color: rgb(255, 127, 0)"}, in farads,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(A\\)* is the area of overlap of the two plates, in square meters,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\varepsilon^{\prime\prime}\\)* is the magnitude of the *imaginary*{: style="color: rgb(251,0,29)"} component of the *complex absolute permittivity*{: style="color: rgb(255,0,0)"} for the dielectric, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(D\\)* is the separation between the plates, in meters.
+
+From this we can substitute the above equation in for *capacitance*{: style="color: rgb(255, 127, 0)"} and arrive at our ESR as a function of the capacitor's physical dimensions, the dielectric's *complex absolute permittivity*{: style="color: rgb(255,0,0)"}, and the frequency of the signal.
+
+$$ \color{resistance}R_{_{ESR}}\color{normal} = \left\lvert\color{reactance}-\frac{1}{\omega (\varepsilon''\frac{A}{D})}\color{normal}\right\rvert \cdot \tan{(\delta_e)} $$
+
+$$ \color{resistance}R_{_{ESR}}\color{normal} = \left\lvert\color{reactance}-\frac{D}{\omega\varepsilon'' A}\color{normal}\right\rvert \cdot \tan{(\delta_e)} $$
+
+Likewise we can also substitute in equation \\(\eqref{eleclosstan}\\) for our electric loss tangent and arrive at the following.
+
+$$ \color{resistance}R_{_{ESR}}\color{normal} = \left\lvert\color{reactance}-\frac{D}{\omega\varepsilon'' A}\color{normal}\right\rvert \cdot \frac{\omega\varepsilon'' + \sigma}{\omega\varepsilon'} $$
+
+$$ \color{resistance}R_{_{ESR}}\color{normal} = \color{resistance}D \cdot \frac{\omega\varepsilon'' + \sigma}{\omega^2\varepsilon'\varepsilon'' A}\color{normal} $$
+
+Now that we have a reasonable understanding of how *electrical resistance*{: style="color: rgb(114,0,172)"} can arise due to energy loss from a a changing electric field, lets go through the same process and define the equivalent equation for the losses experienced due to a changing magnetic field. Much like the case with the electric loss tangent, demonstrated in equation \\(\eqref{eleclosstan}\\), the magnetic loss tangent is calculated from the *complex permeability*{: style="color: rgb(0,255,0)"} of a material. In the real-world *complex permeability*{: style="color: rgb(0,255,0)"} is also a highly complicated and nuanced property that is the result of numerous effects. Some of the factors that determine *complex permeability*{: style="color: rgb(0,255,0)"} at a particular frequency include hysteresis loss due to a static hysteresis loop, eddy *current*{: style="color: rgb(0, 255, 221)"} loss due to electrical resistivity, and residual loss due to magnetic domain wall and spin rotational resonances[^jaejinlee]. To give an idea just how varied the *complex permeability*{: style="color: rgb(0,255,0)"} of materials can be the following chart shows some measured values for the *complex permeability*{: style="color: rgb(0,255,0)"} of different ferrite cores and across a range of frequencies.
+
+![](/images/complex-permeability-cores.png)
+
+One really important thing to notice in the above plot is that even at relatively low frequencies of 10 kHz ferrite cores have a relatively low real component, for their *permeability*{: style="color: rgb(0,255,0)"}. Lower values of the real component indicate higher losses, therefore, ferrite cores tend to be relatively poor magnetic conductors; as such this is one among a few reasons magnetic circuits tend to be significantly more lossy than their electric circuit equivalent and are not used very often.
+
+As a general rule the complex *permeability*{: style="color: rgb(0,255,0)"} can not be easily determined mathematically and it must be measured for a particular material at a specific frequency to find out what it is. However, much like electric loss tangent, once we know the *complex permeability*{: style="color: rgb(0,255,0)"} of a material at a particular frequency we can calculate its magnetic loss tangent with the following equation[^jaejinlee].
+
+$$ \tan{(\delta_e)}  = \frac{\mu''}{\mu'} \label{maglosstan}$$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\mu'\\)* and *\\(\mu^{\prime\prime}\\)* are components of the complex *permeability*{: style="color: rgb(0,255,0)"}, \\(\color{permeability}\mu\color{normal}\\) of the material such that.
+
+$$ \color{permeability}\mu\color{normal} = \color{permeability}\mu' - j\mu''\color{normal} $$
+
+However notice here that equation \\(\eqref{maglosstan}\\) does not include a conductivity term or an angular frequency term as it did with our dielectric loss tangent, equation \\(\eqref{dieleclosstan}\\). The complex *permeability*{: style="color: rgb(0,255,0)"} is still dependent on the frequency it is measured at, so we haven't actually eliminated our \\(\omega\\) term, it is just that now it happens to be rolled into the \\(\color{permeability}\mu\color{normal}\\) term indirectly. However the conductivity term is missing due to a more nuanced reason. If we were trying to determine the loss tangent of an electrical inductor with a ferrite core then the equation would, in fact, look much like our equation for dielectric loss tangent \\(\eqref{diaelectloss}\\); it would use the *complex permeability*{: style="color: rgb(0,255,0)"}, \\(\color{permeability}\mu\color{normal}\\), instead of *complex permittivity*{: style="color: rgb(255,0,0)"}, \\(\color{permittivity}\varepsilon\color{normal}\\), and would use resistivity, \\(\rho\\), instead of conductivity, \\(\sigma\\), but otherwise would look similar and include a term relating the DC *resistance*{: style="color: rgb(114,0,172)"} of the component. However in the case of an electrical inductor the resistivity term is intended to account for the DC *resistance*{: style="color: rgb(114,0,172)"} across the inductor, and thus the resistivity is due to the copper itself, and not the resistivity of the ferrite core. This makes it semantically a bit different than the case of a capacitor where the plates are electrically connected to the dielectric and thus the conductivity of the dielectric itself determines DC *resistance*{: style="color: rgb(114,0,172)"}. In the case of an inductor the DC *resistance*{: style="color: rgb(114,0,172)"} of the ferrite core does not effect the DC *resistance*{: style="color: rgb(114,0,172)"} of the inductor itself. However despite this fact the DC *resistance*{: style="color: rgb(114,0,172)"} of the ferrite core is not absent from our magnetic loss tangent equation \\(\eqref{maglosstan}\\), it still plays a role but in a very different way, it is reflected in the *complex permeability*{: style="color: rgb(0,255,0)"} itself, \\(\color{permeability}\mu\color{normal}\\), instead. As mentioned earlier one of the properties that effects the *complex permeability*{: style="color: rgb(0,255,0)"} is loss due to eddy *currents*{: style="color: rgb(0, 255, 221)"}; this is proportional to the conductivity of the material; materials with low conductivity/high resistivity having less loss due to eddy *currents*{: style="color: rgb(0, 255, 221)"}[^jaejinlee]. This is where conductivity/resistivity is hiding inside our *complex permeability*{: style="color: rgb(0,255,0)"}. However the effects are more complicated than the dielectric case because the magnitude of the eddies are also influenced by frequency. Also keep in mind we are talking about a magnetic circuit here, therefore, the changing magnetic field is considered directly when talking about *magnetic resistance*{: style="color: rgb(114,0,172)"} of a material, and the cause of the changing magnetic field may be manifold; it may be caused by an electrical inductor just as easily as it may be caused by a permanent magnet. Therefore the DC *resistance*{: style="color: rgb(114,0,172)"} of an electrical inductor, which is normally a consideration in determining an electrical inductors loss tangent, isn't relevant here. In short, we only care about the magnetic loss tangent as represented by equation \\(\eqref{maglosstan}\\) without some of the complexities we faced when dealing with the dielectric loss tangent.
+
+As stated earlier this basically means that good magnetic conductors, meaning low loss, need to have both high electrical resistivity and a *complex permeability*{: style="color: rgb(0,255,0)"} with a high real component. Not many materials naturally have both these qualities so ferrite cores are produced by encapsulating iron granuels in a resistive coating and then pressing it into the desired shape for the core. This gives it a unique combination of *permeability*{: style="color: rgb(0,255,0)"} and *resistance*{: style="color: rgb(114,0,172)"}. The following chart shows the relationship between *permeability*{: style="color: rgb(0,255,0)"} and *resistance*{: style="color: rgb(114,0,172)"} of several materials to illustrate the uniqueness of ferrite core materials.
+
+![](/images/resistivity-permeability.png)
+
+In the same way that our electrical loss tangent angle was represented as the angle relative to the negative reactive axis in the complex plane our magnetic loss tangent angle is represented by the angle in the complex plane relative to the positive reactive axis as can be seen in the following diagram.
+
+![](/images/magnetic-loss-tangent-angle.png)
+
+Notice from the above diagram we are no longer calling the real portion of the complex vector ESR as we did with a capacitor. It is now referred to as *magnetic resistance*{: style="color: rgb(114,0,172)"} and represented by \\(\color{resistance}R_m\color{normal}\\). Similarly the earlier loss tangent equation, equation \\(\eqref{losstan}\\), remains the same except that \\(\color{resistance}R_{_{ESR}}\color{normal}\\) is replaced with \\(\color{resistance}R_m\color{normal}\\). Another thing to take note of here is that earlier in our table of duals we pointed out that *magnetic resistance*{: style="color: rgb(114,0,172)"} is measured in siemens, instead of ohms, which is the reciprocal of ohms. You may think that means we need to take the reciprocal of the ESR to get the *magnetic resistance*{: style="color: rgb(114,0,172)"}, however that is not the case. Remember that in both a dielectric as well as in a ferrite core or other material, that a higher resistivity of the material results in a *lower* ESR. In other words the ESR has an reciprocal relationship to the materials DC *resistance*{: style="color: rgb(114,0,172)"}. This is where the reciprocal relationship in the units comes from and is therefore already represented in the equations without needing to take the reciprocal when dealing with magnetic circuits.
+
+Similarly in the above diagram the \\(\color{reactance}X_m\color{normal}\\) component would be our **magnetic reactance**{: style="color: rgb(45,177,93)"}. Much like *magnetic resistance*{: style="color: rgb(114,0,172)"} the **magnetic reactance**{: style="color: rgb(45,177,93)"} has a reciprocal relationship with its electrical dual; we see a similar relationship between *electrical inductive reactance*{: style="color: rgb(45,177,93)"} and *electrical capacitive reactance*{: style="color: rgb(45,177,93)"}. Remember earlier when we said that the magnetic loss tangent is taken relative to the positive reactive axis and the electric loss tangent is taken relative to the negative reactive axis. This presented itself in equations such as equation \\(\eqref{losstan}\\) as taking the absolute value of the *reactance*{: style="color: rgb(45,177,93)"}. Because *reactance*{: style="color: rgb(45,177,93)"} is the *imaginary*{: style="color: rgb(251,0,29)"} component of the complex *impedance*{: style="color: rgb(18, 110, 213)"}, the difference in sign between the negative *reactance*{: style="color: rgb(45,177,93)"} of a capacitor and the positive *reactance*{: style="color: rgb(45,177,93)"} of an inductor is due to a reciprocal relationship; remember the reciprocal of the *imaginary*{: style="color: rgb(251,0,29)"} number is its negative. Consider the equations for determining the *impedance*{: style="color: rgb(18, 110, 213)"} of an electric capacitor, or that of an inductor, they are effectively reciprocals of each other.
+
+$$ \color{impedance}Z_{_C}\color{normal} = \color{impedance}\frac{1}{\omega C j}\color{normal} = \color{reactance}-\frac{1}{\omega C}\color{imaginary}j\color{normal}$$
+
+$$ \color{impedance}Z_{_L}\color{normal} = \color{reactance}\omega L\color{imaginary} j\color{normal} $$
+
+The same reciprocal relationship we see between *electrical resistance*{: style="color: rgb(114,0,172)"} and *magnetic resistance*{: style="color: rgb(114,0,172)"} is likewise baked into the relationship between *electrical reactance*{: style="color: rgb(45,177,93)"} and *magnetic reactance*{: style="color: rgb(45,177,93)"} by virtue of the fact that both are represented in their positive forms by way of taking the absolute values in our equations. Since **magnetic impedance**{: style="color: rgb(18, 110, 213)"} is the simple addition of our *magnetic resistance*{: style="color: rgb(114,0,172)"} and *magnetic reactance*{: style="color: rgb(45,177,93)"}, it too has a similar reciprocal relationship with *electrical impedance*{: style="color: rgb(18, 110, 213)"} as its components have. It is for this reason that *magnetic resistance*{: style="color: rgb(114,0,172)"}, * magnetic reactance*{: style="color: rgb(45,177,93)"}, and *magnetic impedance*{: style="color: rgb(18, 110, 213)"} all have the reciprocal unit of the ohm, the siemen.
+
+Now that we got that out of the way we can take the final steps in showing how we can go from the complex *permeability*{: style="color: rgb(0,255,0)"} of a material at a certain frequency to actually determining its *magnetic resistance*{: style="color: rgb(114,0,172)"}. One way we can do this is use the equation for the ideal *capacitance*{: style="color: rgb(255, 127, 0)"} from equation \\(\eqref{idealcap}\\) and then use this to calculate \\(\color{reactance}\mathcal{X}\color{normal}\\). We can then use the same process we used earlier in electric capacitors to find the *resistance*{: style="color: rgb(114,0,172)"}.
+
+$$ \color{reactance}\mathcal{X}\color{normal} = \frac{1}{\omega \color{capacitance}\mathcal{C}\color{normal}} \label{finalabs}$$
+
+$$ \tan{(\delta_m)} = \frac{\color{resistance}\mathcal{R}\color{normal}}{|\color{reactance}\mathcal{X}\color{normal}|} $$
+
+$$ \color{resistance}\mathcal{R}\color{normal} = |\color{reactance}\mathcal{X}\color{normal}| \cdot \tan{(\delta_m)} $$
+
+$$ \color{resistance}\mathcal{R}\color{normal} = \left\lvert\color{reactance}\frac{1}{\omega \mathcal{C}}\color{normal}\right\rvert \cdot \tan{(\delta_m)} $$
+
+$$ \color{resistance}\mathcal{R}\color{normal} = \left\lvert\color{reactance}\frac{1}{\omega C}\color{normal}\right\rvert \cdot \frac{\mu''}{\mu'} $$
+
+$$ \color{resistance}\mathcal{R}\color{normal} = \frac{\mu''}{\omega \color{capacitance}\mathcal{C}\color{normal}\mu'} $$
+
+Similarly we can now substitute in equation \\(\eqref{idealcap}\\) and get our equation relative to physical dimensions.
+
+$$ \color{resistance}\mathcal{R}\color{normal} = \frac{\mu''}{\omega \color{capacitance}(\mu'' \frac{S}{L})\color{normal} \mu'} $$
+
+$$ \color{resistance}\mathcal{R}\color{normal} = \color{resistance}\frac{\mu''L}{\omega\mu''\mu'S}\color{normal} $$
+
+$$ \color{resistance}\mathcal{R}\color{normal} = \color{resistance}\frac{L}{\omega\mu'S}\color{normal} $$
+
+We can also do the same substitution of equation \\(\eqref{idealcap}\\) on \\(\mathcal{X}\\) from equation \\(\eqref{finalabs}\\) as well if we want to determine the *reactance*{: style="color: rgb(45,177,93)"} component in order to construct the full *impedance*{: style="color: rgb(18, 110, 213)"}.
+
+$$ \color{reactance}\mathcal{X}\color{normal} = \frac{1}{\omega \color{capacitance}(\mu'' \frac{S}{L})\color{normal}} $$
+
+$$ \color{reactance}\mathcal{X}\color{normal} = \color{reactance}\frac{L}{\omega \mu'' S}\color{normal} $$
+
+Therefore our full *impedance*{: style="color: rgb(18, 110, 213)"} would be
+
+$$ \color{impedance}\mathcal{Z}\color{normal} = \color{resistance}\mathcal{R}\color{normal} + \color{reactance}\mathcal{X} \color{imaginary}j\color{normal} $$
+
+$$ \color{impedance}\mathcal{Z}\color{normal} = \color{resistance}\frac{L}{\omega\mu'S}\color{normal} - \color{reactance}\frac{L}{\omega \mu'' S} \color{imaginary}j\color{normal} \label{finalimpcomplex} $$
+
+That's all there is too it; we now have our *complex impedance*{: style="color: rgb(18, 110, 213)"}. We can also pull out our *permeability*{: style="color: rgb(0,255,0)"} values and change that back into a *complex permeability*{: style="color: rgb(0,255,0)"} for a more compact equation, but it is usually more helpful to keep it in the complex number form above. But just to show that relationship we would do that as follows
+
+$$ \color{impedance}\mathcal{Z}\color{normal} = \frac{L}{\omega S} \cdot \color{permeability}( \mu' - \mu'' j)\color{normal} $$
+
+$$ \color{impedance}\mathcal{Z}\color{normal} = \frac{L}{\omega S} \cdot \color{permeability}\mu\color{normal} \label{finalimp}$$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{impedance}\mathcal{Z}\color{normal}\\)* is the *complex magnetic impedance*{: style="color: rgb(18, 110, 213)"} of the component,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(L\\)* is the length of the component,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(S\\)* is the cross sectional area of the component,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\omega\\)* is the angular frequency of the signal, and\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\color{permeability}\mu\color{normal}\\)* is the absolute *complex permeability*{: style="color: rgb(0,255,0)"} of the material.
+
+Keep in mind in the above equations the vertical bars that typically mean absolute value are surrounding a complex number, in that case it means to take the magnitude of the complex number. That effectively means dropping the *imaginary*{: style="color: rgb(251,0,29)"} number and taking the absolute value.
+
+For the sake of clarity lets show how you can derive the same equation for *magnetic impedance*{: style="color: rgb(18, 110, 213)"} using the non-idealized form of the equation for *capacitance*{: style="color: rgb(255, 127, 0)"} shown in equation \\(\eqref{realcap}\\). Recall in this case the *imaginary*{: style="color: rgb(251,0,29)"} number will be part of our *complex capacitance*{: style="color: rgb(255, 127, 0)"} so while equation \\(\eqref{finalabs}\\) was for *reactance*{: style="color: rgb(45,177,93)"}, since it lacked the *imaginary*{: style="color: rgb(251,0,29)"} number, now the same equation represents *impedance*{: style="color: rgb(18, 110, 213)"} instead when used with a *complex capacitance*{: style="color: rgb(255, 127, 0)"} because our *complex capacitance*{: style="color: rgb(255, 127, 0)"} now provides the *imaginary*{: style="color: rgb(251,0,29)"} number.
+
+$$ \color{impedance}\mathcal{Z}\color{normal} = \frac{1}{\omega \color{capacitance}\mathcal{C}\color{normal}} $$
+
+$$ \color{impedance}\mathcal{Z}\color{normal} = \frac{1}{\omega \cdot \color{capacitance}(\mu \frac{S}{L})\color{normal}} $$
+
+$$ \color{impedance}\mathcal{Z}\color{normal} = \frac{L}{\omega \color{permeability}\mu\color{normal} S} $$
+
+$$ \color{impedance}\mathcal{Z}\color{normal} = \frac{L}{\omega S} \cdot \color{permeability}\mu\color{normal} $$
+
+At this point our equation is identical to equation \\(\eqref{finalimp}\\) so it should be clear that this alternative approach works as well. It should also be clear that if we continued to expand the equation and put it in complex number form, as we did with equation \\(\eqref{finalimpcomplex}\\), we would see the *imaginary*{: style="color: rgb(251,0,29)"} number we expect come out of the \\(\color{permeability}\mu\color{normal}\\) argument. So this also serves to demonstrate nicely what I mentioned earlier how when using the real-world equation for a capacitor with *complex capacitance*{: style="color: rgb(255, 127, 0)"}; we do not need to add the *imaginary*{: style="color: rgb(251,0,29)"} number back in manually as this is already baked into the complex value of \\(\color{permeability}\mu\color{normal}\\) for us.
+
+### Examples of Magnetic Circuits
+
+This section I just want to devote to showing some sketches of simple magnetic circuits that show how any electric circuit can have a magnetic circuit dual. Keep in mind these may not be particularly practical in real life, generally the electrical equivalent will be more efficient. The only purpose is to show that every electric circuit can be represented with a magnetic circuit dual.
+
+#### DC Magnetic Lamp
+
+![](/images/magnetic-light.png)
+
+In this circuit we have an ideal *voltage*{: style="color: rgb(181, 181, 98)"} source connected to an inductor, which will produce a magnetic field that will constantly increase. This which will give us a *magnetic current*{: style="color: rgb(0, 255, 221)"} that flows consistently in one direction and remains constant. Keep in mind in real life the *current*{: style="color: rgb(0, 255, 221)"} through the inductor will also increase steadily, so while a real life version of this circuit will work for a short time, eventually you will see smoke and fire once the *current*{: style="color: rgb(0, 255, 221)"} gets too high for the inductor or *voltage*{: style="color: rgb(181, 181, 98)"} source to handle. The purpose in sharing this is to show that DC *current*{: style="color: rgb(0, 255, 221)"} does work in theory in a magnetic circuit, even if it isn't practical.
+
+In this circuit, like other circuits, the wires are represented by the rectangular path. These would be made out of iron ferrite or plain iron. The lamp at the bottom of the circuit, however, would not be any ordinary light bulb. A light bulb in an electric circuit is just a resistive component that has its *resistance*{: style="color: rgb(114,0,172)"} selected to produce a specific power. Electric lamps work by heating due to their *electrical resistance*{: style="color: rgb(114,0,172)"} until the heat is enough to make the element glow white hot, and thus produce light. In a magnetic circuit this would be no different, a lamp would just be a block of material with a specifically chosen *magnetic resistance*{: style="color: rgb(114,0,172)"} such that it would convert the magnetic energy to heat at such a rate that it would glow white hot and produce light.
+
+If you think about it an induction furnace is in some ways very similar to this circuit; it uses magnetic energy to heat up a piece of metal untill it turns white hot and glows with light. The only differences are that an induction furnace uses an AC *magnetic current*{: style="color: rgb(0, 255, 221)"} instead of DC and it it heats the material to the point of melting it. In a lamp you'd want to heat it enough to get it white hot but not so much that it would actually melt of course.
+
+#### Magnetic High-pass Filter
+
+![](/images/magnetic-high-pass.png)
+
+Here we have a simple magnetic bandpass filter where the magnetic lamp presents a *resistance*{: style="color: rgb(114,0,172)"} and would be factored into the component values. We added a magnetic capacitor in series with the lamp; there is also a horizontal connection just before the lamp representing a magnetic resistor acting as the resistive component to form the high-pass filter. If these were ideal components then a DC magnetic *current*{: style="color: rgb(0, 255, 221)"} would result in the lamp not lighting at all, and as the frequency of the sine wave generator increased the lamp would glow increasingly brighter.
+
+#### Magnetic Oscillator and Bandpass Filter
+
+![](/images/magnetic-bandpass.png)
+
+Finally this is the schematic for a magnetic oscillator or bandpass filter, depending on how it is used. If the power source is a sine wave generator then as the frequency approaches the resonance between the magnetic capacitor and the magnetic inductor the lamp would glow brighter; as it goes below or above the resonance the lamp would dim.
+
+This would also work as an oscillator in the sense that if the sine wave generator produced a pulse instead of a steady sine wave, then the energy would oscillate between the capacitor and the inductor in the circuit at their resonant frequency until all the energy is dissipated by the lamp.
+
+### Permanent magnets as a Power Source
+
+One final related point I wanted to make was on the topic of using permanent magnets as a DC power source in a magnetic circuit. Typically permanent magnets can not do work. This is because the energy stored in their magnetic field, in order to be consumed, must deplete the magnetic field. Just as an inductor would stop acting as an electromagnet if the energy in its magnetic field were consumed, so would a permanent magnet need to become demagnetized in order to consume the energy in its magnetic field. Since permanent magnets don't usually spontaneously become demagnetized during ordinary use it isn't typically the case that they can provide any power on their own when stationary, or indeed do any work at all.
+
+However a permanent magnet's field does contain energy and under some special circumstances that energy can be extracted, though it wouldn't be practical to do so or to use them an energy source, it is as best a curiosity to demonstrate how this is possible. In the real world the energy extracted would not be significant enough to be practical. None the less, the energy that is stored, and thus able to be recovered, from a permanent magnet's magnetic field is exactly equal to energy delivered by an inductor that has a *current*{: style="color: rgb(0, 255, 221)"} going through it such that the field strength of the inductor is equal to that of the magnet. In both these cases the amount of power they could deliver to a circuit, given the correct circumstances, would be entirely equivalent.
+
+In the case of the inductor, as we already illustrated, all that would be necessary would be to take the charged inductor, make sure it is wound around the iron wiring of our magnetic circuit, and then let the magnetic field collapse by cutting the *current*{: style="color: rgb(0, 255, 221)"} to the inductor. The collapsing magnetic field would cause the flux in the magnetic circuit to decrease at a constant rate and thus produce a DC *magnetic current*{: style="color: rgb(0, 255, 221)"} until the energy in the inductor is exhausted.
+
+Similarly one could insert a permanent magnet of equivalent field strength into a gap cut out of the iron wiring of the magnetic circuit and let the field of the permanent magnet collapse creating an identical DC *magnetic current*{: style="color: rgb(0, 255, 221)"}. How do you get the field of a permanent magnet to collapse you may ask? Simple, just heat it up past a critical temperature, called the **curie point**, at that temperature the magnet looses its ferromagnetic properties and the field around it will collapse and provide all the same energy as the inductor did.
+
+Now your first thought might be that the heat involved to get the magnet to the curie point is in fact the source of the energy and not the magnetic field itself. But that isn't the case and can be easily demonstrated by the fact that the energy extracted from such a scenario would be identical regardless of the amount of energy needed to raise the temperature of the magnet to the curie point. A simple thought experiment can demonstrate this. Imagine you had a magnet where the curie point of the magnet is infinitesimally higher than the ambient temperature in the room you are in and setup the circuit as previously described. At this point you could simply touch the magnet and the added warmth from your body will raise its temperature ever so slightly past the curie point. This would represent an infinitesimal amount of energy transferred into the magnet, and thus the energy to do so would be negligible. None the less at this point the magnetic field of the magnet would begin to collapse and the energy of the magnet would be successfully extracted as DC *magnetic current*{: style="color: rgb(0, 255, 221)"}.
+
+You could literally run circuits off the energy stored in permanent magnets... well as much as you could from a charged inductor, which is to say, you wont be able to deliver all that much power to really be useful as a power source. But hey, still cool to know that magnets can be used as a power source all the same. Just don't go getting any crackpot ideas about over unity devices or infinite energy. There is a finite and small amount of energy in a magnet and once you use it up, its gone, so no infinite energy anytime soon I'm afraid.
+
+# Special Thanks
+
+Special thanks to the following people for helping me proof-read and edit this article prior to its release:
+
+* [Faith Aydin](https://fosstodon.org/@faydin) - He submited several corrections through gitlab catching numerous spelling and gramatical errors.
+
+# Citations
+
+[^jaejinlee]: Hong, Y.-K., & Lee, J. (2013). [Ferrites for RF Passive Devices. In Recent Advances in Magnetic Insulators – From Spintronics to Microwave Applications](https://www.sciencedirect.com/science/article/pii/B9780124081307000083) (pp. 237–329). Elsevier. [doi:10.1016/b978-0-12-408130-7.00008-3](https://doi.org/10.1016/b978-0-12-408130-7.00008-3)
+[^magmodel]: González, G. G., & Ehsani, M. (2018). "[Power-Invariant Magnetic System Modeling](https://www.vibgyorpublishers.org/content/ijme/fulltext.php?aid=ijme-4-012)", International Journal of Magnetics and Electromagnetism, 4(1), 1-9. [doi:10.35840/2631-5068/6512](https://doi.org/10.35840%2F2631-5068%2F6512). ISSN [2631-5068](https://www.worldcat.org/issn/2631-5068).
+[^theoryofcircuits]: Popov, V. P. (1985). The Principles of Theory of Circuits (in Russian). M.: Higher School.
+[^multidomain]: Mohammad, Muneer (2014-04-22). [An Investigation of Multi-Domain Energy Dynamics](https://oaktrust.library.tamu.edu/handle/1969.1/152720) (PhD thesis).
+[^magwithinelec]: Lambert, M., Mahseredjian, J., Martinez-Duro, M., & Sirois, F. (2015). [Magnetic Circuits Within Electric Circuits: Critical Review of Existing Methods and New Mutator Implementations. IEEE Transactions on Power Delivery](https://ieeexplore.ieee.org/document/7008520), 30(6), 2427–2434. doi:10.1109/tpwrd.2015.2391231](https://doi.org/10.1109/tpwrd.2015.2391231)
+[^maxwell]: [https://www.ece.rutgers.edu/~orfanidi/ewa/ch01.pdf](Maxwell's Equations, Rutgers)
+[^considercap]: "[Considerations for a High Performance Capacitor](https://web.archive.org/web/20081119040541/http://www.reliablecapacitors.com/consider.htm)". Archived from [the original](http://www.reliablecapacitors.com/consider.htm) on 2008-11-19.
diff --git a/content/blog/2020-10-09-spacemacs-ultimate-cheatsheet.html.md b/content/blog/2020-10-09-spacemacs-ultimate-cheatsheet.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..97b015fb438697131224b605446e0a5747b90145
--- /dev/null
+++ b/content/blog/2020-10-09-spacemacs-ultimate-cheatsheet.html.md
@@ -0,0 +1,15 @@
+---
+title: Spacemacs Ultimate Cheatsheet
+date: 2020-10-09
+tags: [Programming]
+layout: post
+---
+
+A cheatsheet I wrote for all the Spacemacs hotkeys worth knowing.
+
+<p>
+  <iframe height="800" src="/ViewerJS/#../files/spacemacs-ultimate-cheatsheet.pdf" width="100%"></iframe>
+</p>
+
+[Download Cheatsheet](../files/spacemacs-ultimate-cheatsheet.pdf)
+
diff --git a/content/blog/2020-11-29-how-money-is-created-monetary-and-quantitative-easing.html.md b/content/blog/2020-11-29-how-money-is-created-monetary-and-quantitative-easing.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..a8ec824df9e3cf575db6232e332975eb16412f5d
--- /dev/null
+++ b/content/blog/2020-11-29-how-money-is-created-monetary-and-quantitative-easing.html.md
@@ -0,0 +1,11 @@
+---
+title: How Money is Created (Monetary & Quantitative Easing)
+date: 2020-11-29
+tags: [Economics]
+layout: post
+---
+
+An educational diagram I just finished creating showing how new money gets into circulation in the USA. Here I explain how the government borrows from the people, aquiring debt, as well as how new money is created and put into circulation. I explain both Monetary Easing and Quantitative easing.
+
+Click the image below for full size!
+[![](/images/HowMoneyIsCreated.png)](/images/HowMoneyIsCreated.png)
diff --git a/content/blog/2020-12-23-an-efficient-exponential-moving-average-of-finite-length.html.md b/content/blog/2020-12-23-an-efficient-exponential-moving-average-of-finite-length.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..74e8b27654f0cc2a9d27113eb7e203f8c6f0d678
--- /dev/null
+++ b/content/blog/2020-12-23-an-efficient-exponential-moving-average-of-finite-length.html.md
@@ -0,0 +1,278 @@
+---
+title: An Efficient Exponential Moving Average of Finite Length
+date: 2020-12-23
+tags: [Mathematics, Programming]
+layout: post
+---
+
+\\(\definecolor{first}{RGB}{0, 255, 221}\\)
+\\(\definecolor{second}{RGB}{181, 181, 98}\\)
+\\(\definecolor{third}{RGB}{18,110,213}\\)
+\\(\definecolor{fourth}{RGB}{114,0,172}\\)
+\\(\definecolor{5}{RGB}{45,177,93}\\)
+\\(\definecolor{6}{RGB}{251,0,29}\\)
+\\(\definecolor{7}{RGB}{255, 127, 0}\\)
+\\(\definecolor{8}{RGB}{255,0,255}\\)
+\\(\definecolor{9}{RGB}{0,255,0}\\)
+\\(\definecolor{10}{RGB}{255,0,0}\\)
+\\(\definecolor{normal}{RGB}{0,0,0}\\)
+
+An exponential moving average (EMA), also called an exponentially weighted moving average (EWMA), is a type of moving average where the weighting applied to generate the average decays exponentially the farther back in time you go. This is contrasted with a simple moving average (SMA) which always has a finite length but weights all the points in the series within that length equally. Due to the exponential weight decay of an EMA it does not necessitate a finite length as with an SMA. Because of this it can be a bit more efficient than an SMA when calculating the EMA on large time series data since each new data point can recursively apply the EMA from the previous data point's EMA; contrast this with an SMA where each data point either must step through several previous points in the series to calculate the sum at each new point, or, must store the sum at each previous point in the series which is calculated before dividing by its length. Therefore if the sums are cached to improve computational efficiency there is a hit to space efficiency, if not then the computational efficiency is impaired instead.
+
+However the efficiency advantage of an EMA only really applies if you are sequentially calculating the EMA one time through from some selected starting point in the time series to an end point in the series. This isnt always a viable use case, particularly if the time series data is extremely large, or even infinite, and an EMA must be calculate at arbitrary points or across small sub-sets of the data at any one time. For this reason it is common to use an EMA that has a finite length similar to an SMA, applied to past points for a finite time into the past. Because EMA weights exponentially decay, so long as the length is sufficiently large, it should closely approximate the usual case where the EMA length is infinite, or at least, goes back to the beginning of the dateset. However, like an SMA, when using a finite length there is no need to iterate across the length of past data points to calculate the EMA at each point if you cache previously calculated values. By storing the sum at each previous data point we can make this process efficient by only referencing the sum associated with the last data point and calculating our new EMA from there. Because the sum for an EMA is the same as the EMA itself, that is, there is no need to divide by the length as is the case with an SMA, we are able to calculate an EMA with a finite length with greater space efficiency than we would an SMA, only storing the EMA calculated at each point and no need to store an additional sum variable.
+
+In this post I will discuss how to calculate the EMA value with a finite length efficiently without the need for iterating over past data points and how we derive the math to accomplish this.
+
+* Table of Contents will go here.
+{:toc}
+
+# Calculating EMA with Finite Length
+
+First lets take a look at the equation used to calculate the EMA for any point. This equation assumes a starting point of \\(V_0\\); when dealing with an EMA of fixed length then our \\(V_0\\) would be the point in the time series that is the number of steps behind the current data point in the sequence by length.
+
+$$
+S_t = \begin{cases}
+ V_0, & t = 0 \\
+ \alpha V_t + (1 - \alpha) \cdot S_{t-1}, & t > 0
+\end{cases}
+$$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\alpha\\)* is the weighting coefficient. It is a value between 0 and 1,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(t\\)* the time where 0 is the start time,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(V_t\\)* the value, \\(V\\), at time \\(t\\),\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(S_t\\)* the sum at time \\(t\\), this is the same as the EMA at time \\(t\\).
+
+## Example of Length 5
+
+Lets run through all the math we need to accomplish our end goal for a fixed length of 5, then we can hopefully pick out the patterns and generalized this to any length value.
+
+Say we have some series values in an array as follows.
+
+$$
+V = [V_0, V_1, V_2, V_3, V_4]
+$$
+
+Now if we take a EMA of the above series then each point in the series will have a corresponding EMA value associated with it, namely \\(S_t\\). The first value being trivial and is as follow.
+
+$$
+S_0 = V_0
+$$
+
+At this point each following EMA is a recursive relationship to the previous, back to, at most, the length parameter of an EMA or the first value in the series, whatever comes first. For simplicity lets presume we have an EMA length of 5. Now lets calculate the EMA at \\(t=1\\).
+
+$$ S_1 = \left(1 - \alpha\right) \cdot S_0 + \alpha V_1 $$
+
+$$
+ S_1 = \left(1 - \alpha\right) \cdot \underbrace{V_0}_{S_0} + \alpha V_1
+$$
+
+We can now take this process and apply it to the other elements in the series.
+
+$$ S_2 = \left(1 - \alpha\right) \cdot S_1 + \alpha V_2 $$
+
+$$
+ S_2 = \left(1 - \alpha\right) \cdot \overbrace{\left(\left(1 - \alpha\right) \cdot \underbrace{V_0}_{S_0} + \alpha V_1\right)}^{S_1} + \alpha V_2
+$$
+
+
+$$ S_3 = \left(1 - \alpha\right) \cdot S_2 + \alpha V_3 $$
+
+$$
+ S_3 = \left(1 - \alpha\right) \cdot \underbrace{\left(\left(1 - \alpha\right) \cdot \overbrace{\left(\left(1 - \alpha\right) \cdot \underbrace{V_0}_{S_0} + \alpha V_1\right)}^{S_1} + \alpha V_2\right)}_{S_2} + \alpha V_3
+$$
+
+
+$$ S_4 = \left(1 - \alpha\right) \cdot S_3 + \alpha V_4 $$
+
+
+$$
+ S_4 = \left(1 - \alpha\right) \cdot \overbrace{\left(\left(1 - \alpha\right) \cdot \underbrace{\left(\left(1 - \alpha\right) \cdot \overbrace{\left(\left(1 - \alpha\right) \cdot \underbrace{V_0}_{S_0} + \alpha V_1\right)}^{S_1} + \alpha V_2\right)}_{S_2} + \alpha V_3\right)}^{S_3} + \alpha V_4
+$$
+
+The problem here is that if we start the process over and repeat it for every point it is horribly inefficient. With a length of 5 as seen here this entire process needs to be repeated for every point. If we have a array, \\(V\\) of sufficient length, and a length parameter that is of any sizable length this process becomes particularly inefficient. Remember that if there was a 6th point here after \\(v_5\\) we would have to start over and start at \\(V_1\\) rather than \\(V_0\\) since the length is 5 and thus would not go back to the 0 index for subsequent values in the series.
+
+One way to make this more efficient is by figuring out a way of dropping \\(V_0\\) from the previously calculated sum before we append the next value to it. For a SMA this would be trivial subtraction but for an EMA it is a bit more complex. To see how we accomplish that we need to first expand the series above and simplify it, once we do this some patterns become evident.
+
+$$
+  S_4 = \left(1 - \alpha\right) \cdot
+    \left(\left(1 - \alpha\right) \cdot
+      \left(\left(1 - \alpha\right) \cdot
+        \color{first}
+        \left(\left(1 - \alpha\right) \cdot V_0 + \alpha V_1\right)
+        \color{normal}
+      + \alpha V_2\right)
+    + \alpha V_3\right)
+  + \alpha V_4
+$$
+
+
+$$
+  S_4 = \left(1 - \alpha\right) \cdot
+    \left(\left(1 - \alpha\right) \cdot
+      \left(\left(1 - \alpha\right) \cdot
+        \color{first}
+        \left(V_0 - \alpha V_0 + \alpha V_1\right)
+        \color{normal}
+      + \alpha V_2\right)
+    + \alpha V_3\right)
+  + \alpha V_4
+$$
+
+$$
+  S_4 = \left(1 - \alpha\right) \cdot
+    \left(\left(1 - \alpha\right) \cdot
+      \color{second}
+      \left(\left(1 - \alpha\right) \cdot
+        \left(V_0 - \alpha V_0 + \alpha V_1\right)
+      + \alpha V_2\right)
+      \color{normal}
+    + \alpha V_3\right)
+  + \alpha V_4
+$$
+
+$$
+  S_4 = \left(1 - \alpha\right) \cdot
+    \left(\left(1 - \alpha\right) \cdot
+      \color{second}
+      \left(V_0 - \alpha V_0 - \alpha V_0 + {\alpha}^2 V_0 + \alpha V_1 - {\alpha}^2 V_1 + \alpha V_2\right)
+      \color{normal}
+    + \alpha V_3\right)
+  + \alpha V_4
+$$
+
+$$
+  S_4 = \left(1 - \alpha\right) \cdot
+    \left(\left(1 - \alpha\right) \cdot
+      \color{second}
+      \left(\left(1 - \alpha - \alpha + {\alpha}^2\right) V_0 + \left(\alpha - {\alpha}^2\right) V_1 + \alpha V_2\right)
+      \color{normal}
+    + \alpha V_3\right)
+  + \alpha V_4
+$$
+
+$$
+  S_4 = \left(1 - \alpha\right) \cdot
+    \color{third}
+    \left(\left(1 - \alpha\right) \cdot
+      \left(\left(1 - 2\alpha + {\alpha}^2\right) V_0 + \left(\alpha - {\alpha}^2\right) V_1 + \alpha V_2\right)
+    + \alpha V_3\right)
+    \color{normal}
+  + \alpha V_4
+$$
+
+$$
+  S_4 = \left(1 - \alpha\right) \cdot
+    \color{third}
+    \left(\left(1 - 3\alpha + 3 {\alpha}^2 - {\alpha}^3\right) V_0 + \left(\alpha - 2 {\alpha}^2 + {\alpha}^3\right) V_1 + \left(\alpha - {\alpha}^2\right) V_2 + \alpha V_3\right)
+    \color{normal}
+  + \alpha V_4
+$$
+
+finally after simplifying the last step we arrive at our equation for a EMA of length 5.
+
+$$
+\begin{split}
+  S_4 = \\
+    &\color{5}\left(1 - 4\alpha + 6{\alpha}^2 - 4{\alpha}^3 + {\alpha}^4\right)\color{normal} V_0 + \\
+    &\color{6}\left(\alpha - 3{\alpha}^2 + 3{\alpha}^3 - {\alpha}^4\right)\color{normal} V_1 + \\
+    &\color{7}\left(\alpha - 2{\alpha}^2 + {\alpha}^3\right)\color{normal} V_2 + \\
+    &\color{8}\left(\alpha - {\alpha}^2\right)\color{normal} V_3 + \\
+    &\color{9}\alpha\color{normal} V_4
+\end{split}
+$$
+
+Since all of our coefficients for \\(V_t\\) are effectively constants lets simplify that and see what it looks like.
+
+
+$$
+  S_4 =
+    \color{5}{\left(1 - \alpha\right)}^4\color{normal} V_0 +
+    \color{6}\alpha{\left(1 - \alpha\right)}^3\color{normal} V_1 +
+    \color{7}\alpha{\left(1 - \alpha\right)}^2\color{normal} V_2 +
+    \color{8}\alpha{\left(1 - \alpha\right)}^1\color{normal} V_3 +
+    \color{9}\alpha {\left(1 - \alpha\right)}^0\color{normal} V_4
+$$
+
+At this point the pattern becomes clear. what we effectively did was we took a somewhat confusing recursive equation and unrolled it into a flat structure. In fact we are now treating it as a much simpler weighted average where each element of \\(V\\) is weight by the coefficients marked in color in the above equation. Another important property to notice is how this equation evolves for each successive iteration of our EMA equation. Presuming our EMA had a length of 6 or longer instead then on the next element, \\(V_5\\) we would simply increment the exponent of each of our existing coefficients by \\(1\\) and then tack on to the end with addition the \\(\alpha{\left(1 - \alpha\right)}^0 V_5\\) and we would be good. However thats the easy scenario to handle, what we really want to do is handle the next iteration when length remains \\(5\\); that means dropping the \\(V_0\\) argument before adding on the \\(V_5\\) argument, thus reuse the sum and not needing to regenerate it. For clarity lets look at what our equation needs to look like if we wish to drop \\(V_0\\) but before we actually apply \\(V_5\\).
+
+
+$$
+  {S_4}' =
+    \color{6}{\left(1 - \alpha\right)}^3\color{normal} V_1 +
+    \color{7}\alpha{\left(1 - \alpha\right)}^2\color{normal} V_2 +
+    \color{8}\alpha{\left(1 - \alpha\right)}^1\color{normal} V_3 +
+    \color{9}\alpha {\left(1 - \alpha\right)}^0\color{normal} V_4
+$$
+
+Notice that we didnt just drop the first \\(v_0\\) term but we also had to drop the leading \\(\alpha\\) from the\\(V_1\\) term. this is effectively what \\(S_4\\) would have looked like if it had a length of \\(4\\) instead of \\(5\\). the reason the first term always lacks the leading \\(\alpha\\) is due to the starting condition specified in the EMA equation. If we can get the equation in this form then applying the next iteration of the EMA equation would bring the \\(S_5\\) length back to \\(5\\) again, so we know we are on the right track. What we have to figure out now is how can we go from \\(S_4\\) to \\({S_4}'\\).
+
+Dropping the first term itself is trivial, thats just simple subtraction.
+
+$$ S_4 - {\left(1 - \alpha\right)}^4\color{normal} V_0 $$
+
+$$
+    \color{10}\alpha\color{normal}{\left(1 - \alpha\right)}^3 V_1 +
+    \alpha{\left(1 - \alpha\right)}^2 V_2 +
+    \alpha{\left(1 - \alpha\right)}^1 V_3 +
+    \alpha {\left(1 - \alpha\right)}^0 V_4
+$$
+
+Easy enough, but now we need to get rid of that leading \\(\alpha\\), so how do we do that?
+
+We know that if we add another \\(V_1\\) term with some coefficient which we will call \\(X\\) then we can combine this with the existing \\(V_1\\) term and if we select our \\(X\\) carefully we can use it to cancel out the leading alpha. That would look something like this.
+
+$$
+  \alpha{\left(1 - \alpha\right)}^3 V_1 + X V_1 + ... = {\left(1 - \alpha\right)}^3 V_1 + ...
+$$
+
+So all we have to do is set that up as an equation and solve for X and we will quickly see what value of X will satisfy our requirement.
+
+$$ \alpha{\left(1 - \alpha\right)}^3 + X = {\left(1 - \alpha\right)}^3 $$
+
+$$  X = {\left(1 - \alpha\right)}^3 - \alpha{\left(1 - \alpha\right)}^3 $$
+
+$$  X = \left(1 - \alpha\right) {\left(1 - \alpha\right)}^3 $$
+
+$$  X = {\left(1 - \alpha\right)}^4 $$
+
+It is always nice when equations play along with one's expectations and give us nice clean terms and patterns start to emerge. Now that we have the value of X we know how we can get from \\(S_4\\) to \\({S_4}'\\).
+
+$$ {S_4}' = S_4 - {\left(1 - \alpha\right)}^4 V_0 + {\left(1 - \alpha\right)}^4 V_1 $$
+
+Finally now that we have \\({S_4}'\\) we simply apply the original EMA equation to that value in order to produce our value for \\(S_5\\) when EMA length is 5.
+
+$$ S_5 = \left(1 - \alpha\right) \cdot {S_4}' + \alpha V_5 $$
+
+From here on out the pattern holds for successive values as well, we can calculate each successive EMA value at any point without recursively iterating through the previous values but rather by modifying the previous value's EMA in the series.
+
+## Generalization of Length N
+
+At this point the pattern is pretty obvious, I hope. Lets sum things up real fast by generalizing what we learned above and rewrite our EMA equation for a fixed length of \\(N\\). When we want to calculate the EMA for a point that is more than N (length) away from the start of the time series then we have the following generalization from the above.
+
+$$
+ S_t = \alpha V_t + \left(1 - \alpha\right) \cdot \left(S_{t-1} - {\left(1 - \alpha\right)}^N V_{t-N} + {\left(1 - \alpha\right)}^N V_{t-N+1}\right)
+$$
+
+All we have to do now is simplify it and then handle the edge cases near the beginning of the time series and we have a complete solution. Lets start by simplifying.
+
+$$
+  S_t = \left(1 - \alpha\right)^{N+1}\left(V_{t-N+1} - V_{t-N}\right) - \alpha S_{t-1} + S_{t-1} + \alpha V_t
+$$
+
+Now lets just explicitly define the edge cases and we have our final equation.
+
+$$
+S_t = \begin{cases}
+ V_0, & t = 0 \\
+ \alpha V_t + \left(1 - \alpha\right) \cdot S_{t-1}, & 0 < t < N \\
+ \left(1 - \alpha\right)^{N+1}\left(V_{t-N+1} - V_{t-N}\right) - \alpha S_{t-1} + S_{t-1} + \alpha V_t, & t \geq N
+\end{cases}
+$$
+
+Where\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(N\\)* is the length,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(\alpha\\)* is the weighting coefficient. It is a value between 0 and 1,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(t\\)* the time where 0 is the start time,\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(V_t\\)* the value, \\(V\\), at time \\(t\\),\\
+&nbsp;&nbsp;&nbsp;&nbsp;*\\(S_t\\)* the sum at time \\(t\\), this is the same as the EMA at time \\(t\\).
diff --git a/content/blog/2022-11-23-eugen-rochko-ceo-of-mastodon-found-to-support-nazis-agenda.html.md b/content/blog/2022-11-23-eugen-rochko-ceo-of-mastodon-found-to-support-nazis-agenda.html.md
new file mode 100644
index 0000000000000000000000000000000000000000..b44f87c989842ed7918e736736730cbbaec181dc
--- /dev/null
+++ b/content/blog/2022-11-23-eugen-rochko-ceo-of-mastodon-found-to-support-nazis-agenda.html.md
@@ -0,0 +1,139 @@
+---
+title: Eugen Rochko, CEO of Mastodon, Caves to Nazi's Agenda
+date: 2022-11-23
+tags: [Fediverse]
+layout: post
+---
+
+**UPDATE**: Eugen Rochko responded publicly about this and indirectly confirmed what was said here, see update at the end.
+
+I know, clickbait title right? Sadly no. When we say Nazi here we dont just mean your garden variety racist, as bad as that is, but your swastika wielding, genocide wanting, literal Nazi. But lets take a step back for a moment and start from the begining. Its been a long road with many twists and turns, its a very damning accusation, and its important we lay out all the details, show the proof, and give you all the information for you to decide for yourself.
+
+I am the founder of one of the oldest instances (servers) on the Mastodon network, QOTO. It is almost 5 years old and we have been building this network along side Eugen Rochko since the begining. There has been a fair bit of drama and while Eugen Rochko has been more or less consistent in stamping out hate speech and prejudice this seems to be limited to when its popular rather than when its right. But this isnt the story of Eugen, in many ways its the story of QOTO and the impact Eugen has played in the network and towards our little corner of it.
+
+## The begining, the exodus
+
+QOTO was founded in July of 2018 out of a need to create a STEM oriented instance that respected and protected the safety of its userbase, in particular that of the LGBTQ+ community. At its founding the network was much simpler than it was today, only a handful of instances and moderation was simplistic.
+
+QOTO only had a dozen or so users at the time and one morning in July of 2019 when I woke up I noticed we were getting hundreds of new users a day. I had no idea what had changed, excited I started asking around to see why we were so popular. As it turns out there was a fracturing throughout the network underway and QOTO was slowly becoming a focal point. To my shock it turned out that GAB, a social media network filled with hatred, racism, sexism, and all forms of prejudice, had decided to enter the Mastodon network. When this happened instance owners around the network took a hardline approach that divided the network down the middle. On one side instance owners decided to start forcing its users to not be able to see Gab content and blocked them from even seeing instances that did not likewise follow suit, users couldnt follow anyone, even from well behaved instances, if those users were allowed to see Gab at all. On the other side many servers allowed the content unrestricted. To further compound the issue the instances that allowed the content generally had little to no moderation policies themselves, so hate speech ran rampant on those servers. Meanwhile the servers that did block the content tended to be very draconian and were blocking users for very trivial reasons and "dog whistles" and it became a witch hunt. The reason QOTO became a focal point at this time is because we were one of the only servers that allowed our users to choose what content they wanted to block, and made our blocklist optional, but at the same time had a zero tolerance stance for hate speech and prejudice. It became a haven for the LGBTQ+ community that wanted the freedom to choose for themselves what instances make the cut or not.
+
+I think it's important I back up as much as I can with the evidence here, therefore, you can view our strong protections for the LGBTQ+ in QOTO's Terms of Service here: [https://qoto.org/about/more](https://qoto.org/about/more). Below are some excerpts from that link. For the sake of transparency it is important for me to point out in the early days when we were smaller these protections weren't as clearly stated and were added as we grew and the issue needed to be more clearly addressed; however, we have always had a strong emphesis on engaging in respectful discourse and have had a heavy hand when it comes to banning those who engaged in hate speech.
+
+>All cultures welcome
+>
+>Hate speech and harassment strictly forbidden.
+>
+>hate-based speech such as sexist, racist, or homophobic speech will not be tolerated, be kind to each other.
+>
+>QOTO aims to provide a community where our users do not fear being punished for their personal opinions. We do not allow people to disseminate ideologies that are abusive or violent towards others. Demonstrating support for or defending ideologies known to be violent or hateful is a bannable offense. This includes, but is not limited to: racial supremacy, anti-LGBTQ or anti-cis-gender/anti-straight, pro-genocide, child abuse or child pornography, etc. While we recognize questions and conversation regarding these topics are essential for a STEM community, in general, doing so in bad faith will result in immediate expulsion.
+>
+>What will get you banned:
+>...
+>Hate-based racism, sexism, and other hateful speech...
+
+As our numbers quickly grew into the thousands the issue of what to do about Gab and our stance on censorship came under scrutiny. We had to decide officially where we stand and what rules we wanted to make. Since our community at the time was largely made up of the very victims affected by everything going on we felt it best to hold a private discussion to decide how we could best protect the interests of our LGBTQ+ community. We had weeks of discussion and debate around the issue, but there was a strong consensus in the end. You see, there were some very bad actors on the Gab network, people like Milo Yiannopoulos, who had a habit of doxxing and making calls to violence against people in the trans community. Him and people like him were at the center of the debate. As it turns out the overwhelming majority of the LGBTQ+ that had migrated to our server did so because it was one of the few places left they could monitor these bad-actor accounts. They would keep a close eye for attempts at doxxing or calls to violence and then quickly disseminate that to their communities and warn the parties at risk. This was critical for ensuring the safety of the lives of many in our community. We still weren't sure what to do so we discussed alternative ways to monitor these accounts, each of which were shot down for various reasons. I will summarize some of the alternatives we considered and why the community ultimately rejected it below.
+
+**Open an account on Gab for monitoring** - This was immediately rejected as it would expose the victims emails, ip addresses, and usage patterns to the admins of Gab who were not trusted.
+
+**Use RSS feeds** - This wouldn't give access to follower-only posts and were not always enabled on many accounts
+
+**Use a VPN** - VPNs only work when you remember to use it. If a user forgot, even once, to turn on their VPN then their IP would get exposed, a risk they weren't willing to take.
+
+Needless to say we didn't have any good solutions that were in the best interest of our community. In the end we made a very controversial decision. We decided to let people have access to view these accounts but with very strict policies against anyone who would show any support for the hateful content. If anyone was shown to encourage or support the hate coming from these sites they would be immediately met with a ban and we encouraged all new users to import a block list that would block these servers outright, at their discretion.
+
+Unfortunately this caused a lot of backlash. Many instance admins were bitter over losing such a huge chunk of their user base to us, particularly when they perceived their own actions as justice rather than oppressive. Many of the instance admins started misinformation and hate campaigns against QOTO and there was a lot of backlash and QOTO even got on a few block lists as a result. But since the safety of the lives of our LGBTQ+ community were a point we refused to compromise on our stance remained absolute.
+
+Later we even took it one step further. You see in Mastodon when you follow an account this alerts the account that you are following them. This was a big concern since it might expose our LGBTQ+ members who were monitoring accounts and fear for their privacy was at stake. As a result we implemented a unique feature only present at QOTO called subscriptions. It effectively allowed our users to follow an account without alerting the account they were being followed. It was privacy-respecting, however, specifically designed so it only allowed you to see posts a user made as a public post. Any posts that were restricted to follower-only or private could not be seen with a subscribe, you still needed to do a follow for that. Despite the privacy-respecting aspect of the feature the hate and disinformation campaign against QOTO continued by a handful of bitter instance admins. They lied and made announcements about our feature as privacy-violating and claimed, erroneously, that it bypassed security and let users view follower-only content, which of course it didn't. The divide grew even larger, and as it did our following grew even larger too.
+
+## Acceptance on the joinmastodon directory
+
+Despite the divide across the network we still have a huge LGBTQ+ community and a large following in the thousands by this point. We therefore applied to join the joinmastodon.org directory, the official directory of Mastodon maintained by Eugen himself. The criteria for getting on this directory are listed clearly and since we qualified, and because of the applause of our supporters, we eventually made it to the list.
+
+As a specialty instance that caters specifically to the STEM community this was a crucial milestone for us. It increased our influx of new users substantially and allowed us to reach a level of healthy growth. Due to our popularity Eugen generally defended the attacks against us from instance admins still bitter of the earlier exodus. This was looking good for QOTO and the fediverse.
+
+## Enter snow, the Nazi
+
+By this point in the story QOTO had grown to tens of thousands in size and was in fact one of the largest specialty instances in the entire network. Aside from a handful of bitter instance owners our reputation was excellent and we were highly recommended by our peers. We were consistently seeing hundreds of new users a day and we were growing steadily.
+
+In stepped a new user, a software engineer who went by the moniker Snow. At first he seemed unsuspecting and we had no reason to worry about him, but things quickly went downhill. Snow started posting content largely targeted at transgendered individuals criticising the choice to be trans as unhealthy. He quickly was met with opposition from our community and shortly after his hate speech began he found himself blocked from our community. He tried opening alt accounts and to protest the ban but we weren't having any of it, he wasn't welcome back.
+
+Shortly after Snow was booted he tried to join a few other communities to use as a platform to discredit QOTO, some of which were somewhat accepting of hate speech but ultimately he was banned from all of them. Furious and determined Snow started his own instance called wintermute, his profile littered with actual swastikas and Nazi insignia, he called for genocide against trans people and other horrific acts. Sadly he even managed to gain a following at his server of similar minded Nazis.
+
+Snow ultimately used this to his advantage and began coordinating an attack on QOTO whose effects linger to this day. He publicly posted from his main account a call to arms for his followers to flood fake accounts on QOTO and the fediverse at large. Their tactic was to post hate speech on QOTO, then immediately report it across several of the progressive instances around the fediverse in an attempt to make us seem like a pro-nazi forum. While the original post is no longer online as the server has since been taken down you can see a screenshot of this and a related post below.
+
+[![](/images/snowtranshate.png)](/images/snowtranshate.png)
+[![](/images/snownazi.png)](/images/snownazi.png)
+
+Of course QOTO quickly deleted and suspended any accounts posting such content. But because their alts reported it immediately those reports still showed up on hundreds of other servers coming to the attention of their admins. Not only did he coordinate this attack by reporting the content across many servers around the fediverse but he also reported it to several block lists for further visibility. Below is a screenshot of him attempting to report it to the Fediblock block list. The link in the below screenshots originally went to the posts I showed above. Luckily he didn't manage to succeed with Fediblock but he did manage to get us on quite a few block lists as a result.
+
+[![](/images/fediblocksnow.png)](/images/snownazi.png)
+
+Needless to say the previously small number of instance admins that still had an issue with QOTO used this as fuel for the fire. They spread the news of the reports in an attempt to defame QOTO and because the reports were so widespread it worked. QOTO quickly started showing up on numerous block lists around the fediverse. Needless to say it is hard to fight against a misinformation campaign, lies spread faster than truth.
+
+## Picking up the pieces
+
+As the admin of QOTO I was left trying to figure out some way to counter the disinformation that had spread. Like most disinformation campaigns it took on a life of its own. People saw the lies, bought them, and their gut reaction was to hate us without ever bothering to check the facts. Once someone hates you it is very hard to reason with them, the lies compound, gossip ripples, and soon everyone swears they have a cousin who was the victim of an attack. Of course anyone who spent even a moment looking through QOTOs timeline would see we are a place where acceptance and concern for the LGBTQ+ community remains our top priority. We retained a loyal band of supporters, but our enemies were growing no matter how much goodwill we tried to spread.
+
+In an attempt to remedy the situation I decided to reach out to key members in the community and explain the situation. I found a seemingly innocuous website on the internet that listed all the instances that blocked QOTO. I went down the list and started reading the about pages looking to see what administrators had contact information and welcomed people reaching out to them. Of the servers that blocked us about 20% of them explicitly had contact information and welcomed others reaching out about administrative matters. So I started emailing them one by one and tried my best to politely and respectfully explain what had happened in the hopes we could reconcile.
+
+Unfortunately this backfired, many of these administrators had made up their mind before ever hearing our side of it. They used my friendly efforts to reach out and mend things as an attack, going so far as to call it harassment simply for contacting them at all. To add insult to injury it just so happened that the tool used to generate the list that ultimately made its way to the website was written by a member of KiwiFarms, a vile and hateful community. The website itself didn't have any indication of this in the domain name and at the time I was unaware of this fact. Nonetheless this information was used to further defame us, as if we are somehow responsible for the tool a website author happened to use. Regardless of this a new campaign of misinformation and lies spread to try to attack us for emailing them and now the claim is centered around harassment.
+
+For the sake of openness and providing all the evidence the full content of the letter I sent to the administrators mentioned above is included below:
+
+> Hi, I noticed you had QOTO blocked, I figured this might be a mistake as there has, for some time, been attempts to lie about our policies by some users we blocked for hate speech and sadly some of the community followed along.
+>
+> Snow, some years back, was blocked for hate speech and he began a campaign against us spoofing various users claiming we accept hate speech on our instance and other outright lies. At one point he even attempted to create accounts on QOTO that posted hate speech and despite getting suspended shortly after, by doing so in the middle of the night, some of it was noticed for the short time it was up.
+>
+> My guess is some of this misinformation made its way to you and you, understandably, may have blocked our instance.
+>
+> We also had some similar trouble many years ago where the LGBTQ community was being attacked and they fled, en masse to our server (which is how our server became so popular early on). This caused several people to attack us in a similar manner spreading quite a few lies as well.
+>
+> For more information detailing that incident please see this post, it also explains our subscribe feature, which is privacy-respecting and provides the same level of access as using an RSS reader to follow an account: https://qoto.org/@freemo/109319817943835261
+>
+>I urge you to actually review our timeline and see for yourself, hate speech, harassment, misinformation, etc has never been tolerated in our instance and still is not.
+>
+>To recap some of the misinformation:
+>
+>1) We have very strict and aggressively enforced policies against hate speech in all forms, you wont find any on our timeline and if you do and report it you will find it is usually acted on with a suspension very quickly.
+>
+>2) Our subscribe feature is privacy respecting and was specifically implemented to protect the physical safety of our LGBTQ community during their mass exodus to QOTO in the early years. Similarly, for their protection and at their request, is why we only silence servers and do not suspend them (see the post I linked above for the details on this).
+>
+>3) harassment and other issues are also strictly enforced on our server.
+>
+>If you wish to discuss this further please feel free to reach out to me either by email or by reaching out to me at @freemo@qoto.org
+
+## Eugen caves to Nazi's campaign
+
+This leads us to Eugen Rochko's role in all this. Up until this point while QOTO was still popular with the majority of the instances he had defended his position to keep us on the joinmastodon official directory of instances. However with the misinformation spread by Snow and the hate this ultimately generated directly and indirectly from this incident he decided to delist us from the official directory over at joinmastodon.org. He did this knowing full well what happened with Snow, he knew Snow's  efforts were to get us suspended, delisted, and blocked and knowing this was all the agenda of a Nazi and his cohorts he still decided to cave to popular pressure rather than to do what was right and set the record straight and stand by the LGBTQ+ communities safety above popularity. This is a shameful and outright disgusting act on his part. I believe it is fueled largely by the increased visibility Mastodon has had lately as people are migrating en masse from twitter to the network. He cared more about appearances than the actual safety of the lives of the LGBTQ+ community and this is disheartening to say the least.
+
+I had reached out to Eugen and explained the situation in detail. There has also been a huge outpouring of people on both Twitter and Mastodon trying to contact him and get him to see reason. Other than a short email response he has completely refused to even engage in the conversation at all.
+
+There are several concerning consequences of this decision, particularly the silence that accompanies it.
+
+1. It sends the message that as long as a Nazi or other bad actor can generate enough support his demands will be appeased.
+
+2. It lends credibility to the Nazi's claims, giving the impression to others QOTO was delisted because the claims against it were true.
+
+3. It significantly reduces our influx of new users. As a specialty instance it is not easy to find new users as it would b e for a generalist instance.
+
+4. it no longer shows up when trying to connect using the official mastodon app which relies on that list as part of its search. This causes people to have a hard time connecting even if they are already here.
+
+He was aware of the incident with the group of Nazis, he knew their agenda, and in the end he supported the Nazi's agenda to get us banned and delisted because it was the popular thing to do. Nothing more, nothing less. In his own words in the one reply he managed to muster about this incident "I will take a listing down if it risks endangering the reputation of Mastodon". A man who cares more about Mastodon's "reputation" than he does about the physical safety of the LGBTQ+ community has no business being in charge.
+
+# Update: Eugen indirectly verifies content of this article
+
+See Eugen's response here, which I will comment on: [https://mastodon.social/@Gargron/109402824022874888](https://mastodon.social/@Gargron/109402824022874888)
+
+Here is a link to all the changes that occured to our ToC over the last 6 months. As can clearly be seen the only changes made were stronger protections for the LGBTQ and replacing the phrase "free speech" with "Academic Freedom".
+
+[https://web.archive.org/web/diff/20220525221306/20221122160257/qoto.org/about/more](https://web.archive.org/web/diff/20220525221306/20221122160257/qoto.org/about/more)
+
+Which means the only perceived changes he could mean are either greater protections to LGBTQ groups or he is caving to the misinformation spread by Snow.
+
+I already mentioned in the article the emails he refers to, which were sent only to admins with email addresses that welcomed administrative contact. They servered the purpose of alerting them as to Snow's disinformation and an attempt to set the record straight. They were sent, by hand, to a very limited number of admins.
+
+Seems quite clear, even by Eugen's own admission that what I said in this post is completely factual afterall. He did, cave to the misinformation spread by a Nazi.
+
+In case the link to Eugen's response is taken down here is a screenshot:
+
+[![](/images/eugenupdate.png)](/images/eugenupdate.png)
diff --git a/static/files/demonstrations-for-modeling.pdf b/static/files/demonstrations-for-modeling.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..c9039aef856564c05aa3ab5639ebb1430ae593f9
Binary files /dev/null and b/static/files/demonstrations-for-modeling.pdf differ
diff --git a/static/files/rotations-in-n-dimensions.pdf b/static/files/rotations-in-n-dimensions.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b225ed03aa3837626e6b5e10ec36c1279f82f7ac
Binary files /dev/null and b/static/files/rotations-in-n-dimensions.pdf differ
diff --git a/static/files/spacemacs-ultimate-cheatsheet.pdf b/static/files/spacemacs-ultimate-cheatsheet.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..dc4384a5b8dad5cc9bdb00617ec0e7361760018a
Binary files /dev/null and b/static/files/spacemacs-ultimate-cheatsheet.pdf differ
diff --git a/static/files/syncleus-white-example.pdf b/static/files/syncleus-white-example.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..3941282166cfd0e0b1d6de913462d8285b8a09a0
Binary files /dev/null and b/static/files/syncleus-white-example.pdf differ
diff --git a/static/files/united_federation_of_instances_proposal.pdf b/static/files/united_federation_of_instances_proposal.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..c814d9d1b7b4a6a6587c0070b16ba59e89fddc7e
Binary files /dev/null and b/static/files/united_federation_of_instances_proposal.pdf differ
diff --git a/static/images/HowMoneyIsCreated.png b/static/images/HowMoneyIsCreated.png
new file mode 100644
index 0000000000000000000000000000000000000000..cedd65353ff6c9d299c7b145f5740fccbeb9a482
Binary files /dev/null and b/static/images/HowMoneyIsCreated.png differ
diff --git a/static/images/ResGrowthRate.png b/static/images/ResGrowthRate.png
new file mode 100644
index 0000000000000000000000000000000000000000..6bdc0a5408bcceb4510ecd0af85858d755c5b335
Binary files /dev/null and b/static/images/ResGrowthRate.png differ
diff --git a/static/images/ResGrowthRateConst.png b/static/images/ResGrowthRateConst.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e45fa941afced296c3ddfcc6d8ce8a2717a9140
Binary files /dev/null and b/static/images/ResGrowthRateConst.png differ
diff --git a/static/images/ResGrowthRateSlopedEx.png b/static/images/ResGrowthRateSlopedEx.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2c2cd0960260676c1f2c92f52526976db75c49b
Binary files /dev/null and b/static/images/ResGrowthRateSlopedEx.png differ
diff --git a/static/images/ResGrowthSlopedEx.png b/static/images/ResGrowthSlopedEx.png
new file mode 100644
index 0000000000000000000000000000000000000000..b86bc85868c96db088be3bea8001767a733534b7
Binary files /dev/null and b/static/images/ResGrowthSlopedEx.png differ
diff --git a/static/images/ResGrowthSlopedExGraph.png b/static/images/ResGrowthSlopedExGraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..68b9a216fa0b71420c7da6f80f8e49f7890b7235
Binary files /dev/null and b/static/images/ResGrowthSlopedExGraph.png differ
diff --git a/static/images/ResInjGrowthConst.png b/static/images/ResInjGrowthConst.png
new file mode 100644
index 0000000000000000000000000000000000000000..5b27f631bba12c831d74d968058c5fbc2462dd82
Binary files /dev/null and b/static/images/ResInjGrowthConst.png differ
diff --git a/static/images/ResInjGrowthConstExHalf.png b/static/images/ResInjGrowthConstExHalf.png
new file mode 100644
index 0000000000000000000000000000000000000000..b40f4b5b1ffb5a45f66839419c9d8217dc667208
Binary files /dev/null and b/static/images/ResInjGrowthConstExHalf.png differ
diff --git a/static/images/ResInjGrowthConstExHalfGraph.png b/static/images/ResInjGrowthConstExHalfGraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1e7b5d3b7dacab1901e458043d1056990a594aa
Binary files /dev/null and b/static/images/ResInjGrowthConstExHalfGraph.png differ
diff --git a/static/images/ResInjGrowthRate.png b/static/images/ResInjGrowthRate.png
new file mode 100644
index 0000000000000000000000000000000000000000..45a633a638c863aa6b5a8652756e2b29cef09305
Binary files /dev/null and b/static/images/ResInjGrowthRate.png differ
diff --git a/static/images/ResInjGrowthRateConst.png b/static/images/ResInjGrowthRateConst.png
new file mode 100644
index 0000000000000000000000000000000000000000..dd2d33f15d781fd64f1e09be69a9e897d55e10a3
Binary files /dev/null and b/static/images/ResInjGrowthRateConst.png differ
diff --git a/static/images/ResPop.png b/static/images/ResPop.png
new file mode 100644
index 0000000000000000000000000000000000000000..84441bb1759a2f2e2d39d8986c6a458332976672
Binary files /dev/null and b/static/images/ResPop.png differ
diff --git a/static/images/ResPopEx.png b/static/images/ResPopEx.png
new file mode 100644
index 0000000000000000000000000000000000000000..2485ba3183299bbd5f5ec6be7af01d7dc368c95a
Binary files /dev/null and b/static/images/ResPopEx.png differ
diff --git a/static/images/ResPopExGraph.png b/static/images/ResPopExGraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..39d6504988d34e8627b500a4ebebfe6349b980de
Binary files /dev/null and b/static/images/ResPopExGraph.png differ
diff --git a/static/images/UnresGrowRate.png b/static/images/UnresGrowRate.png
new file mode 100644
index 0000000000000000000000000000000000000000..3cece4d4d82badeb47972ad455d011120fbfdeb0
Binary files /dev/null and b/static/images/UnresGrowRate.png differ
diff --git a/static/images/UnresPopEx.png b/static/images/UnresPopEx.png
new file mode 100644
index 0000000000000000000000000000000000000000..f593205d42941fb9aed63bd47468e51166332c4b
Binary files /dev/null and b/static/images/UnresPopEx.png differ
diff --git a/static/images/UnresPopu.png b/static/images/UnresPopu.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1e3dc8e7f064119c454dae13d4f27e1d415ed49
Binary files /dev/null and b/static/images/UnresPopu.png differ
diff --git a/static/images/beofang-chenglish.jpg b/static/images/beofang-chenglish.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f5ac6e866d62b8f74a81071b0d285d95ff09d7c3
Binary files /dev/null and b/static/images/beofang-chenglish.jpg differ
diff --git a/static/images/btv6-active-element.jpg b/static/images/btv6-active-element.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..10e9445a680749438e1bcb73be214bad00e8b685
Binary files /dev/null and b/static/images/btv6-active-element.jpg differ
diff --git a/static/images/btv6-base.jpg b/static/images/btv6-base.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2c36693cf5de6770f4212af82e68f47ecf9a5168
Binary files /dev/null and b/static/images/btv6-base.jpg differ
diff --git a/static/images/cap-low-pass.png b/static/images/cap-low-pass.png
new file mode 100644
index 0000000000000000000000000000000000000000..efa637c3aebae182508b30b6155509ab32da990c
Binary files /dev/null and b/static/images/cap-low-pass.png differ
diff --git a/static/images/complex-permeability-cores.png b/static/images/complex-permeability-cores.png
new file mode 100644
index 0000000000000000000000000000000000000000..01abaf97613515f23755b98c31ce2aa495ac43f6
Binary files /dev/null and b/static/images/complex-permeability-cores.png differ
diff --git a/static/images/dielectric-loss-tangent-angle.png b/static/images/dielectric-loss-tangent-angle.png
new file mode 100644
index 0000000000000000000000000000000000000000..745408d4cac7c1e3cd52336a3bac2ff9c8a4182a
Binary files /dev/null and b/static/images/dielectric-loss-tangent-angle.png differ
diff --git a/static/images/directionalcoupler.jpg b/static/images/directionalcoupler.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a4d0cba5d73b1e3e1ae81b3441836c4c2ad54d2a
Binary files /dev/null and b/static/images/directionalcoupler.jpg differ
diff --git a/static/images/electric-simple.png b/static/images/electric-simple.png
new file mode 100644
index 0000000000000000000000000000000000000000..11c86cb32785a7f0df9a77bf23fd81fad7cb494a
Binary files /dev/null and b/static/images/electric-simple.png differ
diff --git a/static/images/ethereum-rig-clone.jpg b/static/images/ethereum-rig-clone.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e5ab863ca7d1db71baf61770d96cdcc88520b031
Binary files /dev/null and b/static/images/ethereum-rig-clone.jpg differ
diff --git a/static/images/ethereum-rig-front.jpg b/static/images/ethereum-rig-front.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..64de5cbffe8652a82f4bb6a7dc75c6b0e9917978
Binary files /dev/null and b/static/images/ethereum-rig-front.jpg differ
diff --git a/static/images/ethereum-rig-side-lights.jpg b/static/images/ethereum-rig-side-lights.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9b99bab9a0a468fbfafd709151de3fb9e42b6112
Binary files /dev/null and b/static/images/ethereum-rig-side-lights.jpg differ
diff --git a/static/images/ethereum-rig-side-velcro.jpg b/static/images/ethereum-rig-side-velcro.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..852474b8b9f22cfa0fb6c857b9668da01b834f81
Binary files /dev/null and b/static/images/ethereum-rig-side-velcro.jpg differ
diff --git a/static/images/ethereum-rig-side.jpg b/static/images/ethereum-rig-side.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7f5755b2a2921f5e296c0aa7fcfabc2fceb8e1f8
Binary files /dev/null and b/static/images/ethereum-rig-side.jpg differ
diff --git a/static/images/expo.png b/static/images/expo.png
new file mode 100644
index 0000000000000000000000000000000000000000..45d9b47ee4c4c6052dbd7cbcc2ad67bd15ec5218
Binary files /dev/null and b/static/images/expo.png differ
diff --git a/static/images/favicon.ico b/static/images/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..eb6f086d267630f5e91c20d11a0f396f19b93b62
Binary files /dev/null and b/static/images/favicon.ico differ
diff --git a/static/images/fediblocksnow.png b/static/images/fediblocksnow.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5c98768ef7e9144191b0ec7f65b2f7be4e3a6aa
Binary files /dev/null and b/static/images/fediblocksnow.png differ
diff --git a/static/images/great-nebula-trapezium-charted-all.jpg b/static/images/great-nebula-trapezium-charted-all.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..65fe79f8516f313f6565467358955338ce6745d3
Binary files /dev/null and b/static/images/great-nebula-trapezium-charted-all.jpg differ
diff --git a/static/images/great-nebula-trapezium-charted-common.jpg b/static/images/great-nebula-trapezium-charted-common.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..75cb5a1be7bdd2c59409ae667a0492effc2c8136
Binary files /dev/null and b/static/images/great-nebula-trapezium-charted-common.jpg differ
diff --git a/static/images/great-nebula-trapezium.jpg b/static/images/great-nebula-trapezium.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..676dd3d69ddf0ed939dc7374a9918d45bfcb5fa3
Binary files /dev/null and b/static/images/great-nebula-trapezium.jpg differ
diff --git a/static/images/ground-junction.jpg b/static/images/ground-junction.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1c9565bf39eaebc7d5baa0eb31ba1c006af39500
Binary files /dev/null and b/static/images/ground-junction.jpg differ
diff --git a/static/images/ground-rod-wide.jpg b/static/images/ground-rod-wide.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..60edd2fdaa53393375d6037487424218855b5ad9
Binary files /dev/null and b/static/images/ground-rod-wide.jpg differ
diff --git a/static/images/ground-rod.jpg b/static/images/ground-rod.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..93536f14be5bd31b7adbfb6fe12af93615c28df5
Binary files /dev/null and b/static/images/ground-rod.jpg differ
diff --git a/static/images/gyrator-block.png b/static/images/gyrator-block.png
new file mode 100644
index 0000000000000000000000000000000000000000..21e0c7c1504222e611e69664fd91de8a660783e9
Binary files /dev/null and b/static/images/gyrator-block.png differ
diff --git a/static/images/gyrator-transformer-electric.png b/static/images/gyrator-transformer-electric.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab01dcf8fff9babd261284bd7194bc164fedc781
Binary files /dev/null and b/static/images/gyrator-transformer-electric.png differ
diff --git a/static/images/gyrator-transformer-magnetic.png b/static/images/gyrator-transformer-magnetic.png
new file mode 100644
index 0000000000000000000000000000000000000000..58a313f400f2f0534b86251a951503c4dfee625b
Binary files /dev/null and b/static/images/gyrator-transformer-magnetic.png differ
diff --git a/static/images/gyrator.png b/static/images/gyrator.png
new file mode 100644
index 0000000000000000000000000000000000000000..21e305a723240d322c5cb0d9e111271ebe377a26
Binary files /dev/null and b/static/images/gyrator.png differ
diff --git a/static/images/ham-shack.jpg b/static/images/ham-shack.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..174e9fd320737f54553f556fd32754d5be116b99
Binary files /dev/null and b/static/images/ham-shack.jpg differ
diff --git a/static/images/ind-low-pass.png b/static/images/ind-low-pass.png
new file mode 100644
index 0000000000000000000000000000000000000000..35c6a6772c72211f86908ca67b4a7435e59abda4
Binary files /dev/null and b/static/images/ind-low-pass.png differ
diff --git a/static/images/kam-xl-working.jpg b/static/images/kam-xl-working.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ec7f4d55fbefe7e9e82232d68dd5fcd2f3b80ce
Binary files /dev/null and b/static/images/kam-xl-working.jpg differ
diff --git a/static/images/logo0.png b/static/images/logo0.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee6a3a2c454bf06cbeddf12894b6a7a6e38f1004
Binary files /dev/null and b/static/images/logo0.png differ
diff --git a/static/images/magnetic-bandpass.png b/static/images/magnetic-bandpass.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7ced617101b91aefcfeb0987c472b69fed45d20
Binary files /dev/null and b/static/images/magnetic-bandpass.png differ
diff --git a/static/images/magnetic-capacitor.png b/static/images/magnetic-capacitor.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd1a5388546770ef9cc0a1565e633c7d76b88f50
Binary files /dev/null and b/static/images/magnetic-capacitor.png differ
diff --git a/static/images/magnetic-high-pass.png b/static/images/magnetic-high-pass.png
new file mode 100644
index 0000000000000000000000000000000000000000..01ed6864c504b6a5fcb6a216c211d1ad56cea7ab
Binary files /dev/null and b/static/images/magnetic-high-pass.png differ
diff --git a/static/images/magnetic-inductor.png b/static/images/magnetic-inductor.png
new file mode 100644
index 0000000000000000000000000000000000000000..d37537bf8a8b631f3041be79eda12606aae19b06
Binary files /dev/null and b/static/images/magnetic-inductor.png differ
diff --git a/static/images/magnetic-light.png b/static/images/magnetic-light.png
new file mode 100644
index 0000000000000000000000000000000000000000..5ac2c1fd08f22f11068edb04014ed06f059ab895
Binary files /dev/null and b/static/images/magnetic-light.png differ
diff --git a/static/images/magnetic-loss-tangent-angle.png b/static/images/magnetic-loss-tangent-angle.png
new file mode 100644
index 0000000000000000000000000000000000000000..68b73e34e074bc6026b8d5d2ee0e9971b9875f5f
Binary files /dev/null and b/static/images/magnetic-loss-tangent-angle.png differ
diff --git a/static/images/magnetic-simple.png b/static/images/magnetic-simple.png
new file mode 100644
index 0000000000000000000000000000000000000000..a17121979213de88a1d8f672004ec9781e0f0a92
Binary files /dev/null and b/static/images/magnetic-simple.png differ
diff --git a/static/images/mast-insulated.jpg b/static/images/mast-insulated.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4b33637a0a6e608bfcf1de8084a65d04a98c39c9
Binary files /dev/null and b/static/images/mast-insulated.jpg differ
diff --git a/static/images/mastodon.svg b/static/images/mastodon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..26e3b33c230f862b9ec90ed6229b093e7c1f8d3d
--- /dev/null
+++ b/static/images/mastodon.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="61.076954mm" height="65.47831mm" viewBox="0 0 216.4144 232.00976">
+  <path fill="#000" d="M211.80734 139.0875c-3.18125 16.36625-28.4925 34.2775-57.5625 37.74875-15.15875 1.80875-30.08375 3.47125-45.99875 2.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125 0 2.53375.15625 4.94625.46875 7.2025 3.38375 25.68625 25.47 27.225 46.39125 27.9425 21.11625.7225 39.91875-5.20625 39.91875-5.20625l.8675 19.09s-14.77 7.93125-41.08125 9.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23234 213.82 1.40609 165.31125.20859 116.09125c-.365-14.61375-.14-28.39375-.14-39.91875 0-50.33 32.97625-65.0825 32.97625-65.0825C49.67234 3.45375 78.20359.2425 107.86484 0h.72875c29.66125.2425 58.21125 3.45375 74.8375 11.09 0 0 32.975 14.7525 32.975 65.0825 0 0 .41375 37.13375-4.59875 62.915"/>
+  <path fill="#fff" d="M177.50984 80.077v60.94125h-24.14375v-59.15c0-12.46875-5.24625-18.7975-15.74-18.7975-11.6025 0-17.4175 7.5075-17.4175 22.3525v32.37625H96.20734V85.42325c0-14.845-5.81625-22.3525-17.41875-22.3525-10.49375 0-15.74 6.32875-15.74 18.7975v59.15H38.90484V80.077c0-12.455 3.17125-22.3525 9.54125-29.675 6.56875-7.3225 15.17125-11.07625 25.85-11.07625 12.355 0 21.71125 4.74875 27.8975 14.2475l6.01375 10.08125 6.015-10.08125c6.185-9.49875 15.54125-14.2475 27.8975-14.2475 10.6775 0 19.28 3.75375 25.85 11.07625 6.36875 7.3225 9.54 17.22 9.54 29.675"/>
+</svg>
diff --git a/static/images/nodal-analysis-tutorial-1.png b/static/images/nodal-analysis-tutorial-1.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb30202da4d68a1e030d0e489935b380213ebc4a
Binary files /dev/null and b/static/images/nodal-analysis-tutorial-1.png differ
diff --git a/static/images/nodal-analysis-tutorial-2.png b/static/images/nodal-analysis-tutorial-2.png
new file mode 100644
index 0000000000000000000000000000000000000000..2f90cd9f636abf7f157898eb462ccaafcc314209
Binary files /dev/null and b/static/images/nodal-analysis-tutorial-2.png differ
diff --git a/static/images/nodal-analysis-tutorial-3.png b/static/images/nodal-analysis-tutorial-3.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa24758a764211e98694c43dfc1837e035548c72
Binary files /dev/null and b/static/images/nodal-analysis-tutorial-3.png differ
diff --git a/static/images/nodal-analysis-tutorial-4.png b/static/images/nodal-analysis-tutorial-4.png
new file mode 100644
index 0000000000000000000000000000000000000000..20dbe02d1cdbaae2ed6169d23ce2bdadee89c4dc
Binary files /dev/null and b/static/images/nodal-analysis-tutorial-4.png differ
diff --git a/static/images/ohms-law-diagram.png b/static/images/ohms-law-diagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b00d57f53e5070574f8d2d12425e0714a3956d7
Binary files /dev/null and b/static/images/ohms-law-diagram.png differ
diff --git a/static/images/parallel-current-divider.png b/static/images/parallel-current-divider.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6dc39bba285db93c648c78a6254647b9c4867cd
Binary files /dev/null and b/static/images/parallel-current-divider.png differ
diff --git a/static/images/password_strength.png b/static/images/password_strength.png
new file mode 100644
index 0000000000000000000000000000000000000000..e0439fa426f79e089e4489bee12faa8eab5e2097
Binary files /dev/null and b/static/images/password_strength.png differ
diff --git a/static/images/peak-on-pi.jpg b/static/images/peak-on-pi.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d6e3865821878a134b1f54551483fd2db3980260
Binary files /dev/null and b/static/images/peak-on-pi.jpg differ
diff --git a/static/images/peak-screenshot.png b/static/images/peak-screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..441484f8324c31deb4dc990b942c7c277da72391
Binary files /dev/null and b/static/images/peak-screenshot.png differ
diff --git a/static/images/radials-back.jpg b/static/images/radials-back.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f64d9cd48b9e590099079ce4f394255fb86d0270
Binary files /dev/null and b/static/images/radials-back.jpg differ
diff --git a/static/images/radials-front.jpg b/static/images/radials-front.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c0e5cfa61c1e0daec4c5617697b5cb7961f322dd
Binary files /dev/null and b/static/images/radials-front.jpg differ
diff --git a/static/images/remote-tuner.jpg b/static/images/remote-tuner.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..100805e5b21028be083d641be9ffccc232545293
Binary files /dev/null and b/static/images/remote-tuner.jpg differ
diff --git a/static/images/resistivity-permeability.png b/static/images/resistivity-permeability.png
new file mode 100644
index 0000000000000000000000000000000000000000..480ebecec226e4989515ae5ab7dcf33435ee3c63
Binary files /dev/null and b/static/images/resistivity-permeability.png differ
diff --git a/static/images/series-voltage-divider.png b/static/images/series-voltage-divider.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b013540ea7773d7bf40f69a5c8bc02dbb1f8cbd
Binary files /dev/null and b/static/images/series-voltage-divider.png differ
diff --git a/static/images/simple-resistor.png b/static/images/simple-resistor.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c480e8e3b421429cc26ec8894a9b0e67326cd10
Binary files /dev/null and b/static/images/simple-resistor.png differ
diff --git a/static/images/snownazi.png b/static/images/snownazi.png
new file mode 100644
index 0000000000000000000000000000000000000000..8b8a1ebbb346e7c1751b023bbe06add0126a8245
Binary files /dev/null and b/static/images/snownazi.png differ
diff --git a/static/images/snowtranshate.png b/static/images/snowtranshate.png
new file mode 100644
index 0000000000000000000000000000000000000000..9979ccda800725633f9227028aecd1879881ac25
Binary files /dev/null and b/static/images/snowtranshate.png differ
diff --git a/static/images/standingwave.gif b/static/images/standingwave.gif
new file mode 100644
index 0000000000000000000000000000000000000000..5d44dff5b6c5000421142e2e522f74146d88e577
Binary files /dev/null and b/static/images/standingwave.gif differ
diff --git a/static/images/standingwave.png b/static/images/standingwave.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bb5ce6931859fcd75d38116faf72beb7a834616
Binary files /dev/null and b/static/images/standingwave.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-fixed-all.png b/static/images/voltage-divider-syseq-caplow-fixed-all.png
new file mode 100644
index 0000000000000000000000000000000000000000..868c43f3475a37618bae3e6118a2535bf29e53a3
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-fixed-all.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-fixed.png b/static/images/voltage-divider-syseq-caplow-fixed.png
new file mode 100644
index 0000000000000000000000000000000000000000..adc75b673aa4eebbef19b10390115ea1c9de0821
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-fixed.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-flip.png b/static/images/voltage-divider-syseq-caplow-flip.png
new file mode 100644
index 0000000000000000000000000000000000000000..f85d3bbe684f915526c5aff5bc69f3bd95a65527
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-flip.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-path-combine-i.png b/static/images/voltage-divider-syseq-caplow-path-combine-i.png
new file mode 100644
index 0000000000000000000000000000000000000000..1dc26c38a6bbde17f36a4feb6cea58c77e1b97fd
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-path-combine-i.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-path-combine.png b/static/images/voltage-divider-syseq-caplow-path-combine.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7a342338e814eb72c6777ff76e25419e975a300
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-path-combine.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-path-split-2.png b/static/images/voltage-divider-syseq-caplow-path-split-2.png
new file mode 100644
index 0000000000000000000000000000000000000000..403b9bbd2da09c3fb968a4ba4ff90306aaea3a3c
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-path-split-2.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-path-split.png b/static/images/voltage-divider-syseq-caplow-path-split.png
new file mode 100644
index 0000000000000000000000000000000000000000..20fe1c44db2c97a4148aba986690e0d121d604bb
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-path-split.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-path.png b/static/images/voltage-divider-syseq-caplow-path.png
new file mode 100644
index 0000000000000000000000000000000000000000..7462ab2426c572b13109284631cb2f2567e89d06
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-path.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-trans-full.png b/static/images/voltage-divider-syseq-caplow-trans-full.png
new file mode 100644
index 0000000000000000000000000000000000000000..92edc628093a906bb7c938a857e3576ae06c2208
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-trans-full.png differ
diff --git a/static/images/voltage-divider-syseq-caplow-trans.png b/static/images/voltage-divider-syseq-caplow-trans.png
new file mode 100644
index 0000000000000000000000000000000000000000..669e09a0df1e093904286a525843f28c0375da93
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow-trans.png differ
diff --git a/static/images/voltage-divider-syseq-caplow.png b/static/images/voltage-divider-syseq-caplow.png
new file mode 100644
index 0000000000000000000000000000000000000000..daf976eca05aece8ddc55f349d6ce5e18f19e44b
Binary files /dev/null and b/static/images/voltage-divider-syseq-caplow.png differ
diff --git a/static/images/voltage-divider-syseq-fin.png b/static/images/voltage-divider-syseq-fin.png
new file mode 100644
index 0000000000000000000000000000000000000000..817795f6df636a0de93ada32723c6079baf0de1e
Binary files /dev/null and b/static/images/voltage-divider-syseq-fin.png differ
diff --git a/static/images/voltage-divider-syseq-indlow.png b/static/images/voltage-divider-syseq-indlow.png
new file mode 100644
index 0000000000000000000000000000000000000000..7bccb0a6bd0b19598d4f8bf1d343fb0d9b4494e5
Binary files /dev/null and b/static/images/voltage-divider-syseq-indlow.png differ
diff --git a/static/images/voltage-divider-syseq-knowns.png b/static/images/voltage-divider-syseq-knowns.png
new file mode 100644
index 0000000000000000000000000000000000000000..493e718173db3ea291facf478fa9a1c8b6d39496
Binary files /dev/null and b/static/images/voltage-divider-syseq-knowns.png differ
diff --git a/static/images/voltage-divider-syseq-sep.png b/static/images/voltage-divider-syseq-sep.png
new file mode 100644
index 0000000000000000000000000000000000000000..db6b3a5456991e69c58b7c7ea879f621168b35c5
Binary files /dev/null and b/static/images/voltage-divider-syseq-sep.png differ
diff --git a/static/images/voltage-divider-syseq.png b/static/images/voltage-divider-syseq.png
new file mode 100644
index 0000000000000000000000000000000000000000..34e2f282736cdb818d5e7d0e3ca2748d26d51c19
Binary files /dev/null and b/static/images/voltage-divider-syseq.png differ
diff --git a/static/images/voltage-divider.png b/static/images/voltage-divider.png
new file mode 100644
index 0000000000000000000000000000000000000000..fda2f907073bdaa1fa85f40b99c4f30c0ec74d05
Binary files /dev/null and b/static/images/voltage-divider.png differ
diff --git a/static/images/voltagecurrentstandingwave.gif b/static/images/voltagecurrentstandingwave.gif
new file mode 100644
index 0000000000000000000000000000000000000000..0bb28960480432681237666a36ee0905082a5ce3
Binary files /dev/null and b/static/images/voltagecurrentstandingwave.gif differ
diff --git a/static/images/voltagecurrentstandingwave.png b/static/images/voltagecurrentstandingwave.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0ceca1e1e445cde6ca988301a18caad85199018
Binary files /dev/null and b/static/images/voltagecurrentstandingwave.png differ
diff --git a/static/images/wave30phase.jpg b/static/images/wave30phase.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5e8d7c31e3a244dde3b62d571f0b5334cd10cb27
Binary files /dev/null and b/static/images/wave30phase.jpg differ