Site Changes Coming

This site has been around in its current form for many many many years. While I have updated the theme and the fonts, this site has been a WordPress site for as long as I can remember. My oldest post was from 2007 so that is about 15 years.

Times are a changing and I find myself with some downtime between jobs. I’ve decided it’s time to take a little more control over the experience. So that leaves some options. Really learn modern day PHP and customize the crap out of my WordPress experience, or consider something else. I have built a lot of sites with a lot of different technologies aside from this main site, but WordPress has always been pretty easy for me.

There are many options out there, but honestly, I think the static site generators are the way I’m leaning. I don’t really get a lot of useful comments on these posts, and I spend most of my time just removing spam comments. Static sites are super fast to generate and quick to deploy. I can still look at solutions for interaction.

Because I’ve started learning Go recently, I’m thinking about redoing the site in Hugo. I will try to maintain as much content as I can from the past and bring in some new stuff. Just a warning, some changes may be coming.

Busy Again

I’m back to being busy again. I feel like the pandemic lull is over and work is finally picking back up. I’m getting serious about coaching again with Salve Regina Cheer, and I’m getting back into teaching acro. I will have some announcements on that later. I’m sewing some packs. Well I sewed one last weekend and I’m trying to get up the courage to do one this weekend as well.

I’m reading more too. One of the reflections I had this year after my birthday is that I wish I was better read. I’ve seen many movies, watched my fair share of television (especially, Aaron Sorkin shows), but there is so much more in this world that I haven’t dove into. There is so much more that I want to learn and there are many books out there. I own many books. I own many books I’ve meant to read, but haven’t even started.

The thing that I’m going to say is that when I have my projects I tend to get a little more efficient and accomplish more. When I’ve been in the lull, I don’t do as much. I’m excited to be working. I’m excited to be doing. I’m excited to be doing more. Now lets just hope I can follow through.

Coffee Shop Popup

Roasted coffee beans background

This week is my birthday. It’s a particularly important birthday, but I’m not talking about that.

To celebrate, I’m hosting a coffee shop popup in my home. While I’ll give you all the other details in this post, if you don’t know me, or know someone who really knows me, then you are sort of out of luck, as I’m only giving out the address to friends. So go meet one of my friends or reach out if you want the address.

Details

7:30 am to 1:00 pm, first floor of my house.

Free coffee at the Popup. Everything food related is donation only. I have an espresso machine with tons of different beans. I will be very impressed if I have to go out and buy coffee afterward (I will also be happy because that will mean so many people came that I used up my coffee). I also have milk and non dairy milk as well as some syrups. I’m striving to make a peanut butter cup latte by this weekend, but we shall see if we get there. I might also make some cold brew and potentially even offer pour over.

Pastries will be provided by the Croisant Daddy himself, Mr. Chad Baguette. Unsure of exactly what he is making, but they will be available as well, on a first come first serve basis, so come earlier to gaurentee you get one.

In addition to food and beverage there will also be some wares for sale. There will be several packs from Zack’s Packs as well as some notebooks from a local friend and maybe even some from my personal collection.

Notes

This is just a fun hang out. This is not something where you show up at 7:30 and ride the day until we are done at 1:00. Feel free to pop by grab a coffee and go. I’ve got to go cups in the form of mason jars, so just take it and go.

If you have questions or are looking to order gear or get something repaired, please reach out to me at the event. Business cards will be available.

Perceived Social Network

Back in the 1950s a scientist name Stanley Milgram did a study where he sent a picture of a stock broker in Boston to a bunch of people in midwest and asked them to send the picture to someone in their network who was most likely to know the person. After collecting all the packets at the Bankers address, Milgram calculated the average number of hops from the person in the middle of the country to the Boston Banker was 6.1 stops. This is where the term 6 degrees of separation came from.

The premise that each person is 6 degrees away from any other person. That was the premise of Milgrams argument.

I’ve had issues with it from when I first heard about the study. I would argue the number is MUCH, much smaller than six, both when Milgram ran his study and even more so now when we try to connect dots in the digital age. The reason: perceived vs actual degree.

Milgram’s study asked people to send it to a person who they thought would be closest. There was no way to know who is actually closest. You would have to comb the social network of your friends and your friends’ friends until you mapped out the actual closest path. For example, you think someone in CT might be closest to the Boston Banker. Connecticut is closer to Boston than another person in the midwest. What you might not know is that the Banker, while living in Boston, went to school in Pittsburg and the person down the street was his college roommate. YOu send it to a friend in CT, they send it to another friend and by the time you are done, you have hit more stops than the one down the street.

