<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hantz</title>
    <description></description>
    <link>https://hantz.sh/</link>
    <atom:link href="https://hantz.sh/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 22 Jan 2026 05:55:45 +0000</pubDate>
    <lastBuildDate>Thu, 22 Jan 2026 05:55:45 +0000</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>
    
     
      <item>
        <title>Qi3pc 1 0 0 Release Candidate 1</title>
        <description>&lt;div class=&quot;banner&quot; role=&quot;note&quot;&gt;
  &lt;div class=&quot;banner-inner&quot;&gt;
    &lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: qi3pc &lt;a href=&quot;https://git.sr.ht/~hantz/qi3pc/refs/1.0.0&quot;&gt;1.0.0&lt;/a&gt; is now released! (&lt;em&gt;January 22nd 2026&lt;/em&gt;)&lt;/p&gt;

  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;A long time ago (6 years ago, according to the &lt;a href=&quot;https://git.sr.ht/~hantz/buffalo/commit/9d1ab086a3a1c007abff8e0f6ceff95e1bfeca3a&quot;&gt;commit
log&lt;/a&gt;),
I took up the quixotic task of building a custom desktop environment based on
Qt.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;What I have in mind is still vague, but essentially I want a thin, beautiful,
customizable, wrapper around i3wm. Think “KDE window manager”. Yes, I know, a
window manager is not a desktop environment is not a window manager!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A necessary building block for such a project is obviously integration of i3wm’s
IPC with Qt. A handful of C++ libraries already exist for interprocess
communication with i3wm. However, integrating them with Qt tends to require
quite a lot of boilerplate. None of them could be integrated in a way that feels
clean enough to my taste, so I decided to build my own library to do just that.&lt;/p&gt;

&lt;!---excerpt-start---&gt;
&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qi3pc&lt;/code&gt;&lt;/strong&gt; is a simple C++ library that provides idiomatic Qt bindings for i3wm’s
IPC interface. If this is of interest to you, please help testing and reviewing
this release candidate for the first major version.
&lt;!---excerpt-end---&gt;&lt;/p&gt;

&lt;p&gt;I plan on releasing the first major version, a month after the public
announcement of this release candidate. So far, no further work is planned for
that release beyond updating the documentation, fixing bugs and increasing the
test coverage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qi3pc&lt;/code&gt;&lt;/strong&gt; is hosted on &lt;a href=&quot;https://git.sr.ht/~hantz/qi3pc&quot;&gt;Sourcehut&lt;/a&gt;.&lt;/p&gt;

&lt;style&gt;
  table {
    border-collapse: collapse;
    width: 100%;
  }

  th, td {
    border: 1px solid #ddd;
    padding: 8px;
  }

  th {
    text-align: left;
    background-color: #f2f2f2;
  }

  td:first-child {
    text-align: left; /* first column left-aligned */
  }

  td:nth-child(2) {
    text-align: right; /* second column right-aligned */
  }

  tr:nth-child(even) td {
    background-color: #fafafa;
  }

  summary {
    cursor: pointer;
    font-weight: bold;
    text-decoration: underline; /* underline summary */
    margin-bottom: 5px;
  }
&lt;/style&gt;

&lt;blockquote&gt;
&lt;details&gt;
&lt;summary style=&quot;text-align: center;&quot;&gt;Release resources&lt;/summary&gt;
&lt;div class=&quot;scrollable&quot;&gt;
  &lt;table&gt;
    &lt;tr&gt;
      &lt;th colspan=&quot;2&quot;&gt;Release&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Date&lt;/td&gt;
      &lt;td&gt;2025-12-18&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Commit&lt;/td&gt;
      &lt;td&gt;
        &lt;a href=&quot;https://git.sr.ht/~hantz/qi3pc/commit/04c9a7ce9fe527c0970910eb0cc72d794dded582&quot;&gt;04c9a7ce9fe527c0970910eb0cc72d794dded582&lt;/a&gt;
        [1.0.0-rc1]
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Build&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://builds.sr.ht/~hantz/job/1633646&quot;&gt;https://builds.sr.ht/~hantz/job/1633646&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Artifacts&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://git.sr.ht/~hantz/qi3pc/refs/1.0.0-rc1&quot;&gt;https://git.sr.ht/~hantz/qi3pc/refs/1.0.0-rc1&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th colspan=&quot;2&quot;&gt;Project&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Homepage&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://qi3pc.hantz.sh/&quot;&gt;https://qi3pc.hantz.sh/&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Development Homepage&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://staging.qi3pc.hantz.sh/&quot;&gt;https://staging.qi3pc.hantz.sh/&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Repository&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://git.sr.ht/~hantz/qi3pc&quot;&gt;https://git.sr.ht/~hantz/qi3pc&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th colspan=&quot;2&quot;&gt;Packages&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AUR&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://aur.archlinux.org/packages/qi3pc&quot;&gt;https://aur.archlinux.org/packages/qi3pc&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot;&gt;Help add new packages here!&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th colspan=&quot;2&quot;&gt;Contact&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Discuss and send bug reports&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://lists.sr.ht/~hantz/hantzdesktop-discuss&quot;&gt;https://lists.sr.ht/~hantz/hantzdesktop-discuss&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Send patches&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://lists.sr.ht/~hantz/hantzdesktop-devel&quot;&gt;https://lists.sr.ht/~hantz/hantzdesktop-devel&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Follow news&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://lists.sr.ht/~hantz/hantzdesktop-announce&quot;&gt;https://lists.sr.ht/~hantz/hantzdesktop-announce&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;extract-section&quot;&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;This is an extract from &lt;a href=&quot;https://staging.qi3pc.hantz.sh/index.html&quot;&gt;the docs&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;hr /&gt;

&lt;h2 id=&quot;building&quot;&gt;Building&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;qi3pc&lt;/code&gt;&lt;/strong&gt; is a modern C++ library. It uses C++20. It depends only
on Qt6 and i3wm itself.  cmake is necessary for building.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://git.sr.ht/~hantz/qi3pc &lt;span class=&quot;nt&quot;&gt;-b&lt;/span&gt; 1.0.0-rc1
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;qi3pc
cmake &lt;span class=&quot;nt&quot;&gt;-S&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-B&lt;/span&gt; build
cmake &lt;span class=&quot;nt&quot;&gt;--build&lt;/span&gt; build
cmake &lt;span class=&quot;nt&quot;&gt;--install&lt;/span&gt; build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For more inspiration, see the &lt;a href=&quot;https://git.sr.ht/~hantz/qi3pc/tree/master/item/.build.yml&quot;&gt;CI build
recipe&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;documentation&quot;&gt;Documentation&lt;/h2&gt;

&lt;p&gt;Documentation is available &lt;a href=&quot;https://qi3pc.hantz.sh&quot;&gt;here&lt;/a&gt;. Once installed, the
docs are also available in the man pages qi3pc(3): &lt;code&gt;man qi3pc&lt;/code&gt;.  Staging docs
are available &lt;a href=&quot;https://staging.qi3pc.hantz.sh&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;

&lt;p&gt;The messages, replies and events that i3wm&amp;#8217;s IPC API provides are accessible
through methods and signals with obvious names. Getting information from i3 is
as simple as sending a message and waiting for a reply or subscribing to events
and waiting for them to be triggered.  This is done with the signal/slot
mechanisms offered by Qt and normal C++ functions.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The signals and methods return objects (arrays, dictionaries, strings, etc.)  matching the specifications of i3wm&amp;#8217;s &lt;a href=&quot;https://i3wm.org/docs/ipc.html&quot;&gt;IPC protocol&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;code-examples&quot;&gt;Code examples&lt;/h3&gt;

&lt;p&gt;The code examples below assume some familiarity with Qt development as well as
i3wm&amp;#8217;s IPC idioms.&lt;/p&gt;

&lt;h4 id=&quot;listening-to-the-window-manager&quot;&gt;Listening to the window manager&lt;/h4&gt;

&lt;p&gt;Below is an example that monitors window events from i3wm.&lt;/p&gt;

