<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://wasi.ovh/yachay/</id>
  <title>Blog</title>
  <updated>2026-04-25T11:13:08.565793+00:00</updated>
  <link href="https://wasi.ovh/yachay/"/>
  <link href="https://wasi.ovh/yachay/posts/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.12">ABlog</generator>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2026/publish_python/</id>
    <title>Publishing Python packages to PyPI</title>
    <updated>2026-04-25T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;After many years of shipping my code via git,
finally I dedicated some time to learn Python packaging.&lt;/p&gt;
&lt;p&gt;You can publish to the
&lt;a class="reference external" href="https://pypi.org/"&gt;Python Package Index (PyPI)&lt;/a&gt;
repository using couple of steps.&lt;/p&gt;
&lt;p&gt;Before you start, you may want to check if your preffered project name avaliable.
If someone already publish anything with that name in PyPI, you’ll need to find an alternative.&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2026/publish_python/"/>
    <summary>After many years of shipping my code via git,
finally I dedicated some time to learn Python packaging.You can publish to the
Python Package Index (PyPI)
repository using couple of steps.Before you start, you may want to check if your preffered project name avaliable.
If someone already publish anything with that name in PyPI, you’ll need to find an alternative.</summary>
    <category term="PyPI" label="PyPI"/>
    <category term="Python" label="Python"/>
    <category term="bioinformatics" label="bioinformatics"/>
    <category term="package" label="package"/>
    <category term="pip" label="pip"/>
    <category term="publish" label="publish"/>
    <published>2026-04-25T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2026/giving_up/</id>
    <title>About giving up</title>
    <updated>2026-04-21T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2026/giving_up/"/>
    <category term="givingup" label="giving up"/>
    <category term="train" label="train"/>
    <category term="wellbeing" label="wellbeing"/>
    <published>2026-04-21T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2026/hosting_movies/</id>
    <title>Self-hosting movies</title>
    <updated>2026-04-14T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;I started hosting video streaming over a year ago.
I’m using &lt;a class="reference external" href="https://jellyfin.org/"&gt;Jellyfin media server&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It’s straightforward to install it using
&lt;a class="reference external" href="https://yunohost.org/"&gt;yunohost&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of the big advantages of using yunohost is
simiplified user management across apps/services:
you create user accounts in yunohost once
and those accounts are used by apps supporting LDAP.&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2026/hosting_movies/"/>
    <summary>I started hosting video streaming over a year ago.
I’m using Jellyfin media server.It’s straightforward to install it using
yunohost.One of the big advantages of using yunohost is
simiplified user management across apps/services:
you create user accounts in yunohost once
and those accounts are used by apps supporting LDAP.</summary>
    <category term="movies" label="movies"/>
    <category term="privacy" label="privacy"/>
    <category term="self-hosting" label="self-hosting"/>
    <published>2026-04-14T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2026/hosting_music/</id>
    <title>Self-hosting music</title>
    <updated>2026-04-11T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Recently I decided to ditch music streaming.
A few years back a migrated from Spotify to Tidal.
I was mostly motivated by superior quality of the latter,
ethical concerns regarding the former
(ie &lt;a class="reference external" href="https://www.nytimes.com/2022/02/17/arts/music/spotify-joe-rogan-misinformation.html"&gt;paying 200M to Joe Rogan&lt;/a&gt;)
and realising how little music streaming giants pay the artists.&lt;/p&gt;
&lt;p&gt;I was happy with Tidal most of the time.
It allowed me to discover plenty of interesting artists.
But over last 4 years, I felt more and more like music consumer.
And while Tidal shares more of its profit with the artists than Spotify,
realising how little the musicians make from my streaming made me feel uncomfortable.&lt;/p&gt;
&lt;p&gt;So I decided to ditch commercial music streaming by:&lt;/p&gt;
&lt;img alt="a home page of feishin player" src="https://wasi.ovh/yachay/_images/feishin.png" style="width: 49%;" /&gt;&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2026/hosting_music/"/>
    <summary>Recently I decided to ditch music streaming.
