<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" >
	<channel>
		<title>Words • Pat Murray</title>
		<description>Sometimes, I blog…</description>
		<link>https://patmurray.co/words/</link>
		<image>
		    <link>https://patmurray.co/words/</link>
		    <title>
			Words • Pat Murray
		    </title>
		    <url>https://patmurray.co/assets/favicon/android-icon-192x192.png</url>
		</image>
		<atom:link href="https://patmurray.co/words/feed.xml" rel="self" type="application/rss+xml" />
		<lastBuildDate>Sat, 08 Aug 2026 12:00:00 +0000</lastBuildDate>
		
			
			<item>
				<title>Live Streaming My Wedding</title>
					<description>
						&lt;p&gt;While organising &lt;a href=&quot;/words/married/&quot; target=&quot;_blank&quot;&gt;our wedding&lt;/a&gt; it became apparent that there would be some very important people who unfortunately could not attend. So, we decided to have a go at live streaming the ceremony for them.&lt;/p&gt;

&lt;p&gt;The wedding live streaming industry became quite massive in 2020, and with a full range of options: from leaning your phone against some books and starting a free (40 minute) Zoom call, all the way to paying multiple thousands of dollars for a team. We wanted neither of these. We wanted to be in control, but also had to contend with the reality of your own wedding day—there are just too many things to do, and of course we wanted to enjoy it—we didn’t want managing the stream to get in the way.&lt;/p&gt;

&lt;p&gt;There are a few main components to a successful livestream: the &lt;a href=&quot;#camera&quot;&gt;camera&lt;/a&gt;, the &lt;a href=&quot;#audio&quot;&gt;audio&lt;/a&gt;, the &lt;a href=&quot;#computer&quot;&gt;computer&lt;/a&gt;, and the &lt;a href=&quot;#running-the-show&quot;&gt;running of the show&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;photoset extrawide&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/wedding-livestream/IMG_5597.webp&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;figcaption&gt;Tommaso getting the framing right using my brother as stand in.&lt;/figcaption&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/wedding-livestream/IMG_5591.webp&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;figcaption&gt;The camera, tripod, laptop, cellular modem set up a few hours before.&lt;/figcaption&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;camera&quot;&gt;Camera&lt;/h2&gt;

&lt;p&gt;We elected to use &lt;a href=&quot;https://tomma.so/&quot; target=&quot;_blank&quot;&gt;Tommaso’s&lt;/a&gt; &lt;a href=&quot;https://www.fujifilm-x.com/en-us/products/cameras/x-h2/&quot; target=&quot;_blank&quot;&gt;FujiFilm X-H2&lt;/a&gt; on a tripod, with a second camera as a backup, also recording but not live streaming. I attached my Insta360 to the tripod, as another backup and to record the entire room in case something of interest way outside of frame.&lt;/p&gt;

&lt;p&gt;The microphone receiver (see &lt;a href=&quot;#audio&quot;&gt;audio&lt;/a&gt; below) plugged into the 3.5mm input on the camera. This camera can record internally at impressive resolutions and bitrates, luckily we were able to borrow a monster &lt;a href=&quot;https://www.bhphotovideo.com/c/product/1857863-REG/lexar_lcxexp4001t_rneng_1tb_professional_cfexpress_4_0.html&quot; target=&quot;_blank&quot;&gt;1TB CFexpress card&lt;/a&gt; for the internal recording. It also had HDMI output, which we configured to 1080p to hook up to the &lt;a href=&quot;#computer&quot;&gt;computer&lt;/a&gt;. Despite having likely more than enough power from the three batteries (one internal, two in the battery grip&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;) we also hooked up USB-C power in to ensure stability.&lt;/p&gt;

&lt;p&gt;In the interest of recording the best quality we could for longevity we recorded in &lt;a href=&quot;https://digitalcamera-support-en.fujifilm.com/digitalcameraengpcdetail?aid=000008332&amp;amp;p=a065i00000975qpAAA&amp;amp;wd=&quot; target=&quot;_blank&quot;&gt;F-Log&lt;/a&gt; so we could recover highlights and shadows later. This did mean the HDMI feed looked very washed out, so we had to handle that in the live streaming &lt;a href=&quot;#computer&quot;&gt;software&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;audio&quot;&gt;Audio&lt;/h2&gt;

&lt;p&gt;For months audio was a big concern for me. People can generally tolerate low quality video, but almost no one can tolerate poor audio. Cameras tend to have mediocre microphones, and we were relying on hiding the camera quite far from the action; so we had to get external audio. Quite a good option here is to find a way to hook into the venue’s PA system since many weddings will have a microphone for the celebrant—but given we planned this wedding from 12,000km away and only saw the venue in person exactly 24 hours before, we really couldn’t rely on any venue equipment. So: &lt;a href=&quot;https://en.wikipedia.org/wiki/Lavalier_microphone&quot; target=&quot;_blank&quot;&gt;lavalier microphones&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Lav mics tend to come in two varieties: the &lt;a href=&quot;https://www.sweetwater.com/store/detail/EWDXMKE2SetQ--sennheiser-ew-dx-mke-2-set-dual-lavalier-microphone-system-q1-9-band&quot; target=&quot;_blank&quot;&gt;classic body pack&lt;/a&gt; wirelessly transmitting over radio frequencies to a rack mounted receiver that costs two-grand, and the &lt;a href=&quot;https://rode.com/en-au/products/wireless-micro&quot; target=&quot;_blank&quot;&gt;small all-in-one&lt;/a&gt; 2.4GHz packs from modern companies. The catch with the former is cost and setup hassle; the catch with the latter is they all come in two-packs, meaning we’d need two separate receivers to mic up three people. I really didn’t like the idea of someone not being heard, so I searched high and low for a modern 2.4GHz system that supported more than two transmitters per receiver and finally found the &lt;a href=&quot;https://www.saramonic.com/product/blink500-t4&quot;&gt;&lt;strong&gt;Saramonic Blink500 T4&lt;/strong&gt;&lt;/a&gt; at a really good price “used once” on eBay.&lt;/p&gt;

&lt;p&gt;Most modern systems now include wind/noise cancellation modes, which does make the cut off at the end of sentences a bit abrupt, but on a rooftop ceremony it was absolutely worth enabling.&lt;/p&gt;

&lt;h4 id=&quot;hiding-the-microphones&quot;&gt;Hiding the Microphones&lt;/h4&gt;
&lt;p&gt;Another hard requirement I had was to never see the microphones in any photos, so I haphazardly attached the capsules to the insides of our suit jackets using a combination of gaffer’s tape and safety pins. Not the best job but it worked. The transmitter was hidden in our pocket so it was easy to toggle on and off based on if we wanted to be heard (see &lt;a href=&quot;#running-the-show&quot;&gt;running the show&lt;/a&gt;).&lt;/p&gt;

&lt;div class=&quot;photoset extrawide&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/wedding-livestream/IMG_4519.webp&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;figcaption&gt;The Saramonic. Blink500-T4&lt;/figcaption&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/wedding-livestream/IMG_5385.webp&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;figcaption&gt;My terrible terrible job at concealing the microphones and cables in the suit.&lt;/figcaption&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;computer&quot;&gt;Computer&lt;/h2&gt;

&lt;h4 id=&quot;hardware&quot;&gt;Hardware&lt;/h4&gt;
&lt;p&gt;I used my &lt;a href=&quot;https://support.apple.com/en-us/111867&quot; target=&quot;_blank&quot;&gt;MacBook Air (M2)&lt;/a&gt; as the brains of the operation. It has an outstanding battery life, and while it has limited number of ports compared to a MacBook Pro, it had enough for us.&lt;/p&gt;

&lt;p&gt;We used a (generic) long 10m HDMI cable to get the signal out of the FujiFilm camera (which was ultimately was much longer than needed—but again, planning from afar) into a cheap 1080p HDMI to USB-A capture card, and then into a USB-C port on the Mac.&lt;/p&gt;

&lt;h4 id=&quot;connectivity&quot;&gt;Connectivity&lt;/h4&gt;

&lt;p&gt;As part of planning this without visiting the venue, I had to worry about internet connectivity. The venue did have &lt;a href=&quot;https://en.wikipedia.org/wiki/Captive_portal&quot; target=&quot;_blank&quot;&gt;captive-portal free Wi-Fi&lt;/a&gt;, but that seemed far too risky for something we’d leave running unattended for a few hours. We reached for a large 4G Modem my father had acquired in 2020 for working from home, and walked into a local supermarket to pick up an &lt;a href=&quot;https://www.amaysim.com.au/&quot; target=&quot;_blank&quot;&gt;Amaysim&lt;/a&gt; SIM card. It is always interesting that the way to get the most data for the cheapest price is to just pay for prepaid month of a normal phone plan, not to get a data only plan.&lt;/p&gt;

&lt;p&gt;In the week leading up to the wedding I ran multiple tests broadcasts over the 4G modem, measuring to ensure both latency/speed was ok, and to see how much data was being used—so I could buy a larger plan if needed. Ultimately, we used very little data and the original plan covered all the tests and the main event.&lt;/p&gt;

&lt;h4 id=&quot;streaming-services&quot;&gt;Streaming services&lt;/h4&gt;

&lt;p&gt;I wanted our livestream to be both private but also very easy for folks to access. Since this whole thing was also a bit of a hobbyest project in live video production (&lt;em&gt;obviously&lt;/em&gt;, if you couldn’t tell), I did explore all sorts of self hosting and &lt;a href=&quot;https://developers.cloudflare.com/stream/stream-live/&quot; target=&quot;_blank&quot;&gt;Cloudflare’s products&lt;/a&gt;; various ideas around stream to one place and then simulcast to multiple platforms without consuming additional local bandwidth.&lt;/p&gt;

&lt;p&gt;As the wedding approached and my need to have this work unmonitored surpassed my desire to build something bespoke, I started closing in on Amazon’s Twitch and YouTube. I picked YouTube as most of the key viewers are on the older side and likely never used Twitch, plus I have a very old YouTube channel which granted me access not generally available immediately upon account creation.&lt;/p&gt;

&lt;p&gt;While I created a lot of test streams and used those before the day, I also set up the actual one early so I could start sending it to people. This allowed them to register to be notified when the stream went live. This is another nice feature of the YouTube setup over competing platforms.&lt;/p&gt;

&lt;h4 id=&quot;local-software&quot;&gt;Local software&lt;/h4&gt;

&lt;p&gt;To send video to YouTube you can use their website in a Chromium-based browser, but I wanted more control so reached for the &lt;a href=&quot;https://obsproject.com&quot; target=&quot;_blank&quot;&gt;Open Broadcasting Software&lt;/a&gt; project (OBS—not to be confused with the &lt;a href=&quot;https://www.obs.tv/home&quot; target=&quot;_blank&quot;&gt;Olympic Broadcasting Services&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;OBS allowed me to configure YouTube as a stream destination along with the filesystem (so I’d have a saved copy on disk). As mentioned in the &lt;a href=&quot;#camera&quot;&gt;camera&lt;/a&gt; section, we needed to deal with the F-Log footage. OBS allowed applying a &lt;a href=&quot;https://en.wikipedia.org/wiki/Lookup_table&quot; target=&quot;_blank&quot;&gt;LUT&lt;/a&gt; in realtime, so I was able to load in one of the &lt;a href=&quot;https://www.fujifilm-x.com/en-au/support/download/lut/#x-mirrorless-digital-camera&quot; target=&quot;_blank&quot;&gt;default Fuji LUTs&lt;/a&gt; to get back to a presentable image.&lt;/p&gt;

&lt;p&gt;I set up two scenes, one for the video stream and one with a slideshow that I could play for the hour beforehand as a preshow. The slideshow included photos of Tommaso and I over the years, the timestamp of the ceremony, and had some royalty free jazz playing in the background (I ran multiple test streams of just the preshow to ensure it wouldn’t get flagged by &lt;a href=&quot;https://en.wikipedia.org/wiki/Content_ID&quot; target=&quot;_blank&quot;&gt;ContentID&lt;/a&gt; and kill the stream.)&lt;/p&gt;

&lt;p&gt;I could then just use the OBS scene transition tool (I set a long fade on the transition) right before the ceremony. Which brings us to &lt;a href=&quot;#running-the-show&quot;&gt;running the show&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wedding-livestream/IMG_5593.webp&quot; class=&quot;extrawide&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;running-the-show&quot;&gt;Running the Show&lt;/h2&gt;

&lt;p&gt;We got access to the room from 1pm onwards on the day, with the ceremony starting at 3pm-ish. At that time we went up and set up the cameras, WiFi, laptop, and power all on a small bar table in the corner.&lt;/p&gt;

&lt;p&gt;At 2:30 when we got up to the room before the ceremony, I started the stream on OBS to the preconfigured YouTube stream, which kicked off the preshow slideshow. I started recording on the Insta 360.&lt;/p&gt;

&lt;p&gt;As we suited up, we plugged in the microphone packs, but left them turned off. We also attached a microphone to our celebrant, we left that one running as we didn’t expect someone else to have to participate in this charade.&lt;/p&gt;

&lt;p&gt;Closer to 3pm Tommaso started the main FujiFilm cameras up, and hit record on them while the slideshow continued. At this time I opened YouTube on my phone and confirmed that I could both see the slideshow and hear the music—this also gave me an opportunity to see some live comments from folks around the world.&lt;/p&gt;

&lt;p&gt;After everyone was seated, and just before our mothers and we left to begin the processional, we turned on our microphones, I hit scene transition and walked away…&lt;/p&gt;

&lt;h2 id=&quot;it-all-worked&quot;&gt;It All Worked&lt;/h2&gt;

&lt;p&gt;We received many photos of our friends and families (and their pets) watching at all different times of day on their TVs and iPads around the world. To get to include people in our very small wedding in Sydney made all the effort worth it.&lt;/p&gt;

&lt;p&gt;During the marriage certificate signing, Tommaso and I had prearranged to turn off our microphones, this allowed us to confer quietly without anyone hearing. I’m so glad we did that.&lt;/p&gt;

&lt;p&gt;There was a rainbow during the ceremony, unfortunately the stream camera didn’t pick it up, but having a wider angled 2nd camera and the &lt;em&gt;very&lt;/em&gt; wide Insta 360 means that we still have that footage.&lt;/p&gt;

&lt;p&gt;Right after the ceremony I hit scene transition again, sending the folks at home back to the slideshow. When I got a moment to catch my breath during photographs (proverbially, I don’t think I actually caught my breath until we sat down for dinner) I ended the stream formally on OBS and closed my laptop lid. We turned off the FujiFilm cameras at that time too, the Insta 360 ran until its battery died, so I have a few hours of that day.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;When I get the time I want to properly edit the video, but hey it’s been more than a year and I’m only writing this up now.&lt;/em&gt; It takes some coordination and planning but I’m really really really glad we have incredibly high quality videos of our ceremony, and managed to beam it around the world live all for what wasn’t that much effort in the grand scheme of a wedding. If you have more than 18 people at your wedding, maybe ask a friend to do the on the day stuff though…&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/wedding-livestream/IMG_5598.webp&quot; class=&quot;extrawide&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;This is another of my favourite FujiFilm features: adding on the battery grip doesn’t double your capacity but triples it! Unlike battery grips I’ve used in the past on Canon et al. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/wedding-livestreaming&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sat, 08 Aug 2026 12:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/wedding-livestreaming</link>
				<guid isPermaLink="true">https://patmurray.co/words/wedding-livestreaming</guid>
			</item>
			
		
			
			<item>
				<title>Husbands</title>
					<description>
						&lt;p&gt;Fun Fact™, you can just marry your best friend!&lt;/p&gt;

&lt;p&gt;I’m thrilled to share that &lt;a href=&quot;https://tomma.so&quot;&gt;Tommaso&lt;/a&gt; and I got married on 27 July 2025! We had a beautiful, intimate ceremony with just family at the Gili Rooftop at Taronga Zoo in Sydney, with the stunning backdrop of Sydney Harbour and the Sydney Harbour Bridge.&lt;/p&gt;

&lt;p&gt;I’m so excited to embark on this new chapter with my best friend, partner, &lt;em&gt;and now&lt;/em&gt; husband.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;With you is where I belong, because with you is where I am most happy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/images/married.avif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a screenshot from our &lt;a href=&quot;/words/wedding-livestreaming/&quot;&gt;live stream&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/married&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sat, 09 Aug 2025 12:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/married</link>
				<guid isPermaLink="true">https://patmurray.co/words/married</guid>
			</item>
			
		
			
			<item>
				<title>Tools for Last-Minute Solar Eclipse Cloud Avoidance Planning</title>
					<description>
						&lt;p&gt;If—like me—you put your money on Texas being the clearest sky for April 8th total eclipse and are now sad that &lt;a href=&quot;https://www.washingtonpost.com/weather/2024/03/29/cloud-cover-eclipse-forecast-maps-cities/&quot;&gt;may not be true&lt;/a&gt;, here is a few webpages I plan on using to try and avoid the clouds as best we can:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://xkcd.com/2915/&quot;&gt;&lt;img src=&quot;https://imgs.xkcd.com/comics/eclipse_clouds.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;noaa-goes-east&quot;&gt;NOAA GOES-East&lt;/h1&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.star.nesdis.noaa.gov/GOES/sector_band.php?sat=G16&amp;amp;sector=sp&amp;amp;band=DayNightCloudMicroCombo&amp;amp;length=24&quot;&gt;Day Cloud Phase / Night Microphysics&lt;/a&gt;
&lt;img src=&quot;/images/20240971656_GOES16-ABI-sp-DayNightCloudMicroCombo-600x600.jpg&quot; style=&quot;max-width: 300px&quot; /&gt; &lt;br /&gt;
This updates every 5 minutes and shows various types of clouds as false colour so you can understand what is above you. Some types of clouds (higher ones) have much less impact on eclipse visibility
    &lt;blockquote&gt;
      &lt;p&gt;1 - Low level clouds with water droplets (cyan, lavender)&lt;br /&gt;
2 - Glaciating clouds (green)&lt;br /&gt;
3 - Snow (shades of green)&lt;br /&gt;
4 - Thick high level clouds with ice particles (yellow)&lt;br /&gt;
5 - Thin mid level clouds with water droplets (magenta)&lt;br /&gt;
6 - Thin high-level clouds with ice particles (red-orange)&lt;br /&gt;
7 - Land surface (shades of blue)&lt;br /&gt;
8 - Water surface (black)&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.star.nesdis.noaa.gov/GOES/conus_band.php?sat=G16&amp;amp;band=GEOCOLOR&amp;amp;length=24&amp;amp;dim=1&quot;&gt;CONUS - GeoColor&lt;/a&gt;
&lt;img src=&quot;/images/20240971751_GOES16-ABI-CONUS-GEOCOLOR-1250x750.jpg&quot; style=&quot;max-width: 300px&quot; /&gt; &lt;br /&gt;
This also updates every 5 minutes providing a “True Color” view of the path of totality. It can be useful to see what is coming, this view also allows toggling on a path of totality overlay right now—which is useful to &lt;a href=&quot;https://xkcd.com/2914/&quot;&gt;planning you don’t leave the path&lt;/a&gt;. You will be able to see the shadow of the eclipse in this view as it passes over the the earth—albeit at five minute intervals.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.star.nesdis.noaa.gov/GOES/meso_band.php?sat=G16&amp;amp;lat=34N&amp;amp;lon=102W&amp;amp;band=GEOCOLOR&amp;amp;length=30&quot;&gt;Mesoscale view - GeoColor&lt;/a&gt;
&lt;img src=&quot;/images/2024097173825_GOES16-ABI-MESO-GEOCOLOR-34N-102W-1000x1000.jpg&quot; style=&quot;max-width: 300px&quot; /&gt;&lt;br /&gt;
&lt;strong&gt;This updates every minute&lt;/strong&gt; making it very useful for realtime planning on the day, you will be able to see the shadow of the eclipse changing every minute. You will also be able to see the clouds changing every minute.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;windy&quot;&gt;Windy&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://www.windy.com/?2024040818,30.074,-97.592,7&quot;&gt;Windy&lt;/a&gt; shows the current direction and speed of wind in realtime, which is very useful when combined with maps of clouds to try and guess where the clouds might be going and how to avoid them.&lt;/p&gt;

&lt;h1 id=&quot;ventusky&quot;&gt;Ventusky&lt;/h1&gt;
&lt;p&gt;A friend also sent me &lt;a href=&quot;http://ventusky.com&quot;&gt;Ventusky&lt;/a&gt; which is very similar to Windy, but is predicting slightly different cloud coverage right now. &lt;a href=&quot;https://en.wikipedia.org/wiki/Segal%27s_law&quot;&gt;Segal’s Law&lt;/a&gt; etc etc&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;This post was previously titled “Some Resources for Last Minute Eclipse Cloud Planning” but it sounded too much like SEO spam for &lt;a href=&quot;https://ecdtools.eclipse.org&quot;&gt;Eclipse Cloud&lt;/a&gt;&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/eclipse-planning-2024&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sat, 06 Apr 2024 12:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/eclipse-planning-2024</link>
				<guid isPermaLink="true">https://patmurray.co/words/eclipse-planning-2024</guid>
			</item>
			
		
			
			<item>
				<title>Photos of 2022</title>
					<description>
						&lt;p&gt;From my first SF Pride, multiple Tahoe ski trips, flying a sea plane over Seattle, visiting old friends in DC, seeing family Philadelphia, dangling my feet out of a helicopter over NYC, exploring Los Angeles, hanging with rhinos in San Diego, paddle boarding in Maui, seeing countless live concerts, making new friends, and catching as many sunsets as time would allow, 2022 was a pretty good year. Too many things happened, but here’s eighty odd photos (and one selfie) from my year. See you in the next one 🧡&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.3238380809595203) / 0.667) * 0.8)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 1 of 86.jpeg&quot; data-ratio=&quot;0.8&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.3238380809595203) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 2 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.3238380809595203) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 3 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.0666666666666664) / 0.75) * 0.8)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 4 of 86.jpeg&quot; data-ratio=&quot;0.8&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.0666666666666664) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 6 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 5 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 7 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4.24887556221889) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 8 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4.24887556221889) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 9 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4.24887556221889) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 10 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4.24887556221889) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 12 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 11 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 13 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 14 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 15 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.1234382808595695) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 16 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.1234382808595695) / 0.667) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 17 of 86.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.1234382808595695) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 18 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 19 of 86.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 20 of 86.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.069767441860465) / 0.645) * 0.645)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 21 of 86.jpeg&quot; data-ratio=&quot;0.645&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.069767441860465) / 0.645) * 0.668)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 23 of 86.jpeg&quot; data-ratio=&quot;0.668&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.069767441860465) / 0.645) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 24 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.247751686375702) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 25 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.247751686375702) / 0.667) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 26 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.247751686375702) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 27 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.247751686375702) / 0.667) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 28 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.247751686375702) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 29 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.247751686375702) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 30 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 0 *  var(--photoset-margin-amount, 0.25rem)) / 1) / 1.4992503748125936) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 31 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 22 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 32 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 5.495503372751405) / 0.667) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 33 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 5.495503372751405) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 34 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 5.495503372751405) / 0.667) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 35 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 36 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 37 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 38 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 39 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.762960492997649) / 0.598) * 0.598)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 40 of 86.jpeg&quot; data-ratio=&quot;0.598&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.762960492997649) / 0.598) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 41 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.762960492997649) / 0.598) * 0.751)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 42 of 86.jpeg&quot; data-ratio=&quot;0.751&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.2488755622188905) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 43 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.2488755622188905) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 44 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.2488755622188905) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 45 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.1994002998500752) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 46 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.1994002998500752) / 0.667) * 0.8)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 47 of 86.jpeg&quot; data-ratio=&quot;0.8&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 0 *  var(--photoset-margin-amount, 0.25rem)) / 1) / 1.4992503748125936) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 48 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 49 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 50 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 51 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 0 *  var(--photoset-margin-amount, 0.25rem)) / 1) / 1.4992503748125936) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 52 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.124437781109445) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 53 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.124437781109445) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 54 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.124437781109445) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 55 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 0 *  var(--photoset-margin-amount, 0.25rem)) / 1) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 56 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.447151986225777) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 59 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.447151986225777) / 0.667) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 58 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.447151986225777) / 0.667) * 0.8)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 57 of 86.jpeg&quot; data-ratio=&quot;0.8&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.24887556221889) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 60 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.24887556221889) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 61 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.24887556221889) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 64 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 62 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 63 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.24887556221889) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 66 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.24887556221889) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 67 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.24887556221889) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 65 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 68 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 69 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 70 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 6 *  var(--photoset-margin-amount, 0.25rem)) / 4) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 71 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 73 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 72 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 74 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 0 *  var(--photoset-margin-amount, 0.25rem)) / 1) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 75 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 3.2477516863757026) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 77 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 3.2477516863757026) / 0.667) * 1.4992503748125936)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 76 of 86.jpeg&quot; data-ratio=&quot;1.4992503748125936&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.1234382808595695) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 78 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.1234382808595695) / 0.667) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 79 of 86.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.1234382808595695) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 80 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 8 *  var(--photoset-margin-amount, 0.25rem)) / 5.24887556221889) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 81 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 8 *  var(--photoset-margin-amount, 0.25rem)) / 5.24887556221889) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 82 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 8 *  var(--photoset-margin-amount, 0.25rem)) / 5.24887556221889) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 83 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 8 *  var(--photoset-margin-amount, 0.25rem)) / 5.24887556221889) / 0.667) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 84 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 8 *  var(--photoset-margin-amount, 0.25rem)) / 5.24887556221889) / 0.667) * 0.667)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 85 of 86.jpeg&quot; data-ratio=&quot;0.667&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 0 *  var(--photoset-margin-amount, 0.25rem)) / 1) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2022/2022 - 86 of 86.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;


						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/2022&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sat, 14 Jan 2023 10:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/2022</link>
				<guid isPermaLink="true">https://patmurray.co/words/2022</guid>
			</item>
			
		
			
			<item>
				<title>Memories of 2021</title>
					<description>
						&lt;p&gt;To start off another annual review saying something like “this year was interesting”, or “different”,
feels a bit redundent—I think they all are now. Having said that, 2021 did offer some rather, novel
experiences to say the least.&lt;/p&gt;

&lt;p&gt;In March, I spent 14 days in a single hotel room under government quarantine detainment after arriving
in Sydney to attend my brother’s wedding (and renew my US visa.) In August, I spent 14 days—&lt;em&gt;this feels like a trend&lt;/em&gt;—
in Maui, HI working in the mornings and enjoying the sun in the afternoons. In November, I visited London with some friends,
mostly just to get away, and to see my UK friends. All before ending the year with a “surprise”—that had to be less surprising
thanks to the ever changing state of the world—visit back to Sydney to see my family for the holidays.&lt;/p&gt;

&lt;p&gt;I took &lt;em&gt;two&lt;/em&gt; doors &lt;em&gt;off&lt;/em&gt; helicopter rides, taking about 4,000 photos between them—some of said photos are below. Which seems like a perfect
segue into this years annual review: Memories. Below is a series of Memories I made in Apple’s Photos app, along with a gallery of photos.
Some months have &lt;em&gt;a lot&lt;/em&gt; more than others.&lt;/p&gt;

&lt;p&gt;Enjoy! And I hope you have a good 2022&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2020-annual/signature.png&quot; style=&quot;max-width: 120px; margin-left: 0;&quot; /&gt;&lt;/p&gt;

&lt;style&gt;
    :root {
    --shadow-color: 0deg 0% 60%;
    --shadow-elevation-low:
        0px 0.5px 0.6px hsl(var(--shadow-color) / 0.34),
        0px 0.8px 0.9px -1.2px hsl(var(--shadow-color) / 0.34),
        0px 2px 2.3px -2.5px hsl(var(--shadow-color) / 0.34);
    --shadow-elevation-medium:
        0px 0.5px 0.6px hsl(var(--shadow-color) / 0.36),
        0px 1.6px 1.8px -0.8px hsl(var(--shadow-color) / 0.36),
        0px 4.1px 4.6px -1.7px hsl(var(--shadow-color) / 0.36),
        0px 9.9px 11.1px -2.5px hsl(var(--shadow-color) / 0.36);
    --shadow-elevation-high:
        0px 0.5px 0.6px hsl(var(--shadow-color) / 0.34),
        0px 2.9px 3.3px -0.4px hsl(var(--shadow-color) / 0.34),
        0px 5.4px 6.1px -0.7px hsl(var(--shadow-color) / 0.34),
        0px 8.9px 10px -1.1px hsl(var(--shadow-color) / 0.34),
        0px 14.2px 16px -1.4px hsl(var(--shadow-color) / 0.34),
        0px 22.2px 25px -1.8px hsl(var(--shadow-color) / 0.34),
        0.1px 33.7px 37.9px -2.1px hsl(var(--shadow-color) / 0.34),
        0.1px 49.7px 55.9px -2.5px hsl(var(--shadow-color) / 0.34);
    }

    video {
        width: 100%;
        border-radius: 18px;
        object-fit: cover;
        height: 100%;
    }


    .video-container {
        /* margin: auto; */
        box-shadow: var(--shadow-elevation-medium);
        border-radius: 18px;
        overflow: hidden;
        width: 280px;
        height: 373px;      
        margin-bottom: 2em;
        position: relative;
        cursor: pointer;
        scroll-snap-align: start;
        background: #D85F46;

    }

    .text-item {
         box-shadow: var(--shadow-elevation-medium);
        border-radius: 18px;
        width: 280px;
        height: 373px;     
        margin-bottom: 2em;
        display: block;
        overflow: hidden;
        scroll-snap-align: start;
        position: relative;
        padding: 20px;
        box-sizing: border-box;
        font-size: 16px;
        background: #D85F46;
        color: white;
        text-align: left;
    }

    .text-item h4, .text-item h1, .text-item h2, .text-item h3, .text-item h5 {
        font-size: 18px;
        margin: 0;
        margin-bottom: 1em;
        color: white;
    }

    .text-item p {
        line-height: unset;
        text-align: left;
    }

    .image-item {
        box-shadow: var(--shadow-elevation-medium);
        border-radius: 18px;
        width: 280px;
        height: 373px;     
        margin-bottom: 2em;
        display: block;
        overflow: hidden;
        scroll-snap-align: start;
        cursor: pointer;
        cursor: -moz-zoom-in;
        cursor: -webkit-zoom-in;
        cursor: zoom-in;
        position: relative;
        background: #D85F46;

    }

    .image-item .caption {
        position: absolute;
        top: 0;
        left: 0;
        font-size: small;
        font-weight: 600;
        -webkit-backdrop-filter: blur(10px);
        width: 100%;
        min-height: 50px;
        padding: 15px;
        padding-right: 35px;
        box-sizing: border-box;
        border-radius: 18px 18px 0 0;
        color: #f6f6f6;
    }

    .image-item .info-button {
        position: absolute;
        height: 15px;
        width: 15px;
        top: 15px;
        right: 15px;
        color: white;
    }

    .image-item img {
        margin: unset; 
        object-fit: cover;
        width: 100%;
        height: 100%;
    }

    .playbtn {
        position: absolute;
        left: calc(50% - 24px);
        bottom: calc(50% - 24px);
        pointer-events: none; 
        transform: scale(1); 
        opacity: 1;
        z-index: 9;
    }

    .playing .playbtn {
        display: none;
    }

    .video-container:hover .playbtn {
         transform: scale(1.1); 
    }

    .progress {
        position: absolute;
        bottom: 1.5em;
        border-radius: 3px;
        background: rgba(52,59,64,.5);
        width: calc(100% - 3em);
        left: 1.5em;
        height: 3px;
        overflow: hidden;
        display: none;
    }

    .playing .progress {
        display: block;
        z-index: 9;
    }

    .playbar {
        display: block;
        height: 3px;
        border-radius: 5px;
        background: #fff;
        width: 0%;
        position: absolute;
        top: 0;
        left: 0;
    }

    .progress_line {
        background: rgba(255,255,255,.4);
        border-radius: 3px;
        width: 3px;
        height: 3px;
    }

    .universal-controls {
        position: fixed;
        bottom: 0;
        left: 0;
        z-index: 999;
        margin: 2em;
        color: #D85F46;
        display: none;
    }

    .video-playing .universal-controls {
        display: block;
    }

    @media (max-width: 680px) {
         .universal-controls {
             margin: 18px;
         }
    }

    .universal-controls&gt;button {
        width: 50px;
        height: 50px;
        border-radius: 50%;
        background: unset;
        border: unset;
        color: #D85F46;
        cursor: pointer;
    }

    .month.scrollcontainer.fullwidth {
        overflow: scroll;
        will-change: transform;
        scroll-snap-type: x mandatory;
        box-shadow: unset;
    }

    .month.scrollcontainer.fullwidth::-webkit-scrollbar {
        display: none;
    }

    .inner-grid {
        display: grid; 
        grid-gap: 15px;
        grid-auto-flow: column;
        width: fit-content;
    }

    @media (max-width: 680px) {
        .inner-grid {
            padding-left: 18px;
            padding-right: 18px;
        }
        .month.scrollcontainer.fullwidth { 
            scroll-padding: 0 18px;
        }
    }

    @media (min-width: 680px) { 
        .inner-grid {
            padding-left: calc((100vw - 640px)/ 2);
            padding-right: calc((100vw - 640px)/ 2);
        }
        .month.scrollcontainer.fullwidth { 
            scroll-padding: 0 calc((100vw - 640px)/ 2);
        }
    }

    .month-header {
        display: flex;
        align-items: center;
        margin-bottom: 15px;
        justify-content: space-between;
    }

    .month-header h2 {
        margin: 0;
        display: block;
    }

    .nav-button {
        width: 40px;
        height: 40px;
        border-radius: 50%;
        background: unset;
        border: unset;
        cursor: pointer;
        color: #D85F46;
    }
&lt;/style&gt;

&lt;div class=&quot;universal-controls&quot;&gt;
    &lt;button onclick=&quot;pauseAll();&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;far&quot; data-icon=&quot;pause-circle&quot; class=&quot;svg-inline--fa fa-pause-circle fa-w-16&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;January&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;1&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;1&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-1&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-January-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/january.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-January-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/january.mp4_hls/poster.gif&quot; data-name=&quot;january&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/DSCF3070.jpg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/DSCF3104.jpg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4041.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4197.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4213.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4716.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4754.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4755.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4858.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4884.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4951.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_4997.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    &lt;span class=&quot;caption&quot;&gt;Baking with my gradma and brother in Australia&lt;/span&gt;
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_5071.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/jan/IMG_5290.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;February&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;2&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;2&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-2&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-February-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/february.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-February-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/february.mp4_hls/poster.gif&quot; data-name=&quot;february&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/feb/A674E3F0-284A-4849-B4D0-5E6994ED1F36.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/feb/DSCF2196.jpg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;








&lt;div class=&quot;text-item&quot;&gt;
    &lt;h1 id=&quot;a-bit-lonely&quot;&gt;A Bit Lonely&lt;/h1&gt;

&lt;p&gt;I definitely found February the most lonely month of 2021.&lt;/p&gt;

&lt;p&gt;I did a lot of exploring of the Bay Area with my new car, and took many photos of the coast.&lt;/p&gt;

&lt;/div&gt;








&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/feb/IMG_5464.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/feb/IMG_5861.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/feb/IMG_5916.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/feb/IMG_6061.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/feb/IMG_6340.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/feb/DSCF3240.jpg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/feb/sf_21.jpg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;








&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-February-11&apos;);&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-February-11&quot; src=&quot;/images/2021-annual/feb/video_1_6da0b0094dec4eb28121a08e95da5136.mp4#0.1&quot;&gt;&lt;/video&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;March&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;3&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;3&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-3&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-March-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/march.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-March-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/march.mp4_hls/poster.gif&quot; data-name=&quot;march&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;








&lt;div class=&quot;text-item&quot;&gt;
    &lt;h1 id=&quot;off-to-sydney&quot;&gt;Off to Sydney&lt;/h1&gt;

&lt;p&gt;In early March, I drove from the Bay Area to LAX, then flew to Sydney (via New Zealand), before being put into 14 days of mandatory quarantine detainment. I think I handled it extremely well, but never want to do it again.&lt;/p&gt;

&lt;/div&gt;








&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/march/IMG_6606.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;








&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-March-3&apos;);&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-March-3&quot; src=&quot;/images/2021-annual/march/IMG_7146.MOV#0.1&quot;&gt;&lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/march/IMG_6668.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/march/0C4257CF-A6D5-45EE-9705-2FFAAD372206-43066-00000796608F871F.jpg&quot; class=&quot;lazyload&quot; /&gt;
    &lt;span class=&quot;caption&quot;&gt;We found the perfect spot to see people on the street from my window&lt;/span&gt;
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/march/IMG_6857.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/march/IMG_7064.JPG&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/march/IMG_7108.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/march/IMG_7114.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/march/IMG_7116.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/march/IMG_7136.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;April&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;4&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;4&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-4&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-April-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/april.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-April-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/april.mp4_hls/poster.gif&quot; data-name=&quot;april&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_5.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_6.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_8.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;








&lt;div class=&quot;text-item&quot;&gt;
    &lt;h1 id=&quot;birthday&quot;&gt;Birthday&lt;/h1&gt;

&lt;p&gt;It was really lovely to be able to celebrate my birthday with some old friends under the Sydney Harbour Bridge and Opera House, considering how &lt;em&gt;last year’s&lt;/em&gt; birthday was…&lt;/p&gt;

&lt;/div&gt;








&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_9.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;








&lt;div class=&quot;text-item&quot;&gt;
    &lt;h1 id=&quot;jaime--simons-wedding&quot;&gt;Jaime &amp;amp; Simon’s Wedding&lt;/h1&gt;

&lt;p&gt;The day after my Birthday was my brother’s wedding, where I had the honour of being best man. It was a gorgeous day, and I think we looked pretty great in those suits!&lt;/p&gt;

&lt;/div&gt;








&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_10.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_11.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_12.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_13.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_14.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_15.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_16.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_17.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/april/apr_1.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    &lt;span class=&quot;caption&quot;&gt;Getting Vaxxed!&lt;/span&gt;
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;May&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;5&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;5&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-5&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-May-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/may.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-May-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/may.mp4_hls/poster.gif&quot; data-name=&quot;may&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/may/may_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/may/may_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/may/may_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/may/may_5.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;