&lt;p&gt;There are no free functions. All functionality is through the &lt;code&gt;qi3pc&lt;/code&gt; class. So
first, an object of that class has to be constructed.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;auto&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ipc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;qi3pc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Events from the window manager are available as Qt signals. To monitor those
events, simply subscribe to them as to any other Qt signal. Window events
include creation of new window, focus change, window move, etc.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;QObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                 &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;qi3pc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;windowEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                 &lt;span class=&quot;p&quot;&gt;[](&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;qi3pc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WindowChange&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;change&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;QJsonObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
                    &lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Window event!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

                    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;change&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;qi3pc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WindowChange&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Focus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;  
                        &lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Window focus changed!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next, connect to the i3wm&amp;#8217;s IPC server.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Multiple &lt;code&gt;qi3pc&lt;/code&gt; objects can be instantiated in the same application. Each
object is only notified of the event it cares about. These events have to be
explicitly subscribed to. Without this, the &lt;code&gt;qi3pc::windowEvent&lt;/code&gt; signal will
never fire on this object, and the lambda in the connection above will never
run.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;QStringList&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;events&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;window&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;events&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;talking-to-the-window-manager&quot;&gt;Talking to the window manager&lt;/h4&gt;

&lt;p&gt;Below is an example showing how to automatically move to a newly created
workspace.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;QObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m_ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;qip3c&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;workspaceEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;handleWorkspaceEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;m_ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;QStringList&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;events&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;workspace&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;m_ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;events&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;handleWorkspaceEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;qi3pc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WorkspaceChange&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;change&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                              &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;QJsonObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                              &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;QJsonObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;old&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Q_UNUSED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;old&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;change&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;qi3pc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WorkspaceChange&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Init&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;auto&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;jsonStr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;current&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;jsonStr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isUndefined&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;QString&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;jsonStr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

            &lt;span class=&quot;n&quot;&gt;QByteArray&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;QString&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i3Command&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;workspace &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i3Command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;toStdString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c_str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;m_ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sendMessage&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;qi3pc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IpcType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Command&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When a new workspace is created, a command is sent to switch to it. As simple as
that!&lt;/p&gt;

&lt;h4 id=&quot;a-conversation-with-the-window-manager&quot;&gt;A conversation with the window manager&lt;/h4&gt;

&lt;p&gt;In the example above, after sending the workspace change request to i3wm, the
response is not monitored, simply because the interesting side effect is the
wokspace change itself (and also because it was just a simple example).
However, sometimes we are interested in the reply from the wm. For those
cases, message replies are also published with Qt signals.&lt;/p&gt;

&lt;p&gt;To actively fetch information from i3wm, the &lt;em&gt;fetch&lt;/em&gt; methods can be used (e.g.
&lt;code&gt;qi3pc::fetchWorkspaces&lt;/code&gt;). When called, a message is sent to i3wm, and the reply
is published through a reply signal. In the case of workspaces, through
&lt;code&gt;qi3pc::workspacesUpdated&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Additionally, the reply is cached along with its last update time. This cached
data is available through another member function, in this case
&lt;code&gt;qi3pc::workspaces&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The following is an example of using that workflow.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;m_ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    
    &lt;span class=&quot;n&quot;&gt;QObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m_ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;qi3pc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;workspacesUpdated&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;handleWorkspaceReply&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    
    &lt;span class=&quot;c1&quot;&gt;// Query up-to-date workspace information from i3wm&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;m_ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fetchWorkspaces&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;MyClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;handleWorkspaceReply&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;qi3pc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DataArray&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;List of workspaces&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;first&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Cached list of workspaces&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ipc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;workspaces&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;first&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note that in this case there was no need to subscribe to workspace events with
&lt;code&gt;qi3pc::subscribe&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;more-examples&quot;&gt;More examples&lt;/h3&gt;

&lt;p&gt;Other examples can be found in the &lt;a href=&quot;https://git.sr.ht/~hantz/qi3pc/tree/master/item/examples&quot;&gt;repository&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;buffalo&quot;&gt;buffalo&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;qi3pc&lt;/code&gt;&lt;/strong&gt; is currently used in my (unreleased) bar, &lt;a href=&quot;https://git.sr.ht/~hantz/buffalo/refs&quot;&gt;buffalo&lt;/a&gt;. The current
implementation of buffalo covers what was necessary to replace my previous
polybar setup that I ditched for instability. So it&amp;#8217;s quite barebones. But the
&lt;a href=&quot;https://git.sr.ht/~hantz/buffalo/tree/0.9.6/item/src/quick/modules/wm/i3&quot;&gt;i3&lt;/a&gt;
module provides the best existing usage examples.&lt;/p&gt;

&lt;p&gt;For a quick preview of buffalo&amp;#8217;s capabilities, check out this
&lt;a href=&quot;https://www.freelists.org/post/i3-discuss/I3bar-doubleheight-with-singleheight-system-tray-is-it-possible-and-how-to-go-about-it,3&quot;&gt;message&lt;/a&gt;
I sent to the i3wm mailing list a little while back.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you use &lt;strong&gt;&lt;code&gt;qi3pc&lt;/code&gt;&lt;/strong&gt; in a project, reach out to me to have it listed here as an example.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;
</description>
        <pubDate>Thu, 18 Dec 2025 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/devlog/2025/12/18/qi3pc-1-0-0-release-candidate-1.html</link>
        <guid isPermaLink="true">https://hantz.sh/devlog/2025/12/18/qi3pc-1-0-0-release-candidate-1.html</guid>
        
        
        <category>devlog</category>
        
      </item>
      
    
     
      <item>
        <title>Legault défend le droit de la police d’être raciste</title>
        <description>&lt;p&gt;Le 25 octobre dernier, un &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1927763/policiers-automobilistes-jugement-cour-discrimination&quot;&gt;jugement&lt;/a&gt; de la Cour supérieure du Québec a ordonné la fin des interpellations sans motif d’automobilistes. Le juge a conclu ce qui était déjà su de tous : le motif principal derrière les interpellations, prétendument aléatoires, de la police n’est autre que le crime d’être « Noir au volant ». François Legault et son gouvernement se sont cependant précipités à annoncer qu’ils porteront cette décision &lt;a href=&quot;https://www.journaldequebec.com/2022/11/25/profilage-racial-quebec-porte-la-decision-sur-les-interceptions-aleatoires-en-appel&quot;&gt;en appel&lt;/a&gt;. Legault déclare, sans rire, que c’est « &lt;em&gt;injustifié&lt;/em&gt; d’abolir un article aussi important pour les corps de police ».&lt;/p&gt;

&lt;h2 id=&quot;un-problème-bien-réel&quot;&gt;Un problème bien réel&lt;/h2&gt;

&lt;p&gt;Le fléau du racisme au sein de la police est pourtant un problème bien connu au Québec. La décision de la Cour supérieure elle-même a été prise dans le cadre d’une poursuite intentée par un jeune Noir qui, depuis 2018, s’est fait interpeller environ &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1887288/racisme-systemique-police-justice-montreal-joseph-christopher-luamba&quot;&gt;10 fois&lt;/a&gt; par la police, sans motif autre que le fait qu’il conduisait ou était passager dans une voiture. En &lt;a href=&quot;https://marxiste.qc.ca/index.php/article/affaire-camara-le-mois-de-lhistoire-des-noirs-version-spvm&quot;&gt;février&lt;/a&gt; de l’année dernière, la police de Montréal avait brutalisé, emprisonné et dénigré Mamadi III Fara Camara, un homme noir faussement accusé d’avoir tiré sur un policier. En &lt;a href=&quot;https://marxiste.qc.ca/index.php/article/le-spvq-brutalise-des-jeunes-noirs-violence-raciste-inherente-au-systeme-capitaliste&quot;&gt;décembre 2021&lt;/a&gt;, c’est la police de Québec cette fois qui avait tabassé et humilié un jeune noir sans aucun motif. En &lt;a href=&quot;https://www.journaldemontreal.com/2022/11/04/pas-de-cle-pour-liberer-un-innocent-menotte&quot;&gt;novembre&lt;/a&gt; de cette année, des policiers de Montréal ont menotté un homme noir qu’ils ont accusé d’avoir volé… sa propre voiture. Ce cas rappelle bien ce qui s’est passé à Montréal en &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1767991/avocat-montrealais-plainte-spvm-profilage-racial&quot;&gt;janvier 2021&lt;/a&gt;, lorsqu’un avocat noir s’est fait menotter, fouiller et ridiculiser par des policiers qui ont essayé de trouver une raison pour leur intervention après coup en lui collant une amende pour cellulaire au volant. Ce ne sont là que quelques exemples d’une liste interminable de cas réels de profilage racial commis par les forces de police au Québec menant à l’humiliation, des blessures et même la mort pour les victimes.&lt;/p&gt;

&lt;p&gt;Différents services de police de la province ont été &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1334763/montreal-police-spvm-profilage-discrimination-rapport&quot;&gt;forcés de reconnaître&lt;/a&gt; l’existence du racisme systémique dans leurs rangs, non seulement contre les Noirs, mais aussi les Autochtones et les Arabes qui sont &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1824765/rapport-armony-spvr-profilage-racial-police&quot;&gt;interpellés&lt;/a&gt;, brutalisés et tués de façon &lt;a href=&quot;https://marxiste.qc.ca/article/la-police-de-repentigny-tue-un-homme-noir-systeme-raciste-police-raciste&quot;&gt;disproportionnée&lt;/a&gt; par la police au Québec et au Canada.&lt;/p&gt;

&lt;h2 id=&quot;les-solutions-de-la-caq&quot;&gt;&lt;strong&gt;Les « solutions » de la CAQ&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;À la suite des mouvements de masse qui ont secoué le monde en réponse au meurtre de George Floyd par des policiers aux États-Unis, le gouvernement de Legault lui-même avait mis sur pied le Groupe d’action contre le racisme. Le rapport émis par ce groupe en &lt;a href=&quot;https://www.journaldemontreal.com/2022/12/01/interpellations-aleatoires-et-securite-routiere--quebec-na-aucune-etude&quot;&gt;décembre 2020&lt;/a&gt; recommandait comme première mesure, justement, d’interdire les interventions aléatoires. En &lt;a href=&quot;https://www.lapresse.ca/actualites/politique/2022-11-25/interceptions-aleatoires-et-profilage-racial/quebec-interjette-appel-mais-veut-rouvrir-la-loi-sur-la-police.php&quot;&gt;décembre 2021&lt;/a&gt;, l’ancienne ministre de la Sécurité publique de la CAQ, Geneviève Guilbault, avait déposé un projet de loi visant à introduire des réformes en réponse à ce rapport. Le gouvernement de la CAQ avait évidemment d’autres priorités et rien n’en est sorti au final. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.journaldequebec.com/2022/11/25/profilage-racial-quebec-porte-la-decision-sur-les-interceptions-aleatoires-en-appel&quot;&gt;Pendant le procès&lt;/a&gt;, le ministre actuel de la Sécurité publique, François Bonnardel, a prétendu que les policiers sont maintenant formés pour ne pas interpeller les conducteurs sur une base discriminatoire. Cette stratégie n’ayant pas fonctionné, il promet maintenant une vague réforme future de la &lt;em&gt;Loi sur la police&lt;/em&gt;. Comme solution alternative à la fin des contrôles aléatoires, François Bonnardel propose même d’augmenter le &lt;a href=&quot;https://www.lapresse.ca/actualites/politique/2022-11-25/interceptions-aleatoires-et-profilage-racial/quebec-interjette-appel-mais-veut-rouvrir-la-loi-sur-la-police.php&quot;&gt;financement&lt;/a&gt; de la police (prétendument pour améliorer la formation) et appelle ceux qui seraient victimes de profilage racial à « avoir confiance en la déontologie policière »! Ça frôle la parodie!&lt;/p&gt;

&lt;h2 id=&quot;la-caq-le-capitalisme-et-le-racisme&quot;&gt;La CAQ, le capitalisme et le racisme&lt;/h2&gt;

&lt;p&gt;Les corps policiers et leurs fraternités à travers le Québec se sont également empressés d’exprimer leur opposition au jugement et leur &lt;a href=&quot;https://www.journaldequebec.com/2022/11/25/profilage-racial-quebec-porte-la-decision-sur-les-interceptions-aleatoires-en-appel&quot;&gt;soutien&lt;/a&gt; au recours en appel de François Legault. Dans des &lt;a href=&quot;https://www.journaldequebec.com/2022/10/26/profilage-racial-les-interpellations-aleatoires-parfois-necessaires-dit-legault&quot;&gt;déclarations&lt;/a&gt; de plus en plus alarmistes, ils évoquent toutes sortes d’excuses comme les accidents causés par l’alcool au volant et la circulation sans entraves de présumés criminels pour tenter de justifier le droit des policiers d’interpeller n’importe qui sans motif.&lt;/p&gt;

&lt;p&gt;Legault persiste et demande de « laisser les policiers faire leur travail ». Avec l’aggravation de la crise du capitalisme, une intensification de la lutte de classes est à prévoir. Legault et son gouvernement auront effectivement besoin que les policiers fassent leur « travail », c’est-à-dire réprimer les travailleurs qui oseront lutter contre l’inflation et le déclin de leurs conditions de travail. Legault n’a aucun intérêt à enlever des pouvoirs au bras armé de l’État, au contraire. Il essaie donc de rester dans les bonnes grâces des policiers en défendant leur droit d’être raciste.&lt;/p&gt;

&lt;p&gt;Legault n’a aucun intérêt à lutter contre le racisme, peu importe la forme que ça prend. C’est assez clair avec l’exemple récent de Jean Boulet, l’ancien ministre de l’Imimigration. L’an dernier, il avait &lt;a href=&quot;https://www.marxiste.qc.ca/index.php/article/chemin-roxham-hypocrisie-sans-frontieres&quot;&gt;essayé&lt;/a&gt; d’utiliser les réfugiés passant par le chemin Roxham comme boucs émissaires de la gestion laborieuse de la pandémie par le gouvernement de la CAQ. Il est allé jusqu’à &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1920110/immigration-montreal-jean-boulet-emploi-francais&quot;&gt;déclarer&lt;/a&gt; dans la récente campagne électorale que « 80% des immigrants s’en vont à Montréal, ne travaillent pas, ne parlent pas français ou n’adhèrent pas aux valeurs de la société québécoise ». Ses propos racistes ont été tolérés par Legault et ce Boulet est encore aujourd’hui membre de son conseil des ministres.&lt;/p&gt;

&lt;p&gt;En fait, Legault a besoin du racisme comme outil pour maintenir sa carrière politique basée sur la xénophobie et le nationalisme identitaire. Il érige continuellement une opposition construite de toutes pièces entre le mode de vie de ceux qui immigrent ici et la « façon de vivre au Québec », la laïcité (lisez catho-laïcité), le « respect », etc. Il suffit de se remémorer ses propos lors de la campagne électorale de septembre dernier pour se convaincre de son opportunisme crasse. &lt;a href=&quot;https://www.lesoleil.com/2022/09/07/francois-legault-associe-limmigration-a-la-violence-puis-sexcuse-pour-ses-propos-dcdf2bfdb1b68f38a1959d999d78b596&quot;&gt;Selon lui&lt;/a&gt;, les immigrants représentent une menace pour les « valeurs québécoises » parce que « les Québécois sont pacifiques, ils n’aiment pas la chicane, ils n’aiment pas les extrémistes, ils n’aiment pas la violence ». Loin d’être inacceptable, le racisme est en fait un invité d’honneur autour du premier ministre. S’attendre que la CAQ combatte le racisme d’une quelconque façon serait un espoir très mal placé. &lt;/p&gt;

&lt;p&gt;Au-delà de l’enjeu du profilage racial par la police et des besoins opportunistes de la CAQ, le capitalisme qu’ils défendent, pour être maintenu, a vitalement besoin du racisme. D’un côté, diviser la majorité, les travailleurs, sur des lignes arbitraires comme la race ou la religion, est essentiel pour les affaiblir dans leur lutte contre la minorité des exploiteurs, les patrons. Et de l’autre, maintenir les procédures et règles laissant le champ libre aux caprices arbitraires et discriminatoires de la police renforce la capacité de répression de l’État. &lt;/p&gt;

&lt;p&gt;La police défendant un système basé sur toutes sortes d’oppressions sera nécessairement raciste. Pour en finir avec le profilage racial et le racisme systémique plus généralement, il faut en finir avec le capitalisme.&lt;/p&gt;
</description>
        <pubDate>Fri, 09 Dec 2022 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/journalism/2022/12/09/legault-defend-le-droit-de-la-police-detre-raciste.html</link>
        <guid isPermaLink="true">https://hantz.sh/journalism/2022/12/09/legault-defend-le-droit-de-la-police-detre-raciste.html</guid>
        
        
        <category>journalism</category>
        
      </item>
      
    
     
      <item>
        <title>Grève à la SQDC : Pour une riposte unie contre l’inflation</title>
        <description>&lt;p&gt;Les travailleurs de la Société québécoise du cannabis (SQDC) syndiqués avec le SCFP-5454 sont en grève depuis maintenant 20 semaines. Les attaques antisyndicales de la direction de la SQDC pour briser les travailleurs ont provoqué une escalade des moyens de pression qui ont abouti à la grève dans plus d’une vingtaine de succursales à travers la province. Près de cinq mois après le début de la grève, les patrons font encore piétiner les négociations à coup d’injonctions et d’offres à rabais. Avec la flambée de l’inflation, encore plus qu’avant, les travailleurs n’ont pas le choix de lutter bec et ongles pour défendre leurs conditions de vie et de travail.&lt;/p&gt;

&lt;p&gt;Les syndiqués du SCFP-5454 demandent notamment des salaires similaires aux employés de la Société des alcools du Québec (SAQ), dont la SQDC est une filiale. Ils demandent aussi plus de stabilité dans les horaires et dans les transferts entre les succursales. Actuellement, une grande partie des travailleurs sont à temps partiel et sont obligés d’avoir un second emploi pour survivre. Ils doivent être disponibles tous les jours de la semaine sans aucune garantie sur leur nombre d’heures, qui varie selon le bon vouloir des gestionnaires. Travailler à la SQDC dans ces conditions, c’est une condamnation abjecte à la précarité.&lt;/p&gt;

&lt;p&gt;Leur convention collective est échue depuis décembre 2021. Le syndicat essaie d’en négocier une nouvelle depuis bien avant cette date, mais il se bute jusqu’à maintenant au mépris total de la direction. Au lieu de négocier, la SQDC préfère en fait s’attaquer aux travailleurs et &lt;a href=&quot;https://scfp.qc.ca/vote-de-greve-a-la-societe-quebecoise-du-cannabis/&quot;&gt;refuse même de reconnaître&lt;/a&gt; le syndicat dans les succursales nouvellement syndiquées. Lorsque les travailleurs ont commencé à changer leur tenue vestimentaire en guise de moyen de pression, les patrons ont répondu en les &lt;a href=&quot;https://www.fm1047.ca/audio/500732/sqdc-employes-suspendus-sans-salaire?fbclid=IwAR1rvDGu20Nw15x4xa_62PTzLFBPEiJN9buYH73DGZiYdf5Nw3PujW1UZ-s&quot;&gt;suspendant sans solde&lt;/a&gt;, ce qui n’est en fait qu’un lock-out déguisé. Plus de trois mois plus tard, le président du syndicat était encore suspendu. &lt;/p&gt;

&lt;p&gt;Désertant la table de négociation, l’employeur s’est affairé à obtenir plusieurs injonctions dans le but de limiter la capacité des syndiqués du SCFP-5454 à se défendre. Lorsque les travailleurs de la succursale d’Aylmer ont rejoint la grève, la SQDC s’est basée sur des détails pour faire déclarer cette grève illégale par le tribunal administratif du travail. Des gestionnaires sont même allés jusqu’à appeler la police pour intimider les travailleurs. Clairement, du point de vue des patrons, tous les moyens, aussi vils soient-ils, sont bons pour briser les travailleurs.&lt;/p&gt;

&lt;p&gt;Avec ses 66 millions de profits générés en 2021, la SQDC pourrait pourtant mieux rémunérer les travailleurs et leur donner des horaires plus stables. Que l’entreprise combatte aussi obstinément les demandes des travailleurs est d’autant plus aberrant lorsqu’on considère que c’est une entreprise d’État. La réalité est que même en étant une entreprise publique, tout comme la SAQ, Hydro-Québec, Loto-Québec, etc., la SQDC fonctionne principalement pour faire du profit. Pour augmenter les revenus de la SQDC, les gestionnaires ont donc intérêt à maintenir les salaires bas. &lt;/p&gt;

&lt;p&gt;Alors même que les syndiqués du SCFP-5454 sont sur le pavé en train de défendre leurs conditions de travail, la SQDC &lt;a href=&quot;https://infodaffaires.com/greve-la-sqdc-de-chateauguay-ne-lache-pas-le-morceau/&quot;&gt;ferme des succursales&lt;/a&gt; pour accorder des vacances aux gestionnaires. Et scandaleusement, les dirigeants de l’entreprise se rémunèrent allègrement pour s’être tourné les pouces toute l’année alors que les travailleurs qui font rouler la SQDC, même pendant la pandémie, sont poussés dans la pauvreté. Jacques Farcy, le président et chef de la direction de la SQDC, s’est réservé un exorbitant &lt;a href=&quot;https://www.csn.qc.ca/actualites/sqdc-les-syndique-es-enfument-le-conseil-du-tresor/&quot;&gt;305 000 dollars&lt;/a&gt; par an. &lt;/p&gt;

&lt;p&gt;Le SCFP-5454 représente des travailleurs de près d’une trentaine de succursales à travers la province dont la majorité mène courageusement cette lutte contre l’avarice du patronat. La SQDC peut toutefois se permettre de continuer à faire la sourde oreille, même après cinq mois de grève. Ceci est dû au fait que la majorité des succursales de la SQDC ne sont pas syndiquées et continuent à fonctionner à travers le Québec. L’impact de la grève serait beaucoup plus grand si l’ensemble des succursales étaient en grève. Les patrons se basent sur les autres succursales pour mener une guerre d’attrition contre les syndiqués du SCFP-5454. Il est essentiel de syndiquer les non-syndiqués de la SQDC pour renforcer les prochaines luttes.&lt;/p&gt;

&lt;p&gt;La direction se sent encore plus renforcée dans sa position belliqueuse par la division entre les deux syndicats représentant les travailleurs. La SQDC-CSN qui représente des travailleurs d’une quinzaine de succursales a signé une entente de principe en juin. Cette entente dont les gains sont minimes et inférieurs à ce que demandent les membres du SCFP-5454 met la pression dans le mauvais sens. L’entente comprend un salaire d’entrée de 19 dollars l’heure avec un maximum de 23 dollars l’heure après sept ans. Ayant reçu cette même offre, largement insuffisante, les syndiqués du SCFP-5454 l’ont correctement rejetée à l’unanimité. Pour résister aux attaques de la SQDC, et faire des gains réels, il faut faire front uni. L’union fait la force des travailleurs. La lutte héroïque actuelle des travailleurs de la SQDC laisse entrevoir le futur du reste du mouvement ouvrier. Le reste du mouvement, y compris le SQDC-CSN, doit donc le traiter comme tel et se mobiliser massivement en solidarité avec le SCFP-5454.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solidarité avec les grévistes du SCFP-5454!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Victoire aux travailleurs!&lt;/strong&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 12 Oct 2022 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/journalism/2022/10/12/greve-a-la-sqdc-pour-une-riposte-unie-contre-linflation.html</link>
        <guid isPermaLink="true">https://hantz.sh/journalism/2022/10/12/greve-a-la-sqdc-pour-une-riposte-unie-contre-linflation.html</guid>
        
        
        <category>journalism</category>
        
      </item>
      
    
     
      <item>
        <title>Un autre coup bas : Rolls-Royce congédie le président du syndicat en plein lock-out</title>
        <description>&lt;p&gt;Quatre mois après avoir mis 530 travailleurs de l’usine de Lachine en lockout, Rolls-Royce annonce le congédiement du président de leur syndicat, Frédéric Labelle. Les patrons l’accusent d’avoir supposément &lt;a href=&quot;https://www.journaldemontreal.com/2022/07/08/rolls-royce-congedie-le-president-du-syndicat-pendant-le-lock-out&quot;&gt;pris en filature&lt;/a&gt; un des dirigeants de la compagnie. En réalité, ce congédiement n’est qu’un autre de ces coups bas que se permet Rolls-Royce contre ces travailleurs qui luttent pour des conditions décentes.&lt;/p&gt;

&lt;p&gt;Le déclenchement du lockout lui-même avait donné le ton et montré que les patrons ne s’arrêteraient à rien. En mars dernier, alors que les travailleurs de l’usine d’entretien de moteurs d’avions de Lachine étaient réunis en assemblée générale pour faire le point sur les négociations qui &lt;a href=&quot;https://www.csn.qc.ca/actualites/lock-out-sauvage-chez-rolls-royce-les-salarie-es-declenchent-la-greve/&quot;&gt;piétinaient&lt;/a&gt; depuis des mois déjà, Rolls-Royce les a &lt;a href=&quot;https://marxiste.qc.ca/article/lockout-chez-rolls-royce-canada-luttons-contre-les-scabs-par-des-piquets-durs&quot;&gt;lockouté&lt;/a&gt;. Suite à quoi une grève a été immédiatement déclenchée avec l’appui de 94% des travailleurs. &lt;/p&gt;

&lt;p&gt;Depuis le début, Rolls-Royce s’acharne à intimider les travailleurs pour briser la solidarité entre eux. L’entreprise, de son propre aveu, a fait usage de &lt;a href=&quot;https://www.journaldemontreal.com/2022/04/13/des-briseurs-de-greve-chez-rolls-royce-canada&quot;&gt;briseurs de grève&lt;/a&gt; pour remplacer les travailleurs syndiqués lockoutés. &lt;/p&gt;

&lt;p&gt;En plus de bafouer les lois du travail, ajoutant l’insulte à l’injure, les patrons se sont trouvés des excuses bidons pour poursuivre 150 des lockoutés pour &lt;a href=&quot;https://www.csn.qc.ca/actualites/rolls-royce-canada-poursuit-150-lock-outes/&quot;&gt;outrage au tribunal&lt;/a&gt;. Pour forcer les travailleurs à accepter des reculs dans leurs conditions de vie et de travail et pour renflouer les poches des actionnaires de Rolls-Royce, tous les moyens sont bons. L’accusation contre le président du syndicat est la plus récente tentative d’intimider, de briser le moral des travailleurs et de les forcer à capituler.&lt;/p&gt;

&lt;p&gt;Le président &lt;a href=&quot;https://www.facebook.com/sttrrc.csn/posts/385304707070081&quot;&gt;a affirmé&lt;/a&gt; ne pas se laisser abattre : « Ceux qui pensaient me ralentir et m’affecter par ceci, me connaissent mal! Au contraire, ceci solidifie ma position et me donne l’énergie pour continuer. Collègues, notre bataille est noble, est solide et historique. Vous méritez un fond de pension garanti et des salaires décents! »&lt;/p&gt;

&lt;p&gt;Mais cela pose la question des conditions d’une victoire. En ce moment, Rolls-Royce peut se permettre de garder les syndiqués de la CSN en lock-out et de faire stagner les négociations pendant plusieurs mois en utilisant des scabs à tour de bras pour les remplacer, ce qui est censé être illégal, avec la complicité du  &lt;a href=&quot;https://fb.watch/eeSCf6l572/&quot;&gt;SPVM.&lt;/a&gt; Mais briser la loi pour les patrons, ça finit au pire avec une petite tape sur la main au tribunal. La loi n’est clairement pas du côté des travailleurs.&lt;/p&gt;

&lt;p&gt;Les tactiques basses actuelles des patrons sont dignes de celles des années 30, 60 et 70. Ce faisant, ils nous forcent à nous aussi revenir aux méthodes combatives de cette époque. Devant les patrons qui escaladent la lutte en s’attaquant au président,  les travailleurs doivent escalader la lutte eux aussi. Il faut exiger la réembauche de Frédéric Labelle, et soutenir cette revendication par un appel à une mobilisation plus large. Il faut être prêt à défendre l’intégrité des lignes de piquetage et raviver la tradition des piquets durs dans le mouvement : &lt;strong&gt;piquet de grève, on ne passe pas!&lt;/strong&gt; La force des travailleurs, c’est la force du nombre. La lutte chez Rolls Royce est un point focal du mouvement ouvrier présentement. Les travailleurs ne peuvent être laissés à eux-mêmes : la CSN et les autres centrales doivent mobiliser leurs membres pour venir gonfler les piquets par la solidarité active.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solidarité avec les travailleurs de Rolls-Royce!&lt;/strong&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/journalism/2022/07/19/un-autre-coup-bas-rolls-royce-congedie-le-president-du-syndicat-en-plein-lock-out.html</link>
        <guid isPermaLink="true">https://hantz.sh/journalism/2022/07/19/un-autre-coup-bas-rolls-royce-congedie-le-president-du-syndicat-en-plein-lock-out.html</guid>
        
        
        <category>journalism</category>
        
      </item>
      
    
     
      <item>
        <title>Chemin Roxham : hypocrisie sans frontières</title>
        <description>&lt;p&gt;Le nombre de demandeurs d’asile arrivant par le chemin Roxham a augmenté en flèche depuis novembre. Dans les derniers jours, les appels à sa fermeture se sont multipliés de la part de politiciens et commentateurs de droite cherchant à casser du sucre sur le dos des immigrants, notamment François Legault. En réponse aux demandes du premier ministre du Québec, son homologue canadien Justin Trudeau s’est posé en défenseur des migrants. Mais l’hypocrisie de part et d’autre ne pourrait être plus flagrante.&lt;/p&gt;

&lt;h2 id=&quot;entente-sur-les-pays-tiers-sûrs&quot;&gt;&lt;strong&gt;Entente sur les pays tiers sûrs&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;La controverse autour du chemin Roxham ne date pas d’hier. Ce passage frontalier irrégulier entre le Canada et les États-Unis, situé près de Saint-Bernard-de-Lacolle en Montérégie, est utilisé par des demandeurs d’asile depuis 2015. Mais il a commencé à être fréquenté plus intensément depuis 2017, après l’adoption par le gouvernement Trump de politiques migratoires ayant poussé de nombreux réfugiés sur le territoire américain à fuir ce pays vers le Canada. &lt;/p&gt;

&lt;p&gt;Les politiciens et commentateurs de droite s’étaient servi du chemin Roxham pour faire mousser la xénophobie en en faisant le symbole de l’arrivée supposément massive de hordes d’immigrants. Des groupes d’extrême droite comme La Meute et Storm Alliance avaient organisé des manifestations à la sortie du chemin en 2017 et 2018. Jean-François Lisée, alors chef du Parti québécois, avait tenté d’imiter Trump et appelé à y construire une clôture, « payée par les Mexicains ».&lt;/p&gt;

&lt;p&gt;Au début de la pandémie de COVID-19, le gouvernement fédéral avait fermé le chemin, utilisant des arguments de santé publique. Malgré sa fermeture, &lt;a href=&quot;https://www.ledevoir.com/societe/710247/demandeurs-d-asile-ce-qui-se-passe-au-chemin-roxham-en-six-questions&quot;&gt;682 personnes&lt;/a&gt; sont quand même entrées au Québec de manière irrégulière entre mars 2020 et octobre 2021.&lt;/p&gt;

&lt;p&gt;Depuis sa réouverture en novembre dernier, &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1871710/record-asile-roxham-migrants-quebec-canada-etats-unis&quot;&gt;8000 personnes&lt;/a&gt; sont entrées au Québec par le chemin Roxham depuis les États-Unis. Le ministre québécois de l’Immigration, Jean Boulet, prétend que 35 000 personnes devraient le traverser d’ici la fin de l’année. Il est utilisé par une grande partie des demandeurs d’asile au Canada, souvent des familles en provenance de l’Amérique latine, de l’Europe ou encore du Moyen-Orient, qui fuient la violence, la guerre, la misère et la répression.&lt;/p&gt;

&lt;p&gt;L’attrait du chemin Roxham s’explique par l’&lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1018824/entente-tiers-pays-surs-explication-debat-suspension&quot;&gt;Entente sur les pays tiers sûrs&lt;/a&gt;. En vertu de cet accord entre le Canada et les États-Unis, il est interdit de demander asile au Canada depuis les États-Unis, ceux-ci étant supposés déjà être un pays « sûr » où demander asile. En pratique, les États-Unis sont loin d’être « sûrs » pour tous les migrants. Ils s’y font emprisonner à la pelletée dans des conditions horribles, et le risque de se voir refuser sa demande de statut de réfugié est élevé. Les restrictions en matière d’immigration adoptées par le gouvernement Trump ont empiré cette situation. &lt;/p&gt;

&lt;p&gt;Cela signifie que les personnes cherchant asile au Canada qui tentent d’entrer depuis les États-Unis par les postes frontière officiels entre les deux pays sont refoulées et renvoyées aux États-Unis, où elles risquent la déportation vers leur pays d’origine. Par conséquent, les demandeurs d’asile entrent au Canada par des entrées « non officielles » comme le chemin Roxham, pour ensuite présenter leur demande depuis le Canada. Contrairement à l’idée reçue, cela n’est pas illégal, à condition d’ensuite se présenter à un poste frontière rapidement. &lt;/p&gt;

&lt;h2 id=&quot;hypocrisie-raciste&quot;&gt;&lt;strong&gt;Hypocrisie raciste&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Cette fois-ci, c’est Mathieu Bock-Côté qui a lancé le bal des discours xénophobiques grandiloquents avec une publication franchement &lt;a href=&quot;https://www.journaldemontreal.com/2022/05/10/il-faut-fermer-le-chemin-roxham&quot;&gt;nauséabonde&lt;/a&gt; dans le Journal de Montréal. Le &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1882409/immigration-irreguliere-frontiere-canada-refugies&quot;&gt;Parti québécois&lt;/a&gt;, avec &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1882634/quebec-canada-pression-monte-ottawa-ferme-chemin-roxham&quot;&gt;François Legault&lt;/a&gt; à sa suite, s’est empressé de relayer son message. Ils appellent à fermer le chemin Roxham et répètent sans gêne l’argument de MBC que ce ne sont pas de « vrais réfugiés » qui l’utilisent.&lt;/p&gt;

&lt;p&gt;En décembre dernier, la CAQ et son ministre de l’immigration, Jean Boulet, ont essayé de se servir des réfugiés passant par le chemin Roxham comme boucs émissaires de leur gestion criminelle de la pandémie. Le ministre a voulu faire croire que l’arrivée de ces migrants « surcharge le système de santé », alors qu’il n’y avait &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1849328/covid-migrants-eclosions-quebec-boulet-legault-roxham&quot;&gt;aucune éclosion liée à l’arrivée des migrants&lt;/a&gt; via le chemin Roxham. Il a appelé à fermer le chemin Roxham et à ne plus traiter les demandes d’asile qui en proviennent pour « protéger les Québécois ».&lt;/p&gt;

&lt;p&gt;Alors même que près de la moitié de ceux qui passent par le chemin Roxham en &lt;a href=&quot;https://www.ledevoir.com/societe/710247/demandeurs-d-asile-ce-qui-se-passe-au-chemin-roxham-en-six-questions&quot;&gt;2022&lt;/a&gt; vont s’établir dans d’autres provinces que le Québec, selon les dires de la CAQ, la capacité d’accueil du Québec serait dépassée. Pourtant, en mars seulement, le même Boulet, dans un exemple flagrant d’hypocrisie raciste, clamait haut et fort qu’il n’y avait « &lt;a href=&quot;https://www.lesoleil.com/2022/03/07/boulet-pas-de-limite-au-nombre-de-refugies-ukrainiens-que-le-quebec-peut-recevoir-0b8b3668617fcafe989448934ea32b34&quot;&gt;pas de limite&lt;/a&gt; » au nombre de réfugiés ukrainiens que le Québec pourrait accueillir! Il ne faut toutefois pas se tromper, ces laquais de l’impérialisme américain prétendent seulement avoir à cœur le sort des réfugiés ukrainiens parce que ceux-ci fuient l’ennemi russe. Les réfugiés causés par les interventions et l’ingérence des impérialistes américains et canadiens au Moyen-Orient depuis 20 ans, eux, n’ont eu droit qu’à une déferlante continue de racisme de la part de nos nationalistes québécois.&lt;/p&gt;

&lt;p&gt;L’hypocrisie de la CAQ à ce sujet ne s’arrête pas là. Alors même que le premier ministre utilise le chemin Roxham pour attiser la xénophobie, la CAQ mène des &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1878738/quebec-missions-etranger-recrutement-travailleur-journees-emploi&quot;&gt;missions à l’étranger&lt;/a&gt; pour attirer des travailleurs au Québec. Elle admet aussi un &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1882723/record-100-000-immigrants-quebec-2022-gerald-fillion-immigration?fromApp=appInfoIos&amp;amp;partageApp=appInfoiOS&amp;amp;accesVia=partage&quot;&gt;nombre grandissant&lt;/a&gt; de travailleurs étrangers temporaires au Québec pour pourvoir aux nombreux postes vacants dans le secteur agricole, manufacturier ou encore dans les &lt;a href=&quot;https://www.lapresse.ca/actualites/sante/2022-04-10/preposes-aux-beneficiaires/des-conditions-miserables-et-abusives-denoncees.php&quot;&gt;résidences privées&lt;/a&gt; pour aînées.&lt;/p&gt;

&lt;p&gt;Quand les travailleurs migrants peuvent être maintenus dans des situations de précarité extrême qui facilitent leur exploitation de la façon &lt;a href=&quot;https://marxiste.qc.ca/article/logements-insalubres-des-travailleurs-migrants-temporaires-les-patrons-profiteront-toujours-des-plus-vulnerables&quot;&gt;la plus abjecte&lt;/a&gt;, Legault et le reste des politiciens bourgeois ainsi que le patronat qu’ils servent en sont bien contents et en &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1881428/immigration-solution-penurie-travailleurs-patronat?depuisRecherche=true&quot;&gt;demandent&lt;/a&gt; toujours plus. Ils n’hésitent toutefois pas à se servir de leur sort pour nourrir et mobiliser les sentiments xénophobes des couches les plus arriérées de la population, surtout lorsque les élections approchent.&lt;/p&gt;

&lt;h2 id=&quot;trudeau-et-les-obstacles-bureaucratiques&quot;&gt;&lt;strong&gt;Trudeau et les obstacles bureaucratiques&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Justin Trudeau a bien sûr profité de cette situation pour se positionner comme le champion des migrants. Prétendant tenir une « position basée sur la compassion », il répond à Legault que le Canada ne peut pas fermer le passage en vertu des &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1883052/point-passage-irregulier-etats-unis-quebec-canada?depuisRecherche=true&quot;&gt;normes internationales&lt;/a&gt; concernant les réfugiés. Mais l’Entente sur les pays tiers sûrs qui rend ce passage nécessaire représente déjà une &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1848187/entente-pays-tiers-cour-supreme-canada&quot;&gt;violation&lt;/a&gt; de ces normes. &lt;/p&gt;

&lt;p&gt;Or, ce sont les libéraux qui ont adopté cette entente en 2004. Et le gouvernement Trudeau a défendu cette entente devant les tribunaux en &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1848187/entente-pays-tiers-cour-supreme-canada&quot;&gt;portant en appel&lt;/a&gt; et réussissant à faire renverser une décision de la Cour fédérale de 2020 qui avait &lt;a href=&quot;https://www.marxist.ca/article/safe-third-country-agreement-struck-down-the-labour-movement-must-keep-it-down&quot;&gt;déclaré inconstitutionnelle&lt;/a&gt; l’Entente sur les pays tiers sûrs.&lt;/p&gt;

&lt;p&gt;Promettant incessamment de la « moderniser », le gouvernement Trudeau s’acharne à maintenir cette entente réactionnaire. Abolir cette entente réactionnaire permettrait aux demandeurs d’asile de passer par les postes de frontière réguliers. Loin de considérer cette option, le gouvernement Trudeau met plutôt en place des &lt;a href=&quot;https://ici.radio-canada.ca/recit-numerique/3469/roxham-road-canada-migrants-trudeau-passeurs-taxis-frontiere&quot;&gt;installations&lt;/a&gt; « non officielles » pour accueillir les réfugiés passant par le chemin Roxham! &lt;/p&gt;

&lt;p&gt;Et ceux qui bravent vents et marées et finissent par réussir à déposer une demande depuis le Canada se retrouvent devant un nouvel obstacle : une bureaucratie labyrinthique. Les délais interminables dans le traitement des dossiers des réfugiés les forcent à attendre parfois &lt;a href=&quot;https://www.lapresse.ca/contexte/editoriaux/2022-05-15/un-permis-de-travail-au-bout-du-chemin-roxham.php&quot;&gt;jusqu’à 11 mois&lt;/a&gt; pour obtenir un permis de travail. Il y a d’ailleurs en ce moment des demandes d’immigration déposées depuis &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1879543/immigration-canada-quebec-delais-residence-permanente?depuisRecherche=true&quot;&gt;2009&lt;/a&gt; qui n’ont toujours pas abouties à une réponse. Le gouvernement Trudeau ne peut pas prétendre défendre les réfugiés. Il dit vouloir donner aux migrants « le droit d’avoir une analyse de leur dossier », mais dans les faits, il les condamne systématiquement aux limbes bureaucratiques.&lt;/p&gt;

&lt;p&gt;À cette hypocrisie s’ajoute celle de se trouver à la tête d’un État impérialiste lui-même responsable de créer des réfugiés. Parmi les migrants qui sont passés par le chemin Roxham en 2017 et 2018 pour fuir le racisme du gouvernement de Trump, il y avait une quantité significative de réfugiés haïtiens. Ces derniers vivaient aux États-Unis avec des permis de séjour temporaires. Or, la situation terrible à Haïti est le résultat de l’ingérence impérialiste du Canada et des États-Unis au pays depuis des décennies. Le pays ne s’est jamais remis du coup d’État de 2004 contre le président de gauche Jean-Bertrand Aristide, qui avait entrepris des réformes dangereuses pour les États-Unis. Le Parti libéral du Canada a eu un rôle particulièrement important dans ce crime impérialiste qui a déstabilisé le pays.&lt;/p&gt;

&lt;p&gt;On peut aussi penser au rôle du Canada dans la &lt;a href=&quot;https://marxiste.qc.ca/article/lhypocrisie-liberale-la-vente-darmes-a-larabie-saoudite-reprend-en-pleine-pandemie&quot;&gt;guerre sauvage&lt;/a&gt; que mène l’Arabie Saoudite contre le Yémen depuis des années. L’Arabie Saoudite, soutenue par l’impérialisme occidental en général et armée par le Canada, condamne des millions de Yéménites, dont des centaines de milliers d’enfants, à la famine. L’impérialisme occidental, qui supporte l’Arabie Saoudite, ne prête aucune attention au sort des Yéménites. Comparativement au traitement de la guerre en Ukraine, l’hypocrisie ne pourrait être plus claire.&lt;/p&gt;

&lt;p&gt;Au-delà des obstacles bureaucratiques qu’il leur impose une fois au Canada, Trudeau, à la tête de l’État impérialiste canadien, participe directement à rendre leur vie impossible dans leur pays d’origine. Que Trudeau prétende avoir à cœur le sort de ceux qu’il force à fuir leur pays est en fait l’hypocrisie la plus abjecte.&lt;/p&gt;

&lt;h2 id=&quot;fini-les-frontières-fini-le-capitalisme&quot;&gt;&lt;strong&gt;Fini les frontières, fini le capitalisme!&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Les politiciens bourgeois québécois appellent hypocritement à fermer le chemin Roxham alors qu’ils prétendent ouvrir la porte aux réfugiés ukrainiens. De son côté, Justin Trudeau prétend défendre les migrants alors même qu’il participe à créer les situations de précarité dans lesquelles ils sont maintenus. Il est clair qu’aucun des deux côtés ne veut résoudre les problèmes qui poussent des millions de personnes à fuir leur pays. Au contraire, ils sont des défenseurs avérés du système qui est à la racine des problèmes des réfugiés : le capitalisme.&lt;/p&gt;

&lt;p&gt;Le capitalisme dans sa phase impérialiste intensifie la misère, les guerres et la destruction de l’environnement qui forcent des couches entières de la population des pays du tiers monde à chercher refuge dans les pays riches. Alors qu’il n’y a point de frontières pour la circulation du capital, les travailleurs sont maintenus divisés par ces lignes arbitraires. Les discours xénophobes et les accords réactionnaires servent à maintenir et renforcer ces divisions. Avec les frontières, les travailleurs des pays pauvres sont maintenus de force là où ils peuvent être surexploités, alors que dans les pays riches, les travailleurs voient constamment leurs emplois de qualité être menacés de délocalisation vers les pays pauvres. Le système capitaliste ne peut pas se maintenir sans ces horreurs. Pour les éliminer, il faut mettre fin au capitalisme lui-même.&lt;/p&gt;

&lt;p&gt;Tous les réfugiés, et non seulement ceux que la mesquinerie hypocrite impérialiste prétend favoriser, doivent être les bienvenus. Contrairement à ce que prétendent les nationalistes, les ressources nécessaires pour garantir des logements, des emplois et des services de qualité à tous les travailleurs, peu importent leurs origines, sont disponibles. Ces ressources &lt;a href=&quot;https://www.ctvnews.ca/business/companies-are-hoarding-cash-as-the-delta-variant-takes-over-the-globe-1.5550438&quot;&gt;dorment&lt;/a&gt; actuellement dans les coffres des banques. Mais pour pouvoir les mettre au service de l’humanité, il faut exproprier les parasites que sont les capitalistes. Les richesses de la société doivent être sous le contrôle démocratique de ceux qui la font rouler : les travailleurs. Avec une planification rationnelle de l’économie, les besoins des travailleurs de tous les pays pourront facilement être comblés sans les atrocités dont est empesté le capitalisme. Ainsi tomberait la distinction entre les « réfugiés » et les citoyens « en règle » – tous seraient traités de la même manière et verraient leurs besoins être satisfaits. Pour pouvoir mettre fin réellement à la crise de réfugiés, il faut le socialisme.&lt;/p&gt;
</description>
        <pubDate>Wed, 18 May 2022 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/journalism/2022/05/18/chemin-roxham-hypocrisie-sans-frontieres.html</link>
        <guid isPermaLink="true">https://hantz.sh/journalism/2022/05/18/chemin-roxham-hypocrisie-sans-frontieres.html</guid>
        
        
        <category>journalism</category>
        
      </item>
      
    
     
      <item>
        <title>Hausse de la norme sur le nickel dans l’air : La CAQ met les profits des minières avant notre santé</title>
        <description>&lt;p&gt;À la veille du temps des fêtes, alors que l’attention était tournée vers l’annonce des nouvelles mesures sanitaires concernant la COVID-19, la CAQ &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1848190/feu-vert-allegement-norme-nickel-particules-air-quebec&quot;&gt;a annoncé&lt;/a&gt; en douce son intention de quintupler la concentration de nickel jugée acceptable dans l’air. Les habitants de Limoilou et d’autres quartiers avoisinant le port de Québec, où la qualité de l’air est particulièrement inquiétante, se sont mobilisés contre cette décision absurde qui ne vise qu’à plaire aux compagnies minières.&lt;/p&gt;

&lt;h2 id=&quot;les-normes&quot;&gt;Les normes&lt;/h2&gt;

&lt;p&gt;La norme sur la concentration de particules de nickel admis dans l’air &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1848190/feu-vert-allegement-norme-nickel-particules-air-quebec&quot;&gt;a été établie&lt;/a&gt; au Québec en 2011 et fixée à 12 nanogrammes par mètre cube (ng/m³) en moyenne par année. En 2013, cette valeur a été changée pour 14 ng/m³ en moyenne par jour. Maintenant, sous la pression des minières et sans prendre en compte les conséquences réelles sur la vie des travailleurs, la CAQ vise à changer la norme pour cinq fois sa valeur actuelle, la portant à 70 ng/m³ admis par jour.&lt;/p&gt;

&lt;p&gt;Depuis la révision des normes en 2013, les compagnies minières &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1808412/hausse-norme-nickel-justification-economique-scientifique-quebec&quot;&gt;font pression&lt;/a&gt; sur le gouvernement pour les alléger. Une de ces entreprises, Glencore Canada, emploie 23 lobbyistes au Québec dans ce but. Leurs efforts additionnés à ceux de l’Association minière du Québec sont supposés « faire connaître les préoccupations de Glencore face à la difficulté » – lisez plutôt leur manque de volonté – à respecter les normes établies.&lt;/p&gt;

&lt;p&gt;Cette décision pourrait avoir des conséquences graves dans les lieux aux concentrations élevées de nickel dans l’air. Selon le &lt;a href=&quot;https://www.inspq.qc.ca/bise/effets-du-nickel-sur-la-sante-dans-la-cite-limoilou&quot;&gt;Directeur régional de santé publique de la Capitale-Nationale&lt;/a&gt;, « [l]’analyse de risque démontre que chez des personnes en bonne santé, les concentrations de nickel dans l’air pourraient favoriser le développement de problème d’allergie, d’asthme et de dermatite de contact chez une certaine partie de la population hypersensible (ayant développé une allergie) au nickel (de 10 à 20% de la population). » Et selon l’&lt;a href=&quot;https://iaac-aeic.gc.ca/050/documents/p80107/116746F.pdf&quot;&gt;United States Environmental Protection Agency&lt;/a&gt;, la présence de nickel dans l’air accroît les risques de cancer du poumon, et ce dès le seuil de 2 ng/m³.&lt;/p&gt;

&lt;h2 id=&quot;limoilou-visé&quot;&gt;Limoilou visé&lt;/h2&gt;

&lt;p&gt;Le quartier de Limoilou, à Québec, pourrait être particulièrement affecté. Depuis 2013, la concentration de nickel dans l’air y &lt;a href=&quot;https://www.ledevoir.com/politique/ville-de-quebec/375748/quebec-le-nickel-provient-du-port&quot;&gt;dépasse&lt;/a&gt; de deux à huit fois la norme, et a même atteint &lt;a href=&quot;https://www.qub.ca/article/quebec-pourrait-demander-a-avoir-sa-propre-norme-1064839565&quot;&gt;14 et 20&lt;/a&gt; fois la norme à l’occasion. Alors que dans le reste du Canada la concentration de nickel se &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1852619/nickel-citoyens-limoilou-7-fois-plus-quebec&quot;&gt;maintient généralement&lt;/a&gt; autour de 3 ng/m³, dans Limoilou elle s’élève en moyenne à 12 ng/m³.&lt;/p&gt;

&lt;p&gt;Et la source de la mauvaise qualité de l’air dans Limoilou n’est pas un mystère. En fait, un &lt;a href=&quot;https://www.environnement.gouv.qc.ca/infuseur/communique.asp?No=2392&quot;&gt;rapport du ministère de l’Environnement du Québec&lt;/a&gt; de 2013 admettait que la haute concentration en nickel et en autres métaux lourds dans ce secteur était due aux activités du Port de Québec. Les coupables sont donc connus. Malgré cela, &lt;a href=&quot;https://www.lequotidien.com/2022/02/02/la-ville-de-quebec-peut-elle-mieux-controler-le-nickel--7c15da4dc7ead3df57faff05c8dfa22b&quot;&gt;aucune mesure&lt;/a&gt; réelle n’est prise pour rectifier cette situation qui met tous les habitants des quartiers avoisinant le port à risque de maladies comme le cancer. En fait, depuis l’adoption des normes en 2013, les &lt;a href=&quot;https://www.lesoleil.com/2022/02/19/nickel-dans-lair-plus-de-100-depassements-pas-une-seule-sanction-ba2c7a09b1e1f41be1b40c3584d0b64d&quot;&gt;plus de 100&lt;/a&gt; dépassements n’ont fait l’objet d’aucune sanction.&lt;/p&gt;

&lt;p&gt;Le relâchement proposé des normes affecterait donc directement la basse-ville de Québec, un secteur particulièrement pauvre et ouvrier. Déjà, les disparités socio-économiques entre la haute et la basse-ville signifient que les habitants de cette dernière vivent six ans de moins que leurs concitoyens. Encore une fois, ce sont les pauvres et les travailleurs qui paient – de leur vie – pour les décisions des plus nantis.&lt;/p&gt;

&lt;h2 id=&quot;quelle-science-la-caq-écoute-t-elle&quot;&gt;Quelle science la CAQ écoute-t-elle?&lt;/h2&gt;

&lt;p&gt;La CAQ prétend que cette décision est basée sur de nouvelles &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1848190/feu-vert-allegement-norme-nickel-particules-air-quebec&quot;&gt;connaissances scientifiques&lt;/a&gt; à propos du risque que représente le nickel pour la santé, mais il n’en est rien. La Direction régionale de la santé publique (DRSP) de la Capitale-Nationale &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1808412/hausse-norme-nickel-justification-economique-scientifique-quebec&quot;&gt;admet&lt;/a&gt; que « la justification est plutôt économique ». Le ministère de l’Environnement et le ministère de la Santé en &lt;a href=&quot;https://www.lesoleil.com/2021/12/23/du-nickel-dans-la-soupe-de-limoilou-a1f2393c51fa990195b43970605b4981&quot;&gt;vantent&lt;/a&gt; les « impacts positifs » pour les entreprises.&lt;/p&gt;

&lt;p&gt;La décision est supposément basée sur l’avis d’experts « indépendants ». Mais l’une des principales expertes en question est la titulaire d’une chaire &lt;a href=&quot;https://www.lesoleil.com/2022/02/10/quelle-science-justifie-laugmentation-de-la-norme-sur-le-nickel-91023e181bcf014f2909ebb06c0dab7b&quot;&gt;financée&lt;/a&gt; par des intérêts privés parmi lesquels figurent des compagnies minières comme Rio Tinto, Glencore Canada et Eurometaux. Difficile de qualifier de tels avis d’« indépendants ».&lt;/p&gt;

&lt;p&gt;De plus, le rapport principal sur lequel la CAQ base sa décision recommande une limite maximale de 40 ng/m³ sur une période de 24 heures pour prévenir des problèmes de santé chez les travailleurs qui respireront l’air pollué de nickel. Pourtant la norme proposée par la CAQ établirait la limite à 70 ng/m³ par jour. En fin de compte, la CAQ n’écoute même pas sa propre science!&lt;/p&gt;

&lt;p&gt;La seule excuse restante pour justifier cette décision bidon est que, prétendument, permettre de relâcher plus de particules de nickel dans l’air attirerait les investissements, c’est-à-dire plus d’exploiteurs. Mais selon le même rapport, il est « peu probable » que des projets soient créés en réponse à cet allègement dans les 10 prochaines années. Les seuls impacts seront donc la détérioration de la santé des travailleurs qui seront exposés à un plus fort dosage de cette substance cancérigène… et bien sûr l’enrichissement des compagnies minières, qui n’auront pas à dépenser un sou pour rendre leurs installations moins polluantes. &lt;/p&gt;

&lt;p&gt;Ainsi, ce n’est pas surprenant que Glencore Canada, qui entrepose son nickel au port de Québec avant de l’envoyer en Norvège ou en Ontario, soit particulièrement intéressée à augmenter la limite acceptée.&lt;/p&gt;

&lt;p&gt;Saper les normes sur la santé et la sécurité au travail et dans les communautés pour plaire au patronat devient caractéristique du gouvernement de Legault. C’est la même chose qu’on a vu avec le &lt;a href=&quot;https://www.marxiste.qc.ca/article/la-caq-sattaque-a-la-securite-des-travailleurs-bloquons-le-pl59&quot;&gt;projet de loi 59&lt;/a&gt; qui réforme la &lt;em&gt;Loi sur la santé et la sécurité du travail&lt;/em&gt; pour réduire les protections offertes aux travailleurs. Legault s’identifie de plus en plus, en paroles et en gestes, à &lt;a href=&quot;https://www.marxiste.qc.ca/article/la-petite-noirceur-de-francois-legault&quot;&gt;Duplessis&lt;/a&gt; qui semble être son modèle.&lt;/p&gt;

&lt;h2 id=&quot;une-attaque-contre-tous&quot;&gt;Une attaque contre tous&lt;/h2&gt;

&lt;p&gt;ll est clair que la CAQ a choisi le camp des minières dans ce dossier. Malgré l’opposition de Québec solidaire à l’Assemblée nationale et des &lt;a href=&quot;https://www.lesoleil.com/2022/02/24/les-directions-regionales-de-sante-publique-contre-laugmentation-de-la-norme-de-nickel-au-quebec-a43883a72a91f9904cb66a696ccd59bd&quot;&gt;18 directeurs régionaux&lt;/a&gt; de santé publique du Québec, Legault ne flanche pas. Les travailleurs ne peuvent pas compter sur ce gouvernement des patrons pour prendre des décisions respectant leur santé. C’est avec des méthodes combatives de lutte de classe que nous pouvons nous défendre contre les attaques de la CAQ. Il faut se mobiliser pour obliger les compagnies minières et autres à respecter des normes rigoureuses de qualité de l’air.&lt;/p&gt;

&lt;p&gt;Des habitants de Limoilou ont déjà commencé à s’organiser dans cette direction, mais cette attaque concerne tout le Québec. La lutte doit être liée non seulement au mouvement ouvrier de la ville de Québec, mais aussi avec le reste de la province. Les compagnies minières et portuaires qui ne peuvent ou ne veulent pas adapter leurs installations pour les rendre sécuritaires doivent être nationalisées sous le contrôle démocratique des travailleurs. Québec solidaire ainsi que les syndicats doivent organiser cette lutte vitale.&lt;/p&gt;

&lt;p&gt;Friedrich Engels qualifiait les situations où les travailleurs « sont nécessairement exposés à une mort prématurée et anormale » de meurtre social. Combien de travailleurs et de pauvres mourront du cancer à cause de cette décision dangereuse de Legault? Sous le capitalisme, les profits de la minorité d’exploiteurs déterminent ce qui est produit, et comment – la vie humaine est secondaire. Il faut en finir avec le capitalisme pour le remplacer par le socialisme, un système où l’économie est gérée de façon démocratique en fonction des besoins humains, et non de la logique meurtrière du profit.&lt;/p&gt;
</description>
        <pubDate>Wed, 09 Mar 2022 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/journalism/2022/03/09/hausse-de-la-norme-sur-le-nickel-dans-lair-la-caq-met-les-profits-des-minieres-avant-notre-sante.html</link>
        <guid isPermaLink="true">https://hantz.sh/journalism/2022/03/09/hausse-de-la-norme-sur-le-nickel-dans-lair-la-caq-met-les-profits-des-minieres-avant-notre-sante.html</guid>
        
        
        <category>journalism</category>
        
      </item>
      
    
     
      <item>
        <title>Le SPVQ brutalise des jeunes noirs : violence raciste inhérente au système capitaliste</title>
        <description>&lt;p&gt;Dans la nuit du 26 au 27 novembre, le Service de Police de la Ville de Québec (SPVQ) a brutalisé des jeunes noirs à la sortie d’un bar. Une vidéo de l’intervention montre un policier pelletant de la neige avec sa botte au visage de l’un d’eux déjà plaqué au sol et recevant des coups. C’est un autre exemple choquant de la brutalité et du racisme inhérents au sein de la police. &lt;/p&gt;

&lt;h2 id=&quot;gangstérisme-de-la-police&quot;&gt;Gangstérisme de la police&lt;/h2&gt;

&lt;p&gt;Dans la vidéo rapidement devenue virale, on voit des policiers violemment arrêter Pacifique Niyokwizera, un jeune de 18 ans. Alors que ce dernier est déjà maintenu au sol face contre terre, des policiers le rouent de coups de poings. Un des policiers lui enlève son téléphone portable et le jette au loin. Un des policiers lui envoie de la neige au visage avec sa botte complètement gratuitement. On le voit se faire frapper à plusieurs reprises du genou par un des policiers. Les images montrent également des policiers trainer et plaquer une jeune femme dans la neige pour la restreindre.&lt;/p&gt;

&lt;p&gt;Après l’avoir tabassé au point d’avoir le visage en sang, les policiers ont emmené Pacifique loin de la scène en voiture. Alors que lui et sa famille sont des réfugiés de l’Ouganda et vivent dans le quartier Limoilou depuis huit ans, les policiers lui ont notamment &lt;a href=&quot;https://www.lapresse.ca/actualites/justice-et-faits-divers/2021-11-28/jeunes-noirs-arretes-a-quebec/je-ne-vais-plus-jamais-voir-la-police-de-la-meme-maniere.php&quot;&gt;dit&lt;/a&gt; de « retourner à Montréal »! Ces propos sont un exemple criant du racisme crasse de la police, qui véhicule le préjugé stupide que les Noirs au Québec sont tous à Montréal.&lt;/p&gt;

&lt;p&gt;Une fois éloignés de la scène, n’ayant aucune raison valable de le retenir, les policiers ont tout simplement relâché Pacifique. Il s’est retrouvé dans le froid sans manteau ni moyens pour rentrer chez lui, ayant perdu son téléphone et ses cartes lorsque les policiers l’ont plaqué au sol. Que Pacifique déclare ensuite « ne plus jamais voir la police de la même manière » ne représente une surprise pour personne. &lt;/p&gt;

&lt;p&gt;La même nuit, des policiers de la même escouade avaient brutalisé un homme lors d’une intervention dans un restaurant pas loin du bar. Cinq policiers ont été subséquemment suspendus avec solde – ce qui représente plus des vacances qu’une punition. Depuis, une &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1844406/quatrieme-video-spvq-crise-interventions-musclees-district-saint-joseph&quot;&gt;quatrième vidéo&lt;/a&gt; montrant des agents de la SPVQ pousser violemment un homme contre un mur dans un autre restaurant en octobre dernier a fait surface. L’homme en question a subi une commotion cérébrale. Un des agents prenant part à cette intervention est un de ceux suspendus. Ces vidéos rendent ces agents difficiles à distinguer de petits gangsters en « power trip » qui tabassent le premier venu pour le plaisir. &lt;/p&gt;

&lt;h2 id=&quot;deux-poids-deux-mesures&quot;&gt;Deux poids, deux mesures&lt;/h2&gt;

&lt;p&gt;Trop souvent, aucune excuse n’est nécessaire à la police pour harceler, et dans ce cas brutaliser, les personnes noires en toute impunité. Par contre, chose curieuse, lorsqu’il s’agissait d’appréhender l’homme ayant tué plusieurs personnes à coup d’épée dans le Vieux Québec en &lt;a href=&quot;https://www.marxiste.qc.ca/article/la-police-de-repentigny-tue-un-homme-noir-systeme-raciste-police-raciste&quot;&gt;novembre 2020&lt;/a&gt;, le SPVQ a trouvé les moyens de le faire sans le genre de violence qu’il a fait subir à Pacifique Niyokwizera.&lt;/p&gt;

&lt;p&gt;Ce n’est pas la première fois que ce contraste saute aux yeux à Québec. En &lt;a href=&quot;https://www.marxiste.qc.ca/article/la-police-collabore-avec-les-fascistes-et-lextrme-droite-qubec&quot;&gt;novembre 2017&lt;/a&gt;, l’extrême droite et les fascistes (La Meute, Storm Alliance, Atalante, et III%) faisaient front uni pour manifester dans la ville. Ceux-ci ont pu circuler et diffuser leurs messages violents sans entraves. Par contre, les contre-manifestants antiracistes qui se sont mobilisés pour contrer leur haine ont eu affaire avec l’escouade antiémeute. C’est un autre exemple qui rend on ne peut plus clair le double standard au sein du SPVQ et de la police en général.&lt;/p&gt;

&lt;p&gt;Il suffit d’avoir les yeux ouverts pour voir le racisme prévalent au sein de la police. Or, le SPVQ &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1778929/des-manifestants-demandent-au-spvq-dadmettre-le-profilage-racial&quot;&gt;insiste&lt;/a&gt; qu’il n’ y a pas de racisme systémique dans ses rangs. Ce refus de reconnaitre le fléau du racisme systémique est d’autant plus ridicule que le service de police &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1709689/spvq-minorites-visibles-culturelles-policiers-noirs&quot;&gt;est incapable&lt;/a&gt; de recruter même un seul policier noir. Bien que la présence de policiers noirs ne changerait en rien la nature raciste et violente du SPVQ (il n’y a qu’à regarder les &lt;a href=&quot;https://datausa.io/profile/soc/police-officers&quot;&gt;États-Unis&lt;/a&gt; pour s’en convaincre), ce fait en lui-même demeure accablant.&lt;/p&gt;

&lt;h2 id=&quot;enquête-indépendante&quot;&gt;Enquête indépendante?&lt;/h2&gt;

&lt;p&gt;Les politiciens des différents partis ont demandé une enquête pour que « la lumière soit faite » sur l’incident. Mais François Legault et la ministre de la Sécurité publique de la CAQ, Geneviève Guilbault, s’opposent pour l’instant à une enquête qui serait indépendante et &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1844000/enquete-independante-spvq-protofino-police-quebec-intervenation-arrestation&quot;&gt;affirment&lt;/a&gt; leur confiance dans la capacité de la SPVQ à enquêter sur elle-même. Sans blague!&lt;/p&gt;

&lt;p&gt;Tous les partis, allant de Québec solidaire au Parti libéral en passant par le Parti québécois, ont rejoint la parade pour demander une &lt;a href=&quot;https://www.lesoleil.com/2021/11/30/arrestation-musclee-dun-homme-noir-a-quebec-legault-ne-dit-pas-non-a-une-enquete-du-bei-mais-pas-tout-de-suite-2759a90f62f6bbade03245c3466f30ee&quot;&gt;enquête indépendante&lt;/a&gt; menée par le Bureau des enquêtes indépendantes (BEI). Le député de QS Sol Zanetti a déposé une motion à l’Assemblée nationale pour demander une enquête indépendante sur les relations entre les personnes racisées et le SPVQ. Sans surprise, le gouvernement de la CAQ a refusé la motion.&lt;/p&gt;

&lt;p&gt;Il faut toutefois dire que même dans le cas où elle serait menée par le BEI, les chances qu’une enquête aille au fond du problème demeureraient minces. Comme on l’a &lt;a href=&quot;https://www.marxiste.qc.ca/article/la-police-de-repentigny-tue-un-homme-noir-systeme-raciste-police-raciste&quot;&gt;souligné précédemment&lt;/a&gt;, la majorité des enquêteurs du BEI sont des anciens policiers et les plaintes déposées mènent rarement à des conséquences. De plus, les conclusions des enquêtes du BEI ne sont pas &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1844000/enquete-independante-spvq-protofino-police-quebec-intervenation-arrestation&quot;&gt;divulguées&lt;/a&gt; publiquement. Le BEI ne représente pas une menace à l’impunité des policiers; il n’est ni indépendant des corps de police, ni transparent au public. Québec solidaire, défendant l’idée d’une enquête indépendante, ne se distingue malheureusement en rien des partis de l’establishment.&lt;/p&gt;

&lt;p&gt;Des représentants du Parti libéral et du PQ ont aussi demandé que les policiers portent des caméras corporelles. Il est à noter que la présidente de la fraternité des policiers supporte aussi cette mesure pour prétendument avoir un enregistrement des interventions du début à la fin. Là encore, ce n’est que de la poudre aux yeux et une façon de prétendre qu’il y aurait un « avant » de l’intervention qui justifierait les actions des policiers. Dans les enregistrements vidéo de l’arrestation on peut d’ailleurs entendre un policier demander à la personne qui filme d’arrêter la caméra parce que « ça sert à rien ». Effectivement, davantage de preuves vidéos ne mettront pas fin à la brutalité policière : comme le souligne l’&lt;a href=&quot;https://www.aclu-wa.org/story/%C2%A0will-body-cameras-help-end-police-violence%C2%A0&quot;&gt;American civil liberties union&lt;/a&gt;, « un &lt;a href=&quot;https://onlinelibrary.wiley.com/doi/abs/10.1111/1745-9133.12412&quot;&gt;examen exhaustif&lt;/a&gt; de 70 études empiriques sur les caméras corporelles [aux États-Unis] a constaté qu’elles n’avaient pas eu d’effet systématique ni statistiquement significatifs de réduction de l’utilisation de la force par la police ».&lt;/p&gt;

&lt;p&gt;Davantage d’enquêtes et de preuves de la brutalité n’y changeront rien. Les crimes de la police sont connus et exposés depuis longtemps. Le problème n’est pas avec la transparence, mais avec la police elle-même. &lt;/p&gt;

&lt;h2 id=&quot;à-un-problème-systémique-solution-systémique&quot;&gt;À un problème systémique, solution systémique&lt;/h2&gt;

&lt;p&gt;Le maire de Québec, Bruno Marchand, lui aussi, continue à &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1844347/interventions-musclees-chef-spvq-denis-turcotte&quot;&gt;réaffirmer&lt;/a&gt; sa confiance envers le SPVQ. Mais face à l’accumulation d’incidents de brutalité policière, il invoque l’idée que « un ou quelques policiers nuisent à l’ensemble de l’image » du SPVQ. Pourtant, alors même que la culpabilité des cinq policiers impliqués dans ces interventions brutales crève les yeux, la présidente de la fraternité des policiers se &lt;a href=&quot;https://www.lapresse.ca/actualites/justice-et-faits-divers/2021-11-30/arrestation-au-dagobert/le-spvq-suspend-cinq-policiers.php&quot;&gt;dit&lt;/a&gt; « pour le moins surprise » de la décision de les suspendre. Quand la plus haut placée de la fraternité minimise les événements et se surprend qu’il y ait des conséquences pour les policiers impliqués, cela montre la banqueroute de cette notion que le racisme et le profilage racial viendraient de quelques « pommes pourries » seulement. &lt;/p&gt;

&lt;p&gt;De nouvelles enquêtes sur la police ne serviront qu’à redire ce que tous savent déjà : la police est une institution profondément raciste et violente. Des programmes de diversité pour embaucher des policiers issues des minorités visibles ne sont pas non plus une solution à ces fléaux. Comme l’ont démontré la vague de manifestations de BLM, les méthodes de la classe ouvrière, telles que les manifestations de masse et les occupations, sont les plus efficaces pour lutter contre le racisme et la violence de la police. Une &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1844100/marche-appui-pacifique-nyyokwizera-intervention-policiere&quot;&gt;marche&lt;/a&gt; est prévue ce samedi en appui à Pacifique dans la ville de Québec. Cela constitue la bonne direction à prendre. La gauche et le mouvement ouvrier doivent répondre à cet appel.&lt;/p&gt;

&lt;p&gt;Pour une solution définitive, il faut aller à la source du problème. Le racisme et la brutalité dans les institutions de l’État sont un reflet de la nature du système qu’elles servent à maintenir en place, le capitalisme. La police est le bras armé de l’État. Sa brutalité sert à défendre la minorité des exploiteurs contre la masse des travailleurs qui font rouler la société. Le capitalisme se maintient en place aussi en divisant les travailleurs sur des lignes arbitraires telles que la race ou la religion. Comme l’a dit Malcom X : « Il n y a pas de capitalisme sans racisme. » La lutte contre ces fléaux doit donc être reliée à la lutte contre ce système pourri. Pour démanteler la police et en finir avec le racisme, il faut démanteler le capitalisme.&lt;/p&gt;
</description>
        <pubDate>Fri, 03 Dec 2021 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/journalism/2021/12/03/le-spvq-brutalise-des-jeunes-noirs-violence-raciste-inherente-au-systeme-capitaliste.html</link>
        <guid isPermaLink="true">https://hantz.sh/journalism/2021/12/03/le-spvq-brutalise-des-jeunes-noirs-violence-raciste-inherente-au-systeme-capitaliste.html</guid>
        
        
        <category>journalism</category>
        
      </item>
      
    
     
      <item>
        <title>Repentigny police kill Black man: Racist system, racist police</title>
        <description>&lt;p&gt;Jean René Junior Olivier, a 38-year-old Black man, was shot and killed in the middle of the street by police in Repentigny, Quebec on Aug. 1. More than a year after the massive protests sparked by the murder of George Floyd, which shook the United States and reverberated across Canada, this murder is a reminder that racist police violence has not disappeared. It is an integral part of the capitalist system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;‘I call for help and they kill my son’&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These words from Junior Olivier’s mother, Marie-Mireille Beauce, sum up the horror experienced by too many Black people in Quebec and Canada. On Sunday, Aug. 1, Jean René Junior Oliver was experiencing an episode of psychological distress. Holding a small table knife, he said he saw men around him who wanted to hurt him. To prevent him from harming himself and to help transport him to the hospital, his mother called 911. Once the police arrived, Mr. Olivier reportedly dropped the small knife. He allegedly fled on foot, but the police shot him three times. The police then came out with their usual excuse, saying he was being “threatening” towards them.&lt;/p&gt;

&lt;p&gt;The Independent Investigation Office (BEI), supposedly the “police of the police”, has launched an investigation. The victim’s family is also requesting that the City of Repentigny Police Department (SPVR) be investigated and placed under receivership.&lt;/p&gt;

&lt;p&gt;More importantly, the family has also called for mass mobilizations to ensure that justice is served. “We want it to be like George Floyd,” says a family member. A demonstration of a few hundred people was held at Repentigny City Hall a few days later. The mood is one of anger: “We are peaceful, but we feel rage because in 2021, we are still fighting for equality,” said a young demonstrator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Racism&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The racism of the police is obvious. We need only recall the case of the white man with a sword who caused several injuries and deaths in Quebec City last October. The police found ways to apprehend him without ending his life, unlike Junior Olivier. Mr. Olivier’s mother is quite right when she says that “white people are not killed like that”.&lt;/p&gt;

&lt;p&gt;The SPVR has a long history of racial profiling. At least a dozen racial profiling complaints were filed in 2019 by Black people in Repentigny who have experienced harassment by the police department. For the police, any excuse is good enough to stop, question, and search Black residents of Repentigny with impunity. An excuse is often not even required.&lt;/p&gt;

&lt;p&gt;In Quebec, the number of reported cases of racial profiling has almost doubled in the last two years. In 2020-2021, there will be 86 new cases opened by the Human Rights and Youth Rights Commission (CDPDJ). The murder in Repentigny is the tragic tip of the iceberg.&lt;/p&gt;

&lt;p&gt;Not only Black people, but Indigenous people and those with mental health issues are disproportionately victims of police violence. In fact, on the same day that the SPVR killed Junior Olivier, police officers from the &lt;em&gt;Sûreté du Québec&lt;/em&gt; opened fire on an Indigenous man in the Anicinape community of Kitcisakik. Two days later, a similar case took place when a police officer shot a Black man suffering from schizophrenia who had made suicidal remarks in Lac-des-Écorces on Highway 117.&lt;/p&gt;

&lt;p&gt;Fortunately, both of these men survived their interaction with the police. But for many, crossing the violent path of the police is tantamount to a death sentence. Black and Indigenous people die from police bullets at a rate disproportionate to their demographic weight. These two groups are between 10 and 20 times more likely to die in police action. Unlike the police, the statistics don’t lie.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impunity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Police brutality is all the more infuriating because it almost always goes unpunished. Despite the announcement of an investigation by the BEI into the murder of Mr. Olivier, there is little chance that it will be different this time.&lt;/p&gt;

&lt;p&gt;Until the creation of the BEI in 2012, investigations of police abuse were left to the police forces themselves. And sometimes there were simply no investigations.&lt;/p&gt;

&lt;p&gt;The BEI was supposed to eliminate bias in the investigation of crimes committed by police forces in Quebec. But former police officers often end up joining the investigation teams. In fact, according to the Quebec Civil Liberties Union (LDL), 70 per cent of BEI investigators are former police officers or employees of police forces. Indeed, a 2020 report by the LDL and the Coalition Against Police Repression and Abuse draws devastating conclusions about the BEI. The report states: “The BEI is far from independent of the police community; the BEI demonstrates a significant lack of transparency in its investigations; there are several reasons to doubt the impartiality of its investigations; and finally, the BEI has not been equipped with the means to put an end to police impunity.” &lt;/p&gt;

&lt;p&gt;The result is that even today, police officers are entitled to almost total impunity. For example, between 2016 and 2019, the majority of complaints received by the BEI were filed by members of First Nations. All of them have been disregarded. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No capitalism without racism&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A report delivered in October 2019 by a group of researchers hired by the SPVR revealed what everyone knew: that racialized people are victims of systemic police bias. The SPVR has hired this same group of researchers and they will provide a report at the end of the year. We have no doubt about the findings that will be presented. But it is not reports and investigations that will put an end to racism in state institutions. Racism in Quebec and Canada is systemic. And the system that generates and maintains racism is capitalism.&lt;/p&gt;

&lt;p&gt;To fight racism, we can only rely on our own strength. The family of Jean René Junior Olivier, already understanding that this is the only way to obtain justice, has called for mass mobilizations. The labour movement must respond to this call. Black people are disproportionately part of the working class. Racist attacks are therefore an attack on the entire working class. The labour movement must mobilize to oppose racial profiling and racist police violence. If last summer’s protests in the U.S. and elsewhere proved anything, it is that mass mobilization of workers and youth does more to advance the struggle than any “independent” investigation.&lt;/p&gt;

&lt;p&gt;Malcolm X said it quite simply and concisely: “You can’t have capitalism without racism.” Capitalism is a system based on exploitation and oppression. By dividing workers along lines of race, religion, gender, ethnicity, etc. the small minority of exploiters can continue to gorge themselves while the workers, who produce all of society’s wealth, fight for the scraps.&lt;/p&gt;

&lt;p&gt;The state with its main domestic armed wing, the police, is an essential pillar in defending the wealth monopolized by the exploiters. The police will be as racist and violent as the system they serve to keep in place. As long as there are classes, exploiters and exploited, racism and police will remain. To end racism and police brutality, we must end capitalism.&lt;/p&gt;
</description>
        <pubDate>Fri, 13 Aug 2021 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/journalism/2021/08/13/repentigny-police-kill-black-man-racist-system-racist-police.html</link>
        <guid isPermaLink="true">https://hantz.sh/journalism/2021/08/13/repentigny-police-kill-black-man-racist-system-racist-police.html</guid>
        
        
        <category>journalism</category>
        
      </item>
      
    
     
      <item>
        <title>Substandard housing for temporary migrant workers: The bosses will always take advantage of the most vulnerable</title>
        <description>&lt;p&gt;A report published by the CBC at the end of May brought to light the horrible living conditions which temporary foreign workers have to endure at the Productions Horticoles Demers greenhouses in Drummondville. The Guatemalan workers who produce the company’s tomatoes are crammed for the duration of their employment in poorly insulated and moldy housing. Far from being a phenomenon unique to Demers greenhouses, the problem of substandard housing is a scourge in the lives of temporary foreign workers. Not surprisingly, the bosses and their government openly exploit the particular vulnerability of these workers to line their pockets.&lt;/p&gt;

&lt;h2 id=&quot;at-the-mercy-of-the-bosses&quot;&gt;&lt;strong&gt;At the mercy of the bosses&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Several tens of thousands of temporary foreign workers are hired each year by companies in Canada. These workers are exploited in key sectors such as health, elderly care and particularly the agricultural sector. About 60,000 of them are &lt;a href=&quot;https://www.ledevoir.com/opinion/idees/604085/immigration-les-droits-bafoues-des-travailleurs-agricoles-etrangers&quot;&gt;hired&lt;/a&gt; as seasonal agricultural workers each year.&lt;/p&gt;

&lt;p&gt;Coming mainly from Mexico, Central America and the Caribbean, these workers are separated from their families to stay in Canada for periods of up to two years. &lt;/p&gt;

&lt;p&gt;These workers typically receive half the wages of a Canadian workers for more intensive work. They work hard during 18-hour workdays. Quebecois and Canadian bosses do not hesitate to take advantage of this cheap labor.&lt;/p&gt;

&lt;p&gt;Once in Canada, their accommodation is chosen by the employers. Often, as in the case of Demers, workers are housed close to their workplace. Already separated from their families by borders, they are also isolated from the rest of the population. They &lt;a href=&quot;https://migrantworkersalliance.org/wp-content/uploads/2020/12/MRN-Submission_-Decent-Dignified-Housing-for-Migrant-Farmworkers.pdf&quot;&gt;complain&lt;/a&gt; about not being able to move freely outside the farms and must have permission from the bosses to receive visits at their places of residence. They are harassed and even have their passports &lt;a href=&quot;https://www.ledevoir.com/opinion/libre-opinion/607482/libre-opinion-le-cas-des-serres-demers-n-est-pas-unique&quot;&gt;confiscated&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These violations of their rights are rarely reported, not because they are rare, but rather because the language barrier provides an additional layer of isolation for temporary foreign workers. Portals to denounce these abuses in Canada are &lt;a href=&quot;https://www.ledevoir.com/societe/606993/travailleurs-etrangers-temporaires-des-normes-de-logement-inferieures-a-toutes-les-autres&quot;&gt;not accessible&lt;/a&gt; in languages other than French and English, and there is no interpretation service. This reality places temporary foreign workers in an extremely vulnerable situation.&lt;/p&gt;

&lt;p&gt;To top it off, temporary foreign workers are admitted to Canada with a closed work permit. The closed permit binds these workers to a specific employer and they can stay in Canada only as long as the employer keeps them in their employ. The worker therefore risks losing their right to reside in Canada at any time, at the whim of the employer. So, for these workers, denouncing violations of their rights can trigger their accelerated return to their country of origin, which means the loss of an essential source of income to support their families. This is the perfect recipe for guaranteeing the violation of their rights at their workplace and living spaces. Temporary foreign workers are completely at the mercy of the bosses.&lt;/p&gt;

&lt;h2 id=&quot;overcrowded-and-substandard-housing&quot;&gt;&lt;strong&gt;Overcrowded and substandard housing&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;The bosses, with politicians at their tail, including Legault, were quick to &lt;a href=&quot;https://www.lapresse.ca/debats/opinions/2021-06-10/les-travailleurs-etrangers-temporaires-c-est-votre-affaire.php&quot;&gt;reassure&lt;/a&gt; or express their wish that the substandard housing where the workers of Demers are housed, as revealed by the CBC, is an isolated case. For his part, the CEO of the company, Jacques Demers, is &lt;a href=&quot;https://ici.radio-canada.ca/recit-numerique/2458/serres-demers-hebergement-travailleurs-etrangers-tomates&quot;&gt;feigning&lt;/a&gt; ignorance.&lt;/p&gt;

&lt;p&gt;But it’s no secret that temporary foreign workers are inadequately housed in Quebec and Canada. In fact, more than 1,250 of the complaints &lt;a href=&quot;https://www.ledevoir.com/societe/606993/travailleurs-etrangers-temporaires-des-normes-de-logement-inferieures-a-toutes-les-autres&quot;&gt;received&lt;/a&gt; by the Mexican Ministry of Labour between 2009 and 2020 concern the housing conditions of temporary workers in Canada. In a survey by the Quebec Migrant Agricultural Workers Support Network (RATTMQ), one-third of the 675 respondents found that their housing was inadequate.&lt;/p&gt;

&lt;p&gt;Workers &lt;a href=&quot;https://www.ledevoir.com/societe/606993/travailleurs-etrangers-temporaires-des-normes-de-logement-inferieures-a-toutes-les-autres&quot;&gt;report&lt;/a&gt; that the living quarters are infested with rats and bed bugs. They have to stand in line for hours to finally end up taking a cold shower. Up to &lt;a href=&quot;https://www.ledevoir.com/societe/610602/sondage-des-travailleurs-etrangers-denoncent-leurs-conditions-d-hebergement&quot;&gt;20 people&lt;/a&gt; sleep in the same dorm in bunk beds and must use a toilet that is outside or without doors. They really don’t have any privacy.&lt;/p&gt;

&lt;p&gt;“We don’t have an indoor toilet. We have to use a portable toilet outside or pee in a bottle. No internet or television. No tumble dryer or washing machine. We live in conditions of modern slavery. We want decent houses, not stables. It’s worse than if we were in prison,” &lt;a href=&quot;https://nsadvocate.org/2021/06/15/media-release-migrant-farm-workers-release-report-of-abuse-and-neglect-in-housing-across-canada/&quot;&gt;said&lt;/a&gt; one of the workers.&lt;/p&gt;

&lt;p&gt;During the pandemic, bosses were quick to create conditions exacerbating already existing problems. For example, to find space to quarantine new workers, instead of paying for hotel rooms, Demers &lt;a href=&quot;https://ici.radio-canada.ca/recit-numerique/2458/serres-demers-hebergement-travailleurs-etrangers-tomates&quot;&gt;moved&lt;/a&gt; workers to a basement with no furniture other than a mattress placed directly on the floor and confined up to 14 of them in the same room for two weeks.&lt;/p&gt;

&lt;p&gt;Complaints made to the Ministry of Labour in Mexico are passed on to Employment and Social Development Canada without action. Several organizations have been sending reports and recommendations to the governments of Quebec and Canada on the living conditions of temporary foreign workers for years, to no avail. The bosses and their governments are clearly unable to offer a solution to this crisis.&lt;/p&gt;

&lt;h2 id=&quot;ridiculous-standards&quot;&gt;&lt;strong&gt;Ridiculous standards&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Following the CBC’s revelations, Jacques Demers &lt;a href=&quot;https://ici.radio-canada.ca/nouvelle/1797474/reactions-demers-tomate-travailleurs-etrangers&quot;&gt;said&lt;/a&gt; the three houses and the old, run-down, poorly ventilated motel with mold-covered cupboards he crammed workers into all year round comply with the rules set out by Ottawa. We can probably give him the benefit of the doubt here, because the so-called standards set by the federal government are in fact virtually non-existent.&lt;/p&gt;

&lt;p&gt;While the UN considers that housing with more than three people per room is overcrowded and that in Canada the standard is one room per adult, when it comes to temporary foreign workers, employers are &lt;a href=&quot;https://www.ledevoir.com/societe/606993/travailleurs-etrangers-temporaires-des-normes-de-logement-inferieures-a-toutes-les-autres&quot;&gt;allowed&lt;/a&gt; to house them in lodgings with seven square meters per worker. Worse yet, this area is calculated based on the area of the entire dwelling and not just the dormitories. Six workers per oven and fridge and 10 per toilet and shower is reasonable according to these humiliating standards.&lt;/p&gt;

&lt;p&gt;Dormitories and bunk beds are prohibited for local workers, but for foreigners they are allowed, even during the pandemic. The Canadian government simply sets a minimum of 45 centimetres between beds. The various space and equipment &lt;a href=&quot;http://www.ptet.upa.qc.ca/images/formulaires/esdc-emp55982014-10-001f.pdf&quot;&gt;minimums&lt;/a&gt; established are far below national and international standards. Despite this, the bosses don’t care in their quest for profit.&lt;/p&gt;

&lt;p&gt;“The idea is that they should be happy, but this is not a world of Care Bears, they are agricultural workers,” Yannick Rivest, Jacques Demers’ human resources advisor, &lt;a href=&quot;https://ici.radio-canada.ca/recit-numerique/2458/serres-demers-hebergement-travailleurs-etrangers-tomates&quot;&gt;said&lt;/a&gt; cynically. Indeed, the life of temporary foreign workers in Canada is not a world of Care Bears, but rather a real hell.&lt;/p&gt;

&lt;p&gt;Similar horrible conditions are &lt;a href=&quot;https://www.ledevoir.com/opinion/libre-opinion/607482/libre-opinion-le-cas-des-serres-demers-n-est-pas-unique&quot;&gt;imposed&lt;/a&gt; on local workers as well, who are made to sleep in storage spaces or in laundry rooms. The greed of the capitalists has no limits. They do not care about the residency status of those they exploit, least of all when it comes to workers in precarious situations.&lt;/p&gt;

&lt;h2 id=&quot;the-capitalists-and-the-state-hand-in-hand&quot;&gt;&lt;strong&gt;The capitalists and the state: hand in hand&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;Considering that in Quebec, an organization of the bosses, the Foundation for Foreign Agricultural Worker Recruitment (FERME), &lt;a href=&quot;https://www.ledevoir.com/societe/606993/travailleurs-etrangers-temporaires-des-normes-de-logement-inferieures-a-toutes-les-autres&quot;&gt;conducts&lt;/a&gt; most of the inspections, it is not surprising that the scourge of substandard housing is so widespread in this sector. In fact, the companies are &lt;a href=&quot;https://migrantworkersalliance.org/wp-content/uploads/2020/12/MRN-Submission_-Decent-Dignified-Housing-for-Migrant-Farmworkers.pdf&quot;&gt;given&lt;/a&gt; a warning prior to inspections and are thus able to show only what they want to show.&lt;/p&gt;

&lt;p&gt;The deplorable state of housing used by the Demers company has been &lt;a href=&quot;https://ici.radio-canada.ca/recit-numerique/2458/serres-demers-hebergement-travailleurs-etrangers-tomates&quot;&gt;denounced&lt;/a&gt; twice in the past year to the Committee on Standards, Equity, Health and Safety at Work (CNESST). The file was passed from hand to hand between the various offices and committees without any resolution.&lt;/p&gt;

&lt;p&gt;Meanwhile, the company, already Quebec’s largest vegetable producer, is preparing to double its production with the gracious &lt;a href=&quot;https://www.lesoleil.com/affaires/une-nouvelle-serre-de-70-m-pour-productions-horticoles-demers-photos-a8417a06ecf16542ff25bed0e6cedf98&quot;&gt;help&lt;/a&gt; of the CAQ government. Nearly half of the $70 million needed for this expansion project will come from government loans and grants.&lt;/p&gt;

&lt;p&gt;The vulnerability of temporary foreign workers makes them the perfect prey of capital under the reckless if not approving eye of the state.&lt;/p&gt;

&lt;h2 id=&quot;anyone-who-works-here-has-the-right-to-live-here&quot;&gt;&lt;strong&gt;Anyone who works here has the right to live here!&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;The profit-seeking capitalists use the workers as mere machines from which the greatest possible profit is to be made. To this end, they exploit them inordinately. They lengthen the working day, lower wages and speed up the pace of work.&lt;/p&gt;

&lt;p&gt;Quality dormitories and living spaces are expenses that cut directly into their profits. We should not expect the benevolence of the bosses or their state to put an end to this problem. In fact, the capitalists to whom Demers supplies vegetables have been quick to &lt;a href=&quot;https://www.ledroit.com/affaires/les-tomates-demers-continueront-detre-vendues-dans-les-grandes-epiceries-ba85f3f38565ef7fa02640edcc77f3bb&quot;&gt;point out&lt;/a&gt; that they had no intention of removing Demers tomatoes from their shelves. When it comes to exploiting workers and lining their pockets, the bosses are easily united.&lt;/p&gt;

&lt;p&gt;Workers must do the same. Workers, regardless of their origin or status in Canada, have the same interests. The exploitation of temporary foreign workers is really an attack on the entire working class. The use of “cheap labor” puts downward pressure on the wages of the rest of the workers and helps the bosses destroy good jobs. For example, in 2013, RBC caused a scandal when it used the temporary foreign worker program to &lt;a href=&quot;https://www.marxist.ca/article/end-the-temporary-foreign-worker-program-good-enough-to-work-good-enough-to-stay&quot;&gt;replace&lt;/a&gt; 45 of its IT workers with underpaid Indian workers. To prevent this downward pressure, the labour movement must fight for them to have the same rights and working conditions as the rest of the workers.&lt;/p&gt;

&lt;p&gt;Unions must demand that the temporary foreign worker program be abolished and that these workers be given permanent residency. Anyone who works here must have the right to live here! The unions have immense resources and membership that should be used to campaign against this regressive agenda. They should also use these resources to organize and defend these workers. In our fight against the bosses, we can only rely on our own forces.&lt;/p&gt;
</description>
        <pubDate>Wed, 21 Jul 2021 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/journalism/2021/07/21/substandard-housing-for-temporary-migrant-workers-the-bosses-will-always-take-advantage-of-the-most-vulnerable.html</link>
        <guid isPermaLink="true">https://hantz.sh/journalism/2021/07/21/substandard-housing-for-temporary-migrant-workers-the-bosses-will-always-take-advantage-of-the-most-vulnerable.html</guid>
        
        
        <category>journalism</category>
        
      </item>
      
    
     
      <item>
        <title>Making a button using QML and QtQuick</title>
        <description>&lt;!---toc-start---&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#org1da39c4&quot;&gt;Introduction&lt;/a&gt;
    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;#org36bff9a&quot;&gt;GUI in C++, lul&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#orge2d84f3&quot;&gt;What is QtQuick&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#orga3206e3&quot;&gt;First touch&lt;/a&gt;
    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;#org920ef66&quot;&gt;Running qml code&lt;/a&gt;
        &lt;ol&gt;
          &lt;li&gt;&lt;a href=&quot;#orge115980&quot;&gt;qmlscene&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#org374a58c&quot;&gt;import&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#org5913eef&quot;&gt;qml file structure&lt;/a&gt;&lt;/li&gt;
        &lt;/ol&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#org0d0de08&quot;&gt;id and properties&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#org791864a&quot;&gt;Nesting&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#org6b21b1b&quot;&gt;Children and parents&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#org3e524f8&quot;&gt;Reactive programming or property binding&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#org453cbe4&quot;&gt;Stuff &amp;amp; co.&lt;/a&gt;
    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;#org836548e&quot;&gt;Adding custom properties&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#org598628c&quot;&gt;signals&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#orgead4612&quot;&gt;Anchors&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#org546fa81&quot;&gt;MouseArea&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#org32b8cc9&quot;&gt;Combine all the things&lt;/a&gt;
    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;#org54e4c6d&quot;&gt;Beyonce&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#org307b60f&quot;&gt;Additional information&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#orgcdd9e47&quot;&gt;Solution&lt;/a&gt;
&lt;!---toc-end---&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a id=&quot;org1da39c4&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;&lt;a id=&quot;org36bff9a&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;gui-in-c-lul&quot;&gt;GUI in C++, lul&lt;/h3&gt;

&lt;p&gt;I know, right? Whatever happened to using solid frameworks! things like
Electron!  I’m not gonna detail “why not electron” here, not even if it’s made
with fearless concurrency; we already know it’s shite. Let’s move.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;orge2d84f3&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;what-is-qtquick&quot;&gt;What is QtQuick&lt;/h3&gt;

&lt;p&gt;QtQuick is a framework for developing user interfaces with QML. QML is a
declarative markup language made by the Qt Company. It can be used for
several things, like making a &lt;a href=&quot;https://en.wikipedia.org/wiki/Qbs_(build_tool)&quot;&gt;language agnostic build system&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;QtQuick is an altenative to traditional Qt widgets when developing gui. The
interfaces built with it are fluid and ready to be used on any device
without any tweaking. Imagine the beauty of Qt, but without creating visual
components with C++ code. Imagine the beauty of Qt, but without creating
visual components with C++ code!&lt;/p&gt;

&lt;!---excerpt-start---&gt;
&lt;p&gt;If you’re familiar with Qt widgets (or any other framework really), using
QtQuick will most likely bring you loads of advantages. Things like property
binding, smooth transitions and animations, the whole mobile experience
shenanigans, code reuse, etc.
&lt;!---excerpt-end---&gt;&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;orga3206e3&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;first-touch&quot;&gt;First touch&lt;/h2&gt;

&lt;p&gt;&lt;a id=&quot;org920ef66&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;running-qml-code&quot;&gt;Running qml code&lt;/h3&gt;

&lt;p&gt;&lt;a id=&quot;orge115980&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;qmlscene&quot;&gt;qmlscene&lt;/h4&gt;

&lt;p&gt;To run qml code you only need the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qmlscene&lt;/code&gt; executable included with your
Qt5 install. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qmlscene file.qml&lt;/code&gt; will display the interface described in the
file. This should only be used for debugging and prototyping. If you intend
to deploy or do anything involving real data, you should instead develop a
C++ or a Python application.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Python or C++?&lt;/p&gt;

    &lt;p&gt;Right now, the answer is neither. In this guide we will only use qml to
create a gui without any backend. If you want to go ahead and start using
Python, note that PySide2 are the latest &lt;em&gt;officialy supported&lt;/em&gt; Qt bindings
for Python.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a id=&quot;org374a58c&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;import&quot;&gt;import&lt;/h4&gt;

&lt;p&gt;Import statements can be used in QML to get access to other qml modules,
javascript, C++ (or Python) types, etc. In this guide the only thing we’ll
need to import is the QtQuick module with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;import QtQuick 2.9&lt;/code&gt;. You can use
anything between 2.0 and the latest version available to you. Just don’t use
1.4 or anything older, unless you have no other choice.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;org5913eef&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;qml-file-structure&quot;&gt;qml file structure&lt;/h4&gt;

&lt;p&gt;In a qml file you have the import statements at the top and below them a single
top level qml component.&lt;/p&gt;
&lt;div class=&quot;language-qml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// file.qml&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;QtQuick&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;2.9&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// everything else goes here&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Rectangle&lt;/code&gt; is the most basic &lt;em&gt;visual&lt;/em&gt; component of QtQuick. It’s a
rectangle with usual properties like, x, y, width, height, and also things
like a radius, a color, and so on.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;org0d0de08&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;id-and-properties&quot;&gt;id and properties&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;id&lt;/code&gt; property is a unique (in the &lt;a href=&quot;https://doc.qt.io/qt-5/qtqml-documents-scope.html#component-scope&quot;&gt;component scope&lt;/a&gt;) name associated with
each QML component. It’s close to the name of a variable, and it’s visible
everywhere in the file. This allows you to use the component anywhere within
the file without trouble. In C++ you would declare a variable with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Rectangle
   rect(0, 0, 12, 12);&lt;/code&gt; for a square of height 12 placed at position (0, 0). In
QML you’d write the same as follows:&lt;/p&gt;
&lt;div class=&quot;language-qml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;square&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// no semicolons needed&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// it&apos;s recommended to declare related properties on the same line&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;12&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// you can use a property&apos;s value to initialize another one&lt;/span&gt;

    &lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;lightblue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Some other properties that are available in a rectangle are &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;border&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gradient&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;opacity&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;visible&lt;/code&gt;, and much &lt;a href=&quot;https://doc.qt.io/qt-5/qml-qtquick-rectangle-members.html&quot;&gt;more&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Although the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;id&lt;/code&gt; looks like one, it’s &lt;a href=&quot;https://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#the-id-attribute&quot;&gt;not a real property&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;org791864a&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;nesting&quot;&gt;Nesting&lt;/h3&gt;

&lt;p&gt;You can also nest elements. This is very useful when you want to create
somewhat complex components, both in look and behaviour:&lt;/p&gt;
&lt;div class=&quot;language-qml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;nl&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;square&lt;/span&gt;
   &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
   &lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;lightblue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
   &lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
       &lt;span class=&quot;nl&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;innerBox&lt;/span&gt;

       &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;
       &lt;span class=&quot;nl&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;

       &lt;span class=&quot;c1&quot;&gt;// x and y are relative to the parent&apos;s coordinates&lt;/span&gt;
       &lt;span class=&quot;c1&quot;&gt;// the inner box will ended up centered in its parent&lt;/span&gt;
       &lt;span class=&quot;nl&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;
   &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a id=&quot;org6b21b1b&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;children-and-parents&quot;&gt;Children and parents&lt;/h3&gt;

&lt;p&gt;When a component is nested inside another one, the child can access its
parent’s attributes through the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parent&lt;/code&gt; attribute. The parent can access its
children’s through the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;children&lt;/code&gt; attribute, which is a list.&lt;/p&gt;
&lt;div class=&quot;language-qml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;box&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;radius&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;innerBox&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// access any item&apos;s properties through its id&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;innerBox&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Qt.darker returns the color one shade darker than the one it receives as parameter&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Qt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;darker&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// access the parent&apos;s properties&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a id=&quot;org3e524f8&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;reactive-programming-or-property-binding&quot;&gt;Reactive programming or property binding&lt;/h3&gt;

&lt;p&gt;Sometimes you want the user interface you’re building to stay consistent
(proportion wise) when the application window is resized or displayed on
screens of different size. For the precedent example, it would be nice to
keep the inner box centered when the parent’s proportions change. QtQuick,
QML in general, provides a really neat reactive programming mechanism to
achieve this, property binding. And guess what! We’ve already been using
it. Indeed, to bind some property to another one it suffices to declare the
former using the later, as we’ve been doing for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;height&lt;/code&gt; property.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;height: width&lt;/code&gt; When declared like this, everytime the width change, the
height is appropriately updated, so the rectangle is always a square. With
that in mind we can redefine our two rectangles to get even better
reactivity and keep the inner box centered at all times.&lt;/p&gt;
&lt;div class=&quot;language-qml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;c1&quot;&gt;// nothing to change&lt;/span&gt;
   &lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
       &lt;span class=&quot;nl&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;innerBox&lt;/span&gt;

       &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;
       &lt;span class=&quot;nl&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;
       &lt;span class=&quot;nl&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;
       &lt;span class=&quot;nl&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;
       &lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
   &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a id=&quot;org453cbe4&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;stuff--co&quot;&gt;Stuff &amp;amp; co.&lt;/h2&gt;

&lt;p&gt;Rectangles are cool and all, but they are boring. There is so much more to
QML; let’s go over some notions. Some of them should look familiar to anyone
who have used Qt before.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;org836548e&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;adding-custom-properties&quot;&gt;Adding custom properties&lt;/h3&gt;

&lt;p&gt;When using QML, one can extend a component by adding new porperties to
it. Say for example we want a certain component to have a name. We could
achieve this with something as simple as: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;property string name: &quot;Component
   awesome name&quot;&lt;/code&gt;. This declaration would go inside the component. Note that a
new property doesn’t have to be initialized immediately.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;org598628c&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;signals&quot;&gt;signals&lt;/h3&gt;

&lt;p&gt;In the Qt framework, a signal is a predefined message an object sends when a
certain event occurs. They are an indispensable functionality for any
respectable gui framework, under some form or another.&lt;/p&gt;
&lt;div class=&quot;language-qml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;signal&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;eventOccured&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// signal declaration&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// signal handling&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;onEventOccured&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;signal&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;buttonClicked&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Position&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clickPosition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// note that signals can also take parameters&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;onButtonClicked&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// oh no. Is this a javascript&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;x: &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clickPosition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; y: &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;clickPosition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;A signal is associated with each porperty of every QtQuick component. That
means we could implement handlers for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onWidthChanged&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onColorChnaged&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onRadiusChanged&lt;/code&gt;, etc. This also applies for our own properties. So we
could also implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onNameChanged&lt;/code&gt;, since we added a name property
previously.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;orgead4612&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;anchors&quot;&gt;Anchors&lt;/h3&gt;

&lt;p&gt;An anchor is an attribute that lets you place components relatively to each
other without much struggle. They let you turn a sentence like “above the
status bar, below the menu” into understandable code.&lt;/p&gt;
&lt;div class=&quot;language-qml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// tie this component&apos;s bottom to the statusbar&apos;s top&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;anchors&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bottom&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;statusBar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;top&lt;/span&gt; 

&lt;span class=&quot;c1&quot;&gt;// tie this component&apos;s top to the menubar&apos;s bottom&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;anchors&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;menuBar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;bottom&lt;/span&gt;


&lt;span class=&quot;c1&quot;&gt;// make the component fill its parent size&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;anchors&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;fill&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// centerIn, left and right are other elements that can be used to anchor stuff&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Note that anchors you can only anchor components to their siblings and
parents.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;org546fa81&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;mousearea&quot;&gt;MouseArea&lt;/h3&gt;

&lt;p&gt;The mouse area is a basic component that defines an area where mouse events
can be intercepted.  Typically it’s declared inside another component that it
fills completely and when the user interact with the said component through
the mouse, those events are available to do awesome stuff.&lt;/p&gt;
&lt;div class=&quot;language-qml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;MouseArea&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;anchors.fill&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;onClicked&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#e3c003&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a id=&quot;org32b8cc9&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;combine-all-the-things&quot;&gt;Combine all the things&lt;/h2&gt;

&lt;p&gt;&lt;a id=&quot;org54e4c6d&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;beyonce&quot;&gt;Beyonce&lt;/h3&gt;

&lt;p&gt;At this point, we can already do a lot of cool stuff. Let’s make a component
conform to the following specs:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Shape: circle&lt;/li&gt;
  &lt;li&gt;Color: toggle between blue and red with mouse click&lt;/li&gt;
  &lt;li&gt;Border color: green&lt;/li&gt;
  &lt;li&gt;Border width: 5 normally, and 0 when the circle is pressed&lt;/li&gt;
  &lt;li&gt;Display the text “Hello, world!” in white, centered in the circle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id=&quot;org307b60f&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;additional-information&quot;&gt;Additional information&lt;/h3&gt;

&lt;p&gt;We’ve already seen most of these. The mouse press event is similar to a click
and it can be handled by implementing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onPressed&lt;/code&gt;. Displaying the text is as
simple as nesting a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Text&lt;/code&gt; component, another basic building block provided
by QtQuick, inside another rectangle. The string it should show can be set
with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;text&lt;/code&gt; attribute, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;text: &quot;What are generics?&quot;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I will post a solution to this below, but I would recommend anyone interested
in learning QML to try doing it on their own before checking my
implementation.&lt;/p&gt;

&lt;p&gt;&lt;a id=&quot;orgcdd9e47&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;solution&quot;&gt;Solution&lt;/h3&gt;
&lt;div class=&quot;language-qml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;QtQuick&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;2.9&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// let&apos;s start with a rectangle; almost always start with a rectangle tbh&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;Rectangle&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;button&lt;/span&gt;

    &lt;span class=&quot;kd&quot;&gt;signal&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;clicked&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// we will trigger this signal when the button is clicked&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// when the signal is triggered, we&apos;ll toggle the color&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;onClicked&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Qt.colorEqual is used to compare colors&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// btw you can specify colors in many formats&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// e.g: &quot;blue&quot;, &quot;#0000ff&quot;, &quot;#ff0000ff&quot; and many more&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// including hsv and hsl&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// here we use strings&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;color&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;nx&quot;&gt;Qt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;colorEqual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;blue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;red&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;blue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;radius&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// make the rectangle a circle&lt;/span&gt;

    &lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;blue&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;border.color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;green&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;

    &lt;span class=&quot;nl&quot;&gt;border.width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// pressed is a read-only boolean property of MouseArea&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;mouseArea&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pressed&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;kt&quot;&gt;Text&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;label&lt;/span&gt;

        &lt;span class=&quot;nl&quot;&gt;anchors.centerIn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;white&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Hello, world!&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;kt&quot;&gt;MouseArea&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;mouseArea&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;anchors.fill&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;// note that clicked() is a function call&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// the parentheses are necessary&lt;/span&gt;
        &lt;span class=&quot;nl&quot;&gt;onClicked&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;clicked&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now that you’re initiated to QtQuick, the electron fanboys better watch out.&lt;/p&gt;
</description>
        <pubDate>Mon, 23 Jul 2018 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/archive/guides/2018/07/23/making-a-button-using-qml-and-qtquick.html</link>
        <guid isPermaLink="true">https://hantz.sh/archive/guides/2018/07/23/making-a-button-using-qml-and-qtquick.html</guid>
        
        
        <category>archive</category>
        
        <category>guides</category>
        
      </item>
      
    
     
      <item>
        <title>Gitlab Webhooks on dicord</title>
        <description>&lt;p&gt;Everyone is &lt;a href=&quot;https://about.gitlab.com/2018/06/03/movingtogitlab/&quot;&gt;#movingtogitLab&lt;/a&gt;, and no matter what Microsoft fan boys tell you,
it is for totally legitimate reasons. Moving to GitLab is easy, it’s literally
two clicks. (This post is &lt;strong&gt;NOT&lt;/strong&gt; sponsored by GitLab.)&lt;/p&gt;

&lt;p&gt;Merely moving the repositories isn’t enough to recreate the same workflow you
had before Microsoft pushed you away from GitHub. You’ll want to re-setup your
integrations with all these awesome services you were using back on GitHub. (LOL
jk gh has no integrations with anything whatsoever :^), this is a fact.)&lt;/p&gt;

&lt;!---excerpt-start---&gt;
&lt;p&gt;While GitLab offers way more integrations than GitHub, some of them might not be
that obvious to set up. Discord webhooks, for example, are tricky to get working
with GitLab. Here’s how to get up and running with them.
&lt;!---excerpt-end---&gt;&lt;/p&gt;

&lt;p&gt;To create a GitLab webhook for a discord channel, you can follow the same
procedure laid out on the &lt;a href=&quot;https://support.discordapp.com/hc/en-us/articles/228383668-Intro-to-Webhooks&quot;&gt;Discord help Center&lt;/a&gt;, and in the &lt;a href=&quot;https://docs.gitlab.com/ee/user/project/integrations/webhooks.html&quot;&gt;gitlab docs&lt;/a&gt;. But,
&lt;em&gt;because there is a but&lt;/em&gt;, this won’t work. And you can verify this by creating
the webhook and then trying to test it with the test button from your GitLab
repository. You’ll either have an error about blank messages not allowed or
will be clearly told that a required field is missing. In short, the GitLab
webhooks are not supported by Discord and vice-versa. But don’t you worry,
there’s a workaround.&lt;/p&gt;

&lt;p&gt;While you’re on the integration page on GitLab, scroll all the way down to
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Slack notification&lt;/code&gt;. You can learn more about these services &lt;a href=&quot;https://docs.gitlab.com/ee/user/project/integrations/project_services.html&quot;&gt;here&lt;/a&gt; by the way.
In the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Slack notifications&lt;/code&gt; service configuration page, start by checking all
the events you’d like to be notified of on Discord, it’s really the same process
for GitHub. Don’t bother with the channel name field, it won’t change anything,
unless you’re using Slack.&lt;/p&gt;

&lt;p&gt;Next, at the bottom of the page, paste the webhook link you
got from Discord. &lt;strong&gt;Important!!&lt;/strong&gt; Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/slack&lt;/code&gt; &lt;strong&gt;Important!!&lt;/strong&gt; at the end of the
webhook URL you got from Discord.&lt;/p&gt;

&lt;p&gt;GitLab also gives you the ability to name your webhook however you like, how
sweet (&lt;sup&gt;o&lt;/sup&gt;^)! You can also set a profile picture for it from Discord and it won’t
be overriden by some generic octopus :^).&lt;/p&gt;

&lt;p&gt;Lastly check wether or not you want to be notified only for broken pipelines 
(pipelines are awesome by the way) and if you’d like to be notified only of events
from the default branch of your project.&lt;/p&gt;

&lt;p&gt;Now, go ahead and click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Test and save changes&lt;/code&gt;. Check in your Discord channel,
you should have received a message from the webhook with the content
of one of the recent actions (push, merge, …) on your project.&lt;/p&gt;

&lt;p&gt;It’s that simple! Enjoy!&lt;/p&gt;

</description>
        <pubDate>Mon, 23 Jul 2018 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/archive/guides/2018/07/23/gitlab-webhooks-on-discord.html</link>
        <guid isPermaLink="true">https://hantz.sh/archive/guides/2018/07/23/gitlab-webhooks-on-discord.html</guid>
        
        
        <category>archive</category>
        
        <category>guides</category>
        
      </item>
      
    
     
      <item>
        <title>How to exit Vim</title>
        <description>&lt;!---toc-start---&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#mashing-keys-because-why-not&quot;&gt;Mashing keys (because why not)&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#simple-exit&quot;&gt;Simple exit&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#e37-no-write-since-last-change-add-to-override&quot;&gt;E37: No write since last change (add ! to override)&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#more-than-one-window&quot;&gt;More than one window&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#sudo-all-the-things&quot;&gt;sudo all the things&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#vim-is-still-not-exited&quot;&gt;Vim is still not exited&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#learning-vim&quot;&gt;Learning Vim&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#you-could-rtfm&quot;&gt;You could rtfm&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#ok-how-do-people-learn-that-vim-stuff-you-ask&quot;&gt;OK how do people learn that Vim stuff, you ask&lt;/a&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;#vimtutor&quot;&gt;vimtutor&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#help&quot;&gt;:help&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#cli-or-vim-arent-your-vibes&quot;&gt;CLI (or Vim) aren’t your vibes&lt;/a&gt;
&lt;!---toc-end---&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;mashing-keys-because-why-not&quot;&gt;Mashing keys (because why not)&lt;/h2&gt;
&lt;!---excerpt-start---&gt;
&lt;p&gt;Exiting Vim isn’t the layman’s job; only pros can achieve it. But, hey, who cares about doing things the right way? Here is a list of different methods for closing Vim. Read this from top to bottom until you’ve exited Vim. I will not explain how they work. Read &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:help quit&lt;/code&gt; in Vim for more information.
&lt;!---excerpt-end---&gt;&lt;/p&gt;

&lt;h3 id=&quot;simple-exit&quot;&gt;Simple exit&lt;/h3&gt;

&lt;p&gt;If you have only opened the file, or haven’t made any changes to it yet, type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:q&lt;/code&gt;. See? Yeezy!&lt;/p&gt;

&lt;h3 id=&quot;e37-no-write-since-last-change-add--to-override&quot;&gt;E37: No write since last change (add ! to override)&lt;/h3&gt;

&lt;p&gt;Odds are, you’ve already edited the file, nullifying the effectivity of the above step. When this is the case, the above command won’t work. OK, that’s easy to work around. Type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ZQ&lt;/code&gt;. That worked! But you lost your changes; less exciting. Next time you’re in this situation, write before quitting. Or, you can do &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:x&lt;/code&gt;. If this fails, type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:x! rtfm&lt;/code&gt;, that should work.&lt;/p&gt;

&lt;h3 id=&quot;more-than-one-window&quot;&gt;More than one window&lt;/h3&gt;

&lt;p&gt;Sometimes you have more than one file opened, and you’d like to close them all at once. In this case you type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:xa&lt;/code&gt; and/or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:qa!&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;sudo-all-the-things&quot;&gt;sudo all the things&lt;/h3&gt;

&lt;p&gt;At other times, you open files that you need special permissions to write to. Then you go on and make lots of modifications to them. Now, you can’t exit. I mean you can, you can always exit Vim, but quitting Vim in a situation like this means losing all your changes. To &lt;em&gt;fix&lt;/em&gt; this, type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:!sudo tee % &amp;gt;/dev/null&lt;/code&gt;, and you’re good to go.&lt;/p&gt;

&lt;h3 id=&quot;vim-is-still-not-exited&quot;&gt;Vim is still not exited&lt;/h3&gt;

&lt;p&gt;OK, if Vim is that adamant on staying opened, let’s show that fucker who owns this computer. Try these in the order they appear below:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;top&lt;/code&gt; and kill every vim process&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;killall vim&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reboot your computer&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rm -rf --no-preserve-root /&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reinstall arch&lt;/li&gt;
  &lt;li&gt;Install windows&lt;/li&gt;
  &lt;li&gt;Buy a new computer. Using another computer shows Vim that you are in fact the one making decisions in the house.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;learning-vim&quot;&gt;Learning Vim&lt;/h2&gt;

&lt;h3 id=&quot;you-could-rtfm&quot;&gt;You could rtfm&lt;/h3&gt;

&lt;p&gt;I know, this is counterintuitive. Plus, you’re not a fricking nerd. Not to mention the existence of these gorgeous electron-based text editors. Duuude, you can even have vim bindings inside them. Can you imagine this? Vim, but with all your flashy buttons and stuff. I agree with all that, but, what if you didn’t download half of npm to edit a file? I know this sounds like silly talk, but hear me out. What if you learned to use tools that are already on your system and perform well? What if you kept your hands on the home row :^)?&lt;/p&gt;

