<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Ten Moments]]></title><description><![CDATA[Jeff Malek]]></description><link>https://www.tenmoments.com</link><image><url>https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png</url><title>Ten Moments</title><link>https://www.tenmoments.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 17 May 2026 04:34:14 GMT</lastBuildDate><atom:link href="https://www.tenmoments.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jeff Malek]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[tenmoments@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[tenmoments@substack.com]]></itunes:email><itunes:name><![CDATA[Jeff Malek]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jeff Malek]]></itunes:author><googleplay:owner><![CDATA[tenmoments@substack.com]]></googleplay:owner><googleplay:email><![CDATA[tenmoments@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jeff Malek]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Frustrated because you’re not getting what you expect from people at work?]]></title><description><![CDATA[If you&#8217;re frustrated because you&#8217;re not getting what you expect from people, it&#8217;s for one of two reasons.]]></description><link>https://www.tenmoments.com/p/frustrated-because-youre-not-getting</link><guid isPermaLink="false">https://www.tenmoments.com/p/frustrated-because-youre-not-getting</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Thu, 24 Jul 2025 17:59:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you&#8217;re frustrated because you&#8217;re not getting what you expect from people, it&#8217;s for one of two reasons. Either:</p><ol><li><p>You set clear expectations up front, including priority in queue, terms, definitions, rules, appropriate granularity, and timing, and the person or team really missed them without two-way collaborative communication regarding why. That&#8217;s on them.</p></li><li><p>You didn&#8217;t set clear expectations. That&#8217;s on you.</p></li></ol><p>I&#8217;ve seen #2 in out in the wild, much more than #1. You?</p>]]></content:encoded></item><item><title><![CDATA[Looking good for swimming, Lake Washington!]]></title><link>https://www.tenmoments.com/p/looking-good-for-swimming-lake-washington</link><guid isPermaLink="false">https://www.tenmoments.com/p/looking-good-for-swimming-lake-washington</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Fri, 13 Jun 2025 01:53:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qmvJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qmvJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qmvJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qmvJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qmvJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qmvJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qmvJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg" width="1284" height="2778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:2778,&quot;width&quot;:1284,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:0,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qmvJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qmvJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qmvJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qmvJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a6c7-bc7b-46be-846c-188be5e3e01c_1284x2778.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 14]]></title><description><![CDATA[Domain Registrar]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-14</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-14</guid><pubDate>Thu, 07 Nov 2024 17:06:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Domain registrars are companies that manage the reservation of internet domain names. They are accredited by the Internet Corporation for Assigned Names and Numbers (ICANN) and are responsible for the assignment of domain names to individuals or organizations. Namecheap is one such domain registrar that I prefer over others like GoDaddy. Namecheap offers a user-friendly interface, transparent pricing, and excellent customer support. Unlike some other registrars, Namecheap doesn't aggressively upsell other services during the checkout process, which makes for a more pleasant user experience. They also provide a free WhoisGuard service that protects your personal information from being publicly associated with your domain name. This is a feature that many other registrars charge extra for. Overall, I find Namecheap to be a reliable and cost-effective choice for domain registration.</p><p>Next: Learnings</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e00d23cd-a4a9-4cb3-b5bf-6276fa26be6b&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-14?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share post?</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-14?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-14?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Ten Moments</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><pre><code><code>touch fam &amp;&amp; echo "yo!" &gt; fam &amp;&amp; mkdir -p hawaii &amp;&amp; mv fam hawaii/</code></code></pre><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 13]]></title><description><![CDATA[Containerization]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-13</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-13</guid><pubDate>Thu, 31 Oct 2024 16:05:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Docker is an open-source platform that automates the deployment, scaling, and management of applications. It does this by encapsulating applications into containers, which are standardized executable components that combine application source code with the operating system (OS) libraries and dependencies required to run that code in any environment. Docker can significantly simplify the process of managing and deploying applications, which can be especially beneficial in a microservices architecture.</p><p>I used Docker to containerize my app. This means that I package the application and its dependencies into a Docker image, which can then be run consistently on any infrastructure. This eliminates the "it works on my machine" problem, because the application will run the same way in a container regardless of the underlying host system. Docker also integrates well with many popular continuous integration/continuous deployment (CI/CD) systems, making it a key part of any deployment pipeline.</p><p>Next: Domain Registrar</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e00d23cd-a4a9-4cb3-b5bf-6276fa26be6b&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-13?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share da post.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-13?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-13?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Ten Moments</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><pre><code><code>touch fam &amp;&amp; echo "yo!" &gt; fam &amp;&amp; mkdir -p hawaii &amp;&amp; mv fam hawaii/</code></code></pre><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 12]]></title><description><![CDATA[Cloud Services via Amazon Web Services (AWS)]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-12</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-12</guid><pubDate>Thu, 24 Oct 2024 16:05:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Amazon Web Services (AWS) is a comprehensive, evolving cloud computing platform provided by Amazon. It provides a mix of infrastructure as a service (IaaS), platform as a service (PaaS), and packaged software as a service (SaaS) offerings. AWS services can offer an organization tools such as compute power, database storage, and content delivery services. Over the years, I've tended to use it as my primary go-to for cloud computing services, over Google's Google Cloud Platform (GCP) or Microsoft's Azure.</p><p>IAM (Identity and Access Management) is a web service that helps you securely control access to AWS resources. It controls who can sign in to your AWS infrastructure and who is authorized to use the resources (EC2, S3 buckets, and so on). It can be a real pain in the butt, but it provides essential functionality to keep resources and applications secure.</p><p>S3 (Simple Storage Service) is an object storage service that offers industry-leading scalability, data availability, security, and performance. This means customers of all sizes and industries can use it to store and protect any amount of data for a range of use cases.</p><p>CloudFront is a fast content delivery network (CDN) service that securely delivers data, videos, applications, and APIs to customers globally with low latency, high transfer speeds, all within a developer-friendly environment.</p><p>EC2 (Elastic Compute Cloud) is a web service that provides resizable compute capacity in the cloud. It is designed to make web-scale cloud computing easier by providing a simple interface that allows you to obtain and configure capacity with minimal friction. EC2 instances are created from "blueprints" called AMIs. I started creating my own custom AMIs in 2009, so that all required code, packages and OS-level customizations were ready to go as soon as the instance was up and running. These days that's typically done with containers (e.g. Docker).</p><p>ECR (Elastic Container Registry) is a fully-managed Docker container registry that makes it easy for developers to store, manage, and deploy Docker container images.</p><p>ECS (Elastic Container Service) is a highly scalable, high-performance container orchestration service that supports Docker containers and allows you to easily run and scale containerized applications on AWS. Getting it working requires jumping through some challenging IAM hoops, but once it's working, it's a fast way to run applications and services.</p><p>Fargate is a serverless compute engine for containers that works with both Amazon Elastic Container Service (ECS) and Amazon Elastic Kubernetes Service (EKS). Fargate makes it easy for you to focus on building your applications; I've done very little with it directly, in the <a href="https://github.com/jpmalek/lake_washington_and_sammamish_temps">lake_washington_and_sammamish_temps</a> project.</p><p>Route 53 is a scalable and highly available Domain Name System (DNS) web service. It is designed to give developers and businesses an extremely reliable and cost-effective way to route end users to Internet applications. I've used it since 2009 for all of my DNS configuration needs.</p><p>CloudWatch is a monitoring and observability service built for DevOps engineers, developers, site reliability engineers (SREs), and IT managers. CloudWatch provides you with data and actionable insights to monitor your applications, respond to system-wide performance changes, optimize resource utilization, and get a unified view of operational health. I find it to be kind of clunky.</p><p>EventBridge is a serverless event bus that makes it easy to connect applications together using data from your own applications, integrated Software-as-a-Service (SaaS) applications, and AWS services.</p><p>Certificate Manager is a service that lets you easily provision, manage, and deploy public and private Secure Sockets Layer/Transport Layer Security (SSL/TLS) certificates for use with AWS services and your internal connected resources. It's a pretty incredible, far cry from how certificate management had to be done years ago. Once your certificate is created by AWS, all of the renewals are handled for you automatically, making those browser warnings about expired certs a thing of the not-so-distant past.</p><p>Secrets Manager protects access to your applications, services, and IT resources. This service enables you to easily rotate, manage, and retrieve database credentials, API keys, and other secrets throughout their lifecycle. Authentication credential rotation can be a real pain, and AWS has made it very easy to make sure it's done on a regular schedule.</p><p>All for the wonderful low price of: reasonably inexpensive, for the <a href="https://github.com/jpmalek/lake_washington_and_sammamish_temps">lake_washington_and_sammamish_temps</a> project. LMGBTY WRT monthly costs.</p><p>Next: Containerization</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e00d23cd-a4a9-4cb3-b5bf-6276fa26be6b&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-12?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share me post.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-12?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-12?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Ten Moments</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><pre><code><code>touch fam &amp;&amp; echo "yo!" &gt; fam &amp;&amp; mkdir -p hawaii &amp;&amp; mv fam hawaii/</code></code></pre><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 11]]></title><description><![CDATA[Markup Languages]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-11</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-11</guid><pubDate>Thu, 17 Oct 2024 16:05:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Markdown is a lightweight markup language used to add formatting elements to plaintext text documents. I'm using Markdown for this README.md file, which is a common practice in software projects. Markdown files are easy to write and read, and they can be converted to a variety of other formats (like HTML). This makes them ideal for writing documentation, as they can be read in a text editor or rendered in a web browser.</p><p>JSON (JavaScript Object Notation) is a popular data interchange format that's easy to read and write for humans and easy to parse and generate for machines. It's based on JavaScript syntax but is used in many programming languages beyond JavaScript. In my project, I might be using JSON to store configuration data, to communicate between a client and a server, or to store complex data structures for my application.</p><p>YAML (YAML Ain't Markup Language) is a human-friendly data serialization standard that's commonly used for configuration files, but can be used in many applications where data is being stored or transmitted. Like JSON, it's easy for humans to read and write. It also supports complex data structures. In my project, I might be using YAML for configuration files, especially if those files need to be edited by humans. YAML's ability to express complex data structures and its more human-friendly syntax can make it a better choice than JSON for these types of files.</p><p>All for the wonderful low price of: free.</p><p>Next: Cloud Services via Amazon Web Services (AWS)</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e00d23cd-a4a9-4cb3-b5bf-6276fa26be6b&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-11?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share this post!</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-11?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-11?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Ten Moments</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><pre><code><code>touch fam &amp;&amp; echo "yo!" &gt; fam &amp;&amp; mkdir -p hawaii &amp;&amp; mv fam hawaii/</code></code></pre><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 10]]></title><description><![CDATA[Unit Tests and Test Coverage]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-10</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-10</guid><pubDate>Thu, 10 Oct 2024 16:07:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Unit testing is a crucial aspect of software development that involves testing individual units of code (usually functions or methods) to ensure they work as expected. It helps developers catch bugs early in the development cycle, making them easier to fix prior to being deployed to production.</p><p>PyTest is a popular Python testing framework that simplifies the process of writing and running tests. With its easy-to-write syntax, you can write tests quickly and without the boilerplate code that some other testing frameworks require. PyTest also supports a wide range of advanced testing scenarios, including parameterized tests and fixtures. It also can output the percentage of code covered by unit tests, in HTML format for quick and easy reference within your browser. In my workflow, I'v integrated PyTest with a Git pre-commit hook. This means that my tests are automatically run every time I commit changes to my Git repository. If any test fails, the commit is aborted, ensuring that I don't accidentally commit broken code. This setup helps maintain the quality and reliability of my codebase.</p><p>All for the wonderful low price of: free.</p><p>Next: Markup Languages</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e00d23cd-a4a9-4cb3-b5bf-6276fa26be6b&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-10?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share this post!</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-10?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-10?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Ten Moments</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><pre><code><code>touch me &amp;&amp; echo "what!?" &gt; me &amp;&amp; mkdir -p hawaii &amp;&amp; mv me hawaii/</code></code></pre><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 9]]></title><description><![CDATA[Notable Python Libraries]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-9</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-9</guid><pubDate>Thu, 03 Oct 2024 16:05:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Selenium is a powerful tool for controlling a web browser, optionally in headless mode which is how it's used in the <a href="https://github.com/jpmalek/lake_washington_and_sammamish_temps">lake_washington_and_sammamish_temps</a> project. It's most commonly used for automating web applications for testing purposes, but is certainly not limited to just that. Boring web-based administration tasks can also be automated as well. Selenium has the support of some of the largest browser vendors who have taken (or are taking) steps to make Selenium a native part of their browser. It is also the core technology in countless other browser automation tools, APIs and frameworks.</p><p>Pandas is a software library written for the Python programming language for data manipulation and analysis. In particular, it offers data structures and operations for manipulating numerical tables and time series. It is free software released under the three-clause BSD license. The name is derived from the term "panel data", an econometrics term for data sets that include observations over multiple time periods for the same individuals.</p><p>Boto is the Amazon Web Services (AWS) SDK for Python. It allows Python developers to write software that makes use of services like Amazon S3, Amazon EC2, and others. With Boto, you can create, configure, and manage AWS services using Python code. This can be very useful for automating tasks, such as setting up infrastructure or deploying applications. Boto supports a wide range of AWS services, making it a key tool for anyone working with AWS.</p><p>All for the wonderful low price of: free.</p><p>Next: Unit tests and Test Coverage</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e00d23cd-a4a9-4cb3-b5bf-6276fa26be6b&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Ten Moments</span></a></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-9?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share just this post! </p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-9?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-9?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><pre><code><code>touch me &amp;&amp; echo "what!?" &gt; me &amp;&amp; mkdir -p hawaii &amp;&amp; mv me hawaii/</code></code></pre><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 8]]></title><description><![CDATA[Coding Languages]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-8</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-8</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Thu, 26 Sep 2024 16:05:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I've coded in many languages over the years, starting with C, HTML and Javascript.</p><p>I absolutely love Python.</p><p>Python has long been my language of choice for a variety of reasons. First and foremost, Python's syntax is clean and easy to understand, which makes it a great language for beginners. But don't let its simplicity fool you - Python is a powerful and versatile language that's used in everything from web development to data science to machine learning. Python's philosophy is "There should be one-- and preferably only one --obvious way to do it", which leads to more readable and maintainable code.</p><p>Python also has a rich ecosystem of libraries and frameworks. Whether you're working with data (Pandas, NumPy), building a web app (Django, Flask), or delving into machine learning (scikit-learn, TensorFlow), there's likely a Python library that can make your job easier. Python's extensive standard library, often described as "batteries included," means that often you don't even need to install anything to start building.</p><p>The Zen of Python, a collection of 19 "guiding principles", really encapsulates why I love Python. If you run this command in a Python interpreter:</p><pre><code><code>import this
</code></code></pre><p>You'll get:</p><pre><code><code>The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
</code></code></pre><p>It's a great reminder of what makes Python special, and a guide to writing good Python code.</p><p>As for BASH, I've already talked about why I love it so much: solid, simple commands that can be chained together reliably to produce powerful outcomes.</p><p>All for the wonderful low price of: free.</p><p>Next: Noteable Python Libraries</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e00d23cd-a4a9-4cb3-b5bf-6276fa26be6b&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-8?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">This post is public so feel free to share it:</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-8?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-8?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Ten Moments</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><pre><code><code>touch me &amp;&amp; echo "beer" &gt; me &amp;&amp; mkdir -p hawaii &amp;&amp; mv me hawaii/</code></code></pre><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 7]]></title><description><![CDATA[Revision Control and Related Tools]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-7</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-7</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Thu, 19 Sep 2024 16:05:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For revision control, I was a long-time svn user, but years ago switched myself and my teams to Git.</p><p>Git is a distributed version control system that has become the de facto standard for source code management in the software industry. It allows multiple developers to work on the same codebase without stepping on each other's toes. Git tracks changes to files over time, so you can always see who made what changes and when. This makes it easier to track down bugs and understand the evolution of a project. Git also supports branching and merging, which allows developers to experiment with new features or fixes without affecting the main codebase.</p><p>GitHub is a web-based hosting service for Git repositories. It provides a user-friendly interface for managing and viewing Git repositories, along with a host of other features that facilitate collaborative development. With GitHub, you can easily share your code with others, contribute to open-source projects, and review code changes. GitHub also integrates with many other tools, making it a central hub for many development workflows.</p><p>GitHub Actions is a CI/CD (Continuous Integration/Continuous Deployment) tool that allows you to automate your software workflows directly within your GitHub repository. With GitHub Actions, you can build, test, and deploy your code right from GitHub. You can also assign tasks and workflows based on certain events, such as pushing code to a branch or creating a pull request. This level of automation can greatly increase productivity and ensure consistent quality of code.</p><p>GitHub Pages is a static site hosting service that takes HTML, CSS, and JavaScript files straight from a repository on GitHub, optionally runs the files through a build process, and publishes a website. It's a great way to host project pages, documentation, or a personal blog. One of the key benefits of GitHub Pages is its tight integration with GitHub, which means you can manage your website content with the same Git workflows you use for your code.</p><p>The <a href="https://github.com/jpmalek/lake_washington_and_sammamish_temps">lake_washington_and_sammamish_temps</a> project uses Github Actions to push code unit test coverage results to Github Pages whenever code is pushed to the main branch.</p><p>GitHub Issues is a robust tracking system that allows you to track bugs, enhancements, or other requests related to your project. It's more than just a bug tracker - it's also a great way to manage your development tasks and workflows. You can assign issues to specific team members, label them for easy searching, and reference them directly in your code commits. This makes GitHub Issues a central part of your project management toolkit. It's great, but frankly it doesn't yet quite compare to other project management tools like Asana or the toolset provided by Atlassian (Jira, etc), albiet at much higher costs.</p><p>All for the wonderful low price of: under $10 per month for a Github account.</p><p>Next: Coding Languages</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;77eaf8a7-4891-497e-8ece-b10f02e8e6b8&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-7?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">This post is public so feel free to share it:</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-7?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-7?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.tenmoments.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Ten Moments</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 6]]></title><description><![CDATA[Environment and Package Management]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-6</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-6</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Thu, 12 Sep 2024 16:05:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It's critical to leverage the best available "tools that manage your tools" and your working environment reliably and efficiently.</p><p>Anaconda is a powerful tool for Python and R data science and machine learning. It's an open-source distribution that simplifies package management and deployment. Anaconda comes with a suite of over a thousand data science packages, and a package manager called Conda. Conda makes it easy to install both Python and non-Python packages, manage environments, and ensure all packages work together without conflicts. Anaconda also includes Jupyter Notebook, an environment for interactive computing, which is widely used in data analysis and scientific research.</p><p>Apt, or Advanced Package Tool, is the default package manager for Ubuntu and other Debian-based Linux distributions. It handles the installation and removal of software on your system. Apt simplifies the process of managing software on Unix-like computer systems by automating the retrieval, configuration, and installation of software packages. It also resolves and handles dependencies automatically. This means that if you want to install a software package that relies on other packages to function, Apt will identify these dependencies and install all necessary packages.</p><p>Pip, which stands for "Pip Installs Packages", is the standard package manager for Python. It allows you to install and manage additional libraries and dependencies that are not distributed as part of the standard Python library. Pip provides a simple way to install packages from the Python Package Index (PyPI) and other package directories. It also supports virtual environments, which is a key feature for Python developers as it allows them to create isolated Python environments for different projects, ensuring dependencies are kept separate and organized.</p><p>All for the wonderful low price of: free.</p><p>Next: Revision Control and Related Tools</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ba8d0c68-10c4-4454-9a65-cf29b94ba658&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-6?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">This post is public so feel free to share it:</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-6?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-6?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Ten Moments</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 5]]></title><description><![CDATA[IDE and Jupyter Notebooks]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-5</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-5</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Thu, 05 Sep 2024 16:05:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>While I've been a long-time Vim user and advocate (and Emacs long ago), over the years Visual Studio Code (VS Code) has become my go-to IDE for several reasons. As a long-time Vim user, I appreciate the efficiency and control that Vim offers. However, VS Code brings together the best of both worlds. It provides a modern, feature-rich interface while also offering a Vim emulation mode. This means I can leverage my Vim keybindings and workflows within a more robust development environment. But I don't need to anymore, really.</p><p>VS Code's IntelliSense feature is a game-changer. It offers smart completions based on variable types, function definitions, and imported modules. This feature alone has saved me countless hours of time. The built-in Git support is another major plus. Being able to stage and commit changes, create new branches, and view diffs right from the editor with a modern-day UI is incredibly convenient.</p><p>The extensibility of VS Code is another reason why I love it. There's a vast marketplace of extensions that can add new languages, themes, debuggers, and more to the editor. From BASH intellisense to Docker and everything else, quick and easy...it's a game-changer. It's easy to customize VS Code to fit my exact needs. And despite all these features, VS Code remains fast and responsive, which is a testament to its well-designed architecture.</p><p>As for Jupyter notebooks, they have transformed the way I work with Python, especially for data analysis and visualization tasks. The ability to interleave code, outputs, and explanatory text in a single document is incredibly powerful. I can experiment with code, see the results, and make adjustments in a very efficient and interactive way. This is a stark contrast to the traditional edit-run-debug cycle that can be time-consuming and disruptive.</p><p>Jupyter notebooks also make it easy to share my work with others. The notebooks are self-contained and can be rendered in a web browser, making them accessible to anyone, regardless of their development environment. This has made Jupyter notebooks an essential tool for collaborative projects and for presenting my work in a clear and understandable way. I've started adding one by default to every repo I work in.</p><p>All for the wonderful low price of: free.</p><p>Next: Environment and Package Management</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;539e1009-cd77-42cd-82c6-b67bd873fe9c&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p> </p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-5?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share post!?</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-5?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-5?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Ten Moments</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 4]]></title><description><![CDATA[Operating Systems]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-4</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-4</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Thu, 29 Aug 2024 16:04:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Unix/Linux operating systems have long been a favorite of mine due to their flexibility, robustness, and the control offered to the user. My go-to distribution is Ubuntu (previously Debian), which has great package management built in. It's an open-source system, which means it's continually being improved by a community of dedicated developers. This openness also allows for a level of customization and control that's hard to match. You can tweak and tune your system to fit your exact needs, whether you're setting up a server, a desktop workstation, or a tiny embedded system. The vast array of distributions available, each with their own strengths, allows you to choose a system that's tailored to your specific requirements.</p><p>One of the most powerful aspects of Linux that I absolutely love is its command-line interface and the suite of tools that come with it. These tools, often referred to as the "Unix philosophy," are designed to do one thing and do it well. They can be combined in countless ways to perform complex tasks. For example, the grep command can be used to search for a specific string in a file or stream of input. The ls command lists the contents of a directory. You can pipe the output of ls into grep to search for a specific file in a directory. The command would look like this:</p><pre><code><code>ls | grep myfile.txt 
</code></code></pre><p>This will list all files in the current directory and then search that list for "myfile.txt". To get a bit cheeky, this will create a file named "me", fill "me" with beer, and move me to hawaii:</p><pre><code><code>touch me &amp;&amp; echo "beer" &gt; me &amp;&amp; mkdir -p hawaii &amp;&amp; mv me hawaii/
</code></code></pre><p>This ability to chain reliable, well-documented, modular commands together allows for a level of power and flexibility that's hard to match in other operating systems.</p><p>After using Windows for many years and then switching many more years ago, I also have a deep appreciation for the macOS operating system. Being Unix-based, it combines the power and flexibility of Unix with the sleek and intuitive user interface that Apple is known for. This means I can leverage powerful command-line tools and scripts, similar to a Linux environment, while also enjoying a smooth, user-friendly desktop experience. The seamless integration between software and hardware in a Mac system also contributes to a stable and efficient operating environment. In terms of security, macOS has a strong track record. It's built on a Unix-based foundation which is known for its robust security features. Furthermore, Apple has implemented several security measures such as Gatekeeper, which blocks untrusted applications, and XProtect, an automatic malware detection tool. Additionally, the fact that macOS is less targeted by malware compared to other operating systems adds an extra layer of security.</p><p>I'm a big proponent of doing development work in the environment that matches where the code will end up running. So, if I'm working on server code, I'll typically be working on my Mac, but remoting into a cloud server or container that's running Ubuntu. No point in wrestling with package install challenges on my Mac when the target environment is Ubuntu! The <a href="https://github.com/jpmalek/lake_washington_and_sammamish_temps">lake_washington_and_sammamish_temps</a> project was a bit of an exception; since it uses Selenium and Chrome, I found it easier to code and debug the web browser interactions on my local machine.</p><p>*nix OS provided for the wonderful low price of: free!</p><p>Next: IDE and Jupyter Notebooks</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d8899b99-4a00-4c8a-be15-83eeea298399&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Please subscribe!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-4?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share me post!</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-4?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-4?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Ten Moments</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 3]]></title><description><![CDATA[Technologies and Tools Overview]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-3</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-3</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Fri, 23 Aug 2024 04:45:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here&#8217;s the overview of the technologies and tools used, to build the web service. In the next post, I&#8217;ll start diving into why I chose these tools. </p><ul><li><p><strong>Operating Systems</strong>: OSX, Linux Ubuntu</p></li><li><p><strong>Integrated Development Environment (IDE)</strong>: VS Code, Jupyter Notebooks</p></li><li><p><strong>Package Management</strong>: Anaconda, Apt, Pip</p></li><li><p><strong>Revision Control and Related Tools</strong>: Git, GitHub, Github Actions, Github Pages, Github Issues</p></li><li><p><strong>Coding Languages</strong>: Python, BASH</p></li><li><p><strong>Noteable Python Libraries</strong>: Selenium, Pandas, Boto</p></li><li><p><strong>Unit tests and Test Coverage</strong>: PyTest</p></li><li><p><strong>Markup Languages</strong>: Markdown, JSON, YAML</p></li><li><p><strong>Cloud Services via Amazon Web Services (AWS)</strong>: IAM, EC2, S3, CloudFront, ECS, ECR, Fargate, Route 53, CloudWatch, EventBridge, Certificate Manager, Secrets Manager</p></li><li><p><strong>Containerization</strong>: Docker</p></li><li><p><strong>Domain Registrar</strong>: Namecheap</p></li></ul><p>Next: Operating Systems</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5e7b6514-e306-49b2-ad1a-0de96658d731&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-3?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share this post?</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-3?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-3?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Ten Moments</span></a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 2]]></title><description><![CDATA[The Why]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-2</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-2</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Thu, 15 Aug 2024 16:05:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When spring hits in Washington state, we start thinking about jumping in the lakes here in Seattle! Year over year, I've often considered dropping a network-enabled water temperature gauge into the lake and creating an IOT project to monitor and publish lake water temperature data. Finally in 2024 I decided to dig in on this project.</p><p>My first step was to do some research on what has already been done on this front.</p><p>My findings were very interesting; I half-expected there to be an API(s) that surfaced lake water temperature data worldwide, or at least nationwide. After looking around quite a bit, and getting some help via email (thank you!) from Ronald Henderson and others at the USGS, it turns out that there apparently isn't a good source of this kind of data, outside of the county level. Interesting, given current climate concerns with regard to surface water temperatures!</p><p>This left me focused on the information provided on the King County website <a href="https://kingcounty.gov/en/dept/dnrp/nature-recreation/environment-ecology-conservation/science-services">here</a>. I found it a bit cumbersome to find what I was looking for (which was a good thing, in terms of substantiating my project), so I reached out and got some help from Curtis DeGasperi, Water Quality Engineer at King County Department of Natural Resources and Parks. They first pointed me to data sources <a href="https://data.kingcounty.gov/Environment-Waste-Management/Water-Quality/vwmt-pvjw/about_data">here</a>, but I was looking for more of a real-time data feed, so I followed up with more questions.</p><p>Per Curtis' response, I learned that the data sources for the pages <a href="https://green2.kingcounty.gov/lakes/">here</a> are updated only twice monthly (Mar-Nov) and monthly (Dec-Feb), and it takes ~45 days after each sampling event for the data generated via field and lab analysis to post to the web.</p><p>However, I was pointed to the Lake buoy data pages <a href="https://green2.kingcounty.gov/lake-buoy/default.aspx">here</a>, learning that real-time lake temperatures could be found by scrolling-over the buoy locations. Cool!</p><p>After reading about the buoy specifications <a href="https://kingcounty.gov/services/environment/water-and-land/lakes/lake-buoy-data/BuoyInfo.aspx">here</a>, researching their costs online, and reviewing the very well done maintenance and quality assurance plan <a href="https://green2.kingcounty.gov/ScienceLibrary/Document.aspx?ArticleID=532">here</a> I came to the happy conclusion that researching, finding, buying and dropping my own sensor into the lake would not be the best next step; I decided to proceed with leveraging the data King County rigorously collects, and received permission to do so, noting their disclaimer <a href="https://kingcounty.gov/services/environment/water-and-land/lakes/lake-buoy-data/provisional.aspx">here</a>.</p><p>With all of this research, I landed on a plan to publish lake water temperature data that could be consumed in JSON format by any web-enabled application I might decide to build in the future. I'd get what I primarily wanted, a real-time temperature data JSON file. As a cool added outcome, I'd process all historical temperature data (since 1983) to determine what the all-time recorded high and low temperatures are, and the by-month highs and lows, regardless of year.</p><p>You may have noticed that my service posts data to swimming.withelvis.com. In one of my previous startups, I had a saying "with Elvis", e.g. "Next we're going to build a new client app! With Elvis." The idea being that Elvis is a cool legend, and doing anything "with Elvis" would make it that much more fun and better. I got so wrapped up in the idea that I purchased the domain name "withelvis.com", which had been sitting for years, unused. I got a kick out of the "swimming.withelvis.com" idea, and so it is.</p><p>Over many years in the startup world, I'd never published my own personal open-source project, and felt this was the perfect candidate and time to do it. So it is!</p><p>Ultimately I hope this fun little project serves to help others in some way. Cheers!</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e39d7c16-8dc4-48a9-a6e3-6a5dc8dc628a&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p>Next: technologies and tools overview</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-2?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share this post!</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-2?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-2?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Ten Moments</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Swimming with Elvis: Part 1]]></title><description><![CDATA[I published an open-source web service here on Github that leverages Washington State King County lake data, to track current, record high and record low temperatures at a depth of 1 meter for Lake Washington, and Lake Sammamish (record highs-lows for Lake Union are also included).]]></description><link>https://www.tenmoments.com/p/swimming-with-elvis-part-1</link><guid isPermaLink="false">https://www.tenmoments.com/p/swimming-with-elvis-part-1</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Thu, 08 Aug 2024 16:05:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This &#8220;Swimming with Elvis&#8221; series of posts is about the open-source web service I published <a href="https://github.com/jpmalek/lake_washington_and_sammamish_temps">here</a> on Github that leverages Washington State King County lake data, to track current, record high and record low temperatures at a depth of 1 meter for Lake Washington, and Lake Sammamish (record highs-lows for Lake Union are also included).  The web service is used by the Seattle Lakes App to show the current and record temperatures for the lakes:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;7e0bd527-48ae-4f15-86c1-4e5c24ae4f11&quot;,&quot;caption&quot;:&quot;The Seattle Lakes app provides real-time temperatures for Lake Washington and Lake Sammamish in King County, WA. It also provides record all-time highs and lows, and the current month&#8217;s highs and lows for Lake Washington, Lake Sammamish and Lake Union. It can be downloaded from the Apple Store and from the Google Play store.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Seattle Lakes App&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:50711983,&quot;name&quot;:&quot;Jeff Malek&quot;,&quot;bio&quot;:&quot;I live in Seattle, have been in the technology start-up world since the late 90's, love my family, my work, and playing music. &quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00969370-78be-4dbf-b55e-02bb0bfac66f_1024x1024.webp&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-01T04:34:04.775Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34364f17-5756-46b6-a631-c72511fee308_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.tenmoments.com/p/seattle-lakes-app&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144192796,&quot;type&quot;:&quot;page&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Ten Moments&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>I&#8217;ll write about why I did the work, my research, and the tools I chose. </p><p>Next: the why</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-1?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Feel free to share this post.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/p/swimming-with-elvis-part-1?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/p/swimming-with-elvis-part-1?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Ten Moments&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Ten Moments</span></a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Ten Moments! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Welcome]]></title><description><![CDATA[This is Ten Moments.]]></description><link>https://www.tenmoments.com/p/welcome</link><guid isPermaLink="false">https://www.tenmoments.com/p/welcome</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Sun, 21 Apr 2024 21:52:13 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/75061c1d-2d0b-492f-89f2-cba601988f3a_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://substack.com/refer/jeffmalek?utm_source=substack&amp;utm_context=post&amp;utm_content=143820935&amp;utm_campaign=writer_referral_button&quot;,&quot;text&quot;:&quot;Start a Substack&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Start writing today. Use the button below to create your own Substack and connect your publication with Ten Moments</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.com/refer/jeffmalek?utm_source=substack&amp;utm_context=post&amp;utm_content=143820935&amp;utm_campaign=writer_referral_button&quot;,&quot;text&quot;:&quot;Start a Substack&quot;,&quot;hasDynamicSubstitutions&quot;:false}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://substack.com/refer/jeffmalek?utm_source=substack&amp;utm_context=post&amp;utm_content=143820935&amp;utm_campaign=writer_referral_button"><span>Start a Substack</span></a></p></div><p>This is Ten Moments.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tenmoments.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tenmoments.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Some of the best software developers I’ve worked with are women. So…]]></title><description><![CDATA[I&#8217;m glad to see gender diversity on the rise in software development: non-male respondents increased by 4% in 2017 vs.]]></description><link>https://www.tenmoments.com/p/some-of-the-best-software-developers-ive-worked-with-are-women-so</link><guid isPermaLink="false">https://www.tenmoments.com/p/some-of-the-best-software-developers-ive-worked-with-are-women-so</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Thu, 23 Mar 2017 16:43:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m glad to see gender diversity on the rise in software development: non-male respondents increased by 4% in 2017 vs. 2016: <a href="http://bit.ly/gowomendevs">http://bit.ly/gowomendevs</a></p>]]></content:encoded></item><item><title><![CDATA[5 Attributes Of My Favorite Developers]]></title><description><![CDATA[I gave a talk on this subject to the first ever Code Fellows class, in Seattle last Friday.]]></description><link>https://www.tenmoments.com/p/5-attributes-of-my-favorite-developers</link><guid isPermaLink="false">https://www.tenmoments.com/p/5-attributes-of-my-favorite-developers</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Fri, 15 Mar 2013 04:31:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I gave a talk on this subject to the first ever Code Fellows class, in Seattle last Friday. &nbsp;Here&#8217;s the <a href="//j.mp/Z2IPcP">slide deck</a>, hope you like it.</p>]]></content:encoded></item><item><title><![CDATA[Database Sharding : dbShards vs. Amazon AWS RDS]]></title><description><![CDATA[A friend was recently asking about our backend database systems.]]></description><link>https://www.tenmoments.com/p/database-sharding-dbshards-vs-amazon-aws-rds</link><guid isPermaLink="false">https://www.tenmoments.com/p/database-sharding-dbshards-vs-amazon-aws-rds</guid><dc:creator><![CDATA[Jeff Malek]]></dc:creator><pubDate>Fri, 28 Sep 2012 21:33:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vhyS!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f019dc-4ea2-4292-a33c-b1390d6ac7a7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A friend was recently asking about our backend database systems. &nbsp;Our systems are able to successfully handle high-volume transactional traffic through our API coming from various customers, having vastly different spiking patterns, &nbsp;including traffic from a site that&#8217;s in the top-100 list for highest traffic on the net. &nbsp; Don&#8217;t get me wrong; I don&#8217;t want to sound overly impressed with what our little team has been able to accomplish, we&#8217;re not perfect by any means and we&#8217;re not talking about Google or Facebook traffic levels. &nbsp;But serving requests to over one million unique users in an hour, and doing 50K <a href="http://en.wikipedia.org/wiki/Database" title="Database">database queries</a> per second isn&#8217;t trivial, either.</p><p>I responded to my friend along the following lines:</p><ol><li><p>If you&#8217;re going with an <a href="http://en.wikipedia.org/wiki/Relational_database_management_system" title="Relational database management system">RDBMS</a>, MySQL is the right, best choice in my opinion. &nbsp;It&#8217;s worked very well for us over the years.</p></li><li><p>Since you&#8217;re going the standard <a href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=45498" title="SQL">SQL</a>route:</p><ol><li><p>If your database is expected to grow in step with traffic, and you&#8217;re thinking about <a href="http://en.wikipedia.org/wiki/Shard_%28database_architecture%29" title="Shard (database architecture)">sharding</a>&nbsp;early &#8211; kudos. &nbsp;You&#8217;re likely going to have to do it, sooner or later.</p><ol><li><p>Sooner vs. later if you&#8217;re in the cloud and running under its performance constraints.</p></li><li><p>Do it out of the gate, if you have time, after you&#8217;ve figured out&nbsp;<em>how</em>&nbsp;you&#8217;re going to do it (i.e. whether you&#8217;re going to leverage a tool, DYI, etc).</p><ol><li><p>In other words, if you have time, don&#8217;t &#8220;see how long you can survive, scaling vertically&#8221;.</p><ol><li><p>Sharding while running the race : not a fun transition to make.</p></li></ol></li></ol></li><li><p>I realize what I&#8217;m saying is counter to popular thinking, which is &#8220;don&#8217;t shard unless you absolutely have to&#8221;.</p><ol><li><p>&nbsp;Without the assumption that your data set is going to grow in step with your traffic,&nbsp;I&#8217;d be saying the same thing.</p></li></ol></li></ol></li><li><p>Designing your schema and app layer for sharding, sharded on as few keys as possible, ideally just one, is not future-proofing, it&#8217;s a critical P0.</p></li></ol></li><li><p>Since you&#8217;re going to be sharding MySQL, your options are relatively limited last I checked.</p><ol><li><p>Ask for input from folks who have done it before.</p></li><li><p>The other sharding options I started looking at over two years ago all had disallowing limitations, given our business model.</p></li><li><p>At quick search-glance just now, it also does appear that dbShards is ruling this space at this point.</p></li></ol></li><li><p>So barring any other options I&#8217;m missing, your best options that I&#8217;m aware of:</p><ol><li><p><a href="http://www.dbshards.com/">dbShards</a></p><ol><li><p>Definitions we/they use, to help clarify discussion &nbsp;:</p><ol><li><p>global tables : tables that contain the same data on every shard, consistency managed by dbShards.</p></li><li><p>shard : two (primary and secondary) or more hosts that house all global table data, plus any shard-specific data.</p></li><li><p>shard tree : conceptually, the distribution of sharded data amongst nodes, based on one or more shard keys.</p></li><li><p>reliable replication : dbShards proprietary replication, more details on this below.</p></li></ol></li><li><p>pros</p><ol><li><p>The obvious : you&#8217;ll be able to do shard-count more reads and writes that you&#8217;d otherwise be able to do with a monolithic, non-sharded backend (approximately).</p><ol><li><p>Alternatively, with a single-primary read-write or write-only node, and multi-secondary read-only nodes you could scale reads to some degree.</p><ol><li><p>But be prepared to manage the complexities that come along with eventual read-consistency, including replication-lag instrumentation and discovery, beyond any user notifications around data not being up-to-date (if needed).</p></li></ol></li></ol></li><li><p>It was built by folks who have only been thinking about sharding and its complexities, for many years</p><ol><li><p>who have plans on their roadmap to fill any gaps with their current product</p><ol><li><p>gaps that will start to appear quickly, to anyone trying to build their own sharding solution.</p><ol><li><p>In other words, do-it-yourself-ers will at some point be losing a race with <a href="http://www.codefutures.com/" title="CodeFutures">CodeFutures</a> to close the same gaps, while already trying to win the race against their market competitors.</p></li></ol></li></ol></li></ol></li><li><p>It&#8217;s in Java, vs. some other non-performant or obscure (syntactically&nbsp;or otherwise) language.</p></li><li><p>It allows for multiple shard trees; if you want (or have to) trade in other benefits for sharding on more than one key, you can.</p><ol><li><p>Benefits of just sharding on one key include, amongst other things, knowing that if you have 16 shards, and one is unavailable, and the rest of the cluster is available, 1/16th of your data is unavailable.</p><ol><li><p>With more than one shard tree, good luck doing that kind of math.</p></li></ol></li></ol></li><li><p>It provides a solution for the auto-increment or &#8220;I need unique key IDs&#8221; problem.</p></li><li><p>It provides a solution for the &#8220;I need connection pooling that&#8217;s balanced to shard and node count&#8221; problem.</p></li><li><p>It provides a solution for the &#8220;I want an algorithm for balancing shard reads and writes&#8221;.</p><ol><li><p>Additionally, &#8220;I want the shard key to be based on a column I&#8217;m populating with the concatenated result of two other string keys&#8221;.</p></li></ol></li><li><p>It has a distributed-agent architecture, vs. being deeply embedded (e.g. there are free-standing data streaming agents, replication agents, etc instead of MySQL plugins, code modules, etc ).</p><ol><li><p>Provides future-proofing, scalability and plug-ability.</p></li><li><p>Easier to manage than other design approaches.</p></li></ol></li><li><p>Streaming agents allow you to plug into the update/insert stream, and do what you like with changes to data.</p><ol><li><p>We use this to stream data into&nbsp;<a href="http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-limitations.html">Redis</a>, amongst other things. &nbsp;Redis has worked out very well for us thus far, by the way.</p></li><li><p>Other dbShards customers use this to replicate to other <a href="http://www.symantec.com/database-management" title="Database management">DBMS</a> engines, managed by dbShards or not, such as a column store like <a href="http://www.monetdb.org" title="MonetDB">MonetDb</a>, <a href="http://www.infobright.com" title="Infobright">InfoBright</a>, even a single standalone <a href="http://www.mysql.com" title="MySQL">MySQL server</a> if it can handle the load.</p></li></ol></li><li><p>It supports consistent writes to global tables; when a write is done to a global table, its guaranteed to have been done on all global tables.</p></li><li><p>It doesn&#8217;t rely on MySQL&#8217;s replication and its shortcomings, but rather on its own robust, low-maintenance and flexible replication model.</p></li><li><p>Its command-line console&nbsp;provides a lot of functionality you&#8217;d rather not have to build.</p><ol><li><p>Allows you to run queries against the shard cluster, like you were at the MySQL command line.</p></li><li><p>Soon they&#8217;re releasing a new plug-compatible version of the open source MyOSP driver, so we&#8217;ll be able to use the same mysql command line to access both dbShards and non-dbShards managed MySQL databases.</p></li></ol></li><li><p>Its web console provides a lot of functionality you&#8217;d rather not have to build.</p><ol><li><p>Agent management and reporting, including replication statistics.</p></li><li><p>Displays warning, error, diagnostic information, and graphs query counts with types.</p></li><li><p>Done via the &#8220;dbsmanage&#8221; host, which provides centralized shard node management as well.</p></li></ol></li><li><p>It&#8217;s designed with&nbsp;<a href="http://dev.mysql.com/doc/mysql-ha-scalability/en/ha-overview.html">HA</a>&nbsp;in mind.</p><ol><li><p>Each shard is two (or optionally more, I think) nodes. &nbsp;We put all primary nodes in one AWS availability zone, secondaries in a different one, for protection against zone outages.</p></li><li><p>Write consistency to two nodes; in other words DB transactions only complete after disk writes have completed on both nodes. &nbsp;Secondary writes only require file-system (vs. MySQL) disk writes.</p></li><li><p>Managed backups with configurable intervals; MySQL EC2/EBS backups aren&#8217;t trivial.</p></li><li><p>Web-console based fail-over from primary to secondary; this is very helpful, particularly for maintenance purposes.</p></li></ol></li><li><p>Proven to work well in production, by us and others.</p><ol><li><p>We&#8217;ve performed 100K queries per second in load-testing, on AWS/EC2, using m1.xlarge instances.</p></li></ol></li><li><p>Designed with the cloud and AWS in mind, which was a great fit for us since we&#8217;re 100% in AWS.</p></li><li><p>&#8220;dbsmanage&#8221; host</p></li><li><p>Drivers included, of course.</p><ol><li><p>In addition to MyOSP, they have JDBC, PQOSP (native Postgres), ADO OSP (for .NET), and soon ODBC.</p></li></ol></li><li><p>Go-fish queries allow you to write standard SQL against sharded data</p><ol><li><p>e.g. sharded on&nbsp;user.id&nbsp;: SELECT * FROM user where FirstName=&#8217;Foo&#8217;;</p><ol><li><p>will return all results from all shards&nbsp;performing automatic aggregation</p><ol><li><p>sorting using a streaming map-reduce method</p></li></ol></li></ol></li></ol></li><li><p>Relatively easy to implement and go live with; took us about six weeks of hard work, deadline-looming.</p></li><li><p>It&#8217;s the market-leading product, from what I can tell.</p><ol><li><p>5 of the Top 50 Facebook apps in the world run dbShards.</p></li></ol></li><li><p>It supports sharding RDBMSs besides MySQL, including Postgres, DB2, SQL Server, MonetDb, others coming.</p></li><li><p>Team : top-notch, jump-through-their-butts-for-you, good guys.</p></li><li><p>Ability to stream data to a highly performant BI backend.</p></li></ol></li><li><p>cons</p><ol><li><p>As you can see, some of these are on the pro list too, double-edged swords.</p></li><li><p>Cost &#8211; it&#8217;s not free obviously, nor is it open source.</p><ol><li><p>Weigh the cost against market opportunity, and/or the additional headcount required to take a different approach.</p></li></ol></li><li><p>It&#8217;s in Java, vs. Python (snark). &nbsp;Good thing we&#8217;ve got a multi-talented, <a href="https://twitter.com/harleyholt">kick-ass engineer </a>who is now writing Java plugins when needed.</p></li><li><p>Doesn&#8217;t rely on MySQL replication, which has its annoyances but has been under development for a long time.</p><ol><li><p>Nor is there enough instrumentation around lag. &nbsp;What&#8217;s needed is a programmatic way to find this out.</p></li></ol></li><li><p>Allows for multiple shard trees.</p><ol><li><p>I&#8217;m told many businesses need this as a P0, and that might be true, even for us.</p></li><li><p>But I&#8217;d personally prefer to jump through fire in order to have a single shard tree, if at all possible.</p><ol><li><p>The complexities of multiple shard trees, particularly when it comes to HA, are too expensive to justify unless absolutely necessary, in my humble opinion.</p></li></ol></li></ol></li><li><p>Better monitoring instrumentation is needed, ideally we&#8217;d have a programmatic way to determine various states and metrics.</p></li><li><p>Command line console needs improvement, not all standard SQL is supported.</p><ol><li><p>That said, we&#8217;ve managed to get by with it, only&nbsp;occasionally&nbsp;using it for diagnostics.</p></li></ol></li><li><p>Can&#8217;t do SQL JOINs from between shard trees. &nbsp;I&#8217;ve heard this is coming in a future release.</p><ol><li><p>This can be a real PITA, but it&#8217;s a relatively complex feature.</p></li><li><p>Another reason not to have multiple shard trees, if you can avoid them.</p></li></ol></li><li><p>Go-fish queries are very expensive, and can slow performance to a halt, across the board.</p><ol><li><p>We&#8217;re currently testing a hot-fix that makes this much less severe.</p></li><li><p>But slow queries can take down MySQL (e.g. thread starvation), sharding or no.</p></li></ol></li><li><p>HA limitations,&nbsp;gaps that are on their near-term roadmap, I&nbsp;<em>think&nbsp;</em>to be released this year:</p><ol><li><p>No support for eventually-consistent writes to global tables means all primaries must be available for global writes.</p><ol><li><p>Async, eventually consistent writes should be available as a feature in their next build, by early October.</p></li></ol></li><li><p>Fail-over to secondaries or back to primaries can only happen if both nodes are responding.</p><ol><li><p>in other words, you can&#8217;t say via the console:</p><ol><li><p>&#8216;ignore the unresponsive primary, go ahead and use the secondary&#8217;</p></li></ol></li><li><p>or:</p><ol><li><p>&#8216;stand me up a new EC2 instance for a secondary, in this zone/region, sync it with the existing primary, and go back into production with it&#8217;</p></li></ol></li></ol></li><li><p>Reliable replication currently requires two nodes to be available.</p><ol><li><p>In other words, if a single host goes down, writes for its shard are disallowed.</p><ol><li><p>In the latest versions, there&#8217;s a configuration &#8220;switch&#8221; that allows for failing-down to primary</p><ol><li><p>But not fail down to secondary. &nbsp;This is expected in an early Q4 2012 version release.</p></li></ol></li></ol></li></ol></li><li><p>dbsmanage host must be available.</p><ol><li><p>dbShards can run without it or a bit, but stats/alerts will be unavailable for that period.</p></li></ol></li><li><p>Shard 1 must be available for new auto-increment batch requests.</p></li><li><p>go-fish queries depend on all primaries (or maybe all secondaries via configuration, but not some mix of the two as far as I&#8217;m aware) to be available</p></li></ol></li></ol></li></ol></li><li><p>DYI</p><ol><li><p>I can rattle off the names of a number of companies who have done this, and it took many months longer than our deployment of dbShards (about six weeks, largely due to the schema being largely ready for it).</p></li><li><p>Given a lot of time to do it, appeals to me even now, but I still wouldn&#8217;t go this route, given the pros/cons above.</p></li></ol></li><li><p>The latest release of&nbsp;<a href="http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster.html">MySQL Cluster</a>&nbsp;may be an option for you, it wasn&#8217;t for us back with MySQL 5.0, and not likely now, due to its limitations (e.g. no InnoDB).</p></li><li><p>AWS RDS was an option for us from the onset, and I chose to manage our own instances running MySQL, before deciding how we&#8217;d shard.</p><ol><li><p>For the following reasons:</p><ol><li><p>I wanted ownership/control around the replication stream, which RDS doesn&#8217;t allow for (last I looked) for things like:</p><ol><li><p>BI/reporting tools that don&#8217;t require queries to be run against secondary hosts.</p><ol><li><p>This hasn&#8217;t panned out as planned, but could still be implemented, and I&#8217;m happy we have this option, hope to get to it sometime soon.</p></li></ol></li><li><p>Asynchronous post-transaction data processing.</p><ol><li><p>This has worked out very well, particularly with dbShards, which allows you to build streaming plugins and do whatever you want when data changes, with that data.</p><ol><li><p>Event-driven model.</p></li><li><p>Better for us than doing it at the app layer, which would increase latencies to our API.</p></li></ol></li></ol></li></ol></li><li><p>Concern that the critical foundational knobs and levers would be out of our reach.</p><ol><li><p>Can&#8217;t say for sure, but this has likely been a good choice for our particular use-case; without question we&#8217;ve been able to see and pull levers that we otherwise wouldn&#8217;t have been able to, in some cases saving our bacon.</p></li></ol></li><li><p>Their uptime SLAs, which hinted at unacceptable downtime for our use-case.</p><ol><li><p>Perhaps the biggest win on the decision not to use RDS; they&#8217;ve had a lot of down-time with this service.</p></li></ol></li><li><p>Ability to run tools, like mk-archiver (which we use extensively for data store size management), on a regular basis without a hitch. &nbsp;Not 100% sure, but I don&#8217;t think you can do this with RDS.</p></li><li><p>CloudWatch metrics/graphing is a very bad experience, and want/need better operational insights to what it provides. &nbsp;Very glad we don&#8217;t depend on CW for this.</p></li></ol></li><li><p>All of these reasons have come at considerable cost to us as well, of course.</p><ol><li><p>Besides the obvious host management cycles, we have to manage :</p><ol><li><p>MySQL configurations, that have to map to instance sizes.</p></li><li><p>Optimization and tuning of the configurations, poor-performance root-cause analysis,</p></li><li><p>MySQL patches/upgrades.</p></li><li><p><em>maybe</em>&nbsp;more of the backup process than we&#8217;d like to.</p></li><li><p><em>maybe</em>&nbsp;more HA requirements than we&#8217;d like to; although I&#8217;m glad we have more control over this, per my earlier comment regarding downtime.</p></li><li><p><em>maybe&nbsp;</em>more of the storage capacity management than we&#8217;d like to.</p></li></ol></li><li><p>DBA headcount costs.</p><ol><li><p>We&#8217;ve gone through two very expensive and hard-to-find folks on this front, plus costly and often not-helpful, cycle-costing out-sourced DBA expertise.</p></li><li><p>Currently getting by with a couple of experienced engineers in-house and support from CodeFutures as-needed.</p></li></ol></li></ol></li><li><p>As I&#8217;ve seen numerous times in the past, AWS ends up building in features that fill gaps that we&#8217;ve either developed solutions for, or worked around.</p><ol><li><p>So if some of the RDS limitations can be worked-around, there&#8217;s a good chance that the gaps will be filled by AWS in the future.</p></li><li><p>But it&#8217;s doubtful they&#8217;ll support sharding any time soon, there&#8217;s too much design and application-layer inter-dependencies involved. &nbsp;Maybe I&#8217;m wrong, that&#8217;s just my humble opinion.</p></li></ol></li></ol></li></ol></li></ol><p>This was originally posted last week <a href="http://mygamification.com/2012/bigdoors-jeff-malek-talks-databases-and-horizontal-scaling/">here</a>, but I wanted to re-post here and will be updating with our latest status and learnings, if there&#8217;s any interest. &nbsp;Let me know.</p>]]></content:encoded></item></channel></rss>