<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Macleod Sawyer | Web Portal Feed</title>
  <subtitle>The personal website of Macleod Sawyer, Roboticist &amp; Director (CEO) of DNX Industries.</subtitle>
  <link href="https://macleodsawyer.com/feed.xml" rel="self"/>
  <link href=""/>
  <updated>2026-04-11T04:57:14Z</updated>
  <id></id>
  <author>
    <name>Macleod Sawyer</name>
    <email>m@macleodsawyer.com</email>
  </author>
  
  <entry>
    <title>9 Truths Computer Programmers Know That Most People Don&#39;t.</title>
    <link href="https://macleodsawyer.com/blog/nine-truths-computer-programmers-know-that-most-people-dont/"/>
    <updated>2015-05-01T14:51:21Z</updated>
    <id>/blog/nine-truths-computer-programmers-know-that-most-people-dont/</id>
    <content type="html">&lt;p&gt;I wrote this when I was sixteen. While I do believe that &lt;strong&gt;most&lt;/strong&gt; of what is written is still accurate, be warned that it’s intended audiences were those most susceptable to clickbait. &lt;strong&gt;It worked.&lt;/strong&gt; This article was archived from my past blogs, comments have disapeared sadly but you can find quite a few of them here on &lt;a href=&quot;https://news.ycombinator.com/item?id=9164665&quot;&gt;HackerNews&lt;/a&gt; where it remained on the front page for several days. Simpler times.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Computer programmers know far more about computers and code than the average person does, and honestly some of it’s scary.&lt;/p&gt;
&lt;h2 id=&quot;fact-%231&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#fact-%231&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Fact #1&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;“Under the hood, most critical software you use every day (like Mac OS X, or Facebook) contains a terrifying number of hacks and shortcuts that happen to barely fit together into a working whole. It would be like taking apart a brand-new 747 and discovering that the fuel line is held in place by a coat-hanger and the landing gear is attached with duct tape.” — Ben Cherry&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That’s the funny thing about code, the website or program may work beautifully, it may run smoothly, and it may be absolutely beautiful on the front-end side (what the user sees). But, behind everything that makes it work it will have so many errors, and work arounds that barely work and that shouldn’t work, but do for some strange reason.&lt;/p&gt;
&lt;h2 id=&quot;fact-%232&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#fact-%232&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Fact #2&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;That about 25% of the hours spent writing an application are spent figuring out ways the end user will do something wrong.” — Brian Humes&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Everytime we build something, we have to sit back and think of how the end-user will end up fucking it up. What they will click on, what they will write, the phrasing of questions, the language used, and how what we write could be interpreted differently. If we wrote the code like how we would use the project, well then there will be so many issues because we know how the program works, and the end user doesn’t.&lt;/p&gt;
&lt;h2 id=&quot;fact-%233&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#fact-%233&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Fact #3&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;“A programmer is not a PC repair man.” — Ritesh Kumar Gupta&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A programmer is one who deals with algorithms and design principles, not the one who repairs a computer. We may know how the internal workings of a computer work, how code fits together (or rather hacked together as I explained in Fact #1). But, that does not mean we know how to fix hardware. That does not mean we know how to fix that issue you’re having with chrome that makes it crash everytime you open it, or why you’re computer is always overheating and the battery dying. Computers programmers, at the least know how to program computers, not fix them.&lt;/p&gt;
&lt;h2 id=&quot;fact-%234&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#fact-%234&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Fact #4&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;“Programming is thinking, not typing.” — Casey Patton&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Most of programming is spent sleeping, walking around, staring out the window, or doing anything else that helps you relax and think. Relaxing is a major key to programming, its not just sitting down and writing a thousand or more lines or code, and pushing out a program or app. We have to sit down, walk around, and just think. We need to think about how to come up with the concept, fix the issues with it, find a way to make it work, how it’s going to work. Relaxation is the only way we can fix the issues the best way we can.&lt;/p&gt;
&lt;h2 id=&quot;fact-%235&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#fact-%235&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Fact #5&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Counting starts from zero, not one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is important in every programmers life. Counting starts at 0, your “1&amp;quot; is my “0&amp;quot;, your “10&amp;quot; is my “9&amp;quot;. The reason why this is because computer programming is all about efficiency, and even small improvements in efficiency can make big differences at scale.&lt;/p&gt;
&lt;p&gt;And yes, counting from zero is slightly more efficient than starting at 1. Computers are built on a 0 and 1 numbering system that makes up everything (hello binary!). Counting from 0, is just easier and creates efficiency. (you can read more here)&lt;/p&gt;
&lt;h2 id=&quot;fact-%236&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#fact-%236&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Fact #6&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;“Programming is best done “in the zone” — a (pleasant) state of mind where your focus on the task is absolute and everything seems easy. This is probably much like “the zone” for musicians and athletes.” — Morgan Johansson&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ever wondered why programmers are known as night birds? Why we stay up all night? Because it allows us to get into the zone, it allows us to focus on one thing and not have to worry about being interrupted by someone — because they are all asleep. It’s a long stretch of the day where no one is up and no one is calling or trying to talk to us. It’s a great time to program, and think.&lt;/p&gt;
&lt;h2 id=&quot;fact-%237&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#fact-%237&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Fact #7&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Sleeping with a problem, can actually solve it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you have a problem you are told to sleep on it, forget it, put your mind at rest. But, with programmers its the go to way to solve the problem not because it gets us away from it, but because it for whatever reason helps us solve the problem with our code. Many times I have come across an issue, spent hours and hours of work on it, just trying to fix what should should be a simple problem with a simple fix. But, by going to sleep for 20 minutes, an hour, six hours, twelve hours, we can wake up and immediately know the answer to the problem.&lt;/p&gt;
&lt;h2 id=&quot;fact-%238&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#fact-%238&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Fact #8&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;A parent may kill its children if the task assigned to them is no longer needed&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Not something you would like to hear someone say while out, now is it? (and if it is, you should seriously check into a mental health facility, or turn yourself into your local police department).&lt;/p&gt;
&lt;p&gt;It’s not as gory as one would think, programs are written like a hierarchy. With the parent managing the processes below them.&lt;/p&gt;
&lt;p&gt;An example of the parent-child relationship.&lt;/p&gt;
&lt;p&gt;When a parent no longer needs a child they kill it, meaning when a program no longer needs to do something (say send an email), they kill the connections to the server as its not needed, basically killing the child.&lt;/p&gt;
&lt;h2 id=&quot;and-finally%2C-fact-%239&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#and-finally%2C-fact-%239&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; And finally, fact #9&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Just as you’re usually not impressed when we brag about how much we know about computers, we’re not impressed when you brag about how little you know about them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Seriously. Just stop, please it’s annoying. We don’t care. We really really don’t care how proud you are of not wanting to learn new things. Now, its understandable if you are just saying “I don’t know much about computers” or “I’m not really interested in computer programming” but bragging about how much you dont know about computers is just annoying. Stop.&lt;/p&gt;
&lt;p&gt;This article was archived from my past blogs, comments have disapeared sadly but you can find quite a few of them here on HackerNews: &lt;a href=&quot;https://news.ycombinator.com/item?id=9164665&quot;&gt;https://news.ycombinator.com/item?id=9164665 3&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>View everything as optional</title>
    <link href="https://macleodsawyer.com/blog/view-everything-as-optional/"/>
    <updated>2015-05-16T00:00:00Z</updated>
    <id>/blog/view-everything-as-optional/</id>
    <content type="html">&lt;p&gt;Every week I throw up a quote or a saying that comes to mind on this whiteboard that sits on my desk.&lt;/p&gt;
&lt;p&gt;This week it happens to be “View everything as optional”. I have no clue where I came up with it (if I did) or if I saw it online or in a book sometime in the past.&lt;/p&gt;
&lt;p&gt;Now, what do I mean when I say “view everything as optional”? I am talking about your decisions, your life, everything around you. Did you have to get that coffee? Buy that shirt? Go out with friends? Tell your friends you weren’t going out because of other pressing matters (like watching Daredevil all night as I did)?&lt;/p&gt;
&lt;p&gt;Everyone says that saying “No” is the best option. Truth be told that advice is horrible. You shouldn’t always say no to every question thrown at you, you won’t go anywhere with that, you just can’t be successful that way, you’ll have to say yes eventually.&lt;/p&gt;
&lt;p&gt;Instead, think of everything as optional. Think of everything in your life, think of what could’ve been done better if you had just thought about it a little bit more. Don’t just immediately say no because that’s what everyone is pressuring you into saying and especially don’t just immediately say yes because that’s what everyone is pressuring you into saying. Instead, think beyond that, maybe it doesn’t deserve an answer, maybe you honestly just don’t care enough, maybe you’ll realize it isn’t vital to your life.
Think of everything as optional.&lt;/p&gt;
&lt;p&gt;Think of every time you have ever had to answer something, every time someone has told you something is final, that it can’t be fixed, that it just “isn’t possible”, or that you’re “getting ahead of yourself”. Take what they say under consideration, but realize nothing is final when making decisions, realize that everything around you is completely optional.&lt;/p&gt;
&lt;p&gt;Explore your options. Don’t let the world tell you that you only have one option, don’t let them tell you what to think, don’t let them think for you.
Be yourself, and make your own decisions. I realize sometimes it doesn’t work out that way, that some situations just “can’t” be optional, that what has happened, has happened. But, 99.9% of the time it’s “final” and you “can’t do anything about it” is just wrong in the scale of things.&lt;/p&gt;
&lt;p&gt;If you set your mind to it, there is always an option. There is always something you can do. There is always another option that you’re just not thinking about. Even if everything seems empty as if you have no other choices as if you have been cornered as if you can’t go any farther. There is always an option.&lt;/p&gt;
&lt;p&gt;Just look further beyond the questions, the answer is there. I promise. If you just think about it a little bit longer than that split second before giving the “final” answer, you will come to an option that is better and fits more with want you to want than what the other side that is pressuring you wants more. When I say look beyond, I mean it. Take the question apart word by word, take the situation apart and throw away everything you know and look at the events that caused it.&lt;/p&gt;
&lt;p&gt;Life is not an exam.&lt;/p&gt;
&lt;p&gt;There are no multiple choice forms in life, there are no exams. There are options beyond the normal “A” and “B”, and well beyond “C”, “D”, “E”, and “F”. Those options on tests from high school were thrown at you because those could be an answer. Within one of those questions could be the answer that you need to get that perfect score.&lt;/p&gt;
&lt;p&gt;But what happens if the teacher made an error? What happens if that specific question didn’t have the correct answer to it, and you just knew, you just had this gut feeling that you were right and that the test was wrong? Would you speak up? That’s up to you because everything is optional.&lt;/p&gt;
&lt;p&gt;You could just leave it be, you could just fill in the standard back up answer of “C” or you could think harder and ask the people around you, consult the teacher, consult your parents, the internet, textbooks, videos, professors, doesn’t matter as long as you just look beyond.&lt;/p&gt;
&lt;p&gt;If you went for the “C” option you wouldn’t enjoy finding out that later that your gut feeling was right, and that you could’ve said something about it.&lt;/p&gt;
&lt;p&gt;You fell into what society has told you – that there are only predetermined answers – to stop looking farther down the rabbit hole and find the answer that you need to fulfill yourself. Think of all those chances you could’ve had if you had just looked into the question more. It will fuel your doubt, it certainly fuels mine.&lt;/p&gt;
&lt;p&gt;But, the chance at being more right instead of wrong because you looked into it because you went beyond the question and found a new option that wasn’t on the board, will certainly make yourself feel better and that’s because it is better.&lt;/p&gt;
&lt;p&gt;Thinking for yourself, making your own choices, risking everything on a choice you feel is right, from all the research you have done is far more exciting and wonderful than letting the world tell you what your options are.&lt;/p&gt;
&lt;p&gt;Sometimes the world is better at answering questions, sometimes they can make the better calls. But, sometimes they just can’t. I’m not telling you to always overlook what the world is telling you. Take them into consideration, look into them, but also look into the options that can’t be seen, the options that sit beyond the horizon of the black hole that we just can’t, that we just shouldn’t look into.&lt;/p&gt;
&lt;p&gt;Find your own answer, don’t let yourself let the world find your answer. Be your own person. Have your own personality. Have your own choices.&lt;/p&gt;
&lt;p&gt;View everything as optional.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>What is Transhumanism?</title>
    <link href="https://macleodsawyer.com/blog/what-is-transhumanism/"/>
    <updated>2016-12-06T00:00:00Z</updated>
    <id>/blog/what-is-transhumanism/</id>
    <content type="html">&lt;p&gt;Transhumanism (abbreviated as H+ or h+) is an international and intellectual movement that aims to transform the human condition by developing and creating widely available sophisticated technologies to greatly enhance human intellectual, physical, and psychological capacities.&lt;/p&gt;
&lt;p&gt;They promote an interdisciplinary approach to understanding and evaluating the opportunities for enhancing the human life. Attention is given to both present technologies, like genetic engineering and information technology, and anticipated future ones, such as molecular nanotechnology and artificial intelligence.&lt;sup&gt;1&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The enhancement options being discussed include radical extension of human health-span, eradication of disease, elimination of unnecessary suffering, and augmentation of human intellectual, physical, and emotional capacities. Other transhumanist ideas include space colonization and the possibility of creating artificial intelligent machines, along with other potential developments that could profoundly alter the human condition. The ambit is not limited to gadgets and medicine, but encompasses also economic, social, institutional designs, cultural development, and psychological skills and techniques.&lt;sup&gt;1&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Transhumanists view human nature as a “work-in-progress”, something that requires understanding that we need to grow and change as we learn more about the world around us. Transhumanists believe that we (as a species, and as an individual) can take control of our own evolution, and make not only ourselves better, but make the world better through constant iterations of bio-testing.&lt;/p&gt;
&lt;p&gt;Transhumanism is an effort to put a name and movement behind the push for scientific advancement of the human species. They do not believe that anything is purely “natural” and can’t be changed. They believe anything, and everything can be changed, modified, and made better through advancements in medicine, renewable energies, technologies and colonization. This a pro-science, pro-change, pro-human movement.&lt;/p&gt;
&lt;p&gt;I will write more on this in the future, if you have any questions or want to spark a conversation on this you may &lt;a href=&quot;/contact&quot;&gt;get in contact&lt;/a&gt; with me.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;sup&gt;1.&lt;/sup&gt;.Portions of the above are taken from Ethical Issues for the 21st Century by Nick Bostrom)&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Why I am leaving behind nearly one million followers</title>
    <link href="https://macleodsawyer.com/blog/why-i-am-leaving-a-million-followers/"/>
    <updated>2017-01-01T00:00:00Z</updated>
    <id>/blog/why-i-am-leaving-a-million-followers/</id>
    <content type="html">&lt;p&gt;I wrote this when I was announcing why I was leaving behind most of my digital properties and no longer focusing on growing my social media accounts with a brief history describing my journey.&lt;/p&gt;
&lt;p&gt;You can find the article posted to the International Business Times &lt;a href=&quot;https://www.ibtimes.co.in/why-i-am-leaving-behind-nearly-one-million-followers-by-macleod-sawyer-711012&quot;&gt;here&lt;/a&gt; or continue reading below.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The reasons why I wanted to grow in social media are numerous, I haven’t quite figured out the precise reason why I started this journey, but I have a few theories. I may have started using social media to get out of my depression and deprivation of social interactions due to my own introverted-ness and the constant bullying and harassment I received in school. It may have been a need to show the world “who is boss” and who is important through the social currency known as “followers”. It may have been a sense of success when everyone else was telling me to fail, and it may have been a goal created out of spite.&lt;/p&gt;
&lt;p&gt;Whatever it was, I was thirteen. I was a thirteen year old who wanted to rule the world from their keyboard.&lt;/p&gt;
&lt;p&gt;When I was 14, I started producing music, not good music, but it was a hobby I wanted to turn into a career. I was an electronica producer who needed fans. Who wanted to be signed. Who needed marketing.&lt;/p&gt;
&lt;p&gt;I went to Tumblr as my source of marketing. I started a blog called “TheHipsterLifestyle”, it was 2012, and I knew hipsters were big. Within six months I had 25,000 followers.&lt;/p&gt;
&lt;p&gt;My plan was to grow the blog, and then push my absolutely horrendous music to the masses. It worked. A lot of people heard my music, some didn’t have ear drums and really liked it. I eventually got signed to a record label. Once I got signed, I realized I didn’t want to be a producer full time. I wanted to go back to my six year old dreams of being an entrepreneur and turn this into a company either directly, or by using the followers as a way to market a future company. Over the next few years I grew that following to roughly two hundred thousand followers. All organically. Not a single cent was spent.&lt;/p&gt;
&lt;p&gt;When I was 16, I started a company devoted to social analytics and taking in and using our algorithms the different ways that posts created engagements through follows, shares, likes, and more.&lt;/p&gt;
&lt;p&gt;Three months later – the company was acquired. We had nearly a thousand users.&lt;/p&gt;
&lt;p&gt;I kept growing my followings, created dozens of blogs. Most failed. But a good percentage succeeded. Probably around 40%. If I didn’t believe in the blogs or lost interest in the content, I shut them down. That was what caused most of them to fail and I knew it.&lt;/p&gt;
&lt;p&gt;I am 19. I’ve ran more than a few companies in that time, I even dropped out of high school in my 11th year after my company was acquired to focus full time on it. Over the last five years of growing my social media following across Tumblr, Facebook, Twitter, and Instagram I have amassed somewhere around 875,000 followers.&lt;/p&gt;
&lt;p&gt;I am leaving that all behind – at least momentarily.&lt;/p&gt;
&lt;p&gt;I know how to market, and I know how to sell. Over the last two years I have grown tired of social viral focused marketing. I have grown tired of the effort. That’s why this past year I switched full force into politics and education on my blogs. I had great success, lots of growth, and earlier this year I even had my work archived in the Library of Congress for “being a influence on society and politics for future research” or something like that. None of my success would ever have happened if it wasn’t due to 13 year old me wanting to rule the world from my keyboard.&lt;/p&gt;
&lt;p&gt;I am eternally grateful to younger me, that guy knew what was up (he really didn’t, but he thought he did – and I will be proud to say the same in the future about current me as well).&lt;/p&gt;
&lt;p&gt;But I am tired.&lt;/p&gt;
&lt;p&gt;I am tired of constantly seeing so much useless information fill my screen, it hurts. I noticed that the more I use Social Media like Tumblr I get more depressed. Now there is a counter argument that I use Social Media more when I am depressed, but I know it’s linked to social media. Don’t argue with me on this.&lt;/p&gt;
&lt;p&gt;I am launching a new company, a new initiative, something absolutely life changing in the next few months. This project no longer relies on social media, and it requires nearly all of my attention.&lt;/p&gt;
&lt;p&gt;I am leaving nearly all social media so that I can focus. I find myself in my boredom typing “fac” or “tu” into the address bar or mindlessly clicking on the app icons and scrolling before I catch myself.This needs to stop. I deleted my Tumblr app and I severely limited my twitter following list. Want to know what I noticed? My motivation is back, I am reading 1–2 books a week again, and I am happier.&lt;/p&gt;
&lt;p&gt;I want to make this a full-time thing. I want to be happier full-time and I want to be reading and working full-time. I want to be happy.&lt;/p&gt;
&lt;p&gt;The only thing standing in my way is social media, the only thing standing in my way is the constant numbers game that runs through my head. Every day I see my social currency of “followers” go up and down, it’s anxiety inducing and I hate it.&lt;/p&gt;
&lt;p&gt;There is so much potential in these followers and I realize that — but it’s not anything I personally want to get into. I am tired of marketing, I am tired of advertising, and I am tired of continually coming up with content that I really don’t care about. Even the content I do care about (like on my main property), do I really care? Do I really care about the memes? Do I really care about pop culture?&lt;/p&gt;
&lt;p&gt;Not really, and it actually hurts anytime I read through it or share it. I don’t know why I’ve kept it going — again it’s probably the numbers game.&lt;/p&gt;
&lt;p&gt;I stopped caring about followers a long time ago, but it still hurts when I see the numbers drop even by one. If my activity is even on par with the day before than I think I am a failure. If my selfie doesn’t get 200 notes (likes &amp;amp; comments) then I feel bad, and that’s just wrong. This isn’t what is suppose to happen. I shouldn’t let social currency dictate how I feel or my moods. Only I should dictate my feelings and moods. I don’t need anyone else’s permission or approval.&lt;/p&gt;
&lt;p&gt;I just don’t care for social media anymore. I have a lot of followers, nearly a million, and I have a deep “fan” network of people who honestly look up to me. I understand that, and I am eternally grateful for them. I know that one of the only real reasons I have kept blogging is for them. For years, its been about them. I care about them a lot, they have helped me so much, and I know that I have been a huge help to them.&lt;/p&gt;
&lt;p&gt;This decision wasn’t easy, and it’s been something I have been contemplating for two years. I’ve wanted to get away from social media for so long, and have only stayed for the fans — or friends — that I have created along the way. I honestly do love them, but it’s time for me to be me and be happy.&lt;/p&gt;
&lt;p&gt;I require the happiness of focusing and working on my own projects to keep me afloat. Life goes on whether I am online or not. I really do feel bad, I was a mentor to a lot of people, I feel like a failure to them.&lt;/p&gt;
&lt;p&gt;This is a needed evil so that I can move on and live the life that I honestly want to live. A lot of people disagree (my parents included) with this choice. I want to refocus on what I care about, I want to have the time to create this company and try to make the world a better place (cliché I know — but its honest).&lt;/p&gt;
&lt;p&gt;I’m moving into the hardware industry that requires no social marketing in the way that I have created. My followers are spread out all over the world, and very few are from the area that I am in. My followers are 98% millennials between 13 and 22. They are nowhere close to the demographic for my company.&lt;/p&gt;
&lt;p&gt;I want to see this company be a success even if it’s just on a minor scale, and that requires doing everything I can to only do things that will help my direct future with this company. This wasn’t an easy decision in any way. But it’s time for me to move on with my life, leave the work that I owe my entire career and life to, and become better. I owe everything to my awesome followers and the social networks that have made me who I am. I love you guys, you guys mean the world to me.&lt;/p&gt;
&lt;p&gt;But, for now — this is goodbye to my “social empire”. I am just going to post my internal thoughts to Twitter and Medium, and leave behind the behemoth of social currency and tumblr. I don’t know where this will take me, but I know it’s for the best. I will re-evaluate my choice in the next few months. For now, I am putting the accounts on hold.&lt;/p&gt;
&lt;p&gt;Thanks for all the fish.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Social Analytics</title>
    <link href="https://macleodsawyer.com/blog/i-am-tired-of-analytics/"/>
    <updated>2017-01-28T00:00:00Z</updated>
    <id>/blog/i-am-tired-of-analytics/</id>
    <content type="html">&lt;p&gt;For the last several years of my life I have subjected myself to a numbers game that everyone is taking part in.&lt;/p&gt;