A few years back a migrated from Spotify to Tidal.
I was mostly motivated by superior quality of the latter,
ethical concerns regarding the former
(ie paying 200M to Joe Rogan)
and realising how little music streaming giants pay the artists.I was happy with Tidal most of the time.
It allowed me to discover plenty of interesting artists.
But over last 4 years, I felt more and more like music consumer.
And while Tidal shares more of its profit with the artists than Spotify,
realising how little the musicians make from my streaming made me feel uncomfortable.So I decided to ditch commercial music streaming by:a home page of feishin player</summary>
    <category term="music" label="music"/>
    <category term="privacy" label="privacy"/>
    <category term="self-hosting" label="self-hosting"/>
    <published>2026-04-11T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2026/peru/</id>
    <title>Peru</title>
    <updated>2026-02-21T00:00:00+01:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;I have plenty of fun writting about our adventures in Vietnam.
So I decided to write up our experiences from Peru.&lt;/p&gt;
&lt;p&gt;We visited Peru
in the summer of 2023 (south)
and in the winter of 2021-2 (north)
.&lt;/p&gt;
&lt;p&gt;It will take a few weeks to complete each of them…&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2026/peru/"/>
    <summary>I have plenty of fun writting about our adventures in Vietnam.
So I decided to write up our experiences from Peru.We visited Peru
in the summer of 2023 (south)
and in the winter of 2021-2 (north)
.It will take a few weeks to complete each of them…</summary>
    <category term="peru" label="peru"/>
    <category term="southamerica" label="south america"/>
    <category term="travel" label="travel"/>
    <published>2026-02-21T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2026/vietnam/</id>
    <title>Vietnam</title>
    <updated>2026-01-24T00:00:00+01:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;We spent nearly 4 weeks travelling in Vietnam and I wanted to share our experience and some tips you may find usefull.&lt;/p&gt;
&lt;p&gt;It was our first time in Asia and it was wonderful. Locals are extremely kind and friendly, nature is amazing and the food is delicious and very diverse.&lt;/p&gt;
&lt;p&gt;Personally it was the best trip of my life and I’m looking forward to return to South-East Asia. Hopefully, next winter!&lt;/p&gt;
&lt;img alt="" src="https://wasi.ovh/yachay/_images/catba.newbag.jpeg" style="width: 400px;" /&gt;&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2026/vietnam/"/>
    <summary>We spent nearly 4 weeks travelling in Vietnam and I wanted to share our experience and some tips you may find usefull.It was our first time in Asia and it was wonderful. Locals are extremely kind and friendly, nature is amazing and the food is delicious and very diverse.Personally it was the best trip of my life and I’m looking forward to return to South-East Asia. Hopefully, next winter!</summary>
    <category term="asia" label="asia"/>
    <category term="south-eastasia" label="south-east asia"/>
    <category term="travel" label="travel"/>
    <category term="vietnam" label="vietnam"/>
    <published>2026-01-24T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2026/travel/</id>
    <title>New category: travel</title>
    <updated>2026-01-24T00:00:00+01:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;I always wanted to share my travel experiences.
It’s not that I’m super active or experience traveller, but probably like many other people,
I love travelling and over the years I learnt couple of things that may be usefull for others.
Also, if any of my writting motivates you to go somewhere, it’s already worth it.
Beside, I’m finding reflecting and writing about my past trip pure fun!&lt;/p&gt;
&lt;p&gt;Lately, we went for nearly 4 weeks to Vietnam.
I was rather afraid of this trip and wasn’t really thinking about it until the very last moment.
I guess that was my way of coping with the anxiety of not having control.
Yes, I’m a control freak. I love routine. I love to know what’s going to happen next.
But at the same time, I know the real beauty and fun in life comes unexpectedly.&lt;/p&gt;
&lt;p&gt;Travelling forces me to accept that you don’t have control in life.
You can’t plan your life. You can’t avoid surprises.
You need to accept unexpected.
And to be here.
And now.&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2026/travel/"/>
    <summary>I always wanted to share my travel experiences.