&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-May-5&apos;);&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-May-5&quot; src=&quot;/images/2021-annual/may/may_6.mov#0.1&quot;&gt;&lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/may/may_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;June&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;6&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;6&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-6&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-June-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/june.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-June-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/june.mp4_hls/poster.gif&quot; data-name=&quot;june&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_1.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_5.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    &lt;span class=&quot;caption&quot;&gt;We got lost trying to find WWDC&lt;/span&gt;
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_6.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_8.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_9.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/june/june_10.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;July&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;7&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;7&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-7&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-July-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/july.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-July-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/july.mp4_hls/poster.gif&quot; data-name=&quot;july&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_1.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_5.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_6.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    &lt;span class=&quot;caption&quot;&gt;My first &quot;real&quot; July 4th&lt;/span&gt;
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_8.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_9.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/july/july_10.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;Yosemite (July)&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;8&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;8&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-8&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-Yosemite (July)-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/yosemite.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-Yosemite (July)-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/yosemite.mp4_hls/poster.gif&quot; data-name=&quot;yosemite&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_1.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_5.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    &lt;span class=&quot;caption&quot;&gt;It was 109ºF (43ºC)...&lt;/span&gt;
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_6.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_8.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_9.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/yosemite/yosemite_10.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;August&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;9&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;9&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-9&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-August-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/august.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-August-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/august.mp4_hls/poster.gif&quot; data-name=&quot;august&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;Maui (August)&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;10&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;10&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-10&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-Maui (August)-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/maui.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-Maui (August)-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/maui.mp4_hls/poster.gif&quot; data-name=&quot;maui&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;








&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-Maui (August)-1&apos;);&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-Maui (August)-1&quot; src=&quot;/images/2021-annual/maui/maui_1.mov#0.1&quot;&gt;&lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_5.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_6.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_8.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_9.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_10.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_11.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/maui/maui_12.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;








&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-Maui (August)-13&apos;);&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-Maui (August)-13&quot; src=&quot;/images/2021-annual/maui/maui_13.mov#0.1&quot;&gt;&lt;/video&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;September&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;11&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;11&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-11&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-September-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/september.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-September-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/september.mp4_hls/poster.gif&quot; data-name=&quot;september&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/september/sept_1.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    &lt;span class=&quot;caption&quot;&gt;Someone let me drive a 20ft truck on the 101??&lt;/span&gt;
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/september/sept_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/september/sept_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/september/sept_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/september/sept_5.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/september/sept_6.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/september/sept_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;October&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;12&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;12&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-12&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-October-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/october.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-October-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/october.mp4_hls/poster.gif&quot; data-name=&quot;october&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_1.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_5.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_6.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_8.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_9.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    &lt;span class=&quot;caption&quot;&gt;Bleachers!&lt;/span&gt;
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/october/oct_10.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;November&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;13&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;13&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-13&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-November-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/november.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-November-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/november.mp4_hls/poster.gif&quot; data-name=&quot;november&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_1.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_5.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;








&lt;div class=&quot;text-item&quot;&gt;
    &lt;h1 id=&quot;trip-to-london&quot;&gt;Trip to London&lt;/h1&gt;

&lt;p&gt;For Thanksgiving week, a couple friends and I travelled over to London in an attempt at getting away from the Bay Area (once again.) It was a lovely trip of sight seeing, and catching up with old friends.&lt;/p&gt;

&lt;/div&gt;








&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_6.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_8.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_9.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_10.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_11.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_12.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_13.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_14.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_15.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_16.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_17.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_18.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_19.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_20.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_21.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_22.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_23.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/november/nov_24.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;div class=&quot;month-header&quot;&gt;
    &lt;h2&gt;December&lt;/h2&gt;
    &lt;div&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;previousImage(&apos;14&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-left&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zM256 472c-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216zm-86.6-224.5l115.1-115c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L209 256l99.5 99.5c4.7 4.7 4.7 12.3 0 17l-7.1 7.1c-4.7 4.7-12.3 4.7-17 0l-115.1-115c-4.6-4.8-4.6-12.4.1-17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
        &lt;button class=&quot;nav-button&quot; onclick=&quot;nextImage(&apos;14&apos;)&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; data-prefix=&quot;fal&quot; data-icon=&quot;chevron-circle-right&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zM256 40c118.7 0 216 96.1 216 216 0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216zm86.6 224.5l-115.1 115c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L303 256l-99.5-99.5c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l115.1 115c4.6 4.8 4.6 12.4-.1 17.1z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;month fullwidth scrollcontainer&quot; id=&quot;scroll-container-14&quot;&gt;
&lt;div class=&quot;inner-grid&quot;&gt;






&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-December-0&apos;);&quot; style=&quot;background-image: url(&apos;https://patmurray.co/static-patmurray-co/2021/december.mp4_hls/poster.jpg&apos;); background-position: center; background-size: cover;&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-December-0&quot; poster=&quot;https://patmurray.co/static-patmurray-co/2021/december.mp4_hls/poster.gif&quot; data-name=&quot;december&quot;&gt;
    &lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_1.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_2.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_3.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_4.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;








&lt;div class=&quot;video-container&quot; onclick=&quot;playVideo(&apos;video-December-5&apos;);&quot;&gt;
    &lt;svg class=&quot;playbtn&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;48&quot; height=&quot;48&quot; viewBox=&quot;0 0 48 48&quot; fill=&quot;#fff&quot;&gt;&lt;path d=&quot;M0 0h48v48H0z&quot; fill=&quot;none&quot;&gt;&lt;/path&gt;&lt;circle cx=&quot;24&quot; cy=&quot;24&quot; r=&quot;14&quot; fill=&quot;#D85F46&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm-4 29V15l12 9-12 9z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
    &lt;div class=&quot;progress&quot;&gt;
        &lt;div class=&quot;playbar&quot; style=&quot;width: 60.7%;&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;progress_line&quot; style=&quot;width: 100%;&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;video playsinline=&quot;&quot; preload=&quot;auto&quot; id=&quot;video-December-5&quot; src=&quot;/images/2021-annual/december/dec_5.mov#0.1&quot;&gt;&lt;/video&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_6.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_7.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_8.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_9.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_10.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_11.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_12.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_13.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_14.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_15.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_16.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;div class=&quot;image-item&quot;&gt;
    &lt;img onclick=&quot;displayLightBox(this)&quot; data-src=&quot;/images/2021-annual/december/dec_17.jpeg&quot; class=&quot;lazyload&quot; /&gt;
    
    &lt;div class=&quot;info-button&quot;&gt;
        &lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; role=&quot;img&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 448 512&quot;&gt;
            &lt;path fill=&quot;currentColor&quot; d=&quot;M447.7 364l.3 104c0 6.6-5.4 12-12 12l-104-.3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l58 .3.7-.7L224 278.6 57.3 445.3l.7.7 58-.3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L12 480c-6.6 0-12-5.4-12-12l.3-104c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12l-.3 58 .7.7L201.4 256 34.7 89.3l-.7.7.3 58c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12L0 44c0-6.6 5.4-12 12-12l104 .3c6.6 0 12 5.4 12 12v10c0 6.6-5.4 12-12 12L58 66l-.7.7L224 233.4 390.7 66.7l-.7-.7-58 .3c-6.6 0-12-5.4-12-12v-10c0-6.6 5.4-12 12-12l104-.3c6.6 0 12 5.4 12 12l-.3 104c0 6.6-5.4 12-12 12h-10c-6.6 0-12-5.4-12-12l.3-58-.7-.7L246.6 256l166.7 166.7.7-.7-.3-58c0-6.6 5.4-12 12-12h10c6.6 0 12 5.4 12 12z&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;/div&gt;



&lt;/div&gt;

&lt;script src=&quot;https://cdn.jsdelivr.net/npm/universalsmoothscroll@5.0.0/universalsmoothscroll-ease-functions-min.js&quot; integrity=&quot;sha256-eCnsdTWjKrEFyVTl2SCBg+EBqB9IJALKgme5MP625FY=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://cdn.jsdelivr.net/npm/universalsmoothscroll@5.0.0/universalsmoothscroll-min.js&quot; integrity=&quot;sha256-IqPIGT7RvWzXXDYRpTVf/zKiksCWB1iV0rtNBzfSiY4=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;/gallery/lazysizes.min.js&quot;&gt;&lt;/script&gt;

&lt;script&gt;

function nextImage(id) {
    const el = document.getElementById(`scroll-container-${id}`);
    uss.setXStepLengthCalculator((r) =&gt; {return r / 8 + 1;}, el);
    el.style.scrollSnapType = &quot;none&quot;;
    uss.scrollXBy(295,  el, () =&gt; {
        el.style.scrollSnapType = &quot;x mandatory&quot;;
    }, false);   
}

function previousImage(id) {
    const el = document.getElementById(`scroll-container-${id}`);
    uss.setXStepLengthCalculator((r) =&gt; {return r / 8 + 1;}, el);
    el.style.scrollSnapType = &quot;none&quot;;
    uss.scrollXBy(-295,  el, () =&gt; {
        el.style.scrollSnapType = &quot;x mandatory&quot;;
    }, false);  
}

function setUpVideo(video) {
    const playBar = video.parentElement.querySelectorAll(&quot;.progress .playbar&quot;)[0]
    let animationID;

    function progress_animation() {
        playBar.style.width = `${video.currentTime / video.duration * 100}%`;
        animationID = window.requestAnimationFrame(progress_animation);
    };

    video.addEventListener(&apos;play&apos;, (event) =&gt; {
        animationID = window.requestAnimationFrame(progress_animation);
        video.parentElement.classList.add(&quot;playing&quot;);
        document.body.classList.add(&quot;video-playing&quot;);
    });

    video.addEventListener(&apos;pause&apos;, (event) =&gt; {
        window.cancelAnimationFrame(animationID);    
    });

    video.addEventListener(&apos;stopped&apos;, (event) =&gt; {
        video.parentElement.classList.remove(&quot;playing&quot;);
        document.body.classList.remove(&quot;video-playing&quot;);
        window.cancelAnimationFrame(animationID);    
    });

    video.addEventListener(&apos;ended&apos;, (event) =&gt; {
        video.parentElement.classList.remove(&quot;playing&quot;);
        document.body.classList.remove(&quot;video-playing&quot;);
        window.cancelAnimationFrame(animationID);    
    });

    if (video.getAttribute(&quot;data-name&quot;)) {
        var videoSrc = `https://patmurray.co/static-patmurray-co/2021/${video.getAttribute(&quot;data-name&quot;)}.mp4_hls/playlist.m3u8`;
        if (video.canPlayType(&apos;application/vnd.apple.mpegurl&apos;)) {
            video.src = videoSrc;
        } else {
            if (Hls.isSupported()) {
                var hls = new Hls();
                hls.loadSource(videoSrc);
                hls.attachMedia(video);
            }
        }
    }
   
}


function pauseAll() {
    Array.from(document.querySelectorAll(&quot;video&quot;)).map((video) =&gt; {
        video.pause();
        video.parentElement.classList.remove(&quot;playing&quot;);
        document.body.classList.remove(&quot;video-playing&quot;);
    })
}

function playVideo(id) {
    const video = document.getElementById(id);
    if (!video.paused) {
        video.pause();
        video.parentElement.classList.remove(&quot;playing&quot;);
        document.body.classList.remove(&quot;video-playing&quot;);
        return;
    } 
    pauseAll();
    video.play();
}

window.addEventListener(&apos;DOMContentLoaded&apos;, (event) =&gt; {

    const testVideo = document.createElement(&quot;video&quot;);
    if (!testVideo.canPlayType(&apos;application/vnd.apple.mpegurl&apos;)) {
        var script = document.createElement(&apos;script&apos;);
        script.src = &quot;https://cdn.jsdelivr.net/npm/hls.js@latest&quot;;
        document.body.appendChild(script); //or something of the likes

        script.onload = function () {
            Array.from(document.querySelectorAll(&quot;video&quot;)).map((video) =&gt; {
                setUpVideo(video)
            })
        };
    } else {
        Array.from(document.querySelectorAll(&quot;video&quot;)).map((video) =&gt; {
            setUpVideo(video)
        })
    }

    
});



&lt;/script&gt;


						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/2021-annual-review&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Fri, 01 Apr 2022 10:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/2021-annual-review</link>
				<guid isPermaLink="true">https://patmurray.co/words/2021-annual-review</guid>
			</item>
			
		
			
			<item>
				<title>My Guide to Very Fluffy Pancakes</title>
					<description>
						&lt;p&gt;At the start of shelter in place in 2020, I started trying to make the fluffiest pancakes. Really tall, full, pancakes without any fancy tools.&lt;/p&gt;

&lt;p&gt;I started &lt;a href=&quot;https://twitter.com/_patmurray/status/1238883223926476801?s=20&quot;&gt;a twitter thread&lt;/a&gt; of them, and as such got lots of questions on how. So here’s three simple rules to follow to get better fluffier pancakes!&lt;/p&gt;

&lt;h2 id=&quot;lumps-are-your-friend&quot;&gt;Lumps are your friend&lt;/h2&gt;
&lt;p&gt;The enemy of rich fluffy pancakes is gluten. Gluten develops the more you mix (that’s why we knead bread dough). That’s why you want to do the bare minimum mixing when making pancakes. Sift your dry ingredients to help prevent clumping, but then once the wet are in there be ok with lumps. I also recommend using slightly &lt;em&gt;less&lt;/em&gt; wet ingredients than the recipe calls for (especially so with box mix), we’re making tall pancakes, not crepes. We’re going to help solve some of the lumps with…&lt;/p&gt;

&lt;h2 id=&quot;let-it-rest&quot;&gt;Let it rest&lt;/h2&gt;
&lt;p&gt;… letting the mixture rest for 10 (TEN) minutes. I know you want to eat immediately, but this step is important to let the flour fully hydrate and many of those lumps to resolve themselves. This is the time you get out the pan or skillet you’ll be cooking on and start to prepare it so you can cook…&lt;/p&gt;

&lt;h2 id=&quot;low-and-slow&quot;&gt;Low and slow&lt;/h2&gt;
&lt;p&gt;… low and slow! Put your burner on just below medium. I personally use a non-stick pan without any lubricant (I know, I know! But you can use butter if your pan needs some.) Use the ¼ cup measure to scoop out some mixture and pour it into the pan. Since your temperature isn’t too high, you have time to use the cup measure to push around the mixture into the shape you want.&lt;/p&gt;

&lt;h1 id=&quot;an-example&quot;&gt;An example&lt;/h1&gt;

&lt;p&gt;This is a recipe I’ve made a few times, most recently for my family on my trip back to Sydney, Australia.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/EyaSv_uU4AEmCUj.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/EyaSv_uVIAEJ-Mg.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
    td, th {
        padding-inline-end: 1em
    }
&lt;/style&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Quantity&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Measure&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Ingredient&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;eggs&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;¼&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;cup&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;oil&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;1 ½&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;cup&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;buttermilk&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;2&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;cups&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;all purpose flour&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;3&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;tablespoons&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;sugar&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;4&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;teaspoons&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;baking powder&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;teaspoon&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;salt&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;4&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;teaspoons&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;baking soda&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;½&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;teaspoons&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;vanilla extract&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;br /&gt;
The &lt;em&gt;correct&lt;/em&gt; way to make this is to combine the eggs and sugar, then the rest of the wet together. Who has time for that in the morning though? Just combine them all at once and move on. Make sure to follow the rules above though!&lt;/p&gt;

&lt;p&gt;Happy pancaking!&lt;/p&gt;


						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/pancakes&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Fri, 30 Apr 2021 12:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/pancakes</link>
				<guid isPermaLink="true">https://patmurray.co/words/pancakes</guid>
			</item>
			
		
			
			<item>
				<title>2020: My Year</title>
					<description>
						&lt;p&gt;I still haven’t yet finished my 2019 annual review. Life was so busy in January and February that it just got away from me. Then, well, we all know how the rest of the year went. To be honest, I hope to publish the 2019 report soon; it was a big year and I would love for it to be documented for myself to look back on in the future.&lt;/p&gt;

&lt;p&gt;For my &lt;a href=&quot;/year/&quot;&gt;previous reports&lt;/a&gt;, I’ve gone all out with numbers and analysis, this year I just want to share some memorable moments.&lt;/p&gt;

&lt;style&gt;
.caption h1 {
  padding-block-start: 100px;
}
&lt;/style&gt;

&lt;h1 id=&quot;january&quot;&gt;January&lt;/h1&gt;

&lt;p&gt;January saw me get into work and really start to feel at home, I hung out with my friends a lot, went skiing in Squaw Valley, and flew to Los Angeles to see Coldplay with Justin.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.7824194952132286) / 0.748046875) * 0.748046875);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_3221.JPG&quot; data-ratio=&quot;0.748046875&quot; style=&quot;opacity: 1;&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.7824194952132286) / 0.748046875) * 1.3333333333333333);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_2503.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.333333333333333) / 0.75) * 0.75);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_3595.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.333333333333333) / 0.75) * 1);&quot;&gt;&lt;img src=&quot;/images/2020-annual/4C5C2A51-7C72-47B7-8D94-8763EA198880.jpg&quot; data-ratio=&quot;1&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h1 id=&quot;february&quot;&gt;February&lt;/h1&gt;

&lt;p&gt;My parents visited in February and saw my new home. We visited Monterey, Santa Cruz, the Marin Headland, and Sausalito. I took them to Caffe Macs Infinite Loop, and we went skiing in Telluride. I also attended the premiere screening of &lt;em&gt;Visible: Out on Television&lt;/em&gt; an Apple TV+ original documentary series.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1041.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1021.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.5) / 1) * 1);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_4631.jpeg&quot; data-ratio=&quot;1&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.5) / 1) * 1.5);&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF8595.JPG&quot; data-ratio=&quot;1.5&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h1 id=&quot;march&quot;&gt;March&lt;/h1&gt;
&lt;p&gt;March started with a visit from my cousin and his wife. A few days later was my first day watching the squirrels out the window from my new desk. March was a lot of firsts, a lot of learning, a lot of FaceTime hangouts, and exploration trips to the coast. The world changed every day, and I tried my damned best to keep on top of it.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 1.3333333333333333);&quot;&gt;&lt;img src=&quot;/images/2020-annual/20200307_115338.jpg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 0.75);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_5073.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 3.0019550342130987) / 0.75) * 1.501466275659824);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_5139.JPG&quot; data-ratio=&quot;1.501466275659824&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 3.0019550342130987) / 0.75) * 0.75);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_5556.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Professionally, March meant learning to work at home and it also meant the busiest and most full weeks of my working life. Working with my amazing team designing and building the &lt;a href=&quot;https://covid19.apple.com/screening&quot;&gt;Apple COVID-19 Screening Tool&lt;/a&gt;, really was a highlight of my year. Without diving absolutely head first into this project I’m not sure how I would’ve handled the transition that we all had to go through in March.&lt;/p&gt;

&lt;h1 id=&quot;april&quot;&gt;April&lt;/h1&gt;

&lt;p&gt;April kicked off with my birthday, at that stage it felt like lockdown birthdays hadn’t quite been established yet. So I just Webex’d a large number of people and had a really wonderful night. I bought &lt;a href=&quot;/words/olivetti-lettera-22/&quot;&gt;myself a typewriter&lt;/a&gt;, and started biking frequently.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_5693.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_5720.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 3.0019550342130987) / 0.666015625) * 0.666015625);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1341.JPG&quot; data-ratio=&quot;0.666015625&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 3.0019550342130987) / 0.666015625) * 1.3333333333333333);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_6012.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h1 id=&quot;may&quot;&gt;May&lt;/h1&gt;

&lt;p&gt;In May, I did a lot more biking, and I binge-watched all of Futurama. The lemon tree in my yard started producing what would be a summer of citrus! And rather excitingly, my air-conditioning stopped working right as the first heatwave of the year kicked into full swing.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 3) / 0.6666666666666666) * 1.3333333333333333);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_7498.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 3) / 0.6666666666666666) * 0.6666666666666666);&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF9474.JPG&quot; data-ratio=&quot;0.6666666666666666&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 0.75);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_7747.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 1.3333333333333333);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1014.JPG&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;While I’d been baking all year, and making pizzas and bread like everyone else, May saw me start to try to make more intricate desserts. I continued my year-long quest to make the &lt;a href=&quot;https://twitter.com/_patmurray/status/1238883223926476801&quot;&gt;fluffiest pancakes&lt;/a&gt; with a pretty fancy looking strawberry breakfast. I also pulled off making just enough successful macarons to take a photo of them!&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 3) / 0.75) * 1.5);&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF9661.JPG&quot; data-ratio=&quot;1.5&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 3) / 0.75) * 0.75);&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_7920.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2) / 1.5) * 1.5);&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF9868.JPG&quot; data-ratio=&quot;1.5&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 * var(--photoset-margin-amount, 0.25rem)) / 2) / 1.5) * 1.5);&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF9873.JPG&quot; data-ratio=&quot;1.5&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h1 id=&quot;june&quot;&gt;June&lt;/h1&gt;

&lt;p&gt;With summer in full swing, I spent a lot of time outside in June. June normally has WWDC and I &lt;a href=&quot;https://twitter.com/_patmurray/status/1274762742310764549?s=20&quot;&gt;sorely missed it this year&lt;/a&gt;, I was very excited for my first as an Apple Engineer. I met up with a few friends for picnics in local parks and baked a lot of cakes and brownies.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.666666666666666) / 0.5625) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_9067.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.666666666666666) / 0.5625) * 0.5625)&quot;&gt;&lt;img src=&quot;/images/2020-annual/95EB6593-EA80-4826-8F31-0B2CFAE98F41.jpg&quot; data-ratio=&quot;0.5625&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.666666666666666) / 0.5625) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_8521.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.777777777777778) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_8296.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.777777777777778) / 0.75) * 1.5)&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF9900.JPG&quot; data-ratio=&quot;1.5&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.777777777777778) / 0.75) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_8964.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h1 id=&quot;july&quot;&gt;July&lt;/h1&gt;

&lt;p&gt;In July I saw—and photographed!—the comet, which was pretty great! I also made it a point to walk past the neighbourhood “skeleton house” every day, to see what new scene they had set up. This was something, that at the time, I didn’t realise just how important it was for me. My lemon tree was in full production mode too during July, allowing for friends to come and steal some while we chatted from across the yard. Lastly, I attempted to—and unfortunately never finished, but plan to soon!—make my own arcade-like machine. It got quite far, and I’m really proud of it until I shorted a wire one day and blew a few electronics up.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_9830.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF0156.jpg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 3.3703703703703702) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_9348.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 3.3703703703703702) / 0.75) * 1.7777777777777777)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_9403.jpeg&quot; data-ratio=&quot;1.7777777777777777&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h1 id=&quot;august&quot;&gt;August&lt;/h1&gt;

&lt;p&gt;August was the closest I came to a normal summer during the pandemic, I was extremely lucky and able to visit Lake Tahoe for a week to escape the fires, the politics, the staying and working inside, and really everything. I spent little time on the internet and just enjoyed swimming and hiking, and having a really special time.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.39970703125) / 0.6666666666666666) * 0.7998046875)&quot;&gt;&lt;img src=&quot;/images/2020-annual/B3036EE5-ED2A-4F8D-AFBA-722FDB821BF3.jpg&quot; data-ratio=&quot;0.7998046875&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.39970703125) / 0.6666666666666666) * 0.8)&quot;&gt;&lt;img src=&quot;/images/2020-annual/B767C86E-7E10-43F7-BA21-6E552056C102.jpg&quot; data-ratio=&quot;0.8&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 3.39970703125) / 0.6666666666666666) * 0.6666666666666666)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1986.JPG&quot; data-ratio=&quot;0.6666666666666666&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7857449047192238) / 0.748046875) * 1.335820895522388)&quot;&gt;&lt;img src=&quot;/images/2020-annual/150D4243-A085-4597-8488-ACFCDE31F4B6.jpg&quot; data-ratio=&quot;1.335820895522388&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7857449047192238) / 0.748046875) * 0.748046875)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_0001.JPG&quot; data-ratio=&quot;0.748046875&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I also did some large bike rides, and got a lot of use out my hat that all of Twitter seemed to love!&lt;/p&gt;

&lt;h1 id=&quot;september&quot;&gt;September&lt;/h1&gt;

&lt;p&gt;Of course, everyone in California remembers September for the fires, and in the Bay Area especially for Wednesday the 9th. This was my second large scale “orange” day I really remember (the first was back in 2008 in Sydney), and it was truly surreal and all-encompassing. The light permeated everything, making it truly inescapable. I did briefly go out and shoot some photos in the morning before I realised that likely wasn’t the best idea.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.007832898172324) / 0.748046875) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1806.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.007832898172324) / 0.748046875) * 1.5)&quot;&gt;&lt;img src=&quot;/images/2020-annual/Orange_2020_005_20200909.jpg&quot; data-ratio=&quot;1.5&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 4 *  var(--photoset-margin-amount, 0.25rem)) / 4.007832898172324) / 0.748046875) * 0.748046875)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1359.JPG&quot; data-ratio=&quot;0.748046875&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 0 *  var(--photoset-margin-amount, 0.25rem)) / 1) / 1.7777777777777777) * 1.7777777777777777)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1390.JPG&quot; data-ratio=&quot;1.7777777777777777&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I did also shoot a fun &lt;a href=&quot;https://twitter.com/_patmurray/status/1303794285616095232&quot;&gt;little video&lt;/a&gt; as I made lunch that day, to try to capture the moment as best I could.&lt;/p&gt;

&lt;video id=&quot;orange-video&quot; controls=&quot;&quot; style=&quot;width: 100%;&quot; poster=&quot;/images/2020-annual/output.gif&quot; preload=&quot;none&quot;&gt;&lt;/video&gt;

&lt;h1 id=&quot;october&quot;&gt;October&lt;/h1&gt;
&lt;p&gt;To be honest, writing this, it feels like October was just another month in which I did weekend bike rides, light night walks, and baked a bunch. And you know what? That’s probably true. I experimented more with pizza and attempted a deep dish, that I think worked out well. I also started exploring wider areas on my bike and lapping up the last of the hot summer nights before they disappeared.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_2252.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_0899.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.0703125) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_0060.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.0703125) / 0.75) * 0.802734375)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_0148.JPG&quot; data-ratio=&quot;0.802734375&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h1 id=&quot;november&quot;&gt;November&lt;/h1&gt;
&lt;p&gt;I started off the month by getting deeply invested into Planet Coaster on my fancy new iMac, and of course, I purchased the despondent kiwi bird everyone on Twitter was in love with! It and the contentful duck sit atop my dining table every day. My friend Joe and I went for a hike, which was wonderful, my first Bay Area hike in a year.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/62597786479__1F7D5088-3346-48FE-AE3C-28515A75F4EB.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1365.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_1473.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_0011.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In November, I also &lt;em&gt;finally&lt;/em&gt; got my Californian driver’s license! Only took almost a year longer than planned thanks to… well… everything. I celebrated by renting a car and exploring the Bay Area to its fullest extent for Thanksgiving week. I went up to Muir Woods, over to the coast, I watched the sun both set and rise from Hawk Hill on Marin Headlands overlooking the Golden Gate Bridge, and I had a most marvellous time.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 3.250510619779495) / 0.666748046875) * 1.500523560209424)&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF1718.jpg&quot; data-ratio=&quot;1.500523560209424&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 3.250510619779495) / 0.666748046875) * 0.666748046875)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_2411.JPG&quot; data-ratio=&quot;0.666748046875&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_2356.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_2307.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.2002522421524664) / 0.6666666666666666) * 0.6666666666666666)&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF1990 copy.jpg&quot; data-ratio=&quot;0.6666666666666666&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.2002522421524664) / 0.6666666666666666) * 0.8001681614349776)&quot;&gt;&lt;img src=&quot;/images/2020-annual/E3948526-C63C-4449-870A-F4F6EC26D13F.jpg&quot; data-ratio=&quot;0.8001681614349776&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 0 *  var(--photoset-margin-amount, 0.25rem)) / 1) / 3.189442658092176) * 3.189442658092176)&quot;&gt;&lt;img src=&quot;/images/2020-annual/DSCF2003 Pano copy.jpg&quot; data-ratio=&quot;3.189442658092176&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I hiked a lot of different places that week. And really explored much of the impressiveness of the Santa Cruz mountains. It was a great reminder of why this part of the world, and all its magnificent natural beauty, is so special.&lt;/p&gt;

&lt;h1 id=&quot;december&quot;&gt;December&lt;/h1&gt;

&lt;p&gt;As the year came to a close, I finally decided to purchase a car (my little 2017 VW Golf), I went for &lt;em&gt;more&lt;/em&gt; hikes each weekend. And during the holiday break converted my living room into a cosy themed space where I sat for hours on end on FaceTime with all the most important people who I miss dearly. Between the eating and the chatting, I went for walks, rides, and hikes. A fitting encapsulation of the year.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.0001766784452295) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_2997.JPG&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.0001766784452295) / 1.3333333333333333) * 1.3335689045936396)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_3562.JPG&quot; data-ratio=&quot;1.3335689045936396&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 0.75)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_3763.jpeg&quot; data-ratio=&quot;0.75&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.7777777777777777) / 0.75) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_3277.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.3378482972136223) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_3659.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 2 *  var(--photoset-margin-amount, 0.25rem)) / 2.3378482972136223) / 1.3333333333333333) * 1.783797729618163)&quot;&gt;&lt;img src=&quot;/images/2020-annual/Screen Shot 2020-12-24 at 10.13.02 PM.jpeg&quot; data-ratio=&quot;1.783797729618163&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot; style=&quot;width: calc((((100% - 0 *  var(--photoset-margin-amount, 0.25rem)) / 1) / 1.3333333333333333) * 1.3333333333333333)&quot;&gt;&lt;img src=&quot;/images/2020-annual/IMG_3995.jpeg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;&lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h1 id=&quot;2021&quot;&gt;2021&lt;/h1&gt;

&lt;p&gt;Much has already happened this year, but that is for next year’s annual review! I am in a much better place now mentally than I was during some of the toughest months of last year, but I’ve also changed a lot because of the events. This review, like all my previous ones, overlooked most of the macro-environment in which I live, but if 2020 taught me anything (and it taught me a lot)  those macro factors matter &lt;em&gt;a lot&lt;/em&gt;. To my friends and family, I love you dearly. And miss you immensely.&lt;/p&gt;

&lt;p&gt;2020 was very hard, and 2021 will be too, but I hope that I can celebrate some personal wins throughout it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2020-annual/signature.png&quot; style=&quot;max-width: 120px; margin-left: 0;&quot; /&gt;&lt;/p&gt;

&lt;!-- &lt;script src=&quot;https://cdn.jsdelivr.net/npm/hls.js@latest&quot;&gt;&lt;/script&gt; --&gt;
&lt;script&gt;
  var video = document.getElementById(&apos;orange-video&apos;);
  var videoSrc = &apos;/static-patmurray-co/orange-video/playlist.m3u8&apos;;
  if (video.canPlayType(&apos;application/vnd.apple.mpegurl&apos;)) {
    video.src = videoSrc;
  } else {
    var script = document.createElement(&apos;script&apos;);
    script.onload = function () {
      if (Hls.isSupported()) {
        var hls = new Hls();
        hls.loadSource(videoSrc);
        hls.attachMedia(video);
      }
    };
    script.src = &quot;https://cdn.jsdelivr.net/npm/hls.js@latest&quot;;
    document.body.appendChild(script); //or something of the likes
  }
&lt;/script&gt;


						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/2020-annual-review&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Mon, 01 Feb 2021 17:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/2020-annual-review</link>
				<guid isPermaLink="true">https://patmurray.co/words/2020-annual-review</guid>
			</item>
			
		
			
			<item>
				<title>A Decade on the App&amp;nbsp;Store</title>
					<description>
						&lt;p&gt;Today marks ten years since my &lt;a href=&quot;https://patmurray.co/projects/gibbs-rules/&quot;&gt;first app&lt;/a&gt; hit the App Store. It was my last day of the school year&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; for the 9th grade, I was 15, and I didn’t own a Mac.&lt;/p&gt;

&lt;p&gt;That first day I got 119 downloads. The following day; 188. Six months later, over 50,000 people had installed a product I’d built. Code I’d written. I was hooked.&lt;/p&gt;

&lt;p&gt;This wasn’t my first exploration into programming, I started in MS Bash and for a while built little iPhone Web Apps&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; that only worked inside my home LAN. This was, however, the first time someone who wasn’t myself, my family, or my friends could use something I built. It was wild, and daunting, and frankly &lt;em&gt;magical&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/app_store_10_years_me.png&quot; /&gt;
        &lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/app_store_10_years_downloads.jpg&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I released a few other apps during the following years, with little-to-varied success. Each one taught me a lot. From 2013 to 2015, I took hiatus from programming to focus on my studies and filmmaking, but I was continuously drawn back to the world of using code to make stuff for other people to use. So in April 2015, I quickly threw together a “personal resume” &lt;a href=&quot;https://github.com/PatMurrayDEV/wwdc15-application&quot;&gt;app submission&lt;/a&gt; for the WWDC Student Scholarship program. &lt;a href=&quot;https://twitter.com/_patmurray/status/596784309400260608&quot;&gt;Which I got&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That first WWDC is impossible to encapsulate in words. Many of friends today I met that week. It landed me my first professional software job. It showed me that this is absolutely what I want to do. I had the privilege of attending WWDC from 2017 to 2019 too.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/app_store_10_years_wwdc.jpeg&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;From 2015 to 2018, I released a &lt;a href=&quot;https://patmurray.co/projects/&quot;&gt;series of iOS apps&lt;/a&gt;, some that started to get &lt;a href=&quot;https://9to5mac.com/2017/12/21/live-memories-for-ios-instantly-transforms-your-live-photos-into-video-keepsakes/&quot;&gt;press coverage&lt;/a&gt;&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;, one that elevated my &lt;a href=&quot;https://patmurray.co/projects/atlas-wallpaper/&quot;&gt;profile considerably (🌎)&lt;/a&gt; , and some web tools that made me fall in love with web technologies again. &lt;a href=&quot;https://patmurray.co/projects/apple-music-analyser/&quot;&gt;One of those web tools&lt;/a&gt;, got so much positive attention that some nice folks in &lt;a href=&quot;https://twitter.com/_patmurray/status/1128691760480378881?s=20&quot;&gt;Cupertino noticed&lt;/a&gt;. (I also made some &lt;a href=&quot;https://developersdevelopers.dev/elopers/&quot;&gt;very dumb&lt;/a&gt; things.)&lt;/p&gt;

&lt;p&gt;For more than a third of my life I’ve been published on the App Store. In 2012, my friends threw me a party for crossing 100,000 downloads. Today, I get to work on some very special stuff that I’m really proud of, with a team that challenges me constantly.&lt;/p&gt;

&lt;p&gt;Between my brother&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;, my mother&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;, my father&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;, and my friends who pushed me, I don’t know how I would be where I am today. Thank you.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Southern Hemisphere &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://mjtsai.com/blog/2007/06/13/a-very-sweet-solution/&quot;&gt;Sweet Solution&lt;/a&gt; &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Live Memories took me over a year to make, I learnt &lt;strong&gt;a lot&lt;/strong&gt; about video frameworks. I’m still really proud of the engineering work that went into it, and some of the solutions I came up. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;I remember that time we built quadratic equation calculator in C &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;There’s too many to list, but mum definitely paid for my developer account for many years. And copy edited all of my bad writing. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;Dad helped me set up a hackintosh in early 2010, I vividly remember him sitting with me while we sent step by step through the provisioning profile and certificate signing dance late one night in Novemeber 2010 trying to submit &lt;em&gt;Gibbs’ Rules&lt;/em&gt; to iTunes Connect. &lt;a href=&quot;#fnref:6&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/A-Decade-on-the-App-Store&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Mon, 07 Dec 2020 19:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/A-Decade-on-the-App-Store</link>
				<guid isPermaLink="true">https://patmurray.co/words/A-Decade-on-the-App-Store</guid>
			</item>
			
		
			
			<item>
				<title>Video: Postcard From Italy</title>
					<description>
						&lt;div class=&quot;videoWrapper&quot; style=&quot;position: relative;
padding-bottom: 56.25%;
/* 16:9 */
height: 0;
width: 100%;&quot;&gt;
                &lt;iframe style=&quot;position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;&quot; src=&quot;https://www.youtube-nocookie.com/embed/r5Y3CMrCIws?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=https://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
                &lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/postcard-from-italy&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sat, 11 Apr 2020 23:22:28 +0000</pubDate>
				<link>https://patmurray.co/words/postcard-from-italy</link>
				<guid isPermaLink="true">https://patmurray.co/words/postcard-from-italy</guid>
			</item>
			
		
			
			<item>
				<title>Olivetti Lettera&amp;nbsp;22</title>
					<description>
						&lt;p&gt;I’ve been thinking about getting a manual typewriter for a long while. The idea of something so mechanical and yet so simple compared to the computers I used every day was highly appealing.&lt;/p&gt;

&lt;p&gt;When I was &lt;a href=&quot;/words/venice-twenty-years-on&quot;&gt;in Venice last year&lt;/a&gt;, I visited the &lt;a href=&quot;http://www.negoziolivetti.it&quot;&gt;Olivetti Museum&lt;/a&gt; in Piazza San Marco and knew than that I would love to get one of their beautiful original typewriters one day.&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/img_1491.jpg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;
        &lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/img_1500.jpg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Last week was my birthday, and with all of us in lock-down I decided it was time for me to finally get one.&lt;/p&gt;

&lt;p&gt;So here’s my light blue Olivetti Lettera 22!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/img_1341.jpg&quot; class=&quot;extrawide&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/img_5887.jpg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;
        &lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/IMG_5891.jpg&quot; data-ratio=&quot;0.75&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/IMG_5895.jpg&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;
        &lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/IMG_5902.JPEG&quot; data-ratio=&quot;1.3333333333333333&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/olivetti-lettera-22&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Thu, 09 Apr 2020 03:57:51 +0000</pubDate>
				<link>https://patmurray.co/words/olivetti-lettera-22</link>
				<guid isPermaLink="true">https://patmurray.co/words/olivetti-lettera-22</guid>
			</item>
			
		
			
			<item>
				<title>Venice Twenty Years On</title>
					<description>
						&lt;p&gt;For Thanksgiving week this year I visted Northern Italy, in particular Milan, Bologna and Venice. It had been 11 years since I was in Milan and Bologna, but more importantly &lt;strong&gt;20 years&lt;/strong&gt; since I was last in Venice.&lt;/p&gt;

&lt;p&gt;I thought it could be a fun idea to attempt to recreate photos of four year old Patrick—in January 2000—today as 24 year old Patrick—in November 2019.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(tbh I was a super cute 4 year old!)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/1a7fff78-9e29-4568-a7e4-6b9a5760c185.jpeg&quot; class=&quot;fullwidth&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;some-less-successful-attemps&quot;&gt;Some less successful attemps&lt;/h3&gt;