&lt;p&gt;I love to write, but I have noticed a depressing result of publishing on existing platforms and there is a singular reason for why I left behind a million followers:&lt;/p&gt;
&lt;p&gt;Analytics.&lt;/p&gt;
&lt;p&gt;Every single platform, Medium, Tumblr, Wordpress, Facebook, and Twitter all have some form of analytical value that they append to writing. Likes, comments, reads, views, recommends, shares, and more are the epicenter of the content that is published.&lt;/p&gt;
&lt;p&gt;A small subset of people create the content, but the honest truth is that the epicenter of the products and platforms are the analytics that are created from that content. I want to write to be an individual for my own personal informational purposes. If other people learn and get an emotional response or attachment then that is great, but I don’t want to associate a number to the content. If I were to write a post, and I see that it doesn’t do as well as some of my other writings then I will naturally correct the rest of my writing to fit into the paradigm of my more popular posts. I don’t want to A/B test my writing to match the audience. I want to write to match my thoughts.&lt;/p&gt;
&lt;p&gt;I could write these all privately and never worry about them, but the issue with a private journal is that you can’t learn or grow from them. You can’t subject yourself to finding people who have similar thoughts. I write for myself, but to also help myself find like minded people or to help those that are struggling with similar thoughts and want to see into someone else’s mind and be affirmed.&lt;/p&gt;
&lt;p&gt;Having thoughts that you believe you are alone in is a punishment onto itself. It’s putting yourself into a cage of self deprivation that is constantly demoralizing and detrimental to your mental health. I don’t know if anyone will learn from my thoughts, but I am in hopes of it. If there is even a chance of helping someone feel more comfortable with themselves that is a success. I want my thoughts to be free and uncensored, but I also want others to be able to read them not for my own personal ego, but to help them realize who they are.&lt;/p&gt;
&lt;p&gt;I have some unconventional thoughts about myself and the world around us, I know I’m not alone in any of them — but some people do and I want to help. Posting my thoughts to larger platforms filters and censors my thoughts by forcing myself into an A/B test cage. I don’t want to do that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Appending analytical value to content is antithetical to the point of content.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Content is meant to be free, and meant to help others and ourselves.&lt;/p&gt;
&lt;p&gt;This won’t be the last time I write about this, I think about this a lot.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Existence requires survival</title>
    <link href="https://macleodsawyer.com/blog/existence-survival/"/>
    <updated>2017-02-02T00:00:00Z</updated>
    <id>/blog/existence-survival/</id>
    <content type="html">&lt;p&gt;Our entire existence has been fueled on the idea of surviving by any means possible.&lt;/p&gt;
&lt;p&gt;We have lived in pain for the entirety of our existence as a species. Without pain we could not have survived, as we wouldn’t have learned how to adapt or improve our way of life from the cold, the heat, minimal water, excessive water, our digestion, or from our numerous predators. We would not have looked for new and better ways to live, and we would not be innovative to create new methods from the materials or tools surrounding us - We have survived where others have failed - simply because we have been innovating as a society to survive.&lt;/p&gt;
&lt;p&gt;To move forward as a society we must always go through tremendous growing pains. Our current economic system was developed and created through pains of past systems. Does this mean that our current capitalistic economic system is the best and ideal system? No. Our current system is just the creation built on the backbones of all others before and during our period of existence, always learning - always innovating.&lt;/p&gt;
&lt;p&gt;Some may ask “what is the point of it all? What is the goal we have been trying to reach?” the answer to this I believe is to build a truly painless existence.&lt;/p&gt;
&lt;p&gt;The goal in life is to move forward, innovate, and create a world where we no longer suffer from physical depressions while holding onto our mental depressions as without it we can not be motivated to move forward, without a villain standing in front of us (even if it is ourselves), we will never move forward.&lt;/p&gt;
&lt;p&gt;Without pain, there is no innovation. Without pain, we have no reason to fight. What makes us alive is our will to fight to minimize the pain that surrounds us.&lt;/p&gt;
&lt;p&gt;We fight for a selfish reason. We fight for what we believe will make our lives easier. We fight to survive longer and easier. We fight to make our pain go away.&lt;/p&gt;
&lt;p&gt;Some people believe we need to discriminate against others, or impede on others rights and way of life to be a better society to make our immediate personal selves have less pain.&lt;/p&gt;
&lt;p&gt;Others believe, like I do, that we need to be focused more on the inclusion of the people around us. We need be less judgmental of others, we need to stop discriminating against others to stop the cycle of discrimination. We believe in coming together and working towards our goal and purpose - to make life easier.&lt;/p&gt;
&lt;p&gt;We have to be accepting to come together and make life easier together. If we work to make life easier, to make life be less painful, then we can work together to end pain.&lt;/p&gt;
&lt;p&gt;The supposed easy way of existing is to focus purely on yourself and no one else around you, to only work towards betterment of yourself and no one else. This is the easy way of thinking, a way of thinking that has never worked in the history of our society and has always led to the end of all past civilizations, the way of thinking that when others take their own lives more seriously and believe that their happiness is more important than the people around them, they can succeed. I understand this point of view, as the hope to be less pained by being exclusionary and independent gives the idea of complete isolationism, but for the existence of our society we must be inclusionary in every thread that is part of the fabric of our society.&lt;/p&gt;
&lt;p&gt;The harder, more effective, and longer lasting way is by coming together and working together to reach a singular goal. That’s what separates people, those who believe they can make their pain go away by being independent and selfish, and those that know that being inclusive leads to a life free of pain through the unification of ideals and work.&lt;/p&gt;
&lt;p&gt;This is why organizations created by and for the people have always been on the right side of history. This is why, when you look at history, the rights of the most inclusive people always prevail. The freedom of people always prevail. The acceptance of each other always prevail.&lt;/p&gt;
&lt;p&gt;Existence is pain, and our goal in life is to find a way to work together to end pain. Without pain we have no reason to fight. We have to have pain to show us the way to come together.&lt;/p&gt;
&lt;p&gt;Existence is painful, but a very necessary evil for good.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Note: I originally published a spec of this back in early 2017, I have since updated that spec to be more descriptive, and better written than the original - this will be perpetually updated&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Updated:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;06/25/17, 10/03/18,&lt;/li&gt;
&lt;li&gt;07/04/22 (changed name from “Existence requires pain” to “Existence requires survival”)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>15 Million U.S Households Are Food Insecure</title>
    <link href="https://macleodsawyer.com/blog/food-insecurity/"/>
    <updated>2018-02-02T00:00:00Z</updated>
    <id>/blog/food-insecurity/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;According to the &lt;a href=&quot;https://www.ers.usda.gov/webdocs/publications/84973/err237_summary.pdf?v=42979&quot;&gt;Department of Agriculture’s Economic Research Service&lt;/a&gt;, 12.3 percent of U.S. households, or 15.6 million households, were food insecure in 2016. Food insecure means that members of the household have a difficult time getting enough to eat at some point during the year because they lack resources. Usually, children are shielded from hunger, and adults will go without food so younger members can eat. But 3.1 million households still had children who experienced food insecurity, which was similar to pre-recession levels in 2007. (Jassica Lai)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is inhumane, and a grave injustice of the government that we are apart of. No one should ever be hungry, no one should ever have to go without food when needed. The very basis of all societies has been the abundance of food in the population, the more food a society has and shares amongst themselves the higher the rate of education, literacy, innovation, and thoughtfulness.&lt;/p&gt;
&lt;p&gt;The very first priority a government should have is to ensure that the citizens have access to clean food, clean air, and medical services. Everything else comes secondary after the freedom of the people. When a government fails to act in accordance with the majority of the people, then something is incredibly wrong. When children are left hungry and thirsty and we as a society let this happen - something is wrong.&lt;/p&gt;
&lt;p&gt;When a &lt;a href=&quot;https://www.msn.com/en-us/lifestyle/whats-hot/desperate-mom-calls-911-saying-she-has-no-food-for-her-kids/ar-BBIwyMG?li=BBnb7Kz&quot;&gt;mother has to call 911 to request assistanc&lt;/a&gt;e because she could not afford food for her four children, and had to go from church to church and organization to organization and be told that they couldn’t help - then something is wrong.&lt;/p&gt;
&lt;p&gt;No one should be hungry, not only for the personal reasons that all people should live happily (some would dispute this) but additionally for the benefits that society would have if the populace was given a constant supply of the very things that are the basis of existence - food, water, and medical attention. Without these, we are just animals preying on those who are smaller (in capital) than the others.&lt;/p&gt;
&lt;p&gt;This is not acceptable, we as a society need to reinvest in our greatest and most basic infrastructure, the people. This needs to change.&lt;/p&gt;
&lt;p&gt;The percentage of food insecurities are progressively going to rise, especially as the population increases and as the government continues to harm the people that make up the country by removing benefits of the people by cutting food stamps, by removing corporate regulations, and lowering the taxes on the wealthy.&lt;/p&gt;
&lt;p&gt;The population is going to increase by two-billion and become a staggering nine-billion by 2050 worldwide. The requirement for food production to keep up with that rate, will need to increase by an additionally staggering 75%. If we don’t start increasing the amount of food security and redistribution to everyone, and we don’t invest in our society through innovations in agriculture, and in all other industries then we will fail even more people.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We need to refocus our government and social policies by investing in more renewable food production, and by investing more into the people by directly funding and developing a real plan for food to stop the food insecurities that are plaguing our society.&lt;/strong&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>The Social Transformation of American Medicine</title>
    <link href="https://macleodsawyer.com/library/social-transformation-american-medicine/"/>
    <updated>2018-03-01T12:00:00Z</updated>
    <id>/library/social-transformation-american-medicine/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title> Calm Black Water (Album)</title>
    <link href="https://macleodsawyer.com/music/calm-black-water-album/"/>
    <updated>2018-10-15T16:28:32Z</updated>
    <id>/music/calm-black-water-album/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title> Reflections of a Floating World (Album)</title>
    <link href="https://macleodsawyer.com/music/reflections-of-a-floating-world-album/"/>
    <updated>2018-10-15T16:30:59Z</updated>
    <id>/music/reflections-of-a-floating-world-album/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Originals: How Non-Confomists Move The World</title>
    <link href="https://macleodsawyer.com/library/originals/"/>
    <updated>2018-10-18T12:00:00Z</updated>
    <id>/library/originals/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>The Tyranny of Metrics</title>
    <link href="https://macleodsawyer.com/library/tyranny-of-metrics/"/>
    <updated>2018-11-12T12:00:00Z</updated>
    <id>/library/tyranny-of-metrics/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>The Simple Joy of &quot;No Phones&quot;</title>
    <link href="https://macleodsawyer.com/blog/the-simple-joy-of-no-phone/"/>
    <updated>2018-11-13T00:00:00Z</updated>
    <id>/blog/the-simple-joy-of-no-phone/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;“Every time someone in a group of people deploys a screen, the whole group is affected. Each disengaged person in a crowd is like a little black hole, a dead zone for social energy, radiating a noticeable field of apathy towards the rest of the room and what’s happening there.” - &lt;a href=&quot;https://www.raptitude.com/2018/11/joy-no-phones/&quot;&gt;The Simple Joy of “No Phones”&lt;/a&gt; by David Cain&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The rate of smartphone addiction is far more prevalent, and destructive compared to the new &lt;a href=&quot;http://www.who.int/features/qa/gaming-disorder/en/&quot;&gt;WHO (World Health Organization) “Video Game Addiction Disorder”&lt;/a&gt;, as a person who was incredibly addicted to their devices to post over a dozen (sometimes hundreds!) of times a day through my social media accounts for nearly a decade, I know first hand the emotional, physical, and mentally destructive turmoil of smart-device addiction and from the hundreds of conversations I’ve had from the average person, psychologists. professors, and user experience developers this is becoming far more prevalent, understood, and accepted - that a smartphone is a “little black hole, a dead zone for social energy, radiating a noticeable field of apathy towards the rest of the room and what’s happening there”.&lt;/p&gt;
&lt;p&gt;I have noticed this effect myself - the moment someone begins to tune-out by using their device in a situation, the rest of the group at hand will begin to feel envious of using their own devices as if that minuscule action of one has been amplified to an eleven demanding that everyone in the vicinity join them in using their personal devices. This is similar to cigarette smoking, where if one person lights up - everyone must light up.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I imagine that in another decade or two we’ll look at 2010s-era device use something like we do now with cigarette smoking. I was born in 1980, and I remember smoking sections on planes, which is unthinkable today. I wonder if today’s kids will one day vaguely remember the brief, bizarre time when people didn’t think twice about lighting up a screen in the middle of a darkened concert hall.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the future, I believe we will begin to have restaurants, concerts, parks, meetings and more begin banning smart-devices - and even begin implementing an automated NFC locking mechanisms that severely limit the interactions of the device (allowing emergency calls, cameras, etc) depending on the situation and the event. Regardless, socially I believe that the tide has already started heading this way - that we will begin phasing out smart devices in public settings.&lt;/p&gt;
&lt;p&gt;There is nothing wrong with using your smartphones, enjoy them, use them, they are the greatest communication methods that our species has ever created and has helped create a world more of equality than ever before -  but be wise in your usage, and attempt to limit when and where you use them not just for yourself, but for the world around you.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Coming of Age (Album) </title>
    <link href="https://macleodsawyer.com/music/coming-of-age-album/"/>
    <updated>2018-11-30T17:23:57Z</updated>
    <id>/music/coming-of-age-album/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Kadaif (Album)</title>
    <link href="https://macleodsawyer.com/music/kadaif-album/"/>
    <updated>2019-01-02T17:04:11Z</updated>
    <id>/music/kadaif-album/</id>
    <content type="html">&lt;iframe style=&quot;border: 0; width: 100%; height: 373px;&quot; src=&quot;https://bandcamp.com/EmbeddedPlayer/album=56029907/size=large/bgcol=333333/linkcol=0f91ff/artwork=small/transparent=true/&quot; seamless=&quot;&quot;&gt;&lt;a href=&quot;http://turkishdelight1.bandcamp.com/album/kadaif&quot;&gt;Kadaif by Turkish Delight&lt;/a&gt;&lt;/iframe&gt;
</content>
  </entry>
  
  <entry>
    <title>Life at the Speed of Light: From The Double Helix to the Dawn of Digital Life</title>
    <link href="https://macleodsawyer.com/library/life-at-the-speed-of-life/"/>
    <updated>2019-01-05T12:00:00Z</updated>
    <id>/library/life-at-the-speed-of-life/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Capitalism in America</title>
    <link href="https://macleodsawyer.com/library/capitalism-america/"/>
    <updated>2019-01-22T12:00:00Z</updated>
    <id>/library/capitalism-america/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Digital Minimalism</title>
    <link href="https://macleodsawyer.com/library/digital-minimalism/"/>
    <updated>2019-02-06T12:00:00Z</updated>
    <id>/library/digital-minimalism/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>The Age of Surveillance Capitalism</title>
    <link href="https://macleodsawyer.com/library/surveillance-capitalis/"/>
    <updated>2019-03-10T12:00:00Z</updated>
    <id>/library/surveillance-capitalis/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>DNA Data Storage: A Solution for the Digital Dark Age?</title>
    <link href="https://macleodsawyer.com/blog/dna-storage/"/>
    <updated>2019-03-28T23:42:00Z</updated>
    <id>/blog/dna-storage/</id>
    <content type="html">&lt;p&gt;The University of Washington (funded-and-in-partnership with Microsoft) have published &lt;a href=&quot;https://www.nature.com/articles/s41598-019-41228-8&quot;&gt;a new paper&lt;/a&gt; on the capabilities of data storage and retrieval using synthetic DNA with a standard base of ATGC. (*this does not include the chances of using synthetic nucleotides such as X/Y or others, an entire topic to get into later).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In a simple proof-of-concept test, the team successfully encoded the word “hello” in snippets of fabricated DNA and converted it back to digital data using a fully automated end-to-end system, which is described in a &lt;a href=&quot;https://www.nature.com/articles/s41598-019-41228-8&quot;&gt;new paper&lt;/a&gt; published March 21 in Nature Scientific Reports.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a step towards a data storage method that will ensure that the information we create will be able to sustain itself without intervention for potentially tens of thousands (hundreds of thousands by some accounts) years. The current state of data storage is in a very tight spot with our current strategies - information can quickly (and will) disappear with faulty backups, mismanagement, or antiquated drive systems in the next 20 years.&lt;/p&gt;