It’s not that I’m super active or experience traveller, but probably like many other people,
I love travelling and over the years I learnt couple of things that may be usefull for others.
Also, if any of my writting motivates you to go somewhere, it’s already worth it.
Beside, I’m finding reflecting and writing about my past trip pure fun!Lately, we went for nearly 4 weeks to Vietnam.
I was rather afraid of this trip and wasn’t really thinking about it until the very last moment.
I guess that was my way of coping with the anxiety of not having control.
Yes, I’m a control freak. I love routine. I love to know what’s going to happen next.
But at the same time, I know the real beauty and fun in life comes unexpectedly.Travelling forces me to accept that you don’t have control in life.
You can’t plan your life. You can’t avoid surprises.
You need to accept unexpected.
And to be here.
And now.</summary>
    <category term="general" label="general"/>
    <category term="travel" label="travel"/>
    <published>2026-01-24T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2025/hosting_domain/</id>
    <title>Self-hosting: domain and DNS zone</title>
    <updated>2025-02-09T00:00:00+01:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Over next few weeks/posts, I’ll focus solely on self-hosting adventure.
To start, beside free time and motivation to learn new things,
you will need just a few components:&lt;/p&gt;
&lt;p&gt;internet connection with public IP&lt;/p&gt;
&lt;p&gt;router allowing port forwarding&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2025/hosting_domain/"/>
    <summary>Over next few weeks/posts, I’ll focus solely on self-hosting adventure.
To start, beside free time and motivation to learn new things,
you will need just a few components:internet connection with public IProuter allowing port forwarding</summary>
    <category term="dns" label="dns"/>
    <category term="domain" label="domain"/>
    <category term="privacy" label="privacy"/>
    <category term="self-hosting" label="self-hosting"/>
    <published>2025-02-09T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2025/hosting_hardware/</id>
    <title>Self-hosting: server hardware</title>
    <updated>2025-02-01T00:00:00+01:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Over next few weeks/posts, I’ll focus solely on self-hosting adventure.
To start, beside free time and motivation to learn new things,
you will need just a few components:&lt;/p&gt;
&lt;p&gt;internet connection with public IP&lt;/p&gt;
&lt;p&gt;router allowing port forwarding&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2025/hosting_hardware/"/>
    <summary>Over next few weeks/posts, I’ll focus solely on self-hosting adventure.
To start, beside free time and motivation to learn new things,
you will need just a few components:internet connection with public IProuter allowing port forwarding</summary>
    <category term="hardware" label="hardware"/>
    <category term="privacy" label="privacy"/>
    <category term="self-hosting" label="self-hosting"/>
    <category term="sever" label="sever"/>
    <published>2025-02-01T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2025/hosting_connection/</id>
    <title>Self-hosting: starting an adventure</title>
    <updated>2025-01-31T00:00:00+01:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Over next few weeks/posts, I’ll focus solely on self-hosting adventure.
To start, beside free time and motivation to learn new things,
you will need just a few components:&lt;/p&gt;
&lt;p&gt;internet connection with public IP&lt;/p&gt;
&lt;p&gt;router allowing port forwarding&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2025/hosting_connection/"/>
    <summary>Over next few weeks/posts, I’ll focus solely on self-hosting adventure.
To start, beside free time and motivation to learn new things,
you will need just a few components:internet connection with public IProuter allowing port forwarding</summary>
    <category term="ISP" label="ISP"/>
    <category term="privacy" label="privacy"/>
    <category term="router" label="router"/>
    <category term="self-hosting" label="self-hosting"/>
    <published>2025-01-31T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2025/privacy/</id>
    <title>Let’s begin the privacy quest</title>
    <updated>2025-01-27T00:00:00+01:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;I’ve been thinking about privacy-related topics for several years now.
But it never was a priority.&lt;/p&gt;
&lt;p&gt;My approach started to shift lately…&lt;/p&gt;
&lt;p&gt;Over the years I’ve been experimenting a lot with alternative apps/services and self-hosting.
Recently, I got determined enough to get rid of the last privacy-intrusive apps/services.
It ain’t easy, but it’s possible!&lt;/p&gt;
&lt;img alt="tech bros attending Trump inauguration in Jan 2025" src="https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1xNHpc.img?h=300" /&gt;&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2025/privacy/"/>
    <summary>I’ve been thinking about privacy-related topics for several years now.
But it never was a priority.My approach started to shift lately…Over the years I’ve been experimenting a lot with alternative apps/services and self-hosting.
Recently, I got determined enough to get rid of the last privacy-intrusive apps/services.
It ain’t easy, but it’s possible!tech bros attending Trump inauguration in Jan 2025</summary>
    <category term="privacy" label="privacy"/>
    <category term="self-hosting" label="self-hosting"/>
    <published>2025-01-27T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2024/hello/</id>
    <title>Hello world!</title>
    <updated>2024-04-01T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Welcome to my new blog!
