<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://bultrowicz.com</id>
  <title>Butlablog - Posts tagged Python</title>
  <updated>2024-11-02T21:37:58.959426+00:00</updated>
  <link href="https://bultrowicz.com"/>
  <link href="https://bultrowicz.com/blog/tag/python/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.org/" version="0.10.33.post1">ABlog</generator>
  <entry>
    <id>https://bultrowicz.com/hello-world/</id>
    <title>Hi there!</title>
    <updated>2016-08-07T00:00:00+02:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;Yay! It’s yet another blog about Python, software development in general,
technology and other related stuff!&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/hello-world/"/>
    <summary>Yay! It’s yet another blog about Python, software development in general,
technology and other related stuff!</summary>
    <category term="Python" label="Python"/>
    <published>2016-08-07T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/choosing-a-ci/</id>
    <title>Choosing a CI service for your open-source project</title>
    <updated>2016-09-18T00:00:00+02:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;I host my code on GitHub, as probably many or you do &lt;a class="footnote-reference brackets" href="#id6" id="id1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;.
The easiest way to have it automatically tested in a clean environment (what everyone should do)
is, of course, to use one of the hosted CI services integrated with GitHub.&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/choosing-a-ci/"/>
    <summary>I host my code on GitHub, as probably many or you do 1.
The easiest way to have it automatically tested in a clean environment (what everyone should do)
is, of course, to use one of the hosted CI services integrated with GitHub.</summary>
    <category term="CI/CD" label="CI/CD"/>
    <category term="Python" label="Python"/>
    <published>2016-09-18T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/cd-with-angularjs-commits/</id>
    <title>Continuous delivery of a Python library with AngularJS commit convention</title>
    <updated>2016-10-10T00:00:00+02:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;I got tired of having to manually build and upload my library (&lt;a class="reference external" href="https://pypi.org/project/mountepy/"&gt;Mountepy&lt;/a&gt;) to PyPI,
so I decided to do what any sane programmer would do - set up automation &lt;a class="footnote-reference brackets" href="#id8" id="id1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;.
But how would my scripts know whether they need to just update the README on PyPI and when to
assemble and push a new version of the library?
Thanks to the &lt;a class="reference external" href="https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit"&gt;AngularJS commit convention&lt;/a&gt;!
Oh, and &lt;a class="reference external" href="https://snap-ci.com/"&gt;Snap CI&lt;/a&gt; will run the whole thing.
Why Snap, you ask? See my previous article - &lt;a class="reference internal" href="../../../choosing-a-ci/#choosing-a-ci"&gt;&lt;span class="std std-ref"&gt;Choosing a CI service for your open-source project&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/cd-with-angularjs-commits/"/>
    <summary>I got tired of having to manually build and upload my library (Mountepy) to PyPI,
so I decided to do what any sane programmer would do - set up automation 1.
But how would my scripts know whether they need to just update the README on PyPI and when to
assemble and push a new version of the library?
Thanks to the AngularJS commit convention!
Oh, and Snap CI will run the whole thing.
Why Snap, you ask? See my previous article - choosing-a-ci.</summary>
    <category term="CI/CD" label="CI/CD"/>
    <category term="Python" label="Python"/>
    <published>2016-10-10T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/tdd-of-microservices/</id>
    <title>My talk about TDD of microservices</title>
    <updated>2016-12-10T00:00:00+01:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;This year at EuroPython (and not only there), I gave a
&lt;a class="reference external" href="https://youtu.be/d-ka10jngQQ"&gt;talk about Test Driven Development of Python microservices&lt;/a&gt;.
I guess you can check it out, if you’re into that kind of stuff.
It’s also available &lt;a class="reference external" href="https://youtu.be/A2-sKyq5IRs"&gt;in Polish&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/tdd-of-microservices/"/>
    <summary>This year at EuroPython (and not only there), I gave a
talk about Test Driven Development of Python microservices.
I guess you can check it out, if you’re into that kind of stuff.
It’s also available in Polish.</summary>
    <category term="Python" label="Python"/>
    <category term="quality_assurance" label="quality_assurance"/>
    <published>2016-12-10T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/self-modifying-python-function/</id>
    <title>A simple self-modifying function in Python</title>
    <updated>2018-10-04T00:00:00+02:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;Replacing its own definition is a fun/horrifying thing that a Python function can do:&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/self-modifying-python-function/"/>
    <summary>Replacing its own definition is a fun/horrifying thing that a Python function can do:</summary>
    <category term="Python" label="Python"/>
    <published>2018-10-04T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/universal_reload_with_entr/</id>
    <title>Universal app reload with entr</title>
    <updated>2020-02-18T00:00:00+01:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;A useful feature many web frameworks have is auto-reload.
Your app is running in the background, you change the code,
and the app is restarted with those changes, so you can try them out immediately.
What if you wanted that behavior for everything that you’re writing?
And without any coding to implement it over and over in every little project?&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/universal_reload_with_entr/"/>
    <summary>A useful feature many web frameworks have is auto-reload.
Your app is running in the background, you change the code,
and the app is restarted with those changes, so you can try them out immediately.
What if you wanted that behavior for everything that you’re writing?
And without any coding to implement it over and over in every little project?</summary>
    <category term="CLI" label="CLI"/>
    <category term="Linux" label="Linux"/>
    <category term="Python" label="Python"/>
    <published>2020-02-18T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/python-venv-zsh-functions/</id>
    <title>Some shell functions for working with Python virtualenvs</title>
    <updated>2021-03-31T00:00:00+02:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;Finally doing some scripting today.
I noticed that there are some python-virtualenv-related commands I run often (in my tmux-based “IDE”),
so I automated them away to shave off some keystrokes.&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/python-venv-zsh-functions/"/>
    <summary>Finally doing some scripting today.