&lt;p&gt;A more recent example of this would by the loss of geocities where a vast majority of content creation, media, theories, discussions and more of the early internet (1994 - 2009) have become impossible to view or see as the systems in place have gone away for eternity. Another recent example would be Myspace which just in the last few weeks confirmed that their entire musical archives from 2005-2015 were corrupted in a “data migration” and now without any way of retrieval. Over a decade of music on what was one of the first musical social networks are  now gone as if it never existed in the first place.&lt;/p&gt;
&lt;p&gt;“&lt;strong&gt;If a tree falls in a forest and no one is around to hear it, does it make a sound?&lt;/strong&gt;” In the case of Myspace - what tree?&lt;/p&gt;
&lt;p&gt;There are several reasons for this “Digital Dark Age” where most of which will be due to server costs (hardware/bandwidth), personnel costs (management/upkeep), and pure negligence. There are several organizations working towards the storage of all information created on the internet - Internet Archive (Wayback Machine), Archive.is, and many others. This will not stop the digital dark age from happening, as already mentioned geocities, myspace, and millions of other communities have disappeared into the aether and became one with the void, but at the very least someone is &lt;em&gt;trying&lt;/em&gt; to save out history.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Now, a proposed method that would stop the future destruction of our modern reality is by embracing DNA data storage systems.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#how-it-works&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; How it works&lt;/h2&gt;
&lt;p&gt;“Information is stored in synthetic DNA molecules created in a lab, not DNA from humans or other living things, and can be encrypted before it is sent to the system. While sophisticated machines such as synthesizers and sequencers already perform key parts of the process, many of the intermediate steps until now have required manual labor in the research lab. But that wouldn’t be viable in a commercial setting”, said Chris Takahashi, senior research scientist at the UW’s &lt;a href=&quot;https://www.cs.washington.edu/&quot;&gt;Paul G. Allen School of Computer Science &amp;amp; Engineering&lt;/a&gt; “You can’t have a bunch of people running around a datacenter with pipettes — it’s too prone to human error, it’s too costly and the footprint would be too large,”.&lt;/p&gt;
&lt;p&gt;But, The UW team, in collaboration with Microsoft, are developing a programmable system that automates lab experiments by &lt;strong&gt;harnessing the properties of electricity and water to move droplets around on a grid of electrodes.&lt;/strong&gt; The full stack of software and hardware, nicknamed &lt;a href=&quot;http://misl.cs.washington.edu/projects/puddle.html&quot;&gt;“Puddle” and “PurpleDrop&lt;/a&gt;,” can mix, separate, heat or cool different liquids and run lab protocols.&lt;/p&gt;
&lt;p&gt;The automated DNA data storage system uses software developed by the Microsoft and UW team that converts the ones and zeros of digital data into the As, Ts, Cs and Gs that make up the building blocks of DNA. Then it uses inexpensive, largely off-the-shelf lab equipment to &lt;strong&gt;flow the necessary liquids and chemicals into a synthesizer that builds manufactured snippets of DNA and to push them into a storage vessel.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When the system needs to retrieve the information, it adds other chemicals to properly prepare the DNA and uses microfluidic pumps to push the liquids into other parts of the system that “read” the DNA sequences and convert it back to information that a computer can understand.&lt;/p&gt;
&lt;img src=&quot;https://media.springernature.com/m685/springer-static/image/art%3A10.1038%2Fs41598-019-41228-8/MediaObjects/41598_2019_41228_Fig1_HTML.png&quot; /&gt;
&lt;h2 id=&quot;the-cost-of-production&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#the-cost-of-production&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; The cost of production&lt;/h2&gt;
&lt;p&gt;The current cost of the UW/Microsoft system is roughly ten thousand dollars using off the shelf mechanical hardware and software. While the current rate of “Hello” per 21 hours is not ideal - the UW research team believes they can achieve far faster results in a very near future by cutting it down to just a few hours. While this is not ideal for mass production and usage- as a proof-of-concept this is a fundamental game changer for our data-centric modern reality, and our increasingly data-centric future.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;There is a lot of research in this area and this is just the start, I am looking forward to our future data architectures be built on the same core structures as all of us, DNA, a more cost effective, smaller, data system.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Hacking Darwin</title>
    <link href="https://macleodsawyer.com/library/hacking-darwin/"/>
    <updated>2019-04-29T12:00:00Z</updated>
    <id>/library/hacking-darwin/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Code Name Ginger: The Story Behind Segway</title>
    <link href="https://macleodsawyer.com/library/code-name-ginger/"/>
    <updated>2019-05-15T12:00:00Z</updated>
    <id>/library/code-name-ginger/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Gods and Robots: Myths, Machines, and Ancient Dreams of Technology</title>
    <link href="https://macleodsawyer.com/library/gods-and-robots/"/>
    <updated>2019-05-27T07:00:36Z</updated>
    <id>/library/gods-and-robots/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Makers: The New Industrial Revolution</title>
    <link href="https://macleodsawyer.com/library/makers/"/>
    <updated>2019-06-10T05:00:00Z</updated>
    <id>/library/makers/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Dealers of Lightning: Xerox PARC and the Dawn of the Computer Age</title>
    <link href="https://macleodsawyer.com/library/dealers-of-lightning/"/>
    <updated>2019-06-14T06:55:50Z</updated>
    <id>/library/dealers-of-lightning/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Against the Odds: An Autobiography</title>
    <link href="https://macleodsawyer.com/library/james-dyson/"/>
    <updated>2019-07-01T06:54:18Z</updated>
    <id>/library/james-dyson/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Big Science: Ernest Lawrence and the Invention that Launched the Military-Industrial Complex</title>
    <link href="https://macleodsawyer.com/library/big-science/"/>
    <updated>2019-07-28T12:00:00Z</updated>
    <id>/library/big-science/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title> Sponsored Content </title>
    <link href="https://macleodsawyer.com/music/music-sponsored-content/"/>
    <updated>2019-08-01T06:08:06Z</updated>
    <id>/music/music-sponsored-content/</id>
    <content type="html">&lt;p&gt;I’ve been listening to this since release in ‘17; a very strange, calming, and terrifying soundscape of our modern world.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>  Annihilation (Album)</title>
    <link href="https://macleodsawyer.com/music/annihilation-album/"/>
    <updated>2019-08-01T15:49:12Z</updated>
    <id>/music/annihilation-album/</id>
    <content type="html">&lt;iframe style=&quot;border: 0; width: 350px; height: 786px;&quot; src=&quot;https://bandcamp.com/EmbeddedPlayer/album=655747729/size=large/bgcol=333333/linkcol=0f91ff/transparent=true/&quot; seamless=&quot;&quot;&gt;&lt;a href=&quot;http://streetcleaner.bandcamp.com/album/annihilation&quot;&gt;Annihilation by Street Cleaner&lt;/a&gt;&lt;/iframe&gt;
</content>
  </entry>
  
  <entry>
    <title>Memoirs Of A Rat Queen (Album) </title>
    <link href="https://macleodsawyer.com/music/music-memoirs-of-a-rat-queen-album/"/>
    <updated>2019-09-09T07:08:28Z</updated>
    <id>/music/music-memoirs-of-a-rat-queen-album/</id>
    <content type="html">&lt;p&gt;&lt;strong&gt;This might be the strongest album released this year. This is truly a definitional (modern) epic album.&lt;/strong&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Gay Berlin: Birthplace of a Modern Identity</title>
    <link href="https://macleodsawyer.com/library/gay-berlin/"/>
    <updated>2019-09-09T12:00:00Z</updated>
    <id>/library/gay-berlin/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title> Dying on the Mountain </title>
    <link href="https://macleodsawyer.com/music/music-dying-on-the-mountain/"/>
    <updated>2019-09-30T06:00:01Z</updated>
    <id>/music/music-dying-on-the-mountain/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>The Lunar Men: Five Friends Whose Curiosity Changed the World</title>
    <link href="https://macleodsawyer.com/library/lunar-men/"/>
    <updated>2019-10-28T06:48:22Z</updated>
    <id>/library/lunar-men/</id>
    <content type="html">&lt;p&gt;This was a great book about some of the greatest minds (Erasmus Darwin) in history and their connections to one another (Lunar Society of Birmingham).&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>No God? No Problem</title>
    <link href="https://macleodsawyer.com/music/music-no-god-no-problem/"/>
    <updated>2019-10-31T06:00:01Z</updated>
    <id>/music/music-no-god-no-problem/</id>
    <content type="html">&lt;p&gt;Good riffs, good vocals, and even better grooves.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>The Revolutionary Genius of Plants: A New Understanding of Plant Intelligence and Behavior</title>
    <link href="https://macleodsawyer.com/library/revolutionary-genius-of-plants/"/>
    <updated>2019-11-01T06:42:57Z</updated>
    <id>/library/revolutionary-genius-of-plants/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Citizen Scientist: Searching for Heroes and Hope in an Age of Extinction</title>
    <link href="https://macleodsawyer.com/library/citizen-scientist/"/>
    <updated>2019-12-06T00:00:00Z</updated>
    <id>/library/citizen-scientist/</id>
    <content type="html">&lt;p&gt;I have been using the term ‘citizen scientist’ to describe myself for years so when I saw this book on the shelves in my favorite section of the local library - I had to read it, and I am better for it.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Astrobiology: A Brief Introduction (Second Edition) </title>
    <link href="https://macleodsawyer.com/library/books-astrobiology-a-brief-introduction-second-edition/"/>
    <updated>2019-12-10T00:48:36Z</updated>
    <id>/library/books-astrobiology-a-brief-introduction-second-edition/</id>
    <content type="html">&lt;p&gt;This was a fantastic book focused on the history (and future) of the upcoming field of astrobiology. Highly recommended for anyone curious on the stars.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Aggressive Hauntings</title>
    <link href="https://macleodsawyer.com/music/music-aggressive-hauntings/"/>
    <updated>2019-12-12T14:12:16Z</updated>
    <id>/music/music-aggressive-hauntings/</id>
    <content type="html">&lt;p&gt;The instrumentals on this album are a great callback to the height of more hair-metal/rock of the 1980’s. Has some obvious early Mötley Crüe and Van Halen influences. The vocals aren’t perfect (mastering issues?), but I am more than happy to hear a band with this type of sound making a comeback.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Live at Madison Square Garden (Live Video)</title>
    <link href="https://macleodsawyer.com/music/music-live-at-madison-square-garden-live-video/"/>
    <updated>2019-12-17T17:00:04Z</updated>
    <id>/music/music-live-at-madison-square-garden-live-video/</id>
    <content type="html">&lt;iframe width=&quot;100%&quot; height=&quot;450&quot; src=&quot;https://www.youtube.com/embed/rv4wf7bzfFE&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;Link to the live album: https://vulfpeck.bandcamp.com/album/live-at-madison-square-garden&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Cruising: An Intimate History of a Radical Pastime</title>
    <link href="https://macleodsawyer.com/library/cruising-an-intimate-history-of-a-radical-pastime/"/>
    <updated>2020-01-06T17:57:04Z</updated>
    <id>/library/cruising-an-intimate-history-of-a-radical-pastime/</id>
    <content type="html">&lt;p&gt;“Espinoza’s book stands out as a beacon for future queer writers,
thinkers, and activists. Reading these accounts, I felt myself drawn
into a past both wonderful and strange, a world I hope we will continue
to celebrate and preserve.” --Garrard Conley&lt;/p&gt;
&lt;p&gt;From ancient Greece to Grindr, the underground practice of cruising has changed in fascinating ways, and also not at all.&lt;/p&gt;
&lt;p&gt;Acclaimed author Alex Espinoza takes readers on an uncensored journey through the underground, to reveal the timeless art of cruising. Combining historical research and oral history with his own personal experience, Espinoza examines the political and cultural forces behind this radical pastime. From Greek antiquity to the notorious Molly houses of 18th century England, the raucous 1970s to the algorithms of Grindr, Oscar Wilde to George Michael, cruising remains at once a reclamation of public space and the creation of its own unique locale—one in which men of all races and classes interact, even in the shadow of repressive governments. In Uganda and Russia, we meet activists for whom cruising can be a matter of life and death; while in the West he shows how cruising circumvents the inequalities and abuses of power that plague heterosexual encounters. Ultimately, Espinoza illustrates how cruising functions as a powerful rebuke to patriarchy and capitalism—unless you are cruising the department store restroom, of course.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Improper Bostonians: Lesbian and Gay History from the Puritans to Playland</title>
    <link href="https://macleodsawyer.com/library/improper-bostonians-lesbian-and-gay-history-from-the-puritans-to-playland/"/>
    <updated>2020-01-13T04:13:08Z</updated>
    <id>/library/improper-bostonians-lesbian-and-gay-history-from-the-puritans-to-playland/</id>
    <content type="html">&lt;p&gt;A Harvard student expelled for cross-dressing in the early 1600s, 17th-century citizens fined for same-sex cohabitation, touring female impersonators of the nineteenth century, early 20th-century women who passed as men and married other women . . .Surprising, fun, and magnificently illustrated, Improper Bostoniansis the first book to depict the last three centuries of gay and lesbian life in Boston - the American city with the longest recognized history of gay and lesbian life - and is the most comprehensive and meticulously researched gay city history ever written.&lt;/p&gt;
&lt;p&gt;Surprising, fun, and magnificently illustrated, Improper Bostonians is the first book to depict the last three centuries of gay and lesbian life in Boston - the American city with the longest recognized history of gay and lesbian life - and is the most comprehensive and meticulously researched gay city history ever written.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title> Atomic Adventures: Secret Islands, Forgotten N-Rays, and Isotopic Murder: A Journey into the Wild World of Nuclear Science</title>
    <link href="https://macleodsawyer.com/library/atomic-adventures-secret-islands-forgotten-n-rays-and-isotopic-murder-a-journey-into-the-wild-world-of-nuclear-science/"/>
    <updated>2020-01-20T22:58:25Z</updated>
    <id>/library/atomic-adventures-secret-islands-forgotten-n-rays-and-isotopic-murder-a-journey-into-the-wild-world-of-nuclear-science/</id>
    <content type="html">&lt;p&gt;“Whether you are a scientist or a poet, pro-nuclear energy or staunch opponent, conspiracy theorist or pragmatist, James Mahaffey’s books have served to open up the world of nuclear science like never before. With clear explanations of some of the most complex scientific endeavors in history, Mahaffey’s new book looks back at the atom’s wild, secretive past and then toward its potentially bright future.”&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Life On Other Planets (Album)</title>
    <link href="https://macleodsawyer.com/music/life-on-other-planets-album/"/>
    <updated>2020-02-16T13:06:56Z</updated>
    <id>/music/life-on-other-planets-album/</id>
    <content type="html">&lt;p&gt;Moon Hooch has been one of my favorite acts since their first album release. Many years ago I heard ‘Number 6’ playing in the background of a coffee shop and I just caught just the tail-end of the track to find it. I absolutely fell in love with the sheer creativity of their work.&lt;/p&gt;
&lt;p&gt;Every release of theirs is absolutely special, I own their album ‘Red Sky’ on Vinyl and will be doing the same with this one. I have listened to it multiple times back-to-back now, and found ‘Bronst’ to be the best one on the album. ‘Too Much Hooch’ is exceptionally good as well.&lt;/p&gt;
&lt;iframe style=&quot;border: 0; width: 400px; height: 439px;&quot; src=&quot;https://bandcamp.com/EmbeddedPlayer/album=842229395/size=large/bgcol=ffffff/linkcol=0687f5/artwork=small/transparent=true/&quot; seamless=&quot;&quot;&gt;&lt;a href=&quot;http://moonhooch.bandcamp.com/album/life-on-other-planets&quot;&gt;Life on Other Planets by Moon Hooch&lt;/a&gt;&lt;/iframe&gt;
</content>
  </entry>
  
  <entry>
    <title>Symphonie fantastique: Épisode de la vie d&#39;&#39;un artiste… en cinq parties</title>
    <link href="https://macleodsawyer.com/music/symphonie-fantastique-épisode-de-la-vie-dun-artiste…-en-cinq-parties/"/>
    <updated>2020-03-19T03:29:16Z</updated>
    <id>/music/symphonie-fantastique-épisode-de-la-vie-dun-artiste…-en-cinq-parties/</id>
    <content type="html">&lt;p&gt;This is a seminal piece of art from beginning to the very end. This specific recording is my favorite out of the dozen I have had the pleasure of listening to (and one with complete displeasure).&lt;/p&gt;
&lt;p&gt;The 1968 New Philharmonia Orchestra production is the one with the fullest sound, and the greatest creative insight that I believe that the composer, Hector Berlios, would have been proud to hear when he first wrote the piece in 1830.&lt;/p&gt;
&lt;p&gt;Translation of the title is ‘F&lt;em&gt;antastical Symphony: Episode in the Life of an Artist … in Five Sections&lt;/em&gt;)’.&lt;/p&gt;
&lt;iframe width=&quot;100%&quot; height=&quot;400px&quot; src=&quot;https://www.youtube.com/embed/ewoAW-Zyuj8&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;</content>
  </entry>
  
  <entry>
    <title>Skapanir</title>
    <link href="https://macleodsawyer.com/music/skapanir/"/>
    <updated>2020-04-27T10:41:39Z</updated>
    <id>/music/skapanir/</id>
    <content type="html">&lt;p&gt;Danheim has been one of my favorite modern composers for the last few years and this new album has just solidified his place as one of the greats.&lt;/p&gt;
&lt;p&gt;The guttural sounds, the throat singing, the orchestral overtones, everything about this record is quintessential Danheim.&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/Va297erJjJ4&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;</content>
  </entry>
  
  <entry>
    <title>The Hardware Hacker: Adventures in Making and Breaking Hardware </title>
    <link href="https://macleodsawyer.com/library/the-hardware-hacker-adventures-in-making-and-breaking-hardware/"/>
    <updated>2020-04-27T19:40:42Z</updated>
    <id>/library/the-hardware-hacker-adventures-in-making-and-breaking-hardware/</id>
    <content type="html">&lt;p&gt;This was a refreshing read from my standard selections and a fair amount of condensed information - every page has atleast three things you can learn from it.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Human. :II: Nature.</title>
    <link href="https://macleodsawyer.com/music/human-ii-nature/"/>
    <updated>2020-05-01T10:37:45Z</updated>
    <id>/music/human-ii-nature/</id>
    <content type="html">&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/videoseries?list=PLOG_dt6zFUAi--nnwfSgZC55qJSfmZGAk&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;This album has absolutely astounded and captivated my eardrums for the last several days as this has been playing on repeat.&lt;/p&gt;
&lt;p&gt;The song “Noise” is one of my favorites on this and I highly suggest starting with it.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>The Company: A Short History of a Revolutionary Idea</title>
    <link href="https://macleodsawyer.com/library/the-company-a-short-history-of-a-revolutionary-idea/"/>
    <updated>2020-05-27T19:44:58Z</updated>
    <id>/library/the-company-a-short-history-of-a-revolutionary-idea/</id>
    <content type="html">&lt;p&gt;Fascinating, albeit quick read.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Born on the Links: A Concise History of Golf</title>
    <link href="https://macleodsawyer.com/library/born-on-the-links-a-concise-history-of-golf/"/>
    <updated>2020-07-16T02:06:36Z</updated>
    <id>/library/born-on-the-links-a-concise-history-of-golf/</id>
    <content type="html">&lt;p&gt;From the hairie (a golf ball made from cows hair), to the featherie (feathers from geese, wrapped in paint), to the gutta-percha (made from rubber).&lt;/p&gt;