I’ll gradually describe all my adventures with
&lt;a class="reference external" href="/blog/category/self-hosting/"&gt;self-hosting&lt;/a&gt;
of various services, including
blog/website,
files
and photos.&lt;/p&gt;
&lt;p&gt;I started my website/blog in 2014.
It was served using &lt;a class="reference external" href="https://wordpress.org/"&gt;wordpress&lt;/a&gt;
that was set up on virtual machine (VM) in google cloud.&lt;/p&gt;
&lt;p&gt;I felt for a long time that running a dedicated VM for a blog is an overkill.
There was huge overhead in maintaining both, the VM (regular system updates and backups)
as well as wordpress itself (updates and database backups).&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2024/hello/"/>
    <summary>Welcome to my new blog!
I’ll gradually describe all my adventures with
self-hosting
of various services, including
blog/website,
files
and photos.I started my website/blog in 2014.
It was served using wordpress
that was set up on virtual machine (VM) in google cloud.I felt for a long time that running a dedicated VM for a blog is an overkill.
There was huge overhead in maintaining both, the VM (regular system updates and backups)
as well as wordpress itself (updates and database backups).</summary>
    <category term="Python" label="Python"/>
    <category term="blog" label="blog"/>
    <category term="self-hosting" label="self-hosting"/>
    <category term="sphinx" label="sphinx"/>
    <published>2024-04-01T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2020/glances/</id>
    <title>Monitoring GPU usage</title>
    <updated>2020-09-04T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;If you (like me) happen to be the performance freak, most likely you are well aware of process viewers like htop.
Since I’ve started working with GPU-computing I missed htop-like tool tailored to monitor GPU usage.
This is becoming more of an issue if you’re working in multi-GPU setups.&lt;/p&gt;
&lt;p&gt;You can use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;nvidia-smi&lt;/span&gt;&lt;/code&gt; which is shipped with NVIDIA drivers, but it’s not very interactive.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://github.com/wookayin/gpustat"&gt;gpustat&lt;/a&gt;
provide nice and interactive view of the processes running and resources used across your GPUs,
but you’ll need to switch between windows if you want to also monitor CPU usage.&lt;/p&gt;
&lt;img alt="nvidia-smi output" src="https://wasi.ovh/yachay/_images/nvidia-smi.png" /&gt;&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2020/glances/"/>
    <summary>If you (like me) happen to be the performance freak, most likely you are well aware of process viewers like htop.
Since I’ve started working with GPU-computing I missed htop-like tool tailored to monitor GPU usage.
This is becoming more of an issue if you’re working in multi-GPU setups.You can use nvidia-smi which is shipped with NVIDIA drivers, but it’s not very interactive.gpustat
provide nice and interactive view of the processes running and resources used across your GPUs,
but you’ll need to switch between windows if you want to also monitor CPU usage.nvidia-smi output</summary>
    <category term="GPU" label="GPU"/>
    <category term="Linux" label="Linux"/>
    <category term="Nvidia" label="Nvidia"/>
    <category term="glances" label="glances"/>
    <category term="gpustat" label="gpustat"/>
    <category term="htop" label="htop"/>
    <category term="performance" label="performance"/>
    <published>2020-09-04T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2020/profiling/</id>
    <title>Python code profiling and accelerating your calculations with numba</title>
    <updated>2020-08-31T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;You wrote up your excellent idea as Python program/module but you are unsatisfied with its performance.
The chances are high most of us have been there at least once. I’ve been there last week.&lt;/p&gt;
&lt;p&gt;I found excellent method for outlier detection (&lt;a class="reference external" href="https://github.com/sahandha/eif"&gt;Enhanced Isolation Forest&lt;/a&gt;).
eIF was initially written in Python and later optimised in Cython (using C++).
C++ is ~40x faster than vanilla Python version,
but it lacks the possibility to save the model (which is crucial for my project).
Since adding model saving to C++ version is rather complicated buisness, I’ve decided to optimise Python code.
Initially I hoped for ~5-10x speed improvement.
The final effect surprised me, &lt;a class="reference external" href="https://github.com/lpryszcz/eif/blob/master/Notebooks/comparison_py_cxx.ipynb"&gt;as rewritten Python code was ~40x faster than initial version matching C++ version performance&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;How is it possible? Speeding up your code isn’t trivial.
First you need to find which parts of your code are slow (so-called code profiling).
Once you know that, you can start tinkering with the code itself (code optimisation).&lt;/p&gt;
&lt;img alt="line_profiler output" src="https://wasi.ovh/yachay/_images/line_profiler.png" /&gt;&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2020/profiling/"/>
    <summary>You wrote up your excellent idea as Python program/module but you are unsatisfied with its performance.