&lt;p&gt;Originals featuring my brother :)&lt;/p&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/49f9364c-c915-4614-ba5e-0da5872182a7.jpeg&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/6ed8f34d-541a-45f1-82e7-3dd0c341e52f.jpeg&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/b179771b-f949-4d47-adac-42a842697af3.jpeg&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/venice-twenty-years-on&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Wed, 27 Nov 2019 16:32:58 +0000</pubDate>
				<link>https://patmurray.co/words/venice-twenty-years-on</link>
				<guid isPermaLink="true">https://patmurray.co/words/venice-twenty-years-on</guid>
			</item>
			
		
			
			<item>
				<title>CSS Only Modal</title>
					<description>
						&lt;p&gt;The CSS modal is a topic that has been discussed much before online for a few years. This is my take on it.&lt;/p&gt;

&lt;p&gt;Simply it is achieved by having a hidden check-box and a selection of labels for that check box that are used as buttons. Here is a simple implementation:&lt;/p&gt;

&lt;style&gt;
    .modalCloser {
        display: none;
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 99;
        background-color: rgba(255, 255, 255, .65);
        cursor: pointer;
        -webkit-backdrop-filter: blur(10px) grayscale(100%);
        backdrop-filter: blur(10px) grayscale(100%);
    }

    .modal {
        display: none;
        position: fixed;
        z-index: 100;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        align-items: center;
        justify-content: center;
        pointer-events: none;
    }

    .modal * {
        pointer-events: initial;
    }

    .modal__content {
        box-sizing: border-box;
        overflow: auto;
        max-height: 90vh;

        padding: 20px;
        background-color: #fff;

        -webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, .35);
        box-shadow: 0 5px 25px rgba(0, 0, 0, .35);
        width: calc(100% - 40px);

        padding-left: 40px;
        padding-right: 40px;
        margin: 20px;

        max-width: 700px;
    }

    .modalToggle {
        display: none;
    }

    .modalToggle:checked~* {
        display: flex;
    }

    .modal_button {
        box-sizing: border-box;
        display: inline-block;
        font-weight: bold;
        padding: 5px 10px;
        min-width: 90px;
        border-width: 2px;
        border-style: solid;
        cursor: pointer;
        text-align: center;
        min-height: 28px;
        font-family: inherit;
        white-space: nowrap;
        border-color: #0D28F2;
        background-color: #fff;
        color: #0D28F2;
    }

    .close_button {
        box-sizing: border-box;
        font-weight: bold;
        cursor: pointer;
        margin-left: auto;
        vertical-align: middle;
        display: flex;
        flex-direction: column;
        justify-content: center;
        min-width: 30px;
        text-align: right;
        padding: 10px;
        padding-right: 0;
        font-size: 24px;
    }
&lt;/style&gt;

&lt;p&gt;&lt;label for=&quot;modal_12345&quot; class=&quot;modal_button&quot;&gt;Click Me!&lt;/label&gt;&lt;/p&gt;
&lt;div&gt;
    &lt;input type=&quot;checkbox&quot; id=&quot;modal_12345&quot; autocomplete=&quot;off&quot; class=&quot;modalToggle&quot; /&gt;
    &lt;label class=&quot;modalCloser&quot; for=&quot;modal_12345&quot;&gt;&lt;/label&gt;
    &lt;div class=&quot;modal&quot;&gt;
        &lt;div class=&quot;modal__content&quot;&gt;
            &lt;div&gt; &lt;label for=&quot;modal_12345&quot; class=&quot;close_button&quot;&gt;&amp;#215;&lt;/label&gt; &lt;/div&gt;
            &lt;p&gt;This is used on my new &lt;a href=&quot;/gallery&quot;&gt;Gallery&lt;/a&gt; page to show &lt;a href=&quot;https://en.wikipedia.org/wiki/Exif&quot;&gt;Exif&lt;/a&gt; data for an image.&lt;/p&gt;
            &lt;p&gt;The Gallery is where I plan to post lots more photos and art. I&apos;ve found that I want somewhere that I
                own for storing my photos in high resolution. So I built the gallery that is designed to let each
                image stand on its own. I like it. &lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;markup&quot;&gt;Markup&lt;/h2&gt;

&lt;p&gt;We have a lable that can be placed anywhere on the page to open the modal. There can be as many as you want. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;for&lt;/code&gt; informs the browser which check box it is for, in the case of my gallery pages I use generated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;id&lt;/code&gt;s and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;for&lt;/code&gt; to allow for mutple on a page.&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;label&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;for=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;modal_12345&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;modal_button&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Click Me!&lt;span class=&quot;nt&quot;&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, where you want the modal to appear I put in a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;div&lt;/code&gt; for readability and as container for css selectors. Inside that div goes the checkox itself. &lt;em&gt;It is important it comes first&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;input&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;checkbox&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;modal_12345&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;autocomplete=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;off&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;modalToggle&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;label&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;modalCloser&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;for=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;modal_12345&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;modal&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;modal__content&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;&amp;lt;label&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;for=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;modal_12345&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;close_button&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;ni&quot;&gt;&amp;amp;#215;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/label&amp;gt;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Modal Content Goes here &lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That’s it for the markup. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;modalCloser&lt;/code&gt; is so that users can click outside the modal and have it close. For modals that you don’t want that behaviour do not include it.&lt;/p&gt;

&lt;h2 id=&quot;css&quot;&gt;CSS&lt;/h2&gt;

&lt;div class=&quot;language-css highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nc&quot;&gt;.modal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;fixed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;z-index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;right&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;bottom&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;align-items&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;justify-content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;pointer-events&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nc&quot;&gt;.modal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;pointer-events&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;initial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nc&quot;&gt;.modal__content&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;box-sizing&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;border-box&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;max-height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;90vh&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;nl&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;20px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;#fff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nc&quot;&gt;.modalToggle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nc&quot;&gt;.modalToggle&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:checked&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;~*&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;flex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is the core of all that you need. You will obviously want to style the buttons too and . the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.modal__content&lt;/code&gt; to look the way you want it to.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.modalToggle:checked~*&lt;/code&gt; selector says to the browser to take everything over the checkbox and apply this rule—making it &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;display: flex;&lt;/code&gt;—when the checkbox is checked.&lt;/p&gt;

&lt;p&gt;Most of css content is make the modal appear over the main content and be fixed.&lt;/p&gt;

&lt;p&gt;Lastly if you want to have the modal be closeable by clicking ooutside you’ll need this style:&lt;/p&gt;

&lt;div class=&quot;language-css highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nc&quot;&gt;.modalCloser&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;fixed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;right&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;bottom&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;.65&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;pointer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;caveats&quot;&gt;Caveats&lt;/h2&gt;

&lt;p&gt;The only catch here that there is no animation, this can be overcome by some tricks with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;visibility: hidden&lt;/code&gt; and related things. I didn’t see this as a big enough problem for my uses. Also, due to the way CSS works—by never looking back up the tree—it makes it impossible to prevent scrolling on body like most Javascript modals will. Again I found this ok.&lt;/p&gt;

&lt;p&gt;Give it a try!&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/css-only-modal&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Fri, 12 Apr 2019 01:10:50 +0000</pubDate>
				<link>https://patmurray.co/words/css-only-modal</link>
				<guid isPermaLink="true">https://patmurray.co/words/css-only-modal</guid>
			</item>
			
		
			
			<item>
				<title>Using JavaScriptCore in Swift</title>
					<description>
						&lt;p&gt;In my new application—&lt;a href=&quot;https://patmurray.co/projects/demo-remote/&quot;&gt;Demo Remote&lt;/a&gt;—I needed a markdown parser to convert the user’s input markdown file into HTML. Unfortunately, most Swift markdown parsers suffer from a set of different issues, namely being large frameworks, having odd external dependencies, or too many features for what I needed. So I wondered if I could just use a simple markdown javascript parser that I know works, and the answer is yes I can. And I did.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/documentation/javascriptcore&quot;&gt;JavaScriptCore&lt;/a&gt; is a framework available on macOS iOS, and tvOS to run javascript without a web browser. This is really great for when you want to reuse some javascript code, have dynamic business logic, or maybe even build a simple plugin system.&lt;/p&gt;

&lt;p&gt;JavaScriptCore requires a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JSContext&lt;/code&gt; to evaluate the script which returns a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JSValue&lt;/code&gt;. This value can then be converted to a native object or primitive type, &lt;a href=&quot;https://nshipster.com/javascriptcore/&quot;&gt;NSHipster has a great table&lt;/a&gt; on all the types.&lt;/p&gt;

&lt;p&gt;My super simple Markdown parser is below, it imports a script from the bundle, but could very easily be enhanced by pulling one from a server so I can enhance the script quickly.&lt;/p&gt;

&lt;div class=&quot;language-swift highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Cocoa&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;JavaScriptCore&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;MarkdownRenderer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;NSObject&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    
    &lt;span class=&quot;c1&quot;&gt;// Fetch the script from file and parse it as a string&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Bundle&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;forResource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;marked.min&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ofType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;js&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;inDirectory&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;forLocalization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;guard&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;newsource&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;NSString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;contentsOfFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Encoding&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;utf8&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rawValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;newsource&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;String&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}()&lt;/span&gt;


    &lt;span class=&quot;c1&quot;&gt;// The static function that is called from elsewhere in the app&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// returns HTML in a string &lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;jsSource&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// Create a context&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;context&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;JSContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;

            &lt;span class=&quot;c1&quot;&gt;// Evaluate the script&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;evaluateScript&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;jsSource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            
            &lt;span class=&quot;c1&quot;&gt;// Select the function in the script I want to call&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;testFunction&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;objectForKeyedSubscript&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;marked&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

            &lt;span class=&quot;c1&quot;&gt;// Call the function with the arguments (in this case the markdown)&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;testFunction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;withArguments&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
            
            &lt;span class=&quot;c1&quot;&gt;// Convert the result to a string&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
       
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;JavaScriptCore is a really cool way to extend your native application and opens up your application to a greater range of options. Whatever your opinion of JS the langauge is, it’s hard to deny it’s a massive community with a package for everything.&lt;/p&gt;

&lt;p&gt;I’ll be reaching for this again the future when native doesn’t make sense.&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/using-javascriptcore-in-swift&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sat, 30 Mar 2019 01:27:21 +0000</pubDate>
				<link>https://patmurray.co/words/using-javascriptcore-in-swift</link>
				<guid isPermaLink="true">https://patmurray.co/words/using-javascriptcore-in-swift</guid>
			</item>
			
		
			
			<item>
				<title>Introducing ‘Demo&amp;nbsp;Remote’ for&amp;nbsp;macOS</title>
					<description>
						&lt;p&gt;Today I’m excited to release my live coding demo snippet tool &lt;strong&gt;&lt;a href=&quot;https://patmurray.co/projects/demo-remote/&quot;&gt;Demo Remote&lt;/a&gt;&lt;/strong&gt; to the world. If you find yourself live coding during presentations and want to be as smooth as the Apple WWDC presenters then give &lt;strong&gt;Demo Remote&lt;/strong&gt; a try!&lt;/p&gt;

&lt;center&gt;   &lt;a class=&quot;no_icon&quot; href=&quot;https://itunes.apple.com/au/app/demo-remote/id1457425673?mt=12&quot;&gt;     &lt;img style=&quot;width: 180px&quot; src=&quot;https://linkmaker.itunes.apple.com/images/badges/en-us/badge_macappstore-lrg.svg&quot; alt=&quot;Mac App Store URL&quot; /&gt;   &lt;/a&gt;&lt;/center&gt;

&lt;p&gt;&lt;strong&gt;Demo Remote is a tool for using a remote device (e.g., a mobile phone or tablet) to control snippets used in live coding demos.&lt;/strong&gt; It reads the code blocks from any markdown file and renders them on any device with a web browser. Tapping a code block makes its content instantaneously available to be pasted on your Mac.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://patmurray.co/images/demoremote_appstore.png&quot; alt=&quot;Demo Remote promo image&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;features&quot;&gt;Features&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Use any &lt;strong&gt;markdown&lt;/strong&gt; file containing code blocks (formatted in blocks of three back-ticks: &lt;code&gt;```&lt;/code&gt;.)&lt;/li&gt;
  &lt;li&gt;Quickly &lt;strong&gt;switch files&lt;/strong&gt; and all remotes immediately update.&lt;/li&gt;
  &lt;li&gt;Allow multiple remote connections or just &lt;strong&gt;white list&lt;/strong&gt; by IP address. &lt;br /&gt;
I recommend you enable the white list when presenting to prevent someone else wrecking havoc on your presentation (or just reading ahead in the script)&lt;/li&gt;
  &lt;li&gt;Super small and &lt;strong&gt;lightweight&lt;/strong&gt;. Demo Remote stays out of your way in the status bar and never make noise or sounds during a presentation.  &lt;br /&gt;
For maximum control, try using &lt;a href=&quot;https://www.macbartender.com&quot;&gt;Bartender&lt;/a&gt; or &lt;a href=&quot;https://vanilla.peachs.co/r/ossified-jellyfish-6928&quot;&gt;Vanilla&lt;/a&gt; to hide the icon entirely and clean up your status bar for presentations&lt;/li&gt;
  &lt;li&gt;Smooth, Fast, and Simple. &lt;strong&gt;Does one thing, and does it well!&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;center&gt;   &lt;a class=&quot;no_icon&quot; href=&quot;https://itunes.apple.com/au/app/demo-remote/id1457425673?mt=12&quot;&gt;     &lt;img style=&quot;width: 180px&quot; src=&quot;https://linkmaker.itunes.apple.com/images/badges/en-us/badge_macappstore-lrg.svg&quot; alt=&quot;Mac App Store URL&quot; /&gt;   &lt;/a&gt;&lt;/center&gt;

&lt;h5 id=&quot;an-example&quot;&gt;An Example&lt;/h5&gt;

&lt;p&gt;For example, I’m giving a quick presentation on setting up MapKitJS. I have a script for my live coding written in markdown. I open it in Demo Remote and select start presenting. On my iPhone I open the remote webpage and I’m good to go!&lt;/p&gt;

&lt;p&gt;During the presentation when I get to the next code step in my script, I tap the code block on my iPhone and immediately &lt;strong&gt;⌘-V&lt;/strong&gt; it into my text editor on my Mac.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://patmurray.co/images/demoremote%20gif.gif&quot; class=&quot;extrawide&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download Demo Remote today to make your live coding demos the best in the business!&lt;/strong&gt;&lt;/p&gt;

&lt;center&gt;   &lt;a class=&quot;no_icon&quot; href=&quot;https://itunes.apple.com/au/app/demo-remote/id1457425673?mt=12&quot;&gt;     &lt;img style=&quot;width: 180px&quot; src=&quot;https://linkmaker.itunes.apple.com/images/badges/en-us/badge_macappstore-lrg.svg&quot; alt=&quot;Mac App Store URL&quot; /&gt;   &lt;/a&gt;&lt;/center&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/introducing-demo-remote&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Tue, 26 Mar 2019 10:09:41 +0000</pubDate>
				<link>https://patmurray.co/words/introducing-demo-remote</link>
				<guid isPermaLink="true">https://patmurray.co/words/introducing-demo-remote</guid>
			</item>
			
		
			
			<item>
				<title>How I Built Sharing in Atlas Wallpaper</title>
					<description>
						&lt;p&gt;Atlas—my map based wallpaper app for iPhone and iPad—has had custom styles for premium&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; customers since June of last year. It was the most often requested feature up until I added it, and sales for premium as a result reflected this. Logically, following the release of custom styles, the next most requested feature was sharing of styles. Today I’m pleased to announce that version 11 of &lt;a href=&quot;https://atlaswallpaper.app&quot;&gt;Atlas Wallpaper&lt;/a&gt; features custom style sharing!&lt;/p&gt;

&lt;p&gt;I started working on this feature last August and have built and rebuilt it multiple times since. Atlas, &lt;a href=&quot;https://patmurray.co/talks/accelerated-app-development-using-cloudkit/&quot;&gt;famously&lt;/a&gt;, is a heavy user of Apple’s backend-as-a-service CloudKit for location search and the “inbuilt” styles—the ones customers’ can use for free. So of course I tried by using CloudKit to build a sharing system. This wasn’t the easiest—mostly due to the ways CloudKitJS works—it just wasn’t designed for how I wanted sharing to work. I also explored using a serverless system—in this case Azure Functions—and a persistent store but this was still full of complicated issues that needed solving. Really, I just &lt;em&gt;wanted to share a style file&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So I looked at the idea of just sharing a file and nothing else. And thought, well, &lt;em&gt;what is the minimum size I could make the file?&lt;/em&gt; Thanks to the way I built the custom styles engine I only needed five data points:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Style Name&lt;/li&gt;
  &lt;li&gt;Background Colour&lt;/li&gt;
  &lt;li&gt;Water Colour&lt;/li&gt;
  &lt;li&gt;Land Colour&lt;/li&gt;
  &lt;li&gt;Road Colour&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not much right?&lt;/p&gt;

&lt;p&gt;So I thought, well URLs can hold a lot of characters, and those five points aren’t many really, so why not just put it all in the URL? &lt;strong&gt;And that’s what I did!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the JS that runs on atlas.town&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; to create the preview:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;c1&quot;&gt;// path is set by striping the start of window.location.pathname as the URL starts with https://atlas.town/!/&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;decodedString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;atob&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//base64 decode&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dataString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;decodeURIComponent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;decodedString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; 

&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parts&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;dataString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//split it in half at the pipe&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//First half is the name&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;colors&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//second half is a string of colours in a particular order&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;backgroundColour&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;colors&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;landColour&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;colors&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;roadColour&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;colors&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;waterColour&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;colors&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It’s super simple, in the future I can add more data to a shared style by adding more pipes to the end and all the current code will continue to work. This solution also mean there is no waiting time when a user taps share in the app, or when a user adds a new style in. It’s all instant. No backend, no APIs, no network connection, just some simple strings.&lt;/p&gt;

&lt;p&gt;In the app there is both a decoder and an encoder written in swift with a few more checks to allow it to fail more gracefully.&lt;/p&gt;

&lt;p&gt;I’m really happy with this sharing method and hope you check out &lt;a href=&quot;https://atlaswallpaper.app&quot;&gt;Atlas Wallpaper&lt;/a&gt; to give it a try.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Premium customers are called “Atlas Premium Explorers”, because it seemed fun. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Also, how cute is the domain &lt;a href=&quot;https://atlas.town&quot;&gt;atlas.town&lt;/a&gt;!? I love it so much. These cartography related names are so much fun! &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/atlas-town&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Thu, 14 Mar 2019 00:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/atlas-town</link>
				<guid isPermaLink="true">https://patmurray.co/words/atlas-town</guid>
			</item>
			
		
			
			<item>
				<title>Building a URL Shortener with Netlify Redirects</title>
					<description>
						&lt;p&gt;I’ve always love the idea of having a custom URL shortener, I’ve owned pats.website for a while to use as this purpose. Unfortunately, most solutions are complicated and involve servers etc. Since I’ve used Netlify for lots of projects recently it got me thinking, why don’t I just use Netlify’s CDN egde powered redirects file?&lt;/p&gt;

&lt;p&gt;I started with a simple repo that I hooked up to Netlify that contained one file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_redirects&lt;/code&gt;. Now came the hard problem, I wanted to be able to edit this file without having to deal with git. I wanted a simple webform (on a URL only I know) that I could use to create and delete short urls.&lt;/p&gt;

&lt;p&gt;GitHub REST API to the rescue!&lt;/p&gt;

&lt;p&gt;I built a simple Node application that uses the GitHub API to read and update the redirects file, this sits in a free heroku instance (as it only runs when I’m adding new URLs and has no bearing on day-to-day usage of my shortener).&lt;/p&gt;

&lt;p&gt;The core idea is pretty simple once you think about it really. There’s an express server that loads a pug file with a list of urls, and it has a form in it that then adds a line to the redirects file and posts it to GitHub.&lt;/p&gt;

&lt;p&gt;Let’s break it down step by step:&lt;/p&gt;

&lt;h1 id=&quot;1-fetch-the-list-of-urls&quot;&gt;1. Fetch the list of urls&lt;/h1&gt;
&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;function &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;octokit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;repos&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getContents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;utf8&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parseLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The Node module for the GitHub API is extremely easy to use, it creates a promise that returns an object with lots of information about the file and its last commit. In it is the content of the file, base64 encoded (and a URL to the file, if it is a blob.)&lt;/p&gt;

&lt;p&gt;I then parse the links using my own function that finds markers in the redirects file (as I don’t want to edit all of it, as some portions need to always remain for proper functioning of the website.) and returns an array of objects:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parseLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;redirectsSection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;####&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;redirectsSection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;[\s&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;+/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;[\s&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;+/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This first removes whitespace then creates the objects with past, destination, and code. &lt;em&gt;Code is the HTTP header response code that Netlify should return&lt;/em&gt;, if blank it uses 302, if set to 200 (for example, or any non-redirect value) it returns the page without rewriting the URL, which is useful for masking.&lt;/p&gt;

&lt;p&gt;I then render these out in out to a list.&lt;/p&gt;

&lt;h1 id=&quot;2-create-new-link&quot;&gt;2. Create New Link&lt;/h1&gt;

&lt;p&gt;When the web form posts to the express server with a new link, it again performs the above functions to get a list of links (this way the server is stateless).&lt;/p&gt;

&lt;p&gt;First it validates that the path chosen is unique with a simple search of the list. Returning early if it’s not.&lt;/p&gt;

&lt;p&gt;It then pushes the new link into the array and calls a set of functions that do the above in the reverse order:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// This inserts the new block of rules into the file at the correct point.&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;createFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formattedLinks&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;formatLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;sections&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;####&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;sections&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`####\n\n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;formattedLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;\n\n####`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;sections&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// This pretty prints the rules (not necessary to be pretty but why not)&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;formatLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;longestPathLength&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;reduce&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;longestDestinationLength&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;reduce&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formattedLinks&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;padEnd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;longestPathLength&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;padEnd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;longestDestinationLength&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formattedLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Lastly, it puts it back to GitHub’s servers and updates the file (this triggers Netlify to instantly redeploy, and creates a seamless experience.) Resulting in this function:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;/new&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;function &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;urlpath&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;urlpath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;code&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;code&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;octokit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;repos&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getContents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;utf8&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parseLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;validateUnique&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileContents&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;createFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`Added &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; to _redirects`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fileContents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;base64&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;octokit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;repos&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;updateFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;sha&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;redirect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Not unique&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Not unique&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Missing components&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;Lastly a logically similar operation happens for delete.&lt;/p&gt;

&lt;p&gt;All of my code—albeit messy—is below, let me know if you set this up too:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Octokit&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;@octokit/rest&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;express&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;express&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;bodyParser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;body-parser&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;octokit&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Octokit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;auth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;token GITHUB_APPLICATION_TOKEN&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;


&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;owner&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;PatMurrayDEV&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;repo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;pats.website&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;_redirects&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;


&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parseLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;redirectsSection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;####&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;redirectsSection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;[\s&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;+/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;[\s&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;+/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;splits&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;createFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formattedLinks&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;formatLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;sections&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;####&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;sections&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`####\n\n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;formattedLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;\n\n####`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;sections&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;validateUnique&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;short&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;existingLink&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;short&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;existingLink&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;formatLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;longestPathLength&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;reduce&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;longestDestinationLength&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;reduce&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formattedLinks&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;padEnd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;longestPathLength&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;padEnd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;longestDestinationLength&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;formattedLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;deleteLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;urlpath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newLinks&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[];&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;urlpath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;removed&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;urlpath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;newLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;





&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;express&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// parse application/x-www-form-urlencoded&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bodyParser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;urlencoded&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;extended&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}));&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// parse application/json&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bodyParser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;view engine&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;pug&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;


&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;function &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;octokit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;repos&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getContents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;utf8&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parseLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;/delete/:id&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;function &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;octokit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;repos&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getContents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;utf8&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parseLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newLinks&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;deleteLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileContents&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;createFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`Removed &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; to _redirects`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fileContents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;base64&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;octokit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;repos&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;updateFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;sha&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;redirect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;/new&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;function &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;urlpath&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;urlpath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;code&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;code&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;octokit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;repos&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getContents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;utf8&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parseLinks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;validateUnique&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fileContents&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;createFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;redirectsFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;`Added &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newLink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; to _redirects`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fileContents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;base64&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;octokit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;repos&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;updateFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;owner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;repo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;sha&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;sha&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;redirect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Not unique&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Not unique&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Missing components&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;port&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parseInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;env&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;PORT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;listen&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;`Example app listening on port &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;!`&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/building-a-url-shortener-with-netlify-redirects&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Wed, 20 Feb 2019 04:49:22 +0000</pubDate>
				<link>https://patmurray.co/words/building-a-url-shortener-with-netlify-redirects</link>
				<guid isPermaLink="true">https://patmurray.co/words/building-a-url-shortener-with-netlify-redirects</guid>
			</item>
			
		
			
			<item>
				<title>Collecting Tips with Stripe + Apple&amp;nbsp;Pay</title>
					<description>
						&lt;p&gt;Late last year after some requests I opened a &lt;a href=&quot;https://www.paypal.me/patmurray/20&quot;&gt;PayPal.me&lt;/a&gt; page for people to donate/tip me money for my projects. I’d never set one up before because I never thought highly enough of my own work to think someone would want to tip me for it, even though it is free. However, people did. Enough people that I then started getting requests to move off PayPal for various reasons (related to fees and issues people were having.) So being me, I decided to build my own.&lt;/p&gt;

&lt;p&gt;The obvious choice to collect payments online is &lt;a href=&quot;https://stripe.com/&quot;&gt;Stripe&lt;/a&gt;. Stripe is a phenomenal payment processor, and they also support Apple Pay (and the other Payment Request APIs from non-Apple browsers), so I decided to see how quickly I could whip up a small tipping page.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/screen-shot-2019-01-07-at-6.43.30-pm.png&quot; alt=&quot;&quot; class=&quot;extrawide&quot; /&gt;&lt;/p&gt;

&lt;p&gt;From my marketing degree, and time selling software on the App Store (including having tip jars in apps), I know that I needed to have some predefined tipping amounts, with one already selected. This would be the easiest way for people to not have to worry if they’re not tipping the right amount. I settled on $5, $10, and $20, with an other field. I wanted the page to be super simple so I styled the radio choices as big buttons to choose from. I also styled the “other” text input the same way. You can see the &lt;a href=&quot;https://gist.github.com/PatMurrayDEV/9595f88a3b9f5bc1f987f2f96f82e13a&quot;&gt;css and html here&lt;/a&gt;, it covers how I make the radio buttons and text input all look like the same button.&lt;/p&gt;

&lt;p&gt;Then I had to integrate Stripe. Out of the box, Stripe is super easy. I followed their tutorial almost exactly (using a custom button). I then also added a PayPal button that linked to my page with the amount pre-filled.&lt;/p&gt;

&lt;p&gt;All the of the radio buttons had the on change handler &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onclick=&quot;amountChanged();&quot;&lt;/code&gt; and the text input has &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oninput=&quot;handleOtherChange();&quot;&lt;/code&gt;. These are:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;amountChanged&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;otheramount&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;otheramount&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;className&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;updateRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;handleOtherChange&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;otherField&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;otheramount&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;otherField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;otherField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;className&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;active&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;uncheckAmountOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;updateRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;otherField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;className&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Amount Changed sets the other field to blank, and updates Stripe. Handle Other Change checks there is something in the field, and sets the text input to active and removes the checked radio button. Handled by this lazy, but effective, function:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;uncheckAmountOptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;checked&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;checked&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;checked&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Finally I update the payment request so that the Apple Pay button has the correct amount set for it:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;updateRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;amount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getAmount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;amountoutput&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;innerText&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;amount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;paymentRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;currency&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;usd&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;total&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Tip Pat Murray&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Get Amount just queries which amount should be charged:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getAmount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;otherField&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;otheramount&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;otherField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;otherField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;radios&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementsByClassName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;radio-button&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;radios&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;radios&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;checked&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;radios&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;value&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The get amount function is also called for generating the PayPal URL and the Stipe credit card button:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;stripebutton&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;click&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;function &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Open Checkout with further options:&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Pat Murray&apos;s Tip Jar&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;currency&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;usd&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getAmount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()),&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;allowRememberMe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;preventDefault&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Lastly I process the payment using an Azure Function that just takes the token and the amount and generates a charge. I don’t even log anything in Azure as I can just see the charges in Stripe/PayPal respectively. The Function also calls Twilio to sms me when I receive a tip as it is a massive morale boost to know someone thinks so highly of my stuff.&lt;/p&gt;

&lt;p&gt;An abridged version of the function code is below&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stripe&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;stripe&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;XXX&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;module&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;function &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;token&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;token&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 
        &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;amount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; 

        &lt;span class=&quot;c1&quot;&gt;// Create a charge in the stripe API&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;charge&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;stripe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;charges&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;currency&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;usd&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Pat Murray&apos;s Tip Jar&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;metadata&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;message&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;charge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// New charge created. record charge object&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;charge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

            &lt;span class=&quot;k&quot;&gt;if &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;charge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;paid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* Defaults to 200 */&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;charge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;paid&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

                &lt;span class=&quot;c1&quot;&gt;// Sned myself an SMS with the name and contents of the charge&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;msg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;🎉 &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;charge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; tipped $&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;charge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;charge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;metadata&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&quot;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bindings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* Defaults to 200 */&lt;/span&gt;
                    &lt;span class=&quot;na&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;charge&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;paid&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

            &lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;done&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

        &lt;span class=&quot;p&quot;&gt;}).&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;c1&quot;&gt;// charge failed. Alert user that charge failed somehow&lt;/span&gt;

            &lt;span class=&quot;k&quot;&gt;switch &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;......&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

            &lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;cm&quot;&gt;/* Defaults to 200 */&lt;/span&gt;
                &lt;span class=&quot;na&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;na&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;done&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;


&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you want to see the page or even play around with Apple Pay on the web by… idk… giving me some money, visit &lt;strong&gt;&lt;a href=&quot;https://patmurray.co/tip/&quot;&gt;patmurray.co/tip&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/collecting-tips-with-stripe-apple-pay&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Mon, 07 Jan 2019 07:34:55 +0000</pubDate>
				<link>https://patmurray.co/words/collecting-tips-with-stripe-apple-pay</link>
				<guid isPermaLink="true">https://patmurray.co/words/collecting-tips-with-stripe-apple-pay</guid>
			</item>
			
		
			
			<item>
				<title>2018 Year in Numbers</title>
					<description>
						

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/2018-in-numbers copy&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Tue, 01 Jan 2019 12:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/2018-in-numbers copy</link>
				<guid isPermaLink="true">https://patmurray.co/words/2018-in-numbers copy</guid>
			</item>
			
		
			
			<item>
				<title>How to Photograph Fireworks</title>
					<description>
						&lt;p&gt;For New Years Eve 2018-19 I was going to be in a vantage point to see the Sydney Harbour fireworks in full detail up close. So at the last moment before leaving I decided to pack some camera gear. I read a few blogs on how to get good photos and here’s what I tried.&lt;/p&gt;

&lt;p&gt;All photos are shot on a Fujifilm X-T20 with a 50-140mm (75-210mm in 35mm film equivalency). What you’ll also need is a tripod, and preferably a remote shutter, but I forgot mine.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;fullwidth&quot; src=&quot;/images/dscf9783-copy.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This was shot at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ISO 200&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;124.3mm&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ƒ/7.1&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.5s&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Shooting at 0.5s shutter speed was about the fasted I discovered was good. Indeed the fireworks are bright, but by stopping down the lens and lowering the ISO we can afford to have the shutter open for longer in order get the firework tails.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;extrawide&quot; src=&quot;/images/dscf9717.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This was shot at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ISO 200&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;50mm&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ƒ/7.1&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2s&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In this image, you can see the beauty that comes from the slower shutter speed. I did need to be careful this slow as I didn’t have a release. This means some of the photos are a little shaky (especially in the city, not the fireworks) because my hand on the shutter wasn’t perfectly steady. Unfortunate.&lt;/p&gt;

&lt;p&gt;I also tried to take motor-drive continuous photos of some explosions but found them be too short to get any value.&lt;/p&gt;

&lt;p&gt;I did, however, find leaving the camera set up and capturing multiple exposures produced great results.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;fullwidth&quot; src=&quot;/images/panorama-copy.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I also shot some video, in 4K at 24fps. Pretty happy with it too. Other than bumping the ISO up and reducing shutter speed to match the frame-rate, the rest of the settings were the same:&lt;/p&gt;

&lt;div class=&quot;videoWrapper extrawide&quot; style=&quot;position: relative; padding-bottom: 56.25%; /* 16:9 */ height: 0; width: 100%;&quot;&gt;        
  &lt;iframe style=&quot;position: absolute;top: 0;left: 0;width: 100%;height: 100%;&quot; src=&quot;https://www.youtube.com/embed/ws50ak2RhoY&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;div class=&quot;photoset&quot;&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/DSCF9474.jpg&quot; /&gt;
        &lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/DSCF9498.jpg&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/DSCF9834.jpg&quot; /&gt;
        &lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/DSCF9840.jpg&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
    &lt;div class=&quot;photoset-row&quot;&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/DSCF9856.jpg&quot; /&gt;
        &lt;/figure&gt;
        &lt;figure class=&quot;photoset-item&quot;&gt;
            &lt;img src=&quot;/images/DSCF9879.jpg&quot; /&gt;
        &lt;/figure&gt;
    &lt;/div&gt;
&lt;/div&gt;


						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/how-to-photograph-fireworks&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Tue, 01 Jan 2019 07:11:06 +0000</pubDate>
				<link>https://patmurray.co/words/how-to-photograph-fireworks</link>
				<guid isPermaLink="true">https://patmurray.co/words/how-to-photograph-fireworks</guid>
			</item>
			
		
			
			<item>
				<title>Taking Stock of Projects</title>
					<description>
						&lt;p&gt;It’s the end of another year and as I have done since 2014, I’ve started working on my annual report&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Recently I announced I’d starting working a SAAS product to allow others to easily generate their own numbers based interactive reports using the rendering engine I had development this year for my own. Unfortunately, this project is now on pause—more on this in a moment.&lt;/p&gt;

&lt;p&gt;I’ve felt myself on the brink of burning out this last month as I deal with the end of the year and the success of my &lt;a href=&quot;https://patmurray.co/projects/apple-music-analyser/&quot;&gt;Apple Music Analyser&lt;/a&gt; project. This music app grew to be far more &lt;a href=&quot;https://www.macrumors.com/2018/11/29/web-app-apple-music-history/&quot;&gt;successful&lt;/a&gt; and involved than I originally planned. On top of this I’ve been trying to get a new version of my Live Photos app—Live Memories—out the door recently in time for the Holidays. &lt;strong&gt;Combining all of this has pushed me a little too hard recently&lt;/strong&gt;, so I’m taking stock and below is the status of all my projects&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;

&lt;h2 id=&quot;atlas-wallpaper--link&quot;&gt;Atlas Wallpaper — &lt;a href=&quot;https://patmurray.co/projects/atlas-wallpaper/&quot;&gt;Link&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Being only nine months old this app is way more successful than I could have ever planned. It is at a stage where it is mostly self sustaining, but to prevent daily paid upgrades from decreasing it needs some more features. A few months ago I started building a custom Style sharing function. This needs more work but is close to finished.&lt;/p&gt;

&lt;p&gt;I will be putting Atlas development on hold until early 2019, at which stage I will reduce scope for the sharing function and ship something that works. Until then, and unless something changes, &lt;strong&gt;Atlas is in maintenance mode&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;live-memories--link&quot;&gt;Live Memories — &lt;a href=&quot;https://patmurray.co/projects/live-memories/&quot;&gt;Link&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Live Memories received a big update &lt;em&gt;today&lt;/em&gt; that brings many of the key features that customers really wanted to the app, this includes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Reordering of clips&lt;/li&gt;
  &lt;li&gt;Aspect ratio previews&lt;/li&gt;
  &lt;li&gt;Ability to toggle back on the watermark after paying to remove it&lt;/li&gt;
  &lt;li&gt;Filtering the photos list by Album&lt;/li&gt;
  &lt;li&gt;Ability to jump to a particular date in an album&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In order to get this out in time for the Holidays I needed to cut some corners on UI and de-scope some features. I’ll circle back to these early-to-mid 2019 depending on customer feedback. Until then, and unless something changes, &lt;strong&gt;Live Memories is in maintenance mode&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;report-making-saas-working-title-infovisapp&quot;&gt;Report Making SAAS (working title: Infovis.app)&lt;/h2&gt;
&lt;p&gt;Work on this has come to a stop for now. It turned out to be a bigger project than I first planned and I need to rethink the archecture and technical decisions. Meaning, it is &lt;strong&gt;on hold&lt;/strong&gt; for now. It is still a project I would very much love to tackle soon, though. Just not right now.&lt;/p&gt;

&lt;h2 id=&quot;2018-annual-report&quot;&gt;2018 Annual Report&lt;/h2&gt;
&lt;p&gt;Work on this has commenced and it is the project I am most excited about. As I work on this, I will be continuing to build out the core engine that will drive the Report Making SAAS listed above. The 2017 report came out in March of 2018 (and 2016 in late January of 2017), I’m hoping to hit a begining of the year release date for my report this year. Having said that I will push back the release for my own sanity if need be. &lt;strong&gt;This is my number one project right now&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;jam-club&quot;&gt;Jam Club&lt;/h2&gt;
&lt;p&gt;Jam Club is my—not often talked about—music social network being built with &lt;a href=&quot;https://twitter.com/busbub&quot;&gt;Mitchell Busby&lt;/a&gt;. Over the last two years we have rebuilt it twice and it’s still only in beta. Recently parts of the beta broke such that it is unuseable. This is one of those projects that bounced around in my head for four years before I started work on it, a little delay shouldn’t hurt it. I plan to revist it early-to-mid 2019 with a axe to quickly cut scope and make it active again.&lt;/p&gt;

&lt;h2 id=&quot;anything-else&quot;&gt;Anything Else?&lt;/h2&gt;
&lt;p&gt;There’s also a tonne of small projects I build every so often—like &lt;a href=&quot;https://patmurray.co/projects/wall-of-apps/&quot;&gt;Wall of Apps&lt;/a&gt;, or my personal temperature tracker—these will (as always) continue in maintenance mode as they have managed to do for years. I love small projects that scratch and itch and are finished quickly, &lt;strong&gt;those sort of small projects always take precedence over bigger ones listed above&lt;/strong&gt;—my projects are hobies not businesses, I need to treat them as such.&lt;/p&gt;