&lt;p&gt;This books tells the story of the way the rules were written (or not, for the first two hundred years), the bans on golf, the price of admission, winnings and losses of the greatest players and games of all time, and to the marketability of the game itself and the ‘superstars’ that the game requires.&lt;/p&gt;
&lt;p&gt;This was an interesting book that dragged on for large swaths on needless descriptors of specific games with every stroke, putt, and tee setting.  I didn’t see a reason for doing so, there were a few detailed games that were very well written and exciting, but for the most part this was not needed.&lt;/p&gt;
&lt;p&gt;I enjoyed the book, and anyone who is a fan of golf should pick it up - but you may just need to skim those sections as they take up quite a bit of the second half of the book.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>The Fabric of Reality: The Science of Parallel Universes</title>
    <link href="https://macleodsawyer.com/library/the-fabric-of-reality-the-science-of-parallel-universes/"/>
    <updated>2020-07-18T01:04:02Z</updated>
    <id>/library/the-fabric-of-reality-the-science-of-parallel-universes/</id>
    <content type="html">&lt;p&gt;One Word: &lt;em&gt;&lt;strong&gt;Brilliant&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>The Fourth Discontinuity: The Co-Evolution of Humans and Machines</title>
    <link href="https://macleodsawyer.com/library/the-fourth-discontinuity-the-co-evolution-of-humans-and-machines/"/>
    <updated>2020-07-22T07:23:37Z</updated>
    <id>/library/the-fourth-discontinuity-the-co-evolution-of-humans-and-machines/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;From Mary Shelley’s &lt;em&gt;Frankenstein&lt;/em&gt; to current films like &lt;em&gt;The Terminator&lt;/em&gt; about menacing androids, writers have expressed concern about computers and biogenetic creations taking over or altering human life. In this engrossing and lively book, Bruce Mazlish discusses the complex relationship between humans and machines, pondering the implications of humans becoming more mechanical (our bodies increasingly hooked up to artificial parts), and of computer robots being programmed to think.&lt;br /&gt;
&lt;br /&gt;
Mazlish argues that just as Copernicus, Darwin, and Freud overturned our illusions of separation from and domination over the cosmos, the animal world, and the unconscious, it is now necessary to relinquish a fourth fallacy or discontinuity–that humans are discontinuous and distinct from the machines they make. Drawing on history and legend, science and science fiction, Mazlish examines how events and individuals have shaped the ways that humans relate to machines. He describes early Greek and Chinese automatons (forerunners of the robot); he discusses the seventeenth-century debate over what was called the “animal machine”; he shows how the Industrial Revolution created a truly mechanical civilization; he looks at what thinkers such as Descartes, Linnaeus, Darwin, Freud, Pavlov, Charles Babbage, T.H. Huxley, and Samuel Butler contributed to our understanding of human nature as contrasted with animal or machine; and he surveys the modern revolutions in biogenetics and computer and brain sciences that have brought humans and machines closer together than ever before. Mazlish argues provocatively that human nature is best understood in the context of the machines and tools we have created and that humans and our creations—computer robots—will eventually evolve into two new species coexisting in a symbiotic relationship.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;From &lt;a href=&quot;https://yalebooks.yale.edu/book/9780300065121/fourth-discontinuity&quot;&gt;Yale University Press&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Cosmic Calamity (EP)</title>
    <link href="https://macleodsawyer.com/music/cosmic-calamity-ep/"/>
    <updated>2020-09-21T20:01:49Z</updated>
    <id>/music/cosmic-calamity-ep/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Springer Handbook of Robotics (2nd Ed.)</title>
    <link href="https://macleodsawyer.com/library/springer-handbook-of-robotics-2nd-ed/"/>
    <updated>2020-09-21T20:08:23Z</updated>
    <id>/library/springer-handbook-of-robotics-2nd-ed/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The second edition of this handbook provides a state-of-the-art overview on the various aspects in the rapidly developing field of robotics. Reaching for the human frontier, robotics is vigorously engaged in the growing challenges of new emerging domains. Interacting, exploring, and working with humans, the new generation of robots will increasingly touch people and their lives. The credible prospect of practical robots among humans is the result of the scientific endeavour of a half a century of robotic developments that established robotics as a modern scientific discipline. The ongoing vibrant expansion and strong growth of the field during the last decade has fueled this second edition of the &lt;strong&gt;Springer Handbook of Robotics&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Burn Out at the Hydrogen Bar</title>
    <link href="https://macleodsawyer.com/music/burn-out-at-the-hydrogen-bar/"/>
    <updated>2020-09-24T20:39:00Z</updated>
    <id>/music/burn-out-at-the-hydrogen-bar/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>Sabertooth Motor Drivers in Julia and Javascript</title>
    <link href="https://macleodsawyer.com/tech/sabertooth/"/>
    <updated>2020-10-30T00:00:00Z</updated>
    <id>/tech/sabertooth/</id>
    <content type="html">&lt;p&gt;Julia &amp;amp; Javascript Libraries to control the Sabertooth motor controller&lt;/p&gt;
&lt;p&gt;Simple to use Julia and Javascript APIs for Sabertooth motor controllers (made by Dimension Engineering) - The official API only has support for Python, C#, and Arduino - I needed one for quick prototyping and this was born.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sabertooth.jl repo can be found &lt;a href=&quot;https://github.com/drannex42/Sabertooth.jl&quot;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sabertooth.js repo can be found &lt;a href=&quot;https://github.com/drannex42/Sabertooth.js&quot;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;sabertooth.jl---repo&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#sabertooth.jl---repo&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Sabertooth.jl - &lt;a href=&quot;https://github.com/drannex42/Sabertooth.jl&quot;&gt;Repo&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;source&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#source&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Source&lt;/h3&gt;
&lt;pre class=&quot;language-julia&quot;&gt;&lt;code class=&quot;language-julia&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;module&lt;/span&gt; Sabertooth&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; SerialPorts&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;# Motor commands&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; forward_m1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0x00&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; reverse_m1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0x01&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; forward_m2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0x04&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; reverse_m2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0x05&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; forward_mixed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0x08&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; reverse_mixed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0x09&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; right_mixed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0x0A&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; left_mixed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0x0B&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; ramp &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0x10&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;# Modify the serial port configs as needed&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; portname &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/dev/ttyACM0&quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; baudrate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;115200&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#Default baudrate for Sabertooth (115200)&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; address &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;128&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# The address of the Sabertooth. By default, this is 128.&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; mask &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;127&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;s &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; SerialPort&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;portname&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; baudrate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# Instantiate the serial port&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;# sendCommand(command, data): Core motor controller function, this sends an update out to the motor controller hardware, all other functions should call this function instead of rewriting. &lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; sendCommand&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;command&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        checksum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;address &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; command &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;127&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# Calculate the required checksum with the bitwise operator for the bytesize (mask)&lt;/span&gt;&lt;br /&gt;        newUpdate &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;UInt8&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;address&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; UInt8&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;command&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; UInt8&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; UInt8&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;checksum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# Create an array buffer of bytes to send to the motor controller hardware &lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        write&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; newUpdate&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# Write to the motor controller hardware&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;# drive(motor, speed): This controls one motor at a time&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;motor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; speed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token comment&quot;&gt;# Reverse commands are equal to forward + 1&lt;/span&gt;&lt;br /&gt;        cmds &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;forward_m1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; forward_m2&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;        &lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt;&lt;br /&gt;            command &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; cmds&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;motor&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt;&lt;br /&gt;            @warn &lt;span class=&quot;token string&quot;&gt;&quot;Drive error, invalid motor number: $motor&quot;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; speed &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;br /&gt;            speed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;speed&lt;br /&gt;            command &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; command &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;br /&gt;        &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; speed &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt; &lt;br /&gt;            @warn &lt;span class=&quot;token string&quot;&gt;&quot;Drive error, invalid speed: $speed&quot;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        calculatedspeed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; round&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Int&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;127&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; speed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        sendCommand&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;command&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; calculatedspeed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;# stop(): Stops both motors&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; stop&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;br /&gt;        drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;# driveBoth(speed_m1, speed_m2):&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; driveBoth&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;speed_m1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; speed_m2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; speed_m1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; speed_m2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;# driveTank(speed)&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; driveTank&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;speed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; speed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;        drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; speed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;usage&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#usage&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Usage&lt;/h3&gt;
&lt;pre class=&quot;language-julia&quot;&gt;&lt;code class=&quot;language-julia&quot;&gt;&lt;br /&gt;&lt;span class=&quot;token operator&quot;&gt;//&lt;/span&gt; drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;number&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; speed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt; number&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt; speed&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt; to &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt; &lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;drive&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;75&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token operator&quot;&gt;//&lt;/span&gt; driveBoth&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;speed_m1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; speed_m2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;driveBoth&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token operator&quot;&gt;//&lt;/span&gt; driveTank&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;speed&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt; speed&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt; to &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;driveTank&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token operator&quot;&gt;//&lt;/span&gt; Stop&lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;stop&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;sabertooth.js-(javascript)---repo&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#sabertooth.js-(javascript)---repo&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Sabertooth.js (Javascript) - &lt;a href=&quot;https://github.com/drannex42/Sabertooth.js&quot;&gt;Repo&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;install&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#install&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Install&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; sabertoothjs&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;usage-1&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#usage-1&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Usage&lt;/h3&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Sabertooth &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;sabertoothjs&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Sabertooth(port, baudrate, address) (default: 128)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; saber &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Sabertooth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;/dev/ttyACM0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;115200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// drive(number, speed) :: number: 1-2 :: speed: -100 to 100 &lt;/span&gt;&lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;drive&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;drive&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;75&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// driveBoth(speed_m1, speed_m2)&lt;/span&gt;&lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;driveBoth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// driveTank(speed) :: speed: -100 to 100&lt;/span&gt;&lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;driveTank&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Stop&lt;/span&gt;&lt;br /&gt;saber&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  
  <entry>
    <title>Scotland: The Story of a Nation</title>
    <link href="https://macleodsawyer.com/books/scotland-the-story-of-a-nation/"/>
    <updated>2020-11-28T12:06:36Z</updated>
    <id>/books/scotland-the-story-of-a-nation/</id>
    <content type="html">&lt;p&gt;Hailed as a vast, superb history that relates Scotland’s past over a dozen millennia”, Magnusson draws on a great deal of modern scholarship to redefine a nation’s history. He charts the long struggle toward nationhood, explores the roots of the original Scots, and examines the extent to which Scotland was shaped by the Romans, the Picts, the Vikings, and the English. Encompassing everything from the first Mesolithic settlers in 7000 B.C. to the present movements for independence, Scotland: The Story of a Nation is history on an epic level, essential reading for anyone interested in the rich past of this captivating land.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Sounds from Silence: Graeme Clark and the Bionic Ear story</title>
    <link href="https://macleodsawyer.com/books/sounds-from-silence/"/>
    <updated>2020-12-10T12:06:36Z</updated>
    <id>/books/sounds-from-silence/</id>
    <content type="html">&lt;p&gt;This story has a very deep place in my heart, my mother was born deaf and after countless surgeries in her early youth she was able to regain (or to have the start of) the hearing in her left ear. She is still entirely deaf in her right, but I am very happy that she can hear at all - if she hadn’t, both her and my own life would be far different (and I wouldn’t likely have existed at all!).&lt;/p&gt;
&lt;p&gt;Growing up I always had to subtitles on, driven to speak loudly and clearly, and learn just enough sign language (not much, but being italian grants you the starting ability to hand wave at all hours of the day). This story catalogues all the attempts to create and invent a medical device that could restore or grant the power of hearing. The story is excellently written, and written by the very man who has changed millions of lives over the past few decades, Professor Graeme Clark.&lt;/p&gt;
&lt;p&gt;This story goes into the thought process of the device, the manufacturing, the attempt to raise funding (many times! many failures!), the stress of integration within the deaf community, and many more. If you have an interest in technology and how it is a net-benefit of humanity, or are worried about the use of technology, this should be your first choice to see how great the world can be.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>The Human Use of Human Beings: Cybernetics and Society</title>
    <link href="https://macleodsawyer.com/books/human-use-of-human-beings/"/>
    <updated>2021-01-03T12:06:36Z</updated>
    <id>/books/human-use-of-human-beings/</id>
    <content type="html">&lt;p&gt;There is not much to be said that better people than myself couldn’t have said any better. Read this book if you truly want to understand computers, society, or all of the above.&lt;/p&gt;
&lt;p&gt;You can find this book all across the internet (for free! There are quite a few copies saved to [Archive.org]) or you can pick up a used physical paperback for a few dollars on thriftbooks or ebay. Personally finding one post-1965 is likely the best version as it has a few corrections and a new afterword.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Svelte + Capacitor (w/ live reload) Template</title>
    <link href="https://macleodsawyer.com/tech/svelte-capacitor-v1/"/>
    <updated>2021-02-05T00:00:00Z</updated>
    <id>/tech/svelte-capacitor-v1/</id>
    <content type="html">&lt;p&gt;This is a project template for &lt;a href=&quot;https://svelte.dev&quot;&gt;Svelte&lt;/a&gt; + &lt;a href=&quot;https://capacitorjs.com&quot;&gt;CapacitorJS&lt;/a&gt; apps with live reload.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note that you will need to have &lt;a href=&quot;https://nodejs.org&quot;&gt;Node.js&lt;/a&gt; installed.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;setup&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#setup&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Setup&lt;/h2&gt;
&lt;h3 id=&quot;get-started&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#get-started&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Get started&lt;/h3&gt;
&lt;p&gt;Install the dependencies…&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; svelte-capacitor&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;run-local-dev-server-(no-capacitor)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#run-local-dev-server-(no-capacitor)&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Run local dev server (no capacitor)&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; run dev&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;add-your-capacitor-platform&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#add-your-capacitor-platform&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Add your Capacitor platform&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;npx cap &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; android // &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;or ios&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;develop-on-your-device-with-livereload-(hot-reload)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#develop-on-your-device-with-livereload-(hot-reload)&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Develop on your device with livereload (hot reload)&lt;/h3&gt;
&lt;p&gt;You will need to append your workstation IP to the &lt;code&gt;server.url&lt;/code&gt; section in &lt;code&gt;capacitor.config.json&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Tip: Remember you will need the &lt;code&gt;http://&lt;/code&gt; before the server ip.&lt;/p&gt;
&lt;p&gt;Back in the root folder:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm run dev:android&lt;/code&gt; or &lt;code&gt;npm run dev:ios&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will run the capacitor/svelte project with a web view pointing to your workstation’s IP. You should see the message &lt;code&gt;Welcome to Svelte!&lt;/code&gt; if svelte loaded correctly.&lt;/p&gt;
&lt;p&gt;Try to change something in App.svelte, and you should see the content reload in your device.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need to have an emulator/device connected to adb&lt;/li&gt;
&lt;li&gt;Your device has to be connected to the same wifi network as your workstation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;to-build-a-production-application%3A&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#to-build-a-production-application%3A&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; To build a production application:&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Remember to remove the &lt;code&gt;server.url&lt;/code&gt; in &lt;code&gt;capacitor.config.json&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm run build:android&lt;/code&gt; or &lt;code&gt;npm run build:ios&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;quick-tips&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#quick-tips&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Quick Tips&lt;/h2&gt;
&lt;h3 id=&quot;developer-tools&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#developer-tools&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Developer Tools&lt;/h3&gt;
&lt;p&gt;You can use any Chromioum-based browser and use their Developer Tools (for Android atleast, have not tested iOS) to debug and access console commands on your personal device, by going to chrome://inspect#devices., edge://inspect#devices., vivaldi://inspect#devices., brave://inspect#devices, &amp;amp;c.&lt;/p&gt;
&lt;p&gt;The standard web inspector will also work for debugging and rewriting styling and html without using your IDE just like when building a normal website. This may have some issues with some forms of SVG-related svelte templating (I have had issues with using some chart libraries displaying in the web inspector), they will still show up on the device but not in the preview.&lt;/p&gt;
&lt;p&gt;You may use the address bar in the developer tools to navigate to direct views in your application, even without any tappable links to do so. This allows you to create hidden routes for testing.&lt;/p&gt;
&lt;h3 id=&quot;routing-libraries&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#routing-libraries&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Routing Libraries&lt;/h3&gt;
&lt;p&gt;Since this is a Svelte applicaiton you will be able to use any routing manager that you prefer. I prefer routify, but others such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Routify - https://github.com/roxiness/routify&lt;/li&gt;
&lt;li&gt;ItalyPaleAple/svelte-spa-router - https://github.com/ItalyPaleAle/svelte-spa-router&lt;/li&gt;
&lt;li&gt;EmilTholin/svelte-routing - https://github.com/EmilTholin/svelte-routing&lt;/li&gt;
&lt;li&gt;orgegorka/svelte-router - https://github.com/jorgegorka/svelte-router&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;accessing-device-apis&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#accessing-device-apis&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Accessing Device APIs&lt;/h3&gt;
&lt;p&gt;CapacitorJS is/was based on Cordova and has &lt;em&gt;complete&lt;/em&gt; backwards compatibility with cordova plugins. To find plugins that allow you to access the device api’s easier, attempt to find cordova or capacitor plugins. You will need to view their (capacitorjs) docs to learn how to properly accesss those.&lt;/p&gt;
&lt;h3 id=&quot;find-a-bug%3F-want-to-add-a-feature%3F&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#find-a-bug%3F-want-to-add-a-feature%3F&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Find a bug? Want to add a feature?&lt;/h3&gt;
&lt;p&gt;Submit a PR! I would love to have more people working on this, the advantages of a system such as this vs NativeScript or React Native are innumerable especially in regards for how quickly you can get started and instant developer options and this could be built out to something great!&lt;/p&gt;
&lt;h3 id=&quot;are-you-using-this-project!-let-us-know!&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#are-you-using-this-project!-let-us-know!&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Are you using this project! Let us know!&lt;/h3&gt;
&lt;p&gt;I would love to keep a collection of all the projects using this!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;small&gt;Thank you to &lt;a href=&quot;https://github.com/syonip/&quot;&gt;@syonip&lt;/a&gt; for the inspiration for this project/&lt;/small&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Every Tool&#39;s a Hammer: Life Is What You Make It </title>
    <link href="https://macleodsawyer.com/books/every-tools-a-hammer/"/>
    <updated>2021-03-12T12:06:36Z</updated>
    <id>/books/every-tools-a-hammer/</id>
    <content type="html">&lt;p&gt;I consider this a basic manual for the makers of the world. Adam Savage, most known for Mythbusters, has written an excellent history of himself and his journey to being a maker over the last several decades. Interlaced within this history are anecdotes and tips for all makers everywhere, and the biggest one is that every tools is a hammer. From adhesives to solvents, cardboard to metal, this is a manual for creation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Every Tool’s a Hammer is a chronicle of my life as a maker. It’s an exploration of making, but it’s also a permission slip of sorts from me to you. Permission to grab hold of the things you’re interested in, that fascinate you, and to dive deeper into them to see where they lead you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Through stories from forty-plus years of making and molding, building and break­ing, along with the lessons I learned along the way, this book is meant to be a toolbox of problem solving, complete with a shop’s worth of notes on the tools, techniques, and materials that I use most often. Things like: In Every Tool There Is a Hammer—don’t wait until everything is perfect to begin a project, and if you don’t have the exact right tool for a task, just use whatever’s handy; Increase Your Loose Tolerance—making is messy and filled with screwups, but that’s okay, as creativity is a path with twists and turns and not a straight line to be found; Use More Cooling Fluid—it prolongs the life of blades and bits, and it prevents tool failure, but beyond that it’s a reminder to slow down and reduce the fric­tion in your work and relationships; Screw Before You Glue—mechanical fasteners allow you to change and modify a project while glue is forever but sometimes you just need the right glue, so I dig into which ones will do the job with the least harm and best effects.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This toolbox also includes lessons from many other incredible makers and creators, including: Jamie Hyneman, Nick Offerman, Pixar director Andrew Stanton, Oscar-winner Guillermo del Toro, artist Tom Sachs, and chef Traci Des Jardins. And if everything goes well, we will hopefully save you a few mistakes (and maybe fingers) as well as help you turn your curiosities into creations.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I hope this book serves as “creative rocket fuel” (Ed Helms) to build, make, invent, explore, and—most of all—enjoy the thrills of being a creator.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>How the French Think: An Affectionate Portrait of an Intellectual People</title>
    <link href="https://macleodsawyer.com/books/how-the-french-think/"/>
    <updated>2021-06-14T12:06:36Z</updated>
    <id>/books/how-the-french-think/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;In How the French Think, the internationally-renowned historian Sudhir Hazareesingh tells the epic and tumultuous story of French intellectual thought from Descartes, Rousseau, and Auguste Comte to Sartre, Claude LÃ©-Strauss, and Derrida. He shows how French thinking has shaped fundamental Westerns ideas about freedom, rationality, and justice, and how the French mind-set is intimately connected to their own way of life-in particular to the French tendency towards individualism, their passion for nature, their celebration of their historical heritage, and their fascination with death. Hazareesingh explores the French veneration of dissent and skepticism, from Voltaire to the Dreyfus Affair and beyond; the obsession with the protection of French language and culture; the rhetorical flair embodied by the philosophes, which today’s intellectuals still try to recapture; the astonishing influence of French postmodern thinkers, including Foucault and Barthes, on postwar American education and life, and also the growing French anxiety about a globalized world order under American hegemony.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While I enjoyed the book (up until the conclusion), this was an excellent primer on the celebrity philosophers and their direct (or indirect) effects on the french social scene and overall social truths. If this book had been titled &lt;em&gt;anything&lt;/em&gt; else, then this would be an excellent book - but as the core concept on ‘how the french think’ it runs a bit flat. This is contemporary view of how the social elite thought throughout history but touched very little on the every day citizens or world that directly affected them.&lt;/p&gt;
