diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 0000000..d292d00 --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,45 @@ +#!/bin/bash +# Pre-commit hook: converts staged JPG/JPEG/PNG images to WebP automatically. +# Install once with: ./scripts/install-hooks.sh + +QUALITY_PHOTO=82 +QUALITY_SCREENSHOT=88 + +if ! command -v cwebp &>/dev/null; then + echo "Warning: cwebp not found — skipping image optimization. Install with: brew install webp" + exit 0 +fi + +STAGED_IMAGES=$(git diff --cached --name-only --diff-filter=A | grep -iE '\.(jpg|jpeg|png)$' || true) + +if [ -z "$STAGED_IMAGES" ]; then + exit 0 +fi + +CONVERTED=0 + +while IFS= read -r img; do + [ -z "$img" ] && continue + [ -f "$img" ] || continue + + webp_path="${img%.*}.webp" + + if echo "$img" | tr '[:upper:]' '[:lower:]' | grep -q '\.png$'; then + quality=$QUALITY_SCREENSHOT + else + quality=$QUALITY_PHOTO + fi + + cwebp -q "$quality" -quiet "$img" -o "$webp_path" + rm "$img" + git rm --cached "$img" >/dev/null 2>&1 + git add "$webp_path" + + echo " Optimized: $img → $webp_path" + CONVERTED=$((CONVERTED + 1)) +done <<< "$STAGED_IMAGES" + +if [ "$CONVERTED" -gt 0 ]; then + echo "" + echo " $CONVERTED image(s) converted to WebP. Reference them with the .webp extension in your posts." +fi diff --git a/.vscode/cspell.json b/.vscode/cspell.json index b5af33b..5f75615 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -30,6 +30,7 @@ "codeyear", "curlingscoreboard", "currentdate", + "cwebp", "dasow", "dennisleary", "difftool", diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..8b69496 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,39 @@ +# tomarra.github.io + +Personal blog built with Jekyll, hosted on GitHub Pages. + +## Setup + +After cloning, install the git hooks so images are automatically optimized on commit: + +```bash +./scripts/install-hooks.sh +``` + +Requires `cwebp` for image optimization: `brew install webp` + +## Images + +All images live in `images/` (root-level) or `images/posts/` (post images). + +**Format:** WebP only. All images must be `.webp` before committing. + +**The pre-commit hook handles this automatically:** drop any `.jpg`, `.jpeg`, or `.png` into `images/`, stage it with `git add`, and the hook converts it to `.webp` and swaps the staged file before the commit lands. You never commit non-WebP images. + +**Reference images in posts using the `.webp` extension:** + +```markdown + +``` + +**To bulk-convert images manually** (e.g. if hooks aren't installed): + +```bash +./scripts/optimize-images.sh +``` + +## Running locally + +```bash +bundle exec jekyll serve +``` diff --git a/_config.yml b/_config.yml index de26bb2..168c70d 100755 --- a/_config.yml +++ b/_config.yml @@ -2,7 +2,7 @@ #------------------------------- # General Site Settings title: Tom Arra -logo: # You can add own logo. For example '/images/logo.png'. +logo: # You can add own logo. For example '/images/logo.webp'. description: Thoughts, stories and ideas. Mostly. baseurl: "" # the subpath of your site, e.g. /blog url: "https://tomarra.com" # the base hostname & protocol for your site, e.g. http://example.com @@ -11,7 +11,7 @@ url: "https://tomarra.com" # the base hostname & protocol for your site, e.g. ht # Author Settings author: name: Tom Arra - avatar: "/images/headshot.jpg" + avatar: "/images/headshot.webp" social: - { icon: "fa-twitter", label: Twitter, link: "https://twitter.com/tom_arra" } @@ -53,7 +53,7 @@ social: hero: hero__title: Hey, I’m Tom! Product Leader & Engineer. hero__description: I'm a product leader & engineer who loves to work with global teams and products. I help organize the corporate chaos to make the best solutions for customers. Here I post about not just tech but a few hobbies as well. - hero__image: "/images/headshot.jpg" + hero__image: "/images/headshot.webp" #------------------------------- # Build Settings diff --git a/_pages/about.md b/_pages/about.md index bef1623..40d1291 100755 --- a/_pages/about.md +++ b/_pages/about.md @@ -2,7 +2,7 @@ layout: page title: About permalink: /about/ -image: "/images/curling_slide.jpeg" +image: "/images/curling_slide.webp" --- **Tom Arra** has over ten years of experience in the software engineering world but has been interested in technology a few years before that. While attending school he started as an intern focused on product testing and hasn’t looked back since. Tom has experience as a software engineer, team lead, and product owner across many different types of products and frameworks. diff --git a/_posts/2011-06-28-Just-What-We-Need-Another-Social-Network.md b/_posts/2011-06-28-Just-What-We-Need-Another-Social-Network.md index 678605f..0aab45a 100644 --- a/_posts/2011-06-28-Just-What-We-Need-Another-Social-Network.md +++ b/_posts/2011-06-28-Just-What-We-Need-Another-Social-Network.md @@ -7,7 +7,7 @@ tags: web google Looks like Google is going to try it’s hand again at some kind of social network. The landing page for [Google+](http://plus.google.com/) has just surfaced and with that it seems as though Google is rolling out some possible rebranding. - + Really Google? A black top bar? Doesn’t that go against your entire web UI? diff --git a/_posts/2011-07-06-Inverted-Scrolling.md b/_posts/2011-07-06-Inverted-Scrolling.md index 9726ed4..4fd8097 100644 --- a/_posts/2011-07-06-Inverted-Scrolling.md +++ b/_posts/2011-07-06-Inverted-Scrolling.md @@ -9,6 +9,6 @@ I upgraded my MacBook Pro to the Golden Master release of Lion this morning and To get scrolling back to the trusty way it has been since…forever just plug in a USB mouse or connect a Bluetooth mouse. Then in System Preferences go to Mouse and uncheck the checkbox at the top. - + The setting will apply to the external mouse but it will also carry over to the trackpad. diff --git a/_posts/2011-07-07-The-Icons-Shape-the-Platform.md b/_posts/2011-07-07-The-Icons-Shape-the-Platform.md index 330529b..ea23c4e 100644 --- a/_posts/2011-07-07-The-Icons-Shape-the-Platform.md +++ b/_posts/2011-07-07-The-Icons-Shape-the-Platform.md @@ -7,6 +7,6 @@ tags: mobile software Mobile platforms. Just saying the phrase makes some people cringe due to the number of ecosystems out there. But with each ecosystem/platform comes a new UI. [WPCentral](http://www.wpcentral.com/smartphone-os-shapes) has an interesting article how how close each platform’s icon size/shape really is. - + It’s something you don’t really see until you line them all up. Also notice the absence of BlackBerry OS and Android. Both platforms have no standard/bounding shape for developers to use. While some people might hate the restrictions on icon shape and size I think it’s good to have when you want to really give the consumer the best UI possible. diff --git a/_posts/2011-07-11-The-Last-Shuttle.md b/_posts/2011-07-11-The-Last-Shuttle.md index 724d552..43b77ad 100644 --- a/_posts/2011-07-11-The-Last-Shuttle.md +++ b/_posts/2011-07-11-The-Last-Shuttle.md @@ -5,6 +5,6 @@ date: 2011-07-11 tags: space nasa --- - + The last shuttle mission launched last Friday and what a shot this was. Photo taken from [Robert Scobel’s Flickr Stream](http://www.flickr.com/photos/scobleizer/5915301679/in/photostream) diff --git a/_posts/2011-08-09-We-Stopped-Dreaming.md b/_posts/2011-08-09-We-Stopped-Dreaming.md index cbf6f01..96a8129 100644 --- a/_posts/2011-08-09-We-Stopped-Dreaming.md +++ b/_posts/2011-08-09-We-Stopped-Dreaming.md @@ -7,4 +7,4 @@ tags: politics space Not much else to add to this video except the fact that Neil deGrasse Tyson is the man. We need to get other people to think the same way so we can rejuvenate not only this country but the whole world. -[](http://www.youtube.com/watch?v=3_F3pw5F_Pc "We Stopped Dreaming") +[](http://www.youtube.com/watch?v=3_F3pw5F_Pc "We Stopped Dreaming") diff --git a/_posts/2011-09-13-Test-All-The-Things.md b/_posts/2011-09-13-Test-All-The-Things.md index 6bcafd8..b1db69d 100644 --- a/_posts/2011-09-13-Test-All-The-Things.md +++ b/_posts/2011-09-13-Test-All-The-Things.md @@ -5,6 +5,6 @@ date: 2011-09-13 tags: software testing --- - + Made this a while ago and forgot to post it. diff --git a/_posts/2012-01-08-Learn-to-code-in-2012.md b/_posts/2012-01-08-Learn-to-code-in-2012.md index 65f6e69..a5ac670 100644 --- a/_posts/2012-01-08-Learn-to-code-in-2012.md +++ b/_posts/2012-01-08-Learn-to-code-in-2012.md @@ -2,7 +2,7 @@ layout: post title: "Learn to Code in 2012" date: 2012-01-09 -image: Learn_To_Code.jpg +image: Learn_To_Code.webp tags: software --- diff --git a/_posts/2013-03-19-Diff-Tools.md b/_posts/2013-03-19-Diff-Tools.md index e7f7eeb..a460727 100644 --- a/_posts/2013-03-19-Diff-Tools.md +++ b/_posts/2013-03-19-Diff-Tools.md @@ -2,7 +2,7 @@ layout: post title: "The difference between diff.tool and diff.guitool" date: 2013-03-19 -image: Git_Logo.png +image: Git_Logo.webp tags: software --- diff --git a/_posts/2013-03-23-Android-Stock-UI.md b/_posts/2013-03-23-Android-Stock-UI.md index 72f31b2..8f87863 100644 --- a/_posts/2013-03-23-Android-Stock-UI.md +++ b/_posts/2013-03-23-Android-Stock-UI.md @@ -2,7 +2,7 @@ layout: post title: "Most Android users don't even know about the stock UI" date: 2013-03-23 -image: Stock_Android_Experience.png +image: Stock_Android_Experience.webp tags: software android --- diff --git a/_posts/2014-05-18-New-Look-New-Host.md b/_posts/2014-05-18-New-Look-New-Host.md index 66b17a2..3509637 100644 --- a/_posts/2014-05-18-New-Look-New-Host.md +++ b/_posts/2014-05-18-New-Look-New-Host.md @@ -2,7 +2,7 @@ layout: post title: "New Look, New Host, New Content (hopefully)" date: 2014-05-18 -image: Wordpress_Azure.png +image: Wordpress_Azure.webp tags: website --- diff --git a/_posts/2014-05-19-Masters-of-Doom.md b/_posts/2014-05-19-Masters-of-Doom.md index 45571f4..0c616b5 100644 --- a/_posts/2014-05-19-Masters-of-Doom.md +++ b/_posts/2014-05-19-Masters-of-Doom.md @@ -2,7 +2,7 @@ layout: post title: "Masters of Doom - Book Review" date: 2014-05-19 -image: Doom_Book_Review.jpg +image: Doom_Book_Review.webp tags: books review --- diff --git a/_posts/2014-05-28-Lenovo-Wins-Business-Laptops.md b/_posts/2014-05-28-Lenovo-Wins-Business-Laptops.md index 4fbb118..ecf08d0 100644 --- a/_posts/2014-05-28-Lenovo-Wins-Business-Laptops.md +++ b/_posts/2014-05-28-Lenovo-Wins-Business-Laptops.md @@ -2,7 +2,7 @@ layout: post title: "Lenovo Wins Business Laptops Once Again" date: 2014-05-28 -image: ThinkPad_Laptop.jpg +image: ThinkPad_Laptop.webp tags: hardware review --- @@ -22,7 +22,7 @@ One other thing they chose to include on the T440s that other (smaller) Lenovo l The battery setup of the T440s is a little unique. When you flip the device over you only see a small 3 cell battery that is user removable. At first this scared me thinking that battery life was going to be abysmal but upon booting up to the desktop for the first time I was surprised to find a battery life estimate of almost 7 hours. This is achieved by having a separate, non-removable 3 cell battery inside the laptop. This shows as a second battery (seen below) and gives you the benefit of hot swap-able batteries as long as you have some juice left. - + On top of that the new power supply is incredibly small 65W power brick that is very easy to carry around and uses the new Lenovo flat connector for interchangeability with other Lenovo laptops. diff --git a/_posts/2014-05-30-CLI-vs-GUI.md b/_posts/2014-05-30-CLI-vs-GUI.md index 6b79be7..c87e877 100644 --- a/_posts/2014-05-30-CLI-vs-GUI.md +++ b/_posts/2014-05-30-CLI-vs-GUI.md @@ -2,7 +2,7 @@ layout: post title: "CLI vs. GUI" date: 2014-05-30 -image: CLI_GUI.png +image: CLI_GUI.webp tags: software --- diff --git a/_posts/2014-08-11-Photo-Backups.md b/_posts/2014-08-11-Photo-Backups.md index ab48b43..9e5e8af 100644 --- a/_posts/2014-08-11-Photo-Backups.md +++ b/_posts/2014-08-11-Photo-Backups.md @@ -2,7 +2,7 @@ layout: post title: "Photo backup's are no longer just for techies" date: 2014-08-11 -image: Cloud_Backup.png +image: Cloud_Backup.webp tags: software photos --- diff --git a/_posts/2014-08-15-What-I-Use-Mac-Software.md b/_posts/2014-08-15-What-I-Use-Mac-Software.md index 64cd49a..e09e329 100644 --- a/_posts/2014-08-15-What-I-Use-Mac-Software.md +++ b/_posts/2014-08-15-What-I-Use-Mac-Software.md @@ -2,7 +2,7 @@ layout: post title: "What I Use - Mac Software" date: 2014-08-15 -image: Mac_Apps.jpg +image: Mac_Apps.webp tags: software mac --- diff --git a/_posts/2014-08-19-Outlook-2011-Notification-Center.md b/_posts/2014-08-19-Outlook-2011-Notification-Center.md index f126385..28d53c7 100644 --- a/_posts/2014-08-19-Outlook-2011-Notification-Center.md +++ b/_posts/2014-08-19-Outlook-2011-Notification-Center.md @@ -2,7 +2,7 @@ layout: post title: "Outlook 2011 for Mac and Notification Center" date: 2014-08-19 -image: Outlook_Notifications.png +image: Outlook_Notifications.webp tags: software --- diff --git a/_posts/2014-09-18-Google-Hangouts-on-a-MacBook-Air.md b/_posts/2014-09-18-Google-Hangouts-on-a-MacBook-Air.md index c7dbc8c..4695294 100644 --- a/_posts/2014-09-18-Google-Hangouts-on-a-MacBook-Air.md +++ b/_posts/2014-09-18-Google-Hangouts-on-a-MacBook-Air.md @@ -2,7 +2,7 @@ layout: post title: "Google Hangouts on a MacBook Air" date: 2014-09-18 -image: Hangouts_On_Air.png +image: Hangouts_On_Air.webp tags: software --- diff --git a/_posts/2014-09-19-Looking-Back-at-NovKiaSoft.md b/_posts/2014-09-19-Looking-Back-at-NovKiaSoft.md index cc9a117..8e40c5a 100644 --- a/_posts/2014-09-19-Looking-Back-at-NovKiaSoft.md +++ b/_posts/2014-09-19-Looking-Back-at-NovKiaSoft.md @@ -2,7 +2,7 @@ layout: post title: "Looking Back at NovKiaSoft" date: 2014-09-19 -image: NovKiaSoft.png +image: NovKiaSoft.webp tags: work --- diff --git a/_posts/2014-09-22-The-Martian-Book-Review.md b/_posts/2014-09-22-The-Martian-Book-Review.md index a69d433..9728850 100644 --- a/_posts/2014-09-22-The-Martian-Book-Review.md +++ b/_posts/2014-09-22-The-Martian-Book-Review.md @@ -2,7 +2,7 @@ layout: post title: "The Martian - Book Review" date: 2014-09-22 -image: The_Martian.png +image: The_Martian.webp tags: books --- diff --git a/_posts/2014-09-24-My-iPhone6-Buying-Experience.md b/_posts/2014-09-24-My-iPhone6-Buying-Experience.md index a836e7e..995c08b 100644 --- a/_posts/2014-09-24-My-iPhone6-Buying-Experience.md +++ b/_posts/2014-09-24-My-iPhone6-Buying-Experience.md @@ -2,7 +2,7 @@ layout: post title: "My iPhone 6 Buying Experience" date: 2014-09-24 -image: iPhone6_Buying.png +image: iPhone6_Buying.webp tags: hardware apple --- diff --git a/_posts/2014-09-24-Pebble-2.5.md b/_posts/2014-09-24-Pebble-2.5.md index 68156a1..8066f23 100644 --- a/_posts/2014-09-24-Pebble-2.5.md +++ b/_posts/2014-09-24-Pebble-2.5.md @@ -2,7 +2,7 @@ layout: post title: "Pebble v2.5 is Huge for Smartwatches" date: 2014-09-24 -image: Pebble2.5.png +image: Pebble2.5.webp tags: hardware pebble --- diff --git a/_posts/2014-09-25-Nokia-Portable-Wireless-Speker-Review.md b/_posts/2014-09-25-Nokia-Portable-Wireless-Speker-Review.md index 7c79de0..8fec5c8 100644 --- a/_posts/2014-09-25-Nokia-Portable-Wireless-Speker-Review.md +++ b/_posts/2014-09-25-Nokia-Portable-Wireless-Speker-Review.md @@ -2,7 +2,7 @@ layout: post title: "Nokia Portable Wireless Speaker (MD-12) Review" date: 2014-09-25 -image: Nokia_Bluetooth_Speaker.jpg +image: Nokia_Bluetooth_Speaker.webp tags: hardware nokia --- @@ -26,7 +26,7 @@ The overall sound that comes from the speaker is good, but a lot of it depends o I have found a few different places in the house that make the speaker sound better then others. Funny enough attached to the freezer door in the basement is actually one of them. And because the base is so close magnet for the speaker it sticks to anything metal surprisingly well. - + There are other surfaces, like my kitchen table, that just doesn’t reverb the same way. It makes the sound feel flat and the listening experience is worse for it. diff --git a/_posts/2014-09-26-Apple-is-Quietly-Killing-iPad-only-Applications.md b/_posts/2014-09-26-Apple-is-Quietly-Killing-iPad-only-Applications.md index df7fefc..42d695d 100644 --- a/_posts/2014-09-26-Apple-is-Quietly-Killing-iPad-only-Applications.md +++ b/_posts/2014-09-26-Apple-is-Quietly-Killing-iPad-only-Applications.md @@ -2,7 +2,7 @@ layout: post title: "Apple is Quietly Killing iPad only Applications" date: 2014-09-26 -image: Universal_Apps.png +image: Universal_Apps.webp tags: software apple --- diff --git a/_posts/2014-09-29-Unspoken-Understanding-Tacit-App-Review.md b/_posts/2014-09-29-Unspoken-Understanding-Tacit-App-Review.md index 944f847..ad3eabe 100644 --- a/_posts/2014-09-29-Unspoken-Understanding-Tacit-App-Review.md +++ b/_posts/2014-09-29-Unspoken-Understanding-Tacit-App-Review.md @@ -2,7 +2,7 @@ layout: post title: "Unspoken Understanding - Tacit App Review" date: 2014-09-29 -image: Tacit.png +image: Tacit.webp tags: software review --- diff --git a/_posts/2014-09-30-Podcasts-Changed-My-Routine.md b/_posts/2014-09-30-Podcasts-Changed-My-Routine.md index 6a07707..49e8e18 100644 --- a/_posts/2014-09-30-Podcasts-Changed-My-Routine.md +++ b/_posts/2014-09-30-Podcasts-Changed-My-Routine.md @@ -2,7 +2,7 @@ layout: post title: "Podcasts Changed My Routine" date: 2014-09-30 -image: Podcasts.png +image: Podcasts.webp tags: podcasts --- diff --git a/_posts/2014-10-01-Microsoft-Hardware.md b/_posts/2014-10-01-Microsoft-Hardware.md index 914648d..300e9b8 100644 --- a/_posts/2014-10-01-Microsoft-Hardware.md +++ b/_posts/2014-10-01-Microsoft-Hardware.md @@ -2,7 +2,7 @@ layout: post title: "You use Microsoft Hardware on your Mac?" date: 2014-10-01 -image: Microsoft_Hardware.png +image: Microsoft_Hardware.webp tags: hardware --- diff --git a/_posts/2014-10-02-iOS-Notifications-are-a-toxic-hellstew.md b/_posts/2014-10-02-iOS-Notifications-are-a-toxic-hellstew.md index e65c774..31b405b 100644 --- a/_posts/2014-10-02-iOS-Notifications-are-a-toxic-hellstew.md +++ b/_posts/2014-10-02-iOS-Notifications-are-a-toxic-hellstew.md @@ -2,7 +2,7 @@ layout: post title: "iOS Notifications are a Toxic Hellstew" date: 2014-10-02 -image: iOS_Notifications.png +image: iOS_Notifications.webp tags: software --- diff --git a/_posts/2014-10-03-Remote-Workers-Just-Dont-Work.md b/_posts/2014-10-03-Remote-Workers-Just-Dont-Work.md index a02fec4..95695cb 100644 --- a/_posts/2014-10-03-Remote-Workers-Just-Dont-Work.md +++ b/_posts/2014-10-03-Remote-Workers-Just-Dont-Work.md @@ -2,7 +2,7 @@ layout: post title: "Remote Workers Just Don't Work" date: 2014-10-03 -image: Remote_Workers.png +image: Remote_Workers.webp tags: remote work --- diff --git a/_posts/2015-01-11-Social-Media-In-The-News.md b/_posts/2015-01-11-Social-Media-In-The-News.md index 9f5f20f..9e0ffaf 100644 --- a/_posts/2015-01-11-Social-Media-In-The-News.md +++ b/_posts/2015-01-11-Social-Media-In-The-News.md @@ -2,7 +2,7 @@ layout: post title: "Learning How Social Media Is Used In The Daily News" date: 2015-01-11 -image: Social_Media_In_The_News.png +image: Social_Media_In_The_News.webp tags: chicago news --- diff --git a/_posts/2015-01-11-Time-For-a-Fresh-Install.md b/_posts/2015-01-11-Time-For-a-Fresh-Install.md index cec98fb..e54a30a 100644 --- a/_posts/2015-01-11-Time-For-a-Fresh-Install.md +++ b/_posts/2015-01-11-Time-For-a-Fresh-Install.md @@ -2,7 +2,7 @@ layout: post title: "Time for a Fresh Install" date: 2015-01-11 -image: Mac_Apps_Part2.png +image: Mac_Apps_Part2.webp tags: software mac --- diff --git a/_posts/2016-06-20-Bike-Share-Buddy-1.0.md b/_posts/2016-06-20-Bike-Share-Buddy-1.0.md index 5107db4..7848a44 100644 --- a/_posts/2016-06-20-Bike-Share-Buddy-1.0.md +++ b/_posts/2016-06-20-Bike-Share-Buddy-1.0.md @@ -9,7 +9,7 @@ I always have a couple little side projects that occupy the little spare time I ### Introducing Bike Share Buddy - + _Bike Buddy Stations List_ I wanted to create an app that was not only interesting for me to build but that other people would find useful. After doing some research I found that [Bixi](http://bixi.com) was an umbrella company that runs a lot of the bike sharing programs around the US (as well as Canada and the U.K.) and it just so happens that they have an API that's pretty standard across their deployments in different cities. I thought it would be a fun experiment to see if I could create an app that worked across many different cities so that users wouldn't have to download a new app for every city they wanted to visit. The idea and the app was simple but all the extra things it takes to get an app launched the right way really blindsided me. @@ -18,4 +18,4 @@ I had the basics of the app ready to go within a couple weeks or so, mostly work Do I expect this app to set the world on fire, not a chance. But I am proud that I took something from concept to reality and I really hope I can use it to learn more and more about iOS. -[](https://itunes.apple.com/us/app/id998776734) +[](https://itunes.apple.com/us/app/id998776734) diff --git a/_posts/2018-07-17-bikesharebuddy15update.md b/_posts/2018-07-17-bikesharebuddy15update.md index f2aee3a..32c17ca 100644 --- a/_posts/2018-07-17-bikesharebuddy15update.md +++ b/_posts/2018-07-17-bikesharebuddy15update.md @@ -10,7 +10,7 @@ A quick update to Bike Share Buddy has now been published to the iOS App Store. While as usual there are some minor fixes and changes there is actually one new feature supported, Siri Search Suggestions. This means that when you use Bike Share Buddy information, like what stations you are looking at, are being shared with Siri. This means that when you do a search in Siri this information can easily be surfaced even outside the Bike Share Buddy app. - + _Siri Search Suggestion with Bike Share Buddy_ While this is something that I had on the list of things to implement in the past it always fell down the list. But with iOS 12 being shown at WWDC and the huge focus on Siri it was time to jump in and get it done. How many people will actually use this? Who knows. But it's nice to have a target to keep up with every year when Apple releases an iOS update. diff --git a/_posts/2019-04-02-curling.md b/_posts/2019-04-02-curling.md index af25cb3..0c09db1 100644 --- a/_posts/2019-04-02-curling.md +++ b/_posts/2019-04-02-curling.md @@ -3,7 +3,7 @@ layout: post title: "Curling, a Season in Review" description: I was able to get to the club championship game! It's a great primer for heading to Arena Nationals. date: 2019-04-02 -image: Curling.jpg +image: Curling.webp tags: curling --- diff --git a/_posts/2019-05-18-Arena-Nats-Recap.md b/_posts/2019-05-18-Arena-Nats-Recap.md index 5236596..e48a53c 100644 --- a/_posts/2019-05-18-Arena-Nats-Recap.md +++ b/_posts/2019-05-18-Arena-Nats-Recap.md @@ -3,7 +3,7 @@ layout: post title: "2019 USCA Arena Nationals Recap" description: For the week of May 5th 2019 I got to be a full time professional athlete. date: 2019-05-18 -image: 2019ArenaNatsRecap.jpeg +image: 2019ArenaNatsRecap.webp tags: curling --- diff --git a/_posts/2020-11-18-Leaving-BMW.md b/_posts/2020-11-18-Leaving-BMW.md index a002e0a..5b1352f 100644 --- a/_posts/2020-11-18-Leaving-BMW.md +++ b/_posts/2020-11-18-Leaving-BMW.md @@ -3,7 +3,7 @@ layout: post title: Leaving BMW description: It's been six years since I had to write a post like this. Truthfully, at least for me, it's never easy. Unfortunately BMW has made the decision to shut down the Chicago Technology Office. I'm not going to beat around the bush here, this really sucks. date: 2020-11-18 -image: Leaving_BMW.png +image: Leaving_BMW.webp tags: bmw work vgv --- diff --git a/_posts/2024-11-30-Curling-Scoreboard.md b/_posts/2024-11-30-Curling-Scoreboard.md index 5b859b3..ca7740e 100644 --- a/_posts/2024-11-30-Curling-Scoreboard.md +++ b/_posts/2024-11-30-Curling-Scoreboard.md @@ -3,7 +3,7 @@ layout: post title: New Project - Curling Scoreboard description: I just can't seem to help myself 🤦♂️ Another little side project to help out the curling club and our electronic scoreboards. date: 2024-11-30 -image: Curling-Scoreboard-In-Action.jpg +image: Curling-Scoreboard-In-Action.webp tags: curling software --- @@ -34,7 +34,7 @@ Holy crap. I’m less than 30 minutes into working on this and I have a function After some manual code adjustments, the result more closely resembled my original vision. Looking back at the original prompt, I can see where I could have made some little tweaks to get closer to this in the first pass. My first actual attempt at coding with an LLM proved to be a valuable learning experience. - + _The very first version of Curling Scoreboard, only 30ish minutes into development._ After this point, I focused on fine-tuning to meet my specifications. Nothing super foundational as that was all laid out for me in that first prompt. It was good enough performance wise to deploy, but it didn’t look like what we wanted on the screen. So between the current scoreboards still working and the curling season wrapping up, this project went back on the shelf. @@ -45,7 +45,7 @@ Fast forward to October 2025. The club is finally ready to reopen after the [fac Step one, actually get the layout correct. This took longer than I expected as some of that ChatGPT generated code was just not great. It very much seemed like a student coming out of college wrote it and knew nothing about dynamic layout. But some hacking around and we end up with the first version that is actually usable and looks halfway decent for the people playing and spectators in the warm room. - + _The first useable version that went into "production"_ Now that a working prototype existed, feedback was collected from curlers to guide more updates. There were some simple things that kept coming up, which ended up creating the backlog for work. @@ -67,12 +67,12 @@ The players start by setting up the game. Only need to select a couple of things - Number of Players: We have both normal team curling and Doubles in our leagues. This is important so we can get the game clock correct as a Doubles game should be quicker. Also want to enforce the blank in doubles switches hammer rule. - Hammer in 1st End: Knowing this allows for a hammer icon to be shown for the team that currently has hammer. - + _What players see when they are getting ready to start a game_ After getting that set and selecting Start Game you're ready to go! As you can see below, the scoreboard is pretty big and easy to read. The Game Time counts up so you know the total time taken and the +/- clock is where you are in relation to a standard timetable. The goal there is to help all players with the pace of play, which is a constant struggle from club to club. - + _A working scoreboard with a game in progress_ And that’s where I am today. Overall, the feedback from all the curlers has been great and the few tweaks I have made over the last month have made it a great setup for our club and something unique as compared to other facilities. There for sure is more work to be done, but we are at a good stopping point right now. The next feature requests would get live scores and game reports saved to a backend so we can include it in other functions the club has, like [our live streams on YouTube](https://www.youtube.com/@WindyCityCurling/streams), but that’s a project for another time. diff --git a/_posts/2025-03-02-Remote-Work-Has-Always-Been-My-Reality.md b/_posts/2025-03-02-Remote-Work-Has-Always-Been-My-Reality.md index 28141df..44bd6fa 100644 --- a/_posts/2025-03-02-Remote-Work-Has-Always-Been-My-Reality.md +++ b/_posts/2025-03-02-Remote-Work-Has-Always-Been-My-Reality.md @@ -10,7 +10,7 @@ layout: post title: 2025 Rockford 70.3 Race Report description: It was a wild weekend for the inaugural Rockford 70.3 and wanted to capture all the details I could remember. It was a tough race but I learned a lot and enjoyed it. date: 2025-06-29 -image: 2025_Rockford70.3_Finisher.jpeg +image: 2025_Rockford70.3_Finisher.webp tags: triathlon For many, the transition to remote work was a dramatic shift forced by circumstance, requiring companies and employees alike to rethink how work gets done. But for me, remote work has never felt like a radical departure from the norm. Even when I worked in traditional office settings at companies like Nokia, Microsoft, and BMW, I was rarely in the “home office.” My teams were distributed across many countries, my meetings were virtual, and my work operated across time zones. In a sense, I was remote long before I was fully remote. diff --git a/_posts/2025-06-29-2025-Rockford-70.3-Race-Report.md b/_posts/2025-06-29-2025-Rockford-70.3-Race-Report.md index 818433a..0ada4a0 100644 --- a/_posts/2025-06-29-2025-Rockford-70.3-Race-Report.md +++ b/_posts/2025-06-29-2025-Rockford-70.3-Race-Report.md @@ -3,7 +3,7 @@ layout: post title: 2025 Rockford 70.3 Race Report description: It was a wild weekend for the inaugural Rockford 70.3 and wanted to capture all the details I could remember. It was a tough race but I learned a lot and enjoyed it. date: 2025-06-29 -image: 2025_Rockford70.3_Finisher.jpeg +image: 2025_Rockford70.3_Finisher.webp tags: triathlon --- @@ -27,7 +27,7 @@ Going back the next day to bike check in was much of the same. Get in, see the a As the sun came up and I setup everything in my transition area, it almost felt calming. That’s a good thing given that I was already sweating from the 80 degree temp and high early morning humidity. Just going through the motions to ensure I had my day setup the best I could and chatting with my training group and others made the morning fly by. They announced that the water temp was 79 degrees so no wet suits. Not a surprise given the temperatures from the previous few days. Next thing I knew, it was time to get on the shuttle to head up to swim start. - + _About to get on the shuttle up to the swim start so the obligatory "first day of school" photo._ Typically, I wouldn’t think that a shuttle ride would be worth talking about, but this one was. There was a mix of nervousness and excitement in the air over the 10-minute ride as we made our way upriver. We ended up having to cross the river a couple times, probably because of road closures, and one crossing was about halfway. At that point I looked up and down river and realized that I couldn’t see the start or the end clearly given the bend in the river. That really screws with your head. 1.2 miles doesn’t seem like a lot when you’re doing it 20 yards a lap in a pool, but seeing it stretched out into one long path was a sight to see. @@ -42,14 +42,14 @@ This was the first river swim I had done, so that was a fun new thing to check o By the time I got to the second buoy, I could settle in. Breathing on the left side where the buoy line was made it easy to spot and range find where I was at. Good for me as you couldn’t see anything past 2 feet in the water. I noticed pretty quickly that I couldn’t see my hand when it was out front of me, so that meant a lot of extra sighting overall. If I couldn’t see my hand, then I for sure couldn’t see the feet of anyone that I was coming up on. - + _During the Swim, from one of the bridges we crossed under._ I noticed the buoy color changed from yellow to orange and thought maybe that means I was about halfway. Note for next time, check that beforehand so you have something to look forward to rather than just guessing. At that point, I was in a solid rhythm and just kept my stroke smooth. I knew I had more pace in my arms but also didn’t want to go too hard, given how long the day was going to be. After crossing what I thought was the second to last bridge, I noticed a sizable group of pink volunteer shirts. It was the dock! I thought I had at least one more bridge to go, but was pleasantly surprised that I was almost done. The dock was super nice in that there were three ramps they had lowered into the water. All you had to do was swim to it, grab the railing and walk right up. Super smooth and I hope I see that at more races in the future. - + _Out of the water feeling good and on to T1._ I clicked my watch on the timing line and saw 33 minutes. That’s 4 minutes faster than my previous time and I felt great coming out of the water. It was shaping up to be a good day. We had about a quarter mile jog from the swim exit to our bikes and could jog the whole time without issue. Getting into T1, it was a mixed bag of “let’s get outta here” combined with “slow down and make sure you’re all set”. I noticed that Eleanor’s bike was already gone, and she was nowhere to be found, so I had something to chase when out on the bike. With all my gear on, I did one quick spray of sunscreen, loaded the route on my computer while jogging out, and it was time to clip in and go. @@ -66,7 +66,7 @@ Well it didn’t take long to change my mind as around mile 8 I was going downhi At this point, we have the wind on our backs, so I’m feeling great. The sun was hitting but in moving so fast and having the breeze, I didn’t really feel the heat. Suddenly we were at the 15 mile aid station and it was time to grab a banana and a bottle of water. Easy pedaling through made it simple to grab what I needed, and I figured I would pause at the end to get resettled quickly. When I came to a stop I finished the banana, and then went to go put the fresh bottle in my empty cage. Except for a slight problem, the cage was gone. Instantly I realized that the rattling I heard before was not my gear pod but the cage itself. Well, not much I can do about that now. I stuck the water bottle in my back pocket and keep pedaling. - + _All smiles through 30 miles on the bike but things were going to be changing quickly._ Everything felt great through about mile 30. The course was rolling, the wind wasn’t too much of an issue, and I was staying on plan with hydration. I made a quick stop at the aid station, which was on an uphill and not sure how I feel about that, and got rolling quickly again. We then made the turn to make our way back around mile 32, and everything changed. We were now heading directly into the wind and it was starting to pickup. It was a decently consistent 15+mph with incredibly powerful gusts. Right away, I knew the plan had to change. @@ -83,33 +83,33 @@ Instead, I barely jogged and mostly walked the first mile and a half with an ope Just 5 minutes after that moment, everything changed. We ran through a small one block neighborhood where a man was out with his hose and sprinkler wand just soaking people. When I finally got to him I stood there for a second and he just showered me with cold water. Instantly I felt better and realized OK we can do this, just need to focus on cooling more than I originally thought. I held onto that thought for the next few aid stations as I continued to grab 4-5 cups of ice to dump into my tri suit and my hat. I dragged myself through three and a half miles still floating in that 14 to 15 minute range. - + _Pretty much sums up how I was feeling at this point, beaten down but not out yet._ At this point, I was at the “top” of the loop, and it was time to turn south and head back in. In changing direction, the wind was now hitting me instead of on my back, which was a welcomed change, but that was just the start. This part of the loop was in a friendly neighborhood that had trees, which meant shade. As I looked down the street, I also noticed the crowds that were lining the street. The energy they were providing was amazing but paled compared to the best sight of the day: literally a dozen sprinkler and hoses all throughout the next mile. I took every chance I could to get anything from just a few drops of water hitting me to getting completed soaked. And soon I realized it was working. I wanted to run. I knew it was going to have to be a mix of walk/run, but it’s progress. Over the rest of the first loop, I worked my way down to 12 and even some 11 minute miles. When I started the second loop, I finally had a plan. Keep up the walk/run to hold on to those 12 minute miles and take my time in the aid stations to soak in all the cooling I could handle. The first 3 miles of the loop were the worst part, so if I could make it through that the neighborhood, dubbed sprinkler alley, could get me through the last bit to the finish line. - + _The start of the second loop on the run, possibly having this thing figured out finally._ About a mile into the second loop, I was able to see Sarah again at the same point on the course from before and gave her a bit smile to show her “hey I’ve this figured out now”. I think she had a sense of relief after watching the tracker app all day and just assuming how I was doing. I stuck to the plan and soon enough I hit the 10 mile marker and realized it was the home stretch. My pace picked up as the excitement in me picked up as well. It took 10 miles to get there, but I realized the plan was working and that we were gonna get this done. Coming back into the downtown area, the crowds continued to grow. I could hear the music and announcer from the finish line as I was getting ready to get to the final split. I was coming up onto the street with a big group of people and as the lane split they all went left to start their second loop, I was alone in the finish chute. All the spectators that lined the course knew they were on the finish path and they got loud. It was incredible. - + _Heading down the magical red carpet to the finish line._ Just two quick turns and the finish line was in sight. I ran for the first time since that first mile, throwing my hands in the air, and hyping up the rest of the crowds as I yelled in just sheer excitement. I crossed the finish line with a huge smile, knowing that I made it and that I could finally stop moving after six and a half hours. - + _Heading down the magical red carpet to the finish line._ ## What’s Next With many races, I end them and think of all the things I could have and should have done differently. In having some space from this race now, I’m really struggling to come up with that list. Physically, I performed well in that I had zero stomach or cramping issues. I had a smooth swim, a controlled bike, and just got bit by the elements on the run that were out of my control. But maybe that’s just the case with early season racing. We haven’t had the time to soak in the heat yet, so the first time we hit it during a season it’s like hitting a brick wall. The wall just happened to be right there for the race weekend. The saying goes “you can pick your race, but not your day”. - + _All smiles now that were done and had some real food for the first time today._ The good news is, after that race, there isn’t much that a course could throw at me I wouldn’t be ready for. While I have no more long course races on the schedule this year, just a couple Sprint and Olympic distances, I know that I’m primed and ready for the rest of the year to not just perform well but also have a lot of fun. diff --git a/_posts/2025-10-22-Chicago-Marathon-Race-Report.md b/_posts/2025-10-22-Chicago-Marathon-Race-Report.md index 333d496..86654fd 100644 --- a/_posts/2025-10-22-Chicago-Marathon-Race-Report.md +++ b/_posts/2025-10-22-Chicago-Marathon-Race-Report.md @@ -3,7 +3,7 @@ layout: post title: 2025 Chicago Marathon description: Something a bit less scary about doing a big thing the second time around. Could it have ended better, of course. But every race is a chance to grow and that certainly happened this time around. date: 2025-10-22 -image: 2025_Chicago_Marathon_Finisher.jpg +image: 2025_Chicago_Marathon_Finisher.webp tags: marathon --- @@ -37,7 +37,7 @@ As the week went on I realized something. I wasn't nervous. At this point last y I had my whole morning planned out so up at 4:30AM and at the Oak Park Green Line station by 5:15. Into the Loop and through security by 6AM. I got to spend some time reflecting because I was so early getting in. The whole time I was waiting to get those butterflies but instead it was an overwhelming feeling of "let's do this". - + _Early Morning in Grant Park before the buzz of the Marathon picks up._ It was then, when the sun was coming up over the lake and Grant Park began to fill, that I realized, oh man maybe I do actually belong here now. I mean let's be honest, running a marathon is a dumb idea no matter how much you train. But knowing that I had put in the work made everything click. It was time to go have some fun. @@ -46,11 +46,11 @@ I checked my gear and headed to the corral. I got a chance to finally see Mindi
+
Kim, running her 10th Chicago Marathon
Mindi, ready to run Chicago