&lt;h1 id=&quot;the-list&quot;&gt;The List&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;Atlas Wallpaper &lt;strong&gt;Maintenance Mode&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Live Memories &lt;strong&gt;Maintenance Mode&lt;/strong&gt; (new release &lt;em&gt;today&lt;/em&gt;)&lt;/li&gt;
  &lt;li&gt;Report Making SAAS &lt;strong&gt;On Hold&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;2018 Annual Report &lt;strong&gt;&lt;em&gt;Very&lt;/em&gt; Active Development&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Jam Club &lt;strong&gt;On Hold&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I need to try to prevent burning out, and remember to &lt;a href=&quot;https://patmurray.co/words/making-stupid-shit&quot;&gt;make stupid shit&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://2015.patmurray.co&quot;&gt;2015 in Numbers&lt;/a&gt;, &lt;a href=&quot;https://2016.patmurray.co&quot;&gt;2016: A Retrospective&lt;/a&gt;, &lt;a href=&quot;https://2017.patmurray.co&quot;&gt;2017: Year in Numbers&lt;/a&gt; &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Want this short version? Jump to the end, there’s a simple list &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/taking-stock-of-projects&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Thu, 13 Dec 2018 23:23:51 +0000</pubDate>
				<link>https://patmurray.co/words/taking-stock-of-projects</link>
				<guid isPermaLink="true">https://patmurray.co/words/taking-stock-of-projects</guid>
			</item>
			
		
			
			<item>
				<title>Dynamically Generated Open&amp;nbsp;Graph Images in Jekyll</title>
					<description>
						&lt;p&gt;This has been updated to use NodeJS. Scroll to the bottom for the update.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Since moving my this site to Jekyll I’ve been thinking of ways I could leverage all the powers of Jekyll to my advantage, one of those I came up with recently was Open Graph. To find out more about Open Graph itself, please &lt;a href=&quot;http://ogp.me&quot;&gt;visit the website&lt;/a&gt;, this post won’t describe everything you need to know about OG (and its Twitter counterpart.)&lt;/p&gt;

&lt;p&gt;I love adding large &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;og:image&lt;/code&gt;s to my website for sharing on Twitter. I usually craft a nice artwork that will render for each share. For example with my app &lt;a href=&quot;/projects/atlas-wallpaper&quot;&gt;Atlas Wallpaper&lt;/a&gt;, if you tweet the website url (&lt;a href=&quot;https://atlaswallpaper.app&quot;&gt;https://atlaswallpaper.app&lt;/a&gt;) there is a nice big banner:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/atlas-tweet.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I wanted these for my blog posts too, but didn’t want to have to create them each tie by hand, so I set out to make a Jekyll plugin to make them for me. I’ve never used Ruby before and don’t have much experience dynamically generating images so the learning curve wasn’t gradual but I got it done and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;og:image&lt;/code&gt; for this post is:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/opengraph/1d07581c92279e5987950f879ed408adaef99f51.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;how-it-works&quot;&gt;How it works:&lt;/h1&gt;

&lt;p&gt;Firstly, I didn’t want to mess around with ruby gems just yet so I just created the plugin in my site’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_plugins&lt;/code&gt; folder. This will need to be rectified in the future, but it works for now. Secondly, I know I wanted to have one on any page, but not every page. So it needed to be called from Liquid (the Jekyll templating engine.) With these two requirements set I went to build it.&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Jekyll&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;OGFilter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Liquid&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Tag&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;no&quot;&gt;Liquid&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Template&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;register_tag&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;og_filter&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Jekyll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;OGFilter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I created a class called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OGFilter&lt;/code&gt; which is a Liquid tag (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{% these things %}&lt;/code&gt;) interpreter. Now anywhere I type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{% og_filter %}&lt;/code&gt; in a liquid page a new image will be created and the URL inserted at that point. Pretty neat hey?&lt;/p&gt;

&lt;p&gt;Well Jekyll plugins can come in a few flavours, each with its own required definitions/functions/methods. The &lt;em&gt;Tag&lt;/em&gt; type must contain:&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;initialize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tag_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokens&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;… and …&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The first one takes the parameters needed from the tag, and render is where the actual rendering happens. For the simple use case I have, I took no parameters and as such my initialise is just a call to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;super&lt;/code&gt; and nothing else. So &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;render&lt;/code&gt; is where the magic happens.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;context&lt;/code&gt; parameter is from Liquid and in it you can access any of the same variables you have in your page, for example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;page&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;site&lt;/code&gt;  (and all their related variables.) This makes it really easy to get page attributes for use.&lt;/p&gt;

&lt;p&gt;This uses ImageMagick to create the image, and a static background (the drop shadow) created in Sketch. It also uses an sha hash for file names. As such the requirements for this module are:&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;rmagick&apos;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;rickshaw&apos;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And of course, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jekyll&lt;/code&gt;, which is already included. I take a hash of the page for the filename, get the background image, overlay the text of the title, output that to a folder, and return the URL. It’s pretty simple once you look at it:&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;render&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    
    
    &lt;span class=&quot;c1&quot;&gt;# This creates an image id hash from the page id in Jekyll&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;page&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;to_sha1&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# Check if the file already exists in the &apos;opengraph&apos; foldler, return early if it does&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;exist?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/opengraph/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.png&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; 
        &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;File exists &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/opengraph/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.png}&quot;&lt;/span&gt;       
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
        
        &lt;span class=&quot;c1&quot;&gt;# Create an image list from ImageMagic using the base image&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;img&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Magick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;ImageList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/assets/artboard.png&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;# Create a caption of the title in a smaller area and center aligned. &lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Magick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Image&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;caption:&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;page&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;fill&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;#D85F46&apos;&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;font&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;SF-Pro-Display-Medium&quot;&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;pointsize&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;size&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;800x500&quot;&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;gravity&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Magick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CenterGravity&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;background_color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;none&quot;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;first&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;# Composite the two images over each other (witht the smaller text image being centred)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;img&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;composite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Magick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CenterGravity&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Magick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;OverCompositeOp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;# Write out the file&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;pwd&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/opengraph/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.png&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt; 
    
    &lt;span class=&quot;c1&quot;&gt;# Get the site variable&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;site&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;registers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# Add the file to the list of static_files needed to be copied to the _site&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;static_files&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Jekyll&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;StaticFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;site&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;/opengraph/&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.png&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;s2&quot;&gt;&quot;/opengraph/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.png&quot;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It works (with some hiccups) and now I just need to improve the image to not look terrible. Thanks to the way I can just regenerate my entire site with a button click using Jekyll, once I improve it all the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;og:image&lt;/code&gt;s will be improved immediately too—no effort from me.&lt;/p&gt;

&lt;p&gt;Let me know of you use this too on your blog!&lt;/p&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;update&quot;&gt;Update&lt;/h1&gt;

&lt;p&gt;Imagemagick’s text render requires ghostscript which is unfortunately not available in all locations, like my web host Netlify. As such the above code needed to run on a local machine or VPS before deploying to Netlify for each new blog post I wrote. This was annoying as it prevented me quickly deploying new blog posts.&lt;/p&gt;

&lt;p&gt;In my search for a way to get ghostscript installed on Netlify, I recalled that Netlify actually installs dependencies for all package managers regardless of what the build instructions are. With this in mind I decided to give NodeJS a try for this. I know how to layout a canvas, render it to an image and finally save it to a file, so I started there. I found a package that allows the use of canvas in non-browser enviroments without needing phantomjs or similar. Using this I translated my ruby layout code to canvas and had it output a file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;const canvas = createCanvas(1200, 630);
const ctx = canvas.getContext(&apos;2d&apos;);

// Draw cat with lime helmet
loadImage(&apos;./assets/artboard2.png&apos;).then((image) =&amp;gt; {
    ctx.drawImage(image, 0, 0, 1200, 630);

    ctx.textBaseline = &quot;top&quot;;

    // Write title
    ctx.font = &apos;90px SF-Pro-Display-Medium&apos;;
    // ctx.font = &apos;90px sans-serif&apos;;
    ctx.fillStyle = &apos;#ffffff&apos;;
    wrapText(ctx, program.title, 80, 80, 1100, 100);
    // ctx.fillText(program.title, 80, 80);

    // Write date
    ctx.textBaseline = &quot;bottom&quot;;
    ctx.font = &apos;40px SF-Pro-Display-Medium&apos;;
    ctx.fillStyle = &apos;#EBAFA2&apos;;
    ctx.fillText(program.date, 80, 555);

    const out = fs.createWriteStream(program.filename)
    const stream = canvas.createPNGStream()
    stream.pipe(out)
    out.on(&apos;finish&apos;, () =&amp;gt; console.log(&apos;The PNG file was created.&apos;))

})
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This code looks very similar (with some slight changes to pixels between the two systems) to the ruby version above.&lt;/p&gt;

