Sean Morris's Portfolio
  • Portfolio
  • About
  • Blog

Adventures with Vim in VS Code

9/26/2025

0 Comments

 
Picture
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 web bot using a Vim extension in VS code. 

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".

Here are some reflections from the experience.  

First, if you want to get started with Vim give yourself an excuse while you browse the web with Vimium C, 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...


Read More
0 Comments

Contrasting "Requirements Gathering" vs. "Solutioning" - A Better Way to Happy Clients

9/5/2025

0 Comments

 
Picture
I recently heard of a business analyst who trying to argue that “requirements gathering” and “solutioning” 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 “requirements gathering” and “solutioning” as steps in a larger process of principled negotiation.

What We Mean by “Requirements” and “Solutioning”

1.Requirements

As software development as an industry and practice was evolving in the late 20th century, the term the term “requirements” 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’s house 10 blocks away, the requirement might be to “have a means of transportation to get to Shirley’s house.” Great.

2.Solutioning


Read More
0 Comments

Reflections from PyCon 2025

5/30/2025

0 Comments

 
Picture
PyCon 2025 in Pittsburgh was my first ever PyCon and it was a blast. My three big personal takeaways were the following:
  1. The only constant is change
  2. Let it be fun to build stuff
  3. Knowing something and teaching it are different skills

The only constant is change
This year, some of the sexiest topics of the day seemed to be:
  1. uv – the all-in-one python package manager
  2. marimo notebooks (as a rising alternative to Jupyter notebooks)
  3. Free threading / removing the global interpreter lock (and improving performance)
  4. Lots of stuff about GPUs and Machine Learning
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 – but since he’s moved into more of a management role, he hasn’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…

Let it be Fun To Build Stuff
The most fascinating and exhilarating two sessions that I went to were two self-organized sessions:
  1. On Vim, the coding text editor known for speed.   
  2. 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.  
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’m not joking. It was so beautiful, I may never recover. After this, I made a determination to learn Vim. 
 
Knowing Something and Teaching It Are Different Skills
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.

I went to many sessions that were completely over my head technically. And, looking around, I could see that I wasn’t alone. It makes sense that for many people, PyCon is the one chance that they have a year to talk with the 7 other people who are experts at their thing - it’s no surprise that they use their time to address that audience instead of a newbie.
This was one of the big reasons why I especially loved Al Sweigart’s, talk on “Making Python Talk, Making Python Listen.” 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.

0 Comments

Using Knack (An App development platform) to Support A Friend With Cancer

3/1/2025

0 Comments

 
Picture
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. 

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. 

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). 

The app:
  1. 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". 
  2. The assigned song changes every day whether or not the given user has listened to it or not. 
  3. 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". 
  4. Both Zack and Anna can leave their own reflections as or after they listen to the song in a text field 
  5. All reflections are stored in a table that shows every song, both past and future. 
  6. Each song is included with it's Spotify link so that the user can access a recording and listen to it quickly. 

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. 

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. 

0 Comments

Better Analogies for Software Development

9/1/2024

0 Comments

 
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 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 Old Metaphors - Building Construction and Gardening:
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): 
Analogy
Good for Emphasizing
Building Construction
Simple, linear, repeatable, processes.
Gardening
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).  

Read More
0 Comments

Custom Lambda Function to Reconcile Two Lists

5/1/2024

0 Comments

 
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. 

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: ​
Picture
The function produces an array (from a #SPILL formula) that includes a couple of useful elements:
  • headers for clarity
  • a "Distinct" column that shows all of the unique (non-duplicated) values 
  • two columns with Boolean values (1 or 0) indicating whether or not the unique item is in the given list
  • a "Category" column that codes the given item into one of 3 categories. Generically: 
    • 1. List 1 Only
    • 2. List 2 Only
    • 3. Both Lists
This way, you can easily target the discrepancies between the two lists (the Category 1s and 2s) or the commonalities (Category 3). 

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: 
Lambda To Paste Into "Refers To" Field of Name Manager

    
Description to Paste Into "Comment" Field of Name Manager

    
Picture

More Information

Special thanks to Excel MVP Owen Price at Flex Your Data for the inspiration and base method for this formula from his Simple Frequency Table (Owen is an Excel MVP and it's obvious why because his posts are awesome).

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. 
Full Lambda Formula (Including Parameters at the End)

    
Good luck! Happy to hear feedback / comments! 
0 Comments

Categorizing Pizza Places in Boston With Data Science

11/28/2020

0 Comments

 
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. 

Introduction and Problem

How can restaurants make use of data science and geographic data to identify expansion opportunities? This analysis is an exploratory step in this direction. 

With Python, we can leverage Foursquare’s location data to help identify possible new opportunities for restaurants in specific geographic areas. We can help answer questions like:
  • Is there already saturation in a given neighborhood or for a specific type of food?
  • What kinds of establishments are already popular in a certain neighborhood?
  • What kinds of geographic locations could be ripe for new development?

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?

Data Sources

1. City of Boston Neighborhood Data

The city of Boston has more than 20 distinct neighborhoods – each with a unique character. You can read more about each neighborhood [here](https://www.boston.gov/neighborhoods). 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.

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’s more popular neighborhood datasets simply called “Boston Neighborhoods”, available [here]( https://data.boston.gov/dataset/boston-neighborhoods/resource/13ee2b65-6547-4168-b112-83995f138602).

2. Foursquare Geographic Data

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’s API to pull data about pizza places in areas of the city of particular interest.  We will be using the Foursquare [explore endpoint]( https://developer.foursquare.com/docs/places-api/endpoints/) to get venue recommendations in the “Pizza Place” Category.

Analysis

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.  

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).  

Dictionary and Libraries: To complete this project, we will also be downloading a number of python scripting libraries. This includes:
  • Pandas library to work with data
  • Numpy library to work with vectorized data
  • Json library to analyze json data from the City of Boston
  • Geopy library to find location data for Boston
  • MatplotLib library to plot our data
  • Folium to render our data in a map
  • SkLearn to run a Kmeans clustering algorithm to group the restaurant data into clusters

Neighborhood Centers

Picture

Pizza Places from Foursquare

Picture

Pizza Places Categorized by Geography

Picture

Results and Discussion

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).

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.

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’s, a pizza chain might fit best along highly trafficked areas of sprawling suburban areas.
0 Comments

    Archives

    September 2025
    May 2025
    March 2025
    September 2024
    May 2024
    November 2020

    Categories

    All
    Agile Development
    Custom Excel Lambda Functions
    Data Science

    RSS Feed

    View my profile on LinkedIn
© 2024 by Sean Morris. All rights reserved. 
Portfolio |  About