<?xml version="1.0" encoding="utf-8"?><feedxmlns="http://www.w3.org/2005/Atom"><generatoruri="https://jekyllrb.com/"version="4.1.1">Jekyll</generator><linkhref="http://localhost:4000/feed.xml"rel="self"type="application/atom+xml"/><linkhref="http://localhost:4000/"rel="alternate"type="text/html"/><updated>2021-03-12T11:05:41-07:00</updated><id>http://localhost:4000/feed.xml</id><entry><titletype="html">Lichess Accessibility</title><linkhref="http://localhost:4000/2021/01/31/lichess/"rel="alternate"type="text/html"title="Lichess Accessibility"/><published>2021-01-31T00:00:00-07:00</published><updated>2021-01-31T00:00:00-07:00</updated><id>http://localhost:4000/2021/01/31/lichess</id><contenttype="html"xml:base="http://localhost:4000/2021/01/31/lichess/"><p>I wanted to play chess with somebody who used a screen reader, without requiring a screen reader myself;
<p>Accessibility mode is far from perfect on lichess.org.
That said, the idea to separate the sites into different modes was a good call.
It stops the inevitable “this would work well for screen readers but cause visual issues” shenanigans,
or, vice-verse “this looks great but it might be weird with a screen reader”.
This way all the things which affect the visual interface are in one place,
and all things which affect the non-visual user interface (NVUI) are written in another.</p>
<p>In my quest to play chess with visual and non-visual players with both having optimal experiences, I tried Lichess with my friend from <a href="https://melly.tech/">melly.tech</a>.
She pointed out that the method to interface with the board previously was rather poor.
This is because it required an “enter” at the end of each command and the commands tended to read out a row or column of a chessboard not just an individual square.</p>
<p>For example, to list all pieces (or lack thereof) on the e file, I would type the command:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>s e
</code></pre></div></div>
<p>Although this seems good in theory, and it’s great when you need an entire file, there was no way to get only one square.
In addition, imagine typing to navigate around the board:</p>
<p>For the inexperienced player, it seems to be more convenient to bind some keys and have the user bounce to various buttons, which they can push to say “I want to move this piece”.
This is what I was told anyway.
So I want to work making a system so you could use the following basic keys:</p>
<ul>
<li>left/right/up/down arrow: move on the board.</li>
<li>k/q/r/b/n/p: move to next piece represented by its character in chess notation.</li>
<li>shift + k/q/r/b/n/p: move back to the last piece represented by its character in chess notation.</li>
<li>click/enter/space: select piece to move.</li>
<li>m: show where I can move with this piece.</li>
<li>shift+m: show where I can capture with this piece.</li>
<li>1-8: move to rank 1-8; stay on same file.</li>
<li>shift + 1-8: move to file a-h; stay on same rank.</li>
</ul>
<p>This gives a pretty solid basis for playing the game.
One caveat is after you have moved a pawn all the way to the farthest rank, only the destination tile will accept your promotion choice.
Therefore, all the other keys still work on other square, but if you are on the destination square of a promotion q/r/b/n will promote your piece, not jump you to the next/previous one.</p>
<p>This pull request was merged earlier this month:</p>
<h2 id="more-to-come">More To Come</h2>
<p>Next thing I want to do is implement the analysis board.
Right now it is not accessible whatsoever.</p>
<p>If you are a screen reader user or know about accessibility and want to help make Lichess an awesome chess site for sighted and unsighted players alike,
then send me an email at <a href="mailto:tait@tait.tech">tait@tait.tech</a> and I’ll BCC you once I start testing the analysis board.</p>
<p>Happy hacking, y’all!</p></content><author><name></name></author><summarytype="html">I wanted to play chess with somebody who used a screen reader, without requiring a screen reader myself; some sites, like QuintenC’s Playroom have a rather poor visual interface for anyone who would like the play the game visually. Lichess is an free and open-source website for chess players; it bridges this gap by having two “modes” on the site: standard mode and accessibility mode.</summary></entry><entry><titletype="html">How to Deploy Lichess’s Lila With Nginx</title><linkhref="http://localhost:4000/2020/12/20/deploy-lichess/"rel="alternate"type="text/html"title="How to Deploy Lichess’s Lila With Nginx"/><published>2020-12-20T00:00:00-07:00</published><updated>2020-12-20T00:00:00-07:00</updated><id>http://localhost:4000/2020/12/20/deploy-lichess</id><contenttype="html"xml:base="http://localhost:4000/2020/12/20/deploy-lichess/"><p>I was getting ready to have a public test of some changes I made to <a href="https://lichess.org">lichess.org</a>’s <a href="https://lichess.org/source">open source chess platform</a>.
In preperation, I got my Let’s Encrypt certificates and nginx configurations setup…
and it wouldn’t work.
Here are some tips for myself and future Lichess developers.</p>
It will extend Lichess’s NVUI (Non-Visual User Interface) to be more accessible to beginner level chess players.
At the time of writing this, Lichess’s NVUI only supports searching pieces by type, rank and file.
It does not support any kind of interactive board.</p>
<p>I wanted to play chess with a friend of mine who uses a screen reader.
Even though Lichess does indeed have a separate rendering of the page for visually impaired users,
I have heard from a few people that it is not the best.</p>
<p>I don’t use a screen reader myself, so I thought having a public latest changes deployed server would work better for testing.
It would certainly work better than getting some of my less computer literate friends to connect to me via VSCode/VPN and view my local repository.</p>
<p>So here is how to deploy it:</p>
<h2 id="setup-a-development-environment">Setup a development environment</h2>
<p>This is described <a href="https://github.com/ornicar/lila/wiki/Lichess-Development-Onboarding">in Lichess’s documentation itself</a>.
I will not elaborate further as it is not necessary.</p>
<p>This is the part that stumps most people.
Getting a local development server usually works alright, but once you want to reverse proxy it for security and professionalism purposes, it get more interesting.</p>
<p>Here is the relevant portion of my nginx configuration for lila:</p>
<p>This is the config for the lila-ws websocket subdomain:</p>
<pre class="file">
server_name ws.chess.tait.tech;
location / {
proxy_pass http://127.0.0.1:9664;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
</pre>
<p>You will need to deploy these on two virtual hosts.</p>
<h2 id="lila">Lila</h2>
<p><a href="https://github.com/ornicar/lila/">Lila</a> is the name for the main chess server, we need to change a few settings. Here is my git diff for the <code class="language-plaintext highlighter-rouge">conf/base.conf</code> file:</p>
<p>This is not a long article, but just some notes for future me and Lila developers.</p></content><author><name></name></author><summarytype="html">I was getting ready to have a public test of some changes I made to lichess.org’s open source chess platform. In preperation, I got my Let’s Encrypt certificates and nginx configurations setup… and it wouldn’t work. Here are some tips for myself and future Lichess developers.</summary></entry><entry><titletype="html">Getting Pacaur Working on a Raspberry Pi 4 with Manjaro ARM or Arch Linux</title><linkhref="http://localhost:4000/2020/12/01/pacaur-rpi/"rel="alternate"type="text/html"title="Getting Pacaur Working on a Raspberry Pi 4 with Manjaro ARM or Arch Linux"/><published>2020-12-01T00:00:00-07:00</published><updated>2020-12-01T00:00:00-07:00</updated><id>http://localhost:4000/2020/12/01/pacaur-rpi</id><contenttype="html"xml:base="http://localhost:4000/2020/12/01/pacaur-rpi/"><p>I recently installed Manjaro ARM (based on Arch Linux ARM) on a Raspberry Pi 4.
I used some standard commands to start to add the <code class="language-plaintext highlighter-rouge">pacaur</code> package so I can easily retrieve <a href="https://wiki.archlinux.org/index.php/Arch_User_Repository">AUR packages</a> without needing to do it manually.
Unfortunately, there is a small problem with compiling this on ARM.</p>
<p>To setup the install for <code class="language-plaintext highlighter-rouge">pacaur</code>, I first needed to download <a href="https://aur.archlinux.org/packages/auracle-git">auracle-git</a> AUR package manually.
I ran into an error when compiling this package.</p>
<p>But first, my setup:</p>
<pre class="terminal">
$ git clone https://aur.archlinux.org/auracle-git
$ cd auracle-git
$ makepkg -sri
</pre>
<p>Around half way through compiling this project, I got this cryptic message telling me there was a “target specific option mismatch”…Whatever that means.
The full error is below, hopefully that helps my chances on the search engines.</p>
<pre class="terminal">
In file included from ../subprojects/abseil-cpp-20200225.2/absl/random/internal/randen_hwaes.cc:225:
/usr/lib/gcc/aarch64-unknown-linux-gnu/9.3.0/include/arm_neon.h: In function 'Vector128 {anonymous}::AesRound(const Vector128&amp;, const Vector128&amp;)':
/usr/lib/gcc/aarch64-unknown-linux-gnu/9.3.0/include/arm_neon.h:12452:1: error: inlining failed in call to always_inline 'uint8x16_t vaesmcq_u8(uint8x16_t)': target specific option mismatch
12452 | vaesmcq_u8 (uint8x16_t data)
</pre>
<p>Luckily, there is a very easy fix for this.
The user redfish <a href="https://aur.archlinux.org/packages/auracle-git#comment-762117">helpfully pointed out</a>
on the <code class="language-plaintext highlighter-rouge">auracle-git</code> package page that you need to add a special make option to your <code class="language-plaintext highlighter-rouge">/etc/make.conf</code> file to make this work.</p>
<p>His solution, as commented is like so:</p>
<blockquote>
<p>If you get this error when building for ARM aarch64:</p>
<p>(insert error message from before)</p>
<p>Then check that in /etc/makepkg.conf CFLAGS and CXXFLAGS have the +crypto suffix in -march flag, like -march=armv8-a+crypto (the base identifier may very depending on your hardware)</p>
</blockquote>
<p>Basically, there is a file on Linux: <code class="language-plaintext highlighter-rouge">/etc/makepkg.conf</code> which tells your computer how to compile <em>all</em> programs on the system.
By default the Manjaro ARM (RPi4) edition has the following relevant lines in <code class="language-plaintext highlighter-rouge">makepkg.conf</code>.</p>
<p>What Mr. redfish is telling us is that we must add ‘+crypto’ to the end of the -march compiler flag so that our compiler will know how to inline that pesky vaesmcq_u8 function.</p>
<p>So in the end, your <code class="language-plaintext highlighter-rouge">makepkg.conf</code>’s relevant lines will look like so:</p>
<p>Build of abseil-cpp package works because it uses CMake which adds the correct -march flag regardless of makepkg.conf, whereas when abseil-cpp is build as a subproject within this package, it uses meson, which does not add the flag and thus fails with the above error.</p>
</blockquote>
<p>In other words, one of the dependencies pulled in with auracle is not compiling without this special compiler flag enabled.</p>
<p>Thanks to redfish for posting this solution to the forums!
Would’ve been quite the rabbit hole for me to figure out how to do that.
In fact, it is very likely I would have never figured that one out.</p>
<p>After this issue is resolved, the installation of <code class="language-plaintext highlighter-rouge">pacaur</code> goes as expected. Nice and easy!
Pacuar will compile on any architecture so it’s smooth sailing from here.</p>
<p>Happy hacking!</p></content><author><name></name></author><summarytype="html">I recently installed Manjaro ARM (based on Arch Linux ARM) on a Raspberry Pi 4. I used some standard commands to start to add the pacaur package so I can easily retrieve AUR packages without needing to do it manually. Unfortunately, there is a small problem with compiling this on ARM.</summary></entry><entry><titletype="html">ZFS NAS Box, Part 2</title><linkhref="http://localhost:4000/2020/11/15/nas2/"rel="alternate"type="text/html"title="ZFS NAS Box, Part 2"/><published>2020-11-15T00:00:00-07:00</published><updated>2020-11-15T00:00:00-07:00</updated><id>http://localhost:4000/2020/11/15/nas2</id><contenttype="html"xml:base="http://localhost:4000/2020/11/15/nas2/"><p>Back in <a href="/2020/04/12/nas1/">part one of my NAS project</a> I discussed how I wanted to set up my hardware.
Today, I set up the NAS (almost).</p>
<p>There were some hiccup along the way, like learning that M.2 slots can disable some of your SATA ports or waiting a month for a host bus adapter to come in from China.</p>
<h2 id="why-did-it-take-so-long">Why Did It Take So Long</h2>
<p>So it turns out I was going to spend a lot more on this project than I originally anticipated.
I ended up getting a server machine instead of a sleek NAS box.
Here are some of the quick specs:</p>
<ul>
<li>Standard ATX case by Thermaltake.</li>
<li>LSI 9211-8i.</li>
<li>The cheapest HDMI graphics card I could find on Kijiji.</li>
<p>I had run a scrub right before this, so there’s some extra detail in that.
This is really fun! I will be doing more home storage projects soon.
Perhaps Raspberry Pi NAS using all 4 USB ports to load SATA drives on it.
Now that would be fun!</p>
<h2 id="so-i-kinda-have-a-nas-now">So I Kinda Have A NAS Now…?</h2>
<p>So right now I can only copy files with <code class="language-plaintext highlighter-rouge">rsync</code>, <code class="language-plaintext highlighter-rouge">scp</code> and moving data via a physical drive.
The one major disadvantage this has is speed.</p>
<p>Due to this machine being connected directly outside my network and pulling DHCP like a normal router would, I need to send my data through the WAN connection to get my files to it.
This is rather unfortunate as my upload speed is capped at 20 megabits per second, despite my upload being in the 300+ range.</p>
<p>Part 3 will involve a LAN card so I can connect both to the DHCP server of my ISP and my local router.
This way my transfer speeds should be in the range of 1 gigabit per second.
This will make my life much easier, at least on the local network.</p>
<p>Do not try to use the M.2 slot on a consumer motherboard where you are also using all the SATA ports.
On my consumer gaming motherboard, the SATA ports next to the M.2 slot became <em>disabled</em> when I attached the M.2 SSD.
I found this out form my motherboard documentation, which I read only after a week of thinking my motherboard itself was defective, and sending it in for repairs that did absolutely nothing.</p>
<p>I like having all this space. I plan on using it up pretty fast, so I’m already looking at how to expand.
Hopefully that gives a decent overview of how I set up my drives.</p>
<p>Happy hacking!</p></content><author><name></name></author><summarytype="html">Back in part one of my NAS project I discussed how I wanted to set up my hardware. Today, I set up the NAS (almost).</summary></entry><entry><titletype="html">Curiosity</title><linkhref="http://localhost:4000/2020/10/26/curiosity/"rel="alternate"type="text/html"title="Curiosity"/><published>2020-10-26T00:00:00-06:00</published><updated>2020-10-26T00:00:00-06:00</updated><id>http://localhost:4000/2020/10/26/curiosity</id><contenttype="html"xml:base="http://localhost:4000/2020/10/26/curiosity/"><p>Curiosity is fundamental to a deep understanding of any subject.
Masters, Ph.Ds, and other fancy name suffixes will never help you
if you don’t have the spirit of curiosity burning inside of you.</p>
<p>I was speaking to someone from a journalism major at my school when the subject of hacking arose.
I expected her to know nothing about it, being a journalism student and all, but surprisingly she had something to say about it:</p>
<blockquote>
<p>“The best hackers are the ones who are curious.”</p>
</blockquote>
<p>That struck a cord with me.
It seems to me she has nailed down the difference between the students who care about grades,
and those who want to learn.
These are not necessarily mutually exclusive, but in my experience they often are due to the way education is structured.</p>
<p>Although it’s nice to have a course where these goals align here and there, anyone who has been to collage or university can tell you that is far from the norm.</p>
<p>On the other hand, I never would have started this site if it wasn’t for that class alone.
So I thank you, Kitty Wong, for getting me started running my own “research blog” (?)</p></content><author><name></name></author><summarytype="html">Curiosity is fundamental to a deep understanding of any subject. Masters, Ph.Ds, and other fancy name suffixes will never help you if you don’t have the spirit of curiosity burning inside of you.</summary></entry><entry><titletype="html">Minesweeper Bomb Generation And Tile Revealing</title><linkhref="http://localhost:4000/2020/09/12/minesweeper/"rel="alternate"type="text/html"title="Minesweeper Bomb Generation And Tile Revealing"/><published>2020-09-12T00:00:00-06:00</published><updated>2020-09-12T00:00:00-06:00</updated><id>http://localhost:4000/2020/09/12/minesweeper</id><contenttype="html"xml:base="http://localhost:4000/2020/09/12/minesweeper/"><p>When I was creating a little Minesweeper game, I got confused at some points.
My bomb generation didn’t look quite right, and I for sure didn’t quite get the whole cascading tile reveal thing.
With a bit of internet research, I found what I was looking for.
I’ll explain it all in one place for my own research purposes.</p>
<p>So that’s that, we can put this in a big ‘ol for loop and generate an arbitrary <em>n</em> number of bombs given a width and height of a Minesweeper board.</p>
<p>I wrote this because in the first place because I was writing my own Minesweeper game.
I hope that this helps you with getting the general idea of a Minesweeper game.
The completed version of this game is available on my <a href="https://lamegames.tait.tech/">lamegames</a> site.
Let me know what you think!</p>
<p>Happy hacking!</p></content><author><name></name></author><summarytype="html">When I was creating a little Minesweeper game, I got confused at some points. My bomb generation didn’t look quite right, and I for sure didn’t quite get the whole cascading tile reveal thing. With a bit of internet research, I found what I was looking for. I’ll explain it all in one place for my own research purposes.</summary></entry><entry><titletype="html">lamegames.tait.tech</title><linkhref="http://localhost:4000/2020/09/09/lamegames/"rel="alternate"type="text/html"title="lamegames.tait.tech"/><published>2020-09-09T00:00:00-06:00</published><updated>2020-09-09T00:00:00-06:00</updated><id>http://localhost:4000/2020/09/09/lamegames</id><contenttype="html"xml:base="http://localhost:4000/2020/09/09/lamegames/"><p>This is an announcement for a new project of mine:
<p>This is something I’m really excited to work on!</p>
<p>Right now, I’ve just got a rock-paper-scissors game.
A chat function, and a few simple card games to come.</p>
<p>Check out the repository on my <a href="https://github.com/TTWNO/lamegames.io">Github</a>.</p></content><author><name></name></author><summarytype="html">This is an announcement for a new project of mine: lamegames.tait.tech.</summary></entry><entry><titletype="html">How to Solve The Django Deployment Puzzle</title><linkhref="http://localhost:4000/2020/08/18/django-deployment/"rel="alternate"type="text/html"title="How to Solve The Django Deployment Puzzle"/><published>2020-08-18T00:00:00-06:00</published><updated>2020-08-18T00:00:00-06:00</updated><id>http://localhost:4000/2020/08/18/django-deployment</id><contenttype="html"xml:base="http://localhost:4000/2020/08/18/django-deployment/"><p>A few days ago I had a Django project I wanted to put on a real server.
This project is still in its infancy, but I thought it would be nice to put it on my resume and show my friends.
Little did I know the headache coming my way.
Here are some tips to help you not make the same mistakes as me.</p>
<p>Because my project used the ASGI (Asynchronous webServer Gateway Interface),
I needed to find a good production ASGI server to handle all the incoming requests.
The best thing I found was <a href="http://www.uvicorn.org/">uvicorn</a>.
It focuses on speed, which is a priority, especially when using the ASGI protocol.</p>
<p>To run uvicorn on the command line for testing purposes, use something like the following:</p>
<pre class="terminal">
$ uvicorn --reload myapp.asgi:application
</pre>
<p>The <code class="language-plaintext highlighter-rouge">--reload</code> option says to reload the server if any of the files get updated.
This is not recommended in production.
Sadly, I thought this meant I would need to do a hard shutdown of the server process every time I wanted to update.
<p>There is another equine-named program called <a href="https://gunicorn.org/">gunicorn</a>
which can hold a number of processes under its control.
An interesting feature of <code class="language-plaintext highlighter-rouge">gunicorn</code> is that it will gracefully switch from an old to a new deployment,
replacing the subprocesses one-by-one and eventually having only the new deployment active on all subprocesses.
The greatest part? Zero down time.
The server keeps any old processes open if there is communication with them,
then shift and new connections to the new deployment.
This was a very cool feature I wanted to take advantage of.</p>
<p>“Now hold on!” you might protest.
“gunicorn is a WSGI server!” … oh you got me there!
Yes, that’s right, <code class="language-plaintext highlighter-rouge">gunicorn</code> is paired with <code class="language-plaintext highlighter-rouge">uvicorn</code> to serve my files.</p>
<p>Love it or hate it, the majority of Linux distributions use the <code class="language-plaintext highlighter-rouge">systemd</code> init system.
I decided it would be very convenient to have a .service file for my Django application to run automatically at boot.
<code class="language-plaintext highlighter-rouge">Systemd</code> allows me to do this with a file like the following one I stored in <code class="language-plaintext highlighter-rouge">/lib/systemd/system/lamegames.service</code>.</p>
<p>NGINX (pronounced engine-X) is a performance web server designed for speed and simplicity.
For the front facing side of the site, I do need a production web server like nginx.
Gunicorn simply doesn’t need all the features that nginx provides, but I do.
To configure my nginx installation, I used the following few directives to:</p>
<ol>
<li>Redirect most traffic towards the gunicorn server.</li>
<li>Redirect statically served files (CSS, JS, images) to the directory specified in the STATIC_ROOT variable of my <code class="language-plaintext highlighter-rouge">settings.py</code> file.</li>
<li>Use TLS to enable https://</li>
</ol>
<p>Serving the static files from nginx as opposed to the <code class="language-plaintext highlighter-rouge">gunicorn</code> server is necessary.
Gunicorn and other production A/WSGI web server will not set the proper MIME type over TLS.
This will cause your browser to not load the Javascript/CSS.</p>
<p>This is the important part of my nginx config.</p>
# these two lines ensure that WebSocket, and HTTP2 connection are forwarded correctly
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect off;
proxy_buffering off;
# this forwards all traffic to the local server on port 8000
proxy_pass http://localhost:8000;
}
# This forwards all static requests to Django's STATIC_ROOT set in settings.py; it is generated using the collectstatic command.
location /static {
autoindex on;
alias /home/lame/lamegames.io/static_generated;
}
}
</pre>
<h3 id="setup">Setup</h3>
<p>After all that, I was able to do the following:</p>
<pre class="terminal">
# systemctl enable lamegames
</pre>
<p>This enabled my <code class="language-plaintext highlighter-rouge">gunicorn</code> server to run once the server started.
NGINX is that way be default.</p>
<p>And tada! You now have a working Django project on a production server!</p>
<h4 id="notes">Notes</h4>
<ul>
<li>If using ws:// websockets, change them to wss:// for secure web sockets.</li>
<li>Make sure to use channels.routing.get_default_application() instead of django.get_asgi_application() if your’re wanting to use channels/redis WebSockets.</li>
</ul></content><author><name></name></author><summarytype="html">A few days ago I had a Django project I wanted to put on a real server. This project is still in its infancy, but I thought it would be nice to put it on my resume and show my friends. Little did I know the headache coming my way. Here are some tips to help you not make the same mistakes as me.</summary></entry><entry><titletype="html">BSD Journey, Part 1</title><linkhref="http://localhost:4000/2020/08/15/openbsd1/"rel="alternate"type="text/html"title="BSD Journey, Part 1"/><published>2020-08-15T00:00:00-06:00</published><updated>2020-08-15T00:00:00-06:00</updated><id>http://localhost:4000/2020/08/15/openbsd1</id><contenttype="html"xml:base="http://localhost:4000/2020/08/15/openbsd1/"><p>As Linux becomes controlled by corporate sponsors and becomes more full of proprietary blobs, drivers, and even closed-source software like Steam,
One may wonder if there are other options out there.
For me, somebody that is intensely interested in security, there is one option: OpenBSD.</p>
<p>Now, my interest in OpenBSD has been going on for a long time.
I started poking around for Linux alternatives way back a few years ago when Linus Torvalds decided to leave after he got in trouble for some
<p>Happy hacking!</p></content><author><name></name></author><summarytype="html">As Linux becomes controlled by corporate sponsors and becomes more full of proprietary blobs, drivers, and even closed-source software like Steam, One may wonder if there are other options out there. For me, somebody that is intensely interested in security, there is one option: OpenBSD.</summary></entry><entry><titletype="html">Know How Your Representative Votes In Parliament</title><linkhref="http://localhost:4000/2020/07/30/canadian-parliament/"rel="alternate"type="text/html"title="Know How Your Representative Votes In Parliament"/><published>2020-07-30T00:00:00-06:00</published><updated>2020-07-30T00:00:00-06:00</updated><id>http://localhost:4000/2020/07/30/canadian-parliament</id><contenttype="html"xml:base="http://localhost:4000/2020/07/30/canadian-parliament/"><p>As an advocate for openness, I had an idea to make a project out of the government of Canada’s <a href="https://open.canada.ca/en/open-data">Open Data</a>
initiative to take a look at how my local MP voted on various pieces of legislation.
It turns out though that this was not necessary due to how easy it was to find this information on the government’s own website.
In this article, I will explain how you can do the same.</p>
<h3 id="1-find-your-representative">1. Find Your Representative</h3>
<p>The first step in this process is to find who your representative is.
<p>To find your MP’s voting record, do step one, then:
After the <strong>Overview</strong>, and <strong>Seat in The House</strong> sections,
there are three tabs, <strong>Roles</strong>, <strong>Work</strong>, and <strong>Contact</strong>.
Click on work.
At the bottom of that tab is a link which says <strong>Chamber Votes</strong>.
This will open a small window with some recent votes by this politician.
If you want to see all their votes, there is a button at the bottom named <strong>All Votes by This Member</strong>.</p>
<p>Tada! You can now keep your local MP accountable for anything you do or do not support.</p>
<h3 id="3-bill-details">3. Bill Details</h3>
<p>If you want to get into the nitty gritty,
once you open a specific bill, you can actually find out the status of said bill,
or read the actual text by clicking the <strong>View this Bill on LEGISinfo</strong> button.</p>
<p>Both the status of the bill, and a link to a PDF document containing the bilingual text of the bill are visible in the main body of the page.</p>
It was <em>way</em> simpler than I thought it would be.</p>
<p>Thanks, Canada!</p></content><author><name></name></author><summarytype="html">As an advocate for openness, I had an idea to make a project out of the government of Canada’s Open Data initiative to take a look at how my local MP voted on various pieces of legislation. It turns out though that this was not necessary due to how easy it was to find this information on the government’s own website. In this article, I will explain how you can do the same.</summary></entry></feed>