Tools like LinkedIn have partially solved this, by telling you when people are in your extended network, 2nd degree, 3rd degree. The problem is not everyone is on linked in. Not every interaction is joined there. You can’t rely on it.

How many degrees are you away from say, President Biden. Well, I actually don’t know if anyone I’ve ever shaken hands with has shaken hands with Biden, but I have a friend I know has shaken hands with Obama. So that means that I am at most 3 hops from shaking hands with Biden. I could be two, but I don’t know who would be the person. I have some candidates to reach out to, but again, not always sure of the best path.

What I’m getting is the notion of one’s perceived social network vs one’s actual network. You network is much more complex than you realize because as complex as your network is, your friends also have complex networks.

How do we use this information? That is the tricky part. If we could get everyone to register their friendship through a common network and share that information with friends then we could gather a better picture of your network. I don’t see this likely. So the benefit of this information is only knowing that we are more connected than we can possibly imagine. I don’t know about anyone else, but this does bring some small comfort.


There is another interesting concept for another post on types of connections, strengths and types of people in your social network graph. That is a post for another time.

The Word “But”

When I was a freshman in college, my life was cheer. I did cheer breakfast lunch and dinner and loved it. I was committed to a level that generally exceeded most interests on the team. Not saying the team wasn’t committed, I just took it too far.

I was often very convinced of my own correctness. I would have conversations about issues with stunts and always have something to add. I’m not saying I wouldn’t listen to other people’s perspectives, but I always had to add my own two cents:

other cheerleader: I think the stunt came down because the feet were too far forward
me: That sounds right, but I’m pretty sure that is because you we weren’t on the right timing.

During my sophomore year in college, I had a coach who explained it to me. The problem with my communication was the word “but”. Using it made it sound like I wasn’t hearing the discussion from the other person. What my teammates had been hearing was “but … you are wrong and I’m right.” Sometimes, I felt this way, but nearly as much as I was communicating.

My coach asked me to try and stop using the word “but”. He suggested I use the word “however”, or pause where I would have said but.

This was 20+ years ago, so my memory may be foggy, but I recall this being pretty hard for me to change. Still, it had a pretty profound effect on my relationships with my teammates, and my ability to communicate and be heard.

It’s still something I’m sensitive to it today and impart the same advice to people when I catch them “but-ting” me.

UCA College Nationals 2023

I can’t tell you how many years I go to decode the winners of a cheer competition and I can’t find it anywhere. This is not the end all of the results and I’m still looking for the right place to store it, but I also want to start collecting information on cheer teams. Which team finished second place in Small Coed D1 in 2004? How do you find it? History is important, and with all the information we have, I’m surprised we don’t have a better database of this stuff.

Here is my attempt to start putting it together. Here are the results from the 2024 UCA College Nationals.

D1A All Girl Results

  1. Western Kentucky University
  2. The University of Oklahoma
  3. University of Alabama
  4. UAB
  5. University of Mississippi
  6. San Diego State University
  7. Indiana University

D1A Cheer Finals

  1. The University of South Florida
  2. The University of Kentucky
  3. The Ohio State University
  4. The University of Central Florida
  5. The University of Oklahoma
  6. The University of Alabama
  7. Western Kentucky University
  8. The University of Tennessee
  9. The University of Louisiana Lafayette
  10. Liberty University
  11. The University of Toledo

Division 1 Cheer Finals

  1. Morehead State University
  2. University of West Georgia
  3. Pittsburgh State University
  4. University of Delaware

Open Coed Cheer Finals

  1. Iowa Western Community College
  2. Shelton State Community College
  3. Jones College

Small Coed Division 1A Cheer Finals

  1. Florida State University
  2. Bowling Green State University
  3. The University of Minnesota
  4. Purdue University
  5. The University of Memphis
  6. Troy University
  7. Ball State University

Open All Girl Finals

  1. Pearl River Community College
  2. Widener University
  3. Rowan University
  4. Webber International University
  5. The College of New Jersey
  6. University of Pikeville
  7. Wallace State College
  8. Nassau Community

Small Coed Division 1 Finals

  1. Morehead State University
  2. Eastern Kentucky University
  3. Southeastern Louisiana University
  4. Austin Peay State University
  5. Belmont University
  6. Providence College

All Girl Division 1 Cheer Finals

  1. Morehead State University
  2. The University of West Georgia
  3. Sacred Heart University
  4. The University of Delaware
  5. The University of Rhode Island
  6. Towson University
  7. Monmouth University
  8. Villanova University

Open Small Coed Cheer Finals

  1. Wilmington University
  2. Drury University
  3. Northwest Mississippi Community College
  4. University of Southern Indiana
  5. Northwest Missouri State University
  6. Itawamba Community College