&lt;p&gt;This is a history of French philosphy, but any attempt to strive off this path does not fare well and will cause the reader to feel less emotionally involved as one would want to be. The writing is exceptionally well done, but until the conclusion you would feel hopeful. The author uses the last chapter to usher and pigeon hole a concept that ‘society is failing’ and that everything is worse than it ever has been without giving any specific reasons. He does try to find a tone in a paragraph where he is optimistic but the chapter itself betrays this pitiful attempt. The author seems to live in a world-view that ‘philosophy is dead, long live the old!’, if you ignore the last two chapters and view this as a history of the French bourgeoisie then this is a book that I would recommend, otherise you should temper your expectations.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Parallax: The Race to Measure the Cosmos</title>
    <link href="https://macleodsawyer.com/books/parallax/"/>
    <updated>2021-06-30T12:06:36Z</updated>
    <id>/books/parallax/</id>
    <content type="html">&lt;p&gt;This is one of the best books I’ve read in the past year, an excellent history that surrounds the quest to discover, catalogue, and complete the map of the universe. I believe what makes this book stand out among the other histories of astronomy that I have read, is that this makes a conscious effort to write on the underlying technological improvement and mechanical design of each new iteration of tools. This is the book that describes the beginning of precision science in all the ways that matter. Terrific illustrations, explanations, and small tidbits (wait till you find out who Tycho Brahe had as a ‘pet’!) are found all throughout this book. My only problem is that the book ends too quickly!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The greatest scientific minds applied themselves in vain to the problem across the millennia, beginning with the ancient Greeks. Not until the nineteenth century would three astronomers, armed with the best telescopes of the age, race to conquer this astronomical Everest—their contest ending in a virtual dead heat.
Against a sweeping backdrop filled with kidnappings, dramatic rescue, swordplay, madness, and bitter rivalry, Alan Hirshfeld brings to life the heroes of this remarkable story. Meet the destitute boy plucked from a collapsed building who becomes the greatest telescope maker the world has ever seen; the hot-tempered Dane whose nose is lopped off in a duel over mathematics; the merchant’s apprentice forced to choose between the lure of money and his passion for astronomy; and the musician who astounds the world by discovering a new planet from his own backyard.
Generously illustrated with diagrams, period engravings, and paintings, Parallax is an unforgettable tale that illuminates the distinctly human side of science.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>The Future is Inspiring</title>
    <link href="https://macleodsawyer.com/blog/the-future-is-inspiring/"/>
    <updated>2021-08-11T00:00:00Z</updated>
    <id>/blog/the-future-is-inspiring/</id>
    <content type="html">&lt;p&gt;If you don’t find the future inspiring, then you’re thinking about it wrong.&lt;/p&gt;
&lt;p&gt;If you don’t have hope for the future, then you’re thinking about it wrong.&lt;/p&gt;
&lt;p&gt;Someone reblogged this with a caption (summarized as “if all you’ve had to do in life is to survive, then you don’t know what you want”) , and promptly deleted it. I will write what I was writing here:&lt;/p&gt;
&lt;p&gt;That’s exactly what I am talking about! That’s what makes the future so exciting and hopeful, against all odds that is the only time you have to find out what you want, whether that be to change, to discover, or to experience. The future is a world of endless possibilities that isn’t beholden to the present, and less so than the past.&lt;/p&gt;
&lt;p&gt;There are mindsets that feast on disappointment and sticking to the status quo, they fear the future not because of the current world, but because their current world could change to something that they never imagined.&lt;/p&gt;
&lt;p&gt;There is a strict dichotomy between two different mindsets: The idea that change is good, and that change is bad. It’s up to each person to determine if they want a change or if they want to be stuck to the same rhythm humming the same chorus all their life.&lt;/p&gt;
&lt;p&gt;Being optimistic about the future, no matter the terms, is always a positive. The future is change, the past isn’t, and the present is bound to the past. The future is the only spot you can place happiness because it is the only thing that hasn’t happened and that you can do something about it, even if incredibly minor.&lt;/p&gt;
&lt;p&gt;I have depression and extreme anxiety, came from less than nothing and have had to fight tooth and nail for everything I have and then some (mostly against myself), I know how easy the programming in my brain is to prefer being nihilistic and fatalistic, but there are better ways to be. I know this, we all know this, being negative doesn’t help make the world better it just makes the world a more tortured place to exist in.&lt;/p&gt;
&lt;p&gt;A child doesn’t think about yesterday as much as they think about tomorrow. The possibilities of growing up in a castle, or parties, seeing their friends, having a car, or having cake every single day. They think about what could be in a positive light, not in a negative way because that’s more fun, that brings joy and happiness, to at the very least imagine it. Doom and gloom have their place, but to be the ultimate force in your mind to dictate every action taints every action you can possibly take.&lt;/p&gt;
&lt;p&gt;If you don’t find the future inspiring, then you’re thinking about it wrong.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Coexistence: Automation and Humanity</title>
    <link href="https://macleodsawyer.com/blog/automation/"/>
    <updated>2021-11-09T00:00:00Z</updated>
    <id>/blog/automation/</id>
    <content type="html">&lt;p&gt;&lt;small&gt;This is another response to a post that was once &lt;a href=&quot;https://macleod.tumblr.com/post/669221729885896704/roach-works-scumbag-stallion-make-no-mistake&quot;&gt;found here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Automation of mindless and repeatable vocations are coming, and are here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But,&lt;/strong&gt; automation requires co-existing humans and robotics in the same work space. Automation by itself fails, automation without a handler, fails, automation because it is focused and the world is not, fails.&lt;/p&gt;
&lt;p&gt;I am a roboticist, I develop and build robots and I can say with good authority (given to me, by me) that robotics and automation will only ever make sense within our current scope when there are overseers and other users to ensure proper order is in place.&lt;/p&gt;
&lt;p&gt;Robotics are not at a place (or will be for many years) where this will not be the case. The ‘we will automate you if you don’t accept our pay’ is absolute bullshit for several reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The cost to train, develop, and implement a robotic system for any amount of work is costly (millions)&lt;/li&gt;
&lt;li&gt;The cost to train, develop, and implement overseers is costly (far more than the bare minimum they want to pay)&lt;/li&gt;
&lt;li&gt;Robots are not generalists (yet…), and every job needs generalists so that they can do &lt;em&gt;more&lt;/em&gt; than what they needed, or if deadlines change, or parts change, or really &lt;em&gt;anything changes&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;You have to radically change the entirely of a workplace, shop floor, warehouse, store, and more to become a &#39;robot-friendly’ work place. There are safety requirements, there are OSHA guidelines to ensure human workers are not harmed, there are insane requirements everywhere to ensure that a million dollar robot doesn’t topple over and break everything around it including itself.&lt;/li&gt;
&lt;li&gt;Maintenance_. Robots break._ Just as humans need to go home and rest, so do robots. Just as humans need to relax or else they break, so do robots. When robots do inevitably break you have to call in experts to fix them, to care for them, and to ensure that they never break and have a long lifespan.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Don’t believe any company that tries to espouse the “then we’ll just give your jobs to the robots” because if they could, they would have already - and they won’t because they can’t.&lt;/p&gt;
&lt;p&gt;Automation is coming, but automation will only ever make sense when they can work alongside humans. Robots are tools, just like a computer is a tool, just like a hammer is a tool.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Precision Engineering &amp; Steam Engines</title>
    <link href="https://macleodsawyer.com/blog/precision-engineering/"/>
    <updated>2022-01-14T00:00:00Z</updated>
    <id>/blog/precision-engineering/</id>
    <content type="html">&lt;img class=&quot;right&quot; title=&quot;An image of an Aeolipile&quot; src=&quot;/assets/uploads/330px-Aeolipile_illustration.png&quot; /&gt;
&lt;p&gt;Romans invented the first known steam engine around the year ~10,001 H.E. (1AD) called the &lt;em&gt;Aeolipile&lt;/em&gt;. This creation was likely used more as a party trick or novelty as they didn’t have the possibility of producing useful, more powerful, versions due to a lack of tools, knowledge, and supplies needed to progress the development any farther. This led to the knowledge and potential world-changing prospects of the device being lost and not to be seen again for nearly a thousand years (although, other similar ideas did appear in other cultures but again, none were powerful enough and were just as short-lived).&lt;/p&gt;
&lt;p&gt;In the mid-to-late 1700s, Scotland had produced a new type of precision engineering for the use of cannons in the British army. Cannons at the time had the problem of having small cracks, inconsistent sizes, and development defects that caused about half of them to explode on use, causing both insurmountable death and a grand waste of time and materials.&lt;/p&gt;
&lt;p&gt;By this time, John Wilkinson created a new method of precision engineering based on the principles that started in the 1400s and led to the explosion of technological advances leading up to the life of Galileo to begin producing glass with less defects for the use in telescopes. He applied similar methods to drilling cores out of raw stone, creating the ability for the first time to manufacture and produce materials repeatedly within a tenth of an inch for the first time.&lt;/p&gt;
&lt;p&gt;Roughly fourteen miles away James Watt was developing the steam engine, but had come into many issues, the same issues that many before him had stopped development (there were no fewer than two dozen steam engine patents predating him over the previous hundred years) — Leaks.&lt;/p&gt;
&lt;img class=&quot;left&quot; title=&quot;An image of an Aeolipile&quot; src=&quot;/assets/uploads/watts-steam-engine.png&quot; /&gt;
&lt;p&gt;Leaks were the biggest problem in steam engines, the creation of pressure is paramount to the design, and if you had one leak — you had hundreds. A near impossibility for doing anything worthwhile with steam engines. Not to mention the same problem with cannons, deadly explosions.&lt;/p&gt;
&lt;p&gt;I can’t quite remember who met who first, but John Wilkinson eventually used the same cutting and drilling technique to fashion the materials needed to put the steam engine together.&lt;/p&gt;
&lt;p&gt;James Watt used these new precision tools to create the first powerful steam engine that led the way to the modern world that we live in today.&lt;/p&gt;
&lt;p&gt;The moral of the story is that science isn’t linear. Things have been invented a thousand times over by different people all around the world, but until you have the tools, systems, and supply chain for materials those innovation tend to disappear. That doesn’t negate the power of the ones who came before in other places, but that scientific possibilities can not exist in a vacuum and must be put into the world even if they were a failure, because tomorrow? tomorrow they could change the world.&lt;/p&gt;
&lt;p&gt;The above was written as a response (not important for context) on &lt;a href=&quot;https://tumblr.macleodsawyer.com/post/673398496470220800/romans-technically-invented-the-first-known-steam&quot;&gt;my tumblr&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you haven’t read the book ‘The Perfectionists: How Precision Engineers Created the Modern World’ by Simon Winchester I highly suggest you pick up a copy. A good portion of this knowledge stems from that.&lt;/p&gt;
&lt;hr /&gt;
</content>
  </entry>
  
  <entry>
    <title>SDRs and Compression Algorithms</title>
    <link href="https://macleodsawyer.com/blog/sdrs-and-compression-algorithms/"/>
    <updated>2022-01-16T00:00:00Z</updated>
    <id>/blog/sdrs-and-compression-algorithms/</id>
    <content type="html">&lt;p&gt;Human brains are equivalent to a zip archive/tarball, they use Sparse Distributed Representations (SDR) to represent values across neurons and minimize data using similar processes such as overlap (how things are different) and union (key table duplication, or the representation of multiple ideas that are similar with one linked value) properties.&lt;/p&gt;
&lt;p&gt;The concept is simple, you can have an example sentence (or string as they are called in programming) that says &lt;em&gt;“I am a woman, a woman is me, I am existing and not existing for I am both on your screen and not on your screen.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;How does a nominal compression algorithm work? Well, you take the words and statements that have been repeated and assign a number such as:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Statement&lt;/th&gt;
&lt;th&gt;Times Said&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;“I am”&lt;/td&gt;
&lt;td&gt;3 times&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;“a woman”&lt;/td&gt;
&lt;td&gt;2 times&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;“existing”&lt;/td&gt;
&lt;td&gt;2 times&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;“on your screen”&lt;/td&gt;
&lt;td&gt;2 times&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;“not”&lt;/td&gt;
&lt;td&gt;2 times&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- **1:** &quot;I am&quot; (said 3 times), **2:** &quot;a woman&quot; (said two times), **3:** &quot;existing&quot; (said two times), **4:** &quot;on your screen&quot; (said two times), **5:** &quot;and not&quot; (said two times). --&gt;
&lt;p&gt;Now we have a key table of values (&lt;strong&gt;key:&lt;/strong&gt; “value”)! We can now rewrite the original statement like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; &amp;quot;1 2, 2 is me, 1 3 5 3 for 1 both 4 5 4&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let’s assume that every letter and space is a size of 1 byte, that means the original statement has a size of 112bytes while the second version only has 38! That means you have saved &lt;em&gt;69%&lt;/em&gt; of your drive space just by doing a simple find and replace!&lt;/p&gt;
&lt;p&gt;Now you could do that all the way down to part of words, statements, and more and further improve this rather simple compression algorithm.&lt;/p&gt;
&lt;p&gt;The above uses the principle of a &lt;em&gt;‘Union’&lt;/em&gt; which is found in what neuroscience calls SDR’s or &lt;a href=&quot;https://href.li/?https://en.wikipedia.org/wiki/Sparse_distributed_memory&quot;&gt;Sparse Distributed Representations&lt;/a&gt;. These can be attributed to images, colors, experiences, smells, and more. You have a memory that consists of key value tables to detect and apply replacements within that memory to ensure that you aren’t having to remember things twice such as the color red a thousand times, instead you just have &lt;strong&gt;&#39;1: RED!&amp;quot;&lt;/strong&gt; saved and see a lot of &lt;strong&gt;1&lt;/strong&gt;’s linking to that color.&lt;/p&gt;
&lt;p&gt;Then you have the principle of &lt;em&gt;‘Overlap’&lt;/em&gt; which is how things are different. These things relate to Union in similar ways, for example: You see red, but its a different new lighter shade of red, you don’t remember ever seeing this red so it becomes “&lt;strong&gt;3: 1+lighter&lt;/strong&gt;” because you know its red, not pink (that is coded as ‘&lt;strong&gt;2: Pink&lt;/strong&gt;’), but while it it lighter it is not light enough to be pink.&lt;/p&gt;
&lt;p&gt;This is roughly how compression algorithms and SDR’s work in a nutshell. We humans have this strange tendency to recreate or mirror our own lives unknowingly in the things that we make whether that be emotions, dreams, or even how our own natural brain chemistry works! We do it over and over and over again. These are the reasons why in the future we might be able to create a new form of living being, or even one where we can upload and replicate our minds (that’s called the field of mindcloning - a real thing!) and be able to quickly travel the stars without having to worry about how long it will take or if our ‘body’ will live long enough to get to another planet! We would just be able to upload and download into a new body in hours instead of centuries of travel.&lt;/p&gt;
&lt;p&gt;We take a lot of inspiration from nature, but we can experiment and tinker a lot faster than it can &lt;em&gt;naturally.&lt;/em&gt; We’ve gone from the game of Pong to this entire cyber connected and graphically intensive world in less than fifty years, 99.9% of the population never having or seeing electricity to nearly everyone having it in less than a hundred years!&lt;/p&gt;
&lt;p&gt;What will be possible in a hundred years? a thousand years? I’m looking forward to being alive to find out!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This was first posted on my &lt;a href=&quot;https://tumblr.macleodsawyer.com/post/673658447374499840&quot;&gt;tumblr&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Cyberpunk, cyberculture, and reality</title>
    <link href="https://macleodsawyer.com/blog/cyberculture/"/>
    <updated>2022-01-19T00:00:00Z</updated>
    <id>/blog/cyberculture/</id>
    <content type="html">&lt;p&gt;When the advent of Cyberpunk was drafted and released into the mainstream culture in the 1980s, the core idea is throught now in retrospect to be based around “more technology means less humanity, and that is &lt;strong&gt;bad&lt;/strong&gt;”. But, times have changed - there wasn’t a community of open source tech, or shareware of the like originally. Sure, there were disk and floppy swaps, code manuals where you can manually rewrite the code on your own systems, and hacker DIY zines for the electrically curious – But there wasn’t a method of rapidly and quickly releasing community-led software, tech specs, or designs like we have now.&lt;/p&gt;
&lt;p&gt;Cyberpunk was about an expansion of the expanding proliferation of corporate control, not that technology was bad, in fact most cyberpunk and cyberpunk adjacent (neuropunk, neo-noir, futurisms, industrial, extropian, etc) genres and philosophies prided themselves on the fact that they had access to non-corporate tech, black label tech, stolen tech, self-made DIY tech, hacked tech.&lt;/p&gt;
&lt;p&gt;The overall motif has always been &lt;em&gt;’Corporations suck, megacorps especially, and politicians funded by the corps suck, but hey! the technology we have makes our life far more enjoyable, far more free, far more cool, we just have to eliminate the corps with it’&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The shift from ‘technology is cool, made our lives better, but we need to take our power back from the faceless corps’ to &#39;Cyberpunk is about how bad technology is’ entirely misses the punk roots of the entire thing, this new &#39;idea’ was quite literally controlled and distilled down by the very same type of corporations the original ideas were fighting against.&lt;/p&gt;
&lt;p&gt;Take your power back, build and make cool shit, the corps aren’t going to give it to you unless you fight for it.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Technocratic Socialism</title>
    <link href="https://macleodsawyer.com/blog/technocratic-socialism/"/>
    <updated>2022-02-05T00:00:00Z</updated>
    <id>/blog/technocratic-socialism/</id>
    <content type="html">&lt;p&gt;Technocracy was a movement in the late 1920’s, 30s, and 40s in the Americas that was gaining heavy momentum. Sadly, in the late 1930s the Canadian government banned the political party from 1940-1942 that disrupted and stunted the growth of the party forever, as most of their growth was in Canada (or so it would seem, there is a heavy resurgence growing today!).&lt;/p&gt;