The chances are high most of us have been there at least once. I’ve been there last week.I found excellent method for outlier detection (Enhanced Isolation Forest).
eIF was initially written in Python and later optimised in Cython (using C++).
C++ is ~40x faster than vanilla Python version,
but it lacks the possibility to save the model (which is crucial for my project).
Since adding model saving to C++ version is rather complicated buisness, I’ve decided to optimise Python code.
Initially I hoped for ~5-10x speed improvement.
The final effect surprised me, as rewritten Python code was ~40x faster than initial version matching C++ version performance!How is it possible? Speeding up your code isn’t trivial.
First you need to find which parts of your code are slow (so-called code profiling).
Once you know that, you can start tinkering with the code itself (code optimisation).line_profiler output</summary>
    <category term="Python" label="Python"/>
    <category term="numba" label="numba"/>
    <category term="optimisation" label="optimisation"/>
    <category term="performance" label="performance"/>
    <category term="profiling" label="profiling"/>
    <category term="timeit" label="timeit"/>
    <published>2020-08-31T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2019/badges/</id>
    <title>Create badges for workshop / conference attendees</title>
    <updated>2019-04-08T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Previously, I’ve written on how to create &lt;a class="reference internal" href="2018/abstracts/"&gt;&lt;span class="doc"&gt;Abstract book easily&lt;/span&gt;&lt;/a&gt;.
Today, another friend asked for help with generation of badges for attendees of a conference he is co-organising.
We have automatised the process for &lt;a class="reference external" href="ngschool.eu"&gt;#NGSchool&lt;/a&gt;.
You can find templates and code in &lt;a class="reference external" href="https://github.com/lpryszcz/badges"&gt;my github repo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First of all, for our courses we need to create user accounts for all participants in remote machines.
Therefore we decided to print user data (username and auto-generated password) on the back of every badge (easy to fold).
And since user data are auto-generated, we can easily create user accounts in remote machines using newusers.
But for a conference, this can be skipped.&lt;/p&gt;
&lt;p&gt;All you need to have to start is&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2019/badges/"/>
    <summary>Previously, I’ve written on how to create Abstract book easily.
Today, another friend asked for help with generation of badges for attendees of a conference he is co-organising.
We have automatised the process for #NGSchool.
You can find templates and code in my github repo.First of all, for our courses we need to create user accounts for all participants in remote machines.
Therefore we decided to print user data (username and auto-generated password) on the back of every badge (easy to fold).
And since user data are auto-generated, we can easily create user accounts in remote machines using newusers.
But for a conference, this can be skipped.All you need to have to start is</summary>
    <category term="badges" label="badges"/>
    <category term="conference" label="conference"/>
    <category term="workshop" label="workshop"/>
    <published>2019-04-08T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2018/abstracts/</id>
    <title>Create book of abstracts from spreadsheet / google forms</title>
    <updated>2018-04-12T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Lately a friend of mine complained about interoperability of abstract submissions from numerous applicants.&lt;/p&gt;
&lt;p&gt;Having the Book of Abstracts is crucial and we faced similar problem organising &lt;a class="reference external" href="/https://ngschool.eu/"&gt;#NGSchool events&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note, you’ll need to be somewhat familiar with &lt;a class="reference external" href="https://www.latex-project.org/"&gt;LaTeX&lt;/a&gt;
in order to edit the main.tex file to your liking.
If you are not afraid of that, the way to proceed is as follows:&lt;/p&gt;
&lt;img alt="A twitter post from &amp;#64;sj_capella: It might sound silly but it is worrying. We made available an abstracts template for a conference ... I have seen like 20~30 different formats (out of 75 submissions) which made me wonder about #Interoperability" src="https://wasi.ovh/yachay/_images/abstracts.png" /&gt;&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2018/abstracts/"/>
    <summary>Lately a friend of mine complained about interoperability of abstract submissions from numerous applicants.Having the Book of Abstracts is crucial and we faced similar problem organising #NGSchool events.Note, you’ll need to be somewhat familiar with LaTeX