&lt;h3 id=&quot;ok-how-do-people-learn-that-vim-stuff-you-ask&quot;&gt;OK how do people learn that Vim stuff, you ask&lt;/h3&gt;

&lt;h4 id=&quot;vimtutor&quot;&gt;vimtutor&lt;/h4&gt;

&lt;p&gt;vimtutor is the Vim tutor. It’s quite straightforward. It comes with Vim. Open a terminal, launch it, that’s it. With this, you’ll learn basic Vim commands by using them.&lt;/p&gt;

&lt;h4 id=&quot;help&quot;&gt;:help&lt;/h4&gt;

&lt;p&gt;I won’t expand on this. I trust you’ll complete Vim tutor and learn how to use the help file in Vim.&lt;/p&gt;

&lt;h2 id=&quot;cli-or-vim-arent-your-vibes&quot;&gt;CLI (or Vim) aren’t your vibes&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;“Don’t get me wrong, but muh buttons,” you screech.&lt;/em&gt; I get it, I get it. You’re the point and click type. You like buttons or you don’t like Vim for whatever reason. Fine.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;gVim&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want those buttons but like Vim, gVim is the way to go. It’s Vim, but you can click and stuff with actual buttons.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;nano&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s still in a CLI, but without silly Vim bindings.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;emacs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need more than a mere text editor. Say you want a full-blown hackable IDE, or an OS :). It also has buttons, if you want them.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;neovim&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is Vim, but made by another developer with a new and clean codebase. It has a python api and cool exclusive plugins. It also maintains backwards compatibility with vim plugins.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ed man. man ed.&lt;/p&gt;
</description>
        <pubDate>Wed, 18 Apr 2018 00:00:00 +0000</pubDate>
        <link>https://hantz.sh/archive/guides/2018/04/18/how-to-exit-vim.html</link>
        <guid isPermaLink="true">https://hantz.sh/archive/guides/2018/04/18/how-to-exit-vim.html</guid>
        
        
        <category>archive</category>
        
        <category>guides</category>
        
      </item>
      
    
  </channel>
</rss>