&lt;p&gt;Originally a socialist movement spearheaded by engineers that believed that the political system relied too heavily on career politicians and an elite class than experts and the working class.&lt;/p&gt;
&lt;p&gt;Technocracy was the realization that the majority of jobs and power relied on the workers, engineers, and mostly those who were part of manufacturing, farming, and other related fields (keep in mind, this was the early 20th century whereas now most modern jobs are in services and retail, sadly).&lt;/p&gt;
&lt;p&gt;They believed that instead of having armchair experts dictate everything, everyone, and the whims of the political world - that the power should be more appropriately vested in engineers and workers.&lt;/p&gt;
&lt;p&gt;They believed that we should only work a four hour day, on a four week using this as a ‘calendar’:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/uploads/technocratic-calendar.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Where manufacturing workers (and most workers) would be working in shifts of four days a week, four hours a day, with three days off of work. Not only would this ensure that everyone was working, but this would equally ensure that we could have full production and productivity could rise higher than every before. This wouldn’t work for most industries, but it would form a basis that *could *work in nearly all jobs.&lt;/p&gt;
&lt;p&gt;Their belief was to maximize work, so that humanity can finally have more time for leisure. Entire industries would be nationalized, we would have universal healthcare, universal education, they believed that all citizens should have the right to vote regardless of color or race, they believed in womens rights, and a whole slew of more.&lt;/p&gt;
&lt;p&gt;They opposed oppressive militaries, believed funding would be better allocated to public infrastructure than the war machine, and that the government should fund farms and factories to produce core needs such as tools and food so that every citizen should have the right and ability to eat (and use the technocratic calendar to ensure that we could!). They also believed that we could use technology to increase resourcefulness and build a better more rounded society, and a more equal world than ever before through automation, better growing patterns, better tools, better, well everything.&lt;/p&gt;
&lt;p&gt;Decisions would be based around tribunals of engineers and experts in fields (could you imagine how quickly the pandemic would have ended if this were the case?). They still had a democratic base, you could publicly veto, you could vote, you could do everything you can in a normal democratic society - but the core choices would be debated by experts and the public could decide based on a specialized councils decisions. These experts could also be voted by the public to special councils. There have been many comparisons to communism, but this is not the case - while they both had similar core values in socialism, they are quite different in forms of the concentration of power and ability. There were still separate but equal different branches of governments, and more of a democratic flavor than the preferred more authoritarian models that the other communist-flavored movements held.&lt;/p&gt;
&lt;p&gt;But, again, the movement that grew from nothing to close to 50,000 official members was eventually discarded and destroyed as pre-existing governments were wary of the changes.&lt;/p&gt;
&lt;p&gt;There is still a place for the movement, especially as technology has created the greatest revolution that the world has ever seen in terms of education, food equality, social equality, and leisure. I believe that once we reach the highest point of revolution (or reformation), and we have, a new form of economic and political systems will begin to be tested and put in place, and while they will be more reminiscent of communist and socialist theory than hypercapitalism, I do believe that many of the core components of communism are outmoded or outdated for the modern world. That doesn’t mean they can’t be warped (positively, or negatively) but that the core basis is fundamentally flawed for the world we live in.&lt;/p&gt;
&lt;p&gt;The people will win, they always have, but stretches of nationalism and fascist thoughts have been quite pervasive for rather short periods of time in all sections of human history regardless of the overall outcome. We are at the breaking point where we could become part of another, sad, part of history or we can minimize that time frame and push forward. It’s inevitable, but we can always work to make it less harsh,or less disastrous as it would have been. I am a pessimistic optimist, but capitalism, in its current form, will end faster than most believe.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Svelte-Capacitor 2.0 - Develop Hybrid Mobile Apps at Near Native Performance</title>
    <link href="https://macleodsawyer.com/tech/svelte-capacitor/"/>
    <updated>2022-02-10T00:00:00Z</updated>
    <id>/tech/svelte-capacitor/</id>
    <content type="html">&lt;p&gt;This is a project template for &lt;a href=&quot;https://svelte.dev&quot;&gt;Svelte&lt;/a&gt; + &lt;a href=&quot;https://capacitorjs.com&quot;&gt;CapacitorJS&lt;/a&gt; apps with live reload, granting the ability to quickly build production ready applications for iOS and Android at near-native performance using JavaScript (Svelte).&lt;/p&gt;
&lt;iframe src=&quot;https://ghbtns.com/github-btn.html?user=drannex42&amp;repo=svelte-capacitor&amp;type=star&amp;count=true&amp;size=large&quot; frameborder=&quot;0&quot; scrolling=&quot;0&quot; width=&quot;170&quot; height=&quot;30&quot; title=&quot;GitHub&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;a class=&quot;button active&quot; style=&quot;float:right&quot; href=&quot;https://github.com/drannex42/svelte-capacitor/&quot;&gt;Click here to view svelte-capacitor on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;background: #fff&quot;&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/drannex42/svelte-capacitor/raw/master/assets/svelte_cap.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;changelog&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#changelog&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Changelog&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;v2.0.0&lt;/strong&gt; - The new version is here, this comes with some better defaults, vite as the build manager, built in routing library, TypeScript, and aliases. While this could be seen as an ‘incremental’ update I think this works as a v2.0.0 as it was a complete rewrite.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Build Tool&lt;/strong&gt;: Changed the build tool to Vite from Rollup, this is the new and recommended way to develop Svelte applications, it’s faster, cleaner, and easier to handle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Routing&lt;/strong&gt;: Built in routing library, using Routify, I spent a considerable time debating on including one - I decided I would. This is mainly due to the amount of messages and emails(!) I received asking how to implement one, Routify is by far my favorite and so here it is. This is very easily removed and replaced with your preferred.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Typescript&lt;/strong&gt;: I personally do not use typescript as much as I should, but others do. I have included some TS configs for you.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;@components, @store, and @utils&lt;/strong&gt;: If you have ever taken a look at sveltekit they have these nifty aliases throughout their code so you don’t have to write ‘…/…/…/components’ or what have you. Now you can just do ‘@components/file’ and Vite will readily load them from the components folder, this makes it easy to create changes as you don’t need to change the file location on every move or copy. Please check out the &lt;a href=&quot;https://github.com/Subwaytime/vite-aliases&quot;&gt;Vite Aliases&lt;/a&gt; package for more questions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;setup&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#setup&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Setup&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Note that you will need to have &lt;a href=&quot;https://nodejs.org&quot;&gt;Node.js&lt;/a&gt; installed.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;get-started&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#get-started&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Get started&lt;/h3&gt;
&lt;p&gt;Install the dependencies…&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone &lt;span class=&quot;token string&quot;&gt;&quot;https://github.com/drannex42/svelte-capacitor.git&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; svelte-capacitor&lt;br /&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;run-local-dev-server-(no-capacitor)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#run-local-dev-server-(no-capacitor)&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Run local dev server (no capacitor)&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; run dev:start&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;add-your-capacitor-platform&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#add-your-capacitor-platform&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Add your Capacitor platform&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;npx cap &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; android // &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;or ios&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;run-local-dev-server-(with-capacitor)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#run-local-dev-server-(with-capacitor)&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Run local dev server (with capacitor)&lt;/h3&gt;
&lt;p&gt;Please see section below (Develop on your device with livereload)&lt;/p&gt;
&lt;h3 id=&quot;develop-on-your-device-with-livereload-(hot-reload)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#develop-on-your-device-with-livereload-(hot-reload)&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Develop on your device with livereload (hot reload)&lt;/h3&gt;
&lt;p&gt;If you’re only targeting Android, you only need to change the &lt;code&gt;server.url&lt;/code&gt; section in &lt;code&gt;capacitor.config.json&lt;/code&gt; to use &lt;code&gt;http://10.0.2.2:5001&lt;/code&gt;, since &lt;a href=&quot;https://stackoverflow.com/questions/9808560/why-do-we-use-10-0-2-2-to-connect-to-local-web-server-instead-of-using-computer&quot;&gt;Android Studio already adds a &lt;code&gt;localhost&lt;/code&gt; proxy&lt;/a&gt;. Just remember to remove it when building your app for production.&lt;/p&gt;
&lt;p&gt;If you’re targeting iOS or both, you will need to append your workstation IP to the &lt;code&gt;server.url&lt;/code&gt; section in &lt;code&gt;capacitor.config.json&lt;/code&gt; instead. To discover your workstation IP, just run &lt;code&gt;ifconfig&lt;/code&gt; or find it on the network settings.&lt;/p&gt;
&lt;p&gt;Tip: Remember you will need the &lt;code&gt;http://&lt;/code&gt; before the server IP.&lt;/p&gt;
&lt;p&gt;Back in the root folder:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm run dev:android&lt;/code&gt; or &lt;code&gt;npm run dev:ios&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will run the capacitor/svelte project with a web view pointing to your workstation’s IP. You should see the message &lt;code&gt;Welcome to Svelte!&lt;/code&gt; if svelte loaded correctly.&lt;/p&gt;
&lt;p&gt;Try to change something in &lt;code&gt;App.svelte&lt;/code&gt;, and you should see the content reload on your device.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need to have an emulator/device connected to adb&lt;/li&gt;
&lt;li&gt;Your device has to be connected to the same wifi network as your workstation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;change-splash-screen-and-app-icon%3A&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#change-splash-screen-and-app-icon%3A&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Change Splash screen and app icon:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add icon.png and splash.png to resources dir&lt;/li&gt;
&lt;li&gt;Recomended size:
&lt;ul&gt;
&lt;li&gt;Icon - 512x512&lt;/li&gt;
&lt;li&gt;Splash - 1920x1920&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Next, run the following to generate all images then copy them into the native projects:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;cordova-res ios --skip-config --copy
cordova-res android --skip-config --copy
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;to-build-a-production-application%3A&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#to-build-a-production-application%3A&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; To build a production application:&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Remember to remove the &lt;code&gt;server.url&lt;/code&gt; in &lt;code&gt;capacitor.config.json&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;npm run build:android&lt;/code&gt; or &lt;code&gt;npm run build:ios&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&quot;quick-tips&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#quick-tips&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Quick Tips&lt;/h2&gt;
&lt;h3 id=&quot;developer-tools&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#developer-tools&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Developer Tools&lt;/h3&gt;
&lt;p&gt;You can use any Chromium-based browser and use their Developer Tools (for Android atleast, have not tested iOS) to debug and access console commands on your personal device, by going to chrome://inspect#devices., edge://inspect#devices., vivaldi://inspect#devices., brave://inspect#devices, &amp;amp;c.&lt;/p&gt;
&lt;p&gt;The standard web inspector will also work for debugging and rewriting styling and html without using your IDE just like when building a normal website. This may have some issues with some forms of SVG-related svelte templating (I have had issues with using some chart libraries displaying in the web inspector), they will still show up on the device but not in the preview.&lt;/p&gt;
&lt;p&gt;You may use the address bar in the developer tools to navigate to direct views in your application, even without any tappable links to do so. This allows you to create hidden routes for testing.&lt;/p&gt;
&lt;h3 id=&quot;assets&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#assets&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Assets&lt;/h3&gt;
&lt;p&gt;Place any assets, CSS, client JS, Images in the &lt;code&gt;assets&lt;/code&gt; folder - not the public folder! On build and usage this will add everything to the public dist folder for copying to the device application. &lt;a href=&quot;https://vitejs.dev/guide/assets.html#the-public-directory&quot;&gt;See Vite.js on this settings&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;aliases&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#aliases&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Aliases&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;@components, @store, and @utils&lt;/strong&gt;: If you have ever taken a look at sveltekit they have these nify aliases throughout their code so you don’t have to write ‘…/…/…/components’ or what have you. Now you can just do ‘@components/file’ and Vite will readily load them from the components folder, this makes it easy to create changes as you don’t need to change the file location on every move or copy. Please check out the &lt;a href=&quot;https://github.com/Subwaytime/vite-aliases&quot;&gt;Vite Aliases&lt;/a&gt; package for more questions.&lt;/p&gt;
&lt;h3 id=&quot;routing-libraries&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#routing-libraries&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Routing Libraries&lt;/h3&gt;
&lt;p&gt;Since this is a Svelte application you will be able to use any routing manager that you prefer. I prefer routify, but others such as the following will work as well (Routify is built into this project, but easily changed)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Routify - https://github.com/roxiness/routify&lt;/li&gt;
&lt;li&gt;ItalyPaleAle/svelte-spa-router - https://github.com/ItalyPaleAle/svelte-spa-router&lt;/li&gt;
&lt;li&gt;EmilTholin/svelte-routing - https://github.com/EmilTholin/svelte-routing&lt;/li&gt;
&lt;li&gt;jorgegorka/svelte-router - https://github.com/jorgegorka/svelte-router&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;accessing-device-apis&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#accessing-device-apis&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Accessing Device APIs&lt;/h3&gt;
&lt;p&gt;CapacitorJS is/was based on Cordova and has &lt;em&gt;complete&lt;/em&gt; backwards compatibility with cordova plugins. To find plugins that allow you to access the device api’s easier, attempt to find cordova or capacitor plugins. You will need to view their (capacitorjs) docs to learn how to properly accesss those.&lt;/p&gt;
&lt;h3 id=&quot;why-didn%E2%80%99t-the-second-version-use-sveltekit%3F&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#why-didn%E2%80%99t-the-second-version-use-sveltekit%3F&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Why didn’t the second version use Sveltekit?&lt;/h3&gt;
&lt;p&gt;This is ready for production (this template is being used in several production applications already!) and Sveltekit is not, I also believe this is much more easily extensible and doesn’t lock you into the Sveltekit way of doing things (no opinionated API’s) while adding in defaults for Capacitor.js for application development on Android and iOS. You likely don’t need to learn a new paradigm, just use what you know with Javascript and Svelte to build cross platform applications at near native performance.&lt;/p&gt;
&lt;h3 id=&quot;find-a-bug%3F-want-to-add-a-feature%3F&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#find-a-bug%3F-want-to-add-a-feature%3F&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Find a bug? Want to add a feature?&lt;/h3&gt;
&lt;p&gt;Submit a PR! I would love to have more people working on this, the advantages of a system such as this vs NativeScript or React Native are innumerable especially in regards for how quickly you can get started and instant developer options and this could be built out to something great!&lt;/p&gt;
&lt;h3 id=&quot;are-you-using-this-project!-let-us-know!&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#are-you-using-this-project!-let-us-know!&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Are you using this project! Let us know!&lt;/h3&gt;
&lt;p&gt;I would love to keep a collection of all the projects using this!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This template was created by &lt;a href=&quot;https://drannex42.com/&quot;&gt;Drannex42 (Macleod Sawyer)&lt;/a&gt; of &lt;a href=&quot;https://dnxi.org&quot;&gt;DNX Industries&lt;/a&gt; - &lt;a href=&quot;https://github.com/drannex42/svelte-capacitor&quot;&gt;Source can be found here&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Le Demon De L&#39;Amour</title>
    <link href="https://macleodsawyer.com/music/le-demon-de-lamour/"/>
    <updated>2022-02-17T00:00:00Z</updated>
    <id>/music/le-demon-de-lamour/</id>
    <content type="html">&lt;p&gt;This album will be on repeat perhaps even more so than their last album, &lt;a href=&quot;/music/music-memoirs-of-a-rat-queen-album/&quot;&gt;Memoirs Of A Rat Queen (Album)&lt;/a&gt;, and again is already in the running for the best album of this year. I am a huge fan of this group, and can’t wait to hear more and more of their sound coming to the fore. Every track oozes an insane amount of creativity and originality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rating: 10/10 all the way though.&lt;/strong&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Uploading vs. Cloning a Mind</title>
    <link href="https://macleodsawyer.com/blog/uploading-versus-cloning-a-mind/"/>
    <updated>2022-03-14T00:00:00Z</updated>
    <id>/blog/uploading-versus-cloning-a-mind/</id>
    <content type="html">&lt;p&gt;In practice, the process of uploading a mind would almost certainly be creating a copy, or a mindclone, of a mind, but the difference between the two terminologies is separated by two very important aspects, outlined below as two (overly) simplified definitions.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The following is speculative, part of a group of fantastical writings exploring humanity and philosophy through futurism and realistic science fiction&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Definitions:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Uploading&lt;/strong&gt;&lt;/em&gt; - Accurately capture the pre-existing biological matter (the brain) and their one-to-one connections in the form of a pervasive direct copy of the mind and their biological &lt;small&gt;(i.e. natural)&lt;/small&gt; processes with or without a conversion to a computational medium.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Cloning&lt;/strong&gt;&lt;/em&gt; - A simulation of a mind that allows for non-natural modifications without the need for either a natural backward compatibility layer or a recreation of the biological structure and components to function.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p class=&quot;box button&quot;&gt;&lt;small&gt;The following is an excerpt from a discussion I had with another on the topic of &#39;uploading&#39; and &#39;cloning&#39; a mind.&lt;/small&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Before we could even start working on the herculean task of fully copying a mind, we’d first need to completely understand how the brain works. We’re not even close enough to that point to speculate how far away it might be.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I disagree. While I think understanding the mind is helpful, I don’t think relying on it as a basis for recreation is required. We wouldn’t recreate the way a tree grows just to have more paper - instead, we would find how to create the pulp without growing the tree. The brain has millions of years of cruft, evolutionary dead ends, and is painfully not as efficient as it should be because of it. Tech debt and brain debt both derive from the same formulaic iterative processes, and both are inefficient.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What even is a mind? We know that neurons are widely distributed throughout the body, 500 million (recently up from 100 million, we have no idea yet) in the gut alone, and that experience is not produced solely in the brain. There are also hormones and other neurotransmitters to consider. Variables evolve and change throughout life, alongside the brain in our skull. It could turn out that once we figured out how to tease all the pieces of self and memory out of the brain, we’d still be missing vital parts of the person’s sense of “I”.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What is an “I”? the “I” of myself five minutes ago is different than the “I” of myself five years ago and certainly different than the “I” of myself now. I don’t subscribe to the belief there is a concept of consciousness, we are all just a form of in-depth simulacra of what we perceive could be us, a method to understand the madness of the chaotic causality of the mind. Reality is subjective to the users experience, my green is your yellow, my blue is your red, we can’t determine what an “I” is if we can’t determine what the true reality is on its own.&lt;/p&gt;
&lt;p&gt;The brain has created a wonderful mechanism for &lt;a href=&quot;blog/sdrs-and-compression-algorithms/&quot;&gt;SDRs&lt;/a&gt;, where what we see and hear are negotiated with ourselves, and what we perceive is essentially a tarball that has been so compressed that the real true values are encrypted even from ourselves by using simpler calls of generalizations.&lt;/p&gt;
&lt;p&gt;I don’t believe we will ever &lt;em&gt;upload&lt;/em&gt; a mind but we will clone them. Cloning them would require less evolutionary cruft, more enhancement, faster iterations than evolution can ever do for it/ourselves. Crafting and creating a simulacrum that is similar enough to our existing mindscape, a method of transferring the core of our personality, experiences, opinions, and decisions, but not the 1:1 connections. Brains are fallible, prone to error on the smallest of things, with no real ability to change or upgrade (on the contrary, tends to degrade steadily and rapidly).&lt;/p&gt;
&lt;p&gt;Uploading ones mind isn’t, or shouldn’t be the goal, there are too many problems at home. Cloning a mind? Creating the ability to create decision matrixes based on prior experiences at a 75-90% similarity rate of the human subject? That is the goal. If you placed two of yourselves at this moment at a table and asked it a question, would they answer the same? Or would they have minor changes? Likely the latter where the minor changes are due to the different position they are resting in, if they are to the left or right of “you”, the distance to the nearest wall or table, or even if a breeze passes that they feel, but not “you”.&lt;/p&gt;
&lt;p&gt;The goal of cloning a mind is to create a similar enough enough decision tree that at inception they are the same, but with every moment afterward being rapidly different &lt;em&gt;as a feature, not a bug&lt;/em&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>FirefoxSidebar - Edge-like Vertical Tabs</title>
    <link href="https://macleodsawyer.com/tech/firefox-sidebar-v2022.03.15/"/>
    <updated>2022-03-15T00:00:00Z</updated>
    <id>/tech/firefox-sidebar-v2022.03.15/</id>
    <content type="html">&lt;h2 id=&quot;features%3A&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#features%3A&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Features:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Edge-like vertical tab design&lt;/li&gt;
