<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Bytes by Ying</title><description>Personal blog on technical deep dives and bugfixes.</description><link>https://bytes.yingw787.com/</link><item><title>Property-Based Testing with `hypothesis`, and associated use cases</title><link>https://bytes.yingw787.com/posts/2021/02/02/property_based_testing/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2021/02/02/property_based_testing/</guid><description>An introduction to property-based testing in Python using the hypothesis library, with practical examples.</description><pubDate>Tue, 02 Feb 2021 12:00:00 GMT</pubDate></item><item><title>Postgres, as an App! (Now with one-click deploys to AWS + Heroku!)</title><link>https://bytes.yingw787.com/posts/2020/06/18/postgres_as_app_2/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/06/18/postgres_as_app_2/</guid><description>Deploying a PostgreSQL-backed application with one-click deploys to AWS and Heroku.</description><pubDate>Thu, 18 Jun 2020 12:00:00 GMT</pubDate></item><item><title>#lifeprotip: Haskell-inspired &quot;lifting into structure&quot; for individual shell commands within a Docker context</title><link>https://bytes.yingw787.com/posts/2020/06/15/lifting_into_docker/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/06/15/lifting_into_docker/</guid><description>Applying Haskell&apos;s &apos;lifting into structure&apos; concept to compose individual shell commands cleanly within Docker.</description><pubDate>Mon, 15 Jun 2020 12:00:00 GMT</pubDate></item><item><title>Postgres...as an App?</title><link>https://bytes.yingw787.com/posts/2020/06/15/postgres_as_app_1/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/06/15/postgres_as_app_1/</guid><description>An exploration of using PostgreSQL directly as an application backend, covering architecture and motivation.</description><pubDate>Mon, 15 Jun 2020 12:00:00 GMT</pubDate></item><item><title>The Services that makes the Cloud Worth It</title><link>https://bytes.yingw787.com/posts/2020/06/12/worth_it/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/06/12/worth_it/</guid><description>The specific AWS and cloud services that justify the cost and complexity of moving infrastructure to the cloud.</description><pubDate>Fri, 12 Jun 2020 12:00:00 GMT</pubDate></item><item><title>The Cloud&apos;s Kernel of Optionality</title><link>https://bytes.yingw787.com/posts/2020/05/27/clouds_kernel_of_optionality/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/05/27/clouds_kernel_of_optionality/</guid><description>What makes cloud infrastructure uniquely valuable: the optionality it provides to scale, swap, and adapt.</description><pubDate>Wed, 27 May 2020 12:00:00 GMT</pubDate></item><item><title>DevOps is an Ice Rink</title><link>https://bytes.yingw787.com/posts/2020/04/17/devops_ice_rink/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/04/17/devops_ice_rink/</guid><description>Using the ice rink as an analogy for DevOps: high learning curve, but infrastructure becomes natural with practice.</description><pubDate>Fri, 17 Apr 2020 12:00:00 GMT</pubDate></item><item><title>#lifeprotip: Use Docker to simplify development workflows</title><link>https://bytes.yingw787.com/posts/2020/02/27/docker_as_vagrant/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/02/27/docker_as_vagrant/</guid><description>Using Docker as a drop-in replacement for Vagrant to create reproducible, isolated development environments.</description><pubDate>Thu, 27 Feb 2020 12:00:00 GMT</pubDate></item><item><title>Pioneering as a Process Person</title><link>https://bytes.yingw787.com/posts/2020/02/05/pioneering/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/02/05/pioneering/</guid><description>How people with a process-oriented mindset can lead effectively in ambiguous, exploratory environments.</description><pubDate>Wed, 05 Feb 2020 12:00:00 GMT</pubDate></item><item><title>A Pythonista&apos;s Review of Haskell</title><link>https://bytes.yingw787.com/posts/2020/01/30/a_review_of_haskell/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/01/30/a_review_of_haskell/</guid><description>A Python developer&apos;s honest review of Haskell: the type system, tooling, learning curve, and practical tradeoffs.</description><pubDate>Thu, 30 Jan 2020 12:00:00 GMT</pubDate></item><item><title>Getting Rid of Disqus</title><link>https://bytes.yingw787.com/posts/2020/01/26/get_rid_of_disqus/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/01/26/get_rid_of_disqus/</guid><description>Why Disqus is worth removing from your blog and what lightweight alternatives exist.</description><pubDate>Sun, 26 Jan 2020 12:00:00 GMT</pubDate></item><item><title>What my QC25s taught me about designing long-lasting interfaces</title><link>https://bytes.yingw787.com/posts/2020/01/15/qc25s/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/01/15/qc25s/</guid><description>What the durability and interface design of Bose QC25 headphones can teach us about building long-lasting software.</description><pubDate>Wed, 15 Jan 2020 12:00:00 GMT</pubDate></item><item><title>Writing Software to Last 50 Years</title><link>https://bytes.yingw787.com/posts/2020/01/13/50years/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2020/01/13/50years/</guid><description>Design principles for writing software meant to survive decades of changing requirements and technology.</description><pubDate>Mon, 13 Jan 2020 12:00:00 GMT</pubDate></item><item><title>Monads aren&apos;t as hard as you think</title><link>https://bytes.yingw787.com/posts/2019/12/06/monads/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/12/06/monads/</guid><description>A practical, approachable introduction to monads in Python — no category theory required.</description><pubDate>Fri, 06 Dec 2019 12:00:00 GMT</pubDate></item><item><title>Changelog Evolution</title><link>https://bytes.yingw787.com/posts/2019/03/08/changelog_evolution/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/03/08/changelog_evolution/</guid><description>How changelogs evolve as a product matures, and what they reveal about team culture and process.</description><pubDate>Fri, 08 Mar 2019 12:00:00 GMT</pubDate></item><item><title>Concurrency with Python: Conclusion</title><link>https://bytes.yingw787.com/posts/2019/02/24/concurrency_with_python_conclusion/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/02/24/concurrency_with_python_conclusion/</guid><description>Key takeaways from the Python concurrency series and guidance on choosing the right concurrency model.</description><pubDate>Sun, 24 Feb 2019 12:00:00 GMT</pubDate></item><item><title>Concurrency with Python: Data-Intensive Architectures</title><link>https://bytes.yingw787.com/posts/2019/02/23/concurrency_with_python_data_intensive_architectures/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/02/23/concurrency_with_python_data_intensive_architectures/</guid><description>Designing data-intensive Python systems using concurrency patterns suited for high-throughput workloads.</description><pubDate>Sat, 23 Feb 2019 12:00:00 GMT</pubDate></item><item><title>Concurrency with Python: Hardware-Based Parallelism</title><link>https://bytes.yingw787.com/posts/2019/02/16/concurrency_with_python_hardware_based_parallelism/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/02/16/concurrency_with_python_hardware_based_parallelism/</guid><description>Leveraging CPU and hardware-level parallelism in Python for compute-bound workloads.</description><pubDate>Sat, 16 Feb 2019 12:00:00 GMT</pubDate></item><item><title>Concurrency with Python: CSP and Coroutines</title><link>https://bytes.yingw787.com/posts/2019/02/09/concurrency_with_python_csp_and_coroutines/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/02/09/concurrency_with_python_csp_and_coroutines/</guid><description>Communicating Sequential Processes and Python coroutines as a structured approach to concurrency.</description><pubDate>Sat, 09 Feb 2019 12:00:00 GMT</pubDate></item><item><title>Concurrency with Python: Actor Models</title><link>https://bytes.yingw787.com/posts/2019/02/02/concurrency_with_python_actor_models/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/02/02/concurrency_with_python_actor_models/</guid><description>The actor model as a higher-level abstraction for concurrency in Python.</description><pubDate>Sat, 02 Feb 2019 12:00:00 GMT</pubDate></item><item><title>Concurrency with Python: Separating Identity From State</title><link>https://bytes.yingw787.com/posts/2019/01/26/concurrency_with_python_identity_and_state/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/01/26/concurrency_with_python_identity_and_state/</guid><description>Separating identity from mutable state to make concurrent Python programs easier to reason about, drawing from Clojure.</description><pubDate>Sat, 26 Jan 2019 12:00:00 GMT</pubDate></item><item><title>#todayilearned: Isolate your Development Environment</title><link>https://bytes.yingw787.com/posts/2019/01/23/isolate_your_development_environments/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/01/23/isolate_your_development_environments/</guid><description>Why isolating development environments matters, and practical tools for doing it in Python.</description><pubDate>Wed, 23 Jan 2019 12:00:00 GMT</pubDate></item><item><title>Concurrency with Python: Functional Programming</title><link>https://bytes.yingw787.com/posts/2019/01/19/concurrency_with_python_functional_programming/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/01/19/concurrency_with_python_functional_programming/</guid><description>Applying functional programming principles to simplify concurrent code in Python.</description><pubDate>Sat, 19 Jan 2019 12:00:00 GMT</pubDate></item><item><title>Product Dimensionality</title><link>https://bytes.yingw787.com/posts/2019/01/17/product_dimensionality/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/01/17/product_dimensionality/</guid><description>A mental model for thinking about product dimensions when scoping features and making tradeoffs.</description><pubDate>Thu, 17 Jan 2019 12:00:00 GMT</pubDate></item><item><title>#todayilearned: Encodings in Python</title><link>https://bytes.yingw787.com/posts/2019/01/16/python_encodings/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/01/16/python_encodings/</guid><description>A quick look at character encodings in Python 3 and common mistakes to avoid.</description><pubDate>Wed, 16 Jan 2019 12:00:00 GMT</pubDate></item><item><title>Concurrency with Python: Threads and Locks</title><link>https://bytes.yingw787.com/posts/2019/01/12/concurrency_with_python_threads_and_locks/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/01/12/concurrency_with_python_threads_and_locks/</guid><description>Using threads and locks as low-level concurrency primitives in Python, and the pitfalls to watch for.</description><pubDate>Sat, 12 Jan 2019 12:00:00 GMT</pubDate></item><item><title>Concurrency with Python: Why?</title><link>https://bytes.yingw787.com/posts/2019/01/11/concurrency_with_python_why/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/01/11/concurrency_with_python_why/</guid><description>An introduction to concurrency in Python: what it is, why it matters, and when to reach for it.</description><pubDate>Fri, 11 Jan 2019 12:00:00 GMT</pubDate></item><item><title>#snippets: Generating randomized test data in PostGIS</title><link>https://bytes.yingw787.com/posts/2019/01/10/generating_randomized_postgis_data/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/01/10/generating_randomized_postgis_data/</guid><description>A quick snippet for generating randomized spatial test data in PostGIS.</description><pubDate>Thu, 10 Jan 2019 12:00:00 GMT</pubDate></item><item><title>Gestalt-driven Software Development</title><link>https://bytes.yingw787.com/posts/2019/01/09/gestalt_driven_software_development/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2019/01/09/gestalt_driven_software_development/</guid><description>Applying gestalt principles — proximity, similarity, and closure — to software design for more cohesive system architecture.</description><pubDate>Wed, 09 Jan 2019 12:00:00 GMT</pubDate></item><item><title>Data-driven Testing with &apos;pytest&apos;, Part Four: Fungible Infrastructure</title><link>https://bytes.yingw787.com/posts/2018/12/17/data_driven_testing_four/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2018/12/17/data_driven_testing_four/</guid><description>How the pytest-based ETL test harness evolved to manage fungible infrastructure and capture stateful resource dependencies.</description><pubDate>Mon, 17 Dec 2018 12:00:00 GMT</pubDate></item><item><title>Data-driven Testing with &apos;pytest&apos;, Part Three: Chained Operations</title><link>https://bytes.yingw787.com/posts/2018/12/10/data_driven_testing_three/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2018/12/10/data_driven_testing_three/</guid><description>How chained operations in an ETL pipeline drove a breaking schema update to the pytest-based data-driven test harness.</description><pubDate>Mon, 10 Dec 2018 12:00:00 GMT</pubDate></item><item><title>Data-driven Testing with &apos;pytest&apos;, Part Two: Iteration</title><link>https://bytes.yingw787.com/posts/2018/12/03/data_driven_testing_two/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2018/12/03/data_driven_testing_two/</guid><description>How data-driven testing with pytest evolved to handle data engineering challenges in an ETL tool built on odo.</description><pubDate>Mon, 03 Dec 2018 12:00:00 GMT</pubDate></item><item><title>Data-driven Testing with &apos;pytest&apos;, Part One: Requirements</title><link>https://bytes.yingw787.com/posts/2018/11/07/data_driven_testing/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2018/11/07/data_driven_testing/</guid><description>Exploring requirements for building a data-driven testing framework with pytest.</description><pubDate>Wed, 07 Nov 2018 12:00:00 GMT</pubDate></item><item><title>#todayilearned: Julian/Georgian calendar mismatches in &apos;pyspark&apos;</title><link>https://bytes.yingw787.com/posts/2018/10/31/calendar_mismatches/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2018/10/31/calendar_mismatches/</guid><description>Debugging Julian/Gregorian calendar mismatches encountered in PySpark date handling.</description><pubDate>Wed, 31 Oct 2018 12:00:00 GMT</pubDate></item><item><title>First Post</title><link>https://bytes.yingw787.com/posts/2018/10/27/first_post/</link><guid isPermaLink="true">https://bytes.yingw787.com/posts/2018/10/27/first_post/</guid><description>Hello World!</description><pubDate>Sat, 27 Oct 2018 12:00:00 GMT</pubDate></item></channel></rss>