<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Noise from the Basement</title><link>https://nftb.saturdaymp.workers.dev/</link><description>Recent content on Noise from the Basement</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 23 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://nftb.saturdaymp.workers.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>SaturdayMP Show 104: picoCTF (Small Trouble &amp; Droids 4)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-104-picoctf-small-trouble-droids-4/</link><pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-104-picoctf-small-trouble-droids-4/</guid><description>&lt;p&gt;In this episode I (Chris), sorry no Omar, attempt some picoCTF (now CyLab) challenges. I picked the challenges randomly and ended up with a RSA (Small Trouble) and reverse engineering APK binary (Droids 4). Used the clanker (coding agent) to help with the APK challenge as I didn&amp;rsquo;t have a way to run the apk on my machine.&lt;/p&gt;
&lt;p&gt;It was interesting to watch the clanker parse out the .so file. Have you used a clanker for cyber security? If so, what are your thoughts?&lt;/p&gt;</description></item><item><title>SaturdayMP Show 103: HTTP Server in C (Part 1 - Listen is Working)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-103-http-server-in-c-part-1-listen-is-working/</link><pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-103-http-server-in-c-part-1-listen-is-working/</guid><description>&lt;p&gt;In this episode we start writing a custom HTTP Server in C because Omar wanted to learn more about HTTP, servers, and low-level networking. We get a simple app that listens on a port and writes out to the command line what was sent to it. We also have a good discussion about C strings at 1:08:53.&lt;/p&gt;
&lt;p&gt;Part 2, if it happens, we will add an HTTP response. We are not very consistent.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 102: PostCast (Part 15 – Slack Channel Selection)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-102-postcast-part-15-slack-channel-selection/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-102-postcast-part-15-slack-channel-selection/</guid><description>&lt;p&gt;In this episode Omar and I update PostCast so you can set the Slack channel instead of it being hardcoded. Progress at its finest.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/zsAPbkZS9sA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;We try out Figma for some design ideas, it goes OK. Then we try the design idea, find out we don&amp;rsquo;t like it and switch back to our original design. We also spend some more time figuring out how to do nested dialog calls in Fyne. It&amp;rsquo;s not intuitive, at least not to me.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 101: Solved picoCTF No Padding, No Problem Challenge</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-101-solved-picoctf-no-padding-no-problem-challenge/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-101-solved-picoctf-no-padding-no-problem-challenge/</guid><description>&lt;p&gt;In this episode we solve the No Padding, No Problem @picoCTF challenge. It takes us a while as we try to remember how RSA works and figure out the weakness and formulas we need to us.&lt;/p&gt;
&lt;p&gt;We leave our struggles in the video so people don&amp;rsquo;t feel like they are the only ones who can&amp;rsquo;t figure something out in 10 minutes. That said, you can watch the beginning then jump to 1:25:00 - where Omar figures out the formula to use.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 100: PostCast Part 15 (LinkedIn Company Setup)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-100-postcast-part-15-linkedin-company-setup/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-100-postcast-part-15-linkedin-company-setup/</guid><description>&lt;p&gt;Our 100th episode! Not the episode we wanted as we forgot we needed to register with @linkedin to post messages as a company and then struggle to figure out how to handle multiple dialog forms in Fyne.&lt;/p&gt;
&lt;p&gt;That said, a janky 100th episode fits with the theme of the SaturdayMP Show where we show our struggles and warts beside our successes.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/wMCDeNvKe_M?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Thank you to YouTube for letting me post these long videos for free. I know they make money of ads and other data, but it&amp;rsquo;s still nice of them.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 99: Custom Ping Client - Part 2</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-99-custom-ping-client-part-2/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-99-custom-ping-client-part-2/</guid><description>&lt;p&gt;In this live episode Omar and myself get the ping application working. Not the best written C code, but it works, after I figured out we need to run the application as root.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/LwfpJnPJP3w?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Ping – Manually create and send ICMP/IP packets:&lt;br&gt;
&lt;a href="https://inc0x0.com/icmp-ip-packets-ping-manually-create-and-send-icmp-ip-packets/"&gt;https://inc0x0.com/icmp-ip-packets-ping-manually-create-and-send-icmp-ip-packets/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Wireshark:&lt;br&gt;
&lt;a href="https://www.wireshark.org/"&gt;https://www.wireshark.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Omar:&lt;br&gt;
&lt;a href="https://www.ashour.ca/"&gt;https://www.ashour.ca/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;SaturdayMP:&lt;br&gt;
&lt;a href="https://saturdaymp.com/"&gt;https://saturdaymp.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Have a question you want answered in a future video? A challenging or interesting problem you want to see solved? Constructive feedback? Then comment, DM, or send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #97: PostCast Part 14 (Slack Integration Working)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-97-postcast-part-14-slack-integration-working/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-97-postcast-part-14-slack-integration-working/</guid><description>&lt;p&gt;Happy Star Wars Day! In this live episode Omar and myself get the Slack integration working. At least a ruff draft of it that still needs some clean-up. We also discuss the lower level networking details like ports and sockets.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/uROgzj4Bwjk?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;*PostCast is just a place holder name and might change. The goofy PostCast placeholder image was generated by ChatGPT and will likely change.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #98: Custom Ping Client</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-98-custom-ping-client/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-98-custom-ping-client/</guid><description>&lt;p&gt;In this live episode Omar and myself try to write a low-level C app that does a network ping. Omar really wanted the app to be in C, so you get to watch me struggle to remember C syntax and translate bytes, chars, etc.&lt;/p&gt;
&lt;p&gt;We do an OK job of explaining networking but a better job of explaining hex and how numbers are represented by bits (base 2) and bit shifting.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 96: PostCast Part 13 (Save Slack Token Using TDD)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-96-postcast-part-13-save-slack-token-using-tdd/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-96-postcast-part-13-save-slack-token-using-tdd/</guid><description>&lt;p&gt;In this live episode Omar and myself write and unit test the code for saving the Slack token to the keyring. We abandon using Testify mocks and instead add an in-memory setting for our credential manager. We also have a good discussion about test-driven development (TDD).&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/yhvIAbMxbS0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;*PostCast is just a place holder name and might change. The goofy PostCast placeholder image was generated by ChatGPT and will likely change.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 95: Passkeys Primer w/ Aaron Yong</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-95-passkeys-primer-w-aaron-yong/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-95-passkeys-primer-w-aaron-yong/</guid><description>&lt;p&gt;In this episode Aaron Yong gives an overview of Passkeys and why you should use them. He also answers my naive questions about how they work.&lt;/p&gt;
&lt;p&gt;Aaron runs Saikyo Softworks, a digital consultancy specializing in practical solutions for an ever-changing world. In his spare time he also runs the local Edmonton (YEG) Ruby, Python, and JavaScript meetup.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/-tdfTH4vMug?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Passkeys IO:&lt;br&gt;
&lt;a href="https://www.passkeys.io/"&gt;https://www.passkeys.io/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SaturdayMP Show #94: Debugging Git HTTP 400 curl 22 Error</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-94-debugging-git-http-400-curl-22-error/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-94-debugging-git-http-400-curl-22-error/</guid><description>&lt;p&gt;In our first ever completely live episode, Omar and myself debug a GitHub push error Omar was experiencing. It was a new error for both of us and took a bit to figure out. The error was:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The tl;dw (to-long;didn&amp;rsquo;t-watch) is the image was larger than the Git post buffer size. The fix was to compress the image, which is something we are doing for the Weekly Dev Chat website. Another fix is to increase the Git post buffer size.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 93: PostCast (Part 12 - Start on Slack API)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-93-postcast-part-12-start-on-slack-api/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-93-postcast-part-12-start-on-slack-api/</guid><description>&lt;p&gt;In this episode Omar and myself start working on the Slack integration for PostCast. We start off by reviewing what we have learned about the Slack API so far. Then we come up with a plan of attack and start implementing the plan but don&amp;rsquo;t get very far.&lt;/p&gt;
&lt;p&gt;We struggle to remember how mocking works in Go and then run out of time as I needed to host the Weekly Dev Chat. I&amp;rsquo;m likely overthinking the mocking and am too used to other languages/technologiges where mocking is easier and more common.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #92: Local LLM w/ Ollama</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-92-local-llm-w-ollama/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-92-local-llm-w-ollama/</guid><description>&lt;p&gt;In this episode I show how to run a local LLM, in this case Gemma4, using Ollama. Thanks to the Weekly Dev Chat folks for the help and inspiration.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ppGwcLcgeNk?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Ollama:&lt;br&gt;
&lt;a href="https://ollama.com/"&gt;https://ollama.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OpenCode:&lt;br&gt;
&lt;a href="https://opencode.ai/"&gt;https://opencode.ai/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gemma4:&lt;br&gt;
&lt;a href="https://deepmind.google/models/gemma/gemma-4/"&gt;https://deepmind.google/models/gemma/gemma-4/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Weekly Dev Chat:&lt;br&gt;
&lt;a href="https://weeklydevchat.com/"&gt;https://weeklydevchat.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Have a question or problem for a future video? Constructive feedback? Then comment, DM me, or send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 91: PostCast (Part 11 - Saving LinkedIn Token)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-91-postcast-part-11-saving-linkedin-token/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-91-postcast-part-11-saving-linkedin-token/</guid><description>&lt;p&gt;In this PostCast episode Omar and myself figure out how to save the LinkedIn API token. Previously we saved the LinkedIn API ClientID and ClientSecret, which we knew was incorrect, but we just wanted to get something working. Now we correctly save the token, which is what should be saved.&lt;/p&gt;
&lt;p&gt;*PostCast is just a place holder name and might change. The goofy PostCast placeholder image was generated by ChatGPT and will likely change.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #90: Claude Code Plugin Marketplace</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-90-claude-code-plugin-marketplace/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-90-claude-code-plugin-marketplace/</guid><description>&lt;p&gt;Join me as I finish creating a Claude Plugin Marketplace and my first plugin that validates and fixes GitHub PR review feedback.&lt;/p&gt;
&lt;p&gt;P.S. - The &amp;ldquo;Marketplace&amp;rdquo; logo was created using Claude. I usually use ChatGPT or Gemini as they create better images, in my opinion, but felt it appropriate to use Claude for this one.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/HehHEx3xKyA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;SaturdayMP Claude Marketplace:&lt;br&gt;
&lt;a href="https://github.com/saturdaymp/claude-plugins%20"&gt;https://github.com/saturdaymp/claude-plugins&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SaturdayMP Show 89: PostCast (Part 10 – Integration Tests and Keyring Saving)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-89-postcast-part-10-integration-tests-and-keyring-saving/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-89-postcast-part-10-integration-tests-and-keyring-saving/</guid><description>&lt;p&gt;Omar is back! We really got into the zone and recorded our longest PostCast video yet. Might be the longest SaturdayMP Show video yet. We don&amp;rsquo;t edit out mistakes, so watch along as we learn in real time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;how to write integration tests in Go (build tags vs. -short flag)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;how to create test setup/teardown in Go&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;that the go-keyring library has mocking built in so we can simplify our tests&lt;/p&gt;</description></item><item><title>SaturdayMP Show 88: Getting Started with Consulting</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-88-getting-started-with-consulting/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-88-getting-started-with-consulting/</guid><description>&lt;p&gt;No &lt;a href="https://www.ashour.ca/"&gt;Omar&lt;/a&gt; this week, so I decided to answer a question I get frequently: How do I get started with consulting? Be aware that the advice is worth what you paid for it.&lt;/p&gt;
&lt;p&gt;The feature image was generated using the free version of Google&amp;rsquo;s Nano Banana. Took several prompts to get this image, which is not exactly what I wanted but close enough.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/se-de4IBzRQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Have a question you want answered in a future video? A challenging or interesting problem you want to see solved? Constructive feedback? Then comment, DM me, or send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 87: Creating PostCast (Part 9 – Figuring Out Testing in Go)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-87-creating-postcast-part-9-figuring-out-testing-in-go/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-87-creating-postcast-part-9-figuring-out-testing-in-go/</guid><description>&lt;p&gt;In this episode Omar and myself figure out how to add tests in Go. We try the built-in Go testing framework but then settle on using Testify. Testify allows writing assertions like other testing frameworks we are used to. We also experiment with different ways to do mocking Go and try to figure out what the Go error object is.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ISXbVjTKN4c?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;*PostCast is just a place holder name and might change. The goofy PostCast placeholder image was generated by ChatGPT and will likely change.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 86: Creating PostCast (Part 8 – Investigate Keyring Libraries)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-86-creating-postcast-part-8-investigate-keyring-libraries/</link><pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-86-creating-postcast-part-8-investigate-keyring-libraries/</guid><description>&lt;p&gt;In this episode Omar Ashour and myself (Chris C.) investigate several Golang keyring libraries and try to get the keyring to work on my Windows Subsystem for Linux (WSL). Spoiler: it was working all along, I was just too dumb to notice. Learned about Seahorse, a handy tool for viewing keychain entries.&lt;/p&gt;
&lt;p&gt;We also discuses what the Windows Registry. Spoiler: it is just a big dumping ground of key-value pairs.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 85: Creating PostCast (Part 7 – Prompt for LinkedIn Credentials)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-85-creating-postcast-part-7-prompt-for-linkedin-credentials/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-85-creating-postcast-part-7-prompt-for-linkedin-credentials/</guid><description>&lt;p&gt;In this episode Omar and myself hook up the Post to LinkedIn button and prompt the user to enter the credentials for LinkedIn, and it all works. Not the best flow, but we are still in the proof of concept stage.&lt;/p&gt;
&lt;p&gt;We also learn about Go structs and how you can attach methods to them so get something similar to an object in other languages.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/F-a39bQmylc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;*PostCast is just a place holder name and might change. The goofy PostCast placeholder image was generated by ChatGPT and will likely change.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 84: Creating PostCast (Part 6 – Create Fyne Main Screen)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-84-creating-postcast-part-6-create-fyne-main-screen/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-84-creating-postcast-part-6-create-fyne-main-screen/</guid><description>&lt;p&gt;In episode 84 of the SaturdayMP show, &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7427396657673220097/#"&gt;Omar Ashour&lt;/a&gt; and myself (&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7427396657673220097/#"&gt;Chris C.&lt;/a&gt;) create a very basic main screen using Fyne to input the text to post and a button to create the LinkedIn post. That said, the GUI doesn&amp;rsquo;t do anything yet, except look nice-ish. Lots of reading the Fyne documentation and experimenting with Fyne.&lt;/p&gt;
&lt;p&gt;*PostCast is just a place holder name and might change. The goofy PostCast placeholder image was generated by ChatGPT and will likely change.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 83: Creating PostCast (Part 5 – Go PoC for LinkedIn API)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-83-creating-postcast-part-5-go-poc-for-linkedin-api/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-83-creating-postcast-part-5-go-poc-for-linkedin-api/</guid><description>&lt;p&gt;We get a Proof of Concept (PoC) in Go that completes the LinkedIn authorization. We end up figuring out the difference between a LinkedIn code and token. Get a code by entering your LinkedIn username and password, then use that code to get a token. We also spin up a local webserver to deal with the callback which is required to enter credentials and get the code.&lt;/p&gt;
&lt;p&gt;*PostCast is just a place holder name and might change. The goofy PostCast placeholder image was generated by ChatGPT and will likely change.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 82: Creating PostCast (Part 4 – Figuring out LinkedIn API)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-82-creating-postcast-part-4-figuring-out-linkedin-api/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-82-creating-postcast-part-4-figuring-out-linkedin-api/</guid><description>&lt;p&gt;Turns out getting a LinkedIn API key is confusing, at least for us. Did you know you need an Organization Page on @LinkedIn to get a key? You can&amp;rsquo;t just get an API key for yourself. No actual coding in this video, just lots of reading the LinkedIn docs and getting some curl scripts to work. If you have any tips for using LinkedIn API, let us know in the comments.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 81: Creating PostCast (Part 3 – Creating GitHub Action)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-81-creating-postcast-part-3-creating-github-action/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-81-creating-postcast-part-3-creating-github-action/</guid><description>&lt;p&gt;In this episode we create a GitHub action to build PostCast*. Actually, it was more of a test if we could get GitHub actions working for a Fyne project.&lt;/p&gt;
&lt;p&gt;I like having a CI/CD created as soon as I create a new project, so I know I can do a release at anytime. It also prevents the problem of &amp;ldquo;it worked on my machine&amp;rdquo; during development but now fails to run in production after creating the CI/CD at the last minute.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 80: Creating PostCast (Part 2 – Testing Fyne Packaging)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-80-creating-postcast-part-2-testing-fyne-packaging/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-80-creating-postcast-part-2-testing-fyne-packaging/</guid><description>&lt;p&gt;In this episode I&amp;rsquo;m joined by Omar, and we try cross-compiling and packaging our Fyne example app for Linux, Windows, and macOS. Spoiler alert: we get Linux and Windows working but fail because of a known bug with Fyne and macOS.&lt;/p&gt;
&lt;p&gt;*PostCast is just a place holder name and might change. The goofy PostCast placeholder image was generated by ChatGPT and will likely change.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/UwfyyYPsOwo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;PostCast Playlist:&lt;br&gt;
&lt;a href="https://www.youtube.com/playlist?list=PLYPcrKbLqwuvKQ97klk3bzyUPI6j154WC"&gt;https://www.youtube.com/playlist?list=PLYPcrKbLqwuvKQ97klk3bzyUPI6j154WC&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SaturdayMP Show 79: Creating PostCast (Part 1 – Setting up Go Environment)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-79-creating-postcast-part-1-setting-up-go-environment/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-79-creating-postcast-part-1-setting-up-go-environment/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/lMT_l2QjNFc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Happy New Year everyone! In this video I start on the PostCast* app, and this video turned out to be an hour of getting Go and Fyne set up. I&amp;rsquo;ve never used Go before, so it was a learning curve but not too bad.&lt;/p&gt;
&lt;p&gt;Do you have any suggestions for improving my setup? If so, let me know. I&amp;rsquo;m sure I got something wrong and/or something could be improved.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 78: Advent of Code 2025 (Day 1 - Part 2: Success)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-78-advent-of-code-2025-day-1-part-2-success/</link><pubDate>Thu, 18 Dec 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-78-advent-of-code-2025-day-1-part-2-success/</guid><description>&lt;p&gt;It took me two videos and over 2 hours, but I finally solved the Day 1 - Part 2 Advent of Code 2025 challenge! I wonder if I&amp;rsquo;m that is the slowest time on record? At least the slowest time anyone would admit too.&lt;/p&gt;
&lt;p&gt;Apparently solving Advent of Code problems is not my strong suite. They remind me of university assignments which I never really liked and is a big reason for not perusing a Master’s or PhD. Hopefully someone will just give me an honorary Master’s or PhD one day.&lt;/p&gt;</description></item><item><title>Weekly Dev Chat IRL: Advent of Code/Cyber</title><link>https://nftb.saturdaymp.workers.dev/weekly-dev-chat-irl-advent-of-code-cyber/</link><pubDate>Fri, 12 Dec 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/weekly-dev-chat-irl-advent-of-code-cyber/</guid><description>&lt;p&gt;The hosts of Weekly Dev Chat are pleased to announce we will be hosting &lt;strong&gt;Advent of Code/Cyber&lt;/strong&gt;. Come join us &lt;em&gt;in real life&lt;/em&gt; on &lt;strong&gt;December 18&lt;/strong&gt; at Strathcona Public Library. We&amp;rsquo;ll be participating in &lt;a href="https://adventofcode.com/"&gt;Advent of Code&lt;/a&gt; and &lt;a href="https://tryhackme.com/adventofcyber25"&gt;Advent of Cyber&lt;/a&gt;. Bring your laptop and come join the fun!&lt;/p&gt;
&lt;p&gt;See &lt;a href="https://luma.com/g8azmkzj"&gt;here&lt;/a&gt; for more details and registration.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 77: Advent of Code 2025 (Day 1 - Part 2: Failure)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-77-advent-of-code-2025-day-1-part-2-failure/</link><pubDate>Wed, 10 Dec 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-77-advent-of-code-2025-day-1-part-2-failure/</guid><description>&lt;p&gt;In this episode I explain how I previously solved Day 1 - Part 1 of the Advent of Code 2025 problem. I then proceed to fail to solve part 2, though I think I was close. I got stuck in the &amp;ldquo;keep trying random stuff&amp;rdquo; mindset instead of sitting back and thinking about the problem. A problem that is magnified when I&amp;rsquo;m recording as I have to think and talk at the same time.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 76: Hack the Box - Lock (Part 2 - Both Flags)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-76-hack-the-box-lock-part-2-both-flags/</link><pubDate>Wed, 03 Dec 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-76-hack-the-box-lock-part-2-both-flags/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/7EN_NzzzRnM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Part 2 of the Lock machine. I was able to capture both the user and system flags with the help of the walkthrough. My biggest learning was with the MSI Installer bug where you can use the installer repair action to elevate yourself from Guest to System Administrator.&lt;/p&gt;</description></item><item><title>XPlugins.iOS.BEMCheckBox version 8, 9, and 10 released!</title><link>https://nftb.saturdaymp.workers.dev/xplugins-ios-bemcheckbox-version-8-9-and-10-released/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/xplugins-ios-bemcheckbox-version-8-9-and-10-released/</guid><description>&lt;p&gt;I&amp;rsquo;m pleased to announce that versions 8.0.0, 9.0.0, and 10.0.0 of the XPlugin.iOS.BEMCheckBox have been released. XPlugin.iOS.BEMCheckBox allows you to use the iOS BEMCheckBox, created by Boris Emorine (Boris-Em), in your MAUI projects.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2023/10/BEMCheckBoxMedium.gif"&gt;&lt;img src="images/BEMCheckBoxMedium.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can find the releases on NuGet:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.nuget.org/packages/SaturdayMP.XPlugins.iOS.BEMCheckBox"&gt;https://www.nuget.org/packages/SaturdayMP.XPlugins.iOS.BEMCheckBox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;XPlugin project:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox"&gt;https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;BEMCheckBox project:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/saturdaymp/BEMCheckBox"&gt;https://github.com/saturdaymp/BEMCheckBox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The XPlugin.iOS.BEMCheckBox versions now match the .NET version so version 8 targets .NET 8, version 9 targets.NET 9, and so on. Version 8 and onwards use BEMCheckBox v2.2.0, which requires iOS 18 or higher.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 75: Hack the Box - Lock (Part 1, Almost Captured the User Flag)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-75-hack-the-box-lock-part-1-almost-captured-the-user-flag/</link><pubDate>Wed, 26 Nov 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-75-hack-the-box-lock-part-1-almost-captured-the-user-flag/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/M6CMolFPnGs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;In this episode I attempt the Lock machine on  &lt;a href="https://studio.youtube.com/channel/UCi67lRCd5qpaHwSXNJisuRQ"&gt;⁨@HackTheBox⁩&lt;/a&gt; . Spoiler: I almost captured the user flag but ran out of time. Got delayed by installing items on my new Kali Linux WSL and learning new about MSFvemon, setting Python virtual environments, and the Cryptodome library.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 74: Migrate From Rails to Jekyll (Part 7 or 7)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-74-migrate-from-rails-to-jekyll-part-7-or-7/</link><pubDate>Wed, 19 Nov 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-74-migrate-from-rails-to-jekyll-part-7-or-7/</guid><description>&lt;p&gt;The final episode in porting the SaturdayMP website from Rails to Jekyll where I update the DNS entries to point to the GitHub Pages site.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/wX9jUd_KVBE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Playlist:&lt;br&gt;
&lt;a href="https://www.youtube.com/playlist?list=PLYPcrKbLqwutOPHv6zimONxErY7ke9tWn"&gt;https://www.youtube.com/playlist?list=PLYPcrKbLqwutOPHv6zimONxErY7ke9tWn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Jekyll:&lt;br&gt;
&lt;a href="https://jekyllrb.com/"&gt;https://jekyllrb.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GitHub Pages:&lt;br&gt;
&lt;a href="https://docs.github.com/en/pages"&gt;https://docs.github.com/en/pages&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;EasyDNS:&lt;br&gt;
&lt;a href="https://easydns.com/"&gt;https://easydns.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Found this video useful? Then help others find it by liking, subscribing, sharing, and/or sponsoring:&lt;/p&gt;</description></item><item><title>BEMCheckBox v2.2.0 Released!</title><link>https://nftb.saturdaymp.workers.dev/bemcheckbox-v2-2-0-released/</link><pubDate>Thu, 13 Nov 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/bemcheckbox-v2-2-0-released/</guid><description>&lt;p&gt;I&amp;rsquo;m pleased to announce that &lt;a href="https://github.com/saturdaymp/BEMCheckBox/releases/tag/v2.2.0"&gt;v2.2.0&lt;/a&gt; of the &lt;a href="https://github.com/saturdaymp/BEMCheckBox"&gt;BEMCheckBox&lt;/a&gt; has been released! This release builds an xcframework instead of a &lt;a href="https://developer.apple.com/documentation/xcode/creating-a-multi-platform-binary-framework-bundle#Avoid-issues-when-using-alternate-build-systems"&gt;lipo&lt;/a&gt; binary. More details can be found in the &lt;a href="https://github.com/saturdaymp/BEMCheckBox/releases/tag/v2.1.0"&gt;release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was made aware of the change from lipo to xcframework when trying to add &lt;a href="https://github.com/saturdaymp/BEMCheckBox/releases/tag/v2.1.0"&gt;v2.1.0&lt;/a&gt; of the BEMCheckBox to a .NET 8 version of the &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox"&gt;XPlugins.iOS.BEMCheckBox&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;BEMCheckBox makes it easy to create beautiful, highly customizable, animated checkboxes for iOS. You can learn more about the project &lt;a href="https://github.com/saturdaymp/BEMCheckBox"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 72: Migrate From Rails to Jekyll (Part 5)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-72-migrate-from-rails-to-jekyll-part-5/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-72-migrate-from-rails-to-jekyll-part-5/</guid><description>&lt;p&gt;In this episode I fix the SASS depreciation warnings for @import and other statements. By fix I mean just ignore them as Bootstrap does not yet support the new @use and @forward.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eRCGlsGHNNM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Part 4:&lt;br&gt;
&lt;a href="https://youtu.be/eJbMn75dQKo%20Jekyll:%20https://jekyllrb.com/"&gt;https://youtu.be/eJbMn75dQKo Jekyll: https://jekyllrb.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bootstrap:&lt;br&gt;
&lt;a href="https://getbootstrap.com/"&gt;https://getbootstrap.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;SASS and Bootstrap:&lt;br&gt;
&lt;a href="https://sass-lang.com/documentation/breaking-changes/import/"&gt;https://sass-lang.com/documentation/breaking-changes/import/&lt;br&gt;
&lt;/a&gt;[https://github.com/twbs/bootstrap/pull/41236&lt;br&gt;
](&amp;lt;https://github.com/twbs/bootstrap/pull/41236&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;)&lt;br&gt;
Have a question you want answered in a future video? Constructive feedback? A challenging or interesting problem you need a hand with? Then comment, DM me, or send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 73: Migrate From Rails to Jekyll (Part 6)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-73-migrate-from-rails-to-jekyll-part-6/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-73-migrate-from-rails-to-jekyll-part-6/</guid><description>&lt;p&gt;No major hiccups in this episode, just several small tasks such as migrating the about and contact us pages, the favicon, and updating the documentation. All are done using Claude Code.&lt;/p&gt;
&lt;p&gt;Only one more step to update DNS entries, which I think I&amp;rsquo;ll make a video for. If you want to see the DNS entries update video, let me know.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/bR1E1FdoTSM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Part 5:&lt;br&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eRCGlsGHNNM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;
&lt;/p&gt;</description></item><item><title>SaturdayMP Show 71: Migrate From Rails to Jekyll (Part 4)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-71-migrate-from-rails-to-jekyll-part-4/</link><pubDate>Thu, 23 Oct 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-71-migrate-from-rails-to-jekyll-part-4/</guid><description>&lt;p&gt;In this episode I fixe the broken build from the last episode. I also created a Bootstrap plugin to find the Bootstrap SCSS path to load with the help of Claude Code. Spoiler: I&amp;rsquo;m still not done, so there will be a part 5. Will it ever end?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eJbMn75dQKo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Previous video:&lt;br&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/0s_3jVIttnc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;
&lt;/p&gt;</description></item><item><title>BEMCheckBox v2.1.0 Released!</title><link>https://nftb.saturdaymp.workers.dev/bemcheckbox-v2-1-0-released/</link><pubDate>Fri, 17 Oct 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/bemcheckbox-v2-1-0-released/</guid><description>&lt;p&gt;I&amp;rsquo;m pleased to announce that &lt;a href="https://github.com/saturdaymp/BEMCheckBox/releases/tag/v2.1.0"&gt;v2.1.0&lt;/a&gt; of the &lt;a href="https://github.com/saturdaymp/BEMCheckBox"&gt;BEMCheckBox&lt;/a&gt; has been released! This release adds basic accessibility support and updates the minimum iOS version from 12 to 18. More details can be found in the &lt;a href="https://github.com/saturdaymp/BEMCheckBox/releases/tag/v2.1.0"&gt;release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;BEMCheckBox makes it easy to create beautiful, highly customizable, animated checkboxes for iOS. You can learn more about the project &lt;a href="https://github.com/saturdaymp/BEMCheckBox"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2023/08/BEMCheckBox.gif"&gt;&lt;img src="images/BEMCheckBox.gif" alt="BEMCheckBox Example Gif"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Truth be told, I’m not very familiar with Xcode/Swift development, so if anyone notices any issues, please let me know by opening an &lt;a href="https://github.com/saturdaymp/BEMCheckBox/issues"&gt;issue&lt;/a&gt; or a &lt;a href="https://github.com/saturdaymp/BEMCheckBox/pulls"&gt;pull request&lt;/a&gt;. Especially with the accessibility features as this is my first time adding them.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 70: Migrate From Rails to Jekyll Part 3</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-70-migrate-from-rails-to-jekyll-part-3/</link><pubDate>Fri, 17 Oct 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-70-migrate-from-rails-to-jekyll-part-3/</guid><description>&lt;p&gt;I&amp;rsquo;m still not done migrating to &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;. In this video I struggle to get &lt;a href="https://getbootstrap.com/"&gt;Bootstrap&lt;/a&gt; customizations working with Jekyll, and I figure out that GitHub &lt;a href="https://docs.github.com/en/pages"&gt;Pages&lt;/a&gt; gem will use the &lt;a href="https://github.com/pages-themes/primer"&gt;Primer&lt;/a&gt; theme by default. I then break the build by trying to remove the Primer theme.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/0s_3jVIttnc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 69: Migrate From Rails to Jekyll (Part 2)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-69-migrate-from-rails-to-jekyll-part-2/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-69-migrate-from-rails-to-jekyll-part-2/</guid><description>&lt;p&gt;In this episode I start migrating my &lt;a href="https://rubyonrails.org/"&gt;Rails&lt;/a&gt; website to &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; and get the home page mostly done with the help of &lt;a href="https://www.claude.com/product/claude-code"&gt;Claude Code&lt;/a&gt;. I do run into an issue with &lt;a href="https://code.visualstudio.com/"&gt;Visual Studio Code&lt;/a&gt; not setup correctly for &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/"&gt;Windows Subsystem for Linux&lt;/a&gt; but get it sorted out.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ShVTQ1wLTsI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 68: Migrate Website From Rails to Jekyll (Part 1)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-68-migrate-website-from-rails-to-jekyll-part-1/</link><pubDate>Tue, 07 Oct 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-68-migrate-website-from-rails-to-jekyll-part-1/</guid><description>&lt;p&gt;In this episode I create an empty &lt;a href="https://docs.github.com/en/pages"&gt;GitHub Pages&lt;/a&gt; &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; project with the long-term goal of moving the existing Rails SaturdayMP website to GitHub Pages. While creating the new GitHub Pages project, I play with the &lt;a href="https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-coding-agent"&gt;GitHub Copilot Agent&lt;/a&gt; and create a Docker container to test the new site locally.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/K2ddgnMDTFk?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 67: picoCTF (Forbidden Paths &amp; Login)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-67-picoctf-forbidden-paths-login/</link><pubDate>Wed, 09 Apr 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-67-picoctf-forbidden-paths-login/</guid><description>&lt;p&gt;In this episode I solve the Forbidden Paths and Login &lt;a href="https://picoctf.org/"&gt;picoCTF&lt;/a&gt; challenges. You can find the source code in the video &lt;a href="https://github.com/mrbiggred/picoCTF"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/IiJC2aLvGkA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 66: picoCTF Format String 2 (Solved in One Long Video)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-66-picoctf-format-string-2-solved-in-one-long-video/</link><pubDate>Wed, 19 Feb 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-66-picoctf-format-string-2-solved-in-one-long-video/</guid><description>&lt;p&gt;In this episode I solve the &lt;a href="https://picoctf.org/"&gt;picoCTF&lt;/a&gt; Format String 2 problem in my longest video yet. Jump right to the end if you want to see the solution which used &lt;a href="https://docs.pwntools.com/en/latest/"&gt;pwntools&lt;/a&gt;. I think it gave me the knowledge to solve Format String 3, which I &lt;a href="https://youtu.be/AT8w2fsgzsA"&gt;haven&amp;rsquo;t solved&lt;/a&gt; yet. That said, I&amp;rsquo;m still struggling to picture the layout of variables on the stack.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/3dNMOff-Gp0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 65: Something's Rotten at the Gilded Rose: A Python Refactoring Tale</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-65-somethings-rotten-at-the-gilded-rose-a-python-refactoring-tale/</link><pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-65-somethings-rotten-at-the-gilded-rose-a-python-refactoring-tale/</guid><description>&lt;p&gt;In this episode I tackle the famous &lt;a href="https://github.com/emilybache/GildedRose-Refactoring-Kata"&gt;Gilded Rose Kata&lt;/a&gt; as practice for my upcoming Dev Edmonton JavaScript, Python &amp;amp; Ruby Meetup presentation. One of the great things about the Gilded Rose Kata is the different ways to &amp;ldquo;solve&amp;rdquo; it. What would have done different than me?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/CzHv3uY2KiU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;I&amp;rsquo;m posting this video the day before the &lt;a href="https://www.meetup.com/edmontonunlimited/events/305343333"&gt;presentation&lt;/a&gt;. Thank you to the &lt;a href="https://devedmonton.com/"&gt;Dev Edmonton&lt;/a&gt; JavaScript, Python, &amp;amp; Ruby Meetup for asking me to present.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 64: picoCTF Format String 3 (Part 1 - Watch me Fail)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-64-picoctf-format-string-3-part-1-watch-me-fail/</link><pubDate>Wed, 29 Jan 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-64-picoctf-format-string-3-part-1-watch-me-fail/</guid><description>&lt;p&gt;In this episode you can watch me fail to solve the &lt;a href="https://picoctf.org/"&gt;picoCTF&lt;/a&gt; Format String 3 problem. My lack of low-level programming is highlighted in this video as I struggle with the C printf exploits and how to read memory. Any tips for me without spoon feeding me the solution?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/AT8w2fsgzsA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 63: Advent of Code 2024 Day 12 (Part 3 - Solved!)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-63-advent-of-code-2024-day-12-part-3-solved/</link><pubDate>Wed, 22 Jan 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-63-advent-of-code-2024-day-12-part-3-solved/</guid><description>&lt;p&gt;In this episode I finish the &lt;a href="https://adventofcode.com/2024"&gt;Advent of Code&lt;/a&gt; 2024 Day 12 problem! I also figured out how to do parameterized tests in Python. Any constructive feedback on my solution? How would you have solved it differently?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/jOh7NLj7BxI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;You can find Part 2 here: &lt;a href="https://youtu.be/p9bSVRxkGlk"&gt;https://youtu.be/p9bSVRxkGlk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 62: Advent of Code 2024 Day 12 (Part 2 - Area Calculated)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-62-advent-of-code-2024-day-12-part-2-area-calculated/</link><pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-62-advent-of-code-2024-day-12-part-2-area-calculated/</guid><description>&lt;p&gt;In this episode I actually make some progress on the &lt;a href="https://adventofcode.com/2024"&gt;Advent of Code&lt;/a&gt; Day 12 problem and can calculate the area of a plot starting at a given point. Any feedback on my solution so far? Any Python tips for me?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/p9bSVRxkGlk?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;You can find Part 1 here: &lt;a href="https://youtu.be/RhSQ49SVAtY"&gt;https://youtu.be/RhSQ49SVAtY&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SaturdayMP Show 61: Advent of Code 2024 Day 12 (Part 1 - Python Import Difficulties)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-61-advent-of-code-2024-day-12-part-1-python-import-difficulties/</link><pubDate>Wed, 08 Jan 2025 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-61-advent-of-code-2024-day-12-part-1-python-import-difficulties/</guid><description>&lt;p&gt;In this episode I attempt the Advent of Code &lt;a href="https://adventofcode.com/2024/day/12"&gt;Day 12&lt;/a&gt; challenge. I didn&amp;rsquo;t get very far as I struggled to figure out how imports work in Python. Is it just me or did others struggle importing Python files?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/RhSQ49SVAtY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 60: Advent of Code 2024 (Day 2)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-60-advent-of-code-2024-day-2/</link><pubDate>Fri, 13 Dec 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-60-advent-of-code-2024-day-2/</guid><description>&lt;p&gt;In this episode I solve the &lt;a href="https://adventofcode.com/"&gt;Advent of Code&lt;/a&gt; 2024 Day 2 problem. I solve it using &lt;a href="https://www.python.org/"&gt;Python&lt;/a&gt;, a language I&amp;rsquo;m not very familiar with. I did learn that Python lists allow &lt;a href="https://docs.python.org/3/faq/programming.html#what-s-a-negative-index"&gt;negative indexing&lt;/a&gt;, which confused me at first. Do people use negative indexing often?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/wKnpfxOWB0o?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 59: Customize Office Ribbon</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-59-customize-office-ribbon/</link><pubDate>Wed, 04 Dec 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-59-customize-office-ribbon/</guid><description>&lt;p&gt;In this episode I show how to customize &lt;a href="https://www.microsoft.com/en-ca/microsoft-365"&gt;Microsoft&lt;/a&gt; Word Ribbon (i.e. menu) without any developer tools. Inspired by a client who needed some changes to their Word Ribbon.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/c6_i8HRNf8o?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 58: Human Resource Machine (Duplicate Machine Size Challenge)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-58-human-resource-machine-duplicate-machine-size-challenge/</link><pubDate>Wed, 27 Nov 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-58-human-resource-machine-duplicate-machine-size-challenge/</guid><description>&lt;p&gt;In this episode I solve the &lt;a href="https://tomorrowcorporation.com/humanresourcemachine"&gt;Human Resource Machine&lt;/a&gt; Duplicate Machine size challenge! Sorry for the spoiler, I am really excited that I solved the problem which you can hear in my voice in the video.&lt;/p&gt;
&lt;p&gt;That said, I didn&amp;rsquo;t solve the speed challenge. Any suggestions? Ideally a suggestion that is not just the answer as I&amp;rsquo;m sure I could search for the solution.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ga99fYkwVJA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 57: Something's Rotten at the Gilded Rose: A Refactoring Tale</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-57-somethings-rotten-at-the-gilded-rose-a-refactoring-tale/</link><pubDate>Fri, 22 Nov 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-57-somethings-rotten-at-the-gilded-rose-a-refactoring-tale/</guid><description>&lt;p&gt;In this episode I tackle the famous &lt;a href="https://github.com/emilybache/GildedRose-Refactoring-Kata"&gt;Gilded Rose&lt;/a&gt; refactoring kata as practice for my upcoming Edmonton .NET User Group (&lt;a href="https://edmug.net"&gt;EDMUG&lt;/a&gt;) presentation. One of the great things about the Gilded Rose kata is the different ways to &amp;ldquo;solve&amp;rdquo; it. What would have done different then me?&lt;/p&gt;
&lt;p&gt;Slides and source code for the presentation can be found &lt;a href="https://github.com/saturdaymp-examples/a-refactoring-tale"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/0bTbXpXUhmk?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;I&amp;rsquo;m posting this the day after the EDMUG presentation. Thank you to EDMUG for allowing me to present and special thank you to the attendees who braved the snow and bad driving conditions.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 56: Kali on WSL</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-56-kali-on-wsl/</link><pubDate>Wed, 13 Nov 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-56-kali-on-wsl/</guid><description>&lt;p&gt;In this episode I install &lt;a href="https://www.kali.org/"&gt;Kali&lt;/a&gt; Linux on the Windows Subsystem for Linux (&lt;a href="https://learn.microsoft.com/en-us/windows/wsl/install"&gt;WSL&lt;/a&gt;) and try different desktop GUI experiences. You can find the steps I used &lt;a href="https://www.kali.org/docs/wsl/wsl-preparations/"&gt;here.&lt;/a&gt; What is your experience using Kali, or other Linux distributions, on WSL?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/S52gmWcgLJw?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;. Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;. Need help shipping secure high quality software faster? Check out &lt;a href="https://saturdaymp.com/"&gt;Saturday Morning Productions&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 55: Migrating from VMWare to Hyper-V</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-55-migrating-from-vmware-to-hyper-v/</link><pubDate>Fri, 08 Nov 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-55-migrating-from-vmware-to-hyper-v/</guid><description>&lt;p&gt;In this video I migrate an Ubuntu &lt;a href="https://www.vmware.com/"&gt;VMWare&lt;/a&gt; Workstation hard disk to &lt;a href="https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/about/"&gt;Hyper-V&lt;/a&gt;. I get stuck trying to enable enhanced session at the end. I think the problem is I need to set the EnhancedSessionTransportType to HvSocket:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Set-VM -VMName WsUbuntuExample -EnhancedSessionTransportType HvSocket
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;ll try that at a later date and let you know if works. Please let me know if you think above will work and if you have any improvements on migrating virtual machines.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 53: Human Resource Machine (Inventory Report)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-53-human-resource-machine-inventory-report/</link><pubDate>Wed, 23 Oct 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-53-human-resource-machine-inventory-report/</guid><description>&lt;p&gt;In this video I solve the Inventory Report problem in &lt;a href="https://tomorrowcorporation.com/humanresourcemachine"&gt;Human Resource Machine&lt;/a&gt; game by Tomorrow Corporation. It simulates finding characters in a null terminated string.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Bbnn8ms322U?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 52: Human Resource Machine (Strings)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-52-human-resource-machine-strings/</link><pubDate>Wed, 09 Oct 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-52-human-resource-machine-strings/</guid><description>&lt;p&gt;In this video I solve a couple string problems in the &lt;a href="https://tomorrowcorporation.com/humanresourcemachine"&gt;Human Resource Machine&lt;/a&gt; game by Tomorrow Corporation. The problems are a good way to explain null terminated strings.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/V0FklnR3r-A?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 51: Cyber Insecurity in the Wild</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-51-cyber-insecurity-in-the-wild/</link><pubDate>Wed, 02 Oct 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-51-cyber-insecurity-in-the-wild/</guid><description>&lt;p&gt;A presentation about security issues I&amp;rsquo;ve personally witnessed. The IRL presentation is Oct 3rd, 2024 for the &lt;a href="https://devedmonton.com/"&gt;Dev Edmonton&lt;/a&gt; JavaScript, Ruby, and Python &lt;a href="https://exchangejs.com/"&gt;Meetup&lt;/a&gt; in Edmonton.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ciMa2m6iKbY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 50: Hack the Box Sherlock (Brutus)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-50-hack-the-box-sherlock-brutus/</link><pubDate>Wed, 25 Sep 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-50-hack-the-box-sherlock-brutus/</guid><description>&lt;p&gt;In this episode I solve the Brutus Sherlock on &lt;a href="https://www.hackthebox.com/"&gt;Hack the Box&lt;/a&gt; with only minimal help from the walkthrough.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/K78TJuSNm4Y?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 49: picoCTF Gym (Trickster &amp; Cookies)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-49-picoctf-gym-trickster-cookies/</link><pubDate>Wed, 18 Sep 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-49-picoctf-gym-trickster-cookies/</guid><description>&lt;p&gt;In this episode I show how to solve the Trickster &lt;a href="https://picoctf.com/"&gt;picoCTF&lt;/a&gt; challenge which I got stuck on in the last video. I got some help from &lt;a href="https://weeklydevchat.com/"&gt;Weekly Dev Chat&lt;/a&gt; participants. I also solve the Cookies challenge.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/q_M-Gkcw9e0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 48: picoCTF Gym (Verify and Getting Stuck on Trickster)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-48-picoctf-gym-verify-and-getting-stuck-on-trickster/</link><pubDate>Wed, 11 Sep 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-48-picoctf-gym-verify-and-getting-stuck-on-trickster/</guid><description>&lt;p&gt;In this episode I go over my plan for the month and then try a couple &lt;a href="https://picoctf.com/"&gt;picoCTF&lt;/a&gt; problems. Successfully solved Verify and failed to figure out Trickster. Do you have any tips for me to solve Trickster?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/3vODZAX5hzM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 36: picoCTF Gym</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-36-picoctf-gym/</link><pubDate>Wed, 13 Mar 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-36-picoctf-gym/</guid><description>&lt;p&gt;In this episode I do some &lt;a href="https://picoctf.org/"&gt;picoCTF&lt;/a&gt; exercises inspired by the picoCTF 2024 competition starting. The last &lt;a href="https://play.picoctf.org/practice/challenge/104"&gt;problem&lt;/a&gt; was a &lt;a href="https://home.unicode.org/"&gt;Unicode&lt;/a&gt; byte problem that I figured out with help from &lt;a href="https://github.com/features/copilot"&gt;GitHub Copilot&lt;/a&gt;. I don&amp;rsquo;t fully understand the solution so let me know if you do. Figuring out the bit math seems like a good future video.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/sj_UvIzkMHY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 35: GitVersion Lighting Talk for EDMUG</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-35-gitversion-lighting-talk-for-edmug/</link><pubDate>Wed, 06 Mar 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-35-gitversion-lighting-talk-for-edmug/</guid><description>&lt;p&gt;This episode is a preview of a lighting talk I was giving later that day at the Edmonton .NET Users Group (&lt;a href="https://www.meetup.com/Edmonton-NET-User-Group/"&gt;EDMUG&lt;/a&gt;) about &lt;a href="https://gitversion.net/"&gt;GitVersion&lt;/a&gt;. It&amp;rsquo;s a quick overview of GitVersion and how I use it in my &lt;a href="https://github.com/saturdaymp"&gt;projects&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/a7crfoMEhos?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show 34: Upgrade Website from Rails 6 1 to 7 0 Part 6 (Merging &amp; Wrap Up)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-34-upgrade-website-from-rails-6-1-to-7-0-part-6-merging-wrap-up/</link><pubDate>Wed, 28 Feb 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-34-upgrade-website-from-rails-6-1-to-7-0-part-6-merging-wrap-up/</guid><description>&lt;p&gt;In this episode I wrap-up the Rails 7.0 &lt;a href="https://www.youtube.com/watch?v=1CM2u6lRTiw&amp;amp;list=PLYPcrKbLqwusnhxZ3DVFXmMaAT-YKi4HE"&gt;upgrade&lt;/a&gt; by merging the changes from removing &lt;a href="https://github.com/rails/webpacker"&gt;Webpack&lt;/a&gt; and show how the &lt;a href="https://gitlab.com/"&gt;GitLab&lt;/a&gt; and &lt;a href="https://render.com/"&gt;Render&lt;/a&gt; CI/CD pipelines. The episodes ends well but starts with me finding a Bootstrap &lt;a href="https://github.com/twbs/bootstrap-rubygem"&gt;Gem&lt;/a&gt; and &lt;a href="https://github.com/rails/dartsass-rails"&gt;Dart Sass for Rails&lt;/a&gt; &lt;a href="https://github.com/twbs/bootstrap-rubygem/issues/267"&gt;issue&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/DeLc_yS-QAU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #33: Upgrading Website from Rails 6.1 to 7.0 Part 5 (Removing Webpack CI Fixes)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-33-upgrading-website-from-rails-6-1-to-7-0-part-5-removing-webpack-ci-fixes/</link><pubDate>Wed, 21 Feb 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-33-upgrading-website-from-rails-6-1-to-7-0-part-5-removing-webpack-ci-fixes/</guid><description>&lt;p&gt;In this episode I fix issues in continuous integration (CI) pipeline and other DevOps caused by removing &lt;a href="https://github.com/rails/webpacker"&gt;Webpack&lt;/a&gt;. Longer episode as I encounter a issue with &lt;a href="https://github.com/rails/dartsass-rails"&gt;Dart Sass for Rails&lt;/a&gt; and I think the &lt;a href="https://docs.gitlab.com/ee/ci/"&gt;CI&lt;/a&gt; builds the Docker containers for production instead of development. Live coding at it&amp;rsquo;s best. What other developer actually shows them messing up in real time?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/kjBVR_8OPRE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #32: Upgrading Website from Rails 6.1 to 7.0 Part 4 (Removing Webpack)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-32-upgrading-website-from-rails-6-1-to-7-0-part-4-removing-webpack/</link><pubDate>Wed, 14 Feb 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-32-upgrading-website-from-rails-6-1-to-7-0-part-4-removing-webpack/</guid><description>&lt;p&gt;Happy Valentines Day! In this episode I replace &lt;a href="https://github.com/rails/webpacker"&gt;Webpack&lt;/a&gt; with &lt;a href="https://github.com/rails/importmap-rails"&gt;Import Maps&lt;/a&gt; and it gees well, at least in the development environment. I&amp;rsquo;ll likely run into issues when I try a staging deploy and need to make changes in the CI but that is a problem for future Chris in a future video.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/iSwx3l2xHdg?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #31: Human Resource Machine Fibonacci and Three Sort</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-31-human-resource-machine-fibonacci-and-three-sort/</link><pubDate>Wed, 07 Feb 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-31-human-resource-machine-fibonacci-and-three-sort/</guid><description>&lt;p&gt;In this episode I try &lt;a href="https://www.youtube.com/@Endede"&gt;Endede&lt;/a&gt;&amp;rsquo;s solution to the Fibonacci Size Challenge in &lt;a href="https://tomorrowcorporation.com/humanresourcemachine"&gt;Human Resource Machine&lt;/a&gt; and, spoiler alert, it work! Thanks Endede!&lt;/p&gt;
&lt;p&gt;You can stop watching the video after the Fibonacci section, unless you like watching me struggle, as I attempt the Size or Speed Challenge for the Three Sort problem and fail at both. Ping me if you have suggestions for solving the Three Sort challenges.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/dBs9YDmucTI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #30: Upgrading Website from Rails 6.1 to 7.0 Part 3 (Testing &amp; Merging)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-30-upgrading-website-from-rails-6-1-to-7-0-part-3-testing-merging/</link><pubDate>Wed, 31 Jan 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-30-upgrading-website-from-rails-6-1-to-7-0-part-3-testing-merging/</guid><description>&lt;p&gt;In this episode I do some more testing, fix issues found during the CI, and merge the branch to main which kicks off a production deployment of the &lt;a href="https://saturdaymp.com/"&gt;SaturdayMP&lt;/a&gt; site.&lt;/p&gt;
&lt;p&gt;Should have been a shorter video but I created a CI issue by changing they system tests from using &amp;ldquo;headless_chrome&amp;rdquo; to just &amp;ldquo;chrome&amp;rdquo;. If you know the reason for this issue let me know in the video comments or &lt;a href="ask@saturdaymp.com"&gt;email&lt;/a&gt; me.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ZkQfMQ4DimU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #29: Upgrading Website from Rails 6.1 to 7.0 Part 2: Upgrading Rails</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-29-upgrading-website-from-rails-6-1-to-7-0-part-2-upgrading-rails/</link><pubDate>Wed, 24 Jan 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-29-upgrading-website-from-rails-6-1-to-7-0-part-2-upgrading-rails/</guid><description>&lt;p&gt;In this episode I do the actual upgrade from Rails &lt;a href="https://guides.rubyonrails.org/upgrading_ruby_on_rails.html"&gt;6.1 to 7.0&lt;/a&gt; for the &lt;a href="https://saturdaymp.com/"&gt;SaturdayMP&lt;/a&gt; site. The upgrade actually goes pretty smooth aside from an issue setting up the system tests. Does not include removing &lt;a href="https://github.com/rails/webpacker"&gt;Webpacker&lt;/a&gt; which I will be in a future video.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/bPNpEZIGeYE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #28: Upgrading Website from Rails 6.1 to 7.0 Part 1 - Preparation</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-28-upgrading-website-from-rails-6-1-to-7-0-part-1/</link><pubDate>Wed, 17 Jan 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-28-upgrading-website-from-rails-6-1-to-7-0-part-1/</guid><description>&lt;p&gt;In this episode I start the process of upgrading the &lt;a href="https://saturdaymp.com/"&gt;SaturdayMP&lt;/a&gt; website from Rails &lt;a href="https://guides.rubyonrails.org/upgrading_ruby_on_rails.html"&gt;6.1 to 7.0&lt;/a&gt;. This video covers getting website ready for the upgrade.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/1CM2u6lRTiw?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, sharing, and/or &lt;a href="https://github.com/sponsors/saturdaymp/"&gt;sponsoring&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have question you want answered in a future video? Pair on a problem? Constructive feedback? Send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #27: Chromebook EOL and Human Resource Fibonacci Challenge Attempt 2</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-27-chromebook-eol-and-human-resource-fibonacci-challenge-attempt-2/</link><pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-27-chromebook-eol-and-human-resource-fibonacci-challenge-attempt-2/</guid><description>&lt;p&gt;In this episode I answer my own question about how to determine the &lt;a href="https://support.google.com/chromebook/answer/9367166?hl=en"&gt;EOL&lt;/a&gt; for Chromebooks. I then try &lt;a href="https://www.youtube.com/@Endede"&gt;Endede&lt;/a&gt; &amp;rsquo;s solution for doing the the &lt;a href="https://tomorrowcorporation.com/humanresourcemachine"&gt;Human Resource Machine&lt;/a&gt; Fibonacci problem in 19 or less steps.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/pdBHw_SDZYc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, &lt;a href="https://www.youtube.com/@saturdaymp"&gt;subscribing&lt;/a&gt;, and sharing.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #26: Human Resource Machine</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-26-human-resource-machine/</link><pubDate>Wed, 03 Jan 2024 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-26-human-resource-machine/</guid><description>&lt;p&gt;In this episode I play &lt;a href="https://tomorrowcorporation.com/humanresourcemachine"&gt;Human Resource Machine&lt;/a&gt; by &lt;a href="https://tomorrowcorporation.com/"&gt;Tomorrow Corporation&lt;/a&gt;, a game that simulates programming in assembly. Anyone have any suggestions for optimizing the number of steps in the Fibonacci Visitor (Year 22)?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/xQXHTrzqPwI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Thanks to the person on the &lt;a href="https://devedmonton.com/"&gt;Dev Edmonton&lt;/a&gt; Slack you asked about the game. I didn&amp;rsquo;t review it but hopefully this video helps you decide if you should buy it or not.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #25: TPS Report Uploader CFT Walkthrough (Vulnerable Blazor Application)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-25-tps-report-uploader-cft-walkthrough-vulnerable-blazor-application/</link><pubDate>Wed, 27 Dec 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-25-tps-report-uploader-cft-walkthrough-vulnerable-blazor-application/</guid><description>&lt;p&gt;Happy Holidays!&lt;/p&gt;
&lt;p&gt;In this episode I do a walkthrough of the &lt;a href="https://github.com/saturdaymp-examples/tps-report-uploader"&gt;TPS Report Uploader&lt;/a&gt; capture the flag (CTF) I created. The walkthrough includes how to exploit the vulnerabilities and how to fix them in this .NET 8 &lt;a href="https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor"&gt;Blazor&lt;/a&gt; application. You can try the CTF, or just follow along with the video, by downloading the TPS Report Uploader &lt;a href="https://github.com/saturdaymp-examples/tps-report-uploader"&gt;repo&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/uBnua-JZrec?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Tools used in this walkthrough:&lt;/p&gt;</description></item><item><title>SaturdayMP Show #24: Can you use Docker Compose Watch without a Dockerfile?</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-24-can-you-use-docker-compose-watch-without-a-dockerfile/</link><pubDate>Wed, 20 Dec 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-24-can-you-use-docker-compose-watch-without-a-dockerfile/</guid><description>&lt;p&gt;In this episode I answer a &lt;a href="https://www.youtube.com/watch?v=eHdb93jhBYs&amp;amp;lc=Ugwdx5kXdcg33DbmYx94AaABAg"&gt;viewer&amp;rsquo;s&lt;/a&gt; question if you can use &lt;a href="https://docs.docker.com/compose/file-watch/"&gt;Docker Compose Watch&lt;/a&gt; without a Dockerfile. Actually, it&amp;rsquo;s more me checking if they are correct. Spoiler alert, they are correct and you can&amp;rsquo;t use Docker Compose Watch without a Dockerfile. You will get an error message: &amp;ldquo;can&amp;rsquo;t watch service [service-name] without a build context&amp;rdquo;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/05KtqwobX5Y?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Previous video about Docker Compose Watch:&lt;/p&gt;</description></item><item><title>Happy Holidays!</title><link>https://nftb.saturdaymp.workers.dev/happy-holidays-2/</link><pubDate>Tue, 19 Dec 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/happy-holidays-2/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2023/12/image.png"&gt;&lt;img src="images/image-1024x585.webp" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;May your holidays be filled with more joy then discovering a legacy project with 90% test coverage, the happiness that rivals getting a project out the door on-time and under budget, and secure from sensitive information leaks from too much Christmas cheer.&lt;/p&gt;
&lt;p&gt;Happy holidays from SaturdayMP and all the best in 2024!&lt;/p&gt;
&lt;p&gt;P.S. - The &lt;a href="https://saturdaymp.com/"&gt;SaturdayMP&lt;/a&gt; virtual office will be closed from Dec 21st to Jan 1st. I&amp;rsquo;ll still be checking and responding to message but much slower then normal.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #23: Adding Basic Auth to NGINX Passenger Docker (Part 3)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-23-adding-basic-auth-to-nginx-passenger-docker-part-3/</link><pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-23-adding-basic-auth-to-nginx-passenger-docker-part-3/</guid><description>&lt;p&gt;In this stunning conclusion to the 3 part series I finally get &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication"&gt;HTTP Basic Authentication&lt;/a&gt; working. Including merging my changes into the main branch in GitLab and making sure it works in staging and production in &lt;a href="https://render.com/"&gt;Render&lt;/a&gt;. The video is so long because I made dumb mistake 10 minutes in.&lt;/p&gt;
&lt;p&gt;Spoiler: When using the Passenger Docker image it&amp;rsquo;s really important you don&amp;rsquo;t &lt;a href="https://github.com/phusion/passenger-docker?tab=readme-ov-file#using-nginx-and-passenger"&gt;delete&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;RUN rm -f /etc/service/nginx/down
&lt;/code&gt;&lt;/pre&gt;&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/IL6jnyoLwYw?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, subscribing, and sharing.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #22: Adding Basic Auth to NGINX Passenger Docker (Part 2)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-22-adding-basic-auth-to-nginx-passenger-docker-part-2/</link><pubDate>Mon, 04 Dec 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-22-adding-basic-auth-to-nginx-passenger-docker-part-2/</guid><description>&lt;p&gt;In this episode I get the Basic Authentication NGINX &lt;a href="https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/"&gt;configuration&lt;/a&gt; working using the &lt;a href="https://www.baeldung.com/linux/envsubst-command"&gt;envsubst&lt;/a&gt; tool to replace environment variables in the config file. Ran out of time to test the fix in actual staging. That will hopefully be done in the 3rd part of this series.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/i0W_3Q55gro?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Watch the previous video in the series:&lt;/p&gt;</description></item><item><title>SaturdayMP Show #21: Adding Basic Auth to NGINX Passenger Docker (Part 1)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-21-adding-basic-auth-to-nginx-passenger-docker-part-1/</link><pubDate>Wed, 29 Nov 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-21-adding-basic-auth-to-nginx-passenger-docker-part-1/</guid><description>&lt;p&gt;In this episode I explain and then start to add &lt;a href="https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/"&gt;HTTP Basic Authentication&lt;/a&gt; to the Saturday MP website which is a &lt;a href="https://rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; application hosted on a &lt;a href="https://github.com/phusion/passenger-docker"&gt;Passenger Docker&lt;/a&gt; image. As usual I ran into some trouble and at the end of the video figured out I should use the &lt;a href="https://www.baeldung.com/linux/envsubst-command"&gt;envsubst&lt;/a&gt; command to dynamically set the Basic Auth, and other values, in the NGINX config.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/H9lZ247oIgc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Found this video useful? Then help others find it by liking, subscribing, and sharing.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #20: Hack the Box - Busqueda Part 3 (Root Flag)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-20-hack-the-box-busqueda-part-3-root-flag/</link><pubDate>Wed, 22 Nov 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-20-hack-the-box-busqueda-part-3-root-flag/</guid><description>&lt;p&gt;In this episode I find the root flag for the &lt;a href="https://app.hackthebox.com/machines/Busqueda"&gt;Busqueda&lt;/a&gt; machine on &lt;a href="https://www.hackthebox.com/"&gt;Hack the Box&lt;/a&gt;. Took a wrong turn looking for &lt;a href="https://about.gitea.com/"&gt;Gitea&lt;/a&gt; and &lt;a href="https://git-scm.com/"&gt;Git&lt;/a&gt; vulnerabilities but eventually found the root flag with help from the walkthrough.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/w-VecPQoruo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Watch part 2 of me hacking the Busqueda machine:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/x7oDT3eYqyI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Thanks to &lt;a href="https://www.hackthebox.com/"&gt;Hack the Box&lt;/a&gt; for creating a playground for myself, and others, to learn cyber security skills. Thanks to &lt;a href="https://app.hackthebox.com/users/389926"&gt;kavigihan&lt;/a&gt; for creating the &lt;a href="https://app.hackthebox.com/machines/Busqueda"&gt;Busqueda&lt;/a&gt; machine.&lt;/p&gt;</description></item><item><title>Saturday MP Show #19: Comparing Docker Volumes to Docker Compose Watch</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-19-comparing-docker-volumes-to-docker-compose-watch/</link><pubDate>Wed, 15 Nov 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-19-comparing-docker-volumes-to-docker-compose-watch/</guid><description>&lt;p&gt;In this episode I answer a viewer question from episode #16: Are &lt;a href="https://docs.docker.com/storage/volumes/"&gt;Docker Volumes&lt;/a&gt; are a two way sync?. The answer is kind-of.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eHdb93jhBYs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;You can view the question in the comments section of &lt;a href="https://youtu.be/U8YmtsiNjyA"&gt;episode #16&lt;/a&gt; where I try out &lt;a href="https://docs.docker.com/compose/file-watch/"&gt;Docker Compose Watch&lt;/a&gt; for the first time.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href="https://www.youtube.com/channel/UCBvl90Au1S2ZAiAvP_-uO1w"&gt;victorajayi9056&lt;/a&gt; for asking the question. Thanks to &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt; for creating Docker. That sounded weird. Anyway it has been an invaluable tool for creating development environments for my clients.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #18: Hack the Box - Busqueda Part 2 (Reverse Shell)</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-18-hack-the-box-busqueda-part-2-reverse-shell/</link><pubDate>Wed, 08 Nov 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-18-hack-the-box-busqueda-part-2-reverse-shell/</guid><description>&lt;p&gt;In this episode I get a reverse shell working and make some progress on capturing the root flag. Spoiler: There is a self hosted GitHub like website.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/x7oDT3eYqyI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Watch part 1 of me hacking the Busqueda machine at:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/mSG0Fj-qwyY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Thanks to &lt;a href="https://www.hackthebox.com/"&gt;Hack The Box&lt;/a&gt; for creating a playground for myself, and others, to learn cyber security skills. Thanks to &lt;a href="https://app.hackthebox.com/users/389926"&gt;kavigihan&lt;/a&gt; for creating the &lt;a href="https://app.hackthebox.com/machines/Busqueda"&gt;Busqueda&lt;/a&gt; machine:&lt;/p&gt;</description></item><item><title>Don't Commit Sensitive Information to the Repository</title><link>https://nftb.saturdaymp.workers.dev/dont-commit-sensitive-information-to-the-repository/</link><pubDate>Mon, 06 Nov 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/dont-commit-sensitive-information-to-the-repository/</guid><description>&lt;p&gt;One of the most common security issues I in code reviews is sensitive information, such as production credentials, API keys, etc, in the source code. The source code I just pulled from the repository. The source code all the developers before me have also pulled down to their local computers. Developers who might not work at the company anymore.&lt;/p&gt;
&lt;p&gt;Most people are honest and won&amp;rsquo;t do anything bad with the information but there are exceptions. Even if developer is honest they might accidently expose the sensitive information such as a stolen laptop or their home network getting compromised.&lt;/p&gt;</description></item><item><title>Saturday MP Show #17: Hack the Box - Busqueda (User Flag)</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-17-hack-the-box-busqueda-user-flag/</link><pubDate>Thu, 02 Nov 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-17-hack-the-box-busqueda-user-flag/</guid><description>&lt;p&gt;In this episode I find the user flag for the &lt;a href="https://app.hackthebox.com/machines/Busqueda"&gt;Busqueda&lt;/a&gt; machine on &lt;a href="https://www.hackthebox.com/"&gt;Hack the Box&lt;/a&gt;. Perhaps with a little help from the walkthrough and &lt;a href="https://openai.com/chatgpt"&gt;Chat GPT&lt;/a&gt; to assist with my lack of &lt;a href="https://www.python.org/"&gt;Python&lt;/a&gt; knowledge.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/mSG0Fj-qwyY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Thanks to Hack the Box for creating a playground for myself, and others, to learn cyber security skills. Thanks to &lt;a href="https://app.hackthebox.com/users/389926"&gt;kavigihan&lt;/a&gt; for creating the &lt;a href="https://app.hackthebox.com/machines/Busqueda"&gt;Busqueda&lt;/a&gt; machine.&lt;/p&gt;</description></item><item><title>Do you Really Need Custom Software?</title><link>https://nftb.saturdaymp.workers.dev/do-you-really-need-custom-software/</link><pubDate>Mon, 30 Oct 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/do-you-really-need-custom-software/</guid><description>&lt;p&gt;Custom software is expensive to build and usually delivered late and overbudget. Custom software, like a garden, needs to maintained and frequently updated. Especially for security updates. Everyone, well almost everyone, forgets to budget time and money for maintenance.&lt;/p&gt;
&lt;p&gt;Before getting custom software built you should check for an existing solution. I&amp;rsquo;m willing to bet something does exist. Don&amp;rsquo;t get hung up on the 10% the custom software can&amp;rsquo;t do. Look at the 90% of the problem it does solve.&lt;/p&gt;</description></item><item><title>Saturday MP Show #16: Trying out Docker Compose Watch</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-16-trying-out-docker-compose-watch/</link><pubDate>Wed, 25 Oct 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-16-trying-out-docker-compose-watch/</guid><description>&lt;p&gt;In this episode I try out the new Docker Compose &lt;a href="https://docs.docker.com/compose/file-watch/"&gt;Watch&lt;/a&gt; developer feature that synchronizes files on the host and the container. Similar to Docker &lt;a href="https://docs.docker.com/storage/volumes/"&gt;Volumes&lt;/a&gt;. It won&amp;rsquo;t replace Docker Volumes for for me, at least not yet. Are you using, or thinking about using, Watch?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/U8YmtsiNjyA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;I did encounter a known &lt;a href="https://github.com/docker/compose/issues/11069"&gt;bug&lt;/a&gt; where Docker Watch won&amp;rsquo;t run again after a Ctrl-C stop. You can find a workaround for the issue &lt;a href="https://github.com/docker/compose/issues/11069#issuecomment-1769694535"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>My Takeaway from Talking to Strangers by Malcolm Gladwell</title><link>https://nftb.saturdaymp.workers.dev/my-takeaway-from-talking-to-strangers-by-malcolm-gladwell/</link><pubDate>Mon, 23 Oct 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/my-takeaway-from-talking-to-strangers-by-malcolm-gladwell/</guid><description>&lt;p&gt;&lt;img src="images/TalkingToStrangersBook-300x225.webp" alt="Taking to Strangers book cover."&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Book:&lt;/strong&gt; &lt;a href="https://www.gladwellbooks.com/titles/malcolm-gladwell/talking-to-strangers/9780316478526/"&gt;Talking to Strangers&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://www.gladwellbooks.com/"&gt;Malcolm Gladwell&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This book has a lot of stories that include a police stop gone wrong, pyramid scheme, Cuban spies, drinking, sexual assault, and torture. A bit hard to follow all the different stories and pick out a theme for the book. At least for me.&lt;/p&gt;
&lt;p&gt;My biggest takeaway was finding the balance between trust and doubt. The book points out that most humans are wired to &lt;a href="https://en.wikipedia.org/wiki/Truth-default_theory"&gt;trust by default&lt;/a&gt;. We believe what others say and this trust can override nagging doubts.&lt;/p&gt;</description></item><item><title>Saturday MP Show #15: PR Created for Standard Ruby Linter Bug</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-15-pr-created-for-standard-ruby-linter-bug/</link><pubDate>Thu, 19 Oct 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-15-pr-created-for-standard-ruby-linter-bug/</guid><description>&lt;p&gt;I finally create the PR for &lt;a href="https://github.com/standardrb/standard"&gt;Standard&lt;/a&gt; Ruby Linter Bug I&amp;rsquo;ve been working on the base several videos and months. I also fix the merge conflict noticed in the previous video.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/e-uCloSaLGE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Read about the bug I&amp;rsquo;m trying to fix &lt;a href="https://github.com/standardrb/standard/issues/565"&gt;here&lt;/a&gt; and the PR &lt;a href="https://github.com/standardrb/standard/pull/587"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href="https://testdouble.com/"&gt;Test Double&lt;/a&gt; for creating Standard! It is a great linter for Ruby projects.&lt;/p&gt;</description></item><item><title>XPlugins.iOS.BEMCheckBox v3.0.1 Released (.NET 6.0+ Support)!</title><link>https://nftb.saturdaymp.workers.dev/xplugins-ios-bemcheckbox-v3-0-1-released-net-6-0-support/</link><pubDate>Tue, 17 Oct 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/xplugins-ios-bemcheckbox-v3-0-1-released-net-6-0-support/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2023/08/BEMCheckBox.gif"&gt;&lt;img src="images/BEMCheckBox.gif" alt="BEMCheckBox Example Gif"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m happy to announce that &lt;a href="https://www.nuget.org/packages/SaturdayMP.XPlugins.iOS.BEMCheckBox/3.0.1"&gt;v3.&lt;/a&gt;&lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox/releases/tag/v3.0.1"&gt;0&lt;/a&gt;&lt;a href="https://www.nuget.org/packages/SaturdayMP.XPlugins.iOS.BEMCheckBox/3.0.1"&gt;.1&lt;/a&gt; of the &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox"&gt;XPlugins.iOS.BEMCheckBox&lt;/a&gt; has been released! This release updates XPlugins.iOS.BEMCheckBox so it can be used in .NET 6.0 and higher projects (e.g. net6.0-ios12). You can find the latest release on NuGet &lt;a href="https://www.nuget.org/packages/SaturdayMP.XPlugins.iOS.BEMCheckBox/3.0.1"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can ignore the &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox/releases/tag/v3.0.0"&gt;v3.0.0&lt;/a&gt; release. The NuGet package incorrectly listed the minimum iOS version as 16.1 (e.g. net6.0-ios16.1) instead of 12.0 (e.g. net6.0-ios12).&lt;/p&gt;
&lt;p&gt;Let me know if you spot an issue or have an improvement by opening an &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox/issues"&gt;issue&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Saturday MP Show #14: Rate Limiting with NGINX and Fail2Ban</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-14-rate-limiting-with-nginx-and-fail2ban/</link><pubDate>Wed, 11 Oct 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-14-rate-limiting-with-nginx-and-fail2ban/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/gR4w9trH9pA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;A rate limiting demonstration using &lt;a href="https://www.nginx.com/"&gt;NGINX&lt;/a&gt; and &lt;a href="https://github.com/fail2ban/fail2ban"&gt;Fail2Ban&lt;/a&gt; based on a presentation that I gave at &lt;a href="https://www.bsidesedmonton.ca/"&gt;BSides Edmonton&lt;/a&gt; in 2022. Follow along with the GitHub repo &lt;a href="https://github.com/saturdaymp-examples/rate-limiting-with-nginx-fail2ban"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Be sure to admire the seamless editing due to a power outage issue towards the end of the video.&lt;/p&gt;
&lt;p&gt;Thank you to BSides Edmonton for allowing me to present last year. I also had a great time as an attendee at the 2023 conference.&lt;/p&gt;</description></item><item><title>Saturday MP Show #13: Merge Conflict when trying to create a PR for the Standard Ruby Linter Bug</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-13-merge-conflict-when-trying-to-create-a-pr-for-the-standard-ruby-linter-bug/</link><pubDate>Fri, 22 Sep 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-13-merge-conflict-when-trying-to-create-a-pr-for-the-standard-ruby-linter-bug/</guid><description>&lt;p&gt;I attempted to create a pull request (PR) for the Standard Ruby Linter bug I&amp;rsquo;ve fixed but ran into a merge conflict. Didn&amp;rsquo;t create the PR but did figure out the solution to the merge conflict that will be fixed in the next video.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/3EPNI5ge90g?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Read about the bug I&amp;rsquo;m trying to fix &lt;a href="https://github.com/standardrb/standard/issues/565"&gt;here&lt;/a&gt;. Other videos fixing the Standard Ruby Linter Todo Bug:&lt;/p&gt;</description></item><item><title>See you at BSides Edmonton 2023</title><link>https://nftb.saturdaymp.workers.dev/see-you-at-bsides-edmonton-2023/</link><pubDate>Fri, 22 Sep 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/see-you-at-bsides-edmonton-2023/</guid><description>&lt;p&gt;&lt;a href="https://www.bsidesedmonton.ca/"&gt;&lt;img src="images/image-1-300x197.webp" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I am excited to announce that I&amp;rsquo;ll be attending &lt;a href="https://www.bsidesedmonton.ca/"&gt;BSides Edmonton&lt;/a&gt; this year! I&amp;rsquo;m looking forward to increasing my cyber security knowledge from the &lt;a href="https://www.bsidesedmonton.ca/2023-schedule"&gt;talks&lt;/a&gt;, &lt;a href="https://www.bsidesedmonton.ca/ctf"&gt;CTF&lt;/a&gt;, and fellow attendees.&lt;/p&gt;
&lt;p&gt;Specially I&amp;rsquo;m looking to learn the latest best practices for protecting my &lt;a href="https://saturdaymp.com/"&gt;clients&lt;/a&gt; websites and their underlying servers. Is this something you can help me with? If so let me &lt;a href="info@saturdaymp.com"&gt;know&lt;/a&gt; and we can chat either at the conference or some other time.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m also happy to chat about software development, DevOps, &lt;a href="https://legacycode.rocks/"&gt;legacy code&lt;/a&gt;, board games, Warhammer 40K lore, amount other things. I&amp;rsquo;m also happy to pair on some CTF problems.&lt;/p&gt;</description></item><item><title>Saturday MP Show #12: Refactoring of a System Test While Fixing the Standard Ruby Linter ToDo Bug</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-12-refactoring-of-a-system-test-while-fixing-the-standard-ruby-linter-todo-bug/</link><pubDate>Fri, 15 Sep 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-12-refactoring-of-a-system-test-while-fixing-the-standard-ruby-linter-todo-bug/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/m-twGm7KMbI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Getting to the end of fixing the &lt;a href="https://github.com/standardrb/standard"&gt;Standard Ruby Linter&lt;/a&gt; ToDo bug. In this video I refactor and remove duplicate code from a system tests that are similar. It goes well for the most part. The only hiccup is the trying to figure a way to run setup code once for all the tests in the file.&lt;/p&gt;</description></item><item><title>SaturdayMP Show #11: Refactoring System Tests for the Standard Ruby Linter Todo Bug</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-show-11-refactoring-system-tests-for-the-standard-ruby-linter-todo-bug/</link><pubDate>Mon, 21 Aug 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-show-11-refactoring-system-tests-for-the-standard-ruby-linter-todo-bug/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ObcBwXaFux0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;The system test is finally working!! I go over, again, why it&amp;rsquo;s important to make sure your tests fail. Now that the test is working I start refactoring it to remove duplicate code.&lt;/p&gt;
&lt;p&gt;Spent longer then I would have thought trying to get a before setup method to work in &lt;a href="https://github.com/minitest/minitest"&gt;MiniTest&lt;/a&gt;. During my investigation I think I got the &lt;a href="https://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt; &lt;a href="https://blog.jetbrains.com/idea/2023/06/ai-assistant-in-jetbrains-ides/"&gt;AI&lt;/a&gt; to suggest a fix for a MiniTest &lt;a href="https://github.com/minitest/minitest/pull/85"&gt;PR&lt;/a&gt; that was rejected which was interesting to see.&lt;/p&gt;</description></item><item><title>Saturday MP Show #10: Finally get the System Test Working for the Standard Ruby Linter ToDo Bug</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-10-finally-get-a-system-tests-working-for-the-standard-ruby-linter-todo-bug/</link><pubDate>Thu, 17 Aug 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-10-finally-get-a-system-tests-working-for-the-standard-ruby-linter-todo-bug/</guid><description>&lt;p&gt;I get my system test working at the start of video but the problem is it works so well that it still passes even after I re-introduce the bug when it should have failed. Crap! That means my test is not working correctly.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/DWhabjiqc4o?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;I spend the rest of the video trying to figure out why the test is not failing when it should and get very frustrated. So frustrated this became my longest video yet at over two hours! End up digging into the &lt;a href="https://rubocop.org/"&gt;RuboCop&lt;/a&gt; code to try and figure out what is going on. I do figure out the problem at the end of the video in a ah-ha moment. Spoiler: the problem was I didn&amp;rsquo;t link to the &lt;a href="https://github.com/standardrb/standard"&gt;Standard&lt;/a&gt; config file correctly.&lt;/p&gt;</description></item><item><title>XPlugins.iOS.BEMCheckBox v2.0.0 Released!</title><link>https://nftb.saturdaymp.workers.dev/xplugins-ios-bemcheckbox-v2-0-0-released/</link><pubDate>Thu, 17 Aug 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/xplugins-ios-bemcheckbox-v2-0-0-released/</guid><description>&lt;p&gt;I&amp;rsquo;m happy to announce that &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox"&gt;XPlugins.iOS.BEMCheckBox&lt;/a&gt; v2.0.0 has been released! This a wrapper for the &lt;a href="https://github.com/saturdaymp/BEMCheckBox"&gt;BEMCheckBox&lt;/a&gt; which lets you create highly customizable, animated checkboxes for iOS. You can find the v2.0.0 NuGet package &lt;a href="https://www.nuget.org/packages/SaturdayMP.XPlugins.iOS.BEMCheckBox/2.0.0#readme-body-tab"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2023/08/BEMCheckBox.gif"&gt;&lt;img src="images/BEMCheckBox.gif" alt="BEMCheckBox Example Gif"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This release includes all the fixes to the underlying BEMCheckBox from &lt;a href="https://github.com/saturdaymp/BEMCheckBox/releases/tag/1.4.1"&gt;v1.4.1&lt;/a&gt; to &lt;a href="https://github.com/saturdaymp/BEMCheckBox/releases/tag/v2.0.0"&gt;v2.0.0&lt;/a&gt;. This includes the following breaking changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Minimum iOS version was increased from 8.4 to 12.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Events renamed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;DidTapCheckBox&lt;/code&gt; renamed to &lt;code&gt;DidTap&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;AnimationDidStopForCheckBox&lt;/code&gt; to &lt;code&gt;AnimationDidStopFor&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Saturday MP Show #9: Add 1.9 (e.g. almost 2) System Tests for the Standard Ruby Linter ToDo Bug</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-9-add-1-9-e-g-almost-2-system-tests-for-the-standard-ruby-linter-todo-bug/</link><pubDate>Wed, 09 Aug 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-9-add-1-9-e-g-almost-2-system-tests-for-the-standard-ruby-linter-todo-bug/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/ZaALe-2iZa0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;I get one system test working for generating the todo file and almost get the second test working. The second test that actually tests the bug we fixed. Went down a bit of rabbit hole trying to get the optimal Ruby file/directory manipulation code.&lt;/p&gt;
&lt;p&gt;I also spent some time trying out &lt;a href="https://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt; new coding &lt;a href="https://blog.jetbrains.com/idea/2023/06/ai-assistant-in-jetbrains-ides/"&gt;AI&lt;/a&gt;. It has some issues but also lots of promise.&lt;/p&gt;</description></item><item><title>BEMCheckBox v2.0.0 Released!</title><link>https://nftb.saturdaymp.workers.dev/bemcheckbox-v2-0-0-released/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/bemcheckbox-v2-0-0-released/</guid><description>&lt;p&gt;I&amp;rsquo;m happy to announce that BEMCheckBox &lt;a href="https://github.com/saturdaymp/BEMCheckBox/releases/tag/v2.0.0"&gt;v2.0.0&lt;/a&gt; has been released! It is a open source library making it easy to create beautiful, highly customizable, animated checkboxes for iOS. You can find the install instructions &lt;a href="https://github.com/saturdaymp/BEMCheckBox#getting-started"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2023/08/BEMCheckBox.gif"&gt;&lt;img src="images/BEMCheckBox.gif" alt="BEMCheckBox Example Gif"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This a forked release as it does not appear the original &lt;a href="https://github.com/Boris-Em/BEMCheckBox"&gt;project&lt;/a&gt; by &lt;a href="https://github.com/Boris-Em"&gt;Boris-EM&lt;/a&gt; is supported. If Boris-EM, or anyone else with access to original repo, is reading this I&amp;rsquo;m happy to merge my changes back. It should be noted that don&amp;rsquo;t have great track record of supporting my open source &lt;a href="https://github.com/saturdaymp"&gt;projects&lt;/a&gt; but I&amp;rsquo;m hoping to improve my stats.&lt;/p&gt;</description></item><item><title>Saturday MP Show #8: Another Failure at Adding System Test for the Standard Ruby Linter ToDo Bug Fix</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-8-another-failure-at-adding-system-test-for-the-standard-ruby-linter-todo-bug-fix/</link><pubDate>Wed, 02 Aug 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-8-another-failure-at-adding-system-test-for-the-standard-ruby-linter-todo-bug-fix/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/GgScoD_VgDM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Similar to the previous episode I fail at adding a system test. Should I be live coding all these failures? I think so. Maybe? Do they make boring videos? Probably. Should I say &amp;ldquo;ummm&amp;rdquo; less? Most definitely.&lt;/p&gt;
&lt;p&gt;I think there are enough highly edited videos of success already it&amp;rsquo;s good to see some failures. To remind everyone that success takes work and often wrong paths. At least that sounds better then I don&amp;rsquo;t enjoy video editing so I just post what I record with minimal changes/edits.&lt;/p&gt;</description></item><item><title>Happy System Administrator Appreciation Day!</title><link>https://nftb.saturdaymp.workers.dev/happy-system-administrator-appreciation-day/</link><pubDate>Fri, 28 Jul 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/happy-system-administrator-appreciation-day/</guid><description>&lt;p&gt;Today, July 28th, 2023, is &lt;a href="https://sysadminday.com/"&gt;System Administrator Appreciation Day&lt;/a&gt;. A day I didn&amp;rsquo;t know existed until now but has been around since &lt;a href="https://en.wikipedia.org/wiki/System_Administrator_Appreciation_Day"&gt;2000&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It was during one of my first paid technical positions that I realized that sys admins, and other support staff including non-technical, can be a thankless job. A job where your only interactions with others is when something goes wrong.&lt;/p&gt;
&lt;p&gt;During university I had a summer job as a Systems Analyst Trainee at &lt;a href="https://en.wikipedia.org/wiki/Telus"&gt;TELUS&lt;/a&gt; Advertising Services (TAS). TAS was division of TELUS that created the &lt;a href="https://en.wikipedia.org/wiki/Telephone_directory"&gt;phone books&lt;/a&gt;, both white (residential) and &lt;a href="https://en.wikipedia.org/wiki/Yellow_pages"&gt;yellow&lt;/a&gt; (businesses) pages. I did typical IT tasks at the time such as setting up new computers with token ring network cards and helping staff issues such as accessing email. Also lots of printer issues.&lt;/p&gt;</description></item><item><title>Saturday MP Show #7: Trying to Add a System Test for the Standard Ruby Linter ToDo Bug Fix</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-7-trying-to-add-a-system-test-for-the-standard-ruby-linter-todo-bug-fix/</link><pubDate>Wed, 26 Jul 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-7-trying-to-add-a-system-test-for-the-standard-ruby-linter-todo-bug-fix/</guid><description>&lt;p&gt;I, Chris, try to add a system test for the todo bug fix in &lt;a href="https://youtu.be/xaoD2r6tCc0"&gt;episode 5&lt;/a&gt; but run into some issues. I find out I stupidly &lt;a href="https://github.com/standardrb/standard/blob/1214481276c5e5dd4ce4e84b10042476bd82bd8f/lib/standard/runners/genignore.rb#L30"&gt;hard coded&lt;/a&gt; the todo file name when he first &lt;a href="https://github.com/standardrb/standard/pull/155"&gt;added&lt;/a&gt; the ability to generate a todo file in Standard. When recording this video I think that is why his system test doesn&amp;rsquo;t work but upon re-watching this video I have my doubts. Only time will tell if my doubts are correct or not.&lt;/p&gt;</description></item><item><title>NConstraints v1.1.1 Released Now Targets .NET Standard 2.0</title><link>https://nftb.saturdaymp.workers.dev/nconstraints-v1-1-1-released-now-targets-net-standard-2-0/</link><pubDate>Wed, 19 Jul 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/nconstraints-v1-1-1-released-now-targets-net-standard-2-0/</guid><description>&lt;p&gt;I&amp;rsquo;m happy to announce that &lt;a href="https://github.com/saturdaymp/NConstraints"&gt;NConstraints&lt;/a&gt; &lt;a href="https://github.com/saturdaymp/NConstraints/releases/tag/v1.1.1"&gt;v1.1.1&lt;/a&gt; has been released! This release updates the NuGet package from &lt;a href="https://dotnet.microsoft.com/en-us/platform/dotnet-standard#versions"&gt;.NET Standard 1.6 to 2.0&lt;/a&gt; and should work with all versions of &lt;a href="https://nunit.org/"&gt;NUnit&lt;/a&gt; 3.&lt;/p&gt;
&lt;p&gt;You can install &lt;a href="https://github.com/saturdaymp/NConstraints"&gt;NConstraints&lt;/a&gt; via the dotnet command line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dotnet&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;SaturdayMP&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;NConstraints&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Other install options can be found &lt;a href="https://www.nuget.org/packages/SaturdayMP.NConstraints/1.1.1"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;NConstraints currently only has one constraint called &lt;code&gt;EquivalentPropertyWiseTo&lt;/code&gt;. It checks if all the property values on two objects are the same. Instead of writting:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[Test]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;TestObjectsTheSame&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ExpectedClass&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;ValueOne&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ValueTwo&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Blah&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ValueThree&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;33&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;actual&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MethodBeingTested&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueOne&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EqualTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueOne&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueTwo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EqualTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueTwo&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueThree&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EqualTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueThree&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can write:&lt;/p&gt;</description></item><item><title>Saturday MP Show #6: Adding Unit Tests for the Standard Ruby Linter ToDo Bug Fix</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-6-adding-unit-tests-for-the-standard-ruby-linter-todo-bug-fix/</link><pubDate>Tue, 18 Jul 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-6-adding-unit-tests-for-the-standard-ruby-linter-todo-bug-fix/</guid><description>&lt;p&gt;I add a unit test for the &lt;a href="https://github.com/standardrb/standard"&gt;Standard Ruby&lt;/a&gt; linter bug fix done in the last episode. When adding the unit test I find out someone has improved the todo generation logic. Thank you. I also find a remove a redundant test.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Il48t9afdwI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Read about the bug being fixed &lt;a href="https://github.com/standardrb/standard/issues/565"&gt;here.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Saturday MP Show #5: Fixing the Standard (Ruby Linter) Existing ToDo List Bug</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-5-fixing-the-standard-ruby-linter-existing-todo-list-bug/</link><pubDate>Thu, 13 Jul 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-5-fixing-the-standard-ruby-linter-existing-todo-list-bug/</guid><description>&lt;p&gt;In this episode I implement a fix for the todo file generation bug in the Standard (Ruby linter) and do some manual testing. Also use &lt;a href="https://openai.com/chatgpt"&gt;ChatGPT&lt;/a&gt; to explain some code that &lt;a href="https://github.com/features/copilot"&gt;GitHub Copilot&lt;/a&gt; generated.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/xaoD2r6tCc0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Read about the bug being fixed &lt;a href="https://github.com/standardrb/standard/issues/565"&gt;here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See the previous episode, &lt;a href="https://youtu.be/IbNpsEMtqLc"&gt;number 4&lt;/a&gt;, where I create I duplicate the issue and come up with the fix possible fix.&lt;/p&gt;</description></item><item><title>Saturday MP Show #4: Duplicating the Standard (Ruby Linter) Existing ToDo List Bug</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-4-duplicating-the-standard-ruby-linter-existing-todo-list-bug/</link><pubDate>Fri, 07 Jul 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-4-duplicating-the-standard-ruby-linter-existing-todo-list-bug/</guid><description>&lt;p&gt;I duplicate a todo file generation bug in the &lt;a href="https://github.com/standardrb/standard"&gt;Standard&lt;/a&gt; (&lt;a href="https://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; &lt;a href="https://en.wikipedia.org/wiki/Lint_(software)"&gt;linter&lt;/a&gt;) and come up with a possible fix but don&amp;rsquo;t actually get to the fix.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/IbNpsEMtqLc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Read about the bug &lt;a href="https://github.com/standardrb/standard/issues/565"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See episode #1 where I create a &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt; development environment for Standard:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/nIlgI5yoB5k?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;As a bonus at the beginning of the video I upgrade &lt;a href="https://www.jetbrains.com/ruby/"&gt;RubyMine&lt;/a&gt; to fix the bug we encountered in episode 2:&lt;/p&gt;</description></item><item><title>Saturday MP Show #3: Filling out the JetBrains Developer Ecosystem Survey 2023</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-3-filling-out-the-jetbrains-developer-ecosystem-survey-2023/</link><pubDate>Sun, 02 Jul 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-3-filling-out-the-jetbrains-developer-ecosystem-survey-2023/</guid><description>&lt;p&gt;I, Chris, spend a lot longer then I anticipated filling out the &lt;a href="https://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt; Developer Ecosystem &lt;a href="https://blog.jetbrains.com/blog/2023/06/08/take-part-in-the-developer-ecosystem-survey-2023"&gt;Survey&lt;/a&gt; 2023. Thought it would be a quick half-hour but turned into 2 hours. Sorry in advance for the long video.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/io5HwCsFclQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;If you use the link below to take the survey I might win a prize:&lt;/p&gt;</description></item><item><title>Saturday MP Show 2: Struggling to get the RubyMine Debugger Working</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-2-struggling-to-get-the-rubymine-debugger-working/</link><pubDate>Sat, 24 Jun 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-2-struggling-to-get-the-rubymine-debugger-working/</guid><description>&lt;p&gt;Chris fights to get the debugger working in &lt;a href="https://www.jetbrains.com/ruby/"&gt;RubyMine&lt;/a&gt; and does not make any progress on &lt;a href="https://github.com/standardrb/standard"&gt;Standard&lt;/a&gt;. It was frustrating but overall Chris enjoys working with RubyMine so thank you &lt;a href="https://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt; for creating it.&lt;/p&gt;
&lt;p&gt;If you have any questions you would like answered in a future show or have constructive feedback please DM me or send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/WiQFsJ0La9M?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;</description></item><item><title>Saturday MP Show #1: Creating a Docker Development Environment for Standard (Ruby Linter)</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-show-1-creating-a-docker-development-environment-for-standard-ruby-linter/</link><pubDate>Wed, 21 Jun 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-show-1-creating-a-docker-development-environment-for-standard-ruby-linter/</guid><description>&lt;p&gt;&lt;a href="http://www.linkedin.com/in/chris-cumming"&gt;Chris&lt;/a&gt; creates a &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt; environment for &lt;a href="https://github.com/standardrb/standard"&gt;Standard&lt;/a&gt; which is a Ruby &lt;a href="https://en.wikipedia.org/wiki/Lint_(software)"&gt;linter&lt;/a&gt;. Thank you to &lt;a href="https://testdouble.com/"&gt;Test Double&lt;/a&gt; for creating Standard.&lt;/p&gt;
&lt;p&gt;If you have any questions you would like answered or constructive feedback please send an email to &lt;a href="mailto:ask@saturdaymp.com"&gt;ask@saturdaymp.com&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/nIlgI5yoB5k?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;You can find my fork of the Standard repo &lt;a href="https://github.com/mrbiggred/standard"&gt;here&lt;/a&gt;. Ideally all the files in the video would be in the repo but since we ignored the Docker files at a local level, they are listed below.&lt;/p&gt;</description></item><item><title>Today I Learned about Gobuster</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-about-gobuster/</link><pubDate>Wed, 12 Apr 2023 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-about-gobuster/</guid><description>&lt;p&gt;I&amp;rsquo;ve made it a goal for 2023 to increase my security knowledge. This was based on increase in security related questions from clients. Specifically related to website security as most of my current work is maintaining websites for clients.&lt;/p&gt;
&lt;p&gt;One thing I was not expecting was the amount security tools that are available. To help me remember I figured I should write them down and what better place then the dusty old blog.&lt;/p&gt;</description></item><item><title>Rate Limiting Using Nginx and Fail2Ban - BSides Edmonton 2022</title><link>https://nftb.saturdaymp.workers.dev/rate-limiting-using-nginx-and-fail2ban-bsides-edmonton-2022/</link><pubDate>Fri, 25 Nov 2022 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/rate-limiting-using-nginx-and-fail2ban-bsides-edmonton-2022/</guid><description>&lt;p&gt;I&amp;rsquo;m honored to be presenting at &lt;a href="https://www.bsidesedmonton.ca/"&gt;BSides Edmonton&lt;/a&gt; on November 25, 2022. I&amp;rsquo;ll be demoing rate limiting using &lt;a href="https://nginx.org/en/"&gt;nginx&lt;/a&gt; and &lt;a href="https://www.fail2ban.org/"&gt;Fail2Ban&lt;/a&gt;. You can find the demo &lt;a href="https://github.com/saturdaymp-examples/rate-limiting-with-nginx-fail2ban"&gt;here&lt;/a&gt; in-case you want to follow along during the demo or you want a preview/spoiler.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.bsidesedmonton.ca/"&gt;&lt;img src="images/image.webp" alt="BSides Edmonton 2022 Logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While I’m honored to be presenting, my hope is to learn more than I impart. I’m looking forward to chatting and learning from you, my fellow BSides Edmonton 2022 speakers and attendees. I enjoy discussing securing small to medium sized business, legacy code, software development best practices, games, or anything remotely technology or software related.&lt;a href="https://github.com/saturdaymp-examples/rate-limiting-with-nginx-fail2ban"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Back and Forth #7: Secure React Page</title><link>https://nftb.saturdaymp.workers.dev/back-and-forth-7-secure-react-page/</link><pubDate>Fri, 17 Sep 2021 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/back-and-forth-7-secure-react-page/</guid><description>&lt;p&gt;&lt;a href="https://twitter.com/waisideas"&gt;Birm&lt;/a&gt; shows &lt;a href="https://saturdaymp.com/"&gt;Chris&lt;/a&gt; how to secure a &lt;a href="https://www.reactiveui.net/"&gt;React&lt;/a&gt; page so only authorized users can view it. Have a question or a topic you would like us to talk about then give a us a shout.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/yT6RlyAO3_k?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;</description></item><item><title>Back and Forth #6: Add Google Authentication to React App Using Firebase</title><link>https://nftb.saturdaymp.workers.dev/back-and-forth-5-add-google-authentication-to-react-app-using-firebase/</link><pubDate>Fri, 13 Aug 2021 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/back-and-forth-5-add-google-authentication-to-react-app-using-firebase/</guid><description>&lt;p&gt;&lt;a href="https://twitter.com/waisideas"&gt;Birm&lt;/a&gt; shows &lt;a href="https://saturdaymp.com/"&gt;Chris&lt;/a&gt; add how to add Google Authentication to a &lt;a href="https://www.reactiveui.net/"&gt;React&lt;/a&gt; App using &lt;a href="http://firebase.com"&gt;Firebase&lt;/a&gt;. Have a question or a topic you would like us to talk about then give a us a shout.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/61tz8UWSxZ4?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;</description></item><item><title>Back and Forth #5: Add a Button to a React App</title><link>https://nftb.saturdaymp.workers.dev/back-and-forth-5-add-a-button-to-a-react-app/</link><pubDate>Sat, 31 Jul 2021 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/back-and-forth-5-add-a-button-to-a-react-app/</guid><description>&lt;p&gt;&lt;a href="https://twitter.com/waisideas"&gt;Birm&lt;/a&gt; and &lt;a href="https://saturdaymp.com/"&gt;Chris&lt;/a&gt; add a button to a &lt;a href="https://www.reactiveui.net/"&gt;React&lt;/a&gt; application. Have a question or a topic you would like us to talk about then give a us a shout.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/uM18HiFRwbY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;</description></item><item><title>Back and Forth #4: Hosting a React App on Firebase</title><link>https://nftb.saturdaymp.workers.dev/back-and-forth-4-hosting-a-react-app-on-firebase/</link><pubDate>Wed, 07 Jul 2021 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/back-and-forth-4-hosting-a-react-app-on-firebase/</guid><description>&lt;p&gt;&lt;a href="https://twitter.com/waisideas"&gt;Birm&lt;/a&gt; shows &lt;a href="https://saturdaymp.com/"&gt;Chris&lt;/a&gt; how to host a &lt;a href="https://www.reactiveui.net/"&gt;React&lt;/a&gt; App as a static website on &lt;a href="https://firebase.google.com/"&gt;Firebase&lt;/a&gt;. Have a question or a topic you would like us to talk about then give a us a shout.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/xaC8qmDScds?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;</description></item><item><title>Back and Forth #3: Docker Image for Node React Application</title><link>https://nftb.saturdaymp.workers.dev/back-and-forth-3-docker-image-for-node-react-application/</link><pubDate>Thu, 01 Jul 2021 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/back-and-forth-3-docker-image-for-node-react-application/</guid><description>&lt;p&gt;&lt;a href="https://twitter.com/waisideas"&gt;&lt;/a&gt;&lt;a href="https://saturdaymp.com/"&gt;Chris&lt;/a&gt; and &lt;a href="https://twitter.com/waisideas"&gt;Birm&lt;/a&gt; create a Docker image for a Node React application. Have a question or a topic you would like us to talk about then give a us a shout.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/qA-2xCkheRM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;</description></item><item><title>Back and Forth #1: Fix a React Bug</title><link>https://nftb.saturdaymp.workers.dev/back-and-forth-1-fix-a-react-bug/</link><pubDate>Fri, 25 Jun 2021 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/back-and-forth-1-fix-a-react-bug/</guid><description>&lt;p&gt;&lt;a href="https://saturdaymp.com/"&gt;Chris&lt;/a&gt; and &lt;a href="https://twitter.com/waisideas"&gt;Birm&lt;/a&gt; fix a bug in a &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; website. Have a question or a topic you would like us to talk about then give a us a &lt;a href="https://nftb.saturdaymp.com/wp-admin/backandforth@saturdaymp.com"&gt;shout&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/zPDEsSGgzv8?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;</description></item><item><title>Back and Forth #2: Vimium</title><link>https://nftb.saturdaymp.workers.dev/back-and-forth-2-vimium/</link><pubDate>Fri, 25 Jun 2021 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/back-and-forth-2-vimium/</guid><description>&lt;p&gt;&lt;a href="https://twitter.com/waisideas"&gt;Brim&lt;/a&gt; shows &lt;a href="https://saturdaymp.com/"&gt;Chris&lt;/a&gt; how he uses Vim key bindings to navigate the web. Have a question or a topic you would like us to talk about then give a us a &lt;a href="https://nftb.saturdaymp.com/wp-admin/backandforth@saturdaymp.com"&gt;shout&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/hFBfCwhAU98?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;</description></item><item><title>SMALL BUSINESS AND THE THREE CONTRACTORS</title><link>https://nftb.saturdaymp.workers.dev/small-business-and-the-three-contractors/</link><pubDate>Fri, 08 Jan 2021 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/small-business-and-the-three-contractors/</guid><description>&lt;p&gt;Check out this &lt;a href="https://corgibytes.com/blog/2021/01/05/small-biz-3-contractors/"&gt;post&lt;/a&gt; I wrote for &lt;a href="https://corgibytes.com/"&gt;Corgibytes&lt;/a&gt; about balancing maintenance work with new features when modernizing software. Special thanks go out to my fellow &lt;a href="https://corgibytes.com/about/"&gt;Corgis&lt;/a&gt; for their constructive feedback. They convinced me keep the overall idea but re-write my first draft. Plus they fixed my spelling and grammar errors that regular readers of this site are used too.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://corgibytes.com/blog/2021/01/05/small-biz-3-contractors/"&gt;&lt;img src="images/goldilocks_blog_image.webp" alt="Goldilocks and the three bears"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>A Ruby-Type Talk featuring Sorbet</title><link>https://nftb.saturdaymp.workers.dev/a-ruby-type-talk-featuring-sorbet/</link><pubDate>Sat, 10 Oct 2020 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/a-ruby-type-talk-featuring-sorbet/</guid><description>&lt;p&gt;Last Saturday at the Edmonton Ruby Meetup (&lt;a href="https://yegrb.com/"&gt;YEGRB&lt;/a&gt;) I discussed type checking, &lt;a href="https://sorbet.org/"&gt;Sorbet&lt;/a&gt;, and integrating Sorbet into an existing Rails application.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/zGScQMTBlik?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;Feedback and questions are most welcome. Thanks you to YEGRB for hosting and for everyone that participated in the live stream.&lt;/p&gt;</description></item><item><title>Today I Learned how to Secure the Delayed Job Page with Spree Users</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-secure-the-delayed-job-page-with-spree-users/</link><pubDate>Fri, 04 Sep 2020 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-secure-the-delayed-job-page-with-spree-users/</guid><description>&lt;p&gt;A client has an online store that is powered by an older version of &lt;a href="https://github.com/spree/spree"&gt;Spree&lt;/a&gt;. I&amp;rsquo;m in the process of upgrading it and adding features to it at the same time. It&amp;rsquo;s a slow process as upgrading to newer versions of Spree, which also requires upgrading Ruby and Rails, is no easy task.&lt;/p&gt;
&lt;p&gt;One customization the customer has is a &lt;a href="https://github.com/collectiveidea/delayed_job"&gt;delayed job&lt;/a&gt; that fires when a order is complete. The delayed job preforms some tasks that can take a while hence why they are done in a separate process after the order is completed.&lt;/p&gt;</description></item><item><title>My Takeaway from Reading David and Goliath</title><link>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-david-and-goliath/</link><pubDate>Fri, 07 Aug 2020 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-david-and-goliath/</guid><description>&lt;p&gt;&lt;img src="images/9780316204361.webp" alt="David and Goliath"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Book:&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/David_and_Goliath_(book)"&gt;David and Goliath&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://www.gladwellbooks.com/"&gt;Malcolm Gladwell&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The subtitle for the book is &amp;ldquo;Underdogs, Misfits, and the Art of Battling Giants&amp;rdquo; and as you would expect it has many examples of an underdog beating a giant. Often the underdogs have to use unconventional approaches as facing the giant head one would result in their defeat.&lt;/p&gt;
&lt;p&gt;An item that almost became my takeaway is that sometimes the underdog is not really the underdog. Instead sometimes the underdog is more powerful then they appear. A good example of this is the title story of David and Goliath as examined by Gladwell. He argues that David was armed with a superior weapon, the sling. The sling with it&amp;rsquo;s much longer range and stopping power then the sword wielded by Goliath. Basically David brought a gun to a knife fight and unsurprisingly won.&lt;/p&gt;</description></item><item><title>Generate a Todo List in Standard (Rubocop)</title><link>https://nftb.saturdaymp.workers.dev/generate-a-todo-list-in-standard-rubocop/</link><pubDate>Mon, 11 May 2020 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/generate-a-todo-list-in-standard-rubocop/</guid><description>&lt;p&gt;The older I get the more I appreciate code &lt;a href="https://en.wikipedia.org/wiki/Lint_(software)"&gt;linters&lt;/a&gt;. Something that can detect and often correct my formatting errors? Great! One less thing I have to worry about. Then I can spend my time on more important tasks such fixing the bug, adding a new feature, or &lt;a href="https://civilization.com/"&gt;uniting/conquering&lt;/a&gt; the world.&lt;/p&gt;
&lt;p&gt;The default linter for Ruby is &lt;a href="https://github.com/rubocop-hq/rubocop"&gt;Rubocop&lt;/a&gt;. It works great but I find it&amp;rsquo;s default rules to restrictive. You can change the defaults but that is time consuming and confusing. At least confusing to me. While searching for a Rubocop config that I liked I came across &lt;a href="https://github.com/testdouble/standard"&gt;Standard&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>A Pleasant Development Environment featuring Docker and Rails</title><link>https://nftb.saturdaymp.workers.dev/a-pleasant-development-environment-featuring-docker-and-rails/</link><pubDate>Fri, 03 Apr 2020 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/a-pleasant-development-environment-featuring-docker-and-rails/</guid><description>&lt;p&gt;With the current virus issues I forgot to publicize that my presentation about creating pleasant development environments was &lt;a href="https://www.youtube.com/watch?v=vpeJMJxkwbE"&gt;posted&lt;/a&gt; along with an &lt;a href="https://www.youtube.com/watch?v=nZkXQjFUIgs"&gt;example&lt;/a&gt; of Dockerizing an existing Rails application. You can find the slides for the talk &lt;a href="https://github.com/saturdaymp-examples/a-pleasant-development-enironment-featuring-docker-and-rails"&gt;here&lt;/a&gt;. Finally you can find a ready to use existing Rails template that uses Docker &lt;a href="https://github.com/saturdaymp-examples/rails-template"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="images/image-1024x576.webp" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href="https://yegrb.com/"&gt;YEGRB&lt;/a&gt; for allowing me to present and to Will for his awesome editing skills. Also thank you to &lt;a href="https://corgibytes.com/"&gt;Corgibytes&lt;/a&gt; for feedback on draft presentation.&lt;/p&gt;</description></item><item><title>A Rails 6 Template and Then Some</title><link>https://nftb.saturdaymp.workers.dev/a-rails-6-template-and-then-some/</link><pubDate>Fri, 24 Jan 2020 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/a-rails-6-template-and-then-some/</guid><description>&lt;p&gt;I appreciate people posting getting started examples and templates online. They are good for getting started and playing with a new technology. The problem is the templates are usually not production ready. They are also missing a bunch of the developer tools and best practices, such as linters and automated builds, that every project will eventually need.&lt;/p&gt;
&lt;p&gt;&lt;img src="images/image-1-1024x453.webp" alt="Screen shot of Rails Template GitHub page."&gt;&lt;/p&gt;
&lt;p&gt;So I created a Rails 6 &lt;a href="https://github.com/saturdaymp-examples/rails-template"&gt;template&lt;/a&gt; that includes many of the tools I want on a Rails project. I wanted the template to be easy to use but also contain all the tools I wanted. This includes a &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt; container, a &lt;a href="https://github.com/testdouble/standard"&gt;linter&lt;/a&gt;, a &lt;a href="https://sorbet.org/"&gt;type checker&lt;/a&gt;, and a build scripts. Actually the template has two build scripts, one for &lt;a href="https://github.com/features/actions"&gt;GitHub Actions&lt;/a&gt; and one for &lt;a href="https://gitlab.com/saturdaymp/rails-templates/pipelines"&gt;GitLab CI&lt;/a&gt;. The Docker script will build both development and production images.&lt;/p&gt;</description></item><item><title>Today I Learned Altering a SQL Column Removes it's Default Value</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-altering-a-sql-column-removes-its-default-value/</link><pubDate>Sun, 12 Jan 2020 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-altering-a-sql-column-removes-its-default-value/</guid><description>&lt;p&gt;This one I actually already knew but temporarily forgot about it so got to relearn it. In MySQL, and many other databases, updating the column with an ALTER statement will remove any properties not explicitly listed.&lt;/p&gt;
&lt;p&gt;For example, say you want to update an MySQL database to support &lt;a href="https://mathiasbynens.be/notes/mysql-utf8mb4"&gt;utf8mb4&lt;/a&gt;. This requires updating the existing string columns to utf8mb4 which my co-worker did in a script that looked like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="k"&gt;table&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CHANGE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="k"&gt;column_name&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;CHARACTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;utf8mb4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COLLATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;utf8mb4_unicode_ci&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I reviewed the pull request and didn&amp;rsquo;t catch the error even thought I been burnt by this alter column issue in the past. I guess my scar must have &lt;a href="https://www.youtube.com/watch?v=ar4yz9QHRG8"&gt;healed&lt;/a&gt;, or at least faded enough that I forgot about it.&lt;/p&gt;</description></item><item><title>My Takeaway from Reading Sometimes you Win, Sometimes you Learn</title><link>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-sometimes-you-win-sometimes-you-learn/</link><pubDate>Fri, 29 Nov 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-sometimes-you-win-sometimes-you-learn/</guid><description>&lt;p&gt;&lt;img src="images/sometimes_you_win_sometimes_you_learn_cover-201x300.webp" alt=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Book:&lt;/strong&gt; &lt;a href="https://store.johnmaxwell.com/Sometimes-You-Win-Sometimes-You-Learn-Hardcover_p_2785.html"&gt;Sometimes you Win, Sometimes you Lean&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://www.johnmaxwell.com/"&gt;John C. Maxwell&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My takeaway from this book had nothing to do with it&amp;rsquo;s premise: learning from your mistakes. Instead my takeaway had to do with writing. Specifically make sure your audience can relate to your example.&lt;/p&gt;
&lt;p&gt;One of the first examples of making mistake in the book is when the author accidentally brings a loaded gun to the airport. You can read all the details &lt;a href="https://www.johnmaxwell.com/blog/stupid-is-as-stupid-does/"&gt;here&lt;/a&gt; but in summary he was giving a handgun as a gift while on a trip. He flew home on a private plane where, after they landed, the pilot showed him how to load the gun (this part is only in the book). He put the gun in his briefcase and when he got home forgot about it. His next trip, on a public plane, he took the briefcase with the loaded gun to the airport. You can figure out what happened when he got to security.&lt;/p&gt;</description></item><item><title>Today I Learned About GitHub's Dependabot</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-about-githubs-dependabot/</link><pubDate>Mon, 24 Jun 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-about-githubs-dependabot/</guid><description>&lt;p&gt;Recently I created a &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-setup-azure-pipelines-ci/"&gt;CI build&lt;/a&gt; for the &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;Introduction to ORM for DBAs&lt;/a&gt; presentation example code. One of the reasons I picked this code base was so I could try out &lt;a href="https://dependabot.com/"&gt;Dependabot&lt;/a&gt; for the security alerts I&amp;rsquo;m getting.&lt;/p&gt;
&lt;p&gt;&lt;img src="images/image-1024x692.webp" alt="Security alert in GitHub."&gt;&lt;/p&gt;
&lt;p&gt;The security alert is for the ASP.NET Core NuGet package. The same issue is listed multiple times because the code is duplicated several times for the various steps in the example.&lt;/p&gt;</description></item><item><title>Notes on Fixing Ubuntu 18.04 VM not Booting</title><link>https://nftb.saturdaymp.workers.dev/notes-on-fixing-ubuntu-18-04-vm-not-booting/</link><pubDate>Tue, 18 Jun 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/notes-on-fixing-ubuntu-18-04-vm-not-booting/</guid><description>&lt;p&gt;Some notes so I remember how to fix this problem if it happens again and I don&amp;rsquo;t waste a bunch of time figuring it out right before a customer production release. Not a great start to my day.&lt;/p&gt;
&lt;p&gt;This issue happened to me many moons ago when I first upgraded to VirtualBox 6 and Ubuntu 18. This is the second time so I better write down what I did so I hopefully remember if it happens a third time.&lt;/p&gt;</description></item><item><title>Today I Learned How to Setup Azure Pipelines CI</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-setup-azure-pipelines-ci/</link><pubDate>Mon, 17 Jun 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-setup-azure-pipelines-ci/</guid><description>&lt;p&gt;Our last EDMUG &lt;a href="https://www.meetup.com/Edmonton-NET-User-Group/events/261026195/"&gt;meetup&lt;/a&gt; was an excellent presentation about &lt;a href="https://azure.microsoft.com/en-ca/services/devops/"&gt;Azure DevOps&lt;/a&gt;. Azure DevOps reminds me of GitLab where it is more then just continuous integration (CI). It includes issues tracking, repositories, and continuous delivery. All pretty standard stuff.&lt;/p&gt;
&lt;p&gt;However, one thing did jump out at me. The fact it had build built in &lt;a href="https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops"&gt;images&lt;/a&gt; you could use to run the build on. Build images with Visual Studio pre-installed. They also have &lt;a href="https://devblogs.microsoft.com/devops/hosted-pipelines-announcements-vs-2019-mojave-and-more/"&gt;macOS X Mojave&lt;/a&gt;! No need to create you own build runner, either VM or Docker, like you do with so many other CI tools.&lt;/p&gt;</description></item><item><title>Introduction to ORMs for DBAs: Part 8 - Create Game Players CRUD - Part 1</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-08-create-game-players-crud-part-1/</link><pubDate>Mon, 27 May 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-08-create-game-players-crud-part-1/</guid><description>&lt;p&gt;&lt;em&gt;I gave the &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;Introduction to ORMs for DBAs&lt;/a&gt; presentation at &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; but it didn’t go as well as I would have liked (i.e. I had trouble getting my demo working).  Since the demo didn’t work live I thought I would show you what was supposed to happen during the demo.  You can find the slides I showed before the demo &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs/blob/master/Slides/Introduction%20to%20Object-Relational%20Mapping%20for%20DBAs.pdf"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The goal of this demo is create a basic website that tracks the games you and your friends play and display wins and losses on the home page.  I used a MacBook Pro for my presentation so you will see Mac screen shots.  That said the demo will also work on Windows.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>My Takeaway from Reading When</title><link>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-when/</link><pubDate>Mon, 13 May 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-when/</guid><description>&lt;p&gt;&lt;img src="images/4164RkY1yFL._SX329_BO1,204,203,200_.webp" alt="When: The scientific Secrets of Perfect Timing"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Book:&lt;/strong&gt; &lt;a href="https://www.danpink.com/books/when/"&gt;When: The Scientific Secrets of Perfect Timing&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://www.danpink.com/"&gt;Daniel H. Pink&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Any book that promotes napping is a win for me. These days it&amp;rsquo;s easy for me to catch a couple ZZZs as I work from home. When I was an employee or working at a clients site I would sometimes have an &amp;ldquo;errand&amp;rdquo; to run in the afternoon. An &amp;ldquo;errand&amp;rdquo; that involved driving to secluded place, tilting the seat back, and inspecting the inside of my eyelids for 20 minutes.&lt;/p&gt;</description></item><item><title>Thank you for Attending my SQL Saturday 840 Presentation - Create a Time Travelling Database</title><link>https://nftb.saturdaymp.workers.dev/thank-you-for-attending-my-sql-saturday-840-presentation-create-a-time-travelling-database/</link><pubDate>Tue, 30 Apr 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/thank-you-for-attending-my-sql-saturday-840-presentation-create-a-time-travelling-database/</guid><description>&lt;p&gt;Thank you to everyone who attended my &lt;a href="https://www.sqlsaturday.com/840/eventhome.aspx"&gt;SQL Saturday 840&lt;/a&gt; &amp;ldquo;&lt;a href="https://www.sqlsaturday.com/840/Sessions/Details.aspx?sid=90086"&gt;Create a Time Travelling Database&lt;/a&gt;&amp;rdquo; presentation. I enjoyed your questions and the discussion after the presentation.&lt;/p&gt;
&lt;p&gt;If you have any further questions feel free to reach out to me at &lt;a href="mailto:chris.cumming@saturdaymp.com"&gt;chris.cumming@saturdaymp.com&lt;/a&gt; or &lt;a href="https://twitter.com/saturdaymp"&gt;@saturdaymp&lt;/a&gt;. I can also be found on the &lt;a href="https://devedmonton.com/"&gt;DevEdmonton&lt;/a&gt; and &lt;a href="https://www.legacycode.rocks/"&gt;Legacy Code Rocks&lt;/a&gt; Slack channels.&lt;/p&gt;
&lt;p&gt;&lt;img src="images/Multiple-Timelines.webp" alt="Multiple Timelines"&gt;&lt;/p&gt;
&lt;p&gt;More resources about temporal databases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Slides, outline, and examples from the &lt;a href="https://github.com/saturdaymp-examples/create-a-time-travelling-database"&gt;presentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/saturdaymp-examples/a-brief-history-of-the-creation-of-a-time-traveling-database"&gt;Lighting version&lt;/a&gt; of the SQL Saturday 840 presentation.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nftb.saturdaymp.com/temporal-database-design/"&gt;Work in Progress&lt;/a&gt; writing about temporal databases.&lt;/li&gt;
&lt;li&gt;Book that inspired me: &lt;a href="https://www2.cs.arizona.edu/~rts/tdbbook.pdf"&gt;Developing Time-Oriented Database Applications in SQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MS SQL Server &lt;a href="https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables?view=sql-server-2017"&gt;Temporal Tables&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;P.S. - It was toss up between the below song and Rocky Horror Picture Show &lt;a href="https://www.youtube.com/watch?v=umj0gu5nEGs"&gt;Time Warp&lt;/a&gt;. Guess I&amp;rsquo;m in a melancholy mood on this snowy day. Yes it is &lt;a href="http://climate.weather.gc.ca/climate_data/daily_data_e.html?StationID=27214"&gt;snowing&lt;/a&gt; on April 30th in Edmonton.&lt;/p&gt;</description></item><item><title>Introduction to ORMs for DBAs: Part 7 - Create GamePlayers Table</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-7-create-gameplayers-table/</link><pubDate>Sun, 20 Jan 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-7-create-gameplayers-table/</guid><description>&lt;p&gt;&lt;em&gt;I gave the &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;Introduction to ORMs for DBAs&lt;/a&gt; presentation at &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; but it didn’t go as well as I would have liked (i.e. I had trouble getting my demo working).  Since the demo didn’t work live I thought I would show you what was supposed to happen during the demo.  You can find the slides I showed before the demo &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs/blob/master/Slides/Introduction%20to%20Object-Relational%20Mapping%20for%20DBAs.pdf"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The goal of this demo is create a basic website that tracks the games you and your friends play and display wins and losses on the home page.  I used a MacBook Pro for my presentation so you will see Mac screen shots.  That said the demo will also work on Windows.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>My Takeaway from Moneyball</title><link>https://nftb.saturdaymp.workers.dev/my-takeaway-from-moneyball/</link><pubDate>Mon, 14 Jan 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/my-takeaway-from-moneyball/</guid><description>&lt;p&gt;&lt;img src="images/moneyball_cover-197x300.webp" alt="Moneyball cover."&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Book:&lt;/strong&gt; &lt;a href="https://www.amazon.ca/Moneyball-Art-Winning-Unfair-Game/dp/0393324818/ref=sr_1_1?ie=UTF8&amp;amp;qid=1547467657&amp;amp;sr=8-1&amp;amp;keywords=moneyball"&gt;Moneyball: The Art Of Winning An Unfair Game&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Author:&lt;/strong&gt; Michael Lewis&lt;/p&gt;
&lt;p&gt;Both the &lt;a href="https://www.youtube.com/watch?v=RAG74hfW4pM"&gt;movie&lt;/a&gt; and book are great and truth be told I watched the movie well before reading the book. In both cases they do a great job of showing how statics can find undervalued baseball players. Lots of time spent focusing on what stats actually win baseball games such as the famous &amp;ldquo;&lt;a href="https://www.youtube.com/watch?v=DtumWOsgFXc"&gt;he gets on base&lt;/a&gt;&amp;rdquo; quote.&lt;/p&gt;</description></item><item><title>Today I Learned How to Create a React-Rails App</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-react-rails-app/</link><pubDate>Mon, 07 Jan 2019 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-react-rails-app/</guid><description>&lt;p&gt;&lt;em&gt;A working example can be found &lt;a href="https://github.com/saturdaymp-examples/create-react-rails-app-example"&gt;here&lt;/a&gt; in the &lt;a href="https://github.com/saturdaymp-examples"&gt;Saturday MP Examples&lt;/a&gt; GitHub.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;First thing you need to do is create a basic Rails app as outlined in my &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-generate-a-erd-for-rails-application/"&gt;previous&lt;/a&gt; post.  My setup is the same as creating Rails app: Ubuntu 18.04 LTS host using Docker to containerize my development environment.&lt;/p&gt;
&lt;p&gt;Once your basic Rails app is up and running you can add React.  This example uses &lt;a href="https://github.com/reactjs/react-rails"&gt;React-Rails&lt;/a&gt;.  First, you need to update the Docker file to install Node JS and Yarn.  Open up the DockerFile and change it so it looks like the below.&lt;/p&gt;</description></item><item><title>Happy Holidays!</title><link>https://nftb.saturdaymp.workers.dev/happy-holidays/</link><pubDate>Sun, 23 Dec 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/happy-holidays/</guid><description>&lt;p&gt;Saturday MP (i.e. Chris and Ada) are taking some time off over the holidays to visit with family, friends, and spending a day not changing out of our pyjamas and playing games all day.  We will be back to our regularly scheduled programming on January 2nd, 2019.&lt;/p&gt;
&lt;h2 id="happy-holidays-and-all-the-best-in-2019"&gt;&lt;strong&gt;Happy holidays and all the best in 2019!&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2018/12/OldNewRecordPlayer-225x300.jpg"&gt;&lt;img src="images/OldNewRecordPlayer-225x300.webp" alt="Old Timey Record Player"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;P.S. - My daughter wanted a record player for Christmas.  I know, everything old is new again.  Lucky for my daughter she got the above old timey looking record player as an early Christmas gift when her Aunt and family where visiting this weekend.  Not only does it play records but is also plays tapes, CDs, radio, and Bluetooth.  Now we just need to get some records.&lt;/p&gt;</description></item><item><title>Today I Learned how to Generate a ERD for Rails Application</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-generate-a-erd-for-rails-application/</link><pubDate>Sun, 18 Nov 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-generate-a-erd-for-rails-application/</guid><description>&lt;p&gt;Back in the day Rails apps didn&amp;rsquo;t add foreign keys to database tables.  Believe it or not this was a feature not a &lt;a href="http://web.archive.org/web/20060418215514/http://www.loudthinking.com/arc/000516.html"&gt;bug&lt;/a&gt;.  The idea was that you shouldn&amp;rsquo;t &amp;ldquo;repeat&amp;rdquo; the relationship between you models in the code and in the database.  It wasn&amp;rsquo;t until &lt;a href="https://guides.rubyonrails.org/4_2_release_notes.html#foreign-key-support"&gt;Rails 4.2&lt;/a&gt; that support was added for foreign keys.  &lt;/p&gt;
&lt;p&gt;As you can probably guess I think this was a mistake.  If you have worked with a database without any foreign key constraints you quickly run into data integrity issues.  I don&amp;rsquo;t care how careful you think you are you will eventually screw up.  If not you then another person or application will corrupt your data.  Line items not attached to an order, address without customers, &lt;a href="https://www.youtube.com/watch?v=SA1SxZoFmOU"&gt;cats and dogs living together&lt;/a&gt;, etc.&lt;/p&gt;</description></item><item><title>Introduction to ORMs for DBAs: Part 6 - Create GamesPlayed Table and CRUD</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-6-create-games-played-table-and-crud/</link><pubDate>Fri, 02 Nov 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-6-create-games-played-table-and-crud/</guid><description>&lt;p&gt;&lt;em&gt;I gave the &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;Introduction to ORMs for DBAs&lt;/a&gt; presentation at &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; but it didn’t go as well as I would have liked (i.e. I had trouble getting my demo working).  Since the demo didn’t work live I thought I would show you what was supposed to happen during the demo.  You can find the slides I showed before the demo &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs/blob/master/Slides/Introduction%20to%20Object-Relational%20Mapping%20for%20DBAs.pdf"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The goal of this demo is create a basic website that tracks the games you and your friends play and display wins and losses on the home page.  I used a MacBook Pro for my presentation so you will see Mac screen shots.  That said the demo will also work on Windows.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introduction to ORMs for DBAs: Part 5 - Create GameResultTypes Table and CRUD</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-5-create-gameresulttypes-table-and-crud/</link><pubDate>Fri, 14 Sep 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-5-create-gameresulttypes-table-and-crud/</guid><description>&lt;p&gt;&lt;em&gt;I gave the &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;Introduction to ORMs for DBAs&lt;/a&gt; presentation at &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; but it didn’t go as well as I would have liked (i.e. I had trouble getting my demo working).  Since the demo didn’t work live I thought I would show you what was supposed to happen during the demo.  You can find the slides I showed before the demo &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs/blob/master/Slides/Introduction%20to%20Object-Relational%20Mapping%20for%20DBAs.pdf"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The goal of this demo is create a basic website that tracks the games you and your friends play and display wins and losses on the home page.  I used a MacBook Pro for my presentation so you will see Mac screen shots.  That said the demo will also work on Windows.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Today I Learned how to Create Rails Docker Container Without Ruby Installed</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-rails-docker-container-without-ruby-installed/</link><pubDate>Sun, 22 Jul 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-rails-docker-container-without-ruby-installed/</guid><description>&lt;p&gt;I was curious to see if I could create a Docker container for a new Rails project without having Ruby or Rails installed on the host machine.  To do this I created a new &lt;a href="https://www.ubuntu.com/download/desktop"&gt;Ubuntu 18&lt;/a&gt; virtual machine with the bare minimum installed for the OS.  I also install &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt;, &lt;a href="https://www.jetbrains.com/ruby/"&gt;RubyMine&lt;/a&gt;, and &lt;a href="https://www.jetbrains.com/datagrip/"&gt;DataGrip&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Initially I was hoping I could just create the new project inside RubyMine.  Unfortunately I couldn&amp;rsquo;t get it working.  As you will see setting up the initial Docker container requires more then just running the &amp;ldquo;docker-compose up&amp;rdquo; command.&lt;/p&gt;</description></item><item><title>Introduction to ORMs for DBAs: Part 4 – Create Game CRUD</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-4-create-game-crud/</link><pubDate>Wed, 27 Jun 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-4-create-game-crud/</guid><description>&lt;p&gt;&lt;em&gt;I gave the &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;Introduction to ORMs for DBAs&lt;/a&gt; at &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; but it didn’t go as well as I would have liked (i.e. I had trouble getting my demo working).  Since the demo didn’t work live I thought I would show you what was supposed to happen during the demo.  You can find the slides I showed before the demo &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs/blob/master/Slides/Introduction%20to%20Object-Relational%20Mapping%20for%20DBAs.pdf"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The goal of this demo is create a basic website that tracks the games you and your friends play and display wins and losses on the home page.  I used a MacBook Pro for my presentation so you will see Mac screen shots.  That said the demo will also work on Windows.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introduction to ORMs for DBAs: Part 3 – Player CRUD</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-3-player-crud/</link><pubDate>Wed, 13 Jun 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-3-player-crud/</guid><description>&lt;p&gt;&lt;em&gt;I gave the &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;Introduction to ORMs for DBAs&lt;/a&gt; at &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; but it didn’t go as well as I would have liked (i.e. I had trouble getting my demo working).  Since the demo didn’t work live I thought I would show you what was supposed to happen during the demo.  You can find the slides I showed before the demo &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs/blob/master/Slides/Introduction%20to%20Object-Relational%20Mapping%20for%20DBAs.pdf"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The goal of this demo is create a basic website that tracks the games you and your friends play and display wins and losses on the home page.  I used a MacBook Pro for my presentation so you will see Mac screen shots.  That said the demo will also work on Windows.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introduction to ORMs for DBAs: Part 2 – Games Table</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-2-games-table/</link><pubDate>Mon, 28 May 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-2-games-table/</guid><description>&lt;p&gt;&lt;em&gt;I gave the &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;Introduction to ORMs for DBAs&lt;/a&gt; at &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; but it didn’t go as well as I would have liked (i.e. I had trouble getting my demo working).  Since the demo didn’t work live I thought I would show you what was supposed to happen during the demo.  You can find the slides I showed before the demo &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs/blob/master/Slides/Introduction%20to%20Object-Relational%20Mapping%20for%20DBAs.pdf"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The goal of this demo is create a basic website that tracks the games you and your friends play and display wins and losses on the home page.  I used a MacBook Pro for my presentation so you will see Mac screen shots.  That said the demo will also work on Windows.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introduction to ORMs for DBAs: Part 1 – Create Player Table</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-1-create-player-table/</link><pubDate>Tue, 22 May 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-1-create-player-table/</guid><description>&lt;p&gt;&lt;em&gt;I gave the &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;Introduction to ORMs for DBAs&lt;/a&gt; at &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; but it didn’t go as well as I would have liked (i.e. I had trouble getting my demo working).  Since the demo didn’t work live I thought I would show you what was supposed to happen during the demo.  You can find the slides I showed before the demo &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs/blob/master/Slides/Introduction%20to%20Object-Relational%20Mapping%20for%20DBAs.pdf"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The goal of this demo is create a basic website that tracks the games you and your friends play and display wins and losses on the home page.  I used a MacBook Pro for my presentation so you will see Mac screen shots.  That said the demo will also work on Windows.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introduction to ORMs for DBAs: Part 0 - Setup</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-0-setup/</link><pubDate>Mon, 14 May 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-orms-for-dbas-part-0-setup/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2018/05/sqlsaturday-logo.png"&gt;&lt;img src="images/sqlsaturday-logo.webp" alt="SQL Saturday Logo"&gt;&lt;/a&gt;I gave a presentation at &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; that didn&amp;rsquo;t go as well as I liked (i.e. I had trouble getting my demo working).  For those that attended thank you for patience.  Hopefully it was still worth attending and the discussion without the live coding was worth while.&lt;/p&gt;
&lt;p&gt;Since the demo didn&amp;rsquo;t work live I thought I would show you what was supposed to happen during the demo.  The source code for the demo is &lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Today I Learned how to Run SQL Server on a Mac using Docker</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-run-sql-server-on-a-mac-using-docker/</link><pubDate>Mon, 30 Apr 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-run-sql-server-on-a-mac-using-docker/</guid><description>&lt;p&gt;Working on my code example for my upcoming SQL Saturday 710 &lt;a href="http://www.sqlsaturday.com/710/Sessions/Details.aspx?sid=74085"&gt;talk&lt;/a&gt; I ran into a performance issue.  My laptop is an older MacBook Pro and I was trying to run my example on a Windows virtual machine&amp;hellip;&lt;/p&gt;
&lt;p&gt;What is &lt;a href="http://www.sqlsaturday.com/"&gt;SQL Saturday&lt;/a&gt;?  Good question.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;&lt;img src="images/SQL-Saturday-Logo.webp" alt="SQL Saturday Logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;SQL Saturday is an entire day of talks, training, and socializing about databases and data storage.  &lt;a href="http://www.sqlsaturday.com/710/eventhome.aspx"&gt;SQL Saturday 710&lt;/a&gt; is on May 5th in Edmonton but there are SQL Saturdays, with different numbers at the end, all around the world on different dates.&lt;/p&gt;</description></item><item><title>Chris, have you created that Ruby on Rails 5 project? What Does it Look Like I'm Doing!</title><link>https://nftb.saturdaymp.workers.dev/chris-have-you-created-that-ruby-on-rails-5-project-what-does-it-look-like-im-doing/</link><pubDate>Wed, 21 Mar 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/chris-have-you-created-that-ruby-on-rails-5-project-what-does-it-look-like-im-doing/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/_UZFI-8D5uA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;In the above video you can replace the question with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Chris, have created that Ruby on Rails 5 project?&lt;/p&gt;
&lt;p&gt;What dose it look like I&amp;rsquo;m Doing!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Scene 1:&lt;/strong&gt; Create new Ruby on Rails project using &lt;a href="https://www.jetbrains.com/ruby/"&gt;Ruby Mine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2018/03/New-Ruby-Mine-Project.png"&gt;&lt;img src="images/New-Ruby-Mine-Project.webp" alt="New Ruby Mine Project"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scene 2:&lt;/strong&gt; Try to install the Gems find out I need Ruby 2.5.&lt;/p&gt;</description></item><item><title>Today I Learned how to Run SpinRite on a UEIF Motherboard</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-run-spinrite-on-a-ueif-motherboard/</link><pubDate>Thu, 15 Mar 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-run-spinrite-on-a-ueif-motherboard/</guid><description>&lt;p&gt;I have a &lt;a href="https://www.synology.com"&gt;Synology NAS&lt;/a&gt; that has starting acting up.  By acting up I mean I can&amp;rsquo;t connect to it and it requires a unplugged reboot to fix it.  Power button no work.  After doing some detective work I&amp;rsquo;m not sure if the problem is with the hard drives or the Synology it&amp;rsquo;s self.&lt;/p&gt;
&lt;p&gt;To help me narrow down the problem I thought I&amp;rsquo;d run SpinRite which is a hard drive diagnostic tool.  I heard about SpinRite from the &lt;a href="https://twit.tv/shows/security-now"&gt;Security Now podcast&lt;/a&gt;.  It was created by &lt;a href="https://www.grc.com/intro.htm"&gt;Steve Gibson&lt;/a&gt;, one of the hosts and they talk about it&amp;rsquo;s virtues often on the podcast.&lt;/p&gt;</description></item><item><title>Just Enjoy the Show</title><link>https://nftb.saturdaymp.workers.dev/just-enjoy-the-show/</link><pubDate>Wed, 28 Feb 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/just-enjoy-the-show/</guid><description>&lt;p&gt;I&amp;rsquo;m on optimist and generally think things will work out for the best.  I like to say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2 id="the-future-is-awesome"&gt;The future is awesome!&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;That said it&amp;rsquo;s easy to forget how awesome individual days can be.  How many small but amazing things occur each day that we gloss over.  Our day is 99% good and 1% bad but we focus on that one minor bad moment.&lt;/p&gt;
&lt;p&gt;Think about your conversations at the end of the day.  Does it focus on the negatives of the day?  That boozo that cut me off in traffic.  The Internet was down for 5 minutes.  I had to stay at work 10 minutes late.  Etc.&lt;/p&gt;</description></item><item><title>Today I Learned how to Copy a Putty Key From Windows to a Mac</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-copy-a-putty-key-from-windows-to-a-mac/</link><pubDate>Fri, 23 Feb 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-copy-a-putty-key-from-windows-to-a-mac/</guid><description>&lt;p&gt;You created a private Putty key on Windows workstation to access a remote service but now you need to access that same remote service from a Mac workstation.  In my case I need to access the same Git repository from both machines.  I created the key using the steps outlined in a &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-create-a-key-pair-using-putty/"&gt;previous post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quick aside:&lt;/strong&gt; Before we continue you need to decide if it&amp;rsquo;s better to copy your private key or just generate a new private/public key pair on the Mac.  If the service you are connecting too does not support multiple keys then you have now choice but to copy it.  Assuming that the service does allow multiple keys then consider these &lt;a href="https://security.stackexchange.com/questions/10203/reusing-private-public-keys"&gt;security implications&lt;/a&gt; of copying your private key.&lt;/p&gt;</description></item><item><title>Today I Learned How to Create a Key Pair Using PuTTY</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-key-pair-using-putty/</link><pubDate>Mon, 29 Jan 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-key-pair-using-putty/</guid><description>&lt;p&gt;I recently had to generate a private/public key pair to access a Git repository.  While I&amp;rsquo;ve done this several times before I never do it enough to remember all the steps so this time I wrote it down.&lt;/p&gt;
&lt;p&gt;Since my primary workstation runs &lt;a href="https://www.microsoft.com/en-us/windows"&gt;Windows&lt;/a&gt; I use &lt;a href="https://www.putty.org/"&gt;PuTTY&lt;/a&gt; to generate the keys.  If you thought PuTTY was just a SSH client then you are not alone (e.g. I used to think that too).  PuTTY&amp;rsquo;s unofficial tag line should be:&lt;/p&gt;</description></item><item><title>Today I Learned how to Install PostgreSQL in Ubuntu</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-install-postgresql-in-ubuntu/</link><pubDate>Thu, 25 Jan 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-install-postgresql-in-ubuntu/</guid><description>&lt;p&gt;For an upcoming project I&amp;rsquo;m thinking of using PostgreSQL.  I&amp;rsquo;ve heard lots of great things about PostgreSQL in the past but have been too scared lazy busy to try it.&lt;/p&gt;
&lt;p&gt;What changed my mind was JetBrains DataGrip database client.  I&amp;rsquo;m sure there are &lt;a href="https://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools"&gt;other PostgreSQL clients&lt;/a&gt; but DataGrip is included in my JetBrains subscription so why not give it a try.   I&amp;rsquo;m a sucker for GUI database clients.  As a generalist it&amp;rsquo;s too hard to remember all the command lines for each individual database.  Plus it&amp;rsquo;s really hard to view more then a few rows or columns of data in the command line.&lt;/p&gt;</description></item><item><title>Blast from the Past: New Tools Require New Standards</title><link>https://nftb.saturdaymp.workers.dev/blast-from-the-past-new-tools-require-new-standards/</link><pubDate>Sat, 20 Jan 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/blast-from-the-past-new-tools-require-new-standards/</guid><description>&lt;p&gt;&lt;em&gt;I recently started a new contract that involves tools and software languages I normally don&amp;rsquo;t use.   I have to remember that &lt;a href="https://www.microsoft.com/net/"&gt;.NET&lt;/a&gt; best practices don&amp;rsquo;t necessarily translate to &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt;/&lt;a href="https://java.com"&gt;Java&lt;/a&gt;.  I have to remember that &lt;a href="https://nftb.saturdaymp.com/new-tools-require-new-standards/"&gt;New Tools Require New Standards&lt;/a&gt; (originally published on September 3rd, 2010).&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;An old belief is like an old shoe.  We so value its comfort that we fail to notice the hole in it.&amp;rdquo; - &lt;a href="http://www.quotegarden.com/belief.html"&gt;Robert Brault&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As developers we all have standards, even if they aren&amp;rsquo;t that well defined.  Of course I&amp;rsquo;m talking about technology standards but feel free to insert your social awareness and/or hygiene standard joke here.  Standards can range from the usual coding standards to the names you give your servers (e.g Lord of the Rings Characters) and everything in-between.&lt;/p&gt;</description></item><item><title>Introduction to Object-Relational Mapping for DBAs – Part 3</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-object-relational-mapping-for-dbas-part-3/</link><pubDate>Wed, 17 Jan 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-object-relational-mapping-for-dbas-part-3/</guid><description>&lt;h2 id="why-developers-use-orms-ie-their-strengths"&gt;Why Developers Use ORMs (i.e. their Strengths)&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;This is the third and final part of a lighting talk I&amp;rsquo;m giving at the &lt;a href="https://www.meetup.com/EDMPASS/events/244468043/"&gt;SQL Saturday Edmonton Speaker Idol Contest&lt;/a&gt;.   Imagine I&amp;rsquo;m actually speaking the words below and showing some of the images on slides and/or doing a demo.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you don&amp;rsquo;t want to read &lt;a href="https://nftb.saturdaymp.com/introduction-to-object-relational-mapping-for-dbas-part-1/"&gt;Part 1&lt;/a&gt; or &lt;a href="https://nftb.saturdaymp.com/introduction-to-object-relational-mapping-for-dbas-part-2/"&gt;Part 2&lt;/a&gt; the basically give an example of a developer using ORM, panic over indexes, and then show more ORM examples.  I don&amp;rsquo;t think it will all fit in a 15 minute talk.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introduction to Object-Relational Mapping for DBAs – Part 2</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-object-relational-mapping-for-dbas-part-2/</link><pubDate>Thu, 11 Jan 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-object-relational-mapping-for-dbas-part-2/</guid><description>&lt;p&gt;&lt;em&gt;This is part two of a lighting talk I&amp;rsquo;m giving at the &lt;a href="https://www.meetup.com/EDMPASS/events/244468043/"&gt;SQL Saturday Edmonton Speaker Idol Contest&lt;/a&gt;.   Imagine I&amp;rsquo;m actually speaking the words below and showing some of the images on slides and/or doing a demo.&lt;/em&gt;  &lt;em&gt;Code can be found&lt;/em&gt; &lt;em&gt;&lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you don&amp;rsquo;t want to read &lt;a href="https://nftb.saturdaymp.com/introduction-to-object-relational-mapping-for-dbas-part-1/"&gt;Part 1&lt;/a&gt; it basically started the ORM example and ended in a panic over indexes.&lt;/em&gt;  &lt;/p&gt;
&lt;p&gt;&lt;em&gt;This is a rough draft so constructive feedback at &lt;a href="chris.cumming@saturdaymp.com"&gt;chris.cumming@saturdaymp.com&lt;/a&gt; is much appreciated.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introduction to Object-Relational Mapping for DBAs - Part 1</title><link>https://nftb.saturdaymp.workers.dev/introduction-to-object-relational-mapping-for-dbas-part-1/</link><pubDate>Fri, 05 Jan 2018 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/introduction-to-object-relational-mapping-for-dbas-part-1/</guid><description>&lt;p&gt;&lt;em&gt;This is the part one of a lighting talk I&amp;rsquo;m giving at the &lt;a href="https://www.meetup.com/EDMPASS/events/244468043/"&gt;SQL Saturday Edmonton Speaker Idol Contest&lt;/a&gt;.   Imagine I&amp;rsquo;m actually speaking the words below and showing some of the images on slides and/or doing a demo.&lt;/em&gt;  &lt;em&gt;Code can be found&lt;/em&gt; &lt;em&gt;&lt;a href="https://github.com/saturdaymp/IntroductionToORMForDBAs"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This is a rough draft so constructive feedback at &lt;a href="chris.cumming@saturdaymp.com"&gt;chris.cumming@saturdaymp.com&lt;/a&gt; is much appreciated.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Skip ahead to &lt;a href="https://nftb.saturdaymp.com/introduction-to-object-relational-mapping-for-dbas-part-2/"&gt;Part 2&lt;/a&gt; if don&amp;rsquo;t feel like reading all of part 1.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Developer Bud wants to create a new application to track the board games he and his friends play.  He wants a simple website where him and his buddies can login to update the results from the board games they have played.  Being a .NET Developer he creates a ASP.NET MVC Core application with individual authentication.&lt;/p&gt;</description></item><item><title>XPlugins.iOS.BEMCheckBox 1.4.3 Released</title><link>https://nftb.saturdaymp.workers.dev/xplugins-ios-bemcheckbox-1-4-3-released/</link><pubDate>Fri, 22 Dec 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/xplugins-ios-bemcheckbox-1-4-3-released/</guid><description>&lt;p&gt;I&amp;rsquo;m happy to announce the release of &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox"&gt;XPlugins.iOS.BEMCheckBox&lt;/a&gt; &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox/releases/tag/1.4.3"&gt;1.4.3&lt;/a&gt;.  The main feature of this release is exposing the &lt;a href="https://github.com/Boris-Em/BEMCheckBox#delegate"&gt;DidTapCheckBox&lt;/a&gt; event in the underlying &lt;a href="https://github.com/Boris-Em/BEMCheckBox"&gt;BEMCheckBox&lt;/a&gt;.  You can find a full list of issues fixed in this release &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox/milestone/2"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The easiest way to get this update is via &lt;a href="https://www.nuget.org/packages/SaturdayMP.XPlugins.iOS.BEMCheckBox"&gt;NuGet:&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Install-Package SaturdayMP.XPlugins.iOS.BEMCheckBox -Version 1.4.3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package SaturdayMP.XPlugins.iOS.BEMCheckBox --version 1.4.3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Subscribe to the DidTapCheckBox event as you would any other C# event:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;checkbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DidTapCheckBox&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;DidTapCheckBoxEvent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The event handler looks like:&lt;/p&gt;</description></item><item><title>Happy Holidays and all the Best in 2018!</title><link>https://nftb.saturdaymp.workers.dev/happy-holidays-and-all-the-best-in-2018/</link><pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/happy-holidays-and-all-the-best-in-2018/</guid><description>&lt;p&gt;[caption id=&amp;ldquo;attachment_1522&amp;rdquo; align=&amp;ldquo;alignright&amp;rdquo; width=&amp;ldquo;300&amp;rdquo;]&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/12/IMG_20171221_142405_mini.jpg"&gt;&lt;img src="images/IMG_20171221_142405_mini-300x225.webp" alt="Wrapped Christmas Presents"&gt;&lt;/a&gt; Gift wrapping skill is inversely correlated to software development skills.[/caption]&lt;/p&gt;
&lt;p&gt;This morning I made my last shopping trip before Christmas, at least I hope it&amp;rsquo;s my last trip.&lt;/p&gt;
&lt;p&gt;Pro tip: the Costco near us officially opens at 10am but if you show up at 9:45ish they will let you in.  At least they let me in.  Then you can run, grab the salmon, and get out before the hoards descend.&lt;/p&gt;</description></item><item><title>Today I Learned How to Fix Illegal Characters in Path Error with TeamCity and RealmDB</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-fix-illegal-characters-in-path-error-with-teamcity-and-realmdb/</link><pubDate>Thu, 14 Dec 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-fix-illegal-characters-in-path-error-with-teamcity-and-realmdb/</guid><description>&lt;p&gt;When building a Xamarin application one step is to build the Android APK file.  This is a MsBuild step in TeamCity that looks like:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/12/TeamCity-Create-APK-Package-Build-Step.png"&gt;&lt;img src="images/TeamCity-Create-APK-Package-Build-Step.webp" alt="TeamCity Create APK Package Build Step"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This step generates the following error:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[15:55:53][Source\SmallVictories\SmallVictories.csproj] CopyRealmWeaver
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[15:55:53][CopyRealmWeaver] CopyRealmWeaver
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[15:55:53][CopyRealmWeaver] Copy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[15:55:53][Copy] Creating directory &amp;#34;*Undefined*Tools&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[15:55:53][Copy] C:\BuildAgent\temp\buildTmp\.nuget\packages\realm.database\2.1.0\build\Realm.Database.targets(28, 5): error MSB3021: Unable to copy file &amp;#34;C:\BuildAgent\temp\buildTmp\.nuget\packages\realm.database\2.1.0\build\..\tools\RealmWeaver.Fody.dll&amp;#34; to &amp;#34;*Undefined*Tools\RealmWeaver.Fody.dll&amp;#34;. Illegal characters in path.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[15:55:53][Step 6/8] Error message is logged
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notice the &amp;ldquo;*Undefined*Tools&amp;rdquo; in the directory path.  To fix this step you need to add /p:SolutionDir=&amp;quot;/&amp;quot; to the command line.  So now the build step looks like:&lt;/p&gt;</description></item><item><title>Overlapping Segments Create Space Time Paradoxes</title><link>https://nftb.saturdaymp.workers.dev/overlapping-segments-create-space-time-paradoxes/</link><pubDate>Tue, 12 Dec 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/overlapping-segments-create-space-time-paradoxes/</guid><description>&lt;p&gt;&lt;em&gt;This post is part of a larger discussion about temporal databases.  Hopefully it stands on it’s own but for more context see the &lt;a href="https://nftb.saturdaymp.com/temporal-database-design/"&gt;Temporal Database Design page&lt;/a&gt;.&lt;/em&gt;  &lt;em&gt;You can read the official &lt;a href="https://en.wikipedia.org/wiki/Temporal_database"&gt;Wikipedia definition&lt;/a&gt; but for our purposes a Temporal Database is a database where you can query for historical data using SQL.  This is work in progress and constructive feedback via e-mail, at &lt;a href="mailto:chris.cumming@saturdaymp.com"&gt;chris.cumming@saturdaymp.com&lt;/a&gt;, is most appreciated.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In the last &lt;a href="https://nftb.saturdaymp.com/temporal-database-timelines/"&gt;Temporal Database post&lt;/a&gt; I introduced timelines.  In this post we will talk about the one rule you cannot break:&lt;/p&gt;</description></item><item><title>Temporal Database Timelines</title><link>https://nftb.saturdaymp.workers.dev/temporal-database-timelines/</link><pubDate>Thu, 07 Dec 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/temporal-database-timelines/</guid><description>&lt;p&gt;&lt;em&gt;This post is part of a larger discussion about temporal databases.  Hopefully it stands on it&amp;rsquo;s own but for more context see the &lt;a href="https://nftb.saturdaymp.com/temporal-database-design/"&gt;Temporal Database Design page&lt;/a&gt;.&lt;/em&gt;  &lt;em&gt;You can read the official &lt;a href="https://en.wikipedia.org/wiki/Temporal_database"&gt;Wikipedia definition&lt;/a&gt; but for our purposes a Temporal Database is a database where you can query for historical data using SQL.  This is work in progress and constructive feedback via e-mail (&lt;a href="mailto:chris.cumming@saturdaymp.com"&gt;chris.cumming@saturdaymp.com&lt;/a&gt;) is most appreciated.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In a non-temporal database a record dose not change over time.  For example say you have a Contacts table with a name field.&lt;/p&gt;</description></item><item><title>Notes on Fixing Incomplete Bitcode Error in TeamCity Automated Objective-c Builds</title><link>https://nftb.saturdaymp.workers.dev/notes-on-fixing-incomplete-bitcode-error-in-teamcity-automated-objective-c-builds/</link><pubDate>Tue, 05 Dec 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/notes-on-fixing-incomplete-bitcode-error-in-teamcity-automated-objective-c-builds/</guid><description>&lt;p&gt;Notes I took while trying to fix the &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox/issues/2"&gt;Incomplete Bitcode error in submission&lt;/a&gt; bug.  Not sure if it&amp;rsquo;s fixed yet as I haven&amp;rsquo;t tried submitting an app to the App Store yet.  Hopefully someone else will try it and confirm it&amp;rsquo;s fixed.&lt;/p&gt;
&lt;p&gt;In summary when submitting an app to iTunes Connect that has the &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox"&gt;XPlugins.iOS.BEMCheckBox&lt;/a&gt; the user got the following error:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ERROR ITMS-90668: &amp;ldquo;Invalid Bundle Executable. The executable file &amp;lsquo;InstantApp.BoostOrder.Customer.Touch.app/Frameworks/BEMCheckBox.framework/BEMCheckBox&amp;rsquo; contains incomplete bitcode. To compile binaries with complete bitcode, open Xcode and choose Archive in the Product menu.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Family Vacation is Over</title><link>https://nftb.saturdaymp.workers.dev/family-vacation-is-over/</link><pubDate>Thu, 30 Nov 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/family-vacation-is-over/</guid><description>&lt;p&gt;Our &lt;a href="https://nftb.saturdaymp.com/closed-for-family-vacation/"&gt;family vacation&lt;/a&gt; is over and the basement is back open for business.  Actually we where open on Monday but I forgot to remove the digital closed signed.  Sorry about that.&lt;/p&gt;
&lt;p&gt;On this trip we visited Hong Kong and Shanghai, spending about a week in each city.  This is our second time to Honk Kong and we got to see and do things we missed on our first visit.  This includes hanging out at a &lt;a href="https://en.wikipedia.org/wiki/Repulse_Bay"&gt;beach and swimming&lt;/a&gt;, hiking the &lt;a href="https://en.wikipedia.org/wiki/Tai_Mo_Shan"&gt;highest mountain&lt;/a&gt; in Hong Kong, a &lt;a href="http://www.heliservices.com.hk/main2/"&gt;helicopter ride&lt;/a&gt; (sponsored by our daughter who saved her money for a year), and visiting the &lt;a href="http://www.hong-kong-traveller.com/icc-hong-kong.html#.Wh9trbT81sY"&gt;highest building&lt;/a&gt; in Hong Kong.&lt;/p&gt;</description></item><item><title>Closed for Family Vacation</title><link>https://nftb.saturdaymp.workers.dev/closed-for-family-vacation/</link><pubDate>Tue, 07 Nov 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/closed-for-family-vacation/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/11/BasementOfficeClosedSign_mini.jpg"&gt;&lt;img src="images/BasementOfficeClosedSign_mini-300x225.webp" alt="Basement Office Closed Sign"&gt;&lt;/a&gt;&lt;a href="https://www.saturdaymp.com/"&gt;Saturday MP&lt;/a&gt; is a small family business and like your local family run restaurant the entire family is involved in some way.  Currently it&amp;rsquo;s mostly me working at Saturday MP but &lt;a href="https://www.saturdaymp.com/consulting"&gt;Ada&lt;/a&gt; helps with some book keeping and in the past was a consultant.  Our daughter also used to clean the basement office and shred papers.&lt;/p&gt;
&lt;p&gt;Also, like your local family restaurant, when we take a vacation the entire business closes.  Well, mostly closes, we can still be &lt;a href="mailto:info@saturdaymp.com"&gt;reached&lt;/a&gt; virtually but please expect delays in our response.  Thank you for your patience and we look forward to serving you when we get back to the basement on November 27th.&lt;/p&gt;</description></item><item><title>Today I Learned The Final Backslash is Important in Apache HTTPS Redirects</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-the-final-backslash-is-important-in-apache-https-redirects/</link><pubDate>Thu, 02 Nov 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-the-final-backslash-is-important-in-apache-https-redirects/</guid><description>&lt;p&gt;Lets start with the bug:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When requesting a download link via the Downloads page the link that is sent via e-mail is invalid.  It is missing a slash.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Enter a e-mail on the Downloads page (&lt;a href="https://www.saturdaymp.com/downloads"&gt;https://www.saturdaymp.com/downloads&lt;/a&gt;) that has already purchased Mini-Compressor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;E-mail should be sent but the link in the e-mail is incorrect.  For example the link I got was:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://www.saturdaymp.comdownloads/show"&gt;https://www.saturdaymp.comdownloads/show&lt;/a&gt;_products?link=blahblahblah&lt;/p&gt;
&lt;p&gt;There should be a slash after the &lt;a href="https://www.saturdaymp.com/"&gt;https://www.saturdaymp.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But when I looked closer at the actual e-mail, the link was correct.  It looked like:&lt;/p&gt;</description></item><item><title>Degree of Temporalness</title><link>https://nftb.saturdaymp.workers.dev/degree-of-temporalness/</link><pubDate>Tue, 31 Oct 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/degree-of-temporalness/</guid><description>&lt;p&gt;&lt;em&gt;This post is part of a larger discussion about temporal databases.  Hopefully it stands on it&amp;rsquo;s own but for more context see the &lt;a href="https://nftb.saturdaymp.com/temporal-database-design/"&gt;Temporal Database Design page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Most of us have worked with database tables that track some historical information.  You add a EffectiveDate column or something similar and usually it’s just limited to a table to two.  A Temporal Database is designed so most or all of the tables can track historical information.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The important part is that you can access the historical database using a SQL query and don&amp;rsquo;t have to look elsewhere, such as audit log.  This is what makes a database a Temporal Database, at least according to me&lt;/em&gt;.&lt;/p&gt;
&lt;h1 id="degree-of-database-temporalness"&gt;Degree of Database Temporalness&lt;/h1&gt;
&lt;p&gt;A database can either be non-temporal, partial temporal, or fully temporal.  You can measure the temporalness by the percentage of tables that store temporal data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Non-Temporal (0% Temporalness):&lt;/strong&gt; Database has no temporal capabilities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Partially Temporal (1% - 99% Temporalness):&lt;/strong&gt; The database has some tables store temporal data but not all.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fully Temporal (100% Temporalness):&lt;/strong&gt; All the tables in the database store temporal data.&lt;/p&gt;
&lt;h1 id="type-of-table-temporalness"&gt;Type of Table Temporalness&lt;/h1&gt;
&lt;p&gt;We don&amp;rsquo;t measure how temporal a table is by percentage.  Instead a table is defined by what type of historical data you can retrieve.  There are two types of historical data:&lt;/p&gt;</description></item><item><title>What is a Temporal Database?</title><link>https://nftb.saturdaymp.workers.dev/what-is-a-temporal-database/</link><pubDate>Fri, 27 Oct 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/what-is-a-temporal-database/</guid><description>&lt;p&gt;You can read the official &lt;a href="https://en.wikipedia.org/wiki/Temporal_database"&gt;Wikipedia definition&lt;/a&gt; but for our purposes it&amp;rsquo;s a database where you can query for historical data using SQL.&lt;/p&gt;
&lt;p&gt;For example, say you have someone named Chronos who lives in New York but on April 15, 2012 moves to Hong Kong.  If you don&amp;rsquo;t have an historical tracking then you will only be able to see that Chronos lives in Hong Kong.  You don&amp;rsquo;t know where he lived before Hong Kong or when he moved to Hong Kong.&lt;/p&gt;</description></item><item><title>Temporal Database Design</title><link>https://nftb.saturdaymp.workers.dev/temporal-database-design/</link><pubDate>Thu, 26 Oct 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/temporal-database-design/</guid><description>&lt;p&gt;&lt;em&gt;This is work in progress and constructive feedback via e-mail (&lt;a href="mailto:chris.cumming@saturdaymp.com"&gt;chris.cumming@saturdaymp.com&lt;/a&gt;) is most appreciated.&lt;/em&gt;&lt;/p&gt;
&lt;h1 id="sections"&gt;Sections&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#whatisatemporaldatabase"&gt;What is a Temporal Database?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#degreeeofdatabasetemporalness"&gt;Degrees of Temporalness&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#typeoftabletemporalness"&gt;Type of Table Temporalness&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#effectivehistoricaltemporalness"&gt;Effective Historical Temporalness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#enteredhistoricaltemporalness"&gt;Entered Historical Temporalness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#combingtabletemporalness"&gt;Combing Table Temporalness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#tabletemporalnesswithauditing"&gt;Table Temporalness with Auditing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#timelines"&gt;Timelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating Temporal Tables&lt;/li&gt;
&lt;li&gt;Querying Temporal Tables&lt;/li&gt;
&lt;li&gt;Temporal Foreign Keys&lt;/li&gt;
&lt;li&gt;User&amp;rsquo;s Thinking Temporally&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="what-is-a-temporal-database"&gt;What is a Temporal Database?&lt;/h1&gt;
&lt;p&gt;You can read the official &lt;a href="https://en.wikipedia.org/wiki/Temporal_database"&gt;Wikipedia definition&lt;/a&gt; but for our purposes it’s a database where you can query for historical data using SQL.&lt;/p&gt;</description></item><item><title>Today I Learned How to Create Custom NUnit Constraints – Part 2: Constraint Usage Syntax</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-custom-nunit-constraints-part-2-constraint-usage-syntax/</link><pubDate>Tue, 24 Oct 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-custom-nunit-constraints-part-2-constraint-usage-syntax/</guid><description>&lt;p&gt;In &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-create-custom-nunit-constraints-part-1-creating-the-constraint/"&gt;Part 1&lt;/a&gt; we created a &lt;a href="https://github.com/nunit/docs/wiki/Custom-Constraints"&gt;custom NUnit constraint&lt;/a&gt; but you where limited in using the constraint.  You could only write:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Instantiate the constraint. &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;EquivalentPropertyWiseToConstraint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Matches syntax. &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Matches&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;EquivalentPropertyWiseToConstraint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It would be nice to write:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Directly access the constraint from Is.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EquivalentPropertyWiseTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Chain the constraint in Is.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EquivalentPropertyWiseTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actual&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To do that you should read the &lt;a href="https://github.com/nunit/docs/wiki/Custom-Constraints"&gt;documentation&lt;/a&gt;.  End of blog post.&lt;/p&gt;
&lt;p&gt;So is that joke still funny?  No, OK, no more.  Lets get back to what we are doing.  To access the method using Is you need to override the &lt;a href="https://github.com/saturdaymp/NConstraints/blob/master/Source/SaturdayMP.NConstraints/Is.cs"&gt;Is class&lt;/a&gt; and add a static method.  I recommended making the method name similar to your constraint name.  For example:&lt;/p&gt;</description></item><item><title>Today I Learned How to Create Custom NUnit Constraints - Part 1: Creating the Constraint</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-custom-nunit-constraints-part-1-creating-the-constraint/</link><pubDate>Thu, 19 Oct 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-custom-nunit-constraints-part-1-creating-the-constraint/</guid><description>&lt;p&gt;&lt;a href="http://nunit.org/"&gt;NUnit&lt;/a&gt; has has &lt;a href="https://github.com/nunit/docs/wiki/Constraints"&gt;built in constraints&lt;/a&gt; for most the tests you will need to write so there is no need to create your own.  End of blog post.&lt;/p&gt;
&lt;p&gt;OK, that was a bad joke.  The first step in creating a NUnit custom constraint is to read the &lt;a href="https://github.com/nunit/docs/wiki/Custom-Constraints"&gt;documentation&lt;/a&gt;.  That&amp;rsquo;s it.  End of blog post.&lt;/p&gt;
&lt;p&gt;Not as funny as the first time?  Not funny at all?  I won&amp;rsquo;t use that joke again.  But you did read the documentation right?  OK, good.&lt;/p&gt;</description></item><item><title>NConstraints Version 1.0.0 Released</title><link>https://nftb.saturdaymp.workers.dev/nconstraints-version-1-0-0-released/</link><pubDate>Tue, 17 Oct 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/nconstraints-version-1-0-0-released/</guid><description>&lt;p&gt;A common unit test assert I need to do is compare all the property values of one object to another.  For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[Test]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;TestSaveWorks&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Create a value to save.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;expectedDto&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;SomeDto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ValueOne&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ValueTwo&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Blah&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Save the value.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;_someDbService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dtoToSave&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Load the value from the database. The DTO ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// should have been set by the save.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;actualDto&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_someDbService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expectedDto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expectedDto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueOne&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EqualTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actualDto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueOne&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expectedDto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueTwo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Is&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EqualTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;actualDto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ValueTwo&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this test we only have two properties to test but if the object has 10 plus properties to test that would be quite onerous.   I often forget to update the tests after I add a new property to the object.&lt;/p&gt;</description></item><item><title>Today I Learned How to Run NUnit Tests for a .NET Core Project in TeamCity</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-run-nunit-tests-for-a-net-core-project-in-teamcity/</link><pubDate>Thu, 12 Oct 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-run-nunit-tests-for-a-net-core-project-in-teamcity/</guid><description>&lt;p&gt;In &lt;a href="https://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt; you can&amp;rsquo;t use the usual &lt;a href="https://confluence.jetbrains.com/display/TCD10/NUnit"&gt;NUnit Runner&lt;/a&gt; to run .NET Core unit tests.  At least I couldn&amp;rsquo;t get it to work.  I&amp;rsquo;m sure this will be fixed in the future but for now the below works for me.  I got lots of inspiration from &lt;a href="https://blog.jetbrains.com/teamcity/2016/11/teamcity-dotnet-core/"&gt;this&lt;/a&gt; TeamCity blog post.&lt;/p&gt;
&lt;p&gt;For this example I&amp;rsquo;ll use the &lt;a href="https://github.com/saturdaymp/NConstraints"&gt;NConstraints&lt;/a&gt; project.  It contains a .NET Standard project (SaturdayMP.Constraints) that we want to test and two .NET Core Test projects (SaturdayMP.Constratints.Test and TestClient).&lt;/p&gt;</description></item><item><title>Odds Are you Work for a Small Business</title><link>https://nftb.saturdaymp.workers.dev/odds-are-you-work-for-a-small-business/</link><pubDate>Wed, 11 Oct 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/odds-are-you-work-for-a-small-business/</guid><description>&lt;p&gt;If I was a betting man I would bet you work for a small company (99employees or less).  Odds are I would be right half the time.  How did I come up with those numbers?  Using some math and stats I found on the Internet.&lt;/p&gt;
&lt;p&gt;About &lt;a href="http://www.greaterfool.ca/2017/09/25/the-overlords/"&gt;24%&lt;/a&gt; of the working population are public employees (i.e. employed by government).  The remaining &lt;a href="http://www.ic.gc.ca/eic/site/061.nsf/eng/h_03018.html#point2-1"&gt;76%&lt;/a&gt; are employed by private companies with just a hair under 70% working for a company of less then 100 employees.&lt;/p&gt;</description></item><item><title>Importance of Spouses in Small Businesses</title><link>https://nftb.saturdaymp.workers.dev/importance-of-spouses-in-small-businesses/</link><pubDate>Wed, 04 Oct 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/importance-of-spouses-in-small-businesses/</guid><description>&lt;p&gt;Starting a new business is hard.  In &lt;a href="https://www.ic.gc.ca/eic/site/061.nsf/eng/h_rd02468.html#toc-04"&gt;2010 study&lt;/a&gt; just over half of new business in Canada survive 5 years or more and only 30% survive 10 years.  Similar &lt;a href="https://www.bls.gov/bdm/entrepreneurship/entrepreneurship.htm"&gt;statics&lt;/a&gt; for our neighbours in the south.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/10/Canadas-Performance-from-2001-to-2006-on-Key-Indicators-of-Entrepreneurial-Performance.png"&gt;&lt;img src="images/Canadas-Performance-from-2001-to-2006-on-Key-Indicators-of-Entrepreneurial-Performance.webp" alt="Canada&amp;rsquo;s Performance from 2001 to 2006 on Key Indicators of Entrepreneurial Performance"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/10/Survival-rates-of-establishment-1994-2015.png"&gt;&lt;img src="images/Survival-rates-of-establishment-1994-2015.webp" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.saturdaymp.com/"&gt;Saturday Morning Productions&lt;/a&gt; has been around for 7 1/2 years, if &lt;a href="https://nftb.saturdaymp.com/saturday-mp-turns-6-for-real/"&gt;my maths are correct&lt;/a&gt;.  Our odds of surviving this long are about 45%.  Another way to look at it is if 100 business opened in 2009 then only 45 are still around today.&lt;/p&gt;</description></item><item><title>My Takeaway from Reading Meatball Sundae</title><link>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-meatball-sundae/</link><pubDate>Wed, 27 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-meatball-sundae/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/09/Meatball-Sundae-Cover.jpg"&gt;&lt;img src="images/Meatball-Sundae-Cover.webp" alt="Meatball Sundae Cover"&gt;&lt;/a&gt;Book:&lt;/strong&gt; &lt;a href="https://www.goodreads.com/book/show/2210223.Meatball_Sundae"&gt;&lt;em&gt;Meatball Sundae: Is Your Marketing out of Sync?&lt;/em&gt;&lt;/a&gt; &lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="http://www.sethgodin.com"&gt;Seth Godin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My takeaway from Meatball Sundae is don&amp;rsquo;t use a new marketing trend because it&amp;rsquo;s the hip new thing to do.  Make sure the marketing you do aligns with your business.  If the new marketing you does not align either change your business or don&amp;rsquo;t bother with the new marketing.&lt;/p&gt;
&lt;p&gt;The book was written in 2007 and focuses mostly on marketing using the web but the basic idea applies to any new marketing technology.  Just because others companies use &lt;a href="https://www.youtube.com/watch?v=XPGgTy5YJ-g"&gt;dream ads&lt;/a&gt; doesn&amp;rsquo;t mean you need too.&lt;/p&gt;</description></item><item><title>Today I Learned How to Lock a Dependency to a Specific Version in Project JSON</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-lock-a-dependency-to-a-specific-version-in-project-json/</link><pubDate>Tue, 26 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-lock-a-dependency-to-a-specific-version-in-project-json/</guid><description>&lt;p&gt;While upgrading the &lt;a href="https://github.com/nunit/nunit.xamarin"&gt;NUnitXmarin&lt;/a&gt; project the project maintainers &lt;a href="https://github.com/nunit/nunit.xamarin/pull/102"&gt;asked me&lt;/a&gt; lock the version of NUnit to a specific version.  They where also kind enough to provided a link to a &lt;a href="https://stackoverflow.com/questions/39070297/project-json-specify-exact-version-of-nuget-dependency/42336241#42336241"&gt;possible solution&lt;/a&gt;.  Lets test if it works.&lt;/p&gt;
&lt;p&gt;First lets review how NuGet &lt;a href="https://docs.microsoft.com/en-us/nuget/consume-packages/dependency-resolution"&gt;resolves dependencies&lt;/a&gt;.  If you specify a dependency version the standard way, i.e. just listing the version number with not brackets, NuGet tries to find the version you specified of the next highest version.&lt;/p&gt;</description></item><item><title>My Takeaway from Reading Option B</title><link>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-option-b/</link><pubDate>Fri, 22 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/my-takeaway-from-reading-option-b/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/09/OptionBBookCover.jpg"&gt;&lt;img src="images/OptionBBookCover.webp" alt="Option B Book Cover"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Book:&lt;/strong&gt; &lt;a href="https://optionb.org/book"&gt;&lt;em&gt;Option B: Facing Adversity, Building Resilience, and Finding Joy&lt;/em&gt;&lt;/a&gt; &lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/Sheryl_Sandberg"&gt;Sheryl Sandberg&lt;/a&gt;, &lt;a href="http://www.adamgrant.net/"&gt;Adam Grant&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Option B&lt;/em&gt; is not what I thought it would be about.  I thought it would be about what to do when your first plan fails for some reason.  Like plans you consciously made, such as a business plan, trip, etc.&lt;/p&gt;
&lt;p&gt;Turns out the book is coming up with an option B for plans you didn&amp;rsquo;t even think you where making.  Such as assuming your family won&amp;rsquo;t die or won&amp;rsquo;t get seriously ill.  It is Sheryl Sandberg&amp;rsquo;s account of her husbands unexpected passing how she dealt with it.  She talks to others who dealt with death of loved ones and also what research says about dealing with death.  It does focus on other issues such as illness and other major life tragedies but mostly about death.&lt;/p&gt;</description></item><item><title>Notes: Upgrade NUnit.Xamarin to NUnit 3.8.1</title><link>https://nftb.saturdaymp.workers.dev/notes-upgrade-nunit-xamarin-to-nunit-3-8-1/</link><pubDate>Thu, 21 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/notes-upgrade-nunit-xamarin-to-nunit-3-8-1/</guid><description>&lt;p&gt;The notes I took when trying to upgrade the &lt;a href="https://github.com/nunit/nunit.xamarin"&gt;NUnit Xamarin&lt;/a&gt; project to NUnit 3.8.1.  The reason I did this was to fix issue &lt;a href="https://github.com/nunit/nunit.xamarin/issues/87"&gt;#87&lt;/a&gt;.  When I try to us NUnit Xamarin on another project it fails with the following error:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;D/Mono ( 2233): Assembly Loader probing location: &amp;#39;System.Runtime.Loader&amp;#39;. 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F/monodroid-assembly( 2233): Could not load assembly &amp;#39;System.Runtime.Loader&amp;#39; during startup registration. 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F/monodroid-assembly( 2233): This might be due to an invalid debug installation.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Remember these are just notes and lack the polish [what polish? &amp;ndash;Ed] of my other &lt;a href="https://nftb.saturdaymp.com/category/software-development/today-i-learned/"&gt;technical articles&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>PSA: Arduino H Bridge is Sharp and Pointy</title><link>https://nftb.saturdaymp.workers.dev/psa-arduino-h-bridge-is-sharp-and-pointy/</link><pubDate>Mon, 18 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/psa-arduino-h-bridge-is-sharp-and-pointy/</guid><description>&lt;p&gt;Just a quick public service announcement (PSA) that the Arduino H Bridge is sharp and pointy.  Both my daughter and myself hurt our fingers but only I was lucky enough to draw blood when one of the H Bridge pins got stuck under my finger nail.  I mean look at this insect looking pointy bastard.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/09/HBridgeTop_mini.jpg"&gt;&lt;img src="images/HBridgeTop_mini.webp" alt="H Bridge Top"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/09/HBridgeBottom_mini.jpg"&gt;&lt;img src="images/HBridgeBottom_mini.webp" alt="H Bridge Bottom"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All that pain and blood was worth it as we did finally get the lesson 10 (Zoetrope) from the &lt;a href="https://store.arduino.cc/usa/arduino-starter-kit"&gt;Arduino Start Kit&lt;/a&gt; working.  We couldn&amp;rsquo;t get the example as shown in the book to work because we didn&amp;rsquo;t understand how the H Bridge worked.&lt;/p&gt;</description></item><item><title>Today I Learned How to Automate Objective-c Builds in TeamCity</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-automate-objective-c-builds-in-teamcity/</link><pubDate>Fri, 15 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-automate-objective-c-builds-in-teamcity/</guid><description>&lt;p&gt;Several months ago I discussed how to &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-1-compiling-the-objective-c-library/"&gt;manually build an objective-c project&lt;/a&gt; so it can be consumed by a &lt;a href="https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/"&gt;Xamarin Binding Project&lt;/a&gt;.  In this post I show how to automate the building of the objective-c project.  In my case I need to automate the building of the &lt;a href="https://github.com/Boris-Em/BEMCheckBox"&gt;BEMCheckBox&lt;/a&gt; project but hopefully you can generalize this specific example for your own needs.&lt;/p&gt;
&lt;p&gt;For this post I&amp;rsquo;ll assume you have a &lt;a href="https://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt; server setup along with a TeamCity build agent on a Mac.  For help installing a TeamCity server see the &lt;a href="https://confluence.jetbrains.com/display/TCD10/Installation+Quick+Start"&gt;official documentation&lt;/a&gt;.  For help installing a Mac build agent please see my &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-install-a-teamcity-build-agent-on-a-mac/"&gt;previous post&lt;/a&gt; and/or the &lt;a href="https://confluence.jetbrains.com/display/TCD10/Setting+up+and+Running+Additional+Build+Agents"&gt;official documentation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>First Edmonton .NET Group Talk of the 2017-2018 Season is September 18th</title><link>https://nftb.saturdaymp.workers.dev/first-edmonton-net-group-talk-of-the-2017-2018-season-is-september-18th/</link><pubDate>Wed, 13 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/first-edmonton-net-group-talk-of-the-2017-2018-season-is-september-18th/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/08/EdmontonNETUserGroupLogo.jpeg"&gt;&lt;img src="images/EdmontonNETUserGroupLogo.webp" alt="Edmonton .NET User Group Logo"&gt;&lt;/a&gt;The first &lt;a href="https://www.meetup.com/preview/Edmonton-NET-User-Group"&gt;Edmonton .NET User Group (EDMUG)&lt;/a&gt; talk of the 2017-2018 season is this Monday, September 18th.  The talk is by &lt;a href="https://www.isaveutime.com/"&gt;Shenyi Bao&lt;/a&gt; and is titled Web Site Performance Tuning.  All the details can be found &lt;a href="https://www.meetup.com/preview/Edmonton-NET-User-Group/events/242896361"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please also don&amp;rsquo;t forget about the EDMUG survey.  If you are part of the EDMUG group, or are thinking of joining, please take a couple minutes to fill out the &lt;a href="https://www.surveymonkey.com/r/5PKRNLB"&gt;survey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally we are always looking for engaging and passionate speakers for the EDMUG meetups.  If you, or someone you know, would like to present please let us know by e-mailing &lt;a href="chris.cumming@saturdaymp.com"&gt;chris.cumming@saturdaymp.com&lt;/a&gt; or &lt;a href="info@edmug.net"&gt;info@edmug.net&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Today I Learned How to Install a TeamCity Build Agent on a Mac</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-install-a-teamcity-build-agent-on-a-mac/</link><pubDate>Mon, 11 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-install-a-teamcity-build-agent-on-a-mac/</guid><description>&lt;p&gt;When I was first figuring out how to port the &lt;a href="https://github.com/Boris-Em/BEMCheckBox"&gt;BEMCheckBox&lt;/a&gt; to &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox"&gt;Xamarin&lt;/a&gt; I built the &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-1-compiling-the-objective-c-library/"&gt;framework manually&lt;/a&gt;.  This is obviously not a good long term solution so I set about figuring out how to automate the build.  The first step was to install the TeamCity build agent on the Mac.  The official TeamCity documentation on how to do this can be found &lt;a href="https://confluence.jetbrains.com/display/TCD10/Setting+up+and+Running+Additional+Build+Agents"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First a little bit about my setup.  My TeamCity server is on a Azure virtual machine (i.e. it&amp;rsquo;s in the cloud).  My Mac build machine (Mac Book Pro) is sitting beside me in my basement office.  Some of the steps below might differ if your setup is different, such as having the TeamCity server and Mac build machine on the same network.&lt;/p&gt;</description></item><item><title>Edmonton .NET User Group Survey</title><link>https://nftb.saturdaymp.workers.dev/edmonton-net-user-group-survey/</link><pubDate>Fri, 08 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/edmonton-net-user-group-survey/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/08/EdmontonNETUserGroupLogo.jpeg"&gt;&lt;img src="images/EdmontonNETUserGroupLogo.webp" alt="Edmonton .NET User Group Logo"&gt;&lt;/a&gt;If you are part of the &lt;a href="https://www.meetup.com/preview/Edmonton-NET-User-Group"&gt;Edmonton .NET User Group&lt;/a&gt; or are thinking of joining then please fill out this &lt;a href="https://www.surveymonkey.com/r/5PKRNLB"&gt;survey&lt;/a&gt;.  The survey will help us plan out the 2017-2018 year.  The survey will only take a couple minutes so fill it out during your next coffee break by clicking &lt;a href="https://www.surveymonkey.com/r/5PKRNLB"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t live in Edmonton?  Then you should join your city&amp;rsquo;s &lt;a href="https://www.meetup.com/topics/dotnet/"&gt;local friendly .NET group&lt;/a&gt;.  Not a .NET developer then join a local friendly group that talks about technology you are interested in.&lt;/p&gt;</description></item><item><title>Sabbatical is Over, Looking for Work</title><link>https://nftb.saturdaymp.workers.dev/sabbatical-is-over-looking-for-work/</link><pubDate>Thu, 07 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/sabbatical-is-over-looking-for-work/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/09/ZigZiglarWorkJobQuote.jpg"&gt;&lt;img src="images/ZigZiglarWorkJobQuote-255x300.webp" alt="Zig Ziglar Work Job Quote"&gt;&lt;/a&gt;The leaves are starting to change, the days are getting shorter, and the garden is ready to harvest.  That means fall is here in all it&amp;rsquo;s glory.  It also means my summer sabbatical is over.&lt;/p&gt;
&lt;p&gt;I spent my sabbatical teaching myself &lt;a href="https://www.xamarin.com/"&gt;mobile phone development&lt;/a&gt; and working on &lt;a href="https://www.arduino.cc/"&gt;Arduino&lt;/a&gt; projects with my daughter.  While I enjoyed my sabbatical I&amp;rsquo;m looking forward to working again.  It feels good to serve others and be rewarded with multi-coloured &lt;a href="https://twitter.com/daveramsey/status/401348059625308161?lang=en"&gt;certificates of appreciation&lt;/a&gt; with &lt;a href="http://www.worldatlas.com/articles/who-s-on-canadian-money.html"&gt;The Queen or Prime Ministers&lt;/a&gt; faces on them on them (i.e  money).&lt;/p&gt;</description></item><item><title>Thank You Liv</title><link>https://nftb.saturdaymp.workers.dev/thank-you-liv/</link><pubDate>Tue, 05 Sep 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/thank-you-liv/</guid><description>&lt;p&gt;After almost a year hard work Liv has reached her goal and been accepted to the &lt;a href="http://www.edmontonpolice.ca/"&gt;Edmonton Police Service&lt;/a&gt; (EPS).  Needless to say she was a bit excited when she got the call.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/09/LivGettingEPSPhoneCall.jpg"&gt;&lt;img src="images/LivGettingEPSPhoneCall.webp" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately joining the EPS means Liv no longer has time to work with Saturday MP.  At least in the immediate future.  That means there will be a drought of cartoons and a decrees in qualty qulity quaity quality of the blog and social media posts.  We are as sad as you are but also happy Liv was able to accomplish her goal.&lt;/p&gt;</description></item><item><title>Do you Still Need to Compress Pictures?</title><link>https://nftb.saturdaymp.workers.dev/do-you-still-need-to-compress-pictures/</link><pubDate>Wed, 30 Aug 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/do-you-still-need-to-compress-pictures/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/08/mini-comp-logo.png"&gt;&lt;img src="images/mini-comp-logo.webp" alt="Mini-Compressor Logo"&gt;&lt;/a&gt;I hope you had a great summer vacation.  We sure did and are trying squeeze in a mini-vacation before the summer is officially over after the &lt;a href="https://www.statutoryholidays.com/labourday.php"&gt;Labour Day long weekend&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now that your summer vacation is over you want to share your pictures with friends, family, subscribers, and strangers on the Internet.  How do you do that?&lt;/p&gt;
&lt;p&gt;Today you just login to &lt;a href="https://www.facebook.com/"&gt;Facebook&lt;/a&gt;, &lt;a href="https://www.flickr.com/"&gt;Flickr&lt;/a&gt;, &lt;a href="https://www.snapchat.com"&gt;Snapchat&lt;/a&gt;, &lt;a href="https://www.icloud.com/"&gt;iCloud&lt;/a&gt;, &lt;a href="https://photos.google.com/"&gt;Google Photos&lt;/a&gt; (formally Picasa), &lt;a href="https://www.shutterfly.com/"&gt;Shutterfly&lt;/a&gt;, etc, and upload your pictures.  If you took the pictures with your phone your picture might have been auto-magically uploaded to iCloud or Google.  You don&amp;rsquo;t need to worry about the size of the picture or how much memory it consumes.  Often the service will compress your picture on the fly as needed.&lt;/p&gt;</description></item><item><title>Looking for Speakers for the Edmonton .NET User Group</title><link>https://nftb.saturdaymp.workers.dev/looking-for-speakers-for-the-edmonton-net-user-group/</link><pubDate>Mon, 28 Aug 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/looking-for-speakers-for-the-edmonton-net-user-group/</guid><description>&lt;p&gt;&lt;a href="https://nftb.saturdaymp.com/wp-content/uploads/2017/08/EdmontonNETUserGroupLogo.jpeg"&gt;&lt;img src="images/EdmontonNETUserGroupLogo.webp" alt="Edmonton .NET User Group Logo"&gt;&lt;/a&gt;Are you passionate about software development and want to share your passion with others?  If so then the &lt;a href="https://www.meetup.com/Edmonton-NET-User-Group/"&gt;Edmonton .NET Users Group&lt;/a&gt; is looking for you. Specifically as the newly elected &lt;a href="https://www.meetup.com/Edmonton-NET-User-Group/pages/23883329/Executive_Team_2017_-_2018/"&gt;Program Director&lt;/a&gt; I&amp;rsquo;m looking for you to speak at one of our meetups.&lt;/p&gt;
&lt;p&gt;Already a member?  That&amp;rsquo;s even better.  Don&amp;rsquo;t hold back, share with the group.&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t have be a world-renowned speaker.  In fact, the .NET Users Group is a friendly and supportive environment for first time speakers.  The biggest thing we ask for is passion and willingness to share your knowledge.&lt;/p&gt;</description></item><item><title>Today I Learned How to Create a Xamarin iOS Binding for Objective-C Libraries - Part 4 The Actual Binding</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-4-the-actual-binding/</link><pubDate>Wed, 16 Aug 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-4-the-actual-binding/</guid><description>&lt;p&gt;This is the 4th and final part about incorporating an objective-c library in Xamarin.  In my case I&amp;rsquo;m binding &lt;a href="https://github.com/Boris-Em/BEMCheckBox"&gt;BEMCheckBox&lt;/a&gt;.  In &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-3-using-sharpie-to-create-binding-interface/"&gt;part 3&lt;/a&gt; we used Sharpie to create a C# interface for the BEMCheckBox.  In this post we will show how to use that interface. Finally you can find a working example of BEMCheckBox in Xamarin iOS &lt;a href="https://github.com/saturdaymp/XPlugins.iOS.BEMCheckBox"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First take the APIDefinitions.cs and Structs.cs files in a location accessible to Visual Studio.  Also take the BEMCheckBox.framework folder and move this location accessible to Visual Studio.  For me this means moving the files to my Windows computer.&lt;/p&gt;</description></item><item><title>Today I Learned How to Create a Xamarin iOS Binding for Objective-C Libraries - Part 3 Using Sharpie to Create Binding Interface</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-3-using-sharpie-to-create-binding-interface/</link><pubDate>Mon, 14 Aug 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-3-using-sharpie-to-create-binding-interface/</guid><description>&lt;p&gt;This is the 3rd part about using the &lt;a href="https://github.com/Boris-Em/BEMCheckBox"&gt;BEMCheckBox&lt;/a&gt;, an Objective-C library, in Xamarin.  Part 1 described how to compile the BEMCheckBox library using Xcode.  &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-2-combining-libraries/"&gt;Part 2&lt;/a&gt; showed how to combine the multiple libraries we compiled from Part 1 into one library.  In this part I&amp;rsquo;ll describe how to use Sharpie to create the C# API interface.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://developer.xamarin.com/guides/cross-platform/macios/binding/objective-sharpie/"&gt;Sharpie&lt;/a&gt; is a tool that reads the header files in the BEMCheckBox framework and extract a C# interface.  We could create the interface manually but it&amp;rsquo;s easier if we let technology do some of the work for us.  Don&amp;rsquo;t worry about this job being replaced by a robot as we will have to manually edit the file after it&amp;rsquo;s generated, at least for BEMCheckBox.  Download the sharpie tool &lt;a href="https://download.xamarin.com/objective-sharpie/ObjectiveSharpie.pkg"&gt;here&lt;/a&gt; and read more about the sharpie &lt;a href="https://developer.xamarin.com/guides/cross-platform/macios/binding/objective-sharpie/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Kids Thinking Outside the Box - Favourite Cheese</title><link>https://nftb.saturdaymp.workers.dev/kids-thinking-outside-the-box-favourite-cheese/</link><pubDate>Sun, 13 Aug 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/kids-thinking-outside-the-box-favourite-cheese/</guid><description>&lt;p&gt;Transcript of my wife talking to my daughter&amp;rsquo;s grade 6 friend:&lt;/p&gt;
&lt;p&gt;Wife: &amp;ldquo;What is your favourite cheese?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Friend: &amp;ldquo;Grated!&amp;rdquo;&lt;/p&gt;</description></item><item><title>Today I Learned How to Create a Xamarin iOS Binding for Objective-C Libraries - Part 2 Combining Libraries</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-2-combining-libraries/</link><pubDate>Wed, 09 Aug 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-2-combining-libraries/</guid><description>&lt;p&gt;This is part 2 of creating a iOS Binding for the Objective-C Library &lt;a href="https://github.com/Boris-Em/BEMCheckBox"&gt;BEMCheckBox&lt;/a&gt;.  In &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-1-compiling-the-objective-c-library/"&gt;part 1&lt;/a&gt; we compiled the Xcode project into two separate libraries.  One for iphones (ARM architecture) and one for iOS simulators (x86/x64 architecture).&lt;/p&gt;
&lt;p&gt;In this post I&amp;rsquo;ll discuss how to combine two libraries into one that contains all the architectures.  If you fail to combine the libraries then you will get errors when you bind to Xamarin.  If you only have the iphone library then it won&amp;rsquo;t run on the simulator and vice versa.&lt;/p&gt;</description></item><item><title>Today I Learned How to Create a Xamarin iOS Binding for Objective-C Libraries - Part 1 Compiling the Objective-C Library</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-1-compiling-the-objective-c-library/</link><pubDate>Thu, 03 Aug 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-xamarin-ios-binding-for-objective-c-libraries-part-1-compiling-the-objective-c-library/</guid><description>&lt;p&gt;There is no checkbox for &lt;a href="https://www.xamarin.com/forms"&gt;Xamarin Forms&lt;/a&gt; applications.  This is a problem because I wanted a checkbox in a application I&amp;rsquo;m working on.  A switch wasn&amp;rsquo;t going to cut it.&lt;/p&gt;
&lt;p&gt;After a bit of research I found that Android had &lt;a href="https://developer.android.com/reference/android/widget/CheckBox.html"&gt;native checkbox&lt;/a&gt;.  Half my problem was solved.  I celebrated by eating a cookie.&lt;/p&gt;
&lt;p&gt;Then I ran into a problem because iOS does not have a native checkbox control.  I found others had solved this problem by creating a iOS button and adding a checkbox image to it.  One image for checked and one for unchecked.  This works but it means I can&amp;rsquo;t easily change the colour, size, etc. of the checkbox.  Any changes would require me to create new images.  Using MS Paint or GIMP is not my strong suit.&lt;/p&gt;</description></item><item><title>You Can't Just Turn Creativity On Like A Faucet</title><link>https://nftb.saturdaymp.workers.dev/you-cant-just-turn-creativity-on-like-a-faucet/</link><pubDate>Mon, 17 Jul 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/you-cant-just-turn-creativity-on-like-a-faucet/</guid><description>&lt;p&gt;Lately, Chris has been working on Xamarin notifications in Android, which you would have gathered from his recent blog posts. I have been tasked with designing an icon to go with this work. I&amp;rsquo;ve designed a few things before (Scary Sun being my best work), but this task seemed to be especially vexing.&lt;/p&gt;
&lt;p&gt;How would I come up with something that captures the concepts of Xamarin, Saturday Morning Productions,  and notifications? It seemed like a lot to fit into a very small space. Now, when I think of being notified for something, I immediately think of bells. Like alarm clock bells. I drew a few iterations of an icon with a bell, but honestly, they looked kinda dumb. I&amp;rsquo;m not sure anyone would look at them and connect the three things together that I just mentioned. I wondered if I would get a flash of inspiration if I just let it percolate around my brain a bit.&lt;/p&gt;</description></item><item><title>Today I Learned How to Handle Local Notifications in Xamarin on Android</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-handle-local-notifications-in-xamarin-on-android/</link><pubDate>Wed, 21 Jun 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-handle-local-notifications-in-xamarin-on-android/</guid><description>&lt;p&gt;In my &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-create-a-local-notification-in-xamarin-android/"&gt;previous example&lt;/a&gt; I detailed how to &lt;a href="https://nftb.saturdaymp.com/today-i-learned-how-to-create-a-local-notification-in-xamarin-android/"&gt;schedule notifications in Xamarin on Android&lt;/a&gt; but didn&amp;rsquo;t show the Xamarin Forms application reacting to that specific notification.  Let&amp;rsquo;s fix that.&lt;/p&gt;
&lt;p&gt;First override the &lt;a href="https://developer.xamarin.com/api/member/Android.App.Activity.OnNewIntent/p/Android.Content.Intent/"&gt;OnNewIntent&lt;/a&gt; method in the MainActivity.  We override this method so notifications will work if the application is currently running or is stopped and the notification started the application.  In the &lt;a href="https://developer.xamarin.com/api/member/Android.App.Activity.OnNewIntent/p/Android.Content.Intent/"&gt;OnNewIntent&lt;/a&gt; method you put code that makes sure it&amp;rsquo;s a notification you want to respond to then extracts any needed information from the notification.  An example is below:&lt;/p&gt;</description></item><item><title>Simplify, Simplify...</title><link>https://nftb.saturdaymp.workers.dev/simplify-simplify/</link><pubDate>Tue, 30 May 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/simplify-simplify/</guid><description>&lt;p&gt;The great philosopher Henry David Thoreau once said: &amp;ldquo;Simplify, simplify.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I actually didn&amp;rsquo;t know that Thoreau said that until I saw a reference to that quote in a Calvin &amp;amp; Hobbes comic. But that&amp;rsquo;s another story.&lt;/p&gt;
&lt;p&gt;You might be wondering why we at Saturday Morning Productions haven&amp;rsquo;t written any blog updates about our Goal Buddy App project. Well, that&amp;rsquo;s because we have reached a bit of an impasse. Our master-coder Chris has written quite a few updates on the first version, which focused on scheduling tasks and having reminders for those tasks. It was cool seeing the app come together. But we started to wonder: how was this any different than using a calendar app?&lt;/p&gt;</description></item><item><title>First Beta Release of the Xamarin Notification Plugin (Version 0.3.0-RC2)</title><link>https://nftb.saturdaymp.workers.dev/first-beta-release-of-the-xamarin-notification-plugin-version-0-3-0-rc2/</link><pubDate>Wed, 24 May 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/first-beta-release-of-the-xamarin-notification-plugin-version-0-3-0-rc2/</guid><description>&lt;p&gt;The first beta version of the Xamarin Notification Plugin has been &lt;a href="https://github.com/saturdaymp/XPlugins.Notifications/releases/tag/0.3.0-RC2"&gt;released&lt;/a&gt;.  This plugin allows you to send local notifications easily using Xamarin.  You can find the release on &lt;a href="https://www.nuget.org/packages/SaturdayMP.XPlugin.Notifications?NormalizedVersion=0.3.0-rc0002"&gt;NuGet&lt;/a&gt; under &amp;ldquo;&lt;a href="https://www.nuget.org/packages/SaturdayMP.XPlugin.Notifications"&gt;SaturdayMP.XPlugin.Notifications&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;More details and documentation can be found on the &lt;a href="https://github.com/saturdaymp/XPlugins.Notifications"&gt;GitHub page&lt;/a&gt;.  You can provide feedback to us (bugs, features, etc) by entering a issue &lt;a href="https://github.com/saturdaymp/XPlugins.Notifications/issues"&gt;here&lt;/a&gt;.  Finally if you want the bleeding edge check out the &lt;a href="https://www.myget.org/feed/saturdaymp/package/nuget/SaturdayMP.XPlugin.Notifications"&gt;MyGet feed&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>So Long For Now, Our Original Goal Buddy</title><link>https://nftb.saturdaymp.workers.dev/so-long-for-now-our-original-goal-buddy/</link><pubDate>Mon, 10 Apr 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/so-long-for-now-our-original-goal-buddy/</guid><description>&lt;p&gt;Chris and I are late to the party, bidding our &lt;a href="https://nftb.saturdaymp.com/the-vinyl-cafe-so-long-for-now/"&gt;fond farewells to Stuart McLean&lt;/a&gt;.  But it wouldn&amp;rsquo;t be right to not pay our respects to the person who motivated us through many a chore.&lt;/p&gt;
&lt;p&gt;Long before Saturday Morning Productions or Goal Buddy were even conceived, we were spending our Saturday mornings building a cold storage room under the stairs in our then-new house.  We can honestly say it is the opening riff of the theme music and the sound of the storyteller&amp;rsquo;s voice that encouraged us to get sawing and painting.  We even emailed him back then to let him know the impact he had on our routine.  Years later, during jam-making and harvest seasons, we have his show to thank for the completed room.&lt;/p&gt;</description></item><item><title>Stack Overflow Developer Survey 2017</title><link>https://nftb.saturdaymp.workers.dev/stack-overflow-developer-survey-2017/</link><pubDate>Wed, 29 Mar 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/stack-overflow-developer-survey-2017/</guid><description>&lt;p&gt;&lt;a href="https://stackoverflow.com/insights/survey/2017"&gt;&lt;img src="images/StackOverflowDeveloperSurveyResults2017.webp" alt="Stack Overflow Developer Survey Results 2017"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The results of the &lt;a href="https://stackoverflow.com/insights/survey/2017"&gt;Stack Overflow Developer Survey 2017&lt;/a&gt; are live.  Some surprising highlights for me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most developers surveyed are &lt;a href="https://stackoverflow.com/insights/survey/2017#developer-profile-ethnicity"&gt;white&lt;/a&gt; &lt;a href="https://stackoverflow.com/insights/survey/2017#developer-profile-gender"&gt;male&lt;/a&gt; &lt;a href="https://stackoverflow.com/insights/survey/2017#developer-roles"&gt;web developers&lt;/a&gt;.  Just kidding, this was not surprising at all.&lt;/li&gt;
&lt;li&gt;More than &lt;a href="https://stackoverflow.com/insights/survey/2017#developer-profile-parents-education-level"&gt;50% of developers&amp;rsquo; parents had a university degree&lt;/a&gt; of some type.  I wonder what the parent&amp;rsquo;s education level is like for other occupations?&lt;/li&gt;
&lt;li&gt; &lt;a href="https://stackoverflow.com/insights/survey/2017#technology-programming-languages"&gt;SQL is the 2nd most popular programming language&lt;/a&gt;.  Surprising to me because I don&amp;rsquo;t think of SQL as a programming language. Not sure why.  Maybe because you don&amp;rsquo;t run a SQL application but an application that uses SQL.  Guess I have to change my thinking.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/insights/survey/2017#technology-most-loved-dreaded-and-wanted-languages"&gt;Most dreaded language is VB6&lt;/a&gt; which is what I started my professional career with.  Not sure why people dislike it so much.  Maybe it has more to do with the fact most VB6 projects are old and it&amp;rsquo;s hard to get a VB6 development environment setup.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://stackoverflow.com/insights/survey/2017#technology-most-loved-dreaded-and-wanted-platforms"&gt;most dreaded platform is Sharepoint&lt;/a&gt;, which is something I&amp;rsquo;ve never liked and actively avoid.  Glad it&amp;rsquo;s not just me.&lt;/li&gt;
&lt;li&gt;Visual Studio is a very popular IDE but the &lt;a href="https://stackoverflow.com/insights/survey/2017#technology-most-popular-developer-environments-by-occupation"&gt;second most popular was Notepad++&lt;/a&gt;.  I assume that everyone has &lt;a href="https://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt; installed on their workstation.  Unless you are a sysadmin then you like Vim.  Don&amp;rsquo;t forget to &lt;a href="http://stackoverflow.com/questions/11828270/how-to-exit-the-vim-editor"&gt;quit Vim&lt;/a&gt; it&amp;rsquo;s Esc-q or Esc-wq if you want to save and quit.&lt;/li&gt;
&lt;li&gt;Most developers outside of the United States are &lt;a href="https://stackoverflow.com/insights/survey/2017#work-salaries-by-geography"&gt;underpaid&lt;/a&gt; when you translate their salary to USD.  I wonder if this is because of the currently strong US dollar and if the difference wouldn&amp;rsquo;t have been so high &lt;a href="http://www.xe.com/currencycharts/?from=USD&amp;amp;to=CAD&amp;amp;view=10Y"&gt;5 years ago&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Git won the &lt;a href="https://stackoverflow.com/insights/survey/2017#work-version-control"&gt;version control war&lt;/a&gt; over Mercurial despite me personally liking Mercurial better.  Surprisingly Subversion is used more than Mercurial.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Save&lt;/p&gt;</description></item><item><title>Success at last!</title><link>https://nftb.saturdaymp.workers.dev/success-at-last/</link><pubDate>Tue, 21 Mar 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/success-at-last/</guid><description>&lt;p&gt;Update: My last blog post was about my unsuccessful attempt at the APREP, which is the physical assessment part of the Edmonton Police Service&amp;rsquo;s hiring process. I passed on my second attempt, which was on February 13! It went so much better the second time, and not just because I didn&amp;rsquo;t wipe out (although not wiping out did help).&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what was really different: my attitude. The first time I attempted the APREP, I was thinking about all the people I was afraid to let down. Ultimately, I was afraid of letting myself down, and not just all the people who were supporting me. It was the worst possible attitude I could have approached the situation with, because if you tell yourself &amp;ldquo;don&amp;rsquo;t screw up&amp;rdquo; then chances are, you are going to screw up.&lt;/p&gt;</description></item><item><title>Today I Learned How To Create Xamarin iOS and Android Unit Tests</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-xamarin-ios-and-android-unit-tests/</link><pubDate>Thu, 16 Mar 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-xamarin-ios-and-android-unit-tests/</guid><description>&lt;p&gt;I&amp;rsquo;m currently working on a &lt;a href="https://github.com/saturdaymp/XPlugins.Notifications"&gt;notification plugin&lt;/a&gt; for &lt;a href="https://www.xamarin.com/forms"&gt;Xamarin Forms&lt;/a&gt; and wanted to setup some unit tests.  The problem is my code accesses the device-specific notification systems in iOS and Android.  This means I can&amp;rsquo;t just run my unit tests on Windows.  Instead I need to run the unit tests in a iOS or Android environment.  In my case this means an emulator.&lt;/p&gt;
&lt;p&gt;How to do that?  Use the &lt;a href="https://github.com/nunit/nunit.xamarin"&gt;NUnit 3 Xamarin Runners&lt;/a&gt;.  It was not clear how to correctly create the test projects but the way that worked for me was this.&lt;/p&gt;</description></item><item><title>The Vinyl Cafe - So Long For Now</title><link>https://nftb.saturdaymp.workers.dev/the-vinyl-cafe-so-long-for-now/</link><pubDate>Sun, 12 Mar 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/the-vinyl-cafe-so-long-for-now/</guid><description>&lt;p&gt;A couple of weeks ago, we at Saturday Morning Productions learned that Stuart Maclean, of CBC&amp;rsquo;s &lt;a href="https://www.vinylcafe.com/"&gt;The Vinyl Cafe&lt;/a&gt;, passed away of melanoma. It was a loss felt keenly by all of us (Liv, Ada and Chris). When I (Liv) started working at Saturday MP, I was happy to discover that I wasn&amp;rsquo;t the only Vinyl Cafe listener on the team. Stuart&amp;rsquo;s Dave and Morley stories cracked me up on a regular basis, and some of the musicians he had as guests over the years had become regulars on my playlists (especially Owen Pallett and Harmony Trowbridge).&lt;/p&gt;</description></item><item><title>Making Lemonade...</title><link>https://nftb.saturdaymp.workers.dev/making-lemonade/</link><pubDate>Sat, 11 Feb 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/making-lemonade/</guid><description>&lt;p&gt;On January 16th I took a flying spill when I tried to drag a huge dude-sized dummy for 50 feet. There I was, lying on the gym floor, elbows bloodied and pants torn, with an astounded audience looking just as horrified as I was. How did I get there?&lt;/p&gt;
&lt;p&gt;*sound of a record needle being ripped off the record*&lt;/p&gt;
&lt;p&gt;Wait. Let me back up a bit. That Monday I took a run at the EPS physical assessment. The APREP. It stands for &amp;ldquo;Alberta something something something.&amp;rdquo; Maybe one of the P&amp;rsquo;s stands for policing. Probably. I should look that up. It&amp;rsquo;s a two part test, with the first part being a timed obstacle course that includes walls, stairs, nefarious equipment and - yep, right at the end when you&amp;rsquo;re tired - dragging a dummy. You have to finish in under 2 minutes and 10 seconds.&lt;/p&gt;</description></item><item><title>Why I'm not a fan of New Year's Resolutions</title><link>https://nftb.saturdaymp.workers.dev/why-im-not-a-fan-of-new-years-resolutions/</link><pubDate>Mon, 09 Jan 2017 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/why-im-not-a-fan-of-new-years-resolutions/</guid><description>&lt;p&gt;Wow, we are already one week into 2017. The Christmas decorations are put away, the leftovers are eaten, and I have to get used to writing the correct year. So far it&amp;rsquo;s going well, although my brain had a glitch last week where I kept writing &amp;ldquo;2012.&amp;ldquo;It&amp;rsquo;s also the time where I keep getting asked what my New Year&amp;rsquo;s resolutions are. My standard answer has been &amp;ldquo;get more sleep and eat more food.&amp;rdquo; It&amp;rsquo;s not really a serious answer, because I am not a fan of New Year&amp;rsquo;s resolutions.&lt;/p&gt;</description></item><item><title>Merry Christmas from Saturday Morning Productions</title><link>https://nftb.saturdaymp.workers.dev/merry-christmas-from-saturday-morning-productions/</link><pubDate>Sun, 25 Dec 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/merry-christmas-from-saturday-morning-productions/</guid><description>&lt;p&gt;Merry Christmas everyone! We can hardly believe how quickly 2016 has gone by and that the new year is almost here.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2016/12/xmas3.jpg"&gt;&lt;img src="images/xmas3-300x254.webp" alt="xmas3"&gt;&lt;/a&gt;So many things have happened that it&amp;rsquo;s going to be a challenge to summarize them all here without making you read for the next hour. But hey, challenges are fun! This year Ada got a brand-new full time job that she will start in the new year. She and her family also traveled to Hong Kong and China, and saw tons of interesting things including the Great Wall and the Forbidden City. Chris worked hard on &lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2016/12/xmas2.jpg"&gt;&lt;img src="images/xmas2-300x254.webp" alt="xmas2"&gt;&lt;/a&gt;developing Goal Buddy (as did Ada!), as well as his other computer projects. He said that his big goal is to become a better communicator.&lt;/p&gt;</description></item><item><title>Today I Learned How to Create a Local Notification in Xamarin Android</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-local-notification-in-xamarin-android/</link><pubDate>Wed, 14 Dec 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-how-to-create-a-local-notification-in-xamarin-android/</guid><description>&lt;p&gt;In Android you can schedule a notification that shows immediately using the &lt;a href="https://developer.android.com/reference/android/app/NotificationManager.html"&gt;NotificationManager&lt;/a&gt;.  However, if you are like me, &lt;a href="https://www.youtube.com/watch?v=qQEIRAnNY4o"&gt;awesome&lt;/a&gt;, and want to schedule a notification for a future date you need to use the Android &lt;a href="https://developer.android.com/reference/android/app/AlarmManager.html"&gt;AlarmManager&lt;/a&gt;.  The alarm manager lets you schedule an &lt;a href="https://developer.android.com/reference/android/content/Intent.html"&gt;Intent&lt;/a&gt; to occur at a later date.&lt;/p&gt;
&lt;p&gt;Quick aside, do you know what an &lt;a href="http://stackoverflow.com/questions/6578051/what-is-an-intent-in-android"&gt;Intent is in Android&lt;/a&gt;?  I kind of understand them but not as in-depth as I would like.  Please forgive any errors I make when I setup the alarm intent below.&lt;/p&gt;</description></item><item><title>Operation Add Author Profile Pictures (OAAPP)</title><link>https://nftb.saturdaymp.workers.dev/operation-add-author-profile-pictures-oaapp/</link><pubDate>Wed, 07 Dec 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/operation-add-author-profile-pictures-oaapp/</guid><description>&lt;p&gt;You may have noticed that our smiling faces now accompany our posts. This is to prevent confusion among our long time readers who may think that Chris is joining the Edmonton Police (he’s not, Liv is) or that Liv has a behemoth garden (she doesn’t, I do). Also, so you can see our smiling faces.&lt;/p&gt;
&lt;p&gt;If you are looking to do the same for your blog, you can follow the steps I took.&lt;/p&gt;</description></item><item><title>Riding the Dinosaur: The Joys of Old Technology</title><link>https://nftb.saturdaymp.workers.dev/riding-the-dinosaur-the-joys-of-old-technology/</link><pubDate>Tue, 29 Nov 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/riding-the-dinosaur-the-joys-of-old-technology/</guid><description>&lt;p&gt;Using old technology is a bit like driving a Model T on the Indy Speedway. It can be a bit scary, but most of the time it is incredibly frustrating and everything seems &lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2016/11/dino1.jpg"&gt;&lt;img src="images/dino1-297x300.webp" alt="dino1"&gt;&lt;/a&gt;to be zooming past at a mind-boggling rate of speed.&lt;/p&gt;
&lt;p&gt;Case in point: I have a version of Photoshop from 2002. It&amp;rsquo;s a robust program that I know inside out. It can do a lot of things, and when it came out, it was pretty mind-blowing. But, it&amp;rsquo;s from 2002. That means it is 14 years old. In Computer Years, that is like comparing something from the Jurassic Period to Present Day.&lt;/p&gt;</description></item><item><title>Today I Learned Bait and Switch for .NET PCL's</title><link>https://nftb.saturdaymp.workers.dev/today-i-learned-bait-and-switch-for-net-pcls/</link><pubDate>Tue, 22 Nov 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/today-i-learned-bait-and-switch-for-net-pcls/</guid><description>&lt;p&gt;If you have worked with Xamarin for longer than me (i.e. one year) then you probably already know about PCL bait and switch technique, especially if you consumed one of the many &lt;a href="https://github.com/xamarin/XamarinComponents"&gt;Xamarin plugins&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As usual I&amp;rsquo;m late to the party.  It&amp;rsquo;s November 2016 and the &lt;a href="http://log.paulbetts.org/the-bait-and-switch-pcl-trick/"&gt;first article&lt;/a&gt; I found was written May 2014.  There is also a good video about the bait and switch technique for creating &lt;a href="https://university.xamarin.com/guestlectures/using-developing-plugins-for-xamarin"&gt;Xamarin plugins&lt;/a&gt; which I think was recorded in September 2014.  That said, I&amp;rsquo;m more an Early Adopter or Early Majority than an Innovator.&lt;/p&gt;</description></item><item><title>When the going gets tough, the tough have a training montage</title><link>https://nftb.saturdaymp.workers.dev/when-the-going-gets-tough-the-tough-have-a-training-montage/</link><pubDate>Tue, 08 Nov 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/when-the-going-gets-tough-the-tough-have-a-training-montage/</guid><description>&lt;p&gt;Unforeseen circumstances.&lt;/p&gt;
&lt;p&gt;It isn&amp;rsquo;t a phrase that makes you jump for joy. Instead, it is a vaguely menacing combination of words that foretells of something throwing your plans off the rails. For me, it was a leg injury. If you have been following this blog series, you&amp;rsquo;ll know that I have been training to apply to the Edmonton Police Service. Things were falling into place. I had collected all the supporting documents for my application (transcripts, first aid certification and so forth), and was studying hard to write the entrance exams. I was in the best shape of my life, thanks to working with a personal trainer.&lt;/p&gt;</description></item><item><title>Today I Learned Xamarin Push Notification Plugins</title><link>https://nftb.saturdaymp.workers.dev/this-week-i-learned-october-19th-to-25th/</link><pubDate>Fri, 04 Nov 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/this-week-i-learned-october-19th-to-25th/</guid><description>&lt;p&gt;I learned this week that there is no built-in support for &lt;a href="https://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/"&gt;Push Notifications in Xamarin Forms&lt;/a&gt;.  On the plus side there are several open source projects trying to fill this hole.  The one that has caught my eye is &lt;a href="https://github.com/edsnider/Xamarin.Plugins"&gt;edsnider/Xamarin.Plugins&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It only supports local notifications but that is all I need right now.  I like it because it looks simple to use.  The only downside is it looks abandoned.  Hopefully I&amp;rsquo;ll get around to actually trying it this week.&lt;/p&gt;</description></item><item><title>Notes on Converting Mini-Compressor to UWP Application (Trying to at Least)</title><link>https://nftb.saturdaymp.workers.dev/notes-on-converting-mini-compressor-to-uwp-application-trying-to-at-least/</link><pubDate>Sun, 23 Oct 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/notes-on-converting-mini-compressor-to-uwp-application-trying-to-at-least/</guid><description>&lt;p&gt;I was inspired to get Mini-Compressor to UWP into the Windows 10 Store a while back this summer. I saw this video several months ago when it was called Project Centennial:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://channel9.msdn.com/Events/Build/2015/2-692"&gt;https://channel9.msdn.com/Events/Build/2015/2-692&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then a couple weeks ago there was a form you could fill out and a Microsoft employee would help you convert your application.  So I filled out the form about my tiny little application called &lt;a href="http://saturdaymp.com/mini_comp"&gt;Mini-Compressor&lt;/a&gt; and was surprised when I heard back.  The fellow was very helpful but in the end we couldn&amp;rsquo;t get Mini-Compressor ported to UWP.&lt;/p&gt;</description></item><item><title>Math is hard.</title><link>https://nftb.saturdaymp.workers.dev/math-is-hard/</link><pubDate>Sun, 18 Sep 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/math-is-hard/</guid><description>&lt;p&gt;Math.&lt;/p&gt;
&lt;p&gt;Few people tell me that they love math.&lt;/p&gt;
&lt;p&gt;It brings back memories of sitting in a small, windowless room, back in grade 11, with my math tutor. My tutor smoked cigars. Lots of cigars. He smelled like a giant cigar. I really didn&amp;rsquo;t want to be there, but my math grades were abysmal. I tried - superficially, at best - to memorize the patterns of algebra, but desire to receive a non-abysmal grade in that class was overshadowed by a large teenage helping of &amp;ldquo;not giving a &amp;hellip;&amp;rdquo;&lt;/p&gt;</description></item><item><title>The Olympics versus Accountability</title><link>https://nftb.saturdaymp.workers.dev/olympics/</link><pubDate>Fri, 26 Aug 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/olympics/</guid><description>&lt;p&gt;Routines are great. Sure, they can be difficult to get up and running, but once you have one, things don&amp;rsquo;t feel quite right when you miss part of it. For the last many months I have been going to the gym every other day. For the last month, I&amp;rsquo;ve been going to &lt;a href="http://www.joineps.ca/NewsAndEvents/Run%20with%20Recruiters.aspx"&gt;Run With Recruiters&lt;/a&gt; twice per week. I was feeling pretty darn good about that and was in the best shape of my life. I wrote all these things on my calendar, and felt a great sense of accomplishment every time I looked at it.&lt;/p&gt;</description></item><item><title>What I Learned this Summer - 2016 Edition</title><link>https://nftb.saturdaymp.workers.dev/what-i-learned-this-summer-2016-edition/</link><pubDate>Sat, 30 Jul 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/what-i-learned-this-summer-2016-edition/</guid><description>&lt;p&gt;I am about 1 month early on my traditional “what I learned this summer” blog post, but I&amp;rsquo;m learning so felt the need to write it down!  For those following along at home, here are the lessons covered: &lt;a href="http://nftb.saturdaymp.com/what-we-did-this-summer-and-two-discoveries-we-made/"&gt;2012&lt;/a&gt;, &lt;a href="http://nftb.saturdaymp.com/what-we-did-this-summer-2013/"&gt;2013&lt;/a&gt;, and &lt;a href="http://nftb.saturdaymp.com/mm-end-of-the-summer-rainbow/"&gt;2014&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And now, in the midsummer of 2016, amid the rainstorms, travelling fairs and mosquito bites, I declare that I am learning a lot.  The software developer that I’m married to (&lt;a href="http://saturdaymp.com/about"&gt;Chris&lt;/a&gt;) is a lot like an artist or a &lt;a href="http://granvilleisland.com/"&gt;Granville Island&lt;/a&gt; shopkeeper.&lt;/p&gt;</description></item><item><title>Push It Real Good - Version Control in Real Life</title><link>https://nftb.saturdaymp.workers.dev/push-it-real-good-version-control-in-real-life/</link><pubDate>Thu, 21 Jul 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/push-it-real-good-version-control-in-real-life/</guid><description>&lt;p&gt;Several weeks ago, Chris gave Ada and I a mini-workshop on &amp;ldquo;&lt;a href="https://en.wikipedia.org/wiki/Version_control"&gt;version control&lt;/a&gt;.&amp;rdquo; Wondering what that is? (I certainly was, at the time) In non-programmer&amp;rsquo;s terms, version control describes how, when several people are working on the same code, they make sure that they are working on the most up-to-date version that includes everyone&amp;rsquo;s edits. Version control uses some pretty entertain&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2016/07/explainingversioncontrol.jpg"&gt;&lt;img src="images/explainingversioncontrol-253x300.webp" alt="explainingversioncontrol"&gt;&lt;/a&gt;ing jargon; for example, you &amp;ldquo;pull&amp;rdquo; the most recent version of a file, and then &amp;ldquo;push&amp;rdquo; the changes you&amp;rsquo;ve made. Each change must be &amp;ldquo;committed&amp;rdquo; to update the file. That way, there aren&amp;rsquo;t a slew of working copies floating out there and no one knows which is the most recent version. Visually, you could think of it like this:&lt;/p&gt;</description></item><item><title>Fixing MSBuild not Exiting</title><link>https://nftb.saturdaymp.workers.dev/fixing-msbuild-not-exiting/</link><pubDate>Wed, 22 Jun 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/fixing-msbuild-not-exiting/</guid><description>&lt;p&gt;After upgrading to Visual Studio Xamarin 4.1 from 4.0 our TeamCity build suddenly stopped working.  Actually it was working but won&amp;rsquo;t stop working.  The build would get hang after rebuilding out solution to create the IPA file.&lt;/p&gt;
&lt;p&gt;The step in question looked like:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2016/06/SolutionRunnerThatHangs.png"&gt;&lt;img src="images/SolutionRunnerThatHangs.webp" alt="Solution Runner That Hangs"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The TeamCity logs looked like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[09:23:28][Foo\Foo.iOS\Foo.iOS.csproj] _SayGoodbye
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[09:23:28][_SayGoodbye] SayGoodbye
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[09:23:28][SayGoodbye] Compute signature for bin\iPhone\Release\FooiOS.app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The build would also hang if I logged into the build machine and ran the msbuild via the command line.  However, the build would not hang if built via Visual Studio.&lt;/p&gt;</description></item><item><title>What Would Goal Buddy Say - Part II</title><link>https://nftb.saturdaymp.workers.dev/what-would-goal-buddy-say-part-ii/</link><pubDate>Fri, 17 Jun 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/what-would-goal-buddy-say-part-ii/</guid><description>&lt;p&gt;I have been mastering small (and some medium-sized) goals, like working out every other day, purchasing a study manual for the APCAT (the written entrance exam for EPS), volunteering twice weekly at the John Howard Society, and driving around with a tiny police cruiser perched on my dash (for good luck, of course), to name a few. Committing to do each one of those is far easier than declaring, &amp;ldquo;I want to be a police officer,&amp;rdquo; and then feeling hopelessly lost and overwhelmed because the entire endeavour is so daunting that one might not know where to start.&lt;/p&gt;</description></item><item><title>Best Productivity Article</title><link>https://nftb.saturdaymp.workers.dev/best-productivity-article/</link><pubDate>Mon, 06 Jun 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/best-productivity-article/</guid><description>&lt;p&gt;As we continue to work on Goal Buddy I&amp;rsquo;ve been reading books and research papers about goal setting and its cousin productivity.  Productivity is just a fancy word for saying &amp;ldquo;get stuff done&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Some interesting articles/podcasts about productivity I recently read/listened to are:&lt;/p&gt;
&lt;p&gt;Freaknomics: &lt;a href="http://freakonomics.com/podcast/how-to-be-more-productive/"&gt;How to be More Productive&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Joshua Kennon: &lt;a href="http://www.joshuakennon.com/secrets-highly-productive-people/"&gt;The Secrets of Highly Productive People&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However, these articles don&amp;rsquo;t hold a candle to this best article about productivity.  Be warned that reading this article will shake you to your core.  You will re-think how you approach work and view your co-workers in a different light.  Make sure you are sitting down.&lt;/p&gt;</description></item><item><title>What Would Goal Buddy Say?</title><link>https://nftb.saturdaymp.workers.dev/what-would-goal-buddy-say/</link><pubDate>Fri, 20 May 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/what-would-goal-buddy-say/</guid><description>&lt;p&gt;Support can make or break a goal. When we circulated a survey several months ago, asking the general public how (and if) they would use an app to help them achieve a goal, a large number of respondents indicated that lack of support was a primary reason that they had not met goals in the past. Support often comes from an external source - another human being close to you, typically - but powerful support also exists in electronic guises like social media platforms, forums, online discussion groups, and in apps.&lt;/p&gt;</description></item><item><title>The Scary Sun and Other Things</title><link>https://nftb.saturdaymp.workers.dev/the-scary-sun-and-other-things/</link><pubDate>Fri, 06 May 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/the-scary-sun-and-other-things/</guid><description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;[caption id=&amp;ldquo;attachment_1141&amp;rdquo; align=&amp;ldquo;alignleft&amp;rdquo; width=&amp;ldquo;169&amp;rdquo;]&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2016/05/iphone_welcomescreen_portrait.png"&gt;&lt;img src="images/iphone_welcomescreen_portrait-169x300.webp" alt="The very first Splash Screen. That sun can see dead people."&gt;&lt;/a&gt; The very first Splash Screen. That sun can see dead people.[/caption]&lt;/p&gt;
&lt;p&gt;I spent the better part of last Sunday doodling on an ancient version of Photoshop (ver. 5.5, but I&amp;rsquo;m dating myself), working on the welcome screen for our Goal Buddy App. I laboured over rolling green hills (going to town with the &amp;lsquo;gradient&amp;rsquo; tool), soaring mountains (gradient!) and ethereal blue sky (gradient!). It&amp;rsquo;s the first &lt;em&gt;serious&lt;/em&gt; version of the splash screen yet, and I wouldn&amp;rsquo;t argue that the previous version was a strange three-way mix of scary, hilarious and creepy.&lt;/p&gt;</description></item><item><title>Goals - One Bite at a Time</title><link>https://nftb.saturdaymp.workers.dev/one-bite-at-a-time/</link><pubDate>Sun, 17 Apr 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/one-bite-at-a-time/</guid><description>&lt;p&gt;We have been in the &amp;ldquo;goals&amp;rdquo; mindset at SMP for a quite a few months now, as you&amp;rsquo;ve doubtless noticed. We (and by &amp;ldquo;we&amp;rdquo; I mean &amp;ldquo;Chris&amp;rdquo;) spend most of our time on the programming end of things, but also continue to learn about the psychology of goal-setting. We ponder: why do we achieve some goals but not others? Support? Determination? How realistic is the goal?&lt;/p&gt;
&lt;p&gt;We set goals for ourselves and discuss them weekly. Mine have all been fairly pedestrian and, hence, very achievable. I felt a huge sense of satisfaction when I cleaned and organized the storage room, but knew that action was unlikely to alter the course of my existence. I practice the bass guitar three times per week. It feels great to rock out, but my downstairs neighbour just doesn&amp;rsquo;t share my appreciation of Billy Idol or Def Leppard (I can&amp;rsquo;t turn the volume above &amp;ldquo;2&amp;rdquo; or he thumps on the ceiling). It took me nearly two months to put the Christmas decorations back in the storage locker, and it felt good to finally get those cursed tote boxes out of my office.&lt;/p&gt;</description></item><item><title>Stats tell you a lot...or do they?</title><link>https://nftb.saturdaymp.workers.dev/stats-tell-you-a-lot-or-do-they/</link><pubDate>Tue, 01 Mar 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/stats-tell-you-a-lot-or-do-they/</guid><description>&lt;p&gt;I vividly remember my stats professor, back when I took my undergrad degree. He had a nearly unintelligible Croatian accent, barely spoke above a whisper, and liked to write on the overhead with squiggly scribbles as he spoke/whispered. In short, I could hardly understand him, hear him, or read what he was writing, but he instilled in me that statistics are among the most misused metrics out there.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll explain why. It&amp;rsquo;s easy to say that &amp;ldquo;a majority of people believe in aliens.&amp;rdquo; Or that &amp;ldquo;the average weight of hamsters in Slovenia is 200 grams.&amp;rdquo; Or &amp;ldquo;90% of survey respondents agreed that a Provincial Task Force on Walking While Texting&amp;rdquo; is a good idea. What do these numbers really mean? What constitutes a &amp;ldquo;majority?&amp;rdquo; How many hamsters were weighed in Slovenia? Did the researchers take into accounts things like breed, age and sex of the hamsters? Of this &amp;ldquo;90%&amp;rdquo; did the researchers consider things like: how many people did you ask? What was the survey return rate? Are the responses liked to other influencing factors? It&amp;rsquo;s just to easy to use words like &amp;ldquo;average&amp;rdquo; or &amp;ldquo;majority&amp;rdquo; and not give the context of sample size. It makes a pretty big difference if you asked 10 people in a survey versus 1000. How would you know if those 10 people were representative of the general population?&lt;/p&gt;</description></item><item><title>Connect to Android Emulator from VirtualBox</title><link>https://nftb.saturdaymp.workers.dev/connect-to-android-emulator-from-virtualbox/</link><pubDate>Tue, 23 Feb 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/connect-to-android-emulator-from-virtualbox/</guid><description>&lt;p&gt;I do all my development inside virtual machines.  This allows me to keep separate development environment for different projects and clients.  I wanted to keep this tradition for developing mobile applications but that turned out to be a bit of challenge.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://xamarin.com/android-player"&gt;Xamarin Android Player&lt;/a&gt; and the &lt;a href="https://www.genymotion.com"&gt;Genymotion emulators&lt;/a&gt; both use &lt;a href="https://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; to emulate the Android phone or tablet.  This works great if you don&amp;rsquo;t develop in a virtual machine.  If you develop inside a virtual machine you run into a major problem:  you can&amp;rsquo;t run a virtual machine inside a virtual machine.&lt;/p&gt;</description></item><item><title>How Goal Buddy Got Its Name</title><link>https://nftb.saturdaymp.workers.dev/how-goal-buddy-got-its-name/</link><pubDate>Mon, 08 Feb 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/how-goal-buddy-got-its-name/</guid><description>&lt;p&gt;We are working away on &amp;ldquo;Goal Buddy,&amp;rdquo; our goal app (also known as &amp;ldquo;your little goal-achieving friend). I&amp;rsquo;ve noticed that the most popular apps have short and catchy names (which are certainly more effective and memorable than something like &lt;em&gt;thesuperbestappeverthathelpsyoubeyourverysuperbestself&lt;/em&gt;). Goal Buddy&amp;rsquo;s name came about back in November when I was working on some concept sketches, sitting at the dining table and hoping that some bolt of inspiration would find me.&lt;/p&gt;</description></item><item><title>Mini-Compressor and Windows 10 Upgrade</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-and-windows-10-upgrade/</link><pubDate>Thu, 28 Jan 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-and-windows-10-upgrade/</guid><description>&lt;p&gt;We’ve recently had some inquiries regarding Mini-Compressor on Windows 10. More specifically, customers who have been using it without problems, and are now experiencing trouble after upgrading to Windows 10 from Windows 7 or 8.&lt;/p&gt;
&lt;p&gt;We hope this will help those of you potentially with this problem.&lt;/p&gt;
&lt;p&gt;First of all, Mini-Compressor works on Windows 10.  The problem seems to be when users upgrade to Windows 10.&lt;/p&gt;
&lt;p&gt;After successfully upgrading to Windows 10, you need to uninstall Mini-Compressor then re-install it. If you’re not sure how to do this, here are the steps.&lt;/p&gt;</description></item><item><title>Surprises Using Azure</title><link>https://nftb.saturdaymp.workers.dev/surprises-using-azure/</link><pubDate>Fri, 22 Jan 2016 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/surprises-using-azure/</guid><description>&lt;p&gt;Are you a &lt;a href="https://msdn.microsoft.com/"&gt;MSDN&lt;/a&gt; subscriber?  Thinking about using &lt;a href="https://azure.microsoft.com/"&gt;Azure&lt;/a&gt; because of the &lt;a href="https://azure.microsoft.com/en-us/pricing/member-offers/msdn-benefits/"&gt;sweet sweet credits&lt;/a&gt; you get for being a MSDN subscriber?  Maybe you want to switch because they are one of few cloud providers that have Windows operating systems.&lt;/p&gt;
&lt;p&gt;Well I did switch.  Below are features, or missing features, in Azure that surprised me.&lt;/p&gt;
&lt;h2 id="azure-has-two-interfaces-and-apis"&gt;Azure has two interfaces and APIs&lt;/h2&gt;
&lt;p&gt;When login to Azure for the first time it asks if you want to use the new portal.  Sure you say, why not.  Then you go to create a new virtual machine in the new interface.  When creating the virtual machine you get asked if you want a legacy VM or a fancy new type of VM.  A new VM you say.  Great says Azure and you create the VM.&lt;/p&gt;</description></item><item><title>Happy New Year from Saturday Morning Productions!</title><link>https://nftb.saturdaymp.workers.dev/happy-new-year-from-saturday-morning-productions/</link><pubDate>Wed, 30 Dec 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/happy-new-year-from-saturday-morning-productions/</guid><description>&lt;p&gt;It&amp;rsquo;s almost time to put the Christmas decorations away, take down the lights, and finish digesting that turkey we&amp;rsquo;ve all been working on. We hope you&amp;rsquo;ve all had wonderful holidays surrounded by those you love as well.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve been working on something else too (aside from that turkey, and I think I&amp;rsquo;m nearing the bottom of the roaster now) - our goal app. We&amp;rsquo;ve written about it a bit already, touching more on the technical aspects of things but also about its inception. So where are we now in the process?&lt;/p&gt;</description></item><item><title>Merry Christmas!</title><link>https://nftb.saturdaymp.workers.dev/merry-christmas/</link><pubDate>Thu, 24 Dec 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/merry-christmas/</guid><description>&lt;p&gt;Chris, Ada, Alice, and Liv will be taking some time off to spend time with our family and friends over the holidays.  And hopefully find some time to see the new Star Wars movie.&lt;/p&gt;
&lt;p&gt;The basement office will be dark, well darker than usual, from December 24th to January 3rd.  You can still try to contact us but it might take us a couple days to respond to you.&lt;/p&gt;
&lt;p&gt;We wish you all the best over the holidays.&lt;/p&gt;</description></item><item><title>Mini-Compressor Install Error</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-install-error/</link><pubDate>Tue, 22 Dec 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-install-error/</guid><description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The below issue has been fixed in Mini-Compressor version 1.6.1 which can be found on our &lt;a href="http://saturdaymp.com/downloads"&gt;Download page&lt;/a&gt;.  Thank you for your patience.&lt;/p&gt;
&lt;p&gt;We have confirmed an error when installing Mini-Compressor.  If you get one of the errors below, or something similar, we have a workaround until the error is fixed.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;12002 &lt;a href="https://download.microsoft.com/download/3/3/3/33352088-D63F-431D-8276-D013822D1870/VC"&gt;https://download.microsoft.com/download/3/3/3/33352088-D63F-431D-8276-D013822D1870/VC&lt;/a&gt;_redist.x64.exe&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2015/12/MiniCompressor-12002-Error.png"&gt;&lt;img src="images/MiniCompressor-12002-Error.webp" alt="Mini-Compressor 12002 Error"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Visual C++ &amp;ldquo;14&amp;rdquo; Runtime Libraries (x64) mandatory prerequisite was not correctly installed.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2015/12/MiniCompressor-VisualC14Runtime-Error.png"&gt;&lt;img src="images/MiniCompressor-VisualC14Runtime-Error.webp" alt="Mini-Compressor Visual C++ 14 Runtime Error"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Migrator 0.9.2 Beta Released</title><link>https://nftb.saturdaymp.workers.dev/migrator-0-9-2-beta-released/</link><pubDate>Mon, 07 Dec 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/migrator-0-9-2-beta-released/</guid><description>&lt;p&gt;&lt;a href="https://bitbucket.org/saturdaymp/migrator/overview"&gt;&lt;img src="images/smallgoose.webp" alt="smallgoose"&gt;&lt;/a&gt;Version &lt;strong&gt;0.9.2 (beta)&lt;/strong&gt; of &lt;a href="https://bitbucket.org/saturdaymp/migrator/overview"&gt;Migrator&lt;/a&gt; is now available for &lt;a href="https://bitbucket.org/saturdaymp/migrator/downloads"&gt;download&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release fixed a show stopping issue where Migrator would not work on some older versions of SQL.  It also fixed an issue with the order dependencies are scripted. See the &lt;a href="https://bitbucket.org/saturdaymp/migrator/wiki/Migrator%200.9.2%20Release%20Notes%20(December%206th,%202015)"&gt;release notes&lt;/a&gt; for all the details.&lt;/p&gt;
&lt;p&gt;Documentation about using and installing Migrator can be found at on the &lt;a href="https://bitbucket.org/saturdaymp/migrator/wiki/Home"&gt;wiki&lt;/a&gt;.  If you find a bug with this release please let us know by entering a new &lt;a href="https://bitbucket.org/saturdaymp/migrator/issues?status=new&amp;amp;status=open"&gt;issue&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>We are working on an app!</title><link>https://nftb.saturdaymp.workers.dev/we-are-working-on-an-app/</link><pubDate>Tue, 24 Nov 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/we-are-working-on-an-app/</guid><description>&lt;p&gt;I was a little late to jump on the smart phone bandwagon. I resisted for years, scoffing inwardly at those who wove their way through society, heads down, engrossed in their imaginary worlds of bright screens and black plastic cases. Curiosity got the better of me, though; two years ago I finally caved and acquired an Android. It met a prompt and sudden death when it went sailing off a counter and onto an unforgiving and indifferent concrete floor. I caved and bought a shock-proof case for my next phone the very next day.&lt;/p&gt;</description></item><item><title>The Smiling Goose</title><link>https://nftb.saturdaymp.workers.dev/the-smiling-goose/</link><pubDate>Tue, 10 Nov 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/the-smiling-goose/</guid><description>&lt;p&gt;Migratory animals keep finding me, no matter where I find myself in life. Allow me to introduce myself: my name is Liv, and I am a new member of the Saturday Morning Productions team. I have never taken a computer class in my life, other than keyboarding on a rickety Apple with &amp;ldquo;Alphaworks&amp;rdquo; on one of those giant black floppy disks when I was in junior high, but I somehow found myself sitting at a table with a rather techno-savvy crowd.&lt;/p&gt;</description></item><item><title>Why I Created Migrator</title><link>https://nftb.saturdaymp.workers.dev/why-i-created-migrator/</link><pubDate>Tue, 27 Oct 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/why-i-created-migrator/</guid><description>&lt;p&gt;&lt;img src="images/OUM-300x61.webp" alt="OUM"&gt;&lt;/p&gt;
&lt;p&gt;Once upon a time in the far off land there a young handsome software developer.  This developer married the fairest maiden in the land and together they formed a &lt;a href="http://saturdaymp.com"&gt;company&lt;/a&gt; to slay problem monsters that prevented others from getting stuff done.  After a couple of successful adventures of banishing problem monsters the developer was asked by another problem monster slaying company to help deal with a monster bugging the local government.  The developer agreed to help.&lt;/p&gt;</description></item><item><title>Product Release - Migrator</title><link>https://nftb.saturdaymp.workers.dev/product-release-migrator/</link><pubDate>Tue, 20 Oct 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/product-release-migrator/</guid><description>&lt;p&gt;As the outdoor temperatures quickly drop, the Saturday MP basement dwellers are migrating back to warmth and kicking up productivity. We’ve been working really hard and are so excited to make this announcement!&lt;/p&gt;
&lt;p&gt;We are proud to release &lt;a href="https://bitbucket.org/saturdaymp/migrator"&gt;Migrator&lt;/a&gt; to the public!&lt;/p&gt;
&lt;p&gt;&amp;lt;Intentional dramatic pause&amp;gt;&lt;/p&gt;
&lt;p&gt;Migrator is an easy-to-use, migration tool for SQL Server Databases, inspired by the &lt;a href="http://edgeguides.rubyonrails.org/active_record_migrations.html"&gt;Ruby on Rails migration process&lt;/a&gt;. Use it to migrate database changes between developers and then migrate those changes to the UAT, staging, and production databases.&lt;/p&gt;</description></item><item><title>BIG Announcement (and Cookie Time)</title><link>https://nftb.saturdaymp.workers.dev/big-announcement-and-cookie-time/</link><pubDate>Wed, 16 Sep 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/big-announcement-and-cookie-time/</guid><description>&lt;p&gt;A-hem! Hear-ye hear-ye! After many months of hard work and completely professional, non-wifey nagging, Chris has emerged from the basement victorious!&lt;/p&gt;
&lt;p&gt;A &lt;a href="http://saturdaymp.com/mini_comp"&gt;free trial version of Mini-Compressor&lt;/a&gt; is ready for downloading!  Try before you buy!  That&amp;rsquo;s worth repeating - &lt;a href="http://saturdaymp.com/mini_comp"&gt;trial version of Mini-Compressor&lt;/a&gt;!  Download it now!&lt;/p&gt;
&lt;p&gt;[caption id=&amp;ldquo;attachment_1045&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;300&amp;rdquo;]&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2015/09/Cookie-Time-e1442349920488.jpg"&gt;&lt;img src="images/Cookie-Time-e1442349920488-300x225.webp" alt="Celebratory Cookie Jar from Washington Convention Center"&gt;&lt;/a&gt; Celebratory Cookie Jar from Washington Convention Center[/caption]&lt;/p&gt;
&lt;p&gt;What about the cookies? Check out the &lt;a href="http://saturdaymp.com/manuals/SaturdayMpPrivacyPolicy.pdf"&gt;Privacy Policy&lt;/a&gt; that finally made it to the website!&lt;/p&gt;</description></item><item><title>Happy Father's Day</title><link>https://nftb.saturdaymp.workers.dev/happy-fathers-day/</link><pubDate>Sun, 21 Jun 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/happy-fathers-day/</guid><description>&lt;p&gt;Dear Dad,&lt;/p&gt;
&lt;p&gt;I treasure our life together as father and child! I have learned to love and laugh through our experiences together. From our time together, you have made me want to become a better person!!!&lt;/p&gt;
&lt;p&gt;Thank you for everything and love you!!!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2015/06/David.png"&gt;&lt;img src="images/David-232x300.webp" alt="David"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Feel free to compress pic by using the Mini-Compressor! &lt;a href="http://saturdaymp.com/mini_comp"&gt;http://saturdaymp.com/mini_comp&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Dear Mom...</title><link>https://nftb.saturdaymp.workers.dev/dear-mom/</link><pubDate>Thu, 07 May 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/dear-mom/</guid><description>&lt;p&gt;What does it mean to have a mother? Every mother is very special in our lives.&lt;/p&gt;
&lt;p&gt;She has been a champion throughout our good and lessons that we have had to go through with her support and encouragement.&lt;/p&gt;
&lt;p&gt;Lets celebrate Mother’s Day by remembering and cherishing our mothers and what she has done for each of us. Send a message with a picture of your favorite memory with her and you with your picture compressed via the &lt;a href="http://saturdaymp.com/mini_comp"&gt;Mini-Compressor&lt;/a&gt;!&lt;/p&gt;</description></item><item><title>Welcome, Alice!</title><link>https://nftb.saturdaymp.workers.dev/welcome-alice/</link><pubDate>Mon, 23 Feb 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/welcome-alice/</guid><description>&lt;p&gt;Hello everyone! You must have thought we’ve dropped off the face of the earth, with our last real post being from September&amp;hellip;&lt;/p&gt;
&lt;p&gt;We’re still around.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt; is still alive and well.&lt;/li&gt;
&lt;li&gt;Chris has been working away on a secret project (shhh).&lt;/li&gt;
&lt;li&gt;Ada, in between answering customer Mini-Compressor support questions, briefly forayed into the restaurant world at &lt;a href="http://www.battistacalzone.com/" title="Battista's Calzone Company"&gt;Battista’s Calzone Company&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Although SaturdayMP and Battista’s are very different, we found both are very similar as well:&lt;/p&gt;</description></item><item><title>Saturday MP turns 6 – for real!</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-turns-6-for-real/</link><pubDate>Wed, 11 Feb 2015 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-turns-6-for-real/</guid><description>&lt;p&gt;Again? Didn’t we just have a 6th birthday this time last year? We re-crunched some numbers and re-calibrated our maths. Today is when we should have put 6 candles on the cake. We knew we were older than we looked.&lt;/p&gt;
&lt;p&gt;[caption id=&amp;ldquo;attachment_1032&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;300&amp;rdquo;]&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2015/02/SatMP-6.jpg"&gt;&lt;img src="images/SatMP-6-300x206.webp" alt="SatMP 6th birthday cake"&gt;&lt;/a&gt; Birthday Cake for everyone![/caption]&lt;/p&gt;</description></item><item><title>MM - End of the Summer Rainbow</title><link>https://nftb.saturdaymp.workers.dev/mm-end-of-the-summer-rainbow/</link><pubDate>Mon, 08 Sep 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-end-of-the-summer-rainbow/</guid><description>&lt;p&gt;Summer barely began here at NFTB and here we are at the end of the rainbow. The roundup includes me buying second hand camera – a Canon Eos Rebel XT - from our friend &lt;a href="http://8r4d.com/" title="Brad's 8 Clicks from Nowhere"&gt;Brad&lt;/a&gt;. Thanks, Brad! Now can you show me how to use it?&lt;/p&gt;
&lt;p&gt;Also, somewhere along the way the blog broke, but it was an easy fix. Before school started for the munchkins, we relaxed at our friends’ place near Breton, Alberta, soaking in some sun and some rainbows! A double rainbow, in fact!&lt;/p&gt;</description></item><item><title>Mini-Compressor Monday – Spring Edition continued</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-spring-edition-continued/</link><pubDate>Tue, 10 Jun 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-spring-edition-continued/</guid><description>&lt;p&gt;Well, it’s still not Monday, but it’s still Mini-Compressor season… speaking of seasons, May snow-showers bring June fruit tree flowers. We’re hoping for a bumper crop of Evans cherries and &lt;a href="http://nftb.saturdaymp.com/mm-heart-shaped-delicacy-edition/" title="MM – Heart-shaped Delicacy Edition"&gt;heart-shaped apples&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Feast your eyes:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Taken with iPhone 4S. Total album size = 17.6 MB&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;[flickr_set id=&amp;ldquo;72157645101269012&amp;rdquo;]&lt;/p&gt;
&lt;p&gt;Let’s make-believe that the &lt;em&gt;fictitious&lt;/em&gt; Alberta Fruit Tree Society contacted Saturday MP to send photos to help them decide whether to feature these amazing fruit trees in a &lt;em&gt;fictitious&lt;/em&gt; article. If they decide to run the article, they will send their &lt;em&gt;fictitious&lt;/em&gt; photographer with a really good camera to the Saturday MP house, but we need to convince them first these trees are feature-worthy. The &lt;em&gt;fictitious&lt;/em&gt; stipulation for the photos we send it that they need to be under 5 MB.  It looks like I&amp;rsquo;ll need to use Mini-Compressor to reduce the image sizes.&lt;/p&gt;</description></item><item><title>Mini-Compressor Monday – Spring Edition</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-spring-edition/</link><pubDate>Fri, 30 May 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-spring-edition/</guid><description>&lt;p&gt;Hello dear readers,&lt;/p&gt;
&lt;p&gt;Here is a list of important, yet obvious, things that I would like to point out in today&amp;rsquo;s post:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is not Monday&lt;/li&gt;
&lt;li&gt;We have not been around the blog for a really long time&lt;/li&gt;
&lt;li&gt;It’s finally Spring!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here’s one more thing that’s not obvious, but we need to point out. We’ve re-surfaced from our winter hibernation to discover that our &lt;a href="http://nftb.saturdaymp.com/saturday-mp-celebrates-its-6th-birthday/" title="Birthday Post"&gt;birthday post&lt;/a&gt; had a minor mistake. We didn’t turn 6. We turned 5. Still, big dreams. We partied like we turned 6, in preparation for next year.&lt;/p&gt;</description></item><item><title>MM – Heart-shaped Delicacy Edition</title><link>https://nftb.saturdaymp.workers.dev/mm-heart-shaped-delicacy-edition/</link><pubDate>Fri, 14 Feb 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-heart-shaped-delicacy-edition/</guid><description>&lt;p&gt;We know it’s not Monday, but if you have any doubt as to what heart-themed holiday it is today, check your local retail store!&lt;/p&gt;
&lt;p&gt;This little darling came off our apple tree a few years ago, and I couldn’t resist immortalizing it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Taken with Sony DSC-W580:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;[gallery columns=&amp;ldquo;2&amp;rdquo; ids=&amp;ldquo;1001,1002&amp;rdquo;]&lt;/p&gt;
&lt;p&gt;There you go! With Mini-Compressor, you get all the sweetness with no quality loss (even with a compression index of 50)&lt;/p&gt;</description></item><item><title>Saturday MP celebrates its 6th Birthday!</title><link>https://nftb.saturdaymp.workers.dev/saturday-mp-celebrates-its-6th-birthday/</link><pubDate>Tue, 11 Feb 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mp-celebrates-its-6th-birthday/</guid><description>&lt;p&gt;Today, Saturday MP celebrates its 6th birthday. Thanks for coming on this amazing journey with us!  Here&amp;rsquo;s to smaller pictures but not smaller dreams!&lt;/p&gt;
&lt;p&gt;[gallery columns=&amp;ldquo;2&amp;rdquo; ids=&amp;ldquo;992,993&amp;rdquo;]&lt;/p&gt;</description></item><item><title>MM – More Winter Fun</title><link>https://nftb.saturdaymp.workers.dev/mm-more-winter-fun/</link><pubDate>Mon, 10 Feb 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-more-winter-fun/</guid><description>&lt;p&gt;This weekend, the SatMP crew headed to the &lt;a href="http://www.thecityoflight.ca/" title="Flying Canoe Adventure"&gt;Flying Canoe Adventure&lt;/a&gt;.  We bundled up, hoping to see some pretty lights, expecting to jump back in the car after 20 minutes. Instead, we stayed for 3 hours and had a blast! We took in horse-drawn wagon rides, kick-sledding, bannock, music, tobogganing, flying canoes and created endless memories!&lt;/p&gt;
&lt;p&gt;I sadly only took 3 pictures on my iPhone 4S:&lt;/p&gt;
&lt;p&gt;[gallery ids=&amp;ldquo;994,996,998&amp;rdquo;]&lt;/p&gt;
&lt;p&gt;Using a Mini-Compressor compression index of 90:&lt;/p&gt;</description></item><item><title>Life in the Basement – Olympic Edition</title><link>https://nftb.saturdaymp.workers.dev/life-in-the-basement-olympic-edition/</link><pubDate>Thu, 06 Feb 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/life-in-the-basement-olympic-edition/</guid><description>&lt;p&gt;It’s on! As they say in these parts, “the puck has dropped”. The 2014 Olympic Games have begun. Go, Team!&lt;/p&gt;
&lt;p&gt;While I don’t fancy myself to be an athlete of any sort, I like to think that we basement-dwellers are similar to Olympians (no disrespect intended, of course). Of what little I know about these hard-working athletes, they’re pretty good – some are the best in their fields. Sometimes they win world titles and we don’t pay attention. It’s once every 4 years when we familiarize ourselves with their names and cheer loudly. Then after the flame is extinguished, they fade back into training and winning world titles and we return to our routines.&lt;/p&gt;</description></item><item><title>MM – Ringing in the Year of the Horse</title><link>https://nftb.saturdaymp.workers.dev/mm-ringing-in-the-year-of-the-horse/</link><pubDate>Wed, 29 Jan 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-ringing-in-the-year-of-the-horse/</guid><description>&lt;p&gt;This past weekend we celebrated the upcoming Chinese New Year at a &lt;a href="http://mhoc-ccp.wix.com/cnyc2014" title="Chinese New Year Carnival"&gt;Carnival&lt;/a&gt;! January 31, 2014 begins the Year of the Horse, which is supposed to be a year for quick successes! We wish you all quick successes in your endeavors.&lt;/p&gt;
&lt;p&gt;Us here, we’re enjoying our success, though it hasn’t been quick –we’ll be celebrating Saturday Morning Productions’s 6th birthday in February… (Think of all the things you’ve worked on for 6 years). Here’s when we thank our Mini-Compressor customers and wonderful clients for helping us to build our success story!&lt;/p&gt;</description></item><item><title>MM - A warm up tale</title><link>https://nftb.saturdaymp.workers.dev/mm-a-warm-up-tale/</link><pubDate>Mon, 13 Jan 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-a-warm-up-tale/</guid><description>&lt;p&gt;Those of you in this part of the world will know Edmonton was lucky enough to escape that nasty phenomenon known as the &lt;a href="http://en.wikipedia.org/wiki/2014_North_American_polar_vortex" title="Brrrrr"&gt;Polar Vortex(TM) 2014&lt;/a&gt; that happened last week. However, those of you who know of this part of the world will know we’ve suffered through sub-zero temperature for weeks now (with no catchy brand-name, other than the tag known as “Winter”)&lt;em&gt;&lt;strong&gt;*&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The SatMP family ventured out of the basement and took advantage of the mild temperatures by visiting the &lt;a href="http://deepfreezefest.ca/" title="Edmonton's Deep Freeze Festival"&gt;Deep Freeze Festival&lt;/a&gt;.  It was a lot of fun.&lt;/p&gt;</description></item><item><title>2014!</title><link>https://nftb.saturdaymp.workers.dev/2014/</link><pubDate>Mon, 06 Jan 2014 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/2014/</guid><description>&lt;p&gt;Happy New Year, everyone!&lt;/p&gt;
&lt;p&gt;January is the first month of the New Year. The word January comes from the Latin word &lt;em&gt;janua&lt;/em&gt; which means doorway.  Those of you versed in Roman gods may be familiar with &lt;a href="http://en.wikipedia.org/wiki/Janus" title="Janus opening January?"&gt;&lt;em&gt;Janus&lt;/em&gt;&lt;/a&gt;, the god of beginnings and transitions.&lt;/p&gt;
&lt;p&gt;January, my friends, is the year’s doorway, an entrance into a bright new beginning!&lt;/p&gt;
&lt;p&gt;What does that mean here at SatMP headquarters?&lt;/p&gt;
&lt;p&gt;Not a whole lot.*  Yes, we received some new toys over Christmas including a shiny new kitchen appliance.  On that front, we plan on cooking up the good times.  We’ll continue cooking up great things in the basement as well (&lt;a href="http://saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt; is always ready to ship).  Stay tuned for continued greatness.&lt;/p&gt;</description></item><item><title>MM - Holiday Cheer</title><link>https://nftb.saturdaymp.workers.dev/mm-holiday-cheer/</link><pubDate>Mon, 23 Dec 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-holiday-cheer/</guid><description>&lt;p&gt;Our dear friend Brad at &lt;a href="http://8r4d.com" title="Brad's Blog"&gt;8r4d.com&lt;/a&gt; has kindly loaned us some holiday cheer to share for our final Mini-Compressor Monday of 2013.  DD will have 2 weeks off from school and we fully intend to enjoy some family time, and take in all the celebrations that come our way.&lt;/p&gt;
&lt;p&gt;It looks here that Brad and his crew enjoyed some family time earlier this month: here are 12 lovely shots taken at the &lt;a href="http://www.universityhospitalfoundation.ab.ca/fot/Home_" title="Festival of Trees 2013"&gt;Edmonton Festival of Trees&lt;/a&gt;&lt;em&gt;*&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>MM – In the Spirit</title><link>https://nftb.saturdaymp.workers.dev/mm-in-the-spirit/</link><pubDate>Tue, 10 Dec 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-in-the-spirit/</guid><description>&lt;p&gt;One thing that I love about &lt;a href="http://nftb.saturdaymp.com/category/mini-compressor/mini-compressor-monday/" title="Mini-Compressor Mondays"&gt;Mini-Compressor Monday&lt;/a&gt; is looking through our expansive photo archive for ‘just the right’ photos to share.  Today’s medley features trees and greenery from Christmas present and past.  And let me tell ya how quickly nostalgia sets in for those of us with young children!&lt;/p&gt;
&lt;p&gt;[gallery link=&amp;ldquo;file&amp;rdquo; ids=&amp;ldquo;955,952,964,959,960,961,962,963,968,967,966&amp;rdquo;]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Total album size: 20.5 MB&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cameras: vary from Canon EOS 20D to Konica Minolta DiMAGE G530 to Konica Minolta DiMAGE X50 to iPhone 4S_*_&lt;/p&gt;</description></item><item><title>Mini-Gifting (Tips)</title><link>https://nftb.saturdaymp.workers.dev/mini-gifting-tips/</link><pubDate>Mon, 02 Dec 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-gifting-tips/</guid><description>&lt;p&gt;Today’s Mini-Compressor Monday has been replaced by tips coinciding with Cyber-Monday and the upcoming Holiday gift-giving season, known as December.&lt;/p&gt;
&lt;p&gt;Some customers have told us they will recommend Mini-Compressor to someone in the future, or better yet, already have made the recommendation.  Why stop at a recommendation?  Why not buy a copy for your someone else?  Well… because, Wise SatMPers, you and your basement don’t give us a way to buy now as a gift…&lt;/p&gt;</description></item><item><title>MM – Compressing Real Estate Part 3 of 3</title><link>https://nftb.saturdaymp.workers.dev/mm-compressing-real-estate-part-3-of-3/</link><pubDate>Mon, 25 Nov 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-compressing-real-estate-part-3-of-3/</guid><description>&lt;p&gt;This week we conclude the &lt;a href="http://nftb.saturdaymp.com/category/mini-compressor/mini-compressor-monday/" title="Mini-Compressor Mondays"&gt;Mini-Compressor Mondays&lt;/a&gt; Real Estate series.  You may be relieved if you’re not into fictional real estate.  And if you’re looking for more information about using Mini-Compressor to help sell real estate, by all means, &lt;a href="http://saturdaymp.com/contact" title="Contact a Mini-Compressor expert"&gt;give me a shout&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Today’s property is something that’s closer to what we know in our basement-based world: a bungalow with behemoth garden in a mature neighbourhood within walking distance of most amenities.  It hardly reads like the palatial monstrosity of our first &lt;a href="http://nftb.saturdaymp.com/mm-compressing-real-estate/" title="Palatial Monstrosity"&gt;post&lt;/a&gt;, or the sleek urban condo of our second &lt;a href="http://nftb.saturdaymp.com/mm-compressing-real-estate-part-2/" title="Sleek Imaginary Condo"&gt;post&lt;/a&gt;, but it is a reality and our home, sweet home.&lt;/p&gt;</description></item><item><title>MM – Compressing Real Estate Part 2</title><link>https://nftb.saturdaymp.workers.dev/mm-compressing-real-estate-part-2/</link><pubDate>Mon, 18 Nov 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-compressing-real-estate-part-2/</guid><description>&lt;p&gt;&lt;a href="http://nftb.saturdaymp.com/mm-compressing-real-estate/" title="Mini-Compressor Monday Selling Real Estate Part 1"&gt;Two Mini-Compressor Mondays ago&lt;/a&gt;, we looked at what a fictional real estate posting would look like with pictures compressed to meet an upload maximum of 10 MB.&lt;/p&gt;
&lt;p&gt;We continue the series today with another fictional property**&lt;em&gt;*&lt;/em&gt;** that’s for sale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Urban Heaven - 500 sq ft studio with 1 bath&amp;hellip; Close to all amenities&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A cool fountain in the main lobby welcomes you to this ultra-modern and centrally located building, steps from public transportation.  The first thing you’ll see when entering your studio suite is the view!  There is a spacious living/dining/sleeping room.  The kitchen is complete with upgraded touches like granite counters and stainless steel appliances.  The full bathroom has it all – including in suite laundry!  What more could you want?  Don’t delay, buy today!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>MM - Remembrance Day</title><link>https://nftb.saturdaymp.workers.dev/mm-remembrance-day/</link><pubDate>Mon, 11 Nov 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-remembrance-day/</guid><description>&lt;p&gt;Lest we forget.&lt;/p&gt;
&lt;p&gt;[gallery columns=&amp;ldquo;2&amp;rdquo; ids=&amp;ldquo;925,926&amp;rdquo;]&lt;/p&gt;</description></item><item><title>MM – Compressing Real Estate</title><link>https://nftb.saturdaymp.workers.dev/mm-compressing-real-estate/</link><pubDate>Tue, 05 Nov 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mm-compressing-real-estate/</guid><description>&lt;p&gt;Some of you astute readers may have picked up on my hints in a previous &lt;a href="http://nftb.saturdaymp.com/mini-compressor-monday-fall-favourites/" title="Mini-Compressor Mondays"&gt;Mini-Compressor Monday post&lt;/a&gt; – maybe I really was trying to sell you real estate… No, I’m still trying to sell you on &lt;a href="http://saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt;.  However, since many of our customers want to make their image sizes smaller for their real estate businesses, I thought I’d take November to showcase the possibilities of using Mini-Compressor for real estate purposes.&lt;/p&gt;</description></item><item><title>Mini-Compressor Monday - Hallowe'en Edition</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-halloween-edition/</link><pubDate>Mon, 28 Oct 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-halloween-edition/</guid><description>&lt;p&gt;Trick or Treat!  Our sweet, albeit spooky, neighbour Frankie will drop by this week.  Chez SaturdayMP, Hallowe’en prep for the following year begins as soon as the last Jack-o-Lantern is extinguished!&lt;/p&gt;
&lt;p&gt;This week, I experimented with which compression quality I needed to make Frankie truly scary (and not just an adorable garden ornament).&lt;/p&gt;
&lt;p&gt;[gallery ids=&amp;ldquo;908,914,913,912,911,909&amp;rdquo;]&lt;/p&gt;
&lt;p&gt;[showhide type=&amp;ldquo;post&amp;rdquo; more_text=&amp;ldquo;Show more&amp;hellip;&amp;rdquo; less_text=&amp;ldquo;Show less&amp;hellip;&amp;rdquo;]&lt;/p&gt;
&lt;p&gt;Right off the bat, I picked a compression index of 50**&lt;em&gt;*&lt;/em&gt;** and saw almost no difference, other than size of the jpeg.&lt;/p&gt;</description></item><item><title>Mini-Compressor Monday: Fall Favourites</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-fall-favourites/</link><pubDate>Tue, 22 Oct 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-fall-favourites/</guid><description>&lt;p&gt;For those of you in or near Edmonton, you’ll know that I’ve been longing for summer with &lt;a href="http://nftb.saturdaymp.com/category/mini-compressor/mini-compressor-monday/" title="Mini-Compressor Mondays"&gt;Mini-Compressor Monday posts&lt;/a&gt;, and that autumn has been upon us for many weeks already.&lt;/p&gt;
&lt;p&gt;In our mature neighbourhood, we’re fortunate to walk by big old (red and gold and orange and brown) trees on our way to school.  Being so close to the river valley, everything’s a-colour!  Even the back alleys are pretty.&lt;/p&gt;</description></item><item><title>Mini-Compressor Monday: Thanksgiving Edition</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-thanksgiving-edition/</link><pubDate>Mon, 14 Oct 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-thanksgiving-edition/</guid><description>&lt;p&gt;People all across Canada celebrated Thanksgiving this weekend, including this Saturday MP family!&lt;/p&gt;
&lt;p&gt;Here we are thankful for four distinct seasons, a plentiful harvest (cough, behemoth garden), record sales, gainful contracts and wonderful customers!&lt;/p&gt;
&lt;p&gt;Here is a photo of Edmonton’s famed river valley, taken last October.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2013/10/October-2012-e1381250194873.jpg"&gt;&lt;img src="images/October-2012-e1381250194873-1024x768.webp" alt="October 2012"&gt;&lt;/a&gt;&lt;strong&gt;October 2012.jpg &lt;strong&gt;Total photo size: 2,931 KB&lt;/strong&gt;&lt;/strong&gt; &lt;strong&gt;Taken with iPhone 4S&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I snapped it to show off to friends who live abroad.  With one right-click, I was able to resize the photo to email.&lt;/p&gt;</description></item><item><title>Mini-Compressor Monday: Summer Continued</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-summer-continued/</link><pubDate>Mon, 07 Oct 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-monday-summer-continued/</guid><description>&lt;p&gt;To continue with the Mini-Compressor Monday series, we have another beautiful summer vacation photo to share and another Mini-Compressor happy ending to tell.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2013/10/Kinuseo-e1381168467425.jpg" title="Saturday Morning at Kinuseo Falls"&gt;&lt;img src="images/Kinuseo-e1381168467425-1024x768.webp" alt="Kinuseo"&gt;&lt;strong&gt;Kinuseo Falls&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;in Northern British Columbia&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Total photo size: 2,576 KB&lt;/strong&gt; &lt;strong&gt;Taken with iPhone 4S&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Breathtaking?  Yup!  Immediately shareable?  Not quite.&lt;/p&gt;
&lt;p&gt;[showhide type=&amp;ldquo;post&amp;rdquo; more_text=&amp;ldquo;Show more&amp;hellip;&amp;rdquo; less_text=&amp;ldquo;Show less&amp;hellip;&amp;rdquo;]&lt;/p&gt;
&lt;p&gt;The Uncle_*_ who so graciously boated us to the falls that early Saturday Morning, forgot his camera so we wanted to email this picture, plus a few others of our silly picnic on the sandbar and the ones of the Norwegian cousin getting soaked…  It took 16.4 seconds to attach the uncompressed jpeg alone.  It would take another bit of time to attach the rest, and send the email.&lt;/p&gt;</description></item><item><title>What we did this summer – 2013 edition (Mini-Compressor Monday part 1)</title><link>https://nftb.saturdaymp.workers.dev/what-we-did-this-summer-2013/</link><pubDate>Tue, 01 Oct 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/what-we-did-this-summer-2013/</guid><description>&lt;p&gt;We ate ice cream, climbed mountains, gardened and worked.  Yeah, worked.&lt;/p&gt;
&lt;p&gt;Aside from breaking &lt;a href="http://saturdaymp.com/news/monthly_sales_record_tied"&gt;sales&lt;/a&gt; &lt;a href="http://saturdaymp.com/news/now_trending"&gt;records,&lt;/a&gt; we were also coming up with other ways to explain our wares.&lt;/p&gt;
&lt;p&gt;So, today, we unveil: Mini-Compressor Monday_*_&lt;/p&gt;
&lt;p&gt;In the vernacular of the geeky world I live in, Mini-Compressor Mondays is a series similar to &amp;ldquo;Yarned by You&amp;rdquo; and &amp;ldquo;Fashion Friday&amp;rdquo;, where the blog posts focus on the practical applications of Mini-Compressor.&lt;/p&gt;
&lt;p&gt;Today, for our inaugural post, we present this snake, cleverly named Snake-y.&lt;/p&gt;</description></item><item><title>Mini-Compressor Version 1.4 just Sprouted</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-version-1-4-just-sprouted/</link><pubDate>Thu, 27 Jun 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-version-1-4-just-sprouted/</guid><description>&lt;p&gt;Spring has sprung in the Saturday MP basement!&lt;/p&gt;
&lt;p&gt;We planted some seeds in the late winter, and look what’s sprung! Version 1.4 of &lt;a href="http://saturdaymp.com/mini_comp"&gt;Mini-Compressor&lt;/a&gt;! Get it while it’s fresh.&lt;/p&gt;
&lt;p&gt;Here are some of the features we’re especially proud of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An intelligent error message when trying to compress a non-jpeg file&lt;/li&gt;
&lt;li&gt;The ability to pause while compressing images&lt;/li&gt;
&lt;li&gt;A window from the Start Menu that reminds users to right-click to use Mini-Compressor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of Mini-Compressor’s fabulous features and how to use it are documented in the updated &lt;a href="http://saturdaymp.com/manuals/MiniGuideToMiniCompressor.pdf"&gt;Mini-Guide&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Two Tips When Doing a Fresh Install of Windows 8</title><link>https://nftb.saturdaymp.workers.dev/two-tips-when-doing-a-fresh-install-of-windows-8/</link><pubDate>Sun, 09 Jun 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/two-tips-when-doing-a-fresh-install-of-windows-8/</guid><description>&lt;p&gt;I have two tips when you are doing a fresh install of &lt;a href="http://windows.microsoft.com/en-ca/windows/home" title="Windows 8"&gt;Windows 8&lt;/a&gt; on a &lt;a href="http://www.dell.com/ca/p/xps-13-l321x-mlk/pd" title="Dell XPS 13 Ultrabook"&gt;new laptop&lt;/a&gt; with UEFI BIOS.  Sorry, I mean with &lt;a href="http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface" title="UEFI"&gt;UEFI&lt;/a&gt; firmware interface instead of &lt;a href="http://en.wikipedia.org/wiki/BIOS" title="BIOS"&gt;BIOS&lt;/a&gt; firmware interface.  I think that is more correcter or the correstest way.  I just can’t stop saying “UEFI BIOS”.   “UEFI BIOS”.  See I just did it again.  Next I’ll be saying use “&lt;a href="http://www.theonion.com/articles/google-launches-the-google-for-older-adults,5850/" title="The Google"&gt;The Google&lt;/a&gt;”.&lt;/p&gt;
&lt;p&gt;Let us get back to the two tips.  The first tip is booting your new laptop with UEFI and secure boot enabled from a USB stick with Windows 8 on it.  The problem is the USB stick needs to be formatted as &lt;a href="https://en.wikipedia.org/wiki/File_Allocation_Table" title="FAT32"&gt;FAT32&lt;/a&gt; because UEFI does not recognize &lt;a href="http://en.wikipedia.org/wiki/NTFS" title="NTFS"&gt;NTFS&lt;/a&gt;.  I wonder why this is.  I couldn’t find a reason on The Google.&lt;/p&gt;</description></item><item><title>‘Tis the Season</title><link>https://nftb.saturdaymp.workers.dev/tis-the-season/</link><pubDate>Tue, 30 Apr 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/tis-the-season/</guid><description>&lt;p&gt;&lt;a href="http://nftb.saturdaymp.com/wp-content/uploads/2013/04/Snow-in-Edmonton-e1367327024401.jpg"&gt;&lt;img src="images/Snow-in-Edmonton-e1367327024401-300x225.webp" alt="Snow in Edmonton"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It doesn’t seem to want to stop snowing in Edmonton for some reason, but that’s not the season I’m talking about… I’m talking about the one that concerns the government taking a certain percentage of your earnings every April.&lt;/p&gt;
&lt;p&gt;While walking DD to school last week, she educated me on a fictional &lt;a href="http://en.wikipedia.org/wiki/Queen_of_Fables" title="Queen of Fables"&gt;Queen of Fables&lt;/a&gt; who, for her punishment, was banished to the &lt;a href="http://www.irs.gov/irm/" title="A Tax Manual or The Tax Manual"&gt;US Tax Manual&lt;/a&gt; for eternity!  I then educated DD on the meaning of the phrase “fate worse than death”!&lt;/p&gt;</description></item><item><title>Get’er Dun</title><link>https://nftb.saturdaymp.workers.dev/geter-dun/</link><pubDate>Sat, 06 Apr 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/geter-dun/</guid><description>&lt;p&gt;Every Tuesday night, my business partner and I have a date.  A working date.  It’s in our calendars for 9:00 to 10:30.  The place is always the same – the basement office – so no babysitter is required.  And there’s plenty of parking.  We’ve had this standing date for about a year and a half, since we returned from the &lt;a href="http://businessofsoftware.org/" title="Awesome Conference"&gt;Business of Software conference&lt;/a&gt; in 2011.&lt;/p&gt;
&lt;p&gt;I mentioned in &lt;a href="http://nftb.saturdaymp.com/working-together-part-1/" title="Married to your Basement Partner"&gt;Working Together – Part 1&lt;/a&gt; how SatMP is like our second born child.  Well, like our first born child whom we drive to various extracurricular activities, we need to drive this baby places too.  Only, by driving, we mean staying put, and by places, we mean putting in the time.  When we made this earth shattering discovery, we were both gainfully contracted i.e. day jobs, and found we had a hard time tackling our to-do list.  And boy did the list grow while we were at the conference.  They say the way to eat an elephant* is one bite at a time but those bites are sure tiny when you’re tired and there are competing demands like laundry and bookkeeping.   The obvious time slot would have been our namesake Saturday mornings, but those are now for family activities&amp;hellip;  so during one of our lovely dinners in Boston, we committed ourselves to one whole night a week to pampering our SatMP.&lt;/p&gt;</description></item><item><title>Dealing with Microsoft's SmartScreen Filter Part 2: Getting a Code Signing Certificate</title><link>https://nftb.saturdaymp.workers.dev/dealing-with-microsofts-smartscreen-filter-part-2-getting-a-code-signing-certificate/</link><pubDate>Fri, 15 Mar 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/dealing-with-microsofts-smartscreen-filter-part-2-getting-a-code-signing-certificate/</guid><description>&lt;p&gt;This is part 2 of dealing with &lt;a href="http://windows.microsoft.com/en-CA/windows7/SmartScreen-Filter-frequently-asked-questions-IE9" title="SmartScreen Filter"&gt;Microsoft&amp;rsquo;s SmartScreen&lt;/a&gt; Filter.  You can find the first part &lt;a href="http://nftb.saturdaymp.com/dealing-with-microsofts-smartscreen-filter/" title="Dealing with Microsoft's SmartScreen Filter Part 1"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I figured the best way to deal with SmartScreen filter was to get &lt;a href="http://www.saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/WHQL_Testing" title="Certified for Windows"&gt;Windows 7 certified&lt;/a&gt;.  Windows 8 had just been released but I figured if I could get Windows 7 certified upgrading to Windows 8 certification shouldn&amp;rsquo;t be a problem.  At the time I had not tested Mini-Compressor on Windows 8 but I had done lots of testing on Windows 7.&lt;/p&gt;</description></item><item><title>Working Together – Part 3</title><link>https://nftb.saturdaymp.workers.dev/working-together-part-3/</link><pubDate>Wed, 27 Feb 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/working-together-part-3/</guid><description>&lt;p&gt;Some of you have asked for a little more detail on our physical workspace, as an extension on our &lt;a href="http://nftb.saturdaymp.com/working-together-part-1/" title="Working Together - Part 1"&gt;series&lt;/a&gt; - &lt;a href="http://nftb.saturdaymp.com/working-together-part-2/" title="Working Together - Part 2"&gt;working with a spouse&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This may be taken as a belated February Hallmark Holiday post.&lt;/p&gt;
&lt;p&gt;Our basement-based office is in the basement.  We cannot make this clearer when we say only one of us gets the window seat.  As in, there is only one window seat.  I like the afternoon sun hitting me as I, ahem, analyze businesses.  Chris doesn’t like it near him as he develops software.  I got the window seat.&lt;/p&gt;</description></item><item><title>Dealing with Microsoft's SmartScreen Filter</title><link>https://nftb.saturdaymp.workers.dev/dealing-with-microsofts-smartscreen-filter/</link><pubDate>Fri, 15 Feb 2013 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/dealing-with-microsofts-smartscreen-filter/</guid><description>&lt;blockquote&gt;
&lt;h3 id="if-you-dont-eat-your-meat-you-cant-have-any-pudding-how-can-you-have-any-pudding-if-you-dont-eat-your-meat"&gt;If you don’t eat your meat, you can’t have any pudding!  How can you have any pudding if you don’t eat your meat!&lt;/h3&gt;
&lt;h4 id="--pink-floyd-another-brick-in-the-wall"&gt;- &lt;a href="http://en.wikipedia.org/wiki/Pink_Floyd" title="Pink Floyd"&gt;Pink Floyd&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=YR5ApYxkU-U" title="Another Brick in the Wall Video"&gt;Another Brick in the Wall&lt;/a&gt;&lt;/h4&gt;
&lt;/blockquote&gt;
&lt;p&gt;Microsoft&amp;rsquo;s &lt;a href="http://windows.microsoft.com/en-CA/windows7/SmartScreen-Filter-frequently-asked-questions-IE9" title="SmartScreen FAQ"&gt;SmartScreen Filter&lt;/a&gt; is the bane of small Independent Software Vendors (ISV) everywhere.  Maybe that is a little harsh, and I have no proof that SmartScreen Filter is a problem for other ISVs, but it has, and as of this writing, still is a problem for Saturday Morning Productions.  Besides, that first sentence is a good sensationalist sentence, perfect for a newspaper article or blog post.&lt;/p&gt;</description></item><item><title>Working Together – Part 2</title><link>https://nftb.saturdaymp.workers.dev/working-together-part-2/</link><pubDate>Wed, 21 Nov 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/working-together-part-2/</guid><description>&lt;p&gt;To continue our &lt;a href="http://nftb.saturdaymp.com/working-together-part-1/" title="Working Together - Part 1"&gt;series&lt;/a&gt; on working with a spouse, today we explore how we physically work together and physically live together.&lt;/p&gt;
&lt;p&gt;Disclaimer: this blog post is not meant to replace marriage counselling.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Work space&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We share a work space, but not 100% of the time.  Our contracts take us to &lt;a href="http://saturdaymp.com/consulting" title="Consulting-side of SatMP"&gt;client sites&lt;/a&gt; a few days a week.  When our schedules coincide and we both end up in the basement at the same time, we still manage to get work done.  Chris is incredibly focused, and I have my headphones to help with my focus.&lt;/p&gt;</description></item><item><title>Saturday Mo-rning’s Mo</title><link>https://nftb.saturdaymp.workers.dev/saturday-mo-rnings-mo/</link><pubDate>Tue, 13 Nov 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturday-mo-rnings-mo/</guid><description>&lt;p&gt;I’m taking part in &lt;a href="http://ca.movember.com/" title="Movember"&gt;Movember&lt;/a&gt; again this year. Why, you ask? Why not, I say. I get to grow a moustache, help change the face of men’s health, and annoy my wife with my awesome facial hair. That’s why. Well actually, there is another reason. I&amp;rsquo;m getting close to the mandatory prostate exam age and, well I think my &amp;ldquo;official&amp;rdquo; Movember reason says it best:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I hope the Movember money is used to build a diagnostic tool that doesn&amp;rsquo;t involve sticking things where the sun doesn&amp;rsquo;t shine. Like a Star Trek Tricorder.”&lt;/p&gt;</description></item><item><title>Working Together – Part 1</title><link>https://nftb.saturdaymp.workers.dev/working-together-part-1/</link><pubDate>Tue, 30 Oct 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/working-together-part-1/</guid><description>&lt;p&gt;Some people ask what’s it’s like to work with a spouse. Since we at Saturday Morning Productions are all about full disclosure and basement-basedness, I thought I’d take some time to shed light on the subject.&lt;/p&gt;
&lt;p&gt;First of all, Chris and I don’t always work together. Yes, our desks are side-by-side in the office, but we also have &lt;a href="http://saturdaymp.com/consulting" title="Consulting-side of SatMP"&gt;day jobs&lt;/a&gt; that take us away from the basement so it’s not like we’re always in each other&amp;rsquo;s faces like other husband and wife teams can be.&lt;/p&gt;</description></item><item><title>World vs. Non-World</title><link>https://nftb.saturdaymp.workers.dev/world-vs-non-world/</link><pubDate>Sat, 15 Sep 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/world-vs-non-world/</guid><description>&lt;p&gt;Some of our followers have asked about World vs. Canada sales that our &lt;a href="http://saturdaymp.com/news/mini-domination" title="Mini-News"&gt;last news post&lt;/a&gt; was about. “Why do you track your sales in two ways?” they ask. Well, without revealing our sales figures, we can tell you this much. We have two columns: sales to Canadian customers and sales to World customers. The Canadian customers pay $7.50 plus GST. We’re located in Alberta so we don’t charge nasty HST or any PST. The non-Canadian customers pay $7.50 and there is no tax charged on it.&lt;/p&gt;</description></item><item><title>What we did this summer (and two discoveries we made)</title><link>https://nftb.saturdaymp.workers.dev/what-we-did-this-summer-and-two-discoveries-we-made/</link><pubDate>Tue, 11 Sep 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/what-we-did-this-summer-and-two-discoveries-we-made/</guid><description>&lt;p&gt;We’re back in the basement and in full form after a relaxing break. (Well, Ada and DD had a nice break. Chris joined us when he could.) Thanks lovely customers for allowing us time away from our email and phones.&lt;/p&gt;
&lt;p&gt;We took a very long driving trip as well as a &lt;a href="http://en.wikipedia.org/wiki/Staycation" title="Staycation"&gt;staycation&lt;/a&gt;. Along the ways, we saw how Saturday MP fit in the spectrum of industry. If you remember back to social studies class, you learned the term &lt;a href="http://en.wiktionary.org/wiki/cottage_industry" title="Cottage Industry"&gt;cottage industry&lt;/a&gt;. We basement-dwellers have taken it one step further and are using our primary residence as the headquarters of our multi-dollar corporation.&lt;/p&gt;</description></item><item><title>Holy! Noise from the Basement!</title><link>https://nftb.saturdaymp.workers.dev/holy-noise-from-the-basement/</link><pubDate>Thu, 21 Jun 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/holy-noise-from-the-basement/</guid><description>&lt;p&gt;Please excuse the hammering and cussing - we&amp;rsquo;ve been renovating. What do you think of the new blog? Look about the same? Well, we&amp;rsquo;re hosted by WP-Engine now. And I found a way to add a Saturday Morning Productions logo - yahoo! Thanks to the handy dandy &lt;a href="http://www.w3schools.com/html/default.asp" title="Handy Dandy"&gt;HTML tutorial&lt;/a&gt; I use. You know what? I added it to the Blogroll on the Sidebar so you can also find it when you need it. We moved a few more beams and added a trench, because who doesn&amp;rsquo;t love trenches? Result? &lt;a href="http://saturdaymp.wpengine.com/saturday-morning-reads/" title="More Reference Guides"&gt;Saturday Morning Reads&lt;/a&gt;. We&amp;rsquo;ll be adding more books as time goes by.&lt;/p&gt;</description></item><item><title>New Measure of Cha-Ching</title><link>https://nftb.saturdaymp.workers.dev/new-measure-of-cha-ching/</link><pubDate>Mon, 28 May 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/new-measure-of-cha-ching/</guid><description>&lt;p&gt;Adorable Daughter came up with a new monetary term: &lt;em&gt;quadillon&lt;/em&gt; dollars. I wonder how many zeros that has! Brilliant.&lt;/p&gt;</description></item><item><title>Part Time Contract Help Wanted</title><link>https://nftb.saturdaymp.workers.dev/part-time-contract-help-wanted/</link><pubDate>Fri, 13 Apr 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/part-time-contract-help-wanted/</guid><description>&lt;p&gt;Times are good (read: busy) at &amp;lsquo;The Basement&amp;rsquo;.  Too good.  We&amp;rsquo;re looking for a little help.  Please see the official job posting on our &lt;a href="http://saturdaymp.com/news/Help_Wanted" title="Big News: Help Wanted"&gt;News&lt;/a&gt; page.&lt;/p&gt;</description></item><item><title>Kids Thinking Outside the Box - Bed Comfiness</title><link>https://nftb.saturdaymp.workers.dev/kids-thinking-outside-the-box-bed-comfiness/</link><pubDate>Wed, 14 Mar 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/kids-thinking-outside-the-box-bed-comfiness/</guid><description>&lt;p&gt;My grade 1 daughter explaining why she sleeps in on school days but has no trouble getting up at the crack of dawn on weekends:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;My bed is more comfier on school days than the weekend.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Installing Synergy Update</title><link>https://nftb.saturdaymp.workers.dev/installing-synergy-update/</link><pubDate>Thu, 12 Jan 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/installing-synergy-update/</guid><description>&lt;p&gt;This replaces my &lt;a href="http://nftb.saturdaymp.com/2011/07/18/share-a-keyboard-between-a-pc-and-a-macbook/" title="Share a Keyboard Between a PC and a Mac"&gt;previous install instructions&lt;/a&gt; for Synergy. With the latest &lt;a href="http://synergy-foss.org/" title="Synergy"&gt;Synergy&lt;/a&gt; 1.4.5 Beta release it’s even easier to install on the Mac because you no longer need to install &lt;a href="http://www.volker-lanz.de/software/qsynergy" title="QSynergy"&gt;QSynergy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Just a reminder that I am running Windows 7 desktop and Mac OS X 10.6 on a MacBook Pro.&lt;/p&gt;
&lt;p&gt;There are still bugs with this Synergy such as double clicking on the Mac not working and copy pasting only working from Windows to the Mac but not the other way around.  I&amp;rsquo;m a bit behind the Mac upgrade curve and am still using 10.6 X.  Maybe upgrading to Mac OS X 10.7 (Lion).&lt;/p&gt;</description></item><item><title>Kids Thinking Outside the Box – Planning</title><link>https://nftb.saturdaymp.workers.dev/kids-thinking-outside-the-box-planning/</link><pubDate>Wed, 04 Jan 2012 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/kids-thinking-outside-the-box-planning/</guid><description>&lt;p&gt;My daughter&amp;rsquo;s classmate to his teacher:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;My plans are unpredictable.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Perfect saying for a T-shirt.&lt;/p&gt;</description></item><item><title>Gifting Forward</title><link>https://nftb.saturdaymp.workers.dev/gifting-forward/</link><pubDate>Mon, 19 Dec 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/gifting-forward/</guid><description>&lt;p&gt;At SaturdayMP, we will be happy to put a copy of &lt;a href="http://www.saturdaymp.com/mini_comp" title="Best Present Ever"&gt;Mini-Compressor&lt;/a&gt; under your proverbial tree!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://saturdaymp.wpengine.com/wp-content/uploads/2011/12/tree.jpg"&gt;&lt;img src="images/tree.webp" alt="" title="tree"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With Mini-Compressor, you can shrink those pictures of your adorable kids and email them to Grandma!  Or compress your wedding pictures from last summer to share with your cousin overseas.&lt;/p&gt;
&lt;p&gt;We like to think of it as gifting forward.  Glad we could help.&lt;/p&gt;</description></item><item><title>Installing Ruby on Rails 3.1 on Mac OS X 10.6 Notes</title><link>https://nftb.saturdaymp.workers.dev/installing-ruby-on-rails-3-1-on-mac-os-x-10-6-notes/</link><pubDate>Wed, 07 Dec 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/installing-ruby-on-rails-3-1-on-mac-os-x-10-6-notes/</guid><description>&lt;p&gt;My notes for installing Ruby on Rails on 3.1 on Mac OS X 10.6.  This is not a tutorial or a how-to, just the notes I took as I tried to get Ruby on Rails up and running.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://saturdaymp.wpengine.com/wp-content/uploads/2011/12/railsplusmac.png"&gt;&lt;img src="images/railsplusmac.webp" alt="Rails + Mac" title="Rails + Mac"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;By default Ruby 1.8.7 is installed on the Mac and I&amp;rsquo;ve installed X-Code 4.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Surf the web a bit and find &lt;a href="http://blogs.justenougharchitecture.com/?p=82"&gt;this website&lt;/a&gt; that talks about &lt;a href="http://www.macports.org/" title="Mac Ports"&gt;Mac Ports&lt;/a&gt;.  Download and install Mac Ports.&lt;/p&gt;</description></item><item><title>New Version of Mini-Compressor Released</title><link>https://nftb.saturdaymp.workers.dev/new-version-of-mini-compressor-released/</link><pubDate>Wed, 30 Nov 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/new-version-of-mini-compressor-released/</guid><description>&lt;p&gt;We&amp;rsquo;ve just released a new version of Mini-Compressor that fixes an annoying install bug.  As usual you can download the new version via the &lt;a href="http://www.saturdaymp.com/downloads"&gt;Downloads&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;More information about the release can be found &lt;a href="http://www.saturdaymp.com/news/new_version_of_mini-Compressor_released"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Official Business</title><link>https://nftb.saturdaymp.workers.dev/official-business/</link><pubDate>Thu, 17 Nov 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/official-business/</guid><description>&lt;p&gt;On our recent trip to Boston for the &lt;a href="http://businessofsoftware.org/" title="Business of Software Conference"&gt;Business of Software Conference&lt;/a&gt;, we took a side trip to the Hallowe’en capital of America - &lt;a href="http://hauntedhappenings.org/" title="Salem"&gt;Salem, MA&lt;/a&gt;.  There we saw a real piece of clever marketing, a real noble claim.  We saw the storefront of the Official Witch of Salem!  Imagine that!  It opened my eyes to the possibilities.  &lt;a href="http://www.saturdaymp.com/" title="Saturday Morning Productions"&gt;Saturday Morning Productions&lt;/a&gt;, the official business of the basement!  &lt;a href="http://www.saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt;, the official compressor of photos!  &lt;a href="http://www.saturdaymp.com/consulting" title="Consultants"&gt;Chris and Ada&lt;/a&gt;, your official Get Stuff Done team!&lt;/p&gt;</description></item><item><title>Blogging, facebooking, tweeting, oh my</title><link>https://nftb.saturdaymp.workers.dev/blogging-facebooking-tweeting-oh-my/</link><pubDate>Fri, 04 Nov 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/blogging-facebooking-tweeting-oh-my/</guid><description>&lt;p&gt;When music videos first came out, I think music* stars thought this would be a clever way to market their music – you know, appeal to the visual learners.  I don’t think they thought it would essentially quadruple their workload – learning ‘acting’ parts/dance moves – not to mention hiring of directors, writers, models, dancers.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://saturdaymp.wpengine.com/wp-content/uploads/2011/11/video.jpg"&gt;&lt;img src="images/video.webp" alt="" title="Extra work"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While we don’t make any music videos at Saturday MP, I can’t help but relate to this model and blame the Internet for making us more work.  Sure, we sell &lt;a href="http://www.saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt; on the Internet.  We market on the Internet.  We look up movie times on the Internet.  We love the Internet.  It has made us money, but it has made us more work too.&lt;/p&gt;</description></item><item><title>Developper’s Hours</title><link>https://nftb.saturdaymp.workers.dev/developpers-hours/</link><pubDate>Fri, 07 Oct 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/developpers-hours/</guid><description>&lt;p&gt;There’s a barber shop in our neighbourhood.  He’s recently cut his hours.  I’ve never met him before but I imagine he’s near retirement and would like to spend his hard earned money on trips and precious time with the grandkids.  I kinda imagine him to be like the &lt;a href="http://www.chapters.indigo.ca/books/The-Wealthy-Barber-Gold-Edition-David-Chilton/9780968394731-item.html?ikwid=the+wealthy+barber&amp;amp;ikwsec=Books" title="The Wealthy Barber"&gt;Wealthy Barber&lt;/a&gt;.  Anyway.  He cut his hours.  He’s only open limited hours 4 days a week.  Ironically, his shop is next to a former bank.  I got a few laughs when I told Chris it would be funny if we could get pictures of the new barber’s hours next to the bank’s hours.&lt;/p&gt;</description></item><item><title>Moving Pains</title><link>https://nftb.saturdaymp.workers.dev/moving-pains/</link><pubDate>Thu, 29 Sep 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/moving-pains/</guid><description>&lt;p&gt;Yesterday, September 28, we physically relocated our website in cyberspace. My apologies if you had trouble viewing the website yesterday during the move. We ran into some trouble with setting up our forwarding address and some people got sent to the non-existent old website address. Everything should be sorted out by now but if you are still having trouble viewing the site please let us know at &lt;a href="mailto:support@saturdaymp.com"&gt;support@saturdaymp.com.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Preferred Methods of Payment</title><link>https://nftb.saturdaymp.workers.dev/preferred-methods-of-payment/</link><pubDate>Thu, 15 Sep 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/preferred-methods-of-payment/</guid><description>&lt;p&gt;Let’s get this straight.  If anyone wants to give us money, we’ll gladly take it.  We’d be even happier if it was money for the sale of &lt;a href="http://www.saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt;, but we’re not too picky.&lt;/p&gt;
&lt;p&gt;We currently accept payment through all major credit cards as well as &lt;a href="https://www.paypal.com/ca/cgi-bin/webscr?cmd=_flow&amp;amp;SESSION=eOGwPZx8Q3gYJkaVRWE8yNoyAXhrvfAOfy-k1MZGuyx9uk_fDi0kQY-75J0&amp;amp;dispatch=50a222a57771920b6a3d7b606239e4d529b525e0b7e69bf0224adecfb0124e9b61f737ba21b08198b897c0dd9782f17cd822063ff41faaba" title="Buy Mini-Compressor"&gt;Paypal&lt;/a&gt;, though an account is not required.   We’ve toyed with alternative ideas.  And by alternative, we really mean alternative.  Like, big fat novelty cheques:&lt;/p&gt;
&lt;p&gt;[caption id=&amp;ldquo;attachment_555&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;450&amp;rdquo; caption=&amp;ldquo;It&amp;rsquo;s signed, it&amp;rsquo;s good!&amp;rdquo;]&lt;a href="http://saturdaymp.wpengine.com/wp-content/uploads/2011/09/noveltychq.png"&gt;&lt;img src="images/noveltychq.webp" alt="Novelty Cheque" title="NoveltyChq"&gt;&lt;/a&gt;[/caption]&lt;/p&gt;</description></item><item><title>Share a Keyboard Between a PC and a MacBook</title><link>https://nftb.saturdaymp.workers.dev/share-a-keyboard-between-a-pc-and-a-macbook/</link><pubDate>Mon, 18 Jul 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/share-a-keyboard-between-a-pc-and-a-macbook/</guid><description>&lt;p&gt;I&amp;rsquo;ve been developing the &lt;a href="http://saturdaymp.com/" title="Saturday Morning Productions"&gt;Saturday MP&lt;/a&gt; website, which was developed using &lt;a href="http://rubyonrails.org/" title="Ruby on Rails"&gt;Ruby on Rails&lt;/a&gt;, on Windows using &lt;a href="http://www.aptana.com/products/radrails" title="Rad Rails"&gt;Rad Rails&lt;/a&gt;.  Unfortunately developing on Ruby on Rails on Windows has a couple drawbacks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It&amp;rsquo;s hard to install Ruby and/or Rails on Windows.  It&amp;rsquo;s getting easier with the &lt;a href="http://rubyinstaller.org/" title="Ruby Installer"&gt;Ruby Installer&lt;/a&gt; but still a pain.&lt;/li&gt;
&lt;li&gt;The production environment is Linux which can make it hard to debug a problem that only appears in one environment&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;rsquo;ve started migrating my development envrionment to a MacBook Pro which is Linux based and then I can try &lt;a href="http://macromates.com/" title="TextMate"&gt;TextMate&lt;/a&gt; which I hear so much about.  I hear a lot about TextMate.  Like I mean a lot.  Hopefully it will live up to my expectations and also cure cancer.&lt;/p&gt;</description></item><item><title>Don't Mix your Static and DHCP Addresses</title><link>https://nftb.saturdaymp.workers.dev/dont-mix-your-static-and-dhcp-addresses/</link><pubDate>Fri, 17 Jun 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/dont-mix-your-static-and-dhcp-addresses/</guid><description>&lt;p&gt;&lt;a href="http://saturdaymp.wpengine.com/wp-content/uploads/2011/06/nointernetaccess.png"&gt;&lt;img src="images/nointernetaccess.webp" alt="No Internet Access" title="No Internet Access"&gt;&lt;/a&gt;I was working on some new servers that were soon going to be production servers.  While working on them I noticed that they didn&amp;rsquo;t have static IP addresses.  Being the good looking proactive guy that I am I sent a quick e-mail to the IT department offering to change the servers to static IPs myself since I was already working on them.  Once I got the OK I changed all the servers to static IPs.   The problem was I changed the servers to the static version of the IP address DHCP had given them.  For example, if the server had been given a DHCP address of 192.168.25.75 I set the static IP to the same thing.&lt;/p&gt;</description></item><item><title>Mini-Compress Weeds</title><link>https://nftb.saturdaymp.workers.dev/mini-compress-weeds/</link><pubDate>Wed, 08 Jun 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compress-weeds/</guid><description>&lt;p&gt;“W” was the letter of the week in Darling Daughter’s class a few weeks ago.  You know what I wished?  That Mini-Compressor would compress the wascally weeds in our Behemoth Garden.  Right-click on behemoth weeds and voila… smaller weed no long takes over space where the strawberries are and I can dig it out easier.  Nice, right?&lt;/p&gt;</description></item><item><title>Everything is Coming Up Cucumbers</title><link>https://nftb.saturdaymp.workers.dev/everything-is-coming-up-cucumbers/</link><pubDate>Sat, 21 May 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/everything-is-coming-up-cucumbers/</guid><description>&lt;p&gt;Another adventure out of the basement - yay!  It’s that time of year in the Chamming garden… yup… planting time.&lt;/p&gt;
&lt;p&gt;First comes the planning process that I love best.  I carefully draw a not-to-scale “map” of the garden on the back for scrap paper.  It’s usually entitled “My Vegetable Garden”.  Chris laughs that it reminds him of Microsoft’s “My” products, like “My Computer” and “My Favourites”.  Anyway, this year on the hit list are zucchinis, tomatoes, carrots, cucumbers beets, beans, peas, lettuce, herbs, onions and sunflowers.&lt;/p&gt;</description></item><item><title>Display a Section only on the First Page in a Crystal Report</title><link>https://nftb.saturdaymp.workers.dev/display-a-section-only-on-the-first-page-in-a-crystal-report/</link><pubDate>Fri, 20 May 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/display-a-section-only-on-the-first-page-in-a-crystal-report/</guid><description>&lt;p&gt;To display a section only on the first page but not on other pages right-click the section in question and choose Section Expert.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://saturdaymp.wpengine.com/wp-content/uploads/2011/05/sectionexpert.png"&gt;&lt;img src="images/sectionexpert.webp" alt="Crystal Reports Section Expert" title="Crystal Reports Section Expert"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click the x-2 button to the right Suppress (No Drill down) and add the following formula:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://saturdaymp.wpengine.com/wp-content/uploads/2011/05/formatformulaeditor.png"&gt;&lt;img src="images/formatformulaeditor.webp" alt="Crystal Reports Format Formula Editor" title="Crystal Reports Format Formula Editor"&gt;&lt;/a&gt; Now this section will only appear on the first page.  Your welcome.&lt;/p&gt;</description></item><item><title>Visual Cut Doesn't Like to Waste Space</title><link>https://nftb.saturdaymp.workers.dev/visual-cut-doesnt-like-to-waste-space/</link><pubDate>Wed, 18 May 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/visual-cut-doesnt-like-to-waste-space/</guid><description>&lt;p&gt;&lt;a href="http://saturdaymp.wpengine.com/wp-content/uploads/2011/05/scissors.png"&gt;&lt;img src="images/scissors.webp" alt="Scissors" title="Scissors"&gt;&lt;/a&gt;Just a heads up that &lt;a href="http://www.milletsoftware.com/Visual_CUT.htm" title="Visual Cut"&gt;Visual Cut&lt;/a&gt; is really picky about command line arguments.  Visual Cut does a bunch of stuff with Crystal Reports but in my current project it is just used to print reports on demand.  The printing is done via a command line call to Visual Cut.&lt;/p&gt;
&lt;p&gt;Reading the documentation and looking at the existing code the arguments seemed pretty straight forward, just standard key/value pairs in format &amp;ldquo;Key:Value&amp;rdquo;.  For example:&lt;/p&gt;</description></item><item><title>Mini-Compressor - ing</title><link>https://nftb.saturdaymp.workers.dev/mini-compressor-ing/</link><pubDate>Thu, 05 May 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-compressor-ing/</guid><description>&lt;p&gt;The success of our product marketing could be measured by how well &lt;a href="http://saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt; is integrated into everyday life, but more importantly, everyday language.&lt;/p&gt;
&lt;p&gt;If I may demonstrate with a few examples:&lt;/p&gt;
&lt;p&gt;Do you remember when Google became a noun? I do_&lt;strong&gt;*&lt;/strong&gt;_. Now, do you remember when google became a verb?  Seriously, how often have you &amp;lsquo;googled&amp;rsquo; someone or something as opposed to &amp;lsquo;used a search engine to find someone or something&amp;rsquo;?&lt;/p&gt;</description></item><item><title>Exhilaration and Hesitation</title><link>https://nftb.saturdaymp.workers.dev/exhilaration-and-hesitation/</link><pubDate>Wed, 27 Apr 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/exhilaration-and-hesitation/</guid><description>&lt;blockquote&gt;
&lt;p&gt;EXHILARATION – That feeling you get just after a great idea hits you and just before you realize what’s wrong with it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That pretty much sums up the feeling I had when Chris told me he was thinking of starting up Saturday Morning Productions.  As you may know, it was something we talked about in jest for, like, ever, but never seriously.  Part of me – the fiscally conservative part – was worried, but the other part of me – the wifey part – knew that if Chris was telling this to me outloud, he’d already made up his mind.  It made me sick to my stomach to think of the possible struggles and financial hardships of getting a business off the ground.  I badgered Chris into writing a business plan.  That was for my own personal comfort, as we would be the sole venture capitalist.  With the benefit of foresight, I now have to admit, Chris has made some sound decisions, and the going has been smooth for the most part.  The bottom hasn’t dropped out yet.  And there are perks for us to look forward to, that we wouldn’t get with a punch-the-clock job.&lt;/p&gt;</description></item><item><title>Happy Earth Day</title><link>https://nftb.saturdaymp.workers.dev/happy-earth-day/</link><pubDate>Fri, 22 Apr 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/happy-earth-day/</guid><description>&lt;p&gt;We want to celebrate the 20th annual &lt;a href="http://www.earthday.ca/pub/about/history.php" title="Earth Day"&gt;Earth Day&lt;/a&gt; with a special promotion!  This will be a real one, not like the bogus &lt;a href="http://nftb.saturdaymp.com/2011/04/18/mini-promotion/" title="Mini Promotion"&gt;Mini one&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Big bold print:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Free shipping with every copy of Mini-Compressor purchased.  Forever.  No questions asked, no codes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How?  That’s easy!  Run, don’t walk, to the &lt;a href="http://saturdaymp.com/mini_comp" title="Buy Now"&gt;Buy Now button&lt;/a&gt; on our website.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;How does this help the environment?  We save on packaging and gas to get that big cardboard box to your door&amp;hellip; aaaaannnddd&amp;hellip;. everyone else is &lt;a href="http://en.wikipedia.org/wiki/Greenwashing" title="Greenwashing, defined"&gt;greenwashing&lt;/a&gt; these days.  We thought we&amp;rsquo;d jump on the bandwagon.  It couldn&amp;rsquo;t hurt, right?&lt;/p&gt;</description></item><item><title>Mini-Promotion</title><link>https://nftb.saturdaymp.workers.dev/mini-promotion/</link><pubDate>Mon, 18 Apr 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/mini-promotion/</guid><description>&lt;p&gt;Let’s be honest.  Sales of &lt;a href="http://saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt; have been steady, but what we really want is 4 bazillion people to buy a copy and tell 2 friends.  Then we can have bags with dollar signs on them!  And build our dream garage_*_.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://saturdaymp.wpengine.com/wp-content/uploads/2011/04/uncle-scrooge_dollar-signs.jpg"&gt;&lt;img src="images/uncle-scrooge_dollar-signs.webp" alt="Dollar Signs" title="Dollar Signs"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We’ve been working our little brains to think of ways to market our flagship product, on a basement level budget, and this is what we’ve come up_**_&lt;/p&gt;</description></item><item><title>8 in One Blow</title><link>https://nftb.saturdaymp.workers.dev/8-in-one-blow/</link><pubDate>Fri, 15 Apr 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/8-in-one-blow/</guid><description>&lt;p&gt;SaturdayMP has been around for a long time.  The concept of a &lt;a href="http://saturdaymp.com/about" title="Saturday Morning Productions"&gt;weekend software company&lt;/a&gt; is how our friends and acquaintances know us (dreamers).  Sure, we incorporated just over 2 years ago, but the name has been around for longer in our circles.  This past winter, Chris had a few opportunities to see some familiar faces and catch them up on our ‘latest venture’.  Imagine our embarrassment when he had to 1) borrow a pen to 2) write down his contact info on the back of a gas receipt.  Seriously!  Doesn’t this dude have a business card?  That was my next project.&lt;/p&gt;</description></item><item><title>Cheque or Credit Card?</title><link>https://nftb.saturdaymp.workers.dev/cheque-or-credit-card/</link><pubDate>Fri, 08 Apr 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/cheque-or-credit-card/</guid><description>&lt;p&gt;Once upon a time I received an e-mail with some questions about Mini-Compressor.  I answered the fellow’s questions and he seemed happy with my answers.  Unfortunately he didn’t buy a copy of Mini-Compressor and after a bit he faded from memory.&lt;/p&gt;
&lt;p&gt;Fast forward several weeks to my phone ringing.  I answer it and it’s the same fellow that e-mailed me - he has a very distinct and easy to remember name.  He asks me if he can buy a copy of Mini-Compressor to which I answer yes, a bit confused.  He then asks how he should pay for it.  Would I prefer a cheque or credit card?&lt;/p&gt;</description></item><item><title>What to do if Norton Incorrectly Thinks Your Product is Harmful</title><link>https://nftb.saturdaymp.workers.dev/what-to-do-if-norton-incorrectly-thinks-your-product-is-harmful/</link><pubDate>Wed, 23 Mar 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/what-to-do-if-norton-incorrectly-thinks-your-product-is-harmful/</guid><description>&lt;p&gt;A while ago I got an e-mail from a customer that had just bought &lt;a href="http://www.saturdaymp.com/mini_comp" title="Mini-Compressor"&gt;Mini-Compressor&lt;/a&gt; (which I think is the best image compression software in the world but I&amp;rsquo;m a bit biased) but was getting warning from &lt;a href="http://us.norton.com/index.jsp" title="Nortan"&gt;Norton&lt;/a&gt; when he tried to install it.  The warning he was getting was &lt;a href="http://www.symantec.com/security_response/writeup.jsp?docid=2010-081701-5142-99" title="Suspicious.Cloud.5.D"&gt;Suspicious.Cloud.5.D&lt;/a&gt;.  This is a low level warning from Norton that a file is suspicious but could also be a false positive.  I quickly double checked that the website had not been compromised.  To be on the safe side I downloaded and scanned Mini-Compressor with both &lt;a href="http://www.microsoft.com/windows/products/winfamily/defender/default.mspx" title="Windows Defender"&gt;Windows Defender&lt;/a&gt; and &lt;a href="http://www.malwarebytes.org/" title="Malwarebytes"&gt;Malwarebytes&lt;/a&gt;.  Neither reported any errors.&lt;/p&gt;</description></item><item><title>Coming... Later Part 2</title><link>https://nftb.saturdaymp.workers.dev/coming-later-part-2/</link><pubDate>Tue, 15 Mar 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/coming-later-part-2/</guid><description>&lt;p&gt;&lt;a href="http://www.magickagame.com/"&gt;&lt;img src="images/magickaredfire.webp" alt="Magicka - Red Fire" title="Magicka - Red Fire"&gt;&lt;/a&gt;I was just talked into and/or talked my friends into purchasing &lt;a href="http://www.magickagame.com/" title="Magicka"&gt;Magicka&lt;/a&gt;.  That reminded me I had &lt;a href="http://nftb.saturdaymp.com/2010/09/14/coming-later/" title="Coming... Later"&gt;posted&lt;/a&gt; Part 1 of &amp;ldquo;&lt;a href="http://www.gametrailers.com/video/exclusive-how-magicka/704350" title="How the Gold Master Was Delayed Part 1"&gt;How the Gold Master was Delayed&lt;/a&gt;&amp;rdquo; and I should look for &lt;a href="http://www.gametrailers.com/video/exclusive-how-magicka/706304?type=flv" title="How the Gold Master was Delayed Part 2"&gt;Part 2&lt;/a&gt;. It&amp;rsquo;s nice to see a humorous look at a very stressful time for both the developer and the client.&lt;/p&gt;</description></item><item><title>SQL Server Dependency Query</title><link>https://nftb.saturdaymp.workers.dev/sql-server-dependency-query/</link><pubDate>Wed, 09 Feb 2011 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/sql-server-dependency-query/</guid><description>&lt;p&gt;You&amp;rsquo;ve been staring at the SQL Server view vwCustomersGH for the past hour.  The view is part of a project you just started maintaining and like many views and stored procedures in the project you are sure it&amp;rsquo;s not being used anymore.  Because you are a conscientious and professional software developer you want to remove this view along with the others.  You don&amp;rsquo;t want to leave it lying around for the next developer to stumble over like you did, getting confused between the legit vwCustomers and  suspicious vwCustomersGH.  What does the GH stand for anyway?&lt;/p&gt;</description></item><item><title>Holiday Cheer</title><link>https://nftb.saturdaymp.workers.dev/holiday-cheer/</link><pubDate>Sat, 11 Dec 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/holiday-cheer/</guid><description>&lt;p&gt;Saturday Morning Productions has saved up its hard earned pennies from the proceeds of &lt;a href="http://saturdaymp.com/mini_comp"&gt;mini-compressor&lt;/a&gt; for its first ever Staff Christmas Party! We love parties! Well, this party will be pretty quiet since there are only &lt;a href="http://saturdaymp.com/consulting"&gt;2 staff members&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;In the past, we&amp;rsquo;ve worked at all sorts of firms and participated in their Christmas parties. Once, during the dot-com boom, we were both flown to Cleveland to celebrate Christmas with other employees and their spouses. We&amp;rsquo;ve also been invited snowmobiling and dinner and at the boss&amp;rsquo;s house. A more rukus one featured a fight between 2 staff members in the parking lot of a rather upscale hotel. That one was especially funny because the company had hired a band to play at the party. The band consisted of members from a local media station. The local media was ready in the parking lot to report on the brawl. Fun times.&lt;/p&gt;</description></item><item><title>Kids Thinking Outside the Box - Who to Invite to Your Birthday?</title><link>https://nftb.saturdaymp.workers.dev/kids-thinking-outside-the-box-who-to-invite-to-your-birthday/</link><pubDate>Tue, 30 Nov 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/kids-thinking-outside-the-box-who-to-invite-to-your-birthday/</guid><description>&lt;p&gt;My 5 year old daughter is endlessly planning her birthday parties, even 11 months and 30 days in advance.  Her recent planning session focused on who she should invite.  After going over her list of friends she paused and then asked us &amp;ldquo;can I invite Santa Clause to my birthday?&amp;rdquo;&lt;/p&gt;</description></item><item><title>NUnit Error "Attempted to access an unloaded AppDomain"</title><link>https://nftb.saturdaymp.workers.dev/nunit-error-attempted-to-access-an-unloaded-appdomain/</link><pubDate>Thu, 11 Nov 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/nunit-error-attempted-to-access-an-unloaded-appdomain/</guid><description>&lt;p&gt;I was plagued by the above error but found a workaround, at least one that worked for me.  It&amp;rsquo;s a one line change to the NUnit config file.  Note, this the actual NUnit config file that is installed in &lt;em&gt;C:Program FilesNUnit&lt;/em&gt; and used by the NUnit GUI/Console executables.  Not the config file used by your NUnit project.  Find the following line and either remove it or change the value to zero:&lt;/p&gt;</description></item><item><title>Upgrading Mini-Compressor to .NET 4.0 Notes Addendum</title><link>https://nftb.saturdaymp.workers.dev/upgrading-mini-compressor-to-net-40-notes-addendum/</link><pubDate>Thu, 04 Nov 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/upgrading-mini-compressor-to-net-40-notes-addendum/</guid><description>&lt;p&gt;You can read part one at &lt;a href="http://nftb.saturdaymp.com/2010/09/09/upgrading-mini-compressor-to-net-4-0-notes/"&gt;Upgrading Mini-Compressor to .NET 4.0 Notes&lt;/a&gt; post.&lt;/p&gt;
&lt;p&gt;One item that I feel has been neglected by &lt;a href="http://msdn.microsoft.com/en-us/vstudio/default.aspx"&gt;Visual Studio&lt;/a&gt; is the &lt;a href="http://msdn.microsoft.com/en-us/library/wx3b589t.aspx"&gt;Setup &amp;amp; Deployment projects&lt;/a&gt;.  There has been little improvements to them since Visual Studio 2003 but finally VS2010 has new &amp;ldquo;feature&amp;rdquo;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A customer installs your &lt;a href="http://www.saturdaymp.com/mini_comp"&gt;software&lt;/a&gt; using the installer created using VS2008.&lt;/li&gt;
&lt;li&gt;You upgrade your product to .NET 4.0 using VS2010 and create a new MSI.&lt;/li&gt;
&lt;li&gt;The customer runs your new MSI to upgrade their software.  After the upgrade is complete nothing is installed at all.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I really do mean nothing, no files in the Program Files folder, no registry entries, shortcuts, etc.  The old version is gone along with the new version.  It&amp;rsquo;s a great new feature, I mean bug.  The bug is known to Microsoft and you can read more about it &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/details/559575/problem-with-installing-and-removing-previous-versions-after-upgrading-my-setup-project-to-vs2010#details"&gt;here&lt;/a&gt;.  A summarized description of the error and some workarounds:&lt;/p&gt;</description></item><item><title>Signed up for PayPal Micropayments</title><link>https://nftb.saturdaymp.workers.dev/signed-up-for-paypal-micropayments/</link><pubDate>Thu, 28 Oct 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/signed-up-for-paypal-micropayments/</guid><description>&lt;p&gt;I just signed up for &lt;a href="http://www.paypal.com"&gt;PayPal&amp;rsquo;s&lt;/a&gt; new &lt;a href="https://micropayments.paypal-labs.com/"&gt;Micropayments&lt;/a&gt;.  PayPal seems to be rolling this out slowly as you have to sign-up and then you will be notified in 2 days if you are accepted or not.  In theory it should save us a couple pennies every-time we sell a copy of &lt;a href="http://www.saturdaymp.com/mini_comp"&gt;Mini-Compressor&lt;/a&gt;.  The fixed cost per transaction is reduced from $0.30 to $0.05 but the percentage cost goes up from 2.9% to 5%.&lt;/p&gt;</description></item><item><title>Extra Memory for my Virtual Machine</title><link>https://nftb.saturdaymp.workers.dev/extra-memory-for-my-virtual-machine/</link><pubDate>Sun, 24 Oct 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/extra-memory-for-my-virtual-machine/</guid><description>&lt;p&gt;All my development work is done on virtual machines (VM), &lt;a href="http://www.virtualbox.org/"&gt;Virtual Box&lt;/a&gt; to be exact.  In the past I&amp;rsquo;ve only needed one VM open at a time and only one version &lt;a href="http://msdn.microsoft.com/en-us/vstudio/default.aspx"&gt;Visual Studio&lt;/a&gt;, or &lt;a href="http://www.aptana.com/products/radrails"&gt;other IDE&lt;/a&gt;, running in the VM.  On my Core 2 Duo with 4 GB of RAM this was fine with the VM being allocated 1.5 GB of RAM.  Sometimes it would run slow but only for short durations and I could live with it.&lt;/p&gt;</description></item><item><title>Coming... Later</title><link>https://nftb.saturdaymp.workers.dev/coming-later/</link><pubDate>Tue, 14 Sep 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/coming-later/</guid><description>&lt;p&gt;A realistic video about software development:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.gametrailers.com/video/exclusive-how-magicka/704350"&gt;Exclusive How the Gold Master Was Delayed: Part I&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If, like me, you typically work on business software for a single large client, aside from (shameless plug) &lt;a href="http://www.saturdaymp.com/mini_comp"&gt;Mini-Compressor&lt;/a&gt;, then make the following substitutions:&lt;/p&gt;
&lt;p&gt;Publisher &amp;ndash;&amp;gt; Large Company  Buying Custom Software&lt;/p&gt;
&lt;p&gt;Gold Master &amp;ndash;&amp;gt; Release Date Promised to Customer Picked by Throwing Darts at a Calendar&lt;/p&gt;
&lt;p&gt;Forum Troll &amp;ndash;&amp;gt; Employee at Customer Company Trying to Fail Project for his/her Political Reasons&lt;/p&gt;</description></item><item><title>Upgrading Mini-Compressor to .NET 4.0 Notes</title><link>https://nftb.saturdaymp.workers.dev/upgrading-mini-compressor-to-net-4-0-notes/</link><pubDate>Thu, 09 Sep 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/upgrading-mini-compressor-to-net-4-0-notes/</guid><description>&lt;p&gt;My notes on upgrading Mini-Compressor from .NET 3.5 to .NET 4.0 (Visual Studio 2008 to 2010) and also upgrading NUnit and NAnt.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run the automated VS 2010 upgrade process.  Appears that there are no error but appearances can be deceiving.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try a compile and get errors about not being about to find NUnit.  This makes sense as I upgraded NUnit on the build machine and the path had changed.  One day I should just reference the dll via a lib folder.  Update the NUnit reference and all the errors go away but&amp;hellip;&lt;/p&gt;</description></item><item><title>New Tools Require New Standards</title><link>https://nftb.saturdaymp.workers.dev/new-tools-require-new-standards/</link><pubDate>Fri, 03 Sep 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/new-tools-require-new-standards/</guid><description>&lt;p&gt;&lt;em&gt;&amp;ldquo;An old belief is like an old shoe.  We so value its comfort that we fail to notice the hole in it.&amp;rdquo; - &lt;a href="http://www.quotegarden.com/belief.html"&gt;Robert Brault&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As developers we all have standards, even if they aren&amp;rsquo;t that well defined.  Of course I&amp;rsquo;m talking about technology standards but feel free to insert your social awareness and/or hygiene standard joke here.  Standards can range from the usual coding standards to the names you give your servers (e.g Lord of the Rings Characters) and everything in-between.&lt;/p&gt;</description></item><item><title>The Taxman</title><link>https://nftb.saturdaymp.workers.dev/the-taxman/</link><pubDate>Thu, 15 Apr 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/the-taxman/</guid><description>&lt;p&gt;Well, it&amp;rsquo;s that time of year in the SaturdayMP basement&amp;hellip; The tax deadline for filing 2009 personal taxes in Canada is &lt;a href="http://www.cra-arc.gc.ca/tx/ndvdls/tpcs/ll-dts/frms-eng.html"&gt;April 30&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re slowly gathering dusty papers to send to our accountants, the fine folks at &lt;a href="http://everybeancounts.ca/"&gt;Every Bean Counts&lt;/a&gt; (great name!)&lt;/p&gt;
&lt;p&gt;Before SaturdayMP and the olden days of High C consulting, we did our own taxes using personal tax software and &lt;a href="http://www.netfile.gc.ca/menu-eng.html"&gt;NETFILE&lt;/a&gt;d the paperwork then headed to the bank. If we were prepared, we&amp;rsquo;d have the correct crumbled up piece of paper with the (correct) amount we owed scribbled on it. There, the teller would stamp it several times, emphatically, then withdraw the money from our accounts in no time.&lt;/p&gt;</description></item><item><title>SaturdayMP to-do list</title><link>https://nftb.saturdaymp.workers.dev/saturdaymp-to-do-list/</link><pubDate>Wed, 07 Apr 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/saturdaymp-to-do-list/</guid><description>&lt;ul&gt;
&lt;li&gt;Laundry&lt;/li&gt;
&lt;li&gt;Payroll&lt;/li&gt;
&lt;li&gt;Payroll&lt;/li&gt;
&lt;li&gt;Create Secret Project&lt;/li&gt;
&lt;li&gt;Laundry&lt;/li&gt;
&lt;li&gt;Enjoy summer&lt;/li&gt;
&lt;li&gt;Laundry&lt;/li&gt;
&lt;li&gt;Test Secret Project&lt;/li&gt;
&lt;li&gt;Payroll&lt;/li&gt;
&lt;li&gt;Update News/blog re: Secret Project&lt;/li&gt;
&lt;li&gt;Start Super-secret project&lt;/li&gt;
&lt;li&gt;Oil change&lt;/li&gt;
&lt;li&gt;Laundry&lt;/li&gt;
&lt;li&gt;Payroll&lt;/li&gt;
&lt;li&gt;Finish Super-secret project&lt;/li&gt;
&lt;li&gt;Change Furnace Filter&lt;/li&gt;
&lt;li&gt;Laundry&lt;/li&gt;
&lt;li&gt;Yearend Tax stuff&lt;/li&gt;
&lt;li&gt;Enjoy first snow fall&lt;/li&gt;
&lt;li&gt;More payroll&lt;/li&gt;
&lt;li&gt;More laundry&lt;/li&gt;
&lt;li&gt;Start Really super secret project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The basement-based fun never ends&amp;hellip;&lt;/p&gt;</description></item><item><title>Starting Any Method in a New Thread Using .NET</title><link>https://nftb.saturdaymp.workers.dev/starting-any-method-in-a-new-thread-using-net/</link><pubDate>Fri, 02 Apr 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/starting-any-method-in-a-new-thread-using-net/</guid><description>&lt;p&gt;The main problem I encountered was creating a function to accept any function pointer along with an unknown number of arguments.  I got around this problem using the ThreadStart and delegate() features in C# (.NET 3.5).  First off create your method to take any method as so:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="n"&gt;Thread&lt;/span&gt; &lt;span class="n"&gt;StartMethodInNewThread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ThreadStart&lt;/span&gt; &lt;span class="n"&gt;methodToStart&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Do common some stuff before starting the thread, such as logging.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Start the task in a new thread&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Thread&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;methodToStart&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Do some stuff after starting the thread, such as more logging.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If the caller cares you can return the thread.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now anywhere in your code where you need to start a new method in a thread write the following:&lt;/p&gt;</description></item><item><title>Use Fun Addresses when Demoing your Software</title><link>https://nftb.saturdaymp.workers.dev/use-fun-addresses-when-demoing-your-software/</link><pubDate>Thu, 25 Mar 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/use-fun-addresses-when-demoing-your-software/</guid><description>&lt;p&gt;Next time your entering data for a software demo try spicing it up and sneak some your famous real or fictional addresses.  Often you can&amp;rsquo;t use the fictional state/province but the street addresses are easy to sneak into a demo, or even better, into your product documentation.  Some ideas to get you thinking:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Room_101"&gt;#101&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Room_101"&gt;&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Nineteen_Eighty-Four"&gt;1984&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Ministry_of_Love"&gt;Miniluv&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Room_101"&gt;&lt;/a&gt;Building London, &lt;a href="http://en.wikipedia.org/wiki/Nations_of_Nineteen_Eighty-Four"&gt;Oceania&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nightmareonelmstreetfilms.com/1428elmstreet.html"&gt;1428 Elm Street&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/A_Nightmare_on_Elm_Street"&gt;Madstop&lt;/a&gt;, New England United States&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sesamestreet.org/"&gt;123 Sesame Street&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sherlock-holmes.co.uk/"&gt;211b Baker Street&lt;/a&gt; London, England&lt;/p&gt;</description></item><item><title>Another Basement Dweller?</title><link>https://nftb.saturdaymp.workers.dev/another-basement-dweller/</link><pubDate>Wed, 17 Mar 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/another-basement-dweller/</guid><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I should introduce myself. I&amp;rsquo;m Ada, co-founder of Saturday MP. By co-founder, it basically means Chris asked me if he could start a &lt;a href="http://saturdaymp.com"&gt;company&lt;/a&gt; and I (finally) said &lt;a href="http://saturdaymp.com/about"&gt;yes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Chris has given me permission to post to the blog. This may be a mistake because I seem innocent but I can also have a perverse sense of humour. While I&amp;rsquo;m no stranger to computers, the internet nor the blog-world, the circles I run in tend to revolve around knit blogs and &lt;a href="http://www.ravelry.com/about"&gt;ravelry&lt;/a&gt;. There, I&amp;rsquo;ve shown my true colours. You want more? I. Am. Canadian. I spell &amp;ldquo;Canadian&amp;rdquo; so you&amp;rsquo;ll see a lot of &amp;ldquo;u&amp;rsquo;s&amp;rdquo; in my posts. Chris doesn&amp;rsquo;t care as much - he&amp;rsquo;s Canadian too, but let&amp;rsquo;s face it, he doesn&amp;rsquo;t worry too much about spelling.&lt;/p&gt;</description></item><item><title>Save Your Envrionment</title><link>https://nftb.saturdaymp.workers.dev/save-your-envrionment/</link><pubDate>Tue, 09 Mar 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/save-your-envrionment/</guid><description>&lt;p&gt;Do you remember VB Commenter?  Probably not because all the cool kids, like you, where using C# so you had no need for it.  See, way back in the Visual Studio 2003 era only .NET&amp;rsquo;s favorite child, C#, had support for &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc302121.aspx"&gt;XML comments&lt;/a&gt;.  Some jealous VB.NET developer (sorry, can&amp;rsquo;t remember who) wanted VB.NET to be just as cool so VB Commenter addin was created.&lt;/p&gt;
&lt;p&gt;Still back in the Visual Studio 2003 era I created rules engine where the end user could script their own rules and hook them into their business application.  The rules referenced pre-compiled business objects.  To create documentation for the end user about these objects I used VB Commenter along with NDoc to generate a MSDN help file.&lt;/p&gt;</description></item><item><title>Building for Both 32 and 64 Bit Architectures</title><link>https://nftb.saturdaymp.workers.dev/building-for-both-32-and-64-bit-architectures/</link><pubDate>Thu, 25 Feb 2010 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/building-for-both-32-and-64-bit-architectures/</guid><description>&lt;p&gt;My latest task has been getting Mini-Compressor to work on Windows 7.  In the end no code changes are actually required to get Mini-Compressor working on Windows 7 but the installer required a bit of work.  The amount of work was actually minimal but it turned into a big pain because I didn&amp;rsquo;t document the installer and had to relearn a couple key points.  To prevent this from happening again I thought I&amp;rsquo;d better take some notes on the problems I encountered and share them with you dear reader.  That way you won&amp;rsquo;t make the same mistakes I made twice.&lt;/p&gt;</description></item><item><title>Archives</title><link>https://nftb.saturdaymp.workers.dev/archives/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://nftb.saturdaymp.workers.dev/archives/</guid><description/></item></channel></rss>