in order to edit the main.tex file to your liking.
If you are not afraid of that, the way to proceed is as follows:A twitter post from @sj_capella: It might sound silly but it is worrying. We made available an abstracts template for a conference ... I have seen like 20~30 different formats (out of 75 submissions) which made me wonder about #Interoperability</summary>
    <category term="abstracts" label="abstracts"/>
    <category term="conference" label="conference"/>
    <category term="workshop" label="workshop"/>
    <published>2018-04-12T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2016/mysql/</id>
    <title>Connecting to MySQL without password prompt</title>
    <updated>2016-01-13T00:00:00+01:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;If you are (like me) annoyed by providing password at every mysql login, you can skip it. Also it makes easier programmatic access to any MySQL db, as not passwd prompting is necessary :)&lt;/p&gt;
&lt;p&gt;Create &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;~/.my.cnf&lt;/span&gt;&lt;/code&gt; file:&lt;/p&gt;
&lt;p&gt;And login without &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;-p&lt;/span&gt;&lt;/code&gt; parameter:&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2016/mysql/"/>
    <summary>If you are (like me) annoyed by providing password at every mysql login, you can skip it. Also it makes easier programmatic access to any MySQL db, as not passwd prompting is necessary :)Create ~/.my.cnf file:And login without -p parameter:</summary>
    <category term="MySQL" label="MySQL"/>
    <category term="Python" label="Python"/>
    <category term="login" label="login"/>
    <category term="passwordless" label="passwordless"/>
    <published>2016-01-13T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2015/sshfs/</id>
    <title>Apache2 reading from sshfs share</title>
    <updated>2016-01-13T00:00:00+01:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Today, I have encountered problems trying to read data from sshfs share in apache2. I was getting 403 Forbidden error. It turned out you need to enable other_user in sshfs, so other users than the one mounting the share can access the data, as apache2 is using www-data user.&lt;/p&gt;
&lt;p&gt;Inspired by &lt;a class="reference external" href="http://serverfault.com/questions/514557/www-data-access-sshfs-mount-point"&gt;serverfault&lt;/a&gt;
and &lt;a class="reference external" href="http://unix.stackexchange.com/questions/37168/unable-to-use-o-allow-other-with-sshfs-option-enabled-in-fuse-conf"&gt;unix.stackexchange&lt;/a&gt;.&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2015/sshfs/"/>
    <summary>Today, I have encountered problems trying to read data from sshfs share in apache2. I was getting 403 Forbidden error. It turned out you need to enable other_user in sshfs, so other users than the one mounting the share can access the data, as apache2 is using www-data user.Inspired by serverfault
and unix.stackexchange.</summary>
    <category term="sshfs" label="sshfs"/>
    <published>2016-01-13T00:00:00+01:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2015/swap/</id>
    <title>Encrypted swapfile</title>
    <updated>2015-04-24T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Sometimes, it’s worth to encrypt swap space, especially if you process some privacy-sensitive data.&lt;/p&gt;
&lt;p&gt;Inspired by &lt;a class="reference external" href="http://askubuntu.com/questions/248158/how-do-i-setup-an-encrypted-swap-file"&gt;AskUbuntu&lt;/a&gt;.&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2015/swap/"/>
    <summary>Sometimes, it’s worth to encrypt swap space, especially if you process some privacy-sensitive data.Inspired by AskUbuntu.</summary>
    <category term="Linux" label="Linux"/>
    <category term="cloud" label="cloud"/>
    <category term="encryption" label="encryption"/>
    <category term="privacy" label="privacy"/>
    <category term="swap" label="swap"/>
    <published>2015-04-24T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2014/multiprocessing/</id>
    <title>Multiprocessing in Python and garbage collection</title>
    <updated>2014-06-14T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;Working with multiple threads in Python often leads to high RAM consumption.
