<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" >

<channel><title><![CDATA[Sean Morris's Portfolio - Blog]]></title><link><![CDATA[https://www.seanmorrisportfolio.com/blog]]></link><description><![CDATA[Blog]]></description><pubDate>Sat, 20 Dec 2025 22:18:12 -0800</pubDate><generator>Weebly</generator><item><title><![CDATA[Adventures with Vim in VS Code]]></title><link><![CDATA[https://www.seanmorrisportfolio.com/blog/adventures-with-vim-in-vs-code]]></link><comments><![CDATA[https://www.seanmorrisportfolio.com/blog/adventures-with-vim-in-vs-code#comments]]></comments><pubDate>Fri, 26 Sep 2025 07:00:00 GMT</pubDate><category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">https://www.seanmorrisportfolio.com/blog/adventures-with-vim-in-vs-code</guid><description><![CDATA[ I got inspired to start trying to use Vim when I attended the Python national conference in Pittsburgh in 2025 and I met a hand full of old school coders who were among the fastest and most fluid that I have ever encountered. Watching them use their computers was like watching Yo-Yo Ma play the cello. Absolutely beautiful.I was so inspired, in fact, I challenged myself to learn enough vim to be able to build the first version of my Pycleball&nbsp;web bot using a Vim extension in VS code.&nbsp;V [...] ]]></description><content:encoded><![CDATA[<span class='imgPusher' style='float:left;height:0px'></span><span style='display: table;width:auto;position:relative;float:left;max-width:100%;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="https://www.seanmorrisportfolio.com/uploads/2/0/9/7/20971924/published/vim-hacker.png?1759691552" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="display:block;">I got inspired to start trying to use Vim when I attended the Python national conference in Pittsburgh in 2025 and I met a hand full of old school coders who were among the fastest and most fluid that I have ever encountered. Watching them use their computers was like watching Yo-Yo Ma play the cello. Absolutely beautiful.<br /><br />I was so inspired, in fact, I challenged myself to learn enough vim to be able to build the first version of my <a href="https://github.com/SeanJMorris/pyckleball" target="_blank">Pycleball</a>&nbsp;web bot using a Vim extension in VS code.&nbsp;<br /><br />Vim is famous among its users because it makes it possible to not have to use your mouse. Essentially, everything is possible with keystrokes and shortcuts, which are called "motions".<br /><br />Here are some reflections from the experience.&nbsp;&nbsp;<br /><br /><u><strong>First</strong></u>, if you want to get started with Vim give yourself an excuse while you browse the web with <a href="https://chromewebstore.google.com/detail/vimium-c-all-by-keyboard/hfjbmagddngcpeloejdejnfgbamkjaeg" target="_blank">Vimium C</a>, a keyboard shortcut browser extension. Vimium C makes it possible almost all the time to browse without touching your mouse. Because it's inspired by Vim, it gives you a perfect on ramp to start using some vim motions. For example...<br></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <div>  <!--BLOG_SUMMARY_END--></div>  <div class="paragraph"><ul><li>yy copies the url of the page that you're on and puts it into your clipboard</li><li>J and K scroll up and down on the page</li><li>F superimposes a letter or letter combination above every active link so that you can simply type in that combination and navigate to that link location</li><li>shift + H navigates back to the previous page, shift + L navigates forward.&nbsp;</li><li>yv allows you to enter a mode where you can select specific text strings to copy them.&nbsp;</li></ul><br />Vimium C is a game changer and I'd never want to browse the web without it. It takes some getting used to but it's COMPLETELY worth the effort in my opinion - even if you don't plan to use Vim. If you spend any time at all on the internet ever, it's worth it.&nbsp;<br /><br /><u><strong>Second</strong></u>, the Vim extensions in VS Code are not fully functional and there are certain things that will just never be the same outside of Vim or an IDE like Neovim. The first shortcut I made once I installed Vim was a keyboard combination that allowed me to deactivate the plugin, and that was a great choice because certain things (like copy and paste) simply don't work like you'd expect when you start. It's also the case that you cannot repurpose any actual Vim configurations you've set up on your machine (as in your .vimrc file) with complete fidelity in VS code because the standard extension doesn't support a reference to your .vimrc file. Because I'd like to go deeper with Vim, I'm looking for ways to use it in a fully fledged IDE like Neovim next.&nbsp;<br /><br /><u><strong>Third</strong></u>, find a resource to keep practicing. I found a PDF version of "Practical Vim" by Drew Neil that I went through for about 20 minutes every day for three weeks or so to get my feet under me. It was slow but I was so inspired to learn Vim that the prospect of getting a bit better every day is still exciting. Do this while you actually incorporate the motions into your workflow. Expect to be slowed down - a lot.&nbsp;<br /><br />I'm still slow, but I saw for myself what it's like when you really get going with Vim. I'm still in the phase where I'm taking one step until I can take two steps forward, but using Vim also makes the whole process fun which doesn't make it all feel like work.&nbsp;</div>]]></content:encoded></item><item><title><![CDATA[Contrasting "Requirements Gathering" vs. "Solutioning" - A Better Way to Happy Clients]]></title><link><![CDATA[https://www.seanmorrisportfolio.com/blog/contrasting-requirements-gathering-vs-solutioning-a-better-way-to-happy-clients]]></link><comments><![CDATA[https://www.seanmorrisportfolio.com/blog/contrasting-requirements-gathering-vs-solutioning-a-better-way-to-happy-clients#comments]]></comments><pubDate>Fri, 05 Sep 2025 07:00:00 GMT</pubDate><category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">https://www.seanmorrisportfolio.com/blog/contrasting-requirements-gathering-vs-solutioning-a-better-way-to-happy-clients</guid><description><![CDATA[ I recently heard of a business analyst who trying to argue that &ldquo;requirements gathering&rdquo; and &ldquo;solutioning&rdquo; are two completely separate steps in the process of delivering software to clients.I have encountered this idea before. I think this kind of thinking is a huge problem. This post explains why and offers an alternative, which is to think of &ldquo;requirements gathering&rdquo; and &ldquo;solutioning&rdquo; as steps in a larger process of principled negotiation.What W [...] ]]></description><content:encoded><![CDATA[<span class='imgPusher' style='float:left;height:0px'></span><span style='display: table;width:246px;position:relative;float:left;max-width:100%;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="https://www.seanmorrisportfolio.com/uploads/2/0/9/7/20971924/published/free-pony-rides.png?1764809858" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="text-align:left;display:block;">I recently heard of a business analyst who trying to argue that &ldquo;requirements gathering&rdquo; and &ldquo;solutioning&rdquo; are two completely separate steps in the process of delivering software to clients.<br /><br />I have encountered this idea before. I think this kind of thinking is a huge problem. This post explains why and offers an alternative, which is to think of &ldquo;requirements gathering&rdquo; and &ldquo;solutioning&rdquo; as steps in a larger process of principled negotiation.<br /><br /><strong><font size="5">What We Mean by &ldquo;Requirements&rdquo; and &ldquo;Solutioning&rdquo;</font></strong><br /><br /><font size="4">1.Requirements</font><br /><br />As software development as an industry and practice was evolving in the late 20th century, the term the term &ldquo;requirements&rdquo; emerged as a way to refer to the set of things detailed in some kind of documentation about how a given system should function and what it should do when it is built. For example, if your daughter asks for a way to get to her best friend&rsquo;s house 10 blocks away, the requirement might be to &ldquo;have a means of transportation to get to Shirley&rsquo;s house.&rdquo; Great.<br /><br /><font size="4">2.Solutioning</font></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <div>  <!--BLOG_SUMMARY_END--></div>  <div class="paragraph">In my experience, &ldquo;solutioning&rdquo; generally refers to the process of determining <em>what</em> and <em>how</em> the requirements will be met. Returning to your daughter, this could take a huge number of forms, including a piggyback ride, a pogo stick, a pair of shoes, a skateboard, a hover craft, or a hot rod.<br /><br /><strong><font size="5">The origin of a &ldquo;Requirements&rdquo; vs. &ldquo;Solutioning&rdquo; Mindset</font></strong><br /><br />In my experience, the &ldquo;Requirement&rdquo; vs. &ldquo;Solution&rdquo; distinction happens most often when there is tension between client team / business interest (the commissioners/buyers) and the tech team (the builders/sellers). Basically, this distinction happens when the relationship is already strained. People start pointing fingers when they feel unheard or unseen and they turn litigious &ndash; focusing minutely on &ldquo;what was requested&rdquo; and &ldquo;what was delivered&rdquo; as a way to establish blame.<br /><br />There is a reason that you hear the advice from married couples to &ldquo;Not keep score.&rdquo; It&rsquo;s because keeping score is a loser&rsquo;s game. Successful relationships are successful because needs of each party are met such that each feels better off than they were before.<br />Returning to the example with your daughter and her requirement for a transportation medium - suppose you have a crazy great uncle who just died and left you &ndash; surprise &ndash; a single Sheltland Pony. So you offer it to her because you don&rsquo;t know what else to do with it. Do you just turn to your daughter and say &ldquo;Well honey, strictly speaking your <em>requirement</em> was just that you needed a transportation medium, so really, I have met my obligation&hellip; so you&rsquo;re welcome.&rdquo; &nbsp;Of course you don&rsquo;t.<br /><br />When people do draw this absurd line-in-the-sand, the obvious retort from the business interest is, similarly, to change the goal posts &ndash; e.g. &ldquo;Well, the new requirement is that my transportation medium is a non-pony.&rdquo;<br /><br />This whole framing of the conversation gets no one anywhere. And intuitively, we all know this. In the real world, say, with your daughter, you ask your daughter to clarify what she needs and why she needs it and then you see what you can do and make work because you want to help.<br /><br /><strong><font size="5">An Alternative &ndash; Principled Solution Negotiation</font></strong><br /><br />Instead of quibbling this way about requirements and solutions, I think a better alternative happens in two general steps:<ol><li>Frame the &ldquo;requirements gathering&rdquo; and &ldquo;solutioning&rdquo; as part of the same process, not distinct steps. &nbsp;Do this by&hellip;</li><li>Treating the path to a solution as a principled negotiation, as spelled out in the classic book on negotiation: &ldquo;Getting to Yes.&rdquo; Principled negotiation has four parts:<ol><li>Separate the people from the problem.</li><li>Focus on interests, not positions.</li><li>Invent options for mutual gain.</li><li>When necessary, focus on objective acceptance criteria</li></ol></li></ol> Basically, when you&rsquo;re involved in a negotiation that is principled in this way, then you don&rsquo;t let yourself get bogged down in a given <em>position</em> (i.e. &ldquo;A pony is a transportation medium, isn&rsquo;t it?!&rdquo;) and instead, you focus on the interest and assumptions behind the request, that more often than not, result in a solution that actually works because it reflects true mutual understanding.&nbsp;<br></div>]]></content:encoded></item><item><title><![CDATA[Reflections from PyCon 2025]]></title><link><![CDATA[https://www.seanmorrisportfolio.com/blog/reflections-from-pycon-2025]]></link><comments><![CDATA[https://www.seanmorrisportfolio.com/blog/reflections-from-pycon-2025#comments]]></comments><pubDate>Fri, 30 May 2025 07:00:00 GMT</pubDate><category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">https://www.seanmorrisportfolio.com/blog/reflections-from-pycon-2025</guid><description><![CDATA[ PyCon 2025 in Pittsburgh was my first ever PyCon and it was a blast. My three big personal takeaways were the following:The only constant is changeLet it be fun to build stuffKnowing something and teaching it are different skillsThe only constant is changeThis year, some of the sexiest topics of the day seemed to be:uv &ndash; the all-in-one python package managermarimo notebooks (as a rising alternative to Jupyter notebooks)Free threading / removing the global interpreter lock (and improving p [...] ]]></description><content:encoded><![CDATA[<span class='imgPusher' style='float:right;height:0px'></span><span style='display: table;width:auto;position:relative;float:right;max-width:100%;;clear:right;margin-top:2px;*margin-top:4px'><a><img src="https://www.seanmorrisportfolio.com/uploads/2/0/9/7/20971924/pycon-2025-for-blog-50-pct_orig.png" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="display:block;">PyCon 2025 in Pittsburgh was my first ever PyCon and it was a blast. My three big personal takeaways were the following:<ol><li>The only constant is change</li><li>Let it be fun to build stuff</li><li>Knowing something and teaching it are different skills</li></ol><br /><strong><u>The only constant is change</u></strong><br />This year, some of the sexiest topics of the day seemed to be:<ol><li>uv &ndash; the all-in-one python package manager</li><li>marimo notebooks (as a rising alternative to Jupyter notebooks)</li><li>Free threading / removing the global interpreter lock (and improving performance)</li><li>Lots of stuff about GPUs and Machine Learning</li></ol> Of course, many, many, other themes were covered. But to me, the interesting part about this is that if you only went to PyCon before the last couple of years, you may not have heard nearly as much about any of these topics. My brother-in-law for example is a software engineer who uses Python at a super global tech company famous for cutting edge engineering teams &ndash; but since he&rsquo;s moved into more of a management role, he hasn&rsquo;t had the time to keep up with most of these latest developments. Every couple of months there is some new library, or API, or framework that seems to change the game, and it can be dizzying to try to keep up, so you have to remember to&hellip;<br /><br /><strong><u>Let it be Fun To Build Stuff</u></strong><br />The most fascinating and exhilarating two sessions that I went to were two self-organized sessions:<ol><li>On Vim, the coding text editor known for speed. &nbsp;&nbsp;</li><li>About dotfile configurations. Dotfiles are system configuration files that you can use to personalize, automate, and otherwise soup up the way you use your computer. &nbsp;</li></ol> I saw things in these sessions that made me feel like I had arrived at the promised land of programming. These folks made the simple act of writing code look like playing a beautiful piano concerto. Not one wasted movement. Pure passion for making the thoughts in your head result in behavior on the screen, like a ice skater doing a perfect 10 triple lutz. It was poetry. I&rsquo;m not joking. It was so beautiful, I may never recover. After this, I made a determination to learn Vim.&nbsp;<br />&nbsp;<br /><strong><u>Knowing Something and Teaching It Are Different Skills</u></strong><br />Given that two different Python programmers can be in radically different areas of the Python universe, it can be as hard for them to communicate with each other as it could be for two different aliens from different planets.<br /><br />I went to many sessions that were completely over my head technically. And, looking around, I could see that I wasn&rsquo;t alone. It makes sense that for many people, PyCon is the <em>one</em> chance that they have a year to talk with the 7 other people who are experts at their thing - it&rsquo;s no surprise that they use their time to address that audience instead of a newbie.<br />This was one of the big reasons why I especially loved Al Sweigart&rsquo;s, talk on &ldquo;<a href="https://youtu.be/bHUvzkuf3Qk?list=PL2Uw4_HvXqvb98mQjN0-rYQjdDxJ_hcrs" target="_blank">Making Python Talk, Making Python Listen</a>.&rdquo; The talk was super fun and accessible. Al is a Python educator, so he thinks a lot about how to communicate technical ideas and is very good at it.<br></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>]]></content:encoded></item><item><title><![CDATA[Using Knack (An App development platform) to Support A Friend With Cancer]]></title><link><![CDATA[https://www.seanmorrisportfolio.com/blog/using-knack-an-app-development-platform-to-get-a-friend-through-chemo-treatments]]></link><comments><![CDATA[https://www.seanmorrisportfolio.com/blog/using-knack-an-app-development-platform-to-get-a-friend-through-chemo-treatments#comments]]></comments><pubDate>Sat, 01 Mar 2025 08:00:00 GMT</pubDate><category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">https://www.seanmorrisportfolio.com/blog/using-knack-an-app-development-platform-to-get-a-friend-through-chemo-treatments</guid><description><![CDATA[ A close friend of my brother's was recently diagnosed with cancer. After my brother found out, he called me and asked if I could help him think of a way that his friend (who we'll call "Anna") and my brother ("Zack") could listen to Bruce Springsteen songs together while Anna was going to chemotherapy treatments as a way to stay in touch and to give Anna something to stay busy with during her emotional roller coaster that is chemo treatment.&nbsp;I'm a business analyst - so I asked my brother a [...] ]]></description><content:encoded><![CDATA[<span class='imgPusher' style='float:left;height:0px'></span><span style='display: table;width:301px;position:relative;float:left;max-width:100%;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="https://www.seanmorrisportfolio.com/uploads/2/0/9/7/20971924/published/getting-chemo-from-gemini.png?1759692110" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="display:block;">A close friend of my brother's was recently diagnosed with cancer. After my brother found out, he called me and asked if I could help him think of a way that his friend (who we'll call "Anna") and my brother ("Zack") could listen to Bruce Springsteen songs together while Anna was going to chemotherapy treatments as a way to stay in touch and to give Anna something to stay busy with during her emotional roller coaster that is chemo treatment.&nbsp;<br /><br />I'm a business analyst - so I asked my brother about 2 hours worth of questions to try to see what he was envisioning and to understand how he expected the whole thing to work.&nbsp;<br /><br />These were the "functional requirements" that we landed on (this is much less formal than I'd usually prepare professionally, but this gives you the jist).&nbsp;<br /><br />The app:<ol><li>Shows both Zack and Anna the same song every day in sequential order from Bruce Springsteen's latest album - a three set discography called "Tracks". On any given day, the song is referred to as "the assignment" or the "assigned song".&nbsp;</li><li>The assigned song changes every day whether or not the given user has listened to it or not.&nbsp;<br></li><li>Any assigned songs that were not listened to on their given day get put into a queue of "old assignments" that the user can see. This way, if Zach/Anna are behind, they can see exactly the songs that they need to listen to to get "caught up".&nbsp;</li><li>Both Zack and Anna can leave their own reflections as or after they listen to the song in a text field&nbsp;</li><li>All reflections are stored in a table that shows every song, both past and future.&nbsp;</li><li>Each song is included with it's Spotify link so that the user can access a recording and listen to it quickly.&nbsp;</li></ol><br />This was an incredibly heartwarming thing to work on. It was really beautiful to see Anna and Zack's reflections on any given song be especially in the light of everything that she has been through and the importance that music has played in her journey. I also built it in such a way that my brother could see how far Anna had fallen behind, which gave him some insight into Anna's mental state so that he could offer some extra support when she may have needed it.&nbsp;<br /><br />And Knack made it relatively easy to build an app like this. If you have some basic facility with structured data (that is, normalized database structure), I highly recommend it.&nbsp;</div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>]]></content:encoded></item><item><title><![CDATA[Better Analogies for Software Development]]></title><link><![CDATA[https://www.seanmorrisportfolio.com/blog/better-analogies-for-software-development]]></link><comments><![CDATA[https://www.seanmorrisportfolio.com/blog/better-analogies-for-software-development#comments]]></comments><pubDate>Sun, 01 Sep 2024 17:23:48 GMT</pubDate><category><![CDATA[Agile Development]]></category><guid isPermaLink="false">https://www.seanmorrisportfolio.com/blog/better-analogies-for-software-development</guid><description><![CDATA[Summary:On a very regular basis, I find myself explaining to colleagues why it is the case that software development is so expensive and difficult to do well. I've found success by introducing three new analogies. These are software development as 1) highway construction 2) developing a space mission 3) founding a modern nation state. I&nbsp;discuss the pros of each of these analogies and provide a critique of the most commonly otherwise used analogies of building construction and gardening.The  [...] ]]></description><content:encoded><![CDATA[<div class="paragraph"><u><strong>Summary:</strong></u><br />On a very regular basis, I find myself explaining to colleagues why it is the case that software development is so expensive and difficult to do well. I've found success by introducing three new analogies. These are software development as 1) <strong>highway construction</strong> 2) <strong>developing a space mission</strong> 3) <strong>founding a modern nation state</strong>. I&nbsp;discuss the pros of each of these analogies and provide a critique of the most commonly otherwise used analogies of <strong>building construction</strong> and <strong>gardening</strong>.<br /><br /><u><strong>The Old Metaphors - Building Construction and Gardening</strong></u>:<br /><span>David Thomas and Andrew Hunt discuss two analogies for software development in their classic book "The Pragmatic Programmer" (see Chapter 7 section 40 of 2020 edition):&nbsp;</span></div>  <div id="923897646304795268"><div><style type="text/css">	#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table-wrapper {  padding: 20px 0;}#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table {  width: 100%;  border: 1px solid #C9CDCF;  border-spacing: 0;}#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table td.cell {  border-right: 1px solid #C9CDCF;  border-bottom: 1px solid #C9CDCF;  word-break: break-word;  background-color: #FFFFFF;  width: 50%;}#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table td.cell .paragraph {  width: 90%;  margin: 0 5%;  padding-bottom: 10px;  padding-top: 10px;  text-align: left;}#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table.style-top tr:first-child td,#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table.style-side td:first-of-type {  background-color: #F8F8F8;}#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table.style-top tr:first-child td .paragraph,#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table.style-side td:first-of-type .paragraph {  font-weight: 700;}#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table tr:last-child td {  border-bottom: none;}#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table td:last-of-type {  border-right: none;}#element-edc3b815-cc89-46a3-bfac-f789a817488a .simple-table .empty-content-area-element {  padding-left: 0px !important;}</style><div id="element-edc3b815-cc89-46a3-bfac-f789a817488a" data-platform-element-id="702688850553606843-1.4.3" class="platform-element-contents">	<div class="simple-table-wrapper">  <table class="simple-table style-top">      <tr>          <td class="cell"><div class="paragraph">Analogy</div></td>          <td class="cell"><div class="paragraph">Good for Emphasizing</div></td>      </tr>      <tr>          <td class="cell"><div class="paragraph">Building Construction</div></td>          <td class="cell"><div class="paragraph">Simple, linear, repeatable, processes.</div></td>      </tr>      <tr>          <td class="cell"><div class="paragraph">Gardening</div></td>          <td class="cell"><div class="paragraph">Need for constant management and intervention (pests, weeding), emphasis on external conditions (no rain), things not going according to plan (hurricane took out tomato stakes).&nbsp;&nbsp;</div></td>      </tr>  </table></div></div><div style="clear:both;"></div></div></div>  <div>  <!--BLOG_SUMMARY_END--></div>  <div class="paragraph">They make the point that the <strong>building construction</strong> metaphor is more palatable for business stakeholders because of the emphasis on structure, reliability, and predictability. However, they note that, in practice, software development is much more like gardening because of how constantly a team needs to be able to observe, manage, and respond to changing conditions.&nbsp;<br /><br /><u>A critique of the construction metaphor</u>:<ol><li>In my experience, the most useful part of the construction metaphor is about the&nbsp;<strong>plumbing</strong>. Most people who live in houses don't understand how plumbing works, and they never want to have to think about it. It is clearly a specialized skill, and it helps frame the importance of getting something right because you don't want your toilet to back up, when, say, your extended family is visiting for Christmas. Business partners are also happy to not ask questions about plumbing because it's dirty and we all know it needs to get done.&nbsp;</li><li>The construction metaphor can be souped up by comparing the development process to the building of a skyscraper or <strong>hospital</strong>, for example (hospital is my preference). Clearly, these require&nbsp;specialized expertise and, in the case of a hospital, are also clearly occupied by specialists themselves who have and require expensive equipment and facilities (surgical rooms, HVAC systems, large passageways for accessibility compliance). However, in my experience, the hospital construction analogy doesn't resonate with the experience or imagination of most business stakeholders. Why exactly, might be a subject for another post.&nbsp;</li></ol><br /><u>A critique of the gardening metaphor</u>:&nbsp;<br />A garden metaphor is less useful if you are building something that you want to operate <strong>at scale</strong>, with, say, millions of users.&nbsp; <a href="https://www.etymonline.com/word/garden" target="_blank">Etymologically</a>, a garden refers to an "enclosure" and my experience suggests that that most people conceive of a garden as small and most often managed by a small number of relatively low-wage workers.<br /><br /><u><strong>Three Alternative Metaphors</strong></u><br />Considering the points above, it's natural to consider alternatives that emphasize the <strong>complexity</strong>, <strong>specialization</strong>, and <strong>scale requirements</strong>&nbsp;necessary to build a modern software application that <strong>adds business value</strong>. Here are my three favorites:</div>  <div id="611919361688529768"><div><style type="text/css">	#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table-wrapper {  padding: 20px 0;}#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table {  width: 100%;  border: 1px solid #C9CDCF;  border-spacing: 0;}#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table td.cell {  border-right: 1px solid #C9CDCF;  border-bottom: 1px solid #C9CDCF;  word-break: break-word;  background-color: #FFFFFF;  width: 50%;}#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table td.cell .paragraph {  width: 90%;  margin: 0 5%;  padding-bottom: 10px;  padding-top: 10px;  text-align: left;}#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table.style-top tr:first-child td,#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table.style-side td:first-of-type {  background-color: #F8F8F8;}#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table.style-top tr:first-child td .paragraph,#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table.style-side td:first-of-type .paragraph {  font-weight: 700;}#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table tr:last-child td {  border-bottom: none;}#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table td:last-of-type {  border-right: none;}#element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6 .simple-table .empty-content-area-element {  padding-left: 0px !important;}</style><div id="element-1dec74ff-d355-44d6-a5d7-5bd28ab0c2e6" data-platform-element-id="702688850553606843-1.4.3" class="platform-element-contents">	<div class="simple-table-wrapper">  <table class="simple-table style-top">      <tr>          <td class="cell"><div class="paragraph">Analogy</div></td>          <td class="cell"><div class="paragraph">Good for Emphasizing</div></td>      </tr>      <tr>          <td class="cell"><div class="paragraph">Highway construction</div></td>          <td class="cell"><div class="paragraph" style="text-align:left;">Painstaking coordination between stakeholders (neighborhood meetings, politics, federal funding, approvals from affected municipalities, top-down long-term planning by civil engineers, public comment periods). The long-range effects of important design decisions (consider New York vs. Los Angeles).</div></td>      </tr>      <tr>          <td class="cell"><div class="paragraph"><span>Founding a modern nation state</span><br /></div></td>          <td class="cell"><div class="paragraph"><span>Security (customs), Diplomatic issues (negotiations with legal departments), Bureaucracy (legal and administrative systems), Currency systems (central banks, information, and monetary policy).&nbsp;</span><span>&#8203;</span><br /></div></td>      </tr>      <tr>          <td class="cell"><div class="paragraph"><span>Space mission</span></div></td>          <td class="cell"><div class="paragraph"><span></span><span>Risk (e.g. Challenger Explosion), Exciting opportunities in new frontiers, cutting edge science-backed research, rigorous testing, professionalism.</span></div></td>      </tr>  </table></div></div><div style="clear:both;"></div></div></div>  <div class="paragraph">I started using the <strong>highway construction </strong>analogy after listening to a fascinating podcast about the "<a href="https://www.wgbh.org/podcasts/the-big-dig" target="_blank">Big Dig</a>" - which was, at the time, the most expensive highway project in U.S. history. This one is good for a very not romantic but extremely necessary of software development - gathering stakeholder buy in. Obviously, this is most useful in contexts where everyone knows that the project is useful but where political will needs to be mobilized (probably because it's not very sexy).&nbsp;<br /><br />I started using the <strong>founding a modern nation state</strong> when I was in a situation where I needed to emphasize an effort to different modules of the same website into a "federation" in which these separate entities submitted to a new set of administrative standards (In the analogy, the different modules were like different colonies that had their own cultures but now needed to come together just like the original American colonies needed to in order to form the United States). This is useful because it can inspire a revolutionary feeling to team members who need a way to understand why administration is important. If you want to emphasize the less sexy parts of software development, you can talk about the extensive bureaucratic functions of a modern nation state (post office, central bank, customs, trade negotiations, judicial systems for governance). The benefit of this analogy is that most people don't understand that the modern full-stack developer has to worry about all of these things. Often, I find, subject matter experts don't know, for example, how much time a developer needs to devote to <span>making sure that that feature doesn't expose a security risk (customs), or establishing standards for how different pieces of an application communicate with one another (e.g. <strong>postal service&nbsp;</strong>if you want to emphasize the system, <strong>central bank</strong> if you want to emphasize the value of the information being transmitted).&nbsp;&nbsp;</span><br /><br />I started using the <strong>space mission</strong> analogy when there was some discord in one of my project teams and wanted to both respect the professionalism of members of the team and politely reframe the issue as being larger than ourselves. The <a href="https://en.wikipedia.org/wiki/Space_Shuttle_Challenger_disaster" target="_blank">Challenger Disaster</a> analogy that this affords is useful if you need to remind people of stakes of failure. Finally, this analogy inspires the imagination in a way that others don't - there is something inherently interesting about "the final frontier" of space where - unlike the garden - there are clearly new horizons to explore and develop.&nbsp;<br /></div>]]></content:encoded></item><item><title><![CDATA[Custom Lambda Function to Reconcile Two Lists]]></title><link><![CDATA[https://www.seanmorrisportfolio.com/blog/custom-lambda-function-to-reconcile-two-lists]]></link><comments><![CDATA[https://www.seanmorrisportfolio.com/blog/custom-lambda-function-to-reconcile-two-lists#comments]]></comments><pubDate>Wed, 01 May 2024 07:00:00 GMT</pubDate><category><![CDATA[Custom Excel Lambda Functions]]></category><guid isPermaLink="false">https://www.seanmorrisportfolio.com/blog/custom-lambda-function-to-reconcile-two-lists</guid><description><![CDATA[Say you have two lists - one from Aaron, and another from Zora. You want a formula that tells you which items are in which lists so that you can follow up with both parties to get them back on the same page.&nbsp;At least, as of right now, Excel doesn't have an easy way to do this, so I wrote a custom Lambda function to do it myself. Here's a simplified example in action:&nbsp;&#8203;         The function produces an array (from a #SPILL formula) that includes a couple of useful elements:headers [...] ]]></description><content:encoded><![CDATA[<div class="paragraph">Say you have two lists - one from Aaron, and another from Zora. You want a formula that tells you which items are in which lists so that you can follow up with both parties to get them back on the same page.&nbsp;<br /><br /><span>At least, as of right now, Excel doesn't have an easy way to do this, so I wrote a custom Lambda function to do it myself. Here's a simplified example in action:&nbsp;</span>&#8203;</div>  <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.seanmorrisportfolio.com/uploads/2/0/9/7/20971924/lambda-reconciliation-final-product_orig.jpg" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph">The function produces an array (from a #SPILL formula) that includes a couple of useful elements:<ul><li>headers for clarity</li><li>a "Distinct" column that shows all of the unique (non-duplicated) values&nbsp;</li><li>two columns with Boolean values (1 or 0) indicating whether or not the unique item is in the given list</li><li>a "Category" column that codes the given item into one of 3 categories. Generically:&nbsp;<ul><li>1. List 1 Only</li><li>2. List 2 Only</li><li>3. Both Lists</li></ul></li></ul> This way, you can easily target the discrepancies between the two lists (the Category 1s and 2s) or the commonalities (Category 3).&nbsp;<br /><br />If you just want to use this Lambda, here's the code you can copy and paste into the "Refers To" field in your name manager:&nbsp;</div>  <div id="846991602868548693"><div><style type="text/css">	#element-55e10ecc-7b68-46d8-b270-0ac2424ce800 .code-editor--light {  padding: 20px 0px;}#element-55e10ecc-7b68-46d8-b270-0ac2424ce800 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-55e10ecc-7b68-46d8-b270-0ac2424ce800 .code-editor--light .header .paragraph {  margin: 0;}#element-55e10ecc-7b68-46d8-b270-0ac2424ce800 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-55e10ecc-7b68-46d8-b270-0ac2424ce800 .code-editor--dark {  padding: 20px 0px;}#element-55e10ecc-7b68-46d8-b270-0ac2424ce800 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-55e10ecc-7b68-46d8-b270-0ac2424ce800 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-55e10ecc-7b68-46d8-b270-0ac2424ce800 .code-editor--dark .header .paragraph {  margin: 0;}#element-55e10ecc-7b68-46d8-b270-0ac2424ce800 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-55e10ecc-7b68-46d8-b270-0ac2424ce800" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--light">    <div class="header">        <div class="paragraph">Lambda To Paste Into "Refers To" Field of Name Manager</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div id="763071021360457509"><div><style type="text/css">	#element-0d970a06-3c25-4206-9122-b33afb8b3294 .code-editor--light {  padding: 20px 0px;}#element-0d970a06-3c25-4206-9122-b33afb8b3294 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-0d970a06-3c25-4206-9122-b33afb8b3294 .code-editor--light .header .paragraph {  margin: 0;}#element-0d970a06-3c25-4206-9122-b33afb8b3294 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-0d970a06-3c25-4206-9122-b33afb8b3294 .code-editor--dark {  padding: 20px 0px;}#element-0d970a06-3c25-4206-9122-b33afb8b3294 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-0d970a06-3c25-4206-9122-b33afb8b3294 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-0d970a06-3c25-4206-9122-b33afb8b3294 .code-editor--dark .header .paragraph {  margin: 0;}#element-0d970a06-3c25-4206-9122-b33afb8b3294 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-0d970a06-3c25-4206-9122-b33afb8b3294" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--light">    <div class="header">        <div class="paragraph">Description to Paste Into "Comment" Field of Name Manager</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.seanmorrisportfolio.com/uploads/2/0/9/7/20971924/lambda-reconciliation-name-manager_orig.jpg" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <h2 class="wsite-content-title">More Information</h2>  <div class="paragraph">Special thanks to Excel MVP Owen Price at <a href="https://www.flexyourdata.com/" target="_blank">Flex Your Data</a>&nbsp;for the inspiration and base method for this formula from his <a href="https://www.flexyourdata.com/blog/excel-lambda-freq-simple-create-a-simple-frequency-table-in-excel-with-one-function/" target="_blank">Simple Frequency Table</a>&nbsp;(Owen is an Excel MVP and it's obvious why because his posts are awesome).<br /><br />I have given more descriptive names to my LET variables (e.g. what Owen calls "X" I call "list1LogicalMatrix"), but his matrix multiplication method is the core feature - otherwise I am simply rearranging the data produced by it. For a great explanation of how this works, I recommend visiting Owen's Simple Frequency Table post.&nbsp;<br /></div>  <div id="558235794202913015"><div><style type="text/css">	#element-9b590f3f-2683-449f-bd13-1d59bf00b6b2 .code-editor--light {  padding: 20px 0px;}#element-9b590f3f-2683-449f-bd13-1d59bf00b6b2 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-9b590f3f-2683-449f-bd13-1d59bf00b6b2 .code-editor--light .header .paragraph {  margin: 0;}#element-9b590f3f-2683-449f-bd13-1d59bf00b6b2 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-9b590f3f-2683-449f-bd13-1d59bf00b6b2 .code-editor--dark {  padding: 20px 0px;}#element-9b590f3f-2683-449f-bd13-1d59bf00b6b2 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-9b590f3f-2683-449f-bd13-1d59bf00b6b2 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-9b590f3f-2683-449f-bd13-1d59bf00b6b2 .code-editor--dark .header .paragraph {  margin: 0;}#element-9b590f3f-2683-449f-bd13-1d59bf00b6b2 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-9b590f3f-2683-449f-bd13-1d59bf00b6b2" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--light">    <div class="header">        <div class="paragraph">Full Lambda Formula (Including Parameters at the End)</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div class="paragraph">Good luck! Happy to hear feedback / comments!&nbsp;</div>]]></content:encoded></item><item><title><![CDATA[Categorizing Pizza Places in Boston With Data Science]]></title><link><![CDATA[https://www.seanmorrisportfolio.com/blog/categorizing-pizza-places-in-boston-with-data-science]]></link><comments><![CDATA[https://www.seanmorrisportfolio.com/blog/categorizing-pizza-places-in-boston-with-data-science#comments]]></comments><pubDate>Sun, 29 Nov 2020 03:31:53 GMT</pubDate><category><![CDATA[Data Science]]></category><guid isPermaLink="false">https://www.seanmorrisportfolio.com/blog/categorizing-pizza-places-in-boston-with-data-science</guid><description><![CDATA[As part of a IBM certificate in data science I earned in 2020, I put together a project that categorizes pizza places in Boston based on their geography.TLDR Takeaway: K-means clustering is a very cool technique for partitioning a dataset into distinct clusters, but it's difficult to apply to real-estate opportunity analysis just because there are so many variables to take into consideration.&nbsp;  Introduction and Problem  How can restaurants make use of data science and geographic data to ide [...] ]]></description><content:encoded><![CDATA[<div class="paragraph">As part of a IBM certificate in data science I earned in 2020, I put together a project that categorizes pizza places in Boston based on their geography.<br /><br /><u><strong>TLDR Takeaway</strong></u>: K-means clustering is a very cool technique for partitioning a dataset into distinct clusters, but it's difficult to apply to real-estate opportunity analysis just because there are so many variables to take into consideration.&nbsp;</div>  <h2 class="wsite-content-title">Introduction and Problem<br /></h2>  <div class="paragraph">How can restaurants make use of data science and geographic data to identify expansion opportunities? This analysis is an exploratory step in this direction.&nbsp;<br /><br />With Python, we can leverage Foursquare&rsquo;s location data to help identify possible new opportunities for restaurants in specific geographic areas. We can help answer questions like:<ul><li>Is there already saturation in a given neighborhood or for a specific type of food?</li><li>What kinds of establishments are already popular in a certain neighborhood?</li><li>What kinds of geographic locations could be ripe for new development?</li></ul><br />This small project will use geographic data for the city of Boston to identify food establishments of a particular type (in this case, Pizza Places) to determine whether certain neighborhoods may already be showing some saturation already. In addition, we will use this same information to understand if the existing neighborhood locations serve as sufficient categories for which to group these pizza places. Are all pizza places in the Financial District the same, or is there more variation between neighborhoods than within neighborhoods geographically?</div>  <h2 class="wsite-content-title">Data Sources</h2>  <h2 class="wsite-content-title"><font size="3">1. City of Boston Neighborhood Data</font></h2>  <div class="paragraph"><span>The city of Boston has more than 20 distinct neighborhoods &ndash; each with a unique character. You can read more about each neighborhood [here](</span><a href="https://www.boston.gov/neighborhoods">https://www.boston.gov/neighborhoods</a><span>). For example, the North End was originally a neighborhood of Italian immigrants but more recently has become an upscale location for tourists with plenty of Italian-style dining options. The neighborhood of Brighton is known for being a slightly more affordable area and typically caters to young professionals.</span><br /><br /><span>The city of Boston posts its location data publicly on its website to help real estate developers, researchers, and city planners have access to this information. In this lab, we will download one of the city&rsquo;s more popular neighborhood datasets simply called &ldquo;Boston Neighborhoods&rdquo;, available [here](&nbsp;</span><a href="https://data.boston.gov/dataset/boston-neighborhoods/resource/13ee2b65-6547-4168-b112-83995f138602">https://data.boston.gov/dataset/boston-neighborhoods/resource/13ee2b65-6547-4168-b112-83995f138602</a><span>).</span></div>  <h2 class="wsite-content-title"><font size="3">2. Foursquare Geographic Data</font></h2>  <div class="paragraph">In this project will also be downloading and accessing data from Foursquare. Foursquare is a company that provides location data and intelligence to its customers - primarily web developers - for use in their applications. In this project, we will be making a limited number of calls to Foursquare&rsquo;s API to pull data about pizza places in areas of the city of particular interest. &nbsp;We will be using the Foursquare [explore endpoint]( <a href="https://developer.foursquare.com/docs/places-api/endpoints/">https://developer.foursquare.com/docs/places-api/endpoints/</a>) to get venue recommendations in the &ldquo;Pizza Place&rdquo; Category.<br /></div>  <h2 class="wsite-content-title">Analysis</h2>  <div class="paragraph"><span>To begin, we will be pulling those pizza place categories that correspond to the top 50 locations of the geographic center of each of the neighborhoods in question. These geographic centers we will identify through Google. &nbsp;</span><br /><br /><span>To make this assignment more practical, we will be excluding several neighborhoods in our analysis. This will include most of the larger, outlying neighborhoods outside of the city center (including Brighton, Allston, Dorchester, Roxbury, Mattapan, the Harbor Islands, Roslindale, West Roxbury, and others). &nbsp;</span><br /><br /><span>Dictionary and Libraries: To complete this project, we will also be downloading a number of python scripting libraries. This includes:</span><ul><li>Pandas library to work with data</li><li>Numpy library to work with vectorized data</li><li>Json library to analyze json data from the City of Boston</li><li>Geopy library to find location data for Boston</li><li>MatplotLib library to plot our data</li><li>Folium to render our data in a map</li><li>SkLearn to run a Kmeans clustering algorithm to group the restaurant data into clusters</li></ul></div>  <h2 class="wsite-content-title">Neighborhood Centers<br /></h2>  <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.seanmorrisportfolio.com/uploads/2/0/9/7/20971924/boston-neighborhoods_orig.png" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <h2 class="wsite-content-title">Pizza Places from Foursquare<br /></h2>  <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:right"> <a> <img src="https://www.seanmorrisportfolio.com/uploads/2/0/9/7/20971924/boston-pizza-places_orig.png" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <h2 class="wsite-content-title">Pizza Places Categorized by Geography</h2>  <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:right"> <a> <img src="https://www.seanmorrisportfolio.com/uploads/2/0/9/7/20971924/boston-pizza-places-clustered_orig.png" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <h2 class="wsite-content-title">Results and Discussion<br /></h2>  <div class="paragraph">As you can see from the maps above, even though 12 clusters were specified in the kmeans algorithm, these 12 clusters do NOT correspond to the same neighborhoods as mapped initially in this project. While the downtown core consists of 4 major neighborhoods (North End, West End, Downtown, Beacon Hill) there are 4 clusters that do not correspond to these neighborhood boundaries. Cluster 10 transverses both the North End and Downtown, Cluster 3 transverses the West End and the North End, Cluster 0 transverses Chinatown and Downtown, and Cluster 2 transverses Downtown and the South Boston Waterfront (Seaport).<br /><br />One large takeaway from this analysis is that the South Boston Waterfront (Otherwise known as the Seaport District) has a dearth of pizza restaurants in general. Although this section of the city has been under extensive development recently, there is a paucity of pizza restaurants in this section of the city. Anyone who desired pizza who happened to be in this area would have to cross the fort point channel to get downtown.<br /><br />Another key takeaway is that the neighborhoods are not a particularly useful starting place from which to begin our analysis. In order to get a fuller picture of the most operative development opportunities for Pizza Restaurants around the city, more research would be necessary to understand zoning restrictions and also the general socioeconomic status of any development area in question. Like McDonald&rsquo;s, a pizza chain might fit best along highly trafficked areas of sprawling suburban areas.</div>]]></content:encoded></item></channel></rss>