Documentation Formats

Life is full of things to catalog, especially for someone like me. Someone who loves organization in data and looking for patterns. Someone who is convinced that the random things in my life will probably come together someday like the unification theory. But how? How does one sort, contain, and search data?

The first step is recording the data. There are many ways to do this. Databases have traditionally been a great way. NoSQL databases with their loose document format are interesting. The second brain methodology uses documents or notes to contain the same thing. And while these documents can be formatted in things like Markdown and have front matter for categorization, much of the data is contained in the raw text which means a human has to parse and read it.

Before you expect this post to come to some epic realization, tl;dr; I still don’t have one. This post is about the methods out there I’m considering for sorting my life.

Option 1: SQL

I’m not a fan of no SQL databases. From my point of view, if you are going to create data to exist in a place that is typed, loose document formats make comparing and reading things hard. So structured data is better, hence SQL.

Pros:

  • The data is structured from the start
  • There are many different options for which SQL platform to use and many of them are interchangeable so there are options.
  • Things like normalization define best practices for working with something like this, so you don’t have to develop them yourself.

Cons:

  • You need to run a server somewhere.
  • It is not easily human decodable.
  • You need to learn to use SQL to really be successful and joins are fun (and hard).
  • Because structure is required you have to define it up front.

Option 2: Markdown

This is honestly what I’m currently using in my second brain with Obsidian. This may be the best of all worlds. It has the notion of storing structured data in front matter, and throughout the document with special tags. Much of the document remains readable in sentences, but it is in loose format and you have to create and maintain your own formatting standards.

Pros:

  • Format is loose so you don’t need to stress about it.
  • Much of the notes are human-readable.
  • There are many tools to convert markdown to the web for sharing.
  • Cost of starting is very low.

Cons:

  • Because the format is loose, the responsibility lies on the creator to maintain the structure desired.
  • The organization of individual documents is also important.
  • Search is only as good as you are at searching and remembering.
  • It’s easy to end up with a mess of documents.

Option 3: Stricter document format

This category contains things similar to markdown but with more structure. This category fits things like JSON, YAML, and TOML. This is following the Pragramtic Programmer guideline of storing things in the text but putting some structure behind it. Some of these formats are more readable than others.

Pros:

  • Easily computer parsable.
  • More human-readable than a SQL database

Cons:

  • No official typing.
  • Need to use a validator to confirm you have a valid document.
  • Nothing requires the structure like a SQL Table so searching could be difficult.

Summation

I don’t have a conclusion. I’m still thinking, but these are interesting options of how to start really putting the data together. Our lives are full of data, it’s a shame when it gets lost or mislabeled or put in a place where we can’t find it. Hopefully, I’ll start putting together something more useful.

Traveling in a Van With a Dog

Coco and I are on this epic van journey that I do about once a year. Currently we are in California, but we are about to head back to the east coast shortly. There is a lot of stuff on the #VanLife movement these days, but not a ton on dogs.

Disclaimer: my dog is amazing. She will jump up and kiss you, and jump all over you, but she is relatively regular when it comes to going to the restroom, is vocal she needs to be and holds her business like no one else.

Here are some tips and tricks that we have found that are successful for us as we live together in a pretty small space.

Exercise

This is the most important tip. Coco (my dog), requires a fair bit of entertainment and exercise each day. There is no other way around it. If you don’t exercise her, she won’t eat, she won’t be happy. Need to get her moving.

Playing with other dogs is the best form of exercise for Coco, but safari walks where she can stop and smell things are also great. She also enjoys a flirt poll which is like a giant cat toy. Getting her tired makes her a better dog both in the van and when I bring into places.

Noticed how I used the term “safari” walk. This isn’t the same as walking for distance. If you get your dog to move for distance and just train distance, you have to keep on adding more and more distance to keep draining her energy and her stamina gets better. Safari walks require you to cover less distance, but they allow for time to for the dog to smell. These smells trigger all sorts of thoughts and questions, and these questions tire out the dog (at least this is how it was explained to me).

Routine

We have a routine that we try to keep. This allows Coco to know when are good times to go the bathroom and when she might be out of luck. I make sure she gets out every couple of hours during the day if we are driving. If we are stopped I will try to get her to walk every couple of hours. Giving her opportunities to go the bathroom means she doesn’t go to the bathroom in the van.

Door Mat

I have towel or door mat right by the stair in the van. When Coco goes into the van, her paws have to step on the mat and we get some of the dirt and moisture off the feet. Wetness is the enemy in dark van. The goal is try to keep things and dogs dry.

Place Poop Bags Everywhere