&lt;li&gt;Tree style tab layout support (works with Sideberry &amp;amp; TST (legacy) version)&lt;/li&gt;
&lt;li&gt;Dynamic Indentation&lt;/li&gt;
&lt;li&gt;Automatic theme configuration for light and dark themes&lt;/li&gt;
&lt;li&gt;Custom theme configuration using Sideberry&lt;/li&gt;
&lt;li&gt;Support for tab groups&lt;/li&gt;
&lt;li&gt;Support for Tab Containers with visual identification&lt;/li&gt;
&lt;li&gt;Pinned tabs (right click to close)&lt;/li&gt;
&lt;li&gt;Built in CSS Extension Management&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;repository&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#repository&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Repository&lt;/h2&gt;
&lt;p&gt;&lt;a class=&quot;button&quot; href=&quot;https://github.com/drannex42/FirefoxSidebar/&quot;&gt;Click here to view FirefoxSidebar on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This post has been updated to reflect version 2022.03.15.&lt;/p&gt;
&lt;h2 id=&quot;updates&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#updates&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Updates&lt;/h2&gt;
&lt;p&gt;Release notes have migrated to &lt;a href=&quot;https://github.com/drannex42/FirefoxSidebar/releases&quot;&gt;here&lt;/a&gt;. You can find prior release notes before v12021.12.22 &lt;a href=&quot;https://github.com/drannex42/FirefoxSidebar/releases/tag/v12021.12.22&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&quot;how-to-use&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#how-to-use&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; How to use&lt;/h1&gt;
&lt;p&gt;To use FirefoxSidebar you will need to clone this repo into your firefox profile as the &lt;code&gt;chrome&lt;/code&gt; folder and then follow the Sideberry section below. Both are outlined below in how to do so.&lt;/p&gt;
&lt;h2 id=&quot;1.-userchrome.css&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#1.-userchrome.css&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; 1. userChrome.css&lt;/h2&gt;
&lt;p&gt;Follow the instructions for adding this repository to your Firefox Profile.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;code&gt;about:profiles&lt;/code&gt; in your address bar&lt;/li&gt;
&lt;li&gt;Click on the &#39;open root folder` button for your current profile&lt;/li&gt;
&lt;li&gt;Open this folder in your terminal&lt;/li&gt;
&lt;li&gt;Clone this repo with the following command:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/drannex42/FirefoxSidebar.git &lt;span class=&quot;token string&quot;&gt;&quot;chrome&quot;&lt;/span&gt;`&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;In Firefox navigate to &lt;code&gt;about:config&lt;/code&gt; in your address bar&lt;/li&gt;
&lt;li&gt;change the characteristic &lt;code&gt;toolkit.legacyUserProfileCustomizations.stylesheets&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Restart Firefox&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You could skip the clone step entirely if you manually add the FirefoxSidebar files to the “chrome” folder in your Firefox Profile (you will need to make a &lt;code&gt;chrome&lt;/code&gt; folder if it doesn’t exist!).&lt;/p&gt;
&lt;p&gt;Visit &lt;a href=&quot;https://www.userchrome.org/how-create-userchrome-css.html&quot;&gt;userchrome.org&lt;/a&gt; if you are confused or have any questions.&lt;/p&gt;
&lt;h2 id=&quot;2.-sideberry&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#2.-sideberry&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; 2. Sideberry&lt;/h2&gt;
&lt;p&gt;Load the &lt;code&gt;sideberry-data.json&lt;/code&gt; file into your Sideberry addon by using the ‘import’ section under ‘Help’.&lt;/p&gt;
&lt;p&gt;If you dislike any of the theme presets for dark or light themes, or you have a particular color scheme in mind then navigate to Sideberry Settings &amp;gt; Style Editor (found at the end of the settings sidebar). The preference is to replace the values in the right panel, not in the theme editor to the left - this way you can easily update to newer versions in the future.&lt;/p&gt;
&lt;h3 id=&quot;extensions&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#extensions&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Extensions&lt;/h3&gt;
&lt;p&gt;All extensions can be found in &lt;code&gt;/extensions&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In version 2022.02.23 we broke up the components into extensions using css imports. This makes adding and removing features incredibly easy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The following extensions are added:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Window Controls / Client Side Decorations (CSD)
&lt;ul&gt;
&lt;li&gt;This adds the window controls to be inline with your address bar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[Superbox Removal
&lt;ul&gt;
&lt;li&gt;This removes the superbox and fixes the address bar padding.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[Bookmark Arrows]
&lt;ul&gt;
&lt;li&gt;This adds a nice little arrow next to your bookmark folders.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;user-settings&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#user-settings&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; User Settings&lt;/h2&gt;
&lt;p&gt;Please backup the &lt;code&gt;prefs.css&lt;/code&gt; and the &lt;code&gt;custom.css&lt;/code&gt; files before updating to a new versionof FirefoxSidebar.  There may be new additions to these files, so you will need to re-add your preferencess to the file accordingly. These files should be updated &lt;em&gt;far less&lt;/em&gt; than the other files, but just to make sure please save them.&lt;/p&gt;
&lt;h3 id=&quot;preferences&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#preferences&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Preferences&lt;/h3&gt;
&lt;p&gt;There are a number of preferences you can enable or disable in the &lt;code&gt;prefs.css&lt;/code&gt; file. There are examples and descriptions of the different preferences within that file.&lt;/p&gt;
&lt;h3 id=&quot;custom-tweaks&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#custom-tweaks&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Custom Tweaks&lt;/h3&gt;
&lt;p&gt;For ease of use I suggest using the &lt;code&gt;custom.css&lt;/code&gt; file to for your personal tweaks.&lt;/p&gt;
&lt;h3 id=&quot;if-you-use-ff-without-the-bookmarks-bar&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#if-you-use-ff-without-the-bookmarks-bar&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; If you use FF without the bookmarks bar&lt;/h3&gt;
&lt;p&gt;Then the sidebar switcher will be missing, edit &lt;code&gt;custom.css&lt;/code&gt; and uncomment the relevant section.&lt;/p&gt;
&lt;h2 id=&quot;treestyletabs-(legacy)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#treestyletabs-(legacy)&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; TreeStyleTabs (Legacy)&lt;/h2&gt;
&lt;p&gt;Either add the firefox/treestyletabs.css to your TST addon preferences or import the treestyletabs-*.json preferences to your TST addon (&lt;em&gt;prefered&lt;/em&gt;)&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Designer Carnage</title>
    <link href="https://macleodsawyer.com/music/esa-designer-carnage/"/>
    <updated>2022-03-20T00:00:00Z</updated>
    <id>/music/esa-designer-carnage/</id>
    <content type="html">&lt;p&gt;Absolute monstrous piece of designer carnage enveloped in gritty and dark industrial ebm symphonies.&lt;/p&gt;
&lt;p&gt;Rankings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Best Track: Saturnalia (#10)&lt;/li&gt;
&lt;li&gt;Most Original: Come and Find Me (#6)
&lt;ul&gt;
&lt;li&gt;If you love electroswing, saxophones, and industrial, this is your thing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Auto Generate Social Images</title>
    <link href="https://macleodsawyer.com/tech/autogen/"/>
    <updated>2022-03-21T00:00:00Z</updated>
    <id>/tech/autogen/</id>
    <content type="html">&lt;p&gt;I needed a quick and simple way to effortlessly make open-graph images, most of the existing frameworks allowed very little customization, and so this was hastily built.&lt;/p&gt;
&lt;p&gt;This was primarily built with Eleventy/11ty in mind, but is made in such a way it could be expanded and adapted quite easily.&lt;/p&gt;
&lt;p&gt;You can find the repo for this &lt;a href=&quot;https://github.com/drannex42/auto-social-images&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;example&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#example&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Example&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/generated/techautogen.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-to-use&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#how-to-use&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; How to Use&lt;/h2&gt;
&lt;h3 id=&quot;installation&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#installation&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Installation&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Load generate.html and generate_pages.njk into your 11ty src directory (wherever you keep all those wonderful pages).&lt;/li&gt;
&lt;li&gt;Load generate.js into the top of your project/repo/folder directory&lt;/li&gt;
&lt;li&gt;Add this to the bottom of your pckage.json build scripts
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;generate&amp;quot;: &amp;quot;node generate.js&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;`npm install puppeteer fs-extra -D’&lt;/li&gt;
&lt;li&gt;Add the following to your 11ty configs:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt; eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;encodeString&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; title &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;encodeURIComponent&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;str&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; title&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;generation&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#generation&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Generation&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open a terminal, start 11ty (normally &lt;code&gt;npm start&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Open a second terminal, run &lt;code&gt;npm run generate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Answer the few prompts at the end, and there you go.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;open-graph&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#open-graph&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Open Graph&lt;/h3&gt;
&lt;p&gt;The image files are saves as a slug version of your post (page) url, this will turn &lt;code&gt;/tech/autogen&lt;/code&gt; into &lt;code&gt;techautogen&lt;/code&gt; and any time you need to share this image or display it, call &lt;code&gt;techautogen.jpg&lt;/code&gt; in your generated assets folder (templating is nunjucks, make the approriate changes for your templating language).&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;og:url&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://your-url-here.com/tech/autogen/&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;og:image&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://your-url-here.com/assets/img/generated/techautogen.jpg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;og:type&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;article&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;twitter:card&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;summary_large_image&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;how-it-works&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#how-it-works&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; How it works&lt;/h2&gt;
&lt;p&gt;Design your page in generate.html using CSS and HTML, grab the details from query parameters, and bind them to a div. This removes the need to generate additional folders and images based on your pre-existing posts as this will only generate one additional page on build and use url parameters for their dynamic output.&lt;/p&gt;
&lt;p&gt;Puppeteer, a headless browser, will load the HTML page (with the correct URL params), snap a picure, upscales it 2x, and saves it in a &lt;code&gt;./generated/&lt;/code&gt; directory for every post. Once every post has an image, the script will ask if they look correct (you can inspect by looking at your &lt;code&gt;./generated&lt;/code&gt; folder), if they are the script will move the files to a new directory in your assets directory for you.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note: Make sure that 11ty isn’t autobuilding every time a new image is added, this can cause some problems with the generation tasks.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;variables&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#variables&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Variables&lt;/h2&gt;
&lt;p&gt;Check out the generate_pages.njk file, and ensure that your variables align with your system. Everyone has a different style, it’s rather simple to add and remove.&lt;/p&gt;
&lt;h2 id=&quot;to-do&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#to-do&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; To Do&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Integrate Svelte for faster production, perhaps overkill.&lt;/li&gt;
&lt;li&gt;Use a more standard way of encoding params, just already had an encoding filter for another utility.&lt;/li&gt;
&lt;li&gt;Default Theme&lt;/li&gt;
&lt;li&gt;Config File&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;credit&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#credit&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Credit&lt;/h2&gt;
&lt;p&gt;This project took inspiration from &lt;a href=&quot;https://mtm.dev&quot;&gt;mtm.dev&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Elixir: Hosting a SPA using Plug.Router, Plug.Static, and Cowboy</title>
    <link href="https://macleodsawyer.com/tech/elixir-spa-plug/"/>
    <updated>2022-03-29T00:00:00Z</updated>
    <id>/tech/elixir-spa-plug/</id>
    <content type="html">&lt;p&gt;I am developing a new type of Nerves-based software using Elixir, and didn’t want the overhead or all of the features (and design paradigms) of Phoenix. Instead I decided to use &lt;a href=&quot;https://hexdocs.pm/plug_cowboy/Plug.Cowboy.html&quot;&gt;Plug.Cowboy&lt;/a&gt; and &lt;a href=&quot;https://hexdocs.pm/plug/Plug.Static.html&quot;&gt;Plug.Static&lt;/a&gt; to handle a web server that hosts a &lt;a href=&quot;https://svelte.dev/&quot;&gt;Svelte SPA&lt;/a&gt; (that is built from &lt;a href=&quot;https://vitejs.dev/&quot;&gt;Vite&lt;/a&gt;) and reads from an API that communicates with our firmware directly.&lt;/p&gt;
