<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>leblancfg.com</title><link>https://leblancfg.com/</link><description>Data Science, Geospatial Python, Space Stuff</description><atom:link href="https://leblancfg.com/feeds/all.rss.xml" rel="self"/><lastBuildDate>Wed, 03 Dec 2025 00:00:00 -0500</lastBuildDate><item><title>Trying out the Absurd queue for AI Workloads</title><link>https://leblancfg.com/trying-absurd-postgres-workflows.html</link><description>&lt;p&gt;Testing out Absurd, an experimental durable execution system that uses only Postgres, for AI workloads with expensive LLM calls.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Wed, 03 Dec 2025 00:00:00 -0500</pubDate><guid>tag:leblancfg.com,2025-12-03:/trying-absurd-postgres-workflows.html</guid><category>python</category><category>python</category><category>postgreSQL</category><category>durable-execution</category><category>ai</category></item><item><title>Tracking AI Model Deprecations with Git Scraping: Introducing deprecations.info</title><link>https://leblancfg.com/deprecations-info-git-scraper.html</link><description>&lt;p&gt;How I built deprecations.info using Simon Willison's git scraper pattern to track AI model shutdowns and prevent service disruptions&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Sun, 24 Aug 2025 14:00:00 -0400</pubDate><guid>tag:leblancfg.com,2025-08-24:/deprecations-info-git-scraper.html</guid><category>data-engineering</category><category>git-scraper</category><category>rss</category><category>automation</category><category>ai</category><category>monitoring</category></item><item><title>Addicted to My Power Meter</title><link>https://leblancfg.com/addicted-to-my-power-meter.html</link><description>&lt;p&gt;What happens when a CrossFit guy gets a smart trainer, discovers power data, and can't stop chasing the numbers.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Francois Leblanc</dc:creator><pubDate>Sun, 11 May 2025 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2025-05-11:/addicted-to-my-power-meter.html</guid><category>Fitness</category><category>cycling</category><category>crossfit</category><category>power</category><category>data</category><category>zwift</category><category>xert</category></item><item><title>When's the best time to surge when cycling up a hill?</title><link>https://leblancfg.com/surge-cycling-up-a-hill.html</link><description>&lt;p&gt;A simple cycling simulator that calculates the time it takes to cycle up a hill with a surge of power.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Fri, 21 Mar 2025 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2025-03-21:/surge-cycling-up-a-hill.html</guid><category>Physics</category><category>cycling</category><category>physics</category><category>simulation</category><category>chart.js</category></item><item><title>I miss vim</title><link>https://leblancfg.com/i-miss-vim.html</link><description>&lt;p&gt;A short reflection on neovim's extensibility vs simplicity tradeoff&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Wed, 29 Jan 2025 00:00:00 -0500</pubDate><guid>tag:leblancfg.com,2025-01-29:/i-miss-vim.html</guid><category>vim</category><category>vim</category><category>neovim</category></item><item><title>First steps with Rust</title><link>https://leblancfg.com/first-steps-with-rust.html</link><description>&lt;p&gt;Documenting my first steps with Rust, from installation to running a simple script.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Mon, 13 May 2024 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2024-05-13:/first-steps-with-rust.html</guid><category>Rust</category><category>rust</category><category>programming</category><category>learning</category></item><item><title>TIL: Automating Command Execution Across All Tmux Panes</title><link>https://leblancfg.com/automating-command-execution-across-tmux-panes.html</link><description>&lt;p&gt;Learn how to automate the propagation of configuration changes across all tmux panes, saving time and enhancing productivity.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Fri, 30 Jun 2023 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2023-06-30:/automating-command-execution-across-tmux-panes.html</guid><category>Tmux</category><category>tmux</category><category>vim</category><category>shell</category></item><item><title>Being a good UNIX neighbour</title><link>https://leblancfg.com/level-up-your-command-line-skills-the-secret-to-being-a-good-unix-neighbour.html</link><description>&lt;p&gt;A few tips to be a good UNIX neighbour and make your scripts more portable.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Sat, 29 Apr 2023 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2023-04-29:/level-up-your-command-line-skills-the-secret-to-being-a-good-unix-neighbour.html</guid><category>cli, unix</category><category>cli</category><category>unix</category><category>shell</category><category>bash</category><category>zsh</category><category>command line</category><category>terminal</category><category>productivity</category><category>click</category><category>python</category></item><item><title>TIL: NERDTree Bookmarks</title><link>https://leblancfg.com/til-nerdtree-bookmarks.html</link><description>&lt;p&gt;NERDTree Bookmarks is a plugin that allows you to bookmark files and directories in NERDTree.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Wed, 22 Mar 2023 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2023-03-22:/til-nerdtree-bookmarks.html</guid><category>Vim</category><category>vim</category><category>nerdtree</category><category>bookmarks</category></item><item><title>The Data Bus: a helpful pattern for data engineering</title><link>https://leblancfg.com/data-bus-pattern-for-data-engineering.html</link><description>&lt;p&gt;The Data Bus is a pattern that can help you tidy up data flows, and helps to keep track of the preprocessing steps taken. It is a simple, language-agnostic pattern that can be used to make sense when multiple transform steps are involved.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Wed, 07 Dec 2022 00:00:00 -0500</pubDate><guid>tag:leblancfg.com,2022-12-07:/data-bus-pattern-for-data-engineering.html</guid><category>Data Engineering</category><category>etl</category><category>data engineering</category><category>data bus</category></item><item><title>Benchmarks for writing pandas DataFrames to SQL Server (ODBC)</title><link>https://leblancfg.com/benchmarks_writing_pandas_dataframe_SQL_Server.html</link><description>&lt;p&gt;In this article, we benchmark various methods to write data to MS SQL Server from pandas DataFrames to see which is the fastest. We compare &lt;code&gt;multi&lt;/code&gt;, &lt;code&gt;fast_executemany&lt;/code&gt; and &lt;code&gt;turbodbc&lt;/code&gt;, and find the best candidate.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Sun, 15 Mar 2020 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2020-03-15:/benchmarks_writing_pandas_dataframe_SQL_Server.html</guid><category>Python, SQL, MS</category><category>python</category><category>SQL Server</category></item><item><title>CrossFit Open 2019 Analysis - Exercise Statistics</title><link>https://leblancfg.com/crossfit_open_2019_analysis_exercise_statistics.html</link><description>&lt;p&gt;In this article, we take a deeper dive into the benchmark exercise times and weights for the 2019 CrossFit Open athletes, including sprinting, running, squat, deadlift, clean &amp;amp; jerk, and snatch.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Sun, 30 Jun 2019 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2019-06-30:/crossfit_open_2019_analysis_exercise_statistics.html</guid><category>CrossFit, Python</category><category>crossfit</category><category>python</category><category>summary statistics</category><category>athlete</category></item><item><title>CrossFit Open 2019 Analysis - Benchmark Workouts</title><link>https://leblancfg.com/crossfit_open_2019_analysis_benchmark_workouts.html</link><description>&lt;p&gt;In this final article on 2019 CrossFit Open athlete statistics, we take a look at the spread of times for CrossFit's iconic workouts from athlete profile pages: Fran, Grace, Helen, Filthy Fifty, and Fight Gone Bad.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Sat, 15 Jun 2019 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2019-06-15:/crossfit_open_2019_analysis_benchmark_workouts.html</guid><category>CrossFit, Python</category><category>crossfit</category><category>python</category><category>summary statistics</category><category>athlete</category></item><item><title>CrossFit Open 2019 Analysis - Athlete Statistics</title><link>https://leblancfg.com/crossfit_open_2019_analysis_athlete_statistics.html</link><description>&lt;p&gt;In this article, we disect the various physical, strength and athletic attributes of hundreds of thousands of 2019 CrossFit Open athletes as self-reported in their athlete profiles.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Sat, 01 Jun 2019 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2019-06-01:/crossfit_open_2019_analysis_athlete_statistics.html</guid><category>CrossFit, Python</category><category>crossfit</category><category>python</category><category>summary statistics</category><category>athlete</category></item><item><title>Installing the Azure CLI on Manjaro (Arch) with Anaconda</title><link>https://leblancfg.com/installing-azure-cli-on-manjaro-arch-with-anaconda.html</link><description>&lt;p&gt;A short guide to troubleshooting the installation of Microsoft's Azure Command Line Interface (CLI) on Manjaro Linux&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Mon, 03 Dec 2018 00:00:00 -0500</pubDate><guid>tag:leblancfg.com,2018-12-03:/installing-azure-cli-on-manjaro-arch-with-anaconda.html</guid><category>Linux</category><category>linux</category><category>manjaro</category><category>arch</category><category>azure</category><category>cli</category></item><item><title>Unhashable in Python - Getting the unique number of locations in a GeoDataFrame</title><link>https://leblancfg.com/unhashable-python-unique-locations-geometry-geodataframe.html</link><description>&lt;p&gt;I encounter an unhashable type error when trying to get the unique number of geometries in a GeoDataFrame, and we learn about mutability (vs immutability) of Python objects in order to sidestep the issue.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Fri, 14 Sep 2018 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2018-09-14:/unhashable-python-unique-locations-geometry-geodataframe.html</guid><category>Python</category><category>python</category><category>mutability</category><category>shapely</category><category>geopandas</category></item><item><title>Notes on installing CUDA, CuDNN and Tensorflow on Manjaro</title><link>https://leblancfg.com/installing-cuda-cudnn-tensorflow-nvidia-gtx960.html</link><description>&lt;p&gt;An in-depth, step-by-step guide to installing CUDA, CuDNN and Tensorflow on Linux with an NVIDIA GeFORCE GTX960 graphics card.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Fri, 24 Aug 2018 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2018-08-24:/installing-cuda-cudnn-tensorflow-nvidia-gtx960.html</guid><category>Linux</category><category>linux</category><category>manjaro</category><category>cuda</category><category>cudnn</category><category>tensorflow</category><category>GPU</category><category>nvidia</category><category>GTX960</category></item><item><title>Higher-level functions in Python, Part 3 - filter</title><link>https://leblancfg.com/higher-level-functions-python-filter.html</link><description>&lt;p&gt;In our final installment for the Higher Level Function in Python Series, we dive into the Python &lt;code&gt;filter&lt;/code&gt; function. No sidetracks this time around. We simply take a look at how it's used, try to find a way where it would be superior to list comprehensions, fail, and conclude the series.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Thu, 14 Jun 2018 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2018-06-14:/higher-level-functions-python-filter.html</guid><category>Python</category><category>python</category><category>jupyter</category><category>functional</category><category>benchmarks</category><category>numpy</category></item><item><title>Higher-level functions in Python, Part 2 - reduce</title><link>https://leblancfg.com/higher-level-functions-python-reduce.html</link><description>&lt;p&gt;We go through uses of the Python &lt;code&gt;reduce&lt;/code&gt; function, when it's useful and its performance benefits. This time, we spend some time exploring function composition, and how to manage large function chains, e.g. in a data processing pipeline.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Mon, 04 Jun 2018 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2018-06-04:/higher-level-functions-python-reduce.html</guid><category>Python</category><category>python</category><category>jupyter</category><category>functional</category><category>benchmarks</category><category>numpy</category></item><item><title>Higher-level functions in Python, Part 1 - map</title><link>https://leblancfg.com/higher-level-functions-python-map.html</link><description>&lt;p&gt;We go through uses of the Python &lt;code&gt;map&lt;/code&gt; function, when it's useful and its performance benefits, and get sidetracked into benchmarking different syntaxes for exponential expressions.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Wed, 30 May 2018 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2018-05-30:/higher-level-functions-python-map.html</guid><category>Python</category><category>python</category><category>jupyter</category><category>functional</category><category>benchmarks</category><category>numpy</category></item><item><title>Introduction to the Python Scientific Ecosystem, Part 2</title><link>https://leblancfg.com/getting-started-with-python-and-jupyter-notebooks-2.html</link><description>&lt;p&gt;A general primer on Python for science and engineering, with an emphasis on the SciPy ecosystem of packages.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Thu, 10 Aug 2017 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2017-08-10:/getting-started-with-python-and-jupyter-notebooks-2.html</guid><category>Python</category><category>python</category><category>jupyter</category><category>anaconda</category><category>conda</category><category>scipy</category><category>numpy</category><category>beginner</category><category>matplotlib</category></item><item><title>Introduction to the Python Scientific Ecosystem, Part 1</title><link>https://leblancfg.com/getting-started-with-python-and-jupyter-notebooks-1.html</link><description>&lt;p&gt;A general primer on Python for science and engineering, with an emphasis on the SciPy ecosystem of packages.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">François Leblanc</dc:creator><pubDate>Thu, 03 Aug 2017 00:00:00 -0400</pubDate><guid>tag:leblancfg.com,2017-08-03:/getting-started-with-python-and-jupyter-notebooks-1.html</guid><category>Python</category><category>python</category><category>jupyter</category><category>anaconda</category><category>conda</category><category>scipy</category><category>numpy</category><category>beginner</category><category>matplotlib</category></item></channel></rss>