I went on a trip without packing poop bags. I had to use things like a Starbucks pastry bag and anything else I could find. I went to Walmart when they opened the next day and bought a big pack. These are things you will run out of, so I have a ton and keep on replacing them when they run out.

Watching the water intake

I stop refilling the water bowl earlier in the day when we are spending much of it in the Van. This means I don’t need to take her out to pee in the middle of the night. She has been able to hold it better than me.

Toys and treats

Coco loves to chew on hard things. The problem is that these hard things either break up and end up all over the bed or get sharp edges and end up pilling and roughing my comforter. This year we kept the hard chews to places that weren’t in the bed. Soft and squeaky toys stay on the bed for her to play with.

Morning Showers

Because the dog owns the bed, I tend to try to shower in the morning. I don’t worry as much about the bed staying super clean and just focus on getting my morning shower to stay clean.

Summation

This is only my second extended trip with the dog in the van. We do about one a year. This means I still have ton to learn, but we are both pretty happy and survived this adventure.

2022 Into 2023

There are very few consistencies on this website. Pretty much the only one is the year review and accountability for the following. This is that post.

Review of 2022 and Goals

Going through the goals from 2022.

Rent The House

I’m giving myself a check on this. The original goal was to try and rent the home for the summer and live with my parents or in the van or somewhere else over the summer. The problem came in with the dog. While I can easily find a place to stay, it’s not always as easy to find a place to stay with Coco. I originally wanted to go the West Coast for the summer, but decided against that. With all those factors, I decided to find roommates instead of renting the whole house.

I found roommates and have been renting rooms since August. That counts as win here.

Learn to Cook More

This one is not a win. This is a fail. I cooked a bit and I learned a few things here and there, but I’m not cooking nearly enough to be the adult I want to be. Plus cooking is really just applied chemistry. This stuff should be fun.

1000 Miles By Foot

I missed this. But instead of calling at complete loss. I did about 510 miles before my watch stopped syncing with my phone. This is about 50% of goal, which is failing. Still 500+ miles is still an accomplishment. This setting the foundation for what I’m doing next year.

It turns out that I really don’t like running. The problem with a 1000 miles on foot goal is that you are then spending a bunch of time running or walking. There is no way around it. You have to. To address this, next year I’m going to add a goal that adds in biking and I’m pretty excited about that as well.

Dance More

Definitely fail. I did no organized dancing this year. Part of it was that I wasn’t ready to find a community and part of it was a lack of effort from my part.

Get Better at Cleanliness

Cleaning is a constant process. It’s ongoing and every present. I will NEVER be to the level of this that my parents will be happy with. I still have work to go before I’m happy. But did I make progress? I have cleaners coming every other week. I’ve worked on putting some things away. I definitely feel like I’m making progress.

Working with others

This is a vague representation of the actual goal in my notes. I don’t feel comfortable talking about the specifics of the actual goal. I’m better at working with others, I’m not done with this. I’m on a journey here and still have room for growth.

Write the Acroyoga Field Guide

I’ve started this project in many different ways, I’ve got notes for days. I have ideas I have pieces, but the guide isn’t done. Still have more work to do here.

Consolidate and Minimize

Um, completely the opposite of this has happened in my life. I have more hobbies than I did at the beginning of last year. I have more gear than I had in the past. I have more stuff. I have maximized where I could have minimized.

2022 In Review

This has been a year. Here is an outline of some of the details

  • Dealt with the ending of the most significant relationship of my adult life.
  • Learned to sew on real sewing machines. I finally understand why a Sailrite costs so much.
  • Received a boat and begun the work of restoring it.
  • Have given my dog some pretty bad habits and am starting the process of fixing them.
  • Set a personal CrossFit Scale Record at 795.
  • Traveled to the West Coast for the Holidays but was too sick to attend to Christmas Dinner.
  • Finally feeling like I own extended hand to hand with some flyers.
  • Worked on the Acroyoga community in Newport.

There are many more events in a year than I can capture in these notes, but this is what is top of mind.


Upcoming 2023

Reflecting on the goals in 2022, there were far too many to achieve the success I wanted. I have a couple of specific fitness related targets, but for the most part I want to shift this year to focus on working on my identity over specific goals.

For background, I’m reading the book Atomic Habits as I drive these days. There are a lot of very interesting bits of this book. So far, my favorite story is about the “aggregation of marginal gains” from the British Cycling coach Dave Brailsford. He proposed making many small changes the way the cycling team was working in order to try and get a significant improvement in the results of the team. Small things like teaching the cyclists the most effective way to wash their hands to reduce the amount of time they get sick made a huge deal and eventually lead to some major wins by British Cycling who had been pretty quiet in years past.