I noticed that there are some python-virtualenv-related commands I run often (in my tmux-based “IDE”),
so I automated them away to shave off some keystrokes.</summary>
    <category term="CLI" label="CLI"/>
    <category term="Linux" label="Linux"/>
    <category term="Python" label="Python"/>
    <category term="ZSH" label="ZSH"/>
    <published>2021-03-31T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/setup_and_sync_laptops/</id>
    <title>Setting up and syncing config on two laptops</title>
    <updated>2021-09-23T00:00:00+02:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;I’ve created &lt;a class="reference external" href="https://github.com/butla/machine_setups"&gt;a script&lt;/a&gt; that should &lt;a class="footnote-reference brackets" href="#id3" id="id1" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;1&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt; set up a fresh Manjaro
with all the software and configuration that I want in a workstation.
It can also update the setup on being rerun.
Now I have two laptops that behave and look the same &lt;a class="footnote-reference brackets" href="#id4" id="id2" role="doc-noteref"&gt;&lt;span class="fn-bracket"&gt;[&lt;/span&gt;2&lt;span class="fn-bracket"&gt;]&lt;/span&gt;&lt;/a&gt;, and it’s easy for me to maintain that state.
Oh I wanted that for a long time :)&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/setup_and_sync_laptops/"/>
    <summary>I’ve created a script that should 1 set up a fresh Manjaro
with all the software and configuration that I want in a workstation.
It can also update the setup on being rerun.
Now I have two laptops that behave and look the same 2, and it’s easy for me to maintain that state.
Oh I wanted that for a long time :)</summary>
    <category term="Linux" label="Linux"/>
    <category term="Python" label="Python"/>
    <category term="journal" label="journal"/>
    <category term="system_administration" label="system_administration"/>
    <published>2021-09-23T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/enforcing_python_import_ordering_with_isort/</id>
    <title>Enforcing Python imports’ order with isort, Makefiles, and Vim</title>
    <updated>2021-12-27T00:00:00+01:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;I finally integrated &lt;a class="reference external" href="https://pypi.org/project/isort/"&gt;isort&lt;/a&gt; into my toolbox.
I think that the job of changing code files belongs to the editor (or an IDE),
so I made Vim run &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;isort&lt;/span&gt;&lt;/code&gt; automatically,
while the import order enforcement in a project is done via Makefile
(which can be run the same way by developers and the CI/CD pipeline).&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/enforcing_python_import_ordering_with_isort/"/>
    <summary>I finally integrated isort into my toolbox.
I think that the job of changing code files belongs to the editor (or an IDE),
so I made Vim run isort automatically,
while the import order enforcement in a project is done via Makefile
(which can be run the same way by developers and the CI/CD pipeline).</summary>
    <category term="CLI" label="CLI"/>
    <category term="Linux" label="Linux"/>
    <category term="Python" label="Python"/>
    <category term="Vim" label="Vim"/>
    <published>2021-12-27T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/continous_validation_with_make_and_entr/</id>
    <title>Make and entr for code validation during editing</title>
    <updated>2021-12-30T00:00:00+01:00</updated>
    <author>
      <name>Michal Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;For a while now, I’ve been wondering how to combine &lt;a class="reference external" href="https://github.com/eradman/entr"&gt;entr&lt;/a&gt;
(which automatically runs commands on file changes)
with the way I setup project validation (both for CI/CD and for local developer usage) with Makefiles.
The best thing I got so far is the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;validate_continously&lt;/span&gt;&lt;/code&gt; target in
&lt;a class="reference external" href="https://github.com/butla/machine_setups/blob/master/Makefile"&gt;my Makefile&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/continous_validation_with_make_and_entr/"/>
    <summary>For a while now, I’ve been wondering how to combine entr
(which automatically runs commands on file changes)
with the way I setup project validation (both for CI/CD and for local developer usage) with Makefiles.
The best thing I got so far is the validate_continously target in
my Makefile.</summary>
    <category term="CI/CD" label="CI/CD"/>
    <category term="CLI" label="CLI"/>
    <category term="Python" label="Python"/>
    <category term="quality_assurance" label="quality_assurance"/>
    <published>2021-12-30T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/separating_kinds_of_tests/</id>
    <title>Separating different kinds of tests</title>
    <updated>2023-03-27T00:00:00+02:00</updated>
    <author>
      <name>Michał "Butla" Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;When I work on a project I differentiate three kinds of tests: unit, integrated, and external.
In this post I’ll explain how I think about them.&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/separating_kinds_of_tests/"/>
    <summary>When I work on a project I differentiate three kinds of tests: unit, integrated, and external.
In this post I’ll explain how I think about them.</summary>
    <category term="Python" label="Python"/>
    <category term="quality_assurance" label="quality_assurance"/>
    <published>2023-03-27T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://bultrowicz.com/dev_workflow_with_local_tests_using_docker_compose/</id>
    <title>Rapid development workflow - tests with Docker Compose</title>
    <updated>2023-04-08T00:00:00+02:00</updated>
    <author>
      <name>Michał "Butla" Bultrowicz</name>
    </author>
    <content type="html">&lt;div class="ablog-post-excerpt docutils container"&gt;
&lt;p&gt;Recently, I did a presentation about my development workflow for back-end applications.&lt;/p&gt;
&lt;/div&gt;
</content>
    <link href="https://bultrowicz.com/dev_workflow_with_local_tests_using_docker_compose/"/>
    <summary>Recently, I did a presentation about my development workflow for back-end applications.</summary>
    <category term="Docker" label="Docker"/>
    <category term="Python" label="Python"/>
    <category term="quality_assurance" label="quality_assurance"/>
    <published>2023-04-08T00:00:00+02:00</published>
  </entry>
</feed>