&lt;p&gt;This posed the next issue, getting Jekyll to talk to Node… I decided to turn my node script into a command line tool and use the ruby &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;system&lt;/code&gt; function to call it. I installed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;commander&lt;/code&gt; and make the division of duties decision to have node just render the image, so the no string or date manipulation. As such the script takes three parameters:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;program
    .option(&apos;-t, --title &amp;lt;title&amp;gt;&apos;, &apos;The title of the article&apos;)
    .option(&apos;-d, --date &amp;lt;date&amp;gt;&apos;, &apos;The publish date of the article&apos;)
    .option(&apos;-f, --filename &amp;lt;filename&amp;gt;&apos;, &apos;The ogimage filename&apos;)
    .parse(process.argv);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Title, date (a string of the date already formatted), and filename (the full filename for the resultant image). I kept the majority of the ruby script the same as before:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;def render(context)
    
    # This creates an image id hash from the page id in Jekyll
    id = context[&quot;page&quot;][&quot;id&quot;].to_sha1

    # Check if the file already exists in the &apos;opengraph&apos; foldler, return early if it does
    if(File.exist?(&quot;#{Dir.pwd}/opengraph/#{id}.png&quot;)) 
        puts &quot;File exists #{Dir.pwd}/opengraph/#{id}.png}&quot;       
    else
        
        # the script to be called with the formatted title, and resolving filename
        script = &quot;node #{Dir.pwd}/opengraph.js -t &apos;#{context[&quot;page&quot;][&quot;title&quot;]}&apos; -d &apos;#{context[&quot;page&quot;][&quot;date&quot;].strftime(&quot;%e %B %Y&quot;)}&apos; -f &apos;#{Dir.pwd}/opengraph/#{id}.png&apos;&quot;

        system(script)

        puts script
    end 
    
    # Get the site variable
    site = context.registers[:site]

    # Add the file to the list of static_files needed to be copied to the _site
    site.static_files &amp;lt;&amp;lt; Jekyll::StaticFile.new(site, site.source, &quot;/opengraph/&quot;, &quot;#{id}.png&quot;)

    &quot;/opengraph/#{id}.png&quot;

end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;By calling the script &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node #{Dir.pwd}/opengraph.js&lt;/code&gt; it can run without having to build or anything, just install dependencies and be in the correct &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pwd&lt;/code&gt; and you’re good. This works perfectly with Netliy’s deployment model.&lt;/p&gt;

&lt;p&gt;This means that the date formatting and hashing of the id—I was already using—continue to work, saving me having to regenerate images for the backlog, allowing for incremental builds&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Further, canvas doesn’t natively support word wrapping like imagemagick did. Fortunately, the internet has solved this problem for me so I just stole this short function:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;function wrapText(context, text, x, y, maxWidth, lineHeight) {
    var words = text.split(&apos; &apos;);
    var line = &apos;&apos;;

    for (var n = 0; n &amp;lt; words.length; n++) {
        var testLine = line + words[n] + &apos; &apos;;
        var metrics = context.measureText(testLine);
        var testWidth = metrics.width;
        if (testWidth &amp;gt; maxWidth &amp;amp;&amp;amp; n &amp;gt; 0) {
            context.fillText(line, x, y);
            line = words[n] + &apos; &apos;;
            y += lineHeight;
        } else {
            line = testLine;
        }
    }
    context.fillText(line, x, y);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Lastly, fonts. The whole issue with needing ghostscript was because text needs fonts. Thankfully the canvas package I used allows for the loading for font files to use. So I just copied in my font of choice and load it in before creating the canvas.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;registerFont(&apos;./fonts/SF-Pro-Display-Medium.otf&apos;, { family: &apos;SF-Pro-Display-Medium&apos; })
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The beauty of this solution is it will run anywhere that node can run, without any system dependencies. Polygot systems win again!&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Also saves having to deal with dates in javascript because that is too much of a pain I don’t need. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/jekyll-open-graph-images&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sat, 06 Oct 2018 06:42:56 +0000</pubDate>
				<link>https://patmurray.co/words/jekyll-open-graph-images</link>
				<guid isPermaLink="true">https://patmurray.co/words/jekyll-open-graph-images</guid>
			</item>
			
		
			
			<item>
				<title>Popular Movies I Haven’t Seen</title>
					<description>
						&lt;p&gt;The other day I stumbled across Marco Arment’s 2015 blog post titled “&lt;a href=&quot;https://marco.org/2015/04/11/popular-movies-i-havent-seen&quot;&gt;Popular movies I haven’t seen in the last 15 years&lt;/a&gt;”, where he listed just how few Academy Award Best Picture nominated, or top grossing, films he had seen. I went through the list and realised I have seen a lot of them.&lt;/p&gt;

&lt;p&gt;(Aside, I also maintain—well, it’s a little out of date—a list of every movie I’ve seen at &lt;a href=&quot;https://watched.patmurray.co&quot;&gt;watched.patmurray.co&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;I also concluded that I have seen far more Best Picture films than top grossing, and as I get older that ratio is becoming stronger and stronger. I do also see fewer &lt;em&gt;“popular”&lt;/em&gt; films than I did during school (see the late 2000’s). Anyway, here’s the list but including the films since 2014 &lt;sup id=&quot;fnref:fn1&quot;&gt;&lt;a href=&quot;#fn:fn1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot; role=&quot;doc-noteref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;…&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Key&lt;/em&gt;: &lt;strong&gt;Seen it&lt;/strong&gt;, Haven’t seen it&lt;/p&gt;

&lt;h3 id=&quot;2000&quot;&gt;2000&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Meet the Parents&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cast Away&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Chocolat&lt;/li&gt;
  &lt;li&gt;Crouching Tiger, Hidden Dragon&lt;/li&gt;
  &lt;li&gt;Dinosaur&lt;/li&gt;
  &lt;li&gt;Erin Brockovich&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Gladiator&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;How the Grinch Stole Christmas&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mission: Impossible II&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Perfect Storm&lt;/li&gt;
  &lt;li&gt;Traffic&lt;/li&gt;
  &lt;li&gt;What Lies Beneath&lt;/li&gt;
  &lt;li&gt;What Women Want&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;X-Men&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2001&quot;&gt;2001&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Harry Potter and the Philosopher’s Stone&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Monsters, Inc.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Shrek&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;A Beautiful Mind&lt;/li&gt;
  &lt;li&gt;Gosford Park&lt;/li&gt;
  &lt;li&gt;Hannibal&lt;/li&gt;
  &lt;li&gt;In the Bedroom&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Jurassic Park III&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Moulin Rouge&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Ocean’s Eleven&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pearl Harbor&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Planet of the Apes&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Lord of the Rings: The Fellowship of the Ring&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Mummy Returns&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2002&quot;&gt;2002&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Die Another Day&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Chicago&lt;/li&gt;
  &lt;li&gt;Gangs of New York&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Harry Potter and the Chamber of Secrets&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Ice Age&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Men in Black II&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Minority Report&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;My Big Fat Greek Wedding&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Signs&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Spider-Man&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Star Wars Episode II: Attack of the Clones&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Hours&lt;/li&gt;
  &lt;li&gt;The Lord of the Rings: The Two Towers&lt;/li&gt;
  &lt;li&gt;The Pianist&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2003&quot;&gt;2003&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Bruce Almighty&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Finding Nemo&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bad Boys II&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Lost in Translation&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Master and Commander: The Far Side of the World&lt;/li&gt;
  &lt;li&gt;Mystic River&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pirates of the Caribbean: The Curse of the Black Pearl&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Seabiscuit&lt;/li&gt;
  &lt;li&gt;Terminator 3: Rise of the Machines&lt;/li&gt;
  &lt;li&gt;The Last Samurai&lt;/li&gt;
  &lt;li&gt;The Lord of the Rings: The Return of the King&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Matrix Reloaded&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Matrix Revolutions&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;X2&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2004&quot;&gt;2004&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Meet the Fockers&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Incredibles&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Finding Neverland&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Harry Potter and the Prisoner of Azkaban&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Million Dollar Baby&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Ocean’s Twelve&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Ray&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Shark Tale&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Shrek 2&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Sideways&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Spider-Man 2&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Aviator&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Day After Tomorrow&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Passion of the Christ&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Troy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2005&quot;&gt;2005&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Batman Begins&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Brokeback Mountain&lt;/li&gt;
  &lt;li&gt;Capote&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Charlie and the Chocolate Factory&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Crash&lt;/li&gt;
  &lt;li&gt;Good Night, and Good Luck&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Harry Potter and the Goblet of Fire&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Hitch&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;King Kong&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Madagascar&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mr. and Mrs. Smith&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Munich&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Star Wars Episode III: Revenge of the Sith&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Chronicles of Narnia: The Lion, the Witch and the Wardrobe&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;War of the Worlds&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2006&quot;&gt;2006&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Casino Royale&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cars&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Babel&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Happy Feet&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Ice Age: The Meltdown&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Letters from Iwo Jima&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Little Miss Sunshine&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mission: Impossible III&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Night at the Museum&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pirates of the Caribbean: Dead Man’s Chest&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Superman Returns&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Da Vinci Code&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Departed&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Queen&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;X-Men: The Last Stand&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2007&quot;&gt;2007&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;I Am Legend&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Juno&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Ratatouille&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Simpsons Movie&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;There Will Be Blood&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Transformers&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;300&lt;/li&gt;
  &lt;li&gt;Atonement&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Harry Potter and the Order of the Phoenix&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Michael Clayton&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;National Treasure: Book of Secrets&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;No Country for Old Men&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pirates of the Caribbean: At World’s End&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Shrek the Third&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Spider-Man 3&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2008&quot;&gt;2008&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;The Dark Knight&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Quantum of Solace&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;WALL-E&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Slumdog Millionaire&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Milk&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Hancock&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Indiana Jones and the Kingdom of the Crystal Skull&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Frost/Nixon&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Iron Man&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Kung Fu Panda&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Madagascar: Escape 2 Africa&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mamma Mia!&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Chronicles of Narnia: Prince Caspian&lt;/li&gt;
  &lt;li&gt;The Curious Case of Benjamin Button&lt;/li&gt;
  &lt;li&gt;The Reader&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2009&quot;&gt;2009&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Inglorious Bastards&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Up&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Up in the Air&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2012&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;A Serious Man&lt;/li&gt;
  &lt;li&gt;An Education&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Angels &amp;amp; Demons&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Avatar&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;District 9&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Harry Potter and the Half-Blood Prince&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Ice Age: Dawn of the Dinosaurs&lt;/li&gt;
  &lt;li&gt;Precious&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Sherlock Holmes&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Blind Side&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Hangover&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Hurt Locker&lt;/li&gt;
  &lt;li&gt;The Twilight Saga: New Moon&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Transformers: Revenge of the Fallen&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2010&quot;&gt;2010&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Inception&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Social Network&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Toy Story 3&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;127 Hours&lt;/li&gt;
  &lt;li&gt;Alice in Wonderland&lt;/li&gt;
  &lt;li&gt;Black Swan&lt;/li&gt;
  &lt;li&gt;Despicable Me&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Harry Potter and the Deathly Hallows Part 1&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;How to Train Your Dragon&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Iron Man 2&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Shrek Forever After&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Tangled&lt;/li&gt;
  &lt;li&gt;The Fighter&lt;/li&gt;
  &lt;li&gt;The Kids Are All Right&lt;/li&gt;
  &lt;li&gt;The Kings’ Speech&lt;/li&gt;
  &lt;li&gt;The Twilight Saga: Eclipse&lt;/li&gt;
  &lt;li&gt;True Grit&lt;/li&gt;
  &lt;li&gt;Winter’s Bone&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2011&quot;&gt;2011&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Cars 2&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Extremely Loud and Incredibly Close&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Fast Five&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Harry Potter and the Deathly Hallows Part 2&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Hugo&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Kung Fu Panda 2&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Midnight in Paris&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mission: Impossible — Ghost Protocol&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Moneyball&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pirates of the Caribbean: On Stranger Tides&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Artist&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Descendants&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Hangover Part II&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Help&lt;/li&gt;
  &lt;li&gt;The Smurfs&lt;/li&gt;
  &lt;li&gt;The Tree of Life&lt;/li&gt;
  &lt;li&gt;The Twilight Saga: Breaking Dawn, Part 1&lt;/li&gt;
  &lt;li&gt;Transformers: Dark of the Moon&lt;/li&gt;
  &lt;li&gt;War Horse&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2012&quot;&gt;2012&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Skyfall&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Avengers&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Dark Knight Rises&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Hunger Games&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Amour&lt;/li&gt;
  &lt;li&gt;Argo&lt;/li&gt;
  &lt;li&gt;Beasts of the Southern Wild&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Django Unchained&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Ice Age: Continental Drift&lt;/li&gt;
  &lt;li&gt;Les Misérables&lt;/li&gt;
  &lt;li&gt;Life of Pi&lt;/li&gt;
  &lt;li&gt;Lincoln&lt;/li&gt;
  &lt;li&gt;Madagascar 3: Europe’s Most Wanted&lt;/li&gt;
  &lt;li&gt;Men in Black 3&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Silver Linings Playbook&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Amazing Spider-Man&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Hobbit: An Unexpected Journey&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Twilight Saga: Breaking Dawn, Part 2&lt;/li&gt;
  &lt;li&gt;Zero Dark Thirty&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2013&quot;&gt;2013&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Frozen&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Gravity&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Her&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Monsters University&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;12 Years a Slave&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;American Hustle&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Captain Phillip&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dallas Buyers Club&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Despicable Me 2&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Fast &amp;amp; Furious 6&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Iron Man 3&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Man of Steel&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Nebraska&lt;/li&gt;
  &lt;li&gt;Philomena&lt;/li&gt;
  &lt;li&gt;The Hobbit: The Desolation of Smaug&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Hunger Games: Catching Fire&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Wolf of Wall Street&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Thor: The Dark World&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;2014&quot;&gt;2014&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;The Hunger Games: Mockingjay, Part 1&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Interstellar&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;American Sniper&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Birdman&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Boyhood&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Captain America: The Winter Soldier&lt;/li&gt;
  &lt;li&gt;Dawn of the Planet of the Apes&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Guardians of the Galaxy&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Maleficent&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Selma&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Amazing Spider-Man 2&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Grand Budapest Hotel&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Hobbit: The Battle of the Five Armies&lt;/li&gt;
  &lt;li&gt;The Imitation Game&lt;/li&gt;
  &lt;li&gt;The Theory of Everything&lt;/li&gt;
  &lt;li&gt;Transformers: Age of Extinction&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Whiplash&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;X-Men: Days of Future Past&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;2015&quot;&gt;2015&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Spotlight&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Big Short&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bridge of Spies&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Brooklyn&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mad Max: Fury Road&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Martian&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;The Revenant&lt;/li&gt;
  &lt;li&gt;Room&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Star Wars: The Force Awakens&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Jurassic World&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Furious 7&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Avengers: Age of Ultron&lt;/li&gt;
  &lt;li&gt;Minions&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Spectre&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Inside Out&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mission: Impossible – Rogue Nation&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Hunger Games: Mockingjay – Part 2&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;2016&quot;&gt;2016&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Moonlight&lt;/li&gt;
  &lt;li&gt;Arrival&lt;/li&gt;
  &lt;li&gt;Fences&lt;/li&gt;
  &lt;li&gt;Hacksaw Ridge&lt;/li&gt;
  &lt;li&gt;Hell or High Water&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Hidden Figures&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;La La Land&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Lion&lt;/li&gt;
  &lt;li&gt;Manchester by the Sea&lt;/li&gt;
  &lt;li&gt;Captain America: Civil War&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Rogue One: A Star Wars Story&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Finding Dory&lt;/li&gt;
  &lt;li&gt;Zootopia&lt;/li&gt;
  &lt;li&gt;The Jungle Book&lt;/li&gt;
  &lt;li&gt;The Secret Life of Pets&lt;/li&gt;
  &lt;li&gt;Batman v Superman: Dawn of Justice&lt;/li&gt;
  &lt;li&gt;Fantastic Beasts and Where to Find Them&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Deadpool&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Suicide Squad&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;2017&quot;&gt;2017&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;The Shape of Water&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Call Me by Your Name&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Darkest Hour&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dunkirk&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Get Out&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Lady Bird&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Phantom Thread&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Post&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Three Billboards Outside Ebbing, Missouri&lt;/li&gt;
  &lt;li&gt;Star Wars: The Last Jedi&lt;/li&gt;
  &lt;li&gt;Beauty and the Beast&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Fate of the Furious&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Despicable Me 3&lt;/li&gt;
  &lt;li&gt;Jumanji: Welcome to the Jungle&lt;/li&gt;
  &lt;li&gt;Spider-Man: Homecoming&lt;/li&gt;
  &lt;li&gt;Cars 3&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Guardians of the Galaxy Vol. 2&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Thor: Ragnarok&lt;/li&gt;
  &lt;li&gt;Wonder Woman&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/chart.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:fn1&quot;&gt;
      &lt;p&gt;The list is taken from Marco up to 2014, and then I created it using Wikipedia for the subsequent years &lt;a href=&quot;#fnref:fn1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/popular-movies-i-havent-seen&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Thu, 27 Sep 2018 06:42:56 +0000</pubDate>
				<link>https://patmurray.co/words/popular-movies-i-havent-seen</link>
				<guid isPermaLink="true">https://patmurray.co/words/popular-movies-i-havent-seen</guid>
			</item>
			
		
			
			<item>
				<title>Wall of Apps</title>
					<description>
						&lt;p&gt;&lt;a href=&quot;https://patmurray.co/podcast/3/&quot;&gt;Episode Three&lt;/a&gt; of my podcast &lt;em&gt;Making Things&lt;/em&gt;—yeah did you know I have a podcast about making things, called &lt;a href=&quot;https://patmurray.co/podcast/&quot;&gt;&lt;em&gt;Making Things&lt;/em&gt;&lt;/a&gt;?—was recorded while I was making my latest side project. This post covers it in some more but possibly overlapping details.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;At WWDC this year as we were waiting to be let into the keynote, through the door I could see this huge—absolutely monstrous—screen with a wall of apps on it. This was the preshow artwork, this massive screen slowly scrolling through famous apps, it was a game to spot the ones you recognised or even your own.&lt;/p&gt;

&lt;p&gt;Ever since WWDC this year I wanted to build my own one that could be used at conferences or meetups. Last week I did just that, it is available at &lt;a href=&quot;https://wallofapps.com&quot;&gt;wallofapps.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://d33wubrfki0l68.cloudfront.net/57e2ded6eb7291a0a1a04b1ae0615bce66636d1c/b0e40/images/screen-shot-2018-09-19-at-6.11.14-pm.png&quot; alt=&quot;&quot; class=&quot;extrawide&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It has a few features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;It pulls in the current top free and paid apps from the US to start&lt;/li&gt;
  &lt;li&gt;You can customise the wall using just App Store URLs&lt;/li&gt;
  &lt;li&gt;Walls can be exported, shared, and reimported easily using the edit interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The webpage is a series of CSS grids inside another CSS grid. Each column—of seven apps as per the WWDC wall—is a single grid, and then all of those together make another grid. These are repeated out until the whole wall fills the screen (if there aren’t many apps in the wall, or it is very very wide).&lt;/p&gt;

&lt;p&gt;To animate the wall, I some javascript that adjusts the left margin of the larger grid slowly. It also duplicates the grid when needed to ensure the wall never ends.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/PatMurrayDEV/wallofapps&quot;&gt;All the code is open on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The website relies heavily on the LocalStorage APIs to keep the list of apps for the wall, and features fullscreen mode—along with detecting when fullscreen to hide UI elements—which are all APIs I’ve never used before.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/screen-shot-2018-09-19-at-6.11.29-pm.png&quot; alt=&quot;null&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Overall it was a fun project to build and came together quite quickly! Check it out: &lt;a href=&quot;https://wallofapps.com&quot;&gt;wallofapps.com&lt;/a&gt; (it looks great on a projector in fullscreen)&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/wall-of-apps&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Wed, 19 Sep 2018 07:54:22 +0000</pubDate>
				<link>https://patmurray.co/words/wall-of-apps</link>
				<guid isPermaLink="true">https://patmurray.co/words/wall-of-apps</guid>
			</item>
			
		
			
			<item>
				<title>New Blog; Who Dis?</title>
					<description>
						&lt;p&gt;Since I properly started blogging I have used a (very hacked up) Tumblr blog. This was fine for a while but over time it proved to be more trouble than the benefits I got from it. I’ve been wanting to move it off it over the last couple of years as I have moved my hosting to Netlify and static files (with https support).&lt;/p&gt;

&lt;p&gt;As such this week I decided to take the plunge and move my blog to Jekyll on my site. It still needs some work, but it &lt;em&gt;functions&lt;/em&gt;! The tech stack is Jekyll static site running on Netlify being pulled from GitHub, with content created in NetlifyCMS. &lt;strong&gt;It is awesome!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(I’ve also cleared out some older posts that are no longer relevent, especially from that time I tried to run a link-blog.)&lt;/p&gt;

&lt;p&gt;This stack also powers the backend for my podcast so it’s all integrated. I want to add a page for projects soon too, then I think I’ll have a modern functioning website I’m actually proud of!&lt;/p&gt;

&lt;p&gt;Yay!&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/new-blog-who-dis&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Tue, 04 Sep 2018 00:57:02 +0000</pubDate>
				<link>https://patmurray.co/words/new-blog-who-dis</link>
				<guid isPermaLink="true">https://patmurray.co/words/new-blog-who-dis</guid>
			</item>
			
		
			
			<item>
				<title>Making Stupid Shit</title>
					<description>
						&lt;p&gt;I’ve been thinking a lot about side projects recently. About what they mean to me, why I love them, and why some become burdens. About which ones are successful, the ones that fizzled out, and the ones that never even made it off the launch pad. About what even is success in a side project. About overcoming others&amp;rsquo; expectations and making what I want to make.&lt;/p&gt;

&lt;p&gt;In the last twelve months some of my side projects have become incredibly successful by external measures; &lt;a href=&quot;https://Pride.Codes&quot;&gt;Pride.Codes&lt;/a&gt;, &lt;a href=&quot;https://livememories.co&quot;&gt;Live Memories&lt;/a&gt;, and of course &lt;a href=&quot;https://atlas.patmurray.co&quot;&gt;Atlas&lt;/a&gt;. Others haven’t even been published, or are still brewing. &lt;em&gt;All of them serious&lt;/em&gt;, though.&lt;/p&gt;

&lt;p&gt;While searching through the archives of &lt;a href=&quot;https://zachholman.com/about&quot;&gt;Zach Holman’s blog&lt;/a&gt; as I prepare my talk for &lt;a href=&quot;http://2018.devworld.com.au&quot;&gt;/dev/world/2018&lt;/a&gt; conference, I came across a &lt;a href=&quot;https://zachholman.com/2010/10/facelette-on-techcrunch-in-three-hours-and-zero-dollars/&quot;&gt;piece from 2010&lt;/a&gt;. It struck a cord with me. The sentiment? &lt;strong&gt;People should make more small stupid hacks/projects for no gain, no purpose, other than whimsy&lt;/strong&gt;. Not to start a “&lt;em&gt;start-up&lt;/em&gt;”—for the fiftieth time, no Atlas is not a start up—not to “&lt;em&gt;learn some new technology&lt;/em&gt;”. &lt;strong&gt;Just for the sake of making something silly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It made me think of a friend at PennApps in the Fall of 2016. He didn’t have a team, and didn’t come up with some hackathon winning idea in the first few hours. How was he going to occupy his next 36 hours? By making something highly silly, of course. He made a pay-per-use Terminal, with in-app purchases to buy coins to spend per character and per command. It served no purpose. &lt;em&gt;It was great&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Sometimes my side projects begin to feel like work, and then I resent them. I build things out of the simple pleasure of building and solving problems, but when projects start to look too much like businesses, or become too successful from the outside, they take on a new role. I have new responsibilities. Simply; they cause me unwanted stress.&lt;/p&gt;

&lt;p&gt;Since it’s the new year—well, &lt;em&gt;financial&lt;/em&gt; new year; but a line-in-the-sand is a line-in-the-sand—I’m going to make a change. I’m going to keep working on my current, more serious, side projects. However, I’m going to strive to add no more new ones. And I’m going to be ok with not working on them for periods of time if I’m not enjoying it.&lt;/p&gt;

&lt;p&gt;Further, I’m going to start making more small stupid things just because. Because projects that encompass whimsy, humour, and stupid shit are the ones &lt;a href=&quot;http://endless.horse&quot;&gt;I always remember the most&lt;/a&gt;. I’m not going to hold myself to any schedule, no “one every fortnight” or anything silly like that. Of course I did think about it, but that seems to go against the whole purpose of this shift.&lt;/p&gt;

&lt;p&gt;Also, unless I really need to for cost reasons, or it adds to the humour and fun of the project, I have no intention of charging money for them.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I want to make stupid shit, for the sake of making stupid shit&lt;/em&gt;. &lt;strong&gt;Bring back the fun in side projects&lt;/strong&gt;.&lt;/p&gt; 

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/making-stupid-shit&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sun, 01 Jul 2018 21:44:32 +0000</pubDate>
				<link>https://patmurray.co/words/making-stupid-shit</link>
				<guid isPermaLink="true">https://patmurray.co/words/making-stupid-shit</guid>
			</item>
			
		
			
			<item>
				<title>2017 Year in Numbers</title>
					<description>
						

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/2017-in-numbers&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Mon, 01 Jan 2018 12:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/2017-in-numbers</link>
				<guid isPermaLink="true">https://patmurray.co/words/2017-in-numbers</guid>
			</item>
			
		
			
			<item>
				<title>Introducing Live Memories for iPhone</title>
					<description>
						&lt;p&gt;Live Photos are possibly the greatest addition to cameras in a long time. They allow us to finally have that Harry Potter photo effect, and capture parts of the world we used to miss. Wouldn&amp;rsquo;t it be great if you could turn your Live Photos in a video memory to keep for forever? Introducing &lt;b&gt;Live Memories&lt;/b&gt; for iPhone. &lt;/p&gt;
&lt;img class=&quot;extrawide&quot; src=&quot;https://livememories.co/IMG_0049.JPG&quot; /&gt;&lt;p&gt;Live Memories allows you to quickly and easily create videos combining your Live Photos together into one memory. Memories can be exported in square for Social Media, wide for video sharing (like YouTube and Vimeo), and tall for Stories features. &lt;/p&gt;
&lt;p&gt;Live Memories also does the smarts and hard work for you, by intelligently combining photos together to remove overlaps, all you need to do it select the photos you want to group together and it export. &lt;/p&gt;
&lt;h4&gt;&lt;center&gt;&lt;em&gt;Try it out today for sharing your memories of the Holiday period!&lt;/em&gt;&lt;/center&gt;&lt;/h4&gt;
&lt;p&gt;
&lt;a href=&quot;https://livememories.co&quot;&gt;&lt;img style=&quot;width: 180px&quot; src=&quot;https://linkmaker.itunes.apple.com/images/badges/en-us/badge_appstore-lrg.svg&quot; alt=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/introducing-live-memories-for-iphone&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Thu, 21 Dec 2017 03:14:11 +0000</pubDate>
				<link>https://patmurray.co/words/introducing-live-memories-for-iphone</link>
				<guid isPermaLink="true">https://patmurray.co/words/introducing-live-memories-for-iphone</guid>
			</item>
			
		
			
			<item>
				<title>Introducing Pride.Codes</title>
					<description>
						&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;427&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/f798c4362493d80ad85b1d377d17e494/tumblr_inline_ow7nh4jU561t0eqx6_1280.png&quot;&gt;&lt;img class=&quot;fullwidth&quot; style=&quot;max-height: 380px; overflow: hidden;  object-fit: cover;&quot; src=&quot;https://78.media.tumblr.com/563d8dd04780883604fdda0bf12d30c6/tumblr_inline_p7ixktk9IE1t0eqx6_1280.png&quot; data-orig-height=&quot;427&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/f798c4362493d80ad85b1d377d17e494/tumblr_inline_ow7nh4jU561t0eqx6_1280.png&quot;/&gt;&lt;/figure&gt;&lt;p&gt;Last week the High Court of Australia ruled that the controversial Marriage Equality Postal Survey was legal. I was gutted. On the bus home that afternoon was thinking to myself, “What can I do?” Obviously I can, and will, contribute to traditional canvassing methods, but that’s not my expertise. &lt;/p&gt;&lt;p&gt;What from my wheelhouse could I offer to the biggest political campaign of my life?&lt;/p&gt;&lt;p&gt;That night I was Twitter messaging with Jack Skinner about how terrible the High Court ruling was, and wanting to help. I floated the idea of using code. I am after all a programmer, and we came up with the idea for a pride corner. From that idea grew &lt;a href=&quot;https://pride.codes&quot;&gt;Pride Codes.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It’s a set of widgets any website can add with only one line of simple code that allow them to show support for LGBTQ members of the tech community and beyond. The most popular widget is the Vote Yes corner in support of the ongoing Marriage Equality Postal Survey. There are also other widgets, and it’s growing with time.&lt;/p&gt;&lt;p&gt;Check it out! I’m really excited for it.&lt;/p&gt;&lt;figure data-orig-width=&quot;256&quot; data-orig-height=&quot;256&quot;&gt;&lt;img src=&quot;https://78.media.tumblr.com/64d0fe0de03537a102a7eee9b6497cab/tumblr_inline_ow7nhpoS491t0eqx6_1280.png&quot; data-orig-width=&quot;256&quot; data-orig-height=&quot;256&quot;/&gt;&lt;/figure&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/introducing-pridecodes&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Wed, 13 Sep 2017 08:57:15 +0000</pubDate>
				<link>https://patmurray.co/words/introducing-pridecodes</link>
				<guid isPermaLink="true">https://patmurray.co/words/introducing-pridecodes</guid>
			</item>
			
		
			
			<item>
				<title>Farewell Gibbs Rules — Video</title>
					<description>
						&lt;div class=&quot;videoWrapper extrawide&quot; style=&quot;position: relative;
padding-bottom: 56.25%;
/* 16:9 */
height: 0;
width: 100%;&quot;&gt;
                &lt;iframe style=&quot;position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;&quot; src=&quot;https://www.youtube.com/embed/Q0A-8Q_2wqs?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=https://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
                &lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/159222962518&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Wed, 05 Apr 2017 10:20:09 +0000</pubDate>
				<link>https://patmurray.co/words/159222962518</link>
				<guid isPermaLink="true">https://patmurray.co/words/159222962518</guid>
			</item>
			
		
			
			<item>
				<title>My Year: 2016 — Video</title>
					<description>
						&lt;div class=&quot;videoWrapper extrawide&quot; style=&quot;position: relative;
padding-bottom: 56.25%;
/* 16:9 */
height: 0;
width: 100%;&quot;&gt;
                &lt;iframe style=&quot;position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;&quot; src=&quot;https://www.youtube.com/embed/ZGf8PQ83UlM?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=https://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
                &lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/158988934208&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Thu, 30 Mar 2017 03:44:30 +0000</pubDate>
				<link>https://patmurray.co/words/158988934208</link>
				<guid isPermaLink="true">https://patmurray.co/words/158988934208</guid>
			</item>
			
		
			
			<item>
				<title>2016: A Retrospective</title>
					<description>
						

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/2016-in-numbers&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sun, 01 Jan 2017 12:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/2016-in-numbers</link>
				<guid isPermaLink="true">https://patmurray.co/words/2016-in-numbers</guid>
			</item>
			
		
			
			<item>
				<title>Updates</title>
					<description>
						&lt;p&gt;It came to my attention I haven&amp;rsquo;t updated this blog in quite a while. The reason for that is I have been on a study abroad exchange program in the US.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you want to follow along my travels, check out my &lt;a href=&quot;https://www.youtube.com/PatsAdventures&quot;&gt;YouTube channel&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;strong&gt;&lt;a href=&quot;https://www.youtube.com/PatsAdventures&quot;&gt;youtube.com/PatsAdventures&lt;/a&gt;&lt;/strong&gt;
&lt;p&gt;Here is my latest video:&lt;/p&gt;

&lt;div class=&quot;videoWrapper extrawide&quot; style=&quot;position: relative;
padding-bottom: 56.25%;
/* 16:9 */
height: 0;
width: 100%;&quot;&gt;
                &lt;iframe style=&quot;position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;&quot; src=&quot;https://www.youtube.com/embed/TvwTn2UZNNs?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=https://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
                &lt;/div&gt;

&lt;p&gt;I’ll be back in Australia at the end of February for &lt;strong&gt;&lt;a href=&quot;http://www.playgroundscon.com&quot;&gt;Playgrounds Con&lt;/a&gt; in Melbourne&lt;/strong&gt;.  I’m also working on my 2016 Retrospective (&lt;a href=&quot;http://2015.patmurray.co&quot;&gt;see 2015 here&lt;/a&gt;) and that will be out soon.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;Pat&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/updates&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Tue, 13 Dec 2016 04:49:47 +0000</pubDate>
				<link>https://patmurray.co/words/updates</link>
				<guid isPermaLink="true">https://patmurray.co/words/updates</guid>
			</item>
			
		
			
			<item>
				<title>Instagram’s New Icon</title>
					<description>
						&lt;p&gt;&lt;b&gt;Instagram Updated Their Icon, App Theme, and Corporate Branding Today&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Great! It was well overdue.&lt;/p&gt;&lt;p&gt;Catch is? Most people don&amp;rsquo;t like it. But, unlike Uber&amp;rsquo;s drastic redesign just the other day, the change here is only aesthetic. The icon is still a glyph of a camera. Excluding the discrepancy in corner radius between the edge of the icon and the line of the camera, this update is heading in the right direction. Though, don&amp;rsquo;t be confused by it being called a &amp;ldquo;flatter&amp;rdquo; icon design, the colours of the gradient don&amp;rsquo;t match the old rainbow; this is a total rebranding.&lt;/p&gt;&lt;p&gt;The great thing here is Instagram has room to change and grow now. The old skeuomorphic design was limited in every direction, it needed a massive overhaul before they could commence incremental changes. Sure I have concerns with the direction, namely how attention-grabbing it is compared to the old icon. That&amp;rsquo;s not necessarily great app icon design, it is very loud. Good app icon design is also being a good home screen citizen. Further, the &amp;ldquo;Add Photo&amp;rdquo; button in the app doesn&amp;rsquo;t appear different from the other tabs. Thus, it doesn&amp;rsquo;t look like it would behave differently. That is a regression in overall usability, but a small change here can fix this.&lt;/p&gt;&lt;p&gt;Overall, it&amp;rsquo;s a polarising direction Instagram has gone. I have some issues with the design, but that is eclipsed by relief that the team is progressing. For the last three years the Instagram product has been stale. This might not quite be the right direction, but at least it&amp;rsquo;s better than no direction at all.&lt;/p&gt;

&lt;div style=&quot;position:relative;padding-bottom:calc(100% / 1.33)&quot;&gt;&lt;iframe src=&quot;https://gfycat.com/ifr/OblongRigidGhostshrimp&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;100%&quot; height=&quot;100%&quot; style=&quot;position:absolute;top:0;left:0;&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/instagrams-new-icon&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Wed, 11 May 2016 21:55:23 +0000</pubDate>
				<link>https://patmurray.co/words/instagrams-new-icon</link>
				<guid isPermaLink="true">https://patmurray.co/words/instagrams-new-icon</guid>
			</item>
			
		
			
			<item>
				<title>Happy Birthday Apple</title>
					<description>
						&lt;div class=&quot;black-bg&quot; style=&quot;text-align: justify; background: #97E365; margin-bottom: 0;&quot;&gt;


&lt;div class=&quot;black-container&quot; style=&quot;color: #333333;padding-top: 1%;&quot;&gt;


&lt;img src=&quot;http://i.imgur.com/IXbfAdy.png&quot; style=&quot;width: 150px; margin-top: 0;&quot;/&gt;&lt;!-- Opening paragraph --&gt;&lt;p&gt;Today is my 21st birthday. Today is also Apple&amp;rsquo;s 40th birthday. While the internet is surely littered with stories reminiscing about this day in 1976, or about this day in another forty years, I&amp;rsquo;d like to take this moment to wish a happy birthday to my ‘older twin’. &lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s the letter I sent Apple:&lt;/p&gt;

&lt;div style=&quot;display: block;
position: relative;
content: &apos;&apos;;
width: 150px;
height: 4px;
margin-top: 30px;
margin-bottom: 30px;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
background: #61bb46;
background: -moz-linear-gradient(left, #61bb46 0%, #61bb46 16%, #fbd827 16%, #fbd827 32%, #f5821f 32%, #f5821f 49%, #e03a3e 49%, #e03a3e 66%, #963d97 66%, #963d97 84%, #009ddc 84%, #009ddc 99%);
background: -webkit-linear-gradient(left, #61bb46 0%,#61bb46 16%,#fbd827 16%,#fbd827 32%,#f5821f 32%,#f5821f 49%,#e03a3e 49%,#e03a3e 66%,#963d97 66%,#963d97 84%,#009ddc 84%,#009ddc 99%);
background: linear-gradient(to right, #61bb46 0%,#61bb46 16%,#fbd827 16%,#fbd827 32%,#f5821f 32%,#f5821f 49%,#e03a3e 49%,#e03a3e 66%,#963d97 66%,#963d97 84%,#009ddc 84%,#009ddc 99%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=&apos;#61bb46&apos;, endColorstr=&apos;#009ddc&apos;,GradientType=1 );&quot;&gt;&lt;/div&gt;

&lt;div&gt;
&lt;p&gt;Dear Apple,&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Happy Birthday!&lt;/p&gt;
&lt;p&gt;Today marks your 40th birthday and today marks my 21st. Today also happens to be April Fools day, but that&amp;rsquo;s beside the point.&lt;/p&gt;
&lt;p&gt;You probably don&amp;rsquo;t know who I am, despite paying out App Store checks to me and inviting me on a student scholarship to WWDC15, that&amp;rsquo;s not really surprising. After all, there&amp;rsquo;s a lot of people in the world celebrating your birthday today—whether actively or not. How could I, just another number in your &lt;a href=&quot;http://www.apple.com/about/job-creation/&quot;&gt;380,000 developers&lt;/a&gt;, ever even register on your radar&lt;sup id=&quot;fnref:apple-fn1&quot;&gt;&lt;a href=&quot;#fn:apple-fn1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;?&lt;/p&gt;
&lt;p&gt;To be honest, it is somewhat strange to be using the days before my 21st birthday to be writing a letter of thanks to a company. Though I am oddly compelled. Compelled to thank you and wish you the happiest of birthdays, even if only to be another voice in sea of thanks (and probably some hot-takes).&lt;/p&gt;
&lt;p&gt;I, like many others, owe so much to your products, services, and most importantly people, that I couldn&amp;rsquo;t let this opportunity pass.&lt;/p&gt;
&lt;p&gt;Compared to some of the others in this community I&amp;rsquo;m relatively new. I didn&amp;rsquo;t own my first product of yours until early 2009 (my beloved 4th Generation iPod Nano). However, you&amp;rsquo;ve changed so much of my life that I can&amp;rsquo;t possibly imagine where I&amp;rsquo;d be without you. While everyone else recites your ups and down, let me briefly recap where I am, and how you helped get me here.&lt;/p&gt;
&lt;p&gt;Not long after picking up that iPod, I acquired a 2nd Generation iPod Touch (through a less than fair trade with my father&lt;sup id=&quot;fnref:apple-fn1&quot;&gt;&lt;a href=&quot;#fn:apple-fn2&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;). While I&amp;rsquo;d toyed around with some basic DOS scripting and web development (and by basic I mean pH 15) in my early teens the Touch sold me that I &lt;strong&gt;needed to make apps&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I dipped my toes into mobile development through web apps, just like you did, because I didn&amp;rsquo;t have a Mac at the time. Further like you, I realised mobile development is native or go home. So after a few while messing around with a hackintosh (that was fun, but is frankly not worth the effort), I got a 2011 13in MacBook Pro. (Don&amp;rsquo;t tell your sales team, but I used my older brother&amp;rsquo;s university ID to get a discount because you wouldn&amp;rsquo;t accept my high school one.)&lt;/p&gt;
&lt;p&gt;That machine may very well be the best computer I&amp;rsquo;ve ever owned. I edited pages of the school newspaper on it. I made two twenty minute, and one 8 minute films that played to over 3000 people each, on it. I wrote hundreds of essays. Singlehandedly designed my high school yearbook on it. And most importantly, made my first apps on it&lt;sup id=&quot;fnref:apple-fn3&quot;&gt;&lt;a href=&quot;#fn:apple-fn3&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Those first apps, distributed through your store, showed me that people liked (and used) things the &lt;em&gt;I made&lt;/em&gt;. For a fifteen year old, thats pretty crazy. Watching those numbers roll in. 200 downloads. 1000 downloads. 10,000 downloads. 100,000 downloads. 200,000 downloads.&lt;/p&gt;
&lt;p&gt;Later that year I upgraded to an iPhone 4S&lt;em&gt;teve&lt;/em&gt; (in white, of course) and continued making apps (and films, and taking photos, and laying out books…). If I wasn&amp;rsquo;t using using my Mac, I was on my iPhone (and since my dad had just bought himself an iPad I did also spend a lot of time on that). Suddenly I was living and breathing Apple.&lt;/p&gt;
&lt;p&gt;I discovered developers on Twitter, and through podcasts. I found this community online of people crazy enough about this company that they congregated together. Many of these people I now talk to, I&amp;rsquo;ve met, and many hundreds more I&amp;rsquo;ve become friends with in the years since.&lt;/p&gt;
&lt;p&gt;The products you&amp;rsquo;ve made are awesome. Truly bloody great. &lt;strong&gt;But the community you&amp;rsquo;ve harboured around you is so much more&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Tim, your Bloomberg op-ed in which you came out, showed me that despite my sexuality I too can be successful like you. You put your own privacy to the side in order to provide hope for young LGBTQI* people around the world.&lt;/p&gt;
&lt;p&gt;You stood up for our privacy, time and time again. Most notably in the recent case against the overbearing FBI. I&amp;rsquo;m not American, but I&amp;rsquo;m still affected (like billions of others) by the decisions you as a company make every day.&lt;/p&gt;
&lt;p&gt;I want to thank you for your pursuit of the arts. For creating products that allowed me to do creative things, I just couldn&amp;rsquo;t do them without you.&lt;/p&gt;
&lt;p&gt;Most of all, I want to thank you (all of Apple) for providing me the chance to attend WWDC last year, and for teaching me so much, and inspiring me to learn and work towards building apps. Because of your products, and your social outreach, and the community around you&lt;sup id=&quot;fnref:apple-fn4&quot;&gt;&lt;a href=&quot;#fn:apple-fn4&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; I work full-time as an iOS Developer. &lt;/p&gt;
&lt;p&gt;I have the dream job, in the dream field, surrounded my the dream people, using the dream products, all because on this day 40 years ago two Steves decided to make a computer (and also in part because this day 21 years ago I was born).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Happy Birthday Apple.&lt;/b&gt; Keep on being awesome. Not just in your products, but in all aspects of your company. Thanks for the last seven years of my life. Heres to the next forty, when I&amp;rsquo;m a little closer in age to you proportionally 😉.&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br/&gt;
Pat
&lt;/p&gt;
&lt;p style=&quot;font-size: 60%;&quot;&gt;ps. I&amp;rsquo;d love another dub dub ticket again 🙂&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/2lwLSAG.jpg&quot;/&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id=&quot;fn:apple-fn1&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt;Get it? Because you&amp;rsquo;re not really great at acknowledging radars 😜 &lt;a href=&quot;#fnref:apple-fn1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:apple-fn2&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt;I mean less than fair for him. He got the Nano and he bought me a new Touch. &lt;a href=&quot;#fnref:apple-fn2&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:apple-fn3&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt;Okay so actually, the original code base—it&amp;rsquo;s all be deleted now, six year old code is…—for my first app (NCIS: Gibbs&amp;rsquo; Rules) was written on the hackintosh. &lt;a href=&quot;#fnref:apple-fn3&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:apple-fn4&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt; Shoutout to Cocoaheads Sydney! &lt;a href=&quot;#fnref:apple-fn4&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;


&lt;!-- end --&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/happy-birthday-apple&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Thu, 31 Mar 2016 20:48:58 +0000</pubDate>
				<link>https://patmurray.co/words/happy-birthday-apple</link>
				<guid isPermaLink="true">https://patmurray.co/words/happy-birthday-apple</guid>
			</item>
			
		
			
			<item>
				<title>Firewatch</title>
					<description>
						&lt;p style=&quot;margin-bottom: 0; margin-top: 0;&quot;&gt;&lt;img class=&quot;fullwidth&quot; src=&quot;https://i.imgur.com/4aejBOF.png&quot; style=&quot;margin-bottom: 0; margin-top: 0; box-shadow: none;&quot; data-orig-height=&quot;455&quot; data-orig-width=&quot;3000&quot; data-orig-src=&quot;http://i.imgur.com/4aejBOF.png&quot;/&gt;&lt;/p&gt;

&lt;div class=&quot;black-bg&quot; style=&quot;text-align: justify; background: #FDDCC9; margin-bottom: 0;&quot;&gt;
&lt;div class=&quot;black-container&quot; style=&quot;padding-top: 10%; color: #333333;&quot;&gt;


&lt;!-- &lt;img src=&quot;http://i.imgur.com/X3ScJtD.png&quot;/&gt; &amp;ndash;&gt;

&lt;!-- Opening paragraph --&gt;
&lt;p&gt;Firewatch is less a game, and more of an interactive film experience. It is one of the first games I&amp;rsquo;ve finished in a very long time. I&amp;rsquo;m not much of a gamer, I don&amp;rsquo;t have a console, and my favourite game of all time is Rollercoaster Tycoon 2. When I heard that Panic was making a story driven game—revolving around radio communication with a character we never meet—I realised I needed to give it a try.&lt;/p&gt;

&lt;p&gt;Since the game is so story focused and the story is so mysterious, I&amp;rsquo;ll endeavour to stay spoiler free. The game starts with you reading a series of screens of text and making important decisions, like naming your dog. Something that must be noted is this game revolves around making decisions, usually between two or three choices, and those decisions impact the remainder of the game.&lt;/p&gt;

&lt;p&gt;Some decisions are clearly the illusion of choice. The game sort-of directs you back towards the route it wanted you to take. Others, though, impact the direction of the story.&lt;/p&gt;

&lt;p&gt;The attention to detail here cannot be overstated. Campo Santo has gone to great lengths to reward players for taking note of each scrap of paper, everything our distant counterpart Delilah says, and of random items like book titles. The best pieces of media add in easter eggs that foreshadow plots and small images for the best of viewers. &lt;em&gt;Firewatch&lt;/em&gt; takes this idea and allows you, the player, to discover these items. To, first hand, realise these slight nods of the head forward and back in the game, and to other pieces of literature outside of this small patch of forrest in Wyoming.&lt;/p&gt;

&lt;div style=&quot;display: block; position: relative; content: &apos;&apos;; width: 100px; height: 2px; margin-top: 30px; margin-bottom: 30px; left: 50%; -webkit-transform: translateX(-50%); transform: translateX(-50%); background: #D85F46;&quot;&gt;&lt;/div&gt;

&lt;p&gt;The playtime was all up around three and a half hours. Something refreshing in today&amp;rsquo;s game market, with playtimes of often upward of 50 hours. I finished playing earlier in the evening than when I went to see Tarantino&amp;rsquo;s &lt;em&gt;Hateful Eight&lt;/em&gt; (in 70mm special release). Your actions are defined by the story, and your actions define the story. The music leads into cut scenes; cut scenes that progress the story—not the action.&lt;/p&gt;

&lt;p&gt;The best way to look at it is, you don&amp;rsquo;t complete missions to progress the game; &lt;strong&gt;you do what feels right in service of the story&lt;/strong&gt;. A story that leaves you asking questions the whole way though, proposing potential outcomes and all around keeps you engrossed. &lt;/p&gt;

&lt;h4&gt;&lt;center&gt;&lt;em&gt;I&amp;rsquo;ve never reviewed a game before. I review films. Stories.&lt;br/&gt;Firewatch is a story, wrapped in the guise of a game.&lt;/em&gt;&lt;/center&gt;&lt;/h4&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;p style=&quot;margin-bottom: 0; margin-top: 0;&quot;&gt;&lt;img class=&quot;fullwidth&quot; src=&quot;https://i.imgur.com/m1GIvXM.jpg&quot; style=&quot;margin-bottom: 0; margin-top: 0; box-shadow: none;&quot; data-orig-height=&quot;853&quot; data-orig-width=&quot;3825&quot; data-orig-src=&quot;http://i.imgur.com/m1GIvXM.jpg&quot;/&gt;&lt;/p&gt;

&lt;!-- Create black background --&gt;

&lt;div class=&quot;black-bg&quot; style=&quot;text-align: justify; background: #3C303B; padding-top: 10%; padding-bottom: 0;&quot;&gt;
&lt;div class=&quot;black-container&quot;&gt;


&lt;p&gt;The game isn&amp;rsquo;t scary, but like any good storytelling the Campo Santo taught me to be wary of certain situations. As the game progressed, I became increasingly nervous whenever music played and, most notably, when the aspect ratio of the screen changed. The frame became narrower during cut scenes, and would often go narrower a little before the main action of the scene.&lt;/p&gt;
&lt;p&gt;This began to make me almost fear the narrower aspect ratio. For it often brought something bad for our protagonist, Henry. Fearing cut scenes in games is not uncommon, but usualy the length and annoyingness of them causes this. In &lt;em&gt;Firewatch&lt;/em&gt; I feared them for what it meant for our characters, and for what turn the story might next take.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;d often find myself scared to turn around as I walked kilometres from place to place. I was always guessing just what might happen next, who was causing the events to take place—and why. I was totally engrossed in the story. More so than many films. And definitely more so than any other game.&lt;/p&gt;

&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;1944&quot; data-orig-width=&quot;2960&quot; data-orig-src=&quot;https://i.imgur.com/c6f2fAO.jpg&quot;&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://i.imgur.com/c6f2fAO.jpg&quot; data-orig-height=&quot;1944&quot; data-orig-width=&quot;2960&quot; data-orig-src=&quot;https://i.imgur.com/c6f2fAO.jpg&quot;/&gt;&lt;/figure&gt;&lt;p&gt;Campo Santo told a story, and made a game in the process. &lt;em&gt;Firewatch&lt;/em&gt; is unique and amazing. As Polygon puts it, “&lt;em&gt;Firewatch&lt;/em&gt; is the video game equivalent of a page-turner.” Wired says, the game is “an emotional gut-punch all the way through, for many reasons, and largely a pleasure to explore and find yourself lost in.” I couldn&amp;rsquo;t agree more. I&amp;rsquo;m reviewing an experience, that just happens to be branded as a game. An experience that I believe, has unconditionally earned five out of five stars.&lt;/p&gt;

&lt;p style=&quot;padding-top: 40px; padding-bottom: 40px; font-size: 40pt; color: #D85F46;text-align: center;&quot;&gt;★★★★★&lt;/p&gt;

&lt;p&gt;With graphics largely inspired by eighties’ national park posters, and music that fits all too perfectly, &lt;em&gt;Firewatch&lt;/em&gt; is a truly breathtaking journey. &lt;strong&gt;One that everyone should take.&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;455&quot; data-orig-width=&quot;3000&quot; data-orig-src=&quot;http://i.imgur.com/3JiQW46.png&quot;&gt;&lt;img class=&quot;fullwidth&quot; src=&quot;https://i.imgur.com/3JiQW46.png&quot; style=&quot;margin-bottom: 0; margin-top: 0; box-shadow: none;&quot; data-orig-height=&quot;455&quot; data-orig-width=&quot;3000&quot; data-orig-src=&quot;http://i.imgur.com/3JiQW46.png&quot;/&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/firewatch&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sun, 14 Feb 2016 01:10:47 +0000</pubDate>
				<link>https://patmurray.co/words/firewatch</link>
				<guid isPermaLink="true">https://patmurray.co/words/firewatch</guid>
			</item>
			
		
			
			<item>
				<title>Trying a New Revenue Model: Gibbs’ Rules 4.2</title>
					<description>
						&lt;p&gt;Today I’m launching another big update to my flagship app, &lt;a href=&quot;https://geo.itunes.apple.com/us/app/ncis-gibbs-rules/id406128109?mt=8&amp;amp;at=11lMp7&amp;amp;ct=blog-announcement42&quot;&gt;NCIS: Gibbs’ Rules 4.2&lt;/a&gt;, with a bunch of new features and most importantly a new revenue model. I’ve introduced a tipping system called Patronage.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://geo.itunes.apple.com/us/app/ncis-gibbs-rules/id406128109?mt=8&amp;amp;at=11lMp7&amp;amp;ct=blog-announcement42&quot;&gt;&lt;/a&gt;
&lt;a href=&quot;https://geo.itunes.apple.com/us/app/ncis-gibbs-rules/id406128109?mt=8&amp;amp;at=11lMp7&amp;amp;ct=blog-announcement42&quot;&gt;&lt;img style=&quot;width: 180px&quot; src=&quot;http://linkmaker.itunes.apple.com/images/badges/en-us/badge_appstore-lrg.svg&quot; alt=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Between &lt;a href=&quot;http://www.apple.com/pr/library/2016/01/06Record-Breaking-Holiday-Season-for-the-App-Store.html&quot;&gt;21st December 2015 and the 3rd January 2016&lt;/a&gt; customers spent over &lt;b&gt;US$1.1 Billion&lt;/b&gt; on the App Store. New Years Day was the biggest day ever, with customers spending over &lt;b&gt;$144 million&lt;/b&gt;. It broke the previous single-day record which was set on Christmas Day, just a week earlier.&lt;/p&gt;

&lt;p&gt;That is an insane amount of money. Talk that customer’s aren’t willing to spend money on apps is clearly not true, and yet we hear all the time of indie developers seriously struggling to make a living. It’s pretty safe to assume that most of that revenue went to a very small percentage of apps.&lt;/p&gt;

&lt;img class=&quot;extrawide&quot; src=&quot;https://78.media.tumblr.com/2401288e3fa2322012a0952d657c1e3f/tumblr_inline_o0nudo2qnX1t0eqx6_1280.png&quot;/&gt;&lt;p&gt;When looking at the Top Grossing chart it is pretty clear that almost all of that money was spent on In App Purchases for those twelve free apps. There&amp;rsquo;s plenty of arguments to be had about whether that&amp;rsquo;s a bad thing for the quality of the store, but I&amp;rsquo;m not here for that.&lt;/p&gt;

&lt;p&gt;For the first three and half years of life, Gibbs Rules was financed with advertisements. A small banner across the bottom of some screens. Over that span it made very little money, and resulted in a poor quality experience. To be completely honest I was, and still am, disapointed in the advertisements. &lt;/p&gt;

&lt;p&gt;Today I&amp;rsquo;m following suit with the rest of the App Store and selling four (identical&lt;sup id=&quot;fnref:bond-fn1&quot;&gt;&lt;a href=&quot;#fn:bond-fn1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;) In App Purchases. I&amp;rsquo;m calling these &lt;em&gt;Patronage tiers&lt;/em&gt; and for the most part they offer nothing much of value. Instead of designing the IAPs to get in the way and &lt;em&gt;need&lt;/em&gt; to be purchased, I&amp;rsquo;ve made them as out of the way as I could.&lt;/p&gt;

&lt;p&gt;Inspired by Tip Jars in apps like &lt;a href=&quot;https://geo.itunes.apple.com/au/app/pedometer++/id712286167?mt=8&amp;amp;at=11lMp7&quot;&gt;Pedometer++&lt;/a&gt; and &lt;a href=&quot;https://geo.itunes.apple.com/au/app/highball-share-collect-cocktail/id973319934?mt=8&amp;amp;at=11lMp7&quot;&gt;Highball&lt;/a&gt;, and the Patronage model in Overcast, Gibbs&amp;rsquo; Rules Patronage will be more about customers giving back, than getting features. For the time being, all four tiers offer the same thing; themes. For the foreseeable future, I will only add exclusive features if I can&amp;rsquo;t afford them for everyone.&lt;/p&gt;

&lt;p&gt;My reasoning behind four seemingly identical tiers is so that customers can pay what they think Gibbs&amp;rsquo; Rules is worth. I hope customers will opt for one of the higher tiers, but only time will tell.&lt;/p&gt;

&lt;h4&gt;&lt;center&gt;&lt;em&gt;This is definitely an experiment.&lt;/em&gt;&lt;/center&gt;&lt;/h4&gt;

&lt;p&gt;The jury is still out on whether this will work. However, even if only 5% of customers purchase the lowest teir I will have earned an equal amount to the advertisements. Odds are, even less will. But I&amp;rsquo;ll be so much happier about it. The desision to contribute is entirely yours. However regardless, you will be able to enjoy all the features of Gibbs&amp;rsquo; Rules.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;https://geo.itunes.apple.com/us/app/ncis-gibbs-rules/id406128109?mt=8&amp;amp;at=11lMp7&amp;amp;ct=blog-announcement42&quot;&gt;&lt;/a&gt;
&lt;a href=&quot;https://geo.itunes.apple.com/us/app/ncis-gibbs-rules/id406128109?mt=8&amp;amp;at=11lMp7&amp;amp;ct=blog-announcement42&quot;&gt;&lt;img style=&quot;width: 180px&quot; src=&quot;http://linkmaker.itunes.apple.com/images/badges/en-us/badge_appstore-lrg.svg&quot; alt=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id=&quot;fn:bond-fn1&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt;I&amp;rsquo;ll get to that. &lt;a href=&quot;#fnref:bond-fn1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/trying-a-new-revenue-model-gibbs-rules-42&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Wed, 27 Jan 2016 20:16:16 +0000</pubDate>
				<link>https://patmurray.co/words/trying-a-new-revenue-model-gibbs-rules-42</link>
				<guid isPermaLink="true">https://patmurray.co/words/trying-a-new-revenue-model-gibbs-rules-42</guid>
			</item>
			
		
			
			<item>
				<title>2015 in Numbers</title>
					<description>
						

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/2015-in-numbers&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Fri, 01 Jan 2016 12:00:00 +0000</pubDate>
				<link>https://patmurray.co/words/2015-in-numbers</link>
				<guid isPermaLink="true">https://patmurray.co/words/2015-in-numbers</guid>
			</item>
			
		
			
			<item>
				<title>Merry Christmas From the Beach</title>
					<description>
						&lt;img class=&quot;fullwidth&quot; src=&quot;/tumblr_files/tumblr_nzwwv1a7HZ1tlyaono2_r1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Merry Christmas from the beach 🎄🏄 • Culburra Beach, NSW (at Culburra Beach)&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/merry-christmas-from-the-beach-culburra&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Fri, 25 Dec 2015 11:49:49 +0000</pubDate>
				<link>https://patmurray.co/words/merry-christmas-from-the-beach-culburra</link>
				<guid isPermaLink="true">https://patmurray.co/words/merry-christmas-from-the-beach-culburra</guid>
			</item>
			
		
			
			<item>
				<title>Thoughts on Star Wars VII</title>
					<description>
						&lt;p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;1080&quot; data-orig-width=&quot;1920&quot; data-orig-src=&quot;https://image.tmdb.org/t/p/original/c2Ax8Rox5g6CneChwy1gmu4UbSb.jpg&quot;&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://78.media.tumblr.com/ff4de1bf31c90491f834cda07bb936e2/tumblr_inline_p7ixkuijKP1t0eqx6_540.jpg&quot; data-orig-height=&quot;1080&quot; data-orig-width=&quot;1920&quot; data-orig-src=&quot;https://image.tmdb.org/t/p/original/c2Ax8Rox5g6CneChwy1gmu4UbSb.jpg&quot;/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;Two hours and fifteen minutes of non-stop, face hurting, grinning. Episode Seven takes everything that is great about Star Wars and perfects it. If the same film had been made sans the Star Wars title and the character&amp;rsquo;s name it would still be a great film, just not the huge success that is &lt;em&gt;The Force Awakens&lt;/em&gt;.&lt;/p&gt;

&lt;center&gt;

&lt;h4&gt;&lt;em&gt;That is to say, Episode Seven is a great film. You&amp;rsquo;ll come out of it very content.&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;Every plot point is intentional and well executed. There is no unnecessary fluff, and yet is manages to land just the right amount of flourish.&lt;/p&gt;

&lt;div style=&quot;display: block; position: relative; content: &apos;&apos;; width: 100px; height: 2px; margin-top: 30px; margin-bottom: 30px; left: 50%; -webkit-transform: translateX(-50%); transform: translateX(-50%); background: #D85F46;&quot;&gt;&lt;/div&gt;

&lt;p&gt;Daisy Ridley&amp;rsquo;s Rey and John Boyega&amp;rsquo;s Finn are clearly having the time of their lives making the film. As are all the cast and crew. &lt;strong&gt;It definitely shows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Simply put it’s five stars.&lt;/p&gt;

&lt;center&gt;

&lt;p style=&quot;padding-top: 40px; padding-bottom: 40px; font-size: 40pt; color: #D85F46;text-align: center;&quot;&gt;★★★★★&lt;/p&gt;

&lt;/center&gt;

&lt;p&gt;Not only does J.J. Abrams deliver a solidly outstanding film with &lt;em&gt;The Force Awakens&lt;/em&gt;, he delivers an undoubting hope for the future of the franchise. I can’t wait for next year’s instalment, Rogue One (part one of the spin-off anthology).&lt;/p&gt;

&lt;div style=&quot;display: block; position: relative; content: &apos;&apos;; width: 100px; height: 2px; margin-top: 30px; margin-bottom: 30px; left: 50%; -webkit-transform: translateX(-50%); transform: translateX(-50%); background: #D85F46;&quot;&gt;&lt;/div&gt;

&lt;p&gt;Also the visual and special effects are outstanding. Along with the amazing cinematic story telling. I think we&amp;rsquo;re back in the era of the beautiful, well thought out, locked off shot. Gone is the 2008 shaky-cam. Plus, the score and the audio mix made the whole experience almost too real. That thunder under the seats is why cinemas are still essential.&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/thoughts-on-star-wars-vii&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Mon, 21 Dec 2015 11:16:32 +0000</pubDate>
				<link>https://patmurray.co/words/thoughts-on-star-wars-vii</link>
				<guid isPermaLink="true">https://patmurray.co/words/thoughts-on-star-wars-vii</guid>
			</item>
			
		
			
			<item>
				<title>‘Spectre’ Review</title>
					<description>
						&lt;p&gt;&lt;!-- Hook --&gt;
&lt;/p&gt;&lt;h4&gt;&lt;em&gt;Review of Sam Mendes’ second contribution to the twenty-four instalment franchise, the 2015 James Bond film&lt;/em&gt; Spectre. &lt;em&gt;Starring Daniel Craig, Christoph Waltz, and Léa Seydoux&lt;/em&gt;.&lt;/h4&gt;

&lt;!-- Create black background --&gt;
&lt;div class=&quot;black-bg&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;black-container&quot;&gt;

&lt;!-- Hero Image --&gt;
&lt;p&gt;&lt;img class=&quot;fullwidth&quot; src=&quot;https://i.imgur.com/gqTvBMq.jpg&quot;/&gt;&lt;/p&gt;


&lt;!-- Subtitle --&gt;
&lt;center&gt;&lt;h4 style=&quot;font-family: &apos;Alternate Gothic&apos;, sans-serif, georgia, serif; font-weight: bold;&quot;&gt;A beautiful, ambitious, but ultimately lost film&lt;/h4&gt;&lt;/center&gt;

&lt;!-- more --&gt;

&lt;!-- Opening paragraph --&gt;
&lt;p&gt;Skyfall is a tough act to follow. As the highest grossing Bond film of all time (just outpacing &lt;em&gt;Thunderball&lt;/em&gt;), &lt;em&gt;Skyfall&lt;/em&gt; has been heralded as Craig’s best Bond film. With the exception of a few, &lt;em&gt;Spectre&lt;/em&gt; returns with &lt;em&gt;Skyfall&lt;/em&gt;’s exceptional team. But can the twenty-fourth film in the hugely popular Bond franchise live up to expectations, or do we have another &lt;em&gt;Quantum of Solace&lt;/em&gt;&lt;sup id=&quot;fnref:bond-fn1&quot;&gt;&lt;a href=&quot;#fn:bond-fn1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; on our hands?&lt;/p&gt;

&lt;!-- Divider --&gt;
&lt;div style=&quot;display: block; position: relative; content: &apos;&apos;; width: 100px; height: 2px; margin-top: 30px; margin-bottom: 30px; left: 50%; -webkit-transform: translateX(-50%); transform: translateX(-50%); background: #D85F46;&quot;&gt;&lt;/div&gt;

&lt;p&gt;Craig is back in his fourth instalment as Bond. James Bond. (Just like Craig I will only say that once—a breath of fresh air over the abundance of that line with previous Bond actors.) Ralph Fiennes is in his role as the new M, a position he took on in the last thirty seconds of &lt;em&gt;Skyfall&lt;/em&gt;. The new Miss Eve Moneypenny (Naomie Harris) takes her role into (an underwhelming) full swing, after teasing her character in &lt;em&gt;Skyfall&lt;/em&gt;. Ben Whishaw is also back as the young, loveable Q. While Desmond Llewelyn will always be Q—somewhat unavoidable since he played Q in seventeen films—Whishaw is quickly becoming my favourite. Lastly, the ever amazing Christoph Waltz is our (under-utilised) bad guy. But more on that later. &lt;/p&gt;

&lt;!-- Bond running, gun, snow, helicopter IMG --&gt;
&lt;p&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://i.imgur.com/glFX14Qh.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;I went into the screening apprehensive. All the reviews said the same thing; &lt;em&gt;Spectre&lt;/em&gt; tries to be everything at once, and succeeds at being nothing. Jacob Kleinman puts it, &lt;em&gt;&amp;ldquo;…if you missed the last few movies there isn’t much reason to bother with this one. As for the future of 007, rumor has it the series is heading towards another reboot, and after Spectre we’re definitely due for a fresh start.&amp;rdquo;&lt;/em&gt; Words like those really didn&amp;rsquo;t make me excited for the film. Well, of course I was excited, it is Bond after all. I mean it didn&amp;rsquo;t get me more excited. This lowering of expectations probably helped though.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Casino Royale&lt;/em&gt; and &lt;em&gt;Skyfall&lt;/em&gt; were such Bond masterpieces that the prospect of a new Daniel Craig-James Bond film was so enticing. Maybe this is part of the problem. Medes, Craig, and team, pulled out such an amazing film with &lt;em&gt;Skyfall&lt;/em&gt; that &lt;em&gt;Spectre&lt;/em&gt; never even stood a chance. It&amp;rsquo;s like when you give a speech straight after the best speaker, even if you&amp;rsquo;re second best you may as well be terrible. Nobody can stop thinking about how great the person before you was.&lt;/p&gt;

&lt;p&gt;I feel &lt;em&gt;Spectre&lt;/em&gt;—and &lt;em&gt;Quantum of Solace&lt;/em&gt;—have fallen victim to this. &lt;em&gt;Casino Royale&lt;/em&gt; is listed often as the best Bond film of all time. This pressure really did impact people&amp;rsquo;s perception of &lt;em&gt;Quantum of Solace&lt;/em&gt;. Something I was keen to not let happen to me with &lt;em&gt;Spectre&lt;/em&gt;.&lt;/p&gt;

&lt;div style=&quot;display: block; position: relative; content: &apos;&apos;; width: 100px; height: 2px; margin-top: 30px; margin-bottom: 30px; left: 50%; -webkit-transform: translateX(-50%); transform: translateX(-50%); background: #D85F46;&quot;&gt;&lt;/div&gt;

&lt;p&gt;The film opens with a beautiful one-shot of the &amp;lsquo;Day of The Dead&amp;rsquo; festival in Mexico City. Bond has gone rogue and is on a mission to avenge the death of his beloved M (Judi Dench from the previous seven films [1995-2012]). The opening is reminiscent of previous Craig films, gritty action in an always-knows-what-to-do kind of way. The first glimpse that &lt;em&gt;Spectre&lt;/em&gt; is branching away from the previous three films is the couch gag.&lt;/p&gt;

&lt;p&gt;After blowing up a building (the sequence is in the trailer) Bond falls what appears to be three or four stories. Instead of a crash landing, he lands square on a couch that just happens to be there. This gag got a muffled laugh from the crowd. It showed us early on in this very long (148 minutes) film that classic Bond tropes are coming back. &lt;em&gt;Spectre&lt;/em&gt; is to be the franchise&amp;rsquo;s attempt at merging the modern Nolan-esque Bond with the classic &lt;em&gt;Austin Powers&lt;/em&gt;-esque&lt;sup id=&quot;fnref:bond-fn2&quot;&gt;&lt;a href=&quot;#fn:bond-fn2&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; Bond. &lt;/p&gt;

&lt;center&gt;
		&lt;video poster=&quot;https://i.imgur.com/j0qWLRWl.gif&quot; preload=&quot;auto&quot; autoplay=&quot;autoplay&quot; muted=&quot;muted&quot; loop=&quot;loop&quot; width=&quot;100%&quot;&gt;&lt;source src=&quot;https://i.imgur.com/j0qWLRW.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/source&gt;&lt;/video&gt;&lt;/center&gt;


&lt;p&gt;&lt;em&gt;Spectre&lt;/em&gt; returns to including the barrel-shot sequence at the opening of the film. &lt;em&gt;Skyfall&lt;/em&gt;, on the other hand, placed the sequence at the end to introduce the closing credits. This return to the original helps get the viewer in the mood for a James Bond film, because there&amp;rsquo;s nothing more quintessentially Bond than that gun shot sequence. The reason &lt;em&gt;Skyfall&lt;/em&gt; could get away with placing it at the end, and &lt;em&gt;Casino Royale&lt;/em&gt; could get away without the walk against a white background is because their title sequences set us up for the film.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Writing&amp;rsquo;s on the Wall&lt;/em&gt; (performed by Sam Smith) I feel worked better as the instrumental version played three quarters the way through the film. The title sequence is underwhelming when compared previous films. Unlike previous title sequences, during &lt;em&gt;Spectre&lt;/em&gt;&amp;rsquo;s I was wishing for it to end so we could get to the film. However, I do hold the widely unpopular opinion that the &lt;em&gt;Casino Royale&lt;/em&gt; title sequence and song is the best of the franchise—most people disagree with me there.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/M82QObK.gif&quot;/&gt;&lt;/p&gt;

&lt;div style=&quot;display: block; position: relative; content: &apos;&apos;; width: 100px; height: 2px; margin-top: 30px; margin-bottom: 30px; left: 50%; -webkit-transform: translateX(-50%); transform: translateX(-50%); background: #D85F46;&quot;&gt;&lt;/div&gt;

&lt;p&gt;The story and plot is all over the place. Like most Bond films. The premise of the film (without spoilers) is that the SPECTRE organisation has been responsible for all the worlds atrocities in the last decade. In the last three films Bond has ended up in the middle of one of their plans and has successfully stopped them. &lt;/p&gt;

&lt;p&gt;This point is continually driven home throughout the film. We see the faces and hear the names of both villains and Bond-girls from the Craig franchise. One odd thing of note, however, is Dominic Greene—the absolutely crazy vallain from &lt;em&gt;Quantum of Solace&lt;/em&gt; who is trying to steal water from Bolivia—is almost never mentioned. Even when Quantum (the organisation) gets frequent mentions, and we have a ten minute scene with Mr. White, the character of Greene is nowhere to been seen.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m rather disappointed with how the ‘SPECTRE universe’ came together. From a real world production standpoint, I am aware that Eon Productions&lt;sup id=&quot;fnref:bond-fn3&quot;&gt;&lt;a href=&quot;#fn:bond-fn3&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; only came to reacquire the rights to that part of the Bond universe in recent years. However, it is painfully clear that the idea of a large mastermind organisation being responsible for everything from the last ten years just doesn&amp;rsquo;t fit. It&amp;rsquo;s not an inconceivable storyline on its own, it&amp;rsquo;s just that watching the previous three films it is blatantly obvious that this was added after the fact.&lt;/p&gt;


&lt;p&gt;&lt;img class=&quot;fullwidth&quot; src=&quot;https://i.imgur.com/1nW1MG2.jpg&quot;/&gt;&lt;/p&gt;

&lt;h4 style=&quot;margin-top: -20px; margin-bottom: 30px; text-align: center;&quot;&gt;&lt;em&gt;“I didn’t invent the turtleneck, Lana, but I was the first to recognise its potential as a tactical garment. The tactical turtleneck.”&lt;/em&gt; – Archer&lt;/h4&gt;

&lt;p&gt;The film is beautiful. Maybe not as beautiful as Roger Deakins&amp;rsquo;&lt;sup id=&quot;fnref:bond-fn4&quot;&gt;&lt;a href=&quot;#fn:bond-fn4&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;em&gt;Skyfall&lt;/em&gt;. That film has some absolutely-breathtakingly-stunning shots. &lt;em&gt;Spectre&lt;/em&gt; is beautiful though. I particularly enjoyed the desert scenes. The shots of London were mostly average, nothing much special. Though they didn&amp;rsquo;t spend very long in London. I&amp;rsquo;m glad that Bond hasn&amp;rsquo;t fallen susceptible to the post Jason Bourne era shaky-cam. &lt;/p&gt;

&lt;p&gt;Thomas Newman crafted an &lt;a href=&quot;https://geo.itunes.apple.com/au/album/spectre-original-motion-picture/id1049946951?at=11lMp7&amp;amp;ct=spectre_blog&amp;amp;app=itunes&quot;&gt;excellent score&lt;/a&gt; for the film. With both homages to classic Bond and modern Bond. The similarities between &lt;em&gt;Casino Royale&lt;/em&gt;&amp;rsquo;s song &lt;a href=&quot;https://geo.itunes.apple.com/au/album/vesper/id205724062?i=205726090&amp;amp;at=11lMp7&amp;amp;ct=spectre_blog&amp;amp;mt=1&amp;amp;app=music&quot;&gt;&lt;em&gt;Vesper&lt;/em&gt;&lt;/a&gt; (by Nicholas Dodd) and &lt;a href=&quot;https://geo.itunes.apple.com/au/album/out-of-bullets/id1049946951?i=1049948963&amp;amp;at=11lMp7&amp;amp;mt=1&amp;amp;app=music&amp;amp;ct=spectre_blog&quot;&gt;&lt;em&gt;Out of Bullets&lt;/em&gt;&lt;/a&gt; in &lt;em&gt;Spectre&lt;/em&gt; is a nice touch. &lt;em&gt;Vesper&lt;/em&gt; is when Bond first meets the love of his life in &lt;em&gt;Casino Royale&lt;/em&gt; and &lt;em&gt;Out of Bullets&lt;/em&gt; is when Bond chooses the girl over the assassination. (That&amp;rsquo;s about as close to spoiler-y as I&amp;rsquo;ll get.)&lt;/p&gt;

&lt;p&gt;There&amp;rsquo;s some great action in the film, but also some annoying tropes. I enjoyed the fist-fight on the train. Mostly because they intentionally never go on the roof. For a film littered with half backed tropes, I&amp;rsquo;m really happy that they didn&amp;rsquo;t feel the need to go onto the roof. Having said that, I&amp;rsquo;m annoyed with the one liner ending of that scene. Henchmen shouldn&amp;rsquo;t speak. Also Bond has a little too much luck with flying objects crashing at the perfect time. I didn&amp;rsquo;t ever feel in danger for him.&lt;/p&gt;

&lt;p&gt;On that point. The torture scene pales in comparison to &lt;em&gt;Casino Royale&lt;/em&gt;. Many people in the cinema squirmed and gasped, but it really didn&amp;rsquo;t grasp me. All this talk about irrevocable damage, and nothing comes of it. Whereas in &lt;em&gt;Casino Royale&lt;/em&gt; you really felt for James during the torture.&lt;/p&gt;

&lt;div style=&quot;display: block; position: relative; content: &apos;&apos;; width: 100px; height: 2px; margin-top: 30px; margin-bottom: 30px; left: 50%; -webkit-transform: translateX(-50%); transform: translateX(-50%); background: #D85F46;&quot;&gt;&lt;/div&gt;

&lt;p&gt;Regarding characters, I feel Fiennes did a fine job with M. A good mix of authority figure and understanding friend to Bond. Not the same relationship that Olivia Mansfield (Dench) had with Bond, but an appropriate one that will grow with time. Eve Moneypenny (Harris) was underwhelming. Many of her scenes involved standing in the background or walking at the rear of a group of people.&lt;/p&gt;

&lt;p&gt;Moneypenny was present in many of the MI6 scenes, but save for a few instances had very little to do. I wish Mendes had utilised her character more. Though if her under-utilisation was to allow Q to shine, then I&amp;rsquo;ll take that any day. Whishaw is an outstanding Q. If we ignore the jab at the lonely-nerd-living-alone-with-two-cats, I&amp;rsquo;m very pleased with the direction Q is going. Whishaw brings a charm to the super smart hacker Q, that really sells him. I look forward to how they continue to expand his character as James&amp;rsquo; only friend.&lt;/p&gt;

&lt;p&gt;An interesting turn on the classics, where Moneypenny could often be relied upon as Bond&amp;rsquo;s friend (and unreachable love interest). In &lt;em&gt;Spectre&lt;/em&gt; it appears Moneypenny has yet to expand out to this role, and Q is instead filling the position of the one person who Bond truely trusts. &lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/rt9rQ8nh.jpg&quot;/&gt;&lt;/p&gt;&lt;p&gt;I love Waltz as villains. But it is clear that he isn&amp;rsquo;t capable of portraying those amazing characters we&amp;rsquo;ve come to know from Tarantino&amp;rsquo;s films without a story and director willing to let him. His character&lt;sup id=&quot;fnref:bond-fn5&quot;&gt;&lt;a href=&quot;#fn:bond-fn5&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; feels on the precipice of greatness, but just not there yet. I have the feeling they want to set up his character for a multi-film story arc, which has meant that they haven&amp;rsquo;t explored him as much in this film. Which is really disappointing.&lt;/p&gt;

&lt;p&gt;Clearly Waltz&amp;rsquo;s character is a troubled genius. We can see that to some extent. But either in character development or in plot development someone didn&amp;rsquo;t take a step back and really question his motives for the SPECTRE organistion. It&amp;rsquo;s muddled for even the most knowledgeable of the Bond universe. I suspect the story went under a lot of rewrites, even as shooting was hppening.&lt;/p&gt;

&lt;div style=&quot;display: block; position: relative; content: &apos;&apos;; width: 100px; height: 2px; margin-top: 30px; margin-bottom: 30px; left: 50%; -webkit-transform: translateX(-50%); transform: translateX(-50%); background: #D85F46;&quot;&gt;&lt;/div&gt;

&lt;img class=&quot;extrawide&quot; src=&quot;https://i.imgur.com/yvnPiuLh.jpg&quot;/&gt;&lt;center&gt;&lt;h4 style=&quot;font-family: &apos;Alternate Gothic&apos;, sans-serif, georgia, serif; font-weight: bold; margin-top: -20px; margin-bottom: 30px;&quot;&gt;Craig always looks just a little perplexed at his surroundings&lt;/h4&gt;&lt;/center&gt;

&lt;p&gt;Aall round though &lt;em&gt;Spectre&lt;/em&gt; is not the greatest Bond film, but it&amp;rsquo;s definitely one of the better ones. We&amp;rsquo;ve been so spoiled with Craig&amp;rsquo;s Bonds we&amp;rsquo;ve forgotten what a bad James Bond is actually like. They&amp;rsquo;ve tried to tie in some of the classic tropes (with varying degrees of success) and I think they&amp;rsquo;ll need to reconsider part of that for the next instalment. Will Craig or Mendes (or any of the cast) return for the next film? Who knows, and honestly that should be of little concern as you enter the two and a half hour crazy ride that is a James Bond film.&lt;/p&gt;


&lt;p&gt;From the largest real explosion for a film, to tens-of-thousands of dollars Tom Ford suits, &lt;em&gt;Spectre&lt;/em&gt; won&amp;rsquo;t disappoint. I&amp;rsquo;m not itching to see it again, but don&amp;rsquo;t let the negative reviews convince you it&amp;rsquo;s a bad film. It tries to be too many things at once, gets confused, and stuggles to find it&amp;rsquo;s feet. But it&amp;rsquo;s still better than 90% of films out there. Four out of five vodka martinis. &lt;/p&gt;

&lt;center&gt;&lt;p style=&quot;padding-top: 40px; padding-bottom: 40px; font-size: 40pt; color: #D85F46;text-align: center;&quot;&gt;★★★★&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;Acknowledge it has shortcomings, and enjoy it for what it is; a great action film with impeccable suits and a bit of humour.&lt;/p&gt;

&lt;p&gt;&lt;img style=&quot;min-height: 450px; overflow: hidden; object-fit: cover;&quot; class=&quot;fullwidth&quot; src=&quot;https://i.imgur.com/1c9O9iq.jpg&quot;/&gt;&lt;/p&gt;
&lt;center&gt;&lt;h4 style=&quot;font-family: &apos;Alternate Gothic&apos;, sans-serif, georgia, serif; font-weight: bold; margin-top: -20px; margin-bottom: 0;&quot;&gt;Too damn suave… how is that suit still perfect!?&lt;/h4&gt;&lt;/center&gt;





&lt;/div&gt;
&lt;/div&gt;

&lt;div style=&quot;margin-top: 40px;&quot;&gt;&lt;/div&gt;

&lt;p&gt;If you enjoyed this review, please check out some of my others by heading to &lt;a href=&quot;//watched.patmurray.co&quot;&gt;watched.patmurray.co&lt;/a&gt; and looking for films with the &amp;ldquo;Review&amp;rdquo; tag on them.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id=&quot;fn:bond-fn1&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt;&lt;em&gt;Quantum of Solace&lt;/em&gt; is often bashed as a terrible Bond film. Cited by many as being so out of character for the franchise that it shouldn&amp;rsquo;t be considered canon. Interestingly, on it&amp;rsquo;s own &lt;em&gt;Quantum of Solace&lt;/em&gt; stands up as a somewhat confusing but okay film. &lt;em&gt;Die Another Day&lt;/em&gt;, on the other hand, is an all round bad film. What I&amp;rsquo;m trying to say is, &lt;em&gt;Quantum of Solace&lt;/em&gt; is obviously Craig&amp;rsquo;s worst film. But when you consider Craig is probably the best Bond in the franchise that&amp;rsquo;s really not that bad a position to hold. &lt;a href=&quot;#fnref:bond-fn1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:bond-fn2&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt;I&amp;rsquo;m keenly aware that the &lt;em&gt;Austin Powers&lt;/em&gt; series is based heavily on Bond and not the other way around. However, &lt;em&gt;Austin Powers&lt;/em&gt; is an apt way of describing some of the ridiculousness of the Bonds past. &lt;a href=&quot;#fnref:bond-fn2&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:bond-fn3&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt;The production company who&amp;rsquo;s sole purpose is making James Bond films. Set up to produce &lt;em&gt;Dr. No&lt;/em&gt; in 1962, Eon Productions has only ever made one other film. Albert Broccoli (the founder) did also produce &lt;em&gt;Chitty Chitty Bang Bang&lt;/em&gt; on the side though. &lt;a href=&quot;#fnref:bond-fn3&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:bond-fn4&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt;Cinematographer for Coen brothers films (e.g., &lt;em&gt;Fargo&lt;/em&gt; and &lt;em&gt;No Country for Old Men&lt;/em&gt; etc.), Denis Villeneuve films (including &lt;a href=&quot;http://words.patmurraydev.com/2018/09/03/2015-09-28-sicario.html&quot;&gt;&lt;em&gt;Sicario&lt;/em&gt;&lt;/a&gt;), &lt;em&gt;The Shawshank Redemption&lt;/em&gt;… just to name a few. &lt;a href=&quot;#fnref:bond-fn4&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:bond-fn5&quot; style=&quot;line-height: 18px;&quot;&gt;
&lt;p&gt;I&amp;rsquo;m trying to write this without spoiling much about his character. The story is set up so that it&amp;rsquo;s a big reveal and I don&amp;rsquo;t want to ruin that for you. If, however, you&amp;rsquo;ve read some of the books, or remember the old movies you can probably guess some of who the character is. Though it does mess with the original canon slightly. &lt;a href=&quot;#fnref:bond-fn5&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;



&lt;/ol&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/spectre&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Fri, 13 Nov 2015 01:42:11 +0000</pubDate>
				<link>https://patmurray.co/words/spectre</link>
				<guid isPermaLink="true">https://patmurray.co/words/spectre</guid>
			</item>
			
		
			
			<item>
				<title>Pat Watched</title>
					<description>
						&lt;p&gt;Inspired by Alex Forey’s site &lt;a href=&quot;http://watched.alexforey.com&quot;&gt;Alex Watched&lt;/a&gt;, I have decided to start logging the films I watch. In this post I will outline the decisions I’ve made and how I’ll go about this.

&lt;img class=&quot;extrawide&quot; src=&quot;https://78.media.tumblr.com/5a060dd14f2b793f83afa7294043683f/tumblr_inline_p7ixkt52481t0eqx6_540.png&quot; data-orig-height=&quot;784&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/ef315651a7f02e37df60d14fcc1bd7cb/tumblr_inline_nx9jenD57s1t0eqx6_1280.png&quot;/&gt;

&lt;p&gt;The first thing that I did was look at Alex’s site for inspiration. I really like the minimal approach he took, and the simplicity of hosting on Tumblr. So I registered &lt;a href=&quot;http://patwatched.tumblr.com&quot;&gt;patwatched.tumblr.com&lt;/a&gt; and uploaded the posters for a few films (allowing me some content to play with).&lt;/p&gt;

&lt;p&gt;I opened the inspector on Alex&amp;rsquo;s site and started digging around. Very quickly I had a pretty good approximation made of his site in the form of a Tumblr theme[^1]. &lt;/p&gt;

&lt;p&gt;The next thing I set out to achieve was the hover-over effect for the stars. This uses some nifty JavaScript and CSS `z-index`. The effect, shown in gif form below, is to put the star rating for a movie below the poster and have the opacity animate on hover. &lt;/p&gt;

&lt;img src=&quot;http://zippy.gfycat.com/ParallelDenseDarwinsfox.gif&quot; alt=&quot;&quot;&gt;

&lt;p&gt;Alex&amp;rsquo;s site just animates opacity, but I wanted to take it a step further. After some trial and error I settled on a collection of filters that achieve a subtle but unique effect. This is to lower the saturation to 10%, decrease the brightness to 70%, and double the contrast. All of this is animated over 0.4 of a second.&lt;/p&gt;

&lt;p&gt;CSS for poster animation:&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
.poster:hover {
    opacity: 0.3;
    transition: .4s all ease;
    filter: grayscale(0.9) brightness(0.7) contrast(2); 
    /* add browser prefixes */
}
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;The DIV that holds the stars and title sits below the poster at `z-index: 1;` and the poster sits at `z-index: 2;`. This means when the poster drops opacity the stars shine through.&lt;/p&gt;
    

&lt;div style=&quot;display: block;
position: relative;
content: &apos;&apos;;
width: 100px;
height: 2px;
margin-top: 30px;
margin-bottom: 30px;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
background: #D85F46;
&quot;&gt;&lt;/div&gt;

&lt;p&gt;Tumblr allows multi-word tags on posts. To create the stars and the title, while still supporting tags I stole some of Alex&amp;rsquo;s javascript and added my own. The first if statement converts a single digit number into the stars. I added the second if statement that converts tags beginning with &lt;code&gt;title_&lt;/code&gt; into the title.&lt;/p&gt;

&lt;p&gt;Javascript &lt;code&gt;addStars()&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$(&quot;.wrapper div .tag&quot;).map(function() {
    if (this.id.length  0) {
        $(this).parent().append(Array(parseInt(this.id.match(
            /[0-9]/)) + 1).join(&quot;&amp;amp;#9733;&quot;));
        this.remove();
    } else if (this.id.match(&quot;^title_ &quot;)) {
        var title = this.id.replace(&quot;title_ &quot;, &quot;&quot;);
        $(this).parent().append(&quot;&amp;lt;h3 class=&apos;\&quot;name\&quot;&apos;&amp;gt;&quot; + title + &quot;&amp;lt;/h3&amp;gt;&quot;);
        this.remove();
    }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Initially I had any other tag convert to the title. However, this didn&amp;rsquo;t allow me to add extra tags to a post. Tumblr searches posts by tags, so for example &lt;em&gt;Furious 7&lt;/em&gt; can&amp;rsquo;t be searched for with the string &amp;ldquo;fast and the furious&amp;rdquo; unless it&amp;rsquo;s in the tags. So I added the &lt;code&gt;title_&lt;/code&gt; prefix to the correct title, allowing me to add as many other tags as I want.&lt;/p&gt;

&lt;p&gt;For movies that I&amp;rsquo;ve written reviews I add the link to the &lt;code&gt;content source&lt;/code&gt; of the post. Using some Tubmlr theme tags I add a ribbon to the top of posters with reviews:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{block:ContentSource}
    &amp;lt;div class=&quot;ribbon poster&quot;&amp;gt;&amp;lt;span&amp;gt;Review&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
{/block:ContentSource}
&lt;/code&gt;&lt;/pre&gt;

&lt;div style=&quot;display: block;
position: relative;
content: &apos;&apos;;
width: 100px;
height: 2px;
margin-top: 30px;
margin-bottom: 30px;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
background: #D85F46;
&quot;&gt;&lt;/div&gt;

&lt;p&gt;Right now I&amp;rsquo;m downloading movie posters from &lt;a href=&quot;https://www.themoviedb.org&quot;&gt;themoviedb.org&lt;/a&gt; and uploading them to the Tumblr dashboard. I need to find a better way search and upload posters.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s a pretty simple site right now, but it allows me to share and track the films I&amp;rsquo;ve seen. This way when someone asks me what films I like I can look it up here.&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/pat-watched&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Wed, 11 Nov 2015 08:44:13 +0000</pubDate>
				<link>https://patmurray.co/words/pat-watched</link>
				<guid isPermaLink="true">https://patmurray.co/words/pat-watched</guid>
			</item>
			
		
			
			<item>
				<title>Introducing The Collection</title>
					<description>
						&lt;center&gt;

&lt;h4&gt;&lt;a href=&quot;http://thecollection.patmurray.co/one/&quot;&gt;Read Edition One online now&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;/p&gt;&lt;/center&gt;

&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;690&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/698babacabd1deb9c98a2665f5552b77/tumblr_inline_nx03t4luY81t0eqx6_1280.png&quot;&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://78.media.tumblr.com/48fbfbcf698eb69518c241c785dfc103/tumblr_inline_p7ixktxApG1t0eqx6_540.png&quot; data-orig-height=&quot;690&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/698babacabd1deb9c98a2665f5552b77/tumblr_inline_nx03t4luY81t0eqx6_1280.png&quot;/&gt;&lt;/figure&gt;&lt;p&gt;Today I’m starting a new website, a magazine of sorts. We need a way to share all the great things we find online in a more manageable way than multiple Facebook posts. &lt;strong&gt;The Collection is the first step towards that. A weekly digest of some things I think you should read, The Collection aims to introduce you to the wide range of cool topics across the internet you’d have never crossed before.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s currently very much so a minimum viable product, that will be iterated upon rapidly.  A one way street right now, if reception is good I’d love to take it towards a community.&lt;/p&gt;

&lt;p&gt;With no plans for monetisation, very little free time to be committing to a weekly schedule, and no idea of potential reception, The Collection is an experiment. It will most likely not succeed, but I’m willing to try.&lt;/p&gt;

&lt;p&gt;If you have any thoughts, shoot me message. For now, read &lt;a href=&quot;http://thecollection.patmurray.co/one/&quot;&gt;Edition One&lt;/a&gt;.&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/introducing-the-collection&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sun, 25 Oct 2015 01:44:02 +0000</pubDate>
				<link>https://patmurray.co/words/introducing-the-collection</link>
				<guid isPermaLink="true">https://patmurray.co/words/introducing-the-collection</guid>
			</item>
			
		
			
			<item>
				<title>NCIS: Gibbs’ Rules 4.1</title>
					<description>
						&lt;p&gt;A little over a month after the redesigned version 4.0, &lt;strong&gt;Gibbs’ Rules 4.1🍍&lt;/strong&gt; is available as a free update. The main changes are filtering the different types of rules and a new starred rules interface. There’s also a tonne of under-the-hood improvements.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://geo.itunes.apple.com/us/app/ncis-gibbs-rules/id406128109?mt=8&amp;amp;at=11lMp7&amp;amp;ct=blog-announcement41&quot;&gt;&lt;/a&gt;
&lt;a href=&quot;https://geo.itunes.apple.com/us/app/ncis-gibbs-rules/id406128109?mt=8&amp;amp;at=11lMp7&amp;amp;ct=blog-announcement41&quot;&gt;&lt;img style=&quot;width: 180px&quot; src=&quot;http://linkmaker.itunes.apple.com/images/badges/en-us/badge_appstore-lrg.svg&quot; alt=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Rule Filtering&lt;/h2&gt;

&lt;p&gt;NCIS features rules that are not part of Gibbs’ core rules. I initially decided to exclude these “other” rules from &lt;strong&gt;Gibbs’ Rules&lt;/strong&gt;, but after many requests I included them rudimentarily in a rule data update a few weeks ago. In version 4.1 you can now filter which rules you wish to show. Using the tabs (shown below) you can filter the rules by All, only Gibbs’, and only Other.
&lt;img style=&quot;width: 400px;&quot; src=&quot;https://78.media.tumblr.com/12c1c6985fd4b64c9fdb0ac56e61cbb5/tumblr_inline_nvzdir27eR1t0eqx6_1280.png&quot;/&gt;&lt;/p&gt;

&lt;h2&gt;Faster Starred Rules&lt;/h2&gt;

&lt;p&gt;The redesigned Starred Rules screen allows for lightning fast access to your most loved rules. With large buttons that show only the number, the Starred Rules screen is the fasted way to get to those rules you need right now. “Other” rules are differentiated from Gibbs’ rules as &lt;code&gt;.1&lt;/code&gt;.
&lt;img style=&quot;width: 400px;&quot; src=&quot;https://78.media.tumblr.com/f8e068c471cba88c750751c3c86060b0/tumblr_inline_nvzdquglDy1t0eqx6_1280.png&quot;/&gt;&lt;/p&gt;

&lt;h2&gt;Improved Search&lt;/h2&gt;

&lt;p&gt;You can now search with just the rule number. This means getting to that rule just mentioned in the show even faster. The search bar only searches according to your rule filtering. This means that if you only want to see Gibbs’ rules, you only search Gibbs’ rules.
&lt;img style=&quot;width: 400px;&quot; src=&quot;https://78.media.tumblr.com/ad20ca8f9a4c5fc834cd1d233f852fdf/tumblr_inline_nvze2sYBw41t0eqx6_1280.png&quot;/&gt;&lt;/p&gt;

&lt;h2&gt;Spotlight Search&lt;/h2&gt;

&lt;p&gt;With the new system wide Spotlight Search on iOS 9 you can now search for Gibbs’ rules. This means you can get to the rule you want to without having to first open &lt;strong&gt;Gibbs’ Rules&lt;/strong&gt;.
&lt;img style=&quot;width: 400px;&quot; src=&quot;https://78.media.tumblr.com/24247e1f67902fb98aec6f87b2e00479/tumblr_inline_nvze858Too1t0eqx6_1280.png&quot;/&gt;&lt;/p&gt;

&lt;h2&gt;Important Fixes&lt;/h2&gt;

&lt;p&gt;Version 4.1🍍 of &lt;strong&gt;Gibbs’ Rules&lt;/strong&gt; includes a collection of important bug fixes. These include:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Fixed an issue where starring “other” rules would &lt;strong&gt;cause duplicates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Fixed an issue where &lt;strong&gt;starring a rule then quickly opening starred rules&lt;/strong&gt; would crash &lt;strong&gt;Gibbs’ Rules&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Fixed an issue where the &lt;strong&gt;settings screen&lt;/strong&gt; would fail to load and appear blank&lt;/li&gt;
&lt;li&gt;Fixed several other crashes&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href=&quot;https://geo.itunes.apple.com/us/app/ncis-gibbs-rules/id406128109?mt=8&amp;amp;at=11lMp7&amp;amp;ct=blog-announcement41&quot;&gt;&lt;/a&gt;
&lt;a href=&quot;https://geo.itunes.apple.com/us/app/ncis-gibbs-rules/id406128109?mt=8&amp;amp;at=11lMp7&amp;amp;ct=blog-announcement41&quot;&gt;&lt;img style=&quot;width: 180px&quot; src=&quot;http://linkmaker.itunes.apple.com/images/badges/en-us/badge_appstore-lrg.svg&quot; alt=&quot;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/ncis-gibbs-rules-41&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Fri, 16 Oct 2015 21:45:04 +0000</pubDate>
				<link>https://patmurray.co/words/ncis-gibbs-rules-41</link>
				<guid isPermaLink="true">https://patmurray.co/words/ncis-gibbs-rules-41</guid>
			</item>
			
		
			
			<item>
				<title>Thoughts on Australian Data Retention</title>
					<description>
						&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;3137&quot; data-orig-width=&quot;4705&quot; data-orig-src=&quot;https://images.unsplash.com/photo-1417733403748-83bbc7c05140?q=80&amp;amp;fm=jpg&amp;amp;s=21376e91eeedb02e4ee5bb72a15bbdd5&quot;&gt;&lt;img class=&quot;fullwidth&quot; style=&quot;max-height: 380px; overflow: hidden;  object-fit: cover;&quot; src=&quot;https://images.unsplash.com/photo-1417733403748-83bbc7c05140?q=80&amp;amp;fm=jpg&amp;amp;s=21376e91eeedb02e4ee5bb72a15bbdd5&quot; data-orig-height=&quot;3137&quot; data-orig-width=&quot;4705&quot; data-orig-src=&quot;https://images.unsplash.com/photo-1417733403748-83bbc7c05140?q=80&amp;amp;fm=jpg&amp;amp;s=21376e91eeedb02e4ee5bb72a15bbdd5&quot;/&gt;&lt;/figure&gt;&lt;p&gt;On May 20, 2013 Edward Snowden flew to Tokyo after leaving his job as a contractor at the NSA, mere weeks later he revealed to the world PRISM. Since then, countless more documents have been released revealing the extent to which the US and allied governments have been unlawfully spying on their citizens.&lt;/p&gt;

&lt;p&gt;In 2015, with bipartisan support, the Australian government passed the &lt;a href=&quot;http://www.aph.gov.au/Parliamentary_Business/Bills_Legislation/Bills_Search_Results/Result?bId=r5375&quot;&gt;&lt;em&gt;Telecommunications (Interception and Access) Amendment (Data Retention) Bill 2015&lt;/em&gt;&lt;/a&gt;. Tomorrow&amp;mdash;October 13, 2015&amp;mdash;this bill comes into effect. The laws state that all data &lt;strong&gt;must&lt;/strong&gt; be kept for two years, this includes telephone logs, sms logs, online activity logs, and email metadata. At the discretion of the Attorney-General&lt;sup id=&quot;fnref:fn1&quot;&gt;&lt;a href=&quot;#fn:fn1&quot; class=&quot;footnote-ref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, &lt;strong&gt;most-all agencies can access this data without a warrant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Australia was a key member of the clandestine surveillance program Five-Eyes, but from tomorrow the government has legalised what was previously only a shady NSA activity.&lt;/p&gt;

&lt;p&gt;Waved through parliament at irresponsible speed, the &lt;em&gt;Data Retention Bill 2015&lt;/em&gt; was marketed as our greatest weapon in the war on terror. There is no sunset clause in the legislation. There is nothing to stop &lt;em&gt;fishing expeditions&lt;/em&gt;; a search or investigation undertaken with the hope, though not the stated purpose, of discovering information&lt;sup id=&quot;fnref:fn3&quot;&gt;&lt;a href=&quot;#fn:fn3&quot; class=&quot;footnote-ref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Most importantly, you will never be informed of an agency accessing your metadata. Revealing that someone&amp;rsquo;s data has been accessed carries a two-year jail sentence.&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h2&gt;Agencies With Access&lt;/h2&gt;

&lt;p&gt;As &lt;a href=&quot;http://www.smh.com.au/technology/technology-news/data-retention-and-the-end-of-australians-digital-privacy-20150827-gj96kq.html&quot;&gt;Quentin Dempster&lt;/a&gt; highlights, the list of agencies already with approval to access this data is almost as long as the list of agencies in Australia. Just include Australia Post and it&amp;rsquo;ll be warrantless-privacy-invasion party, &lt;a href=&quot;http://stationery.auspost.com.au/cafe-cleaning/kitchen-catering-supplies/party-supplies/alpen-party-supplies-confetti-assorted-1kg.html&quot;&gt;confetti&lt;/a&gt; included&lt;sup id=&quot;fnref:fn2&quot;&gt;&lt;a href=&quot;#fn:fn2&quot; class=&quot;footnote-ref&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;h4&gt;Government and law enforcement agencies with unrestricted access to your data:&lt;/h4&gt;

&lt;ul&gt;&lt;li&gt;ASIO (Australian Security Intelligence Organisation)&lt;/li&gt;
&lt;li&gt;Australian Federal Police&lt;/li&gt;
&lt;li&gt;All state and territory police forces&lt;/li&gt;
&lt;li&gt;The Australian Commission for Law Enforcement Integrity&lt;/li&gt;
&lt;li&gt;Australian Crime Commission&lt;/li&gt;
&lt;li&gt;Australian Customs and Border Protection Service&lt;/li&gt;
&lt;li&gt;Australian Securities and Investments Commission&lt;/li&gt;
&lt;li&gt;Australian Competition and Consumer Commission&lt;/li&gt;
&lt;li&gt;NSW Crime Commission&lt;/li&gt;
&lt;li&gt;NSW Independent Commission Against Corruption&lt;/li&gt;
&lt;li&gt;NSW Police Integrity Commission&lt;/li&gt;
&lt;li&gt;Queensland Crime and Corruption Commission&lt;/li&gt;
&lt;li&gt;West Australian Corruption and Crime Commission&lt;/li&gt;
&lt;li&gt;South Australian Independent Commission Against Corruption&lt;/li&gt;
&lt;li&gt;Any other agency the Attorney General publicly declares&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Since when has the &lt;em&gt;Australian Competition and Consumer Commission&lt;/em&gt; (ACCC) fought against terrorists? The ACCC is meant to protect me against bad products and shonky workers. Not terrorists.&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h2&gt;We&amp;rsquo;re Going Backwards&lt;/h2&gt;

&lt;p&gt;While countries around the world, lead by Europe, are legislating safe guards into their data retention laws, Australia has done the exact opposite. The USA has just passed the &lt;em&gt;Freedom Act&lt;/em&gt; which &lt;em&gt;limits&lt;/em&gt; agencies access to phone logs. The EU has passed many acts with the freedom of its people in mind.&lt;/p&gt;

&lt;p&gt;China and Australia on the other hand? Well they&amp;rsquo;re expanding their retention and access laws as fast as they can print the bills themselves.&lt;/p&gt;

&lt;p&gt;Edward Snowden, at the Progress 2015 conference (via video link), condemned Australia for its new law. Saying, &lt;em&gt;&amp;ldquo;What this means is they are watching everybody all the time. They’re collecting information and they’re just putting it in buckets that they can then search through not only locally, not only in Australia, &lt;strong&gt;but they can then share this with foreign intelligences services&lt;/strong&gt;.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;

&lt;center&gt;

&lt;h3&gt;&lt;em&gt;&amp;ldquo;They can trawl through this information in the same way. Whether or not you’re doing anything wrong you’re being watched.&amp;rdquo;&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Edward Snowden&lt;/p&gt;

&lt;/center&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h2&gt;Stopping the Bad Guys&lt;/h2&gt;

&lt;p&gt;Quentin Dempster, writing for the Sydney Morning Herald; &lt;em&gt;A spokesperson for the Attorney General’s Department told Fairfax Media metadata was a vital tool used in “virtually every counter-terrorism, organised crime, counter-espionage, cyber-security, child exploitation and serious crime investigation”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The case made for metadata retention is it is in the name of terrorism. With all this data on every Australian we can stop the bad guys before they attack. This is yet to be proved.&lt;/p&gt;

&lt;p&gt;In both the 2014 Sydney Siege and the 2015 Charlie Hebdo shooting, the attackers were known to the government. Having more data on other persons would not have increased the authorities knowledge of these attackers.&lt;/p&gt;

&lt;p&gt;There is &lt;a href=&quot;http://www.abc.net.au/news/2014-10-30/retention-bill-has-no-evidence-of-need/5855694&quot;&gt;literally no empirical evidence&lt;/a&gt; mass data retention helps authorities. If anything there&amp;rsquo;s too much data to be useful.&lt;/p&gt;

&lt;p&gt;Having said that, spying to stop potential threats is incredibly necessary. The question is not whether we should empower the AFP and ASIO to perform activities to gather information on known &amp;ldquo;bad guys&amp;rdquo;, but rather should we let them spy on all of us?&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h2&gt;But, I&amp;rsquo;ve Got Nothing To Hide&lt;/h2&gt;

&lt;p&gt;I should be able to debunk this claim with one example, made by Michael Bradley for The Drum. Your data can be subpoenaed for production in &lt;strong&gt;any&lt;/strong&gt; court proceedings. Let&amp;rsquo;s hope your soon-to-be ex-partner doesn&amp;rsquo;t decide that your web logs are of importance to the &lt;em&gt;civil&lt;/em&gt; law custody battle over your children.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s pretty safe to say most of us aren&amp;rsquo;t &amp;ldquo;bad guys&amp;rdquo;. I doubt any of you have plans that will require a government agency to access your metadata &lt;sup id=&quot;fnref:fn5&quot;&gt;&lt;a href=&quot;#fn:fn5&quot; class=&quot;footnote-ref&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;, but I can almost guarantee some of you will have your data accessed for something less exciting but still impactful to you.&lt;/p&gt;

&lt;p&gt;Many proponents of data retention argue that because we&amp;rsquo;ve already given more data to Facebook and the like, it shouldn&amp;rsquo;t matter. Firstly, Facebook and the level of access you give it to your life is purely &lt;em&gt;opt-in&lt;/em&gt;. Secondly, for an agency to gain access to your Facebook data they must provide Facebook&amp;rsquo;s lawyers with a warrant for the data. From tomorrow, these agencies need no warrant, remember?&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h2&gt;Dear Hackers, We&amp;rsquo;re Open For Business&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://exchange.telstra.com.au/2015/03/27/securing-your-data/&quot;&gt;Telstra&lt;/a&gt;, in a blog post, outlined one of my great concerns with data retention. &amp;ldquo;We are creating what has been called a ‘honey pot’ for hackers and criminals to target.&amp;rdquo; Surely, in the last few years it has become apparent to the general population, just as the InfoSec community has always known, &lt;strong&gt;everything can and will be hacked&lt;/strong&gt;.&lt;/p&gt;

&lt;center&gt;

&lt;h3&gt;&lt;em&gt;&amp;ldquo;A ‘honey pot’ for hackers and criminals to target&amp;rdquo;&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Mike Burgess (for Telstra)&lt;/p&gt;

&lt;/center&gt;

&lt;p&gt;Just this week President Obama, speaking in Cupertino, &amp;ldquo;backed down in [his] bitter dispute with Silicon Valley over the encryption of data on iPhones and other digital devices, concluding that it is not possible to give American law enforcement and intelligence agencies access to that information &lt;strong&gt;without also creating an opening that China, Russia, cybercriminals and terrorists could exploit.&lt;/strong&gt;&amp;rdquo; (Nicole Perlroth and David E. Sanger for the &lt;a href=&quot;http://www.nytimes.com/2015/10/11/us/politics/obama-wont-seek-access-to-encrypted-user-data.html?_r=0&quot;&gt;New York Times&lt;/a&gt;, Oct, 10, 2015).&lt;/p&gt;

&lt;p&gt;Even if the government doesn&amp;rsquo;t access your metadata, and your soon-to-be ex-partner (or insurance company, or employer, or whomever is suing you) doesn’t access your data, someone is probably going to hack it and dump it Ashley Madison style. Then some kid in his parents&amp;rsquo; basement is going to ruin your life because they know everything about you.&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h1&gt;What Can I Do About It?&lt;/h1&gt;

&lt;p&gt;Okay, we get the point, this is shit. If you&amp;rsquo;re still not convinced or want to learn more I highly recommend Crikey&amp;rsquo;s article &lt;a href=&quot;http://www.crikey.com.au/2015/03/18/your-guide-to-the-data-retention-debate-what-it-is-and-why-it%E2%80%99s-bad/&quot;&gt;&lt;em&gt;Your guide to the data retention debate: what it is and why it’s bad&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;What can I do, considering from midnight tonight everything is collected?&lt;/h4&gt;

&lt;p&gt;For once I can say follow our Prime Minister, The Honourable Malcolm Bligh Turnbull MP, in his &lt;a href=&quot;https://www.instapaper.com/read/642762603&quot;&gt;technology choices&lt;/a&gt;&lt;sup id=&quot;fnref:fn6&quot;&gt;&lt;a href=&quot;#fn:fn6&quot; class=&quot;footnote-ref&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. Malcolm uses Wickr and WhatsApp because he doesn&amp;rsquo;t want people reading his person messages.&lt;/p&gt;

&lt;p&gt;He said, &amp;ldquo;I don&amp;rsquo;t give technical advice, I provide a bit of background. I&amp;rsquo;m not the tech butler, I&amp;rsquo;m the Communications Minister, &lt;strong&gt;but I think it&amp;rsquo;s important to be aware of security&lt;/strong&gt;&amp;rdquo;. Ah yes, security, privacy remember those things in the future when they were once a distant memory.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://www.eff.org&quot;&gt;Electronic Frontier Foundation&lt;/a&gt; (EFF) has an up-to-date &lt;a href=&quot;https://www.eff.org/secure-messaging-scorecard&quot;&gt;ranking of private messaging services&lt;/a&gt;. You can look through the list, but my choice is Apple&amp;rsquo;s iMessage service. Yes, it&amp;rsquo;s neither open source, nor can you truely verify the identity of the other party, but it fits all other categories. Along with this Apple is heralded for its strong, at times to the detriment of user experience, stance on &lt;a href=&quot;http://www.apple.com/au/privacy/&quot;&gt;privacy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Regarding email, you&amp;rsquo;re best bet is with an off-shore hosting company. It is difficult to understand where Google (Gmail) stand with tomorrow&amp;rsquo;s new laws, however they would be a better option than say a BigPond or Optus email address. &lt;a href=&quot;https://www.fastmail.com&quot;&gt;FastMail&lt;/a&gt;, an Australian company, locates its servers off Australian soil just so that they don&amp;rsquo;t have to abide by the new laws.&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h2&gt;Internet Access and Pirating&lt;/h2&gt;

&lt;p&gt;While not designed for the punishment of illegal pirating, the Data Retention laws will almost certainly be used for it. We have our friends at Village Roadshow to thank for that.&lt;/p&gt;

&lt;p&gt;A VPN is your best bet at limiting the amount of data related to internet traffic that the government gets. Luke Hopewell, of Gizmodo Australia, has a &lt;a href=&quot;http://www.gizmodo.com.au/2015/06/the-best-vpn-providers-what-you-need-to-know/&quot;&gt;great write-up about the current state of VPNs in Australia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h1&gt;In Summary&lt;/h1&gt;

&lt;p&gt;We&amp;rsquo;re screwed. You can take some measures to protect your privacy, but all it takes is one person to not take these measures and you&amp;rsquo;re screwed anyway. Sure you use a reputable email service, but does the person you&amp;rsquo;re emailing? Now the government has that metadata, they just got it from someone else.&lt;/p&gt;

&lt;p&gt;Lastly, I forgot to mention, Joe Hockey allocated $180MM from the last budget towards the cost of retaining all this data for two years. This isn&amp;rsquo;t going to come close to covering the costs for the telcos and Australian businesses. Prepare for a surveillance tax.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.dailymail.co.uk/i/pix/2015/08/11/07/2B42CC4900000578-3192302-The_grey_striped_jumper_worn_by_Federal_Arts_Minister_George_Bra-m-11_1439273052605.jpg&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;&lt;center style=&quot;font-style: italic; color: #D85F45; margin-top: -20px; margin-bottom: 30px;&quot;&gt;Don&amp;rsquo;t forget, this man doesn&amp;rsquo;t know what the word metadata means, but he decides who gets yours.&lt;/center&gt;

&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;565&quot; data-orig-width=&quot;600&quot; data-orig-src=&quot;http://stationery.auspost.com.au/media/catalog/product/cache/3/image/9df78eab33525d08d6e5fb8d27136e95/A/U/AU-1482424_1.jpg&quot;&gt;&lt;img style=&quot;width: 100px&quot; src=&quot;https://78.media.tumblr.com/35e0f77df14db725f2598e37ebe6b736/tumblr_inline_p7ixkwDnG41t0eqx6_540.jpg&quot; data-orig-height=&quot;565&quot; data-orig-width=&quot;600&quot; data-orig-src=&quot;http://stationery.auspost.com.au/media/catalog/product/cache/3/image/9df78eab33525d08d6e5fb8d27136e95/A/U/AU-1482424_1.jpg&quot;/&gt;&lt;/figure&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id=&quot;fn:fn1&quot;&gt;
&lt;p&gt;Our glorious Senator the Hon George Brandis QC. &lt;a href=&quot;#fnref:fn1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:fn3&quot;&gt;
&lt;p&gt;Oxford English Dictionary, provided by Apple Inc.. Accessed Oct 11, 2015. &lt;a href=&quot;#fnref:fn3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:fn2&quot;&gt;
&lt;p&gt;Yeah our national mail service sells 1kg bags of confetti for twenty-something dollars. And yeah I do plan on buying some. &lt;a href=&quot;#fnref:fn2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:fn5&quot;&gt;
&lt;p&gt;Which, remember, you will never be informed of&amp;hellip; &lt;a href=&quot;#fnref:fn5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:fn6&quot;&gt;
&lt;p&gt;Yeah, that sentence was not possible this time last month. By the way, Malcolm was Communications Minister when this bill passed. &lt;a href=&quot;#fnref:fn6&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/thoughts-on-australian-data-retention&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Mon, 12 Oct 2015 10:11:21 +0000</pubDate>
				<link>https://patmurray.co/words/thoughts-on-australian-data-retention</link>
				<guid isPermaLink="true">https://patmurray.co/words/thoughts-on-australian-data-retention</guid>
			</item>
			
		
			
			<item>
				<title>Clovelly Beach Vignette</title>
					<description>
						&lt;iframe class=&quot;extrawide&quot; src=&quot;https://player.vimeo.com/video/141872497?color=ff9933&amp;amp;title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; width=&quot;900&quot; height=&quot;376&quot; frameborder=&quot;0&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;

&lt;center&gt;

&lt;section class=&quot;border&quot;&gt;&lt;button onclick=&quot;location.href=&apos;https://vimeo.com/141872497&apos;&quot;&gt;Watch in HD on Vimeo&lt;/button&gt;
&lt;/section&gt;&lt;p&gt;&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;On Friday afternoon I went for a walk around my local beach, &lt;a href=&quot;https://en.wikipedia.org/wiki/Clovelly,_New_South_Wales&quot;&gt;Clovelly&lt;/a&gt;. I took my Canon S120 and filmed for a few minutes. This little vignette is the result. &lt;em&gt;Watch it on &lt;a href=&quot;https://vimeo.com/141872497&quot;&gt;Vimeo&lt;/a&gt; for the HD version.&lt;/em&gt;&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/clovelly-beach-vignette&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Fri, 09 Oct 2015 06:28:00 +0000</pubDate>
				<link>https://patmurray.co/words/clovelly-beach-vignette</link>
				<guid isPermaLink="true">https://patmurray.co/words/clovelly-beach-vignette</guid>
			</item>
			
		
			
			<item>
				<title>The Martian: Humour, Explosions, and Red Dirt</title>
					<description>
						&lt;h4&gt;&lt;i&gt;Review of Ridley Scott’s 2015 film adaptation of Andy Weir&amp;rsquo;s novel&lt;/i&gt; The Martian. &lt;i&gt;Starring Matt Damon, Jessica Chastain, Kristen Wiig, Jeff Daniels, Michael Peña, Kate Mara, Sean Bean, Sebastian Stan, Aksel Hennie, and Chiwetel Ejiofor&lt;/i&gt;.&lt;/h4&gt;


&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;1076&quot; data-orig-width=&quot;2000&quot; data-orig-src=&quot;http://s.newsweek.com/sites/www.newsweek.com/files/2015/06/08/martian-gallery2-gallery-image_0.jpg&quot;&gt;&lt;img class=&quot;fullwidth&quot; style=&quot;max-height: 380px; overflow: hidden;  object-fit: cover;&quot; src=&quot;https://s.newsweek.com/sites/www.newsweek.com/files/2015/06/08/martian-gallery2-gallery-image_0.jpg&quot; data-orig-height=&quot;1076&quot; data-orig-width=&quot;2000&quot; data-orig-src=&quot;http://s.newsweek.com/sites/www.newsweek.com/files/2015/06/08/martian-gallery2-gallery-image_0.jpg&quot;/&gt;&lt;/figure&gt;Vast red landscapes, unwavering humour, and intense breath-holding disasters. &lt;i&gt;The Martian&lt;/i&gt; takes inter-planetary travel, makes it deeply personal, and holds you captive for two-and-a-half hours of gripping story mixed with phenomenal visuals. By no means an exact adaptation, Scott&amp;rsquo;s &lt;i&gt;The Martian&lt;/i&gt; stays very true to Weir&amp;rsquo;s novel adding another must-see movie to the ever growing list of superb 2015 films. 

I went into the screening[^fn1] excited to see how Scott had transformed the novel. I was also apprehensive for how the written logs and pages of explanation would be transferred to movie form. One thing I love about Weir&amp;rsquo;s book is the exploration of how the main character, Mark Watney [Damon], made decisions and drew conclusions based on both his vast knowledge combined with an unapologetically dry wit. With limited exceptions I am pleased with Scott and Damon&amp;rsquo;s on screen rendition of this.

&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;689&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/65a282c1a78059432a185c67f90b0bb0/tumblr_inline_nvkjteDw8U1t0eqx6_1280.jpg&quot;&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://78.media.tumblr.com/25bc50bf0050bb75d1e5765bac1f1352/tumblr_inline_p7ixkvnESD1t0eqx6_1280.jpg&quot; data-orig-height=&quot;689&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/65a282c1a78059432a185c67f90b0bb0/tumblr_inline_nvkjteDw8U1t0eqx6_1280.jpg&quot;/&gt;&lt;/figure&gt;

Following some beautiful cinematic shots of Mars[^fn2], the film opens with the crew of Ares 3 (the third manned mission to Mars) performing their daily duties. We are introduced to the entire crew and their dynamic. Within a few minutes of the opening title a massive storm forces the crew to evacuate Mars. Just as they are fighting their way through the winds to the MAV[^fn3] Watney is hit by flying radio dish and lost into the storm. The crew, time constrained by the wind tipping the MAV, search for him but ultimately must leave him behind assuming he is dead. 

_The Martian&lt;/i&gt; is Mark Watney&amp;rsquo;s story of surviving on Mars when no one knows he&amp;rsquo;s alive. 

He sets about healing himself and starting a plan to ration out enough food to last until the Ares 4 mission in four years time. Going about his duties, setting up a small potato farm, and calculating the distance to the Ares 4 landing site, Mark both talks to himself or records video logs (in case someone one day finds them). This allows the audience to create a rapport with the character in what could have been an otherwise very silent film. 

As the film progresses and Watney becomes more accustomed to talking into GoPro-like cameras mounted all over the Habitat, the number of jokes increases. Watney explores issues of existence and isolation through humorous anecdotes and dry wit. Realising that legally Mars comes under maritime law, Watney is quick to name himself a space pirate (he is planning to use the Ares 4 MAV without permission). 

While Watney is trying to survive on Mars, a parallel story starts at NASA headquarters. Shortly following the funeral, NASA finally decides to fly a statelite over the Ares 3 site (something they&amp;rsquo;d been avoiding for fear to publishing photos of Watney&amp;rsquo;s body). They quickly discover that the rovers had been moved and the solar pannels cleaned. 


&lt;img src=&quot;https://40.media.tumblr.com/ae8b68f8cb1b03524212ad87fa193514/tumblr_inline_nvkk3xTbnl1t0eqx6_1280.jpg&quot; /&gt;

NASA puts all its efforts into trying to contact Watney and find ways of helping him survive the next four years. After contact is made the stories become one, Watney and NASA come to be on the same page. Helping Mark through the plans they&amp;rsquo;ve devised, things are looking up. The film becomes a story of science breaking through ranks, and humanity&amp;rsquo;s desire to be good to one an another. 

Almost everything that can go wrong does. From explosions to cracked space suits, to more explosions Scott shows that at any moment the hostility of space can and will try to destroy you. And that humour and science are the best weapons against it. 

With that said &lt;i&gt;The Martian&lt;/i&gt; does deviate quite significantly from the novel at times. The most notable differences come in the form of less problems and heroism for movie audience. 

A good portion of the story is excluded from the film. This is obvious when you think about how even with the story cut down, Scott&amp;rsquo;s version comes in at just under two and a half hours. Scott excludes a reasonably slow section of the book (that I assumed would have been a montage when I first read it) and thus excludes a few more of the &amp;ldquo;everything is going wrong&amp;rdquo; scenes[^fn4].

It&amp;rsquo;s understable but a shame that does mean the audience looses some of the feeling that Mars really is trying to kill Watney. While tonnes of things go wrong, the film never felt like as much of an uphill battle as the book. 

The other noticeable change is with the characters&amp;rsquo; actions. An important action performed by the Ares 3 crew is switched between two of the characters in the adaptation. My naive reasoning for this is because the action moved from a lesser known actor to a bigger name. While the decision didn&amp;rsquo;t impact the story at all, it did influence how I read the characters between the book and film. An unimportant difference, but a difference nonetheless. 

&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;689&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/e26d130e2080b196bebf1d7109b56812/tumblr_inline_nvkk3fkuJ91t0eqx6_1280.jpg&quot;&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://78.media.tumblr.com/0aa543155c2f4630113e5c8b1660ad1e/tumblr_inline_p7ixkv7tMq1t0eqx6_1280.jpg&quot; data-orig-height=&quot;689&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/e26d130e2080b196bebf1d7109b56812/tumblr_inline_nvkk3fkuJ91t0eqx6_1280.jpg&quot;/&gt;&lt;/figure&gt;Matt Damon was not the first person I thought of as playing Mark Watney when I read Weir&amp;rsquo;s novel. I was rather sceptical of if he could portray the &lt;i&gt;smiling-in-the-face-of-ultimate-loneliness&lt;/i&gt;scientist. Damon does an excellent job. The character is close enough, yet not identical, to the novel&amp;rsquo;s Mark Watney that I instantly came to like him. 

I also very much enjoyed Benedict Wong&amp;rsquo;s character, the JPL (Jet Propulsion Laboratory) engineer Bruce Ng. Wong encompasses an &amp;ldquo;all round knows what he&amp;rsquo;s talking about&amp;rdquo;, but also &amp;ldquo;knows how to take the piss&amp;rdquo;, engineer. He can communicate with both Jeff Daniels&amp;rsquo; Director of NASA and low level JPL scientists with the same level of humour.  

All up Scott did an excellent job casting &lt;i&gt;The Martian_. Every actor delivered a great performance that effectively adapted their written cahracter to a cinematic medium. Much of that credit must go to Scott and his ability to get the best out of any actor. However, due to the nature of the book to film conversion, many of the characters lost out in depth.

&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;854&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/caa487c8fc2819bfba5be7a3ffe60793/tumblr_inline_nvkk4eOKVQ1t0eqx6_1280.jpg&quot;&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://78.media.tumblr.com/162eb8b4d8e11c7d4df64804efe734e8/tumblr_inline_p7ixkwM9Sc1t0eqx6_1280.jpg&quot; data-orig-height=&quot;854&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/caa487c8fc2819bfba5be7a3ffe60793/tumblr_inline_nvkk4eOKVQ1t0eqx6_1280.jpg&quot;/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;center style=&quot;font-size: smaller; font-style: italic; color: #D85F45; margin-top: -20px; margin-bottom: 30px;&quot;&gt;Yeah, SCIENCE!&lt;/center&gt;

&lt;p&gt;I saw the film in 3D and am so glad that I did. 3D through the years has been a bit of a hit and miss, for many James Cameron&amp;rsquo;s &lt;em&gt;Avatar&lt;/em&gt; was the last film they saw in 3D. &lt;strong&gt;&lt;em&gt;The Martian&lt;/em&gt; should be viewed in 3D&lt;/strong&gt;. From the vast expanses of Mars&amp;rsquo; landscapes to the intimate close-ups of Watney, the 3D is used so gracefully as to enhance and never detract from the story.&lt;/p&gt;

&lt;p&gt;Most of the film is red (rather obviously) in tone. Most of the NASA sequences are blue in tone. The colour green features once; while Watney is growing potatoes in this habitat.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://78.media.tumblr.com/6b2f1e447238fb19a3d18558f00d71c4/tumblr_inline_nvkk2yr1AE1t0eqx6_1280.jpg&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;

&lt;p&gt;This select use of colour really highlights just how foreign, how distant and hostile, Mars is from Earth. The blue tones of NASA show that while they are on Earth they too are far removed from the grass covered hills that everyone else outside experiences. Scott creates isolation amongst the Earth bound characters as much as he does amongst those twelve light-minutes away.&lt;/p&gt;

&lt;p&gt;The visuals are so detailed you wouldn&amp;rsquo;t once think that maybe this might not actually be filmed on Mars. Despite everything that goes wrong with Watney and the Ares 3 mission, I want to visit Mars. Especially if accompanied by &lt;a href=&quot;https://geo.itunes.apple.com/au/album/martian-original-motion-picture/id1043613134?at=11lMp7&amp;amp;mt=1&amp;amp;app=music&quot;&gt;Harry Gregson-Williams Score&lt;/a&gt; (and maybe a few of Commander Lewis&amp;rsquo; [Chastain] disco music).&lt;/p&gt;

&lt;p&gt;For a lost in space sci-fi movie &lt;em&gt;The Martian&lt;/em&gt; is remarkably bright and welcoming. Even the night scenes and outer space scenes with the rest of the Ares 3 crew still feel uplifting.&lt;/p&gt;

&lt;p&gt;NPR&amp;rsquo;s Chris Klimek sums up the theme:&lt;/p&gt;

&lt;p&gt;&amp;gt; Bright, thematically can-do, fast-paced almost to a fault, and fundamentally optimistic … We will solve this daunting problem by working together, it coos.&lt;/p&gt;

&lt;p&gt;Scott, using Weir&amp;rsquo;s story, has made a film in which the entire audience and world are rooting for the survival of a single person. This is Damon&amp;rsquo;s show. I found myself less invested in his pain than the paper Mark Watney, and yet still cared so much about his survival. 
Comparable to &lt;em&gt;Castaway&lt;/em&gt; only in premise, &lt;em&gt;The Martian&lt;/em&gt; is about thousands of people coming together and (literally) putting international politics aside to solve a common goal. The goal of ultimate survival. At times you question the billions of dollars being spent on the saving of a man already once thought to be dead, but in the end you see that humans will stop at nothing to save someone.&lt;/p&gt;

&lt;p&gt;If you only saw one movie this year, I would not make it &lt;em&gt;The Martian&lt;/em&gt; (&lt;em&gt;Mad Max&lt;/em&gt; still takes that cake). If you see two, make &lt;em&gt;The Martian&lt;/em&gt; the second. While you&amp;rsquo;re at it, pick up a copy of Weir&amp;rsquo;s novel&lt;sup id=&quot;fnref:fn5&quot;&gt;&lt;a href=&quot;#fn:fn5&quot; class=&quot;footnote-ref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. I honestly don&amp;rsquo;t think it matters which order you read/view them in, you will enjoy it no matter what.&lt;/p&gt;

&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;689&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/d18794ea05919e67afb90de54501a7b8/tumblr_inline_nvkk35uriA1t0eqx6_1280.jpg&quot;&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://78.media.tumblr.com/f2c661bb4ffe6d457adfb4c29bbf6e66/tumblr_inline_p7ixkxHCit1t0eqx6_1280.jpg&quot; data-orig-height=&quot;689&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;https://78.media.tumblr.com/d18794ea05919e67afb90de54501a7b8/tumblr_inline_nvkk35uriA1t0eqx6_1280.jpg&quot;/&gt;&lt;/figure&gt;&lt;center style=&quot;font-style: italic; color: #D85F45; margin-top: -20px; margin-bottom: 30px;&quot;&gt;Also, Sojourner is the cutest extra-terrestrial vehicle we as a planet have ever made!&lt;/center&gt;

&lt;!-- ![](https://41.media.tumblr.com/ce58b18e22a441db975427d3ac65f1da/tumblr_inline_nvkk30U8Ga1t0eqx6_540.jpg) 

![](https://40.media.tumblr.com/86cea7947a1b2e84860900c4361919a8/tumblr_inline_nvkk397tPR1t0eqx6_540.jpg) 

![](https://41.media.tumblr.com/5c30314b15f730a231f0b3ccd20ea2ff/tumblr_inline_nvkk3mnVfD1t0eqx6_540.jpg)

![](https://41.media.tumblr.com/18eacb5160a98f524549df96fed9f589/tumblr_inline_nvkk3tHIcd1t0eqx6_540.jpg)

![](https://41.media.tumblr.com/b0119a55da832d182a2bdc1b8ff69856/tumblr_inline_nvkk4g0R1P1t0eqx6_540.jpg) 

![](http://imgs.xkcd.com/comics/similarities.png) --&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id=&quot;fn:fn5&quot;&gt;
&lt;p&gt;Random House now has the rights to it, and has plastered Matt Damon&amp;rsquo;s face on the cover so it&amp;rsquo;s not as hard to find as it was only last year. &lt;a href=&quot;#fnref:fn5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/the-martian&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Fri, 02 Oct 2015 11:31:59 +0000</pubDate>
				<link>https://patmurray.co/words/the-martian</link>
				<guid isPermaLink="true">https://patmurray.co/words/the-martian</guid>
			</item>
			
		
			
			<item>
				<title>The Thrilling &amp; Haunting Sicario</title>
					<description>
						&lt;h4&gt;&lt;em&gt;Review of Denis Villeneuve’s action-packed and attention grabbing 2015 film&lt;/em&gt; Sicario, &lt;em&gt;starring Emily Blunt, Josh Brolin, and Benicio Del Toro&lt;/em&gt;.&lt;/h4&gt;

&lt;p&gt;The film opens with the words, “In Mexico, &lt;em&gt;Sicario&lt;/em&gt; means &lt;em&gt;hitman&lt;/em&gt;”, which is to say; this film involves death. In a ‘hope-you-haven’t-eaten-recently’ opening scene, Villeneuve introduces us to just how raw and ever present death is in this film: dozens of mutilated and suffocated bodies plastered into the walls of a house Kate Macer [Blunt] has just raided.&lt;/p&gt;

&lt;p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;230&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;https://78.media.tumblr.com/89236ac5f9d5c0fc2974c15e8bae6ec9/tumblr_inline_nvdi86Ri2A1t0eqx6_540.gif&quot;&gt;&lt;img src=&quot;https://78.media.tumblr.com/89236ac5f9d5c0fc2974c15e8bae6ec9/tumblr_inline_p7ixktq2LW1t0eqx6_540.gif&quot; alt=&quot;&quot; data-orig-height=&quot;230&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;https://78.media.tumblr.com/89236ac5f9d5c0fc2974c15e8bae6ec9/tumblr_inline_nvdi86Ri2A1t0eqx6_540.gif&quot;/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;Enlisted in a special government task force, Kate begins her journey from tough FBI hostage specialist to a naive and frustrated pawn. Blunt becomes the audience’s viewpoint to the less than ethical team that is Josh Brolin and Benicio Del Toro.&lt;/p&gt;

&lt;p&gt;Having seen first hand what the Mexican drug cartels can do—highlighted by an explosion of the aforementioned house that kills two police officers—Kate, and partner Reggie Wayne [Daniel Kaluuya], agree to join the special team.&lt;/p&gt;

&lt;p&gt;Akin to the unpredictability of violence in &lt;em&gt;No Country For Old Men&lt;/em&gt;, &lt;em&gt;Sicario&lt;/em&gt; builds tension in such a real and frightening way it’s impossible to ever shake the feeling that something bad is going to happen.&lt;/p&gt;

&lt;p&gt;For the first mission we are taken across the border—following a private jet flight of mostly nonverbal character exploration—to collect a cartel leader and return them to US soil. I took two key points regarding raw fear away from this scene.&lt;/p&gt;

&lt;p&gt;Once in Mexico, the convoy of black Chevy Tahoes is flanked by at least twice as many Mexican state police vehicles. Each vehicle with two officers on the rear tray, both in control of huge chain guns. I’ve never felt more fearful and insecure while watching a film.&lt;/p&gt;

&lt;p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;230&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;https://78.media.tumblr.com/b1c8430c6bef94b088b59175fec08d81/tumblr_inline_nvdjckW8Dw1t0eqx6_540.gif&quot;&gt;&lt;img src=&quot;https://78.media.tumblr.com/b1c8430c6bef94b088b59175fec08d81/tumblr_inline_p7ixkulwTY1t0eqx6_540.gif&quot; alt=&quot;&quot; data-orig-height=&quot;230&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;https://78.media.tumblr.com/b1c8430c6bef94b088b59175fec08d81/tumblr_inline_nvdjckW8Dw1t0eqx6_540.gif&quot;/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;Even with infinitely more firepower support than the cast of &lt;em&gt;Fast &amp;amp; Furious&lt;/em&gt; ever needed to take over a city, I felt unsafe. Blunt conveyed this fear excellently while having severely insufficient firepower (only a pistol) for the situation—Kate often found herself with inappropriate equipment, highlighting just how in over her head she was.&lt;/p&gt;

&lt;p&gt;The second take away I had from this scene was just how few bullets were fired. When the characters fired their guns they did something rather unique in Hollywood; fired only the bullets needed to control the situation.&lt;/p&gt;

&lt;p&gt;Villeneuve managed to deliver the action and adrenaline of the this scene without a superfluous gun fight. By restricting the fire-fight to the bare minimum, coupled with the pseudo documentary shots, Villeneuve created an unparalleled level of stress and realism.&lt;/p&gt;

&lt;p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;230&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;https://78.media.tumblr.com/345bb9c818e2ad1296f5315cc0a3c94d/tumblr_inline_nvdjos6QUU1t0eqx6_540.gif&quot;&gt;&lt;img src=&quot;https://78.media.tumblr.com/345bb9c818e2ad1296f5315cc0a3c94d/tumblr_inline_p7ixkvYKag1t0eqx6_540.gif&quot; alt=&quot;&quot; data-orig-height=&quot;230&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;https://78.media.tumblr.com/345bb9c818e2ad1296f5315cc0a3c94d/tumblr_inline_nvdjos6QUU1t0eqx6_540.gif&quot;/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;The action scenes did not follow the modern tendency for lots of short cuts to heighten intensity. Instead Villeneuve shows the brutal, fast and unpredictable nature of real world fights. So much happens off screen, and in such quick bursts that you’re left trying to conclude what just happened, unsure of how bad it might be.&lt;/p&gt;

&lt;p&gt;With that said, the film overuses aerial establishing shots to the point they start to remove you from the story. We understand this is empty desert, it’s hostile land even without the war. Furthermore, the shock value of the countless bodies wears off long before Villeneuve stops shoving them in your face.&lt;/p&gt;

&lt;p&gt;Prior to viewing, it is easy to misconstrue the film as a commentary about the horrors of Mexican cartels. Post viewing it is easy to see it solely as a scathing condemnation of US tactics to take down these cartels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Sicario&lt;/em&gt; is both&lt;/strong&gt;. It highlights the inefficiencies in government attempts at stopping the horrific acts of the cartels. It brings light to the power of personal vendettas, and in a way &lt;em&gt;Revenge&lt;/em&gt; could never achieve, makes you question at what point is too far—how many innocent lives must be lost?&lt;/p&gt;

&lt;p&gt;And most importantly; who really is innocent?&lt;/p&gt;

&lt;p&gt;Fear and tension are present in every frame of this film. There is no escape. No lull in the middle. The scenes that other films might have used to give the audience a breath evoke more uncertainty, because in this world nothing and no one is ever safe.&lt;/p&gt;

&lt;p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;852&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;http://i.imgur.com/P6F2Yo6.jpg&quot;&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://i.imgur.com/P6F2Yo6.jpg&quot; alt=&quot;&quot; data-orig-height=&quot;852&quot; data-orig-width=&quot;1280&quot; data-orig-src=&quot;http://i.imgur.com/P6F2Yo6.jpg&quot;/&gt;&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;The action scenes will thrill and excite most viewers. The moral and intellectual questions will haunt you for having enjoyed the action.&lt;/p&gt;

&lt;p&gt;Villeneuve presents an interesting mixture of raw action and intense moral dilemma. He portrays the war on drugs “more in sorrow than anger [and] mourns the long-term costs of short-term gains” (David Edelstein, &lt;em&gt;NPR Fresh Air&lt;/em&gt;).&lt;/p&gt;

&lt;center&gt;

&lt;h3&gt;&lt;em&gt;“We dread the failure of his mission while dreading the impact of his success”&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;David Edelstein&lt;/p&gt;

&lt;/center&gt;

&lt;p&gt;It leaves you wondering, is there really an end to this gruesome and ethically unsound war? Villeneuve, nor any of the characters, give an answer. You’re left feeling as hopeless as Kate, except you just enjoyed a movie, instead of living it for real.&lt;/p&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/sicario&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Mon, 28 Sep 2015 07:50:49 +0000</pubDate>
				<link>https://patmurray.co/words/sicario</link>
				<guid isPermaLink="true">https://patmurray.co/words/sicario</guid>
			</item>
			
		
			
		
			
		
			
		
			
			<item>
				<title>Music 2014</title>
					<description>
						&lt;p&gt;Every year I data-mine my music collection in hopes of discovering something new about my past and current tastes in music. In previous years I have limited this to my iTunes collection and the related meta-data. &lt;a href=&quot;http://words.patmurraydev.com/private/103187718828/tumblr_nfdoa4106J1tlyaon&quot;&gt;Last year&lt;/a&gt;&lt;sup id=&quot;fnref:p103187605253-1&quot;&gt;&lt;a href=&quot;#fn:p103187605253-1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, I limited my investigation to music that I added to my library during those 365 days&lt;sup id=&quot;fnref:p103187605253-2&quot;&gt;&lt;a href=&quot;#fn:p103187605253-2&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. This year my horizons for data points have expanded dramatically—I started seriously using &lt;a href=&quot;http://www.last.fm&quot;&gt;Last.fm&lt;/a&gt;&amp;rsquo;s &lt;a href=&quot;http://www.last.fm/help/faq?category=99#201&quot;&gt;scrobbling&lt;/a&gt; feature.&lt;/p&gt;

&lt;p&gt;Thus, this will be my most comprehensive &lt;em&gt;Music of the Year&lt;/em&gt; post to date. I will still include the statistics from my “Top Songs of 2014” iTunes playlist&lt;sup id=&quot;fnref:p103187605253-3&quot;&gt;&lt;a href=&quot;#fn:p103187605253-3&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;, but will also focus far more on some of the new insights that Last.fm has given me to my listening habits.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It is important to note, before I begin, that only songs played in iTunes, Spotify, or on my iPhone are included in this data set. Songs played in Pandora (a service adore and I use far more heavily than Spotify) and YouTube are not present. &lt;strong&gt;Numbers are correct as of 21 November 2014&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Basic statistics to begin with. According to Last.fm I have listened to &lt;strong&gt;1895 unique tracks&lt;/strong&gt; from &lt;strong&gt;216 artists&lt;/strong&gt; this year, clocking up more than &lt;strong&gt;10,300 listens&lt;/strong&gt;&lt;sup id=&quot;fnref:p103187605253-4&quot;&gt;&lt;a href=&quot;#fn:p103187605253-4&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;. Of new&lt;sup id=&quot;fnref:p103187605253-5&quot;&gt;&lt;a href=&quot;#fn:p103187605253-5&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; music added to my iTunes library in 2014 I have listened to more than 1100 hours, which converts to &lt;strong&gt;more than 42 days of listening time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Of these 216 artists, 29% (≈3000) of listens came from the top 10 artists, 53% (≈5400) of listens came from the top 25 artists, and 75% (≈7650) of listens came from the top 50 artists. Approximately 25% of the artists I listened to lie outside of the top 50 artists.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://78.media.tumblr.com/c80ee013cd30b7a76712ab75e08d46c7/tumblr_inline_nfdr2elKuc1t0eqx6.png&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;

&lt;p&gt;During 2014, I listened to tracks from &lt;strong&gt;335 unique albums&lt;/strong&gt;, 18% (≈1800) of listens came from the top 10 albums, 35% (≈3560) of listens came from the top 25 albums, and 55% (≈5600) of listens came from the top 50 albums. Approximately 45% of the albums I listened to lie outside of the top 50 albums.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://78.media.tumblr.com/4a94c1bb5f6457b9f471e259fc123480/tumblr_inline_nfdrk8Eq351t0eqx6.png&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;

&lt;p&gt;So, what does this actually equate to? The top five artists from 2014, are actually six artists, thanks to two of the artists having the same play count&lt;sup id=&quot;fnref:p103187605253-6&quot;&gt;&lt;a href=&quot;#fn:p103187605253-6&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/artist/portugal.-the-man/id167649475?uo=4&amp;amp;at=11lMp7&quot;&gt;Portugal. The Man&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://itunes.apple.com/au/artist/onerepublic/id260414340?uo=4&amp;amp;at=11lMp7&quot;&gt;OneRepublic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://itunes.apple.com/au/artist/coldplay/id471744?uo=4&amp;amp;at=11lMp7&quot;&gt;Coldplay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://itunes.apple.com/au/artist/birds-of-tokyo/id214854614?uo=4&amp;amp;at=11lMp7&quot;&gt;Birds of Tokyo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://itunes.apple.com/au/artist/train/id469476?uo=4&amp;amp;at=11lMp7&quot;&gt;Train&lt;/a&gt;&lt;br/&gt;&lt;a href=&quot;https://itunes.apple.com/au/artist/echosmith/id529352559?uo=4&amp;amp;at=11lMp7&quot;&gt;Echosmith&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;mark&gt;&lt;em&gt;Portugal. The Man&lt;/em&gt; is indubitably my &lt;strong&gt;2014 Band of the Year&lt;/strong&gt;&lt;/mark&gt;. This Alaskan experimental-indie-rock band has won me over with not only more than one of their songs, but multiple of their albums. This is so much so, that I saw them live&lt;sup id=&quot;fnref:p103187605253-7&quot;&gt;&lt;a href=&quot;#fn:p103187605253-7&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; in November. For perspective, prior to half way through this year, I always called &lt;a href=&quot;https://itunes.apple.com/au/artist/powderfinger/id407384?uo=4&amp;amp;at=11lMp7&quot;&gt;&lt;em&gt;Powderfinger&lt;/em&gt;&lt;/a&gt; my favourite band, this is even though they haven’t featured in my top played artists since about 2011. Today, however, &lt;em&gt;Portugal. The Man&lt;/em&gt; is my favourite band.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;OneRepublic&lt;/em&gt; and &lt;em&gt;Coldplay&lt;/em&gt; have always been favourites of mine, and again solidified their positions. I envisage that &lt;em&gt;Portugal. The Man&lt;/em&gt; will join these bands at the top for many years to come.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Birds of Tokyo&lt;/em&gt; is my new &lt;em&gt;Powderfinger&lt;/em&gt;. Well, not quite—nothing can replace &lt;em&gt;Powderfinger&lt;/em&gt;  &lt;sup id=&quot;fnref:p103187605253-8&quot;&gt;&lt;a href=&quot;#fn:p103187605253-8&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;, but in the sense that they’re my top Australian band. &lt;em&gt;Birds of Tokyo&lt;/em&gt; are amazing, and again, they’re going to feature for a long time.&lt;/p&gt;

&lt;p&gt;Lastly, &lt;em&gt;Echosmith&lt;/em&gt; is new and could go either way. I thoroughly enjoyed their debut album, but their sophomore album will determine their position in my top artists of all time.&lt;/p&gt;

&lt;p&gt;Interestingly, compared to last year, my top artists this year are far more ‘commercialised’. Last year all of my top artists were independent, this year not so much.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For albums&lt;/strong&gt;, my top albums of 2014:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;em&gt;Echosmith&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/talking-dreams/id924487443?uo=4&amp;amp;at=11lMp7&quot;&gt;Talking Dreams&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Portugal. The Man&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/evil-friends/id613557623?uo=4&amp;amp;at=11lMp7&quot;&gt;Evil Friends&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;OneRepublic&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/native/id879553441?uo=4&amp;amp;at=11lMp7&quot;&gt;Native&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Daft Punk&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/random-access-memories/id617154241?uo=4&amp;amp;at=11lMp7&quot;&gt;Random Access Memories&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Matt &amp;amp; Kim&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/grand/id523745808?uo=4&amp;amp;at=11lMp7&quot;&gt;Grand&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;The Naked and Famous&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/passive-me-aggressive-you/id389088609?uo=4&amp;amp;at=11lMp7&quot;&gt;Passive Me, Aggressive You&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Portugal. The Man&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/in-the-mountain-in-the-cloud/id439947544?uo=4&amp;amp;at=11lMp7&quot;&gt;In The Mountain, In The Cloud&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Birds of Tokyo&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/march-fires/id721253234?uo=4&amp;amp;at=11lMp7&quot;&gt;March Fires&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Coldplay&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/mylo-xyloto/id726372830?uo=4&amp;amp;at=11lMp7&quot;&gt;Mylo Xyloto&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Band of Horses&lt;/em&gt; – &lt;strong&gt;&lt;a href=&quot;https://itunes.apple.com/au/album/everything-all-the-time/id129649178?uo=4&amp;amp;at=11lMp7&quot;&gt;Everything All the Time&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;It’s rather unsurprising that many of the top albums come from many of the top artists. The few standouts in the list are &lt;em&gt;Daft Punk&lt;/em&gt;&amp;rsquo;s &lt;strong&gt;Random Access Memories&lt;/strong&gt;, &lt;em&gt;Matt &amp;amp; Kim&lt;/em&gt;&amp;rsquo;s &lt;strong&gt;Grand&lt;/strong&gt;, &lt;em&gt;The Naked and Famous&lt;/em&gt;&amp;rsquo; &lt;strong&gt;Passive Me, Aggressive You&lt;/strong&gt; and &lt;em&gt;Band of Horses&lt;/em&gt;&amp;rsquo; &lt;strong&gt;Everything All the Time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Daft Punk&lt;/em&gt; are always a crowd favourite, similarly with &lt;em&gt;Band of Horses&lt;/em&gt;. &lt;em&gt;Matt &amp;amp; Kim&lt;/em&gt;&amp;rsquo;s “&lt;a href=&quot;https://itunes.apple.com/au/album/daylight/id523745808?i=523746034&amp;amp;uo=4&amp;amp;at=11lMp7&quot;&gt;Daylight&lt;/a&gt;&amp;ldquo; and &amp;rdquo;&lt;a href=&quot;https://itunes.apple.com/au/album/good-ol-fashion-nightmare/id523745808?i=523746039&amp;amp;uo=4&amp;amp;at=11lMp7&quot;&gt;Good Ol’ Fashion Nightmare&lt;/a&gt;&amp;ldquo; almost single-handly pulled &lt;strong&gt;Grand&lt;/strong&gt; into the top list. And, with &lt;em&gt;The Naked and Famous&lt;/em&gt;, songs like “&lt;a href=&quot;https://itunes.apple.com/au/album/punching-in-a-dream/id389088609?i=389089269&amp;amp;uo=4&amp;amp;at=11lMp7&quot;&gt;Punching In A Dream&lt;/a&gt;”, “&lt;a href=&quot;https://itunes.apple.com/au/album/the-sun/id389088609?i=389089561&amp;amp;uo=4&amp;amp;at=11lMp7&quot;&gt;The Sun&lt;/a&gt;”, “&lt;a href=&quot;https://itunes.apple.com/au/album/the-ends/id389088609?i=389089909&amp;amp;uo=4&amp;amp;at=11lMp7&quot;&gt;The Ends&lt;/a&gt;&amp;rdquo; and &amp;ldquo;&lt;a href=&quot;https://itunes.apple.com/au/album/girls-like-you/id389088609?i=389090060&amp;amp;uo=4&amp;amp;at=11lMp7&quot;&gt;Girls Like You&lt;/a&gt;&amp;rdquo; have played on repeat all year.&lt;/p&gt;

&lt;p&gt;Really, all we care about is my top songs from 2014. Below is a hybrid-merged-streamlined list of my top songs from 2014. It is compiled through a series of criteria and from both iTunes and Last.fm. The main criteria (not in order) are: play count; length of time in library; rating; and, skip count.&lt;/p&gt;

&lt;h2&gt;Top Songs of 2014&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;&lt;mark&gt;&lt;a href=&quot;https://itunes.apple.com/au/artist/scott-brendo/id563803379?uo=4&amp;amp;at=11lMp7&quot;&gt;Scott &amp;amp; Brendo&lt;/a&gt; – &lt;a href=&quot;https://itunes.apple.com/au/album/west-coast-single/id910531996?uo=4&amp;amp;at=11lMp7&quot;&gt;West Coast&lt;/a&gt;&lt;/mark&gt;&lt;/li&gt;
&lt;li&gt;Coldplay - &lt;a href=&quot;https://itunes.apple.com/au/album/lost+-feat.-jay-z/id726146464?i=726147980&amp;amp;uo=4&amp;amp;at=11lMp7&quot;&gt;Lost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Coldplay - &lt;a href=&quot;https://itunes.apple.com/au/album/life-in-technicolor-ii/id731952679?i=731952854&amp;amp;uo=4&amp;amp;at=11lMp7&quot;&gt;Life In Technicolor ii &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Daft Punk – Lose Yourself to Dance (feat. Pharrell Williams)&lt;/li&gt;
&lt;li&gt;Echosmith – Cool Kids&lt;/li&gt;
&lt;li&gt;Matt &amp;amp; Kim – Good Ol’ Fashion Nightmare&lt;/li&gt;
&lt;li&gt;JAY Z &amp;amp; Alicia Keys - Empire State of Mind&lt;/li&gt;
&lt;li&gt;Phillip Phillips - Home&lt;/li&gt;
&lt;li&gt;Greg Laswell - Off I Go (2013 Remake) &lt;/li&gt;
&lt;li&gt;Jackie Onassis – Back Home Again (feat. Solo)&lt;/li&gt;
&lt;li&gt;Band of Horses – Our Swords   &lt;/li&gt;
&lt;li&gt;Lupe Fiasco – Letting Go (feat. Sarah Green)  &lt;/li&gt;
&lt;li&gt;Matt &amp;amp; Kim – Daylight &lt;/li&gt;
&lt;li&gt;Maroon 5 – Love Somebody&lt;/li&gt;
&lt;li&gt;Aloe Blacc – Politician&lt;/li&gt;
&lt;li&gt;Bon Iver – Holocene&lt;/li&gt;
&lt;li&gt;Miike Snow – Devil’s Work     &lt;/li&gt;
&lt;li&gt;Family of the Year – Hero &lt;/li&gt;
&lt;li&gt;Daft Punk – Get Lucky (feat. Pharrell Williams)   &lt;/li&gt;
&lt;li&gt;The Naked and Famous – The Source &lt;/li&gt;
&lt;li&gt;The xx – Reunion  &lt;/li&gt;
&lt;li&gt;Jackie Onassis – Juliette&lt;/li&gt;
&lt;li&gt;Chet Faker – Melt (feat. Kilo Kish)&lt;/li&gt;
&lt;li&gt;Echosmith – March Into The Sun&lt;/li&gt;
&lt;li&gt;OneRepublic – Counting Stars&lt;/li&gt;
&lt;li&gt;Scott &amp;amp; Brendo – Avenue&lt;/li&gt;
&lt;li&gt;Portugal. The Man – Sea of Air&lt;/li&gt;
&lt;li&gt;Foster the People – Broken Jaw&lt;/li&gt;
&lt;li&gt;Radical Something – Tomorrow&lt;/li&gt;
&lt;li&gt;Scott &amp;amp; Brendo – Deep Blue&lt;/li&gt;
&lt;li&gt;Lupe Fiasco – The Show Goes On&lt;/li&gt;
&lt;li&gt;Birds of Tokyo – Lanterns&lt;/li&gt;
&lt;li&gt;Band of Horses – Wicked Gil&lt;/li&gt;
&lt;li&gt;Portugal. The Man – Modern Jesus&lt;/li&gt;
&lt;li&gt;John Legend – The Beginning…&lt;/li&gt;
&lt;li&gt;Miike Snow – In Search Of&lt;/li&gt;
&lt;li&gt;OneRepublic – Au Revoir&lt;/li&gt;
&lt;li&gt;Walk the Moon – Next in Line  &lt;/li&gt;
&lt;li&gt;Aloe Blacc – Wake Me Up&lt;/li&gt;
&lt;li&gt;Echosmith – Come With Me&lt;/li&gt;
&lt;li&gt;Echosmith – Surround You&lt;/li&gt;
&lt;li&gt;Yo La Tengo – I’ll Be Around&lt;/li&gt;
&lt;li&gt;Tweedy – Summer Noon&lt;/li&gt;
&lt;li&gt;The Black Keys – She’s Long Gone&lt;/li&gt;
&lt;li&gt;Frank Ocean – Pink Matter (feat. André 3000)&lt;/li&gt;
&lt;li&gt;Foster the People – Coming of Age&lt;/li&gt;
&lt;li&gt;Sam Smith – Stay with Me  &lt;/li&gt;
&lt;li&gt;Cat Power – Could We&lt;/li&gt;
&lt;li&gt;fun. – Carry On&lt;/li&gt;
&lt;li&gt;Echosmith – Bright&lt;/li&gt;
&lt;li&gt;Tame Impala – Music To Walk Home By&lt;/li&gt;
&lt;li&gt;Walk the Moon – Anna Sun&lt;/li&gt;
&lt;li&gt;Portugal. The Man – Got It All (This Can’t Be Living Now)&lt;/li&gt;
&lt;li&gt;Birds of Tokyo – This Fire&lt;/li&gt;
&lt;li&gt;Aloe Blacc – The Man&lt;/li&gt;
&lt;/ul&gt;&lt;hr&gt;&lt;p&gt;I have used &lt;a href=&quot;https://www.apple.com/au/itunes/affiliates/&quot;&gt;affiliate&lt;/a&gt; links when linking to iTunes content in this post. This allows me to potentially bring in a little bit a money from this post. These should have no impact on you.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id=&quot;fn:p103187605253-1&quot;&gt;
&lt;p&gt;Which was hosted on my old blog, but is reposted here on the current blog. &lt;a href=&quot;#fnref:p103187605253-1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p103187605253-2&quot;&gt;
&lt;p&gt;The other important note about last year is it included December, which due to my travels won’t be in this year’s. &lt;a href=&quot;#fnref:p103187605253-2&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p103187605253-3&quot;&gt;
&lt;p&gt;&lt;img src=&quot;https://78.media.tumblr.com/3462fb94f6dead7a8f00fa330aa91495/tumblr_inline_nfdovjA5Uc1t0eqx6.png&quot; alt=&quot;&quot;/&gt; One day I will post about all of my iTunes smart playlists—I have quite a few. &lt;a href=&quot;#fnref:p103187605253-3&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p103187605253-4&quot;&gt;
&lt;p&gt;A number that increases as I write this, hence the generalised figure. At the time of publishing it is now at 221 unique artists and more than 10,500 listens. &lt;a href=&quot;#fnref:p103187605253-4&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p103187605253-5&quot;&gt;
&lt;p&gt;New to my library, not necessarily “new” in release date. &lt;a href=&quot;#fnref:p103187605253-5&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p103187605253-6&quot;&gt;
&lt;p&gt;Since writing this has changed, with &lt;em&gt;Train&lt;/em&gt; receiving a few more listens recently just narrowly pulling ahead of &lt;em&gt;Echosmith&lt;/em&gt;. The consequences of writing about something still changing. &lt;a href=&quot;#fnref:p103187605253-6&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p103187605253-7&quot;&gt;
&lt;p&gt;It was a free concert sponsored by Corona, and the venue was pretty poorly organised unfortunately. &lt;a href=&quot;#fnref:p103187605253-7&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p103187605253-8&quot;&gt;
&lt;p&gt;Even though I just said &lt;em&gt;Portugal. The Man&lt;/em&gt; has replaced &lt;em&gt;Powderfinger&lt;/em&gt;. &lt;em&gt;Powderfinger&lt;/em&gt; will always have a place in my heart, as not only my first favourite musical artist, but also as an amazing artist from Australia. &lt;a href=&quot;#fnref:p103187605253-8&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/music-2014&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Tue, 02 Dec 2014 12:36:16 +0000</pubDate>
				<link>https://patmurray.co/words/music-2014</link>
				<guid isPermaLink="true">https://patmurray.co/words/music-2014</guid>
			</item>
			
		
			
		
			
		
			
		
			
			<item>
				<title>National Coming Out Day</title>
					<description>
						&lt;p&gt;Coming out is about the scariest thing a teen—or anyone, for that matter—might have to do. Today, October 11, is &lt;strong&gt;National Coming Out Day&lt;/strong&gt;. Celebrated in countries around the world&lt;sup id=&quot;fnref:p99563743033-1&quot;&gt;&lt;a href=&quot;#fn:p99563743033-1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, National Coming Out Day is a day to both encourage closeted individuals to come out, and to raise issues around coming out — specifically the fact that a day of such nature need exist.&lt;/p&gt;

&lt;p&gt;Differentiation is the new vogue. &lt;em&gt;Urban Dictionary&lt;/em&gt; defines Hipsters as&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;a subculture of men and women typically in their 20’s and 30’s that value independent thinking, counter-culture, progressive politics, an appreciation of art and indie-rock, creativity, intelligence, and witty banter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;em&gt;New Oxford American Dictionary&lt;/em&gt; says a Hipster is&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A person who follows the latest trends and fashions, especially those regarded as being outside the cultural mainstream.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yet everyone, everywhere, will tell you that to stand out is to subject yourself to negative effects of differentiation; to be isolated. Don’t get me wrong, I live in one of the best LGBTQ&lt;sup id=&quot;fnref:p99563743033-2&quot;&gt;&lt;a href=&quot;#fn:p99563743033-2&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; cities in the world—it’s no San Francisco, but it’s pretty damn good. Though, this beautiful city of Sydney is situated in Australia, a country who’s social recognition and LGBT rights leaves a lot to be desired.&lt;/p&gt;

&lt;p&gt;The term Hipster is “often used as a &lt;em&gt;pejorative&lt;/em&gt; to describe someone who is pretentious, overly trendy or effete.” Alex Rayner for &lt;em&gt;The Guardian&lt;/em&gt; (Oct 2010) “if there’s one thing more fashionable than being a hipster, it’s laughing at hipsters”.&lt;/p&gt;

&lt;p&gt;Why do people hate Hipsters? It’s not because it stems from a counterculture of people wishing to break away from the early 2000’s obsession with “reality television, dance music, and locating the whereabouts of Britney Spears’s underpants”, but rather that Hipsters wanted to be “recognised as being different and [a] counterculture, but ultimately form[ed] this weird subculture where everyone in it is doing the exact same thing and causing it to become mainstream” (&lt;em&gt;ohyouknowhangingout&lt;/em&gt; on Reddit).&lt;/p&gt;

&lt;p&gt;And that brings me back around to differentiation and isolation. No one should hate a person or a culture, and yet hate of people and cultures occurs everyday. True homophobia&lt;sup id=&quot;fnref:p99563743033-3&quot;&gt;&lt;a href=&quot;#fn:p99563743033-3&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; is pretty non-prevalent in our society today. Those who voice truly disgusting hate towards members and allies of the LGBT community are usually shunned — which is great. But these people are not those we need to educate, it’s the ignorant, those who know no better.&lt;/p&gt;

&lt;p&gt;Elizabeth (Maryland), “My freshman year, only once did a teacher ever stop someone saying, ‘&lt;em&gt;That’s so gay!&lt;/em&gt;’” she recalls. “No one ever stopped the kids.” Elizabeth’s story is all too common, it’s not that these kids hate LGBT people, it’s that they’re unaware of the affect of their words; ignorance.&lt;/p&gt;

&lt;p&gt;A severe level of ignorance was seen on &lt;a href=&quot;http://www.abc.net.au/tv/qanda/txt/s4083185.htm&quot;&gt;this week’s Q&amp;amp;A&lt;/a&gt; with regard to the comments between Bob Katter and Josh Thomas. Trinette Stevens asked:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Bob Katter, the youth in this area that belong to minority groups, in particular homosexuals, face a much higher rate of suicide. You have said in the past that you will not address the topic of gay rights as you see it as ‘irrelevant’. Do you think it is appropriate for us to have a discussion about the links between regional Australia and suicide, and willingly omit an entire group of at risk individuals?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;iframe width=&quot;640&quot; height=&quot;360&quot; src=&quot;//www.youtube-nocookie.com/embed/6wce7-cnaxE?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Katter may be a lost hope, but there are many more people out there who are not. Those who have just never seen a reason to question their actions and their words. While having an LGBT sister hasn’t helped PM Tony Abbot’s stance on related issues, knowing someone who either is LGBT or is an ally can really help people out of this ignorance.&lt;/p&gt;

&lt;p&gt;Today is the best time in the history of Earth to associate as LGBT. According to the &lt;a href=&quot;http://www.pewsocialtrends.org/2013/06/13/a-survey-of-lgbt-americans/&quot;&gt;&lt;em&gt;Pew Research Center&lt;/em&gt;&lt;/a&gt; 92% of LGBT Amercians “say society has become more accepting of them in the past decade and an equal number expect it to grow even more accepting in the decade ahead.” This is great, society is advancing and becoming more accepting. However, six-in-ten (58%) say they’ve been the target of slurs or jokes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.pewsocialtrends.org/files/2013/06/SDT-2013-06-LGBT-0-02.png&quot; alt=&quot;Source: http://www.pewsocialtrends.org/2013/06/13/a-survey-of-lgbt-americans/&quot; title=&quot;Source: Pew Research Center&quot;/&gt;&lt;/p&gt;

&lt;p&gt;The research conducted by &lt;em&gt;Pew&lt;/em&gt; is an excellent read. Should you chose not to read it, I will highlight this section below: &lt;em&gt;(emphasis my own)&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The survey finds that the LGBT population is distinctive in many ways beyond sexual orientation. Compared with the general public, Pew Research LGBT survey respondents are more liberal, more Democratic, less religious, &lt;strong&gt;less happy with their lives&lt;/strong&gt;, and more satisfied with the general direction of the country. On average, they are younger than the general public. Their family incomes are lower, which may be related to their relative youth and the smaller size of their households. &lt;strong&gt;They are also more likely to perceive discrimination not just against themselves but also against other groups with a legacy of discrimination&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Why is coming out so important? Because we need to show people that LGBT individuals and allies are everywhere. We need to take away the Katters-of-the-world’s excuses that LGBT issues are irrelevant to them on account of knowing no LGBT people.&lt;/p&gt;

&lt;p&gt;The more people who are ‘out’&lt;sup id=&quot;fnref:p99563743033-4&quot;&gt;&lt;a href=&quot;#fn:p99563743033-4&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; the easier it will be for LGBT kids of future generations to come out. &lt;em&gt;Pew&lt;/em&gt; shows that the median age that LGBT adults realise they might be something other than heterosexual or straight is twelve years-old. &lt;em&gt;What were you doing when you were twelve?&lt;/em&gt; For the majority of people it sure as hell wasn’t having a full-on gender or sexual orientation identity crisis. Thus, making the world an easier place to come out in is a must, we can remove the fear of coming out for all those twelve year olds&lt;sup id=&quot;fnref:p99563743033-5&quot;&gt;&lt;a href=&quot;#fn:p99563743033-5&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;, and leave them just to worry about who they like.&lt;/p&gt;

&lt;p&gt;In most people’s lives their families are the most important people to them. Yet, &lt;em&gt;Pew&lt;/em&gt; shows that&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;just 56% say they have told their mother about their sexual orientation or gender identity, and 39% have told their father. Most who did tell a parent say that it was difficult, but relatively few say that it damaged their relationship.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If coming out is &lt;em&gt;about the scariest thing a teen—or anyone, for that matter—might have to do&lt;/em&gt;, then coming out to your parents is about the scariest thing someone in the process of coming out has to do.&lt;/p&gt;

&lt;p&gt;We live in a society where LGBT issues are in the news all the time, and many countries (though unfortunately not Australia) are improving their laws around LGBT rights. Laws, however, are far behind the populous. Randall Munroe for &lt;a href=&quot;http://xkcd.com/1431/&quot;&gt;XKCD&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;People often say that same-sex marriage now is like interracial marriage in the 60s. But in terms of public opinion, same-sex marriage now is like interracial marriage in the 90s, when it had already been legal nationwide for 30 years.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;https://78.media.tumblr.com/e74cfeca2c5a3bc9f57ad1fc1b7fc51d/tumblr_inline_nd7efsbx5g1t0eqx6.png&quot; alt=&quot;Image: &apos;Marriage&apos; by Randall Munroe&quot; title=&quot;Image: &apos;Marriage&apos; by Randall Munroe&quot;/&gt;&lt;/p&gt;

&lt;p&gt;The governments of world will not change the status-quo, will not allow for marriage equality unless the people of the nation demand it. When people know someone who is LGBT, they are far more likely to support equality under the law. That is why National Coming Out Day is so important. Today is about showing support for LGBT individuals, whether they are your best friend, your sister, your cousin, or just someone on TV.&lt;/p&gt;

&lt;p&gt;There is no better time to come out than now. &lt;em&gt;Having said that, don’t rush into anything if you don’t feel the time is right—everyone’s circumstances are unique&lt;/em&gt;. Coming out is the most scary thing you’ll do, yet the euphoria and freedom that ensues is all worth it.&lt;/p&gt;

&lt;p&gt;And for those who don’t associate as LGBT, this National Coming Out Day 2014, show your support of LGBT people. Come out as an ally, whether as a Facebook status, or by raising issues at the dinner table, or just telling an LGBT friend of yours that you’re here for them. Show your support.&lt;/p&gt;

&lt;p&gt;Coming out as LGBT or as a straight ally for equality takes bravery, show your bravery and stand up for those whom without your help may continue to live isolated lives. Curbing the ignorance, stopping the hate, changing the laws, and improving society; will all take time, but it has to start somewhere. And that somewhere is now, October 11, 2014. &lt;strong&gt;Every person who speaks up changes more hearts and minds, and creates new advocates for equality&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Whether your coming out for the first time, or just the first time today, I’m proud of you.&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;If you need someone to talk to drop me line through any medium you can find. Otherwise check out the helpful resources at &lt;a href=&quot;http://au.reachout.com/coming-out&quot;&gt;Reach Out Australia&lt;/a&gt;.&lt;/p&gt;

&lt;p style=&quot;font-variant: small-caps&quot;&gt;You can follow me on Twitter &lt;a href=&quot;http://twitter.com/_patmurray&quot;&gt;@_patmurray&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;&lt;h4&gt;References&lt;/h4&gt;

&lt;ul&gt;&lt;li&gt;&lt;em&gt;Urban Dictionary&lt;/em&gt; definition of ‘Hipster’:
&lt;a href=&quot;http://www.urbandictionary.com/define.php?term=hipster&quot;&gt;http://www.urbandictionary.com/define.php?term=hipster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;New Oxford American Dictionary&lt;/em&gt; definition of ‘Hipster’:
&lt;a href=&quot;http://www.oxforddictionaries.com/definition/english/hipster&quot;&gt;http://www.oxforddictionaries.com/definition/english/hipster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Wikipedia&lt;/em&gt; on ‘Hipster (contemporary subculture)’:
&lt;a href=&quot;http://en.wikipedia.org/wiki/Hipster_&quot;&gt;http://en.wikipedia.org/wiki/Hipster_&lt;/a&gt;(contemporary_subculture)&lt;/li&gt;
&lt;li&gt;Julia Rios for &lt;em&gt;Apex Magazine&lt;/em&gt; definition of QUILTBAG:
&lt;a href=&quot;http://www.apex-magazine.com/reaching-into-the-quiltbag-the-evolving-world-of-queer-speculative-fiction/&quot;&gt;http://www.apex-magazine.com/reaching-into-the-quiltbag-the-evolving-world-of-queer-speculative-fiction/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Dictionary of Contemporary Slang&lt;/em&gt; by Tony Thorne:
&lt;a href=&quot;http://books.google.com.au/books?id=5He9AgAAQBAJ&amp;amp;lpg=PA217&amp;amp;dq=hipster%20pretentious&amp;amp;pg=PA217#v=onepage&amp;amp;q&amp;amp;f=false&quot;&gt;http://books.google.com.au/books?id=5He9AgAAQBAJ&amp;amp;lpg=PA217&amp;amp;dq=hipster%20pretentious&amp;amp;pg=PA217#v=onepage&amp;amp;q&amp;amp;f=false&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Alex Rayner for &lt;em&gt;The Guardian&lt;/em&gt; ‘Why do people hate hipsters?’:
&lt;a href=&quot;http://www.theguardian.com/lifeandstyle/2010/oct/14/hate-hipsters-blogs&quot;&gt;http://www.theguardian.com/lifeandstyle/2010/oct/14/hate-hipsters-blogs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ohyouknowhangingout&lt;/em&gt; on Reddit commenting on the reasons of Hipster hate:
&lt;a href=&quot;http://www.reddit.com/r/OutOfTheLoop/comments/2cvsko/why_are_hipsters_hated_on_reddit/cjjqp4k&quot;&gt;http://www.reddit.com/r/OutOfTheLoop/comments/2cvsko/why_are_hipsters_hated_on_reddit/cjjqp4k&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Matthew S. Robinson for &lt;em&gt;edutopia&lt;/em&gt;:
&lt;a href=&quot;http://www.edutopia.org/gay-lesbian-antibullying&quot;&gt;http://www.edutopia.org/gay-lesbian-antibullying&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;lsquo;Josh Thomas takes Bob Katter to task over his past comments on homosexuality&amp;rsquo; on &lt;em&gt;ABC News&lt;/em&gt;:
&lt;a href=&quot;http://www.abc.net.au/news/2014-10-07/josh-thomas-takes-bob-katter-to-task-over-his-past-comments-on-/5795736&quot;&gt;http://www.abc.net.au/news/2014-10-07/josh-thomas-takes-bob-katter-to-task-over-his-past-comments-on-/5795736&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Pew Research Center&lt;/em&gt; LGBT Survey results:
&lt;a href=&quot;http://www.pewsocialtrends.org/2013/06/13/a-survey-of-lgbt-americans/&quot;&gt;http://www.pewsocialtrends.org/2013/06/13/a-survey-of-lgbt-americans/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;HCR&lt;/em&gt; National Coming Out Day:
&lt;a href=&quot;http://www.hrc.org/resources/entry/national-coming-out-day&quot;&gt;http://www.hrc.org/resources/entry/national-coming-out-day&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id=&quot;fn:p99563743033-1&quot;&gt;
&lt;p&gt;Officially recognised in Australia, Canada, Croatia, Germany, the Netherlands, New Zealand, Poland, Switzerland, the United Kingdom, and the United States; it really should be called &lt;strong&gt;International&lt;/strong&gt; Coming Out Day. However, for historical reasons the name sticks.  &lt;a href=&quot;#fnref:p99563743033-1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p99563743033-2&quot;&gt;
&lt;p&gt;&lt;strong&gt;L&lt;/strong&gt;esbian, &lt;strong&gt;G&lt;/strong&gt;ay, &lt;strong&gt;B&lt;/strong&gt;isexual, &lt;strong&gt;T&lt;/strong&gt;rans, &lt;strong&gt;Q&lt;/strong&gt;uestioning. There are many other acronyms, some more inclusive, some less, and some which sound awesome—like &lt;strong&gt;QUILTBAG&lt;/strong&gt; (Queer and Questioning, Intersex, Lesbian, Transgender and Transsexual and Two-Spirit, Bisexual, Asexual and Ally, and Gay and Genderqueer). For ease of writing I will use LGBT, but that is by no means a statement about the importance of those whom are questioning, asexual, allies, intersex, or genderqueer. &lt;a href=&quot;#fnref:p99563743033-2&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p99563743033-3&quot;&gt;
&lt;p&gt;That which is comparable to the hate group known as ‘Westboro Baptist Church’. &lt;a href=&quot;#fnref:p99563743033-3&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p99563743033-4&quot;&gt;
&lt;p&gt;That also includes allies: Heterosexual individuals who support LGBT rights. &lt;a href=&quot;#fnref:p99563743033-4&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:p99563743033-5&quot;&gt;
&lt;p&gt;Who, by the way, were not only born after Y2K, but were born in 2002! &lt;a href=&quot;#fnref:p99563743033-5&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/national-coming-out-day&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Sat, 11 Oct 2014 02:33:15 +0000</pubDate>
				<link>https://patmurray.co/words/national-coming-out-day</link>
				<guid isPermaLink="true">https://patmurray.co/words/national-coming-out-day</guid>
			</item>
			
		
			
		
			
		
			
		
			
		
			
		
			
		
			
			<item>
				<title>Bright-Coloured, Awesome-Tasting CandyMinimal Photography</title>
					<description>
						&lt;p&gt;Saying a photograph tastes awesome is an odd concept. A really odd concept. However, Matt Crump’s style of photography truly does taste awesome. Candy-Colored&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote-ref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; Minimal Photography (commonly referred to as CandyMinimal) is a style of photography focusing on the bright, the washed-out, the saturated, and the feeling of being amongst colourful-tasting candy.&lt;/p&gt;

&lt;p&gt;Crump&amp;rsquo;s background is in advertising, working for the likes of AT&amp;amp;T, Lee Jeans, Walgreens and Samsung. He began the &lt;a href=&quot;http://iconosquare.com/tag/candyminimal&quot;&gt;#candyminimal&lt;/a&gt; movement last year as an Instagram community for other buddying photographers to post their CandyMinimal photos.&lt;/p&gt;

&lt;center&gt;
&lt;img src=&quot;https://78.media.tumblr.com/066cb947feecfabfc4d83320e1c00c8b/tumblr_inline_ncegmdiSc51t0eqx6.jpg&quot; width=&quot;200&quot; style=&quot;display:inline&quot;/&gt;&lt;img src=&quot;https://78.media.tumblr.com/4621a25f2b1e2635afdad0ef2882a37c/tumblr_inline_ncegl2MxTn1t0eqx6.jpg&quot; width=&quot;200&quot; style=&quot;display:inline&quot;/&gt;&lt;img src=&quot;https://78.media.tumblr.com/1305438d4c27def18474003fe29c2e59/tumblr_inline_ncegniUOFO1t0eqx6.jpg&quot; width=&quot;200&quot; style=&quot;display:inline&quot;/&gt;&lt;/center&gt;

&lt;p&gt;Above are just three select examples from Matt Crump’s &lt;a href=&quot;http://instagram.com/mattcrump&quot;&gt;Instagram profile&lt;/a&gt;. From the first time you see CandyMinimal photographs, to the point where you’ve seen thousands in an attempt to write a blog post about them&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote-ref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;, the amazing effect never seems to wear off. They’re not novel, yet they’re so incredibly novel.&lt;/p&gt;

&lt;p&gt;In a how-to guide posted to his &lt;a href=&quot;http://www.mattcrump.com/guide&quot;&gt;site&lt;/a&gt;, Crump shows just how simple it is to create these unique and amazing photos. He manages to produce these photos using only the stock iPhone camera app, the &lt;a href=&quot;https://itunes.apple.com/us/app/diptic/id377989827?mt=8&quot;&gt;Diptic&lt;/a&gt; app (for cropping and hue), and the &lt;a href=&quot;https://itunes.apple.com/us/app/pictapgo/id585307861?mt=8&quot;&gt;PicTapGo&lt;/a&gt; app for a final filter.&lt;/p&gt;

&lt;p&gt;The basic premise of the photos is to use a solid background with just one object in the foreground (crop-out all other objects or buildings). All photos are then hue shifted to create a colour-pallet that falls somewhere between ultra-real and surreal. Then the photographer applies a collection of filters of their choice to achieve the desired effect.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://78.media.tumblr.com/b08ed1d0c930b3f861f24bbe4c9516ab/tumblr_inline_ncen3xdoV61t0eqx6.jpg&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;

&lt;p&gt;The CandyMinimal artistic style is a modern-day intentional version of the results of cross-developed film. Cross-developed film photography is the use of incorrect developer with a certain film, the results are usually miss-matched colours and odd hues. CandyMinimal resembles this for me, however, not all CandyMinimal photos are of this nature. Some images, such as that embedded below, show the other side of CandyMinimal photography – the &amp;lsquo;minimal&amp;rsquo;.&lt;/p&gt;

&lt;center&gt;

&lt;iframe src=&quot;//instagram.com/p/tnbVnnEYVL/embed/&quot; width=&quot;500&quot; height=&quot;590&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;/p&gt;&lt;/center&gt;

&lt;p&gt;This photograph taken by Andrew Bartholomew (&lt;a href=&quot;http://instagram.com/surfistatomato&quot;&gt;@surfistatomato&lt;/a&gt;) shows how CandyMinimal photographs can seep into our everyday photography without becoming as overpowering as some of Matt Crump&amp;rsquo;s.&lt;/p&gt;

&lt;p&gt;So I encourage you to try out CandyMinimal photography, and take some of the principles learnt – solid background with a minimal foreground object, colours shifted, and an eye for the ultra-realistic – and apply them to your everyday-photog.&lt;/p&gt;

&lt;p&gt;Happy Shooting!&lt;/p&gt;

&lt;center&gt;

&lt;iframe src=&quot;//instagram.com/p/tlOinWkYdN/embed/&quot; width=&quot;500&quot; height=&quot;590&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;/p&gt;&lt;/center&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id=&quot;fn:1&quot;&gt;
&lt;p&gt;&amp;ldquo;Candy-&lt;strong&gt;Coloured&lt;/strong&gt;&amp;rdquo; if you ask me. But the guy who coined the term is American, so his spelling is what I’ll use.  &lt;a href=&quot;#fnref:1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id=&quot;fn:2&quot;&gt;
&lt;p&gt;Okay, maybe not thousands but certainly plenty. And from a whole range of photographers. This style has far-far surpassed that of one man. (There are reported to be more than 15,000 Instagram photos in the &lt;a href=&quot;http://iconosquare.com/tag/candyminimal&quot;&gt;#candyminimal&lt;/a&gt; tag) &lt;a href=&quot;#fnref:2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/bright-coloured-awesome-tasting-candyminimal&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Thu, 02 Oct 2014 01:38:00 +0000</pubDate>
				<link>https://patmurray.co/words/bright-coloured-awesome-tasting-candyminimal</link>
				<guid isPermaLink="true">https://patmurray.co/words/bright-coloured-awesome-tasting-candyminimal</guid>
			</item>
			
		
			
		
			
			<item>
				<title>Boyhood</title>
					<description>
						&lt;p&gt;On Sunday night I went to see the 8:30PM showing of &lt;em&gt;Boyhood&lt;/em&gt; at my local cinema. And in an attempt to not sound cliché I won&amp;rsquo;t say &amp;ldquo;wow&amp;rdquo;, but… &lt;strong&gt;Wow!&lt;/strong&gt;&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote-ref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; There is no other word for it. &lt;em&gt;Boyhood&lt;/em&gt; is everything I want from a film, packaged and delivered exquisitely by a team of incredible professionals.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;extrawide&quot; src=&quot;https://davidnthedark.files.wordpress.com/2015/02/boyhood-still-01.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Going into the film everybody already knows the premise: team of filmmakers got together for a week every year for twelve years and made a film. Budgeted at US$200&apos;000 a year, with little-to-no script, and a cast and crew unable to be contracted (due to legal restrictions causing contracts to be capped at seven years), this film somehow manages to simultaneously meet and fulfil expectations, while also exceeding them in a way difficult to explain.&lt;/p&gt;

&lt;p&gt;The film has no story, but to say that it is a nothing-story is not doing it justice. It&amp;rsquo;s amazing how a film that goes for two hours and forty-five minutes (the same length as the most recent &lt;em&gt;Transformers&lt;/em&gt; film) manages to have no large climax and no beyond this world event, and yet is so engaging that at no point will you notice it&amp;rsquo;s length. The story washes over you, following the lives of these four main characters and a large ensemble of ancillary characters. At the close of the film it&amp;rsquo;s hard to get up, you just experienced someone&amp;rsquo;s childhood — someone&amp;rsquo;s &lt;em&gt;Boyhood&lt;/em&gt;.&lt;/p&gt;

&lt;iframe width=&quot;640&quot; height=&quot;360&quot; src=&quot;//www.youtube-nocookie.com/embed/Ys-mbHXyWX4?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;The soundtrack is outstanding, and as someone the same age as Mason (Ellar Coltrane), the nostalgia factor of the music (and the game/television/clothing fads e.t.c.) is off-the-chart. I can&amp;rsquo;t stop playing &lt;em&gt;Hero&lt;/em&gt; by Family of the Year (the song in the trailer) on loop. It is truly exceptional!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This film is a must see&lt;/strong&gt;. Hands down. If the idea of the twelve years doesn&amp;rsquo;t entice you, then see it for the excellent acting (Ellar Coltrane, Patricia Arquette, Ethan Hawke), or the superb directing (Richard Linklater — &lt;em&gt;Dazed and Confused&lt;/em&gt;, &lt;em&gt;Waking Life&lt;/em&gt;, &lt;em&gt;School of Rock&lt;/em&gt;, &lt;em&gt;Before Sunrise&lt;/em&gt;), or the perfect fluidity, or the soundtrack, or the nostalgia, or the drama, or the comedy, or if all else fails — for the bragging rights of saying you saw moviemaking history at a cinema. Five out of Five stars! Exceptionally understated, in the best way possible.&lt;/p&gt;

&lt;center&gt;

&lt;p style=&quot;padding-top: 40px; padding-bottom: 40px; font-size: 40pt; color: #D85F46;&quot;&gt;★★★★★&lt;/p&gt;

&lt;/center&gt;

&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id=&quot;fn:1&quot;&gt;
&lt;p&gt;Sorry, I had to. But seriously, &amp;ldquo;wow&amp;rdquo; was the first word I used to describe this film. And while, I then went on to explain, to the person I was seeing the film with, all the other emotions and thoughts I had. &amp;ldquo;Wow&amp;rdquo; is about as close as I can get to a one word review. &lt;a href=&quot;#fnref:1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;

						
						
						
						
							&lt;br/&gt;
							
							
							&lt;br/&gt;&lt;br/&gt;
							© Copyright 2011–2026 Pat Murray • &lt;a href=&quot;https://patmurray.co/words/boyhood&quot;&gt;Permalink&lt;/a&gt;
						
				</description>
				<pubDate>Wed, 24 Sep 2014 02:18:00 +0000</pubDate>
				<link>https://patmurray.co/words/boyhood</link>
				<guid isPermaLink="true">https://patmurray.co/words/boyhood</guid>
			</item>
			
		
			
		
	</channel>
</rss>