&lt;p&gt;Common problems with hosting an SPA using Plug.Static (and nearly every other static file asset server):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You can host static files fine, but for routing (which an SPA normally handles for you) you could not arbitrarily go to a &lt;code&gt;/location/like/this&lt;/code&gt; without first passing through &lt;code&gt;/index.html&lt;/code&gt;. This makes hyperlinking impossible.&lt;/li&gt;
&lt;li&gt;We need to also host a set of (rest) API’s for our application to communicate with.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There were a few pre-existing solutions in Elixir, including using &lt;a href=&quot;https://github.com/mbuhot/plug_static_index_html&quot;&gt;a six year old package&lt;/a&gt; that used regex, some outdated calls, required loading yet another dependency, and &lt;a href=&quot;https://github.com/mbuhot/plug_static_index_html/issues/5&quot;&gt;not handling matching root paths without a slash&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some requirements were needed:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No additional dependencies, I prefer to keep minimal dependencies in my projects, lower security attack surfaces,  easier to manage, faster loading times, smaller builds.&lt;/li&gt;
&lt;li&gt;Understndable and modifiable, everything needs to be able to be understandable on first glance&lt;/li&gt;
&lt;li&gt;No project specific API’s as I want this to be used in more than just the current project.&lt;/li&gt;
&lt;li&gt;Make it &lt;a href=&quot;https://www.youtube.com/watch?v=0nKizH5TV_g&quot;&gt;simple and clean&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;how-do-we-solve-this%3F&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#how-do-we-solve-this%3F&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; How do we solve this?&lt;/h2&gt;
&lt;p&gt;We use our build manager to output our production/dev builds to a &lt;code&gt;/priv/app&lt;/code&gt; folder, define Plug.Static to read from thosebuilt files and directories, and then created a &lt;strong&gt;match _ do&lt;/strong&gt; statement that loads a file from the private directory (&lt;code&gt;index.html&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Anything that would normally come up as a &lt;code&gt;404&lt;/code&gt;, instead loads the index.html, the entry point to your SPA (which should handle your routing for you).&lt;/p&gt;
&lt;p&gt;I’ve used this method before in &lt;a href=&quot;https://github.com/drannex42/svelte-vibe.d&quot;&gt;the D Language with vibe.d&lt;/a&gt; &lt;small&gt;[Warning: That code is &lt;i&gt;not&lt;/i&gt; good.]&lt;/small&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-to-integrate&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#how-to-integrate&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; How to integrate&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Have your SPA build output to a &lt;code&gt;/priv/app&lt;/code&gt; folder (or wherever else you choose)&lt;/li&gt;
&lt;li&gt;Define where your Plug.Static is to read from&lt;/li&gt;
&lt;li&gt;Define your API endpoints, if you want.&lt;/li&gt;
&lt;li&gt;When it can’t find a match (404: Not Found), inject the &lt;code&gt;index.html&lt;/code&gt; file and let the SPA handle the routing.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;example&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;#example&quot;&gt;
          &lt;span aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;
        &lt;/a&gt; Example&lt;/h3&gt;
&lt;pre class=&quot;language-elixir&quot;&gt;&lt;code class=&quot;language-elixir&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;defmodule&lt;/span&gt; &lt;span class=&quot;token module class-name&quot;&gt;YourApp&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token module class-name&quot;&gt;Plug&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token module class-name&quot;&gt;Router&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;token module class-name&quot;&gt;Plug&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token module class-name&quot;&gt;ErrorHandler&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  plug &lt;span class=&quot;token module class-name&quot;&gt;Plug&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token module class-name&quot;&gt;Static&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;at:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;from:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token atom symbol&quot;&gt;:your_app&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;priv/app&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;# Only allow these files and directories (define your SPA output folders)&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;# that way you won&#39;t receive `Plug.Conn.AlreadySentError` when using the /api endpoints.&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;only:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;~w(index.html assets favicon.ico)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class=&quot;token comment&quot;&gt;# API Endpoints&lt;/span&gt;&lt;br /&gt; &lt;span class=&quot;token comment&quot;&gt;# Any other routes you need that aren&#39;t part of the SPA view&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;plug&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token atom symbol&quot;&gt;:match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token function&quot;&gt;plug&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token atom symbol&quot;&gt;:dispatch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  get &lt;span class=&quot;token string&quot;&gt;&quot;/api/v1&quot;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;send_resp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;conn&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Feel free to use API endpoints!&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  get &lt;span class=&quot;token string&quot;&gt;&quot;/api/v1/hello&quot;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;send_resp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;conn&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Hello World!&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;# Handle all 404s by injecting the index.html file at that route,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;#  and let the SPA handle it. &lt;/span&gt;&lt;br /&gt;  match _ &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;&lt;br /&gt;    conn &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;conn &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;resp_headers:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;content-type&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;text/html&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;send_file&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;conn&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token module class-name&quot;&gt;Path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token atom symbol&quot;&gt;:code&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;priv_dir&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token atom symbol&quot;&gt;:your_app&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;app/index.html&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;defp&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;handle_errors&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;conn&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token attr-name&quot;&gt;kind:&lt;/span&gt; _kind&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;reason:&lt;/span&gt; _reason&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;stack:&lt;/span&gt; _stack&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token function&quot;&gt;send_resp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;conn&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; conn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;status&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Something went wrong&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;That’s it! A simple and clean soluton for something that has plagued issues across the Plug repositories for years. The web is increasingly heading towards using single page applications (for better or worse) and I hope this helps someone else down the line as it has for me.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Electricity is just normalized magic</title>
    <link href="https://macleodsawyer.com/blog/electricity-is-magic/"/>
    <updated>2022-04-07T00:00:00Z</updated>
    <id>/blog/electricity-is-magic/</id>
    <content type="html">&lt;p&gt;The following is an excerpt of a conversation I started &lt;a href=&quot;https://tumblr.macleodsawyer.com/post/655110883832463360/electricity-is-just-normalized-magic&quot;&gt;on tumblr&lt;/a&gt;, thus its brevity.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;We have taken a rather ubiquitous material that isn’t quite solid, isn’t a gas, isn’t a liquid, yet exists everywhere and in everything, and we have harnessed it to move things, not just moving physical things, but moving thoughts, moving ideas, moving everything that we can - &lt;em&gt;because we can&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We have harnessed a source of power that surrounds us, harms us, attacks us, and yet we can bend it for our own gains. We can use this power to move things that thousands couldn’t, we can use it to create new materials, clean water, keep hearts running, create new bodily extensions, create medicines for the worst diseases and maladies thrown at us, amd use it so we can reach out and touch new worlds, new stars, new &lt;em&gt;everything&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We didn’t fully understood why it existed, the risks, or even their possibilities a little over a hundred years ago, and yet we, as a species, still just went for it. You wouldn’t have been able to read this without it.&lt;/p&gt;
&lt;p&gt;I am a scientist in the purest sense, I am an inventor in the maddest, and I know just how insane it is that we can control the &lt;a href=&quot;https://en.wikipedia.org/wiki/Aether_(classical_element)&quot;&gt;aether&lt;/a&gt; and bend it to our will and accomplish things no other being in our known existence has ever done. That is truly the definition of magic, a source of energy used to change the fundamental natural laws of our existence.&lt;/p&gt;
&lt;p&gt;Science is an art form, it is a method of detailing and explaining the universe. It is a poem that requires several drafts, several false starts, and finally a conclusion that is left to the reader to determine its conclusion or truth. Electricity is both a scientific force of nature, and a magical power that we summon, create, expel, twist, and manage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Electricity is just normalized magic.&lt;/strong&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>L5 by 2035</title>
    <link href="https://macleodsawyer.com/blog/l5-by-2035/"/>
    <updated>2022-09-22T00:00:00Z</updated>
    <id>/blog/l5-by-2035/</id>
    <content type="html">&lt;p&gt;Eventually, my companies technology and robots will be working within all the lagrange points (L4/L5), the moon, mars, and beyond. I am sure of it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“…I strongly feel like you misunderstand how fast technology like that advances”, somone online after I posted that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You will be very surprised at how fast technology &lt;em&gt;actually&lt;/em&gt; advances. The internet didn’t exist more than thirty years ago (especially in its current state, and less than 20 years since it started hitting the mainstream), truly mobile phones are even younger! and smart phones? we’ve only had them reach the mainstream in the last ten years with over 83.40% (6.64 billion people!) of the entire world population having one!&lt;/p&gt;
&lt;p&gt;Want to break out of the modernity loop? Electricity has only been in a simple majority of homes for* less than a hundred years (1925). *Cars? Majority of people didn’t have a vehicle of any kind *in the family, in America, *until 1929, &lt;em&gt;both less than a century ago&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We went from the first ever powered flight *(that was only 12 seconds long!) *to commercial flights in less than 15 years and then we went from the first commercial flight to entering space in less than 20 years, and then from the edge of space to the surface of the moon in less than eight years!&lt;/p&gt;
&lt;p&gt;You are really underestimating just how &lt;em&gt;fast&lt;/em&gt; technology like this advances.&lt;/p&gt;
&lt;p&gt;I might be delusional in my aspirations, overly excited, overly optimistic, but I know it can and will be done. But, we will see! I would rather be delusional and excited for the future than be myopic and dystopic about it.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Returning to the Moon: The Launch of Artemis I</title>
    <link href="https://macleodsawyer.com/blog/artemis-launch/"/>
    <updated>2022-11-16T00:00:00Z</updated>
    <id>/blog/artemis-launch/</id>
    <content type="html">&lt;video controls=&quot;&quot; width=&quot;100%&quot;&gt;
    &lt;source src=&quot;/assets/uploads/artemis-1-launch.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;p&gt;Watching the launch of the Artemis I rocket last night from NASA was incredible — there are several shots that truly look like a music visualizer that could have only been run in winamp, with its pulsating beams of explosive transcendent exhaust propelling the craft through the backdrop of the black void called night. I’ve included my favorite moment above.&lt;/p&gt;
&lt;p&gt;This rocket, the most powerful in history and the world, will be circling the moon and return to earth over the next six days. This is the first step to get us back to the moon. Artemis II is expected to launch with a full crew to flyby around the moon in 2024, followed closely by Artemis III which will feature a landing party to begin the preparations for setting up our first exoplanetary pseudo-permanent base on the moon (Artemis IV/V are developing the Lunar Gateway space station for easy travel to and from the surface of the moon), the current launch of Artemis III is scheduled for 2025/2026. This will be the first time we will have been back to the moon since 1972.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Waking Up: Overcoming the Obstacles to Human Potential</title>
    <link href="https://macleodsawyer.com/books/waking-up/"/>
    <updated>2022-12-01T12:06:36Z</updated>
    <id>/books/waking-up/</id>
    <content type="html">&lt;p&gt;Some parts are devilishly good, other parts a drag, overall a decent book that performs well in explaining the core concepts of psychoanalysis than in the spiritual.&lt;/p&gt;
&lt;p&gt;The metaphors ascribing human components to machinery, robots,  automation, or general technology were very well done - but the moment it dives deeper into the ‘spirituality’ of it all, it begins to lose focus. While the teachings of the book are based on profound implications and overall good throughput of human ideology and perceptions of consciousness, I can’t bring myself to be persuaded that the less concrete examples or meditations are all that grand. Perhaps this is due to my uncooperative &lt;em&gt;spirits&lt;/em&gt; toward anything in the &lt;em&gt;spiritual&lt;/em&gt; realm, but I just can’t get myself to enjoy them.&lt;/p&gt;
&lt;p&gt;Towards the end, the book dug a bit deeper, and shallower, by having a rapid dash of dozens of short ideas on ‘Practices’. I believe this was a mix of not enough time, motivation, or interest on the part of the author, and left the ending feeling rather rushed and not as nicely laid out as the rest of the book. If someone has an interest in the engineering side of spirituality and the associated vibes, then check it out. If one is expecting a full counter-cultural spiritual ascension, then you will be in the wrong place and sorely lacking.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>The internet isn&#39;t real</title>
    <link href="https://macleodsawyer.com/blog/the-internet-isnt-real/"/>
    <updated>2022-12-07T00:00:00Z</updated>
    <id>/blog/the-internet-isnt-real/</id>
    <content type="html">&lt;p&gt;The internet isn’t real  that doesn’t mean what you learn, say, or do doesn’t or can’t be brought out into your real life, just that this place is both infinite, severely limited, and both existent and non-existent at the same time.&lt;/p&gt;
&lt;p&gt;Kick back, enjoy your time here, and anything that’s powerful enough to come into your real life is valid. This place is a beautiful garden full of weeds that will need to be pruned by you — everything here will wither and disappear once you forget about them and be replaced by something new, some of it good, some of it pretty, and some of it is harsh and strangling. Even with the worst parts visible we still all come here because we enjoy it, You should always make sure that the experience you are getting out of it is one that makes you your best version, the one that makes you feel comfortable, no need to wallow in uncomfortable patches any longer than you really want to.&lt;/p&gt;
&lt;p&gt;This place doesn’t fully exist, just bits and pieces do, do whatever you want.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Alchemist 2 (Album)</title>
    <link href="https://macleodsawyer.com/music/savant-alchemist-2/"/>
    <updated>2022-12-11T00:00:00Z</updated>
    <id>/music/savant-alchemist-2/</id>
    <content type="html">&lt;p&gt;This rivals the original album in every single way, every song has been meticulously remade form scratch, and it so much funkier and exciting than the original that I’ve been playing near weekly since release ten years ago.&lt;/p&gt;
&lt;p&gt;Thank you Savant for working so hard on this, ten years in the marking! Every release is just infinitely better than the last.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>The Death Archives</title>
    <link href="https://macleodsawyer.com/stories/the-death-archives/"/>
    <updated>2023-04-11T23:42:00Z</updated>
    <id>/stories/the-death-archives/</id>
    <content type="html">&lt;p&gt;This is the first short story I’ve written in a long time, I’ve decided to carve out a nice little area for them. I normally just write them for myself, but perhaps others will find them enjoyable.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The pen dipped and swayed across the page, a poetic means to a more stoic event. Death was a limited event, reserved only for the most fortunate in the valley, here there was nothing to do but to live.&lt;/p&gt;
&lt;p&gt;The writer rose from their coveted corner embossed with a small stack of papers, blue marbled ink, and a centuries old writing vessel perched on a composite material that hadn’t been produced in over a hundred years older than the pen. The manufacturing facilities had stopped once the transit network was restricted, and while once there seemed to be no end of transit, the Leadership had deemed its ability to move ideas to be a detriment to the dreams of the industrial empire.&lt;/p&gt;
&lt;p&gt;Light glinted through the bookcases and made its way to the darker corner. The moon was brighter than the sun these days, perching and peering through the glass and fortified fields of dampeners. The moon, a source of energy, and a source of living, a creation gifted to the workers to protect them from prolonged radiation, a near thankless task for the greater good.&lt;/p&gt;
&lt;p&gt;Death as it were, was not a greater good. The definitive end to a lifetime of action is to be seen as the enemy of existence, and there was nothing less natural than to submit to such a weakness. The writer of death decrees has a life that is unnoticeable, disregarded, and strangely misguided. For when there is a death no one reads them, no one notices them, and they were there only to catalogue and file them away for an undefinable purpose. No one ever peered through the files, no one learned their names, no one knew their causes, no one likely even know they were there. There is nothing strange about this, there is nothing strange about any of this, except that these deaths, rarely, but sometimes happen.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“Must be another mistake, the message receipt is not verifiable, please resubmit all documentation of the deceased”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This was the correct order of writing decrees, receive the request via vialink, write out the death decree by pen and paper, both a slowly dwindling resource, and file them accordingly to the written archive guidelines. Those written guidelines had been lost for nearly as long as the pen had been constructed, but the writer forges on and files them appropriately.&lt;/p&gt;
&lt;p&gt;The Archives once held a team, but nearly all members had been relocated after the Prime Elector decreed that transit was to be closed, and that all facilities were to be transferred. This facility was set to be transferred 62,036 days ago.&lt;/p&gt;
&lt;p&gt;As they navigate across the hall and into the appropriate room for filing, they stop to ponder if the deaths are increasing, or decreasing, given the time that they have been there. The only problem with that, is that the writer could not fathom the amount of time they had been there. They could not remember where their first death was recorded, nor the last transmission that was verified. The time had dwindled and they were running seconds behind their standard filing rate, the system will log this and notify that there has been a change in service status. A demerit seems worthy, but what that means is lost to the caretaker.&lt;/p&gt;
&lt;p&gt;After carefully selecting the box that will hold the file and certificate, they find their way back to their desk where they will sit and await the results for verification, any verification.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Disaster strikes as disaster does, endlessly fornicating into a baroque sham of attention to derive pleasure from the issues at hands. A center of attention for a whirlwind storm gaining ground, passing, frolicking, from problem to problem as if they were cities sitting along a beaten down coast resting on the shores of a country with boundless water at its edges.&lt;/p&gt;
&lt;p&gt;This world held no such thing. No water, no plants, no people, no disasters. In the history of their current idyllic situation, no disaster had ever struck this region. These deaths were nonsensical, intangible, they were neither sending nor receiving, for death does not deserve a place of this kind and yet they continued to file their decrees as if they were receiving.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“There must be more than we have ever had”&lt;/em&gt; they swiftly concluded, looking into the expression in the pristine glow of the old desk, unknowing what would happen next. The marbled blue of the pen had become faint, the paper becoming scarcer.&lt;/p&gt;
&lt;p&gt;The facility was set to be transferred 87,236 days ago.&lt;/p&gt;
&lt;p&gt;A piercing sound of obstetrical decadence, pulsating waves of electrical throughput to deliver a notification of desire for an action to be made. The creation of such a sound is evident of only one thing, that there was something out there, and now there wasn’t.&lt;/p&gt;
&lt;p&gt;Information flowing into the mind and onto the paper as quickly as it was given, first by thought followed by pen to paper, pen to paper, pen to paper. Repeating the lines three times in every way, crisscrossed. Diligently designed to ensure optimal performance and quality of the archivists work, to ensure verification of the information, and to ensure that all information was received and defined as diligently as it should be.&lt;/p&gt;
&lt;p&gt;Diligence is a requirement for the optimal system for the archivist, all deaths to be recorded, and they were completed in the same order and submitted for verification in the same way.&lt;/p&gt;
&lt;p&gt;The caretaker quickly arose and decided on a box to place the decree, this was different than before, incorrect, they must see the available boxes before deciding where the decree must rest for submission. They anticipated that the system would realize this, a demerit would surely be worthy.&lt;/p&gt;
&lt;p&gt;They placed the decree into the box and the decree burst brightly as the copy was made and the original was removed from the writers possession. They awaited the response from verification, they were running behind, ten seconds, perhaps the system would penalize them for this.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“The message receipt is not verifiable, please resubmit all documentation of the deceased”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;They returned to their dulling desk of contentment, looking into the window filtered by the cracked dampners and saw that the moon was still there overhead, farther and farther from being touched as ever before.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The facility was set to be transferred 104,153 days ago.&lt;/p&gt;
&lt;p&gt;The settling of the division was a drought panged by the beating drums of life. The Prime Elector had decreed with an alliance of The Leadership that death was to be stopped in this field of blissful ambivalence. That death was to be removed, that disease would be ended, and that existence would be made fortified out of the realm.&lt;/p&gt;
&lt;p&gt;All members of the Archives were transported absent one, the facility was to be lifted and removed from this location and have their archives archived for posterity.&lt;/p&gt;
&lt;p&gt;A moment of declaration sounded in the archivist, there was a new death to be recorded. Information flowing from the hand of the writer, leading to the selected box, information brightly screaming against the quiet of the world as it burned from the caregivers reach. Filed. Submitted. Now minutes behind, awaiting verification.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“The message receipt is not verifiable, please resubmit all documentation of the deceased”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The archivist returned to their decayed corner, light no longer shining brightly through as the moon had left just as the sun had left, the writer sat alone, staring into the reflection of space itself without hindrance, &lt;em&gt;this was the correct order of writing decrees&lt;/em&gt;. &lt;em&gt;There is no other method to await verification.&lt;/em&gt; The only thing left is to wait for the next death.&lt;/p&gt;
&lt;p&gt;The Archivist sat waiting for their next moment of archival, to complete the task gifted to them, to await death.&lt;/p&gt;
&lt;p&gt;The facility was set to be transferred 12,483,564 days ago.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>The technical problems with LLMs</title>
    <link href="https://macleodsawyer.com/blog/current-issues-with-llms/"/>
    <updated>2023-11-03T00:00:00Z</updated>
    <id>/blog/current-issues-with-llms/</id>
    <content type="html">&lt;p&gt;I think my biggest (technical, long-term) issues with current generation AI, primarily through LLMs such as ChatGPT, are the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You cannot readily replicate responses, which is the entire point of the scientific process. To ensure correct results for discovery and use is the ability to easily replicate results.&lt;/li&gt;
&lt;li&gt;They are primarily cloud based, which means you &lt;strong&gt;will not&lt;/strong&gt; be able to stand them up for testing in 1-5 years and replicate any sort of results or research papers that may be discovered now. Technical, direct, or anything else.&lt;/li&gt;
&lt;li&gt;They are primarily cloud based, which means any thing you throw at them, will not be able to be tuned with similar characteristics without massive manual testing as they are internally changed all the time.&lt;/li&gt;
&lt;li&gt;They are primarily cloud based, which means you cannot have any ownership or security in the knowledge, that they are safely utilizing your data.&lt;/li&gt;
&lt;li&gt;They are primarily cloud based, which means they can price you out of their system at any time.&lt;/li&gt;
&lt;li&gt;They are primarily cloud based, which means that they &lt;strong&gt;will&lt;/strong&gt; price you out of their system at any time.&lt;/li&gt;
&lt;li&gt;They are primarily cloud based, which means they will break your/their API, and there will be no recompense or ability to change providers.&lt;/li&gt;
&lt;li&gt;They are all primarily a private company, and if you build on their platform, then you have no platform of your own. Your business, is dependent on, and is &lt;em&gt;their&lt;/em&gt; business.&lt;/li&gt;
&lt;li&gt;You own nothing. They own all of it. No matter the legal contract you have with them will protect you from that.&lt;/li&gt;
&lt;li&gt;They are primarily cloud based, they are primarily private businesses, and they are anti-scientific development as they are black boxes of inputs, controls, and outputs.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Anything you develop on them now, will not work the same, if at all, in the future. You will have virtually, tangentially, literally, no legacy or agency.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Brain tissue on a chip achieves voice recognition</title>
    <link href="https://macleodsawyer.com/l/brain-on-a-chip/"/>
    <updated>2024-01-05T23:32:27Z</updated>
    <id>/l/brain-on-a-chip/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The ball of neurons, known as an organoid, created in Guo’s lab is less than a nanometer wide. It was connected by an array of electrodes to a circuit board, where machine-learning algorithms decoded responses from the organoid.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;After a brief training period, Brainoware was able to distinguish between the voices of eight subjects based on their varying pronunciation of vowels. &lt;strong&gt;The system achieved an accuracy rate of 78%.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Brainoware was also able to successfully predict a Henon map, a mathematical construct in the field of chaotic dynamics, with greater accuracy than an artificial network.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Incredible development in the area of biocomputing, and either someone has a great sense of 1950s retro humor to call it brain-o-ware, or they are horrible at coming up with names. All that matters is that the research is astounding.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Japan&#39;s 7.6-magnitude earthquake lifted land out of the sea, extending parts of its coastline by as much as 820 feet</title>
    <link href="https://macleodsawyer.com/l/japan-earthquake-coastline/"/>
    <updated>2024-01-07T02:10:53Z</updated>
    <id>/l/japan-earthquake-coastline/</id>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/assets/uploads/1000002523.jpg&quot; alt=&quot;A region of the western Noto Peninsula in June 2023 (left) and January 2024 (right) showing coastal expansion after the earthquake. &quot; /&gt;&lt;/p&gt;
&lt;p&gt;A region of the western Noto Peninsula in June 2023 (left) and January 2024 (right) showing coastal expansion after the earthquake.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Scientists attempt to explain “magic islands” on Saturn’s largest moon</title>
    <link href="https://macleodsawyer.com/l/magic-space-islands/"/>
    <updated>2024-01-10T04:18:39Z</updated>
    <id>/l/magic-space-islands/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;These bright and unusually smooth spots dotting the moon’s liquid methane and ethane oceans first showed up in observations by NASA’s Cassini-Huygens spacecraft in 2013. At the time, astronomers were puzzled by the islands’ unnerving ability to appear and disappear from observations over time, a quality that earned its enchanting nickname. Ever since, scientists have been trying to explain the mysterious phenomenon.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Now, according to a new study published in the journal Geophysical Research Letters, a team of researchers has come up with a potential answer: the islands are likely bits of porous, frozen organic solids bobbing on the surface of Titan’s liquid oceans.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Does DNA have the equivalent of IF statements, WHILE loops, or function calls? How about GOTO?</title>
    <link href="https://macleodsawyer.com/l/dna-code/"/>
    <updated>2024-01-10T15:58:01Z</updated>
    <id>/l/dna-code/</id>
    <content type="html"></content>
  </entry>
  
  <entry>
    <title>$100M will be left for Native Hawaiian causes from the estate of an heiress considered last princess</title>
    <link href="https://macleodsawyer.com/l/hawaii-100m-estate/"/>
    <updated>2024-01-11T17:27:35Z</updated>
    <id>/l/hawaii-100m-estate/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Now, more than a year after her death at age 96 and the bitter battles over her fortune in the twilight of her life, her estate has been settled. And recently finalized court documents show that after doling out tens of millions to various people — including former housekeepers, other longtime employees and her wife — there will be at least $100 million left to support Native Hawaiian causes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Legal wrangling over Kawānanakoa’s trust, which now has a value of at least $250 million, began in 2017 after she suffered a stroke. She disputed claims that she was impaired, and married Veronica Gail Worth, her partner of 20 years, who later changed her name to Veronica Gail Kawānanakoa.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;According to documents establishing her foundation in 2001, Kawānanakoa wanted it to “maintain, support, preserve and foster the traditional Hawaiian culture in existence prior to 1778&amp;quot; — the year the first European explorer, Capt. James Cook, reached the islands. That includes Hawaiian music, religion, language and art.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
</feed>