I’m going for a year of small gains. Many small gains. This is the year of finding small ways in the hopes that it makes a larger goal.

Fitness goals

The one area where there are concrete measurements are in the fitness category. I have two very specific fitness goals.

  • Lose 60 lbs. I started at 262 last week. This is the heaviest I’ve been. There are plenty of reasons I’m at this weight, but I don’t like it. Being this heavy has a lot of negative side effects. I’m changing this. I’m going live the healthy lifestyle I want.
  • Travel 3,136 miles by foot and bike. This is the distance from Portland, ME to San Diego, CA. A long term dream of mine is to bike across the country. This is a step in that direction. If I can’t do the distance in a year, how am I going to be able to do it in a row? Building on top of last year, this goal I’m adding in biking to try and focus on a cardio source I really do love.

Conclusion

There are a lot of other things I want to accomplish this year, this is just a hint of where I’d like to go. From my projects with zacroyga and zacks_packs, to personal reading and writing goals, to social and economic goals, to working on the house. Still this is a pretty strong starting point and I’m excited to see what 2023 brings.

Dabbling in Swift

Free MacBook on wooden floor

For many years of my life I was an iOS Programmer. I worked in Objective-C, but Swift came out while I was working transitioning out of that area. Swift has always been a bit confusing for me, but I have a new complaint today. The amount of changes in Swift has caused a lot of online code to be out of date, and hard to parse.

The problem. I’m looking at my address book and I want to iterate through my contacts. I started by looking at ABAddressBook, but it turns out that technology has been depricated. Then I started looking at CNContactStore which is the new hotness. There are several fun methods on that object including unifiedMeContactWithKeys which is pretty cool. It only returns my contact, not all contacts, but at least I was able to get it work. There is a similar function called

func unifiedContacts(matching predicate: NSPredicate, keysToFetch keys: [CNKeyDescriptor]) throws -> [CNContact]

You try to pass in the truthy predicate and it rejects it. You need to actually use the

enumerateContacts() method. Some examples mix strings and other types with keys and that causes problems. Just using a list of Keys worked. Here is the final code that worked:

//
//  main.swift
//  contactsexport
//
//  Created by Zachary Cohen on 12/23/22.
//

import Foundation
import AddressBook
import Contacts

print("Hello, welcome to the AddressBook Scraper")


var store = CNContactStore()

store.requestAccess(for: .contacts, completionHandler: { (access, accessError) -> Void in
    if access {
        print("access granted")
        print(access)
    }
    else {
        print("access denied")
    }
})


let nameKeys = [
    CNContactNamePrefixKey,
    CNContactGivenNameKey,
    CNContactMiddleNameKey,
    CNContactFamilyNameKey,
    CNContactNameSuffixKey,
    ] as [CNKeyDescriptor]

let allContactKeys = [
    CNContactNamePrefixKey,
    CNContactGivenNameKey,
    CNContactMiddleNameKey,
    CNContactFamilyNameKey,
    CNContactNameSuffixKey,
    CNContactOrganizationNameKey,
    CNContactDepartmentNameKey,
    CNContactJobTitleKey,
    CNContactBirthdayKey,
    CNContactNicknameKey,
    CNContactNoteKey,
    CNContactNonGregorianBirthdayKey,
    CNContactPreviousFamilyNameKey,
    CNContactPhoneticGivenNameKey,
    CNContactPhoneticMiddleNameKey,
    CNContactPhoneticFamilyNameKey,
    CNContactImageDataKey,
    CNContactThumbnailImageDataKey,
    CNContactImageDataAvailableKey,
    CNContactTypeKey,
    CNContactPhoneNumbersKey,
    CNContactEmailAddressesKey,
    CNContactPostalAddressesKey,
    CNContactDatesKey,
    CNContactUrlAddressesKey,
    CNContactRelationsKey,
    CNContactSocialProfilesKey,
    CNContactInstantMessageAddressesKey,
    ] as [CNKeyDescriptor]

do {
    let contactStore = CNContactStore()
    let me = try contactStore.unifiedMeContactWithKeys(toFetch: nameKeys)
} catch let error {
    print("Failed to retreive Me contact: \(error)")
}

do {
    let contactStore = CNContactStore()
    let fetchRequest = CNContactFetchRequest(keysToFetch: allContactKeys)
    try contactStore.enumerateContacts(with: fetchRequest) { con, response in
        print(con);
    }
} catch let error {
    print("Failed to retreive Me contact: \(error)")
}

I’m still working on the project and there is bunch more to do this, but this is a start and figured it was worth putting out there.