Unfortunately, automatic garbage collection in child processes isn’t working well.
But there are two alternatives:&lt;/p&gt;
&lt;p&gt;When using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Pool()&lt;/span&gt;&lt;/code&gt;, you can specify number of task after which the child will be restarted resulting in memory release.&lt;/p&gt;
&lt;p&gt;If you use &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Process()&lt;/span&gt;&lt;/code&gt;, you can simply delete unwanted objects and call &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;gc.collect()&lt;/span&gt;&lt;/code&gt; inside the child.
Note, this may slow down your child process substantially!&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2014/multiprocessing/"/>
    <summary>Working with multiple threads in Python often leads to high RAM consumption.
Unfortunately, automatic garbage collection in child processes isn’t working well.
But there are two alternatives:When using Pool(), you can specify number of task after which the child will be restarted resulting in memory release.If you use Process(), you can simply delete unwanted objects and call gc.collect() inside the child.
Note, this may slow down your child process substantially!</summary>
    <category term="Python" label="Python"/>
    <category term="multiprocessing" label="multiprocessing"/>
    <category term="performance" label="performance"/>
    <published>2014-06-14T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2014/progress/</id>
    <title>Progress of long processes in BASH</title>
    <updated>2014-06-05T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;You can view progress of your process execution in UNIX using pv or bar.
With &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pv&lt;/span&gt;&lt;/code&gt;, you can even report progress of multiple modules of your pipeline.&lt;/p&gt;
&lt;p&gt;This is very useful for tracing large database dump/restore progress:&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2014/progress/"/>
    <summary>You can view progress of your process execution in UNIX using pv or bar.
With pv, you can even report progress of multiple modules of your pipeline.This is very useful for tracing large database dump/restore progress:</summary>
    <category term="Linux" label="Linux"/>
    <published>2014-06-05T00:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://wasi.ovh/yachay/posts/2014/tar/</id>
    <title>TAR random access</title>
    <updated>2014-04-23T00:00:00+02:00</updated>
    <author>
      <name>lpryszcz</name>
    </author>
    <content type="html">&lt;p class="ablog-post-excerpt"&gt;&lt;p&gt;I was often challenged with accessing thousands/millions files from network file system (NFS).
As I update some of the stored files once in a while, I have decided to store these files in multiple TAR archives.
The data complexity was therefore reduced.
But still, there was an issue with random access to the files within each archive.&lt;/p&gt;
&lt;p&gt;First, I had a look at tar indexer. Its simplicity is brilliant.
Yet, it stores index in raw text file and it can handle only single tar file.
Therefore, I have ended up writing my own &lt;a class="reference external" href="https://bitbucket.org/lpryszcz/tar_indexer"&gt;tar_indexer&lt;/a&gt;
tool using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;sqlite3&lt;/span&gt;&lt;/code&gt; for index storing and allowing indexing of multiple tar archives.
This can be easily incorporated into any Python project.&lt;/p&gt;
&lt;p&gt;Note, only raw (uncompressed) tar files are accepted as native &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;tar.gz&lt;/span&gt;&lt;/code&gt; cannot be random accessed.
But you can compress each file using zlib before adding it to tar. At least, this is what I do.&lt;/p&gt;
&lt;/p&gt;
</content>
    <link href="https://wasi.ovh/yachay/posts/2014/tar/"/>
    <summary>I was often challenged with accessing thousands/millions files from network file system (NFS).
As I update some of the stored files once in a while, I have decided to store these files in multiple TAR archives.
The data complexity was therefore reduced.
But still, there was an issue with random access to the files within each archive.First, I had a look at tar indexer. Its simplicity is brilliant.
Yet, it stores index in raw text file and it can handle only single tar file.
Therefore, I have ended up writing my own tar_indexer
tool using sqlite3 for index storing and allowing indexing of multiple tar archives.
This can be easily incorporated into any Python project.Note, only raw (uncompressed) tar files are accepted as native tar.gz cannot be random accessed.
But you can compress each file using zlib before adding it to tar. At least, this is what I do.</summary>
    <category term="Python" label="Python"/>
    <category term="TAR" label="TAR"/>
    <category term="archive" label="archive"/>
    <category term="randomaccess" label="random access"/>
    <category term="sqlite" label="sqlite"/>
    <published>2014-04-23T00:00:00+02:00</published>
  </entry>
</feed>
