<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>Alireza M. Kamelabad — Research</title><subtitle>Publications, talks and field notes on human–robot interaction, cognitive linguistics and language learning.</subtitle><id>https://ali.mk/research/atom.xml</id><link rel="alternate" type="text/html" href="https://ali.mk/research/" /><link rel="self" type="application/atom+xml" href="https://ali.mk/research/atom.xml" /><updated>2026-07-08T00:00:00.000Z</updated><author><name>Alireza M. Kamelabad</name></author><entry><title>Break Free from Zotero Storage Limits: How to Host Your Own WebDAV Server</title><id>https://ali.mk/posts/2026-07-08-break-free-from-zotero-storage-limits-how-to-host-your-own-webdav-server/</id><link href="https://ali.mk/posts/2026-07-08-break-free-from-zotero-storage-limits-how-to-host-your-own-webdav-server/" /><published>2026-07-08T00:00:00.000Z</published><updated>2026-07-08T00:00:00.000Z</updated><summary>Stop suffering the 300MB of Zotero -- Start storing the PDFs!</summary><category term="zotero" /><category term="reference manager" /><category term="WebDAV" /><category term="storage" /><content type="html"><![CDATA[<p>As a researcher, academic, or just someone who reads a lot of papers, you either already have a reference management software of your choice or you are just suffering (choose it; and choose Zotero!!)! If you already know what a reference manager is, then most likely it is Zotero that you are already using; <strong>an absolute lifesaver</strong>. With the recent release of Zotero 9, the reading and annotating experience has reached a whole new level with a great new UI and UX that I am personally enjoying much. Being able to highlight, take notes directly on PDFs, and seamlessly extract those annotations into your word processor makes it unparalleled in the reference management space. Also, there are many efforts in developing further MCP around zotero and connecting it to the AI assistants of your choice.</p>
<p>But there is one major catch.</p>
<p>As soon as you start aggressively saving webpages, full-text PDFs, and supplementary materials, you’ll hit a wall: <strong>Zotero’s free cloud storage is capped at 300 MB.</strong> That is enough for thousands of paper meta-data but not paper pdfs.</p>
<p>I was in agony for many years selecting and deleting pdfs of older papers (and I do not know why I didn’t do anything about it until now!). But I eventually solved it! and I recommend you to do so too. Especially before piling up your library. If you want your entire library (PDFs, highlights, and notes) synced to the cloud so you can read on your iPad/tablet on the train and then seamlessly switch back to your desktop, you need more space. Zotero offers paid storage plans, which are great and support the project. However, if you have a massive library, those costs can add up.</p>
<p>Fortunately, Zotero gives you another option for syncing your attachment files: <strong>WebDAV</strong>.</p>
<p>In this post, I’ll explain what WebDAV is and give you a comprehensive, step-by-step guide (that I did myself) on how to set up your own secure WebDAV server on an Ubuntu VPS to get practically unlimited storage for your Zotero library.</p>
<h2 id="what-is-webdav">What is WebDAV?</h2>
<p>WebDAV (Web Distributed Authoring and Versioning) is an extension of the standard HTTP protocol. Instead of just letting you <em>view</em> files on a web server, WebDAV allows you to create, edit, move, and upload files remotely.</p>
<p>Think of it like turning a web server into a network drive.</p>
<p>When you use WebDAV with Zotero, a clever division of labor happens:</p>
<ol>
<li><strong>Metadata &#x26; Notes:</strong> Your library data (the citations, tags, and text notes) continues to sync seamlessly via Zotero’s free native sync servers (which do not count toward your file storage quota).</li>
<li><strong>Attachments:</strong> Your heavy files (PDFs, EPUBs, snapshots) are synced directly to your personal WebDAV server.</li>
</ol>
<p><em>Note: If you don’t want to tinker with Linux servers, Zotero supports out-of-the-box integration with several 3rd-party cloud providers that offer WebDAV (like <a href="https://koofr.eu/blog/posts/koofr-with-zotero-via-webdav">Koofr [I use this one]</a> or Nextcloud). You can read more about these alternatives in the <a href="https://www.zotero.org/support/kb/webdav_services" title="null">official Zotero documentation for WebDAV providers</a>.</em></p>
<p>But if you already have a Virtual Private Server (VPS) or love self-hosting, setting up your own WebDAV server is incredibly rewarding. Let’s build it.</p>
<h2 id="the-ultimate-ubuntu-vps-setup-for-zotero-webdav">The Ultimate Ubuntu VPS Setup for Zotero WebDAV</h2>
<p>We’re going to start from a fresh Ubuntu server (as I did). We will secure it, install <a href="https://nginx.org/">Nginx</a> and <a href="http://www.webdav.org/">WebDAV</a>, configure SSL for encryption, and hook it up to Zotero.</p>
<p><strong>Prerequisites:</strong></p>
<ul>
<li>A VPS running Ubuntu (22.04 or later ---it would probably work with older versions too. But I personally just tried it with 26.04).</li>
<li>A domain or subdomain pointed to your server’s IP address (e.g., <code>zotero.yourdomain.com</code>).</li>
</ul>
<h3 id="step-1-secure-your-server">Step 1: Secure Your Server</h3>
<p>Never leave a fresh VPS exposed with default root passwords. Let’s create a new user, set up SSH keys, and disable password logins.</p>
<p>Log into your server as <code>root</code> and create a new user (I’ll use <code>ali</code>, but you can use your name):</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo adduser ali</span></span>
<span class="line"><span>sudo usermod -aG sudo ali</span></span></code></pre>
<p>Switch to your new user to set up your SSH keys:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo su - ali</span></span>
<span class="line"><span>mkdir -p ~/.ssh &#x26;&#x26; chmod 700 ~/.ssh</span></span></code></pre>
<p>Add your local computer’s public SSH key (<code>~/.ssh/id_ed25519.pub</code> or <code>~/.ssh/id_rsa.pub</code>) to the server:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>echo "YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys</span></span>
<span class="line"><span>chmod 600 ~/.ssh/authorized_keys</span></span>
<span class="line"><span>exit</span></span>
<span class="line"><span></span></span></code></pre>
<p>Now, back as <code>root</code>, lock down SSH. We need to disable root login and password authentication:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span># Temporarily fix terminal issues if using a modern terminal emulator like Ghostty</span></span>
<span class="line"><span>TERM=xterm-256color sudo nano /etc/ssh/sshd_config</span></span>
<span class="line"><span></span></span></code></pre>
<p>Find and ensure these lines are set:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>PermitRootLogin no</span></span>
<span class="line"><span>PasswordAuthentication no</span></span>
<span class="line"><span>PubkeyAuthentication yes</span></span></code></pre>
<p><strong>Ubuntu 22.04+ Pro-Tip:</strong> Ubuntu often includes an override file for cloud setups. If you still get prompted for a password after the step above, edit this file too:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>TERM=xterm-256color sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf</span></span></code></pre>
<p>Change <code>PasswordAuthentication yes</code> to <code>no</code>.</p>
<p>Restart SSH and set up the UFW Firewall:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo systemctl restart ssh</span></span>
<span class="line"><span>sudo ufw allow ssh</span></span>
<span class="line"><span>sudo ufw allow 'Nginx Full'</span></span>
<span class="line"><span>sudo ufw enable</span></span></code></pre>
<p>Test your SSH connection in a <em>new</em> terminal window before closing your root session. If you can log in without a password, you’re good to go!</p>
<h3 id="step-2-install-nginx-and-webdav">Step 2: Install Nginx and WebDAV</h3>
<p>Log in as your standard user (<code>ali</code>). We need a web server (Nginx) and the WebDAV extensions:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo apt update &#x26;&#x26; sudo apt install -y nginx nginx-extras</span></span></code></pre>
<p>Next, install Let’s Encrypt Certbot so we can secure our PDFs in transit:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo apt install -y certbot python3-certbot-nginx</span></span></code></pre>
<h3 id="step-3-create-the-zotero-directory">Step 3: Create the Zotero Directory</h3>
<p>Here is a specific quirk about Zotero: when you give it a WebDAV URL, <strong>it explicitly looks for a directory named</strong> <code>zotero</code> <strong>inside that location</strong>.</p>
<p>Let’s create the root directory, and the nested <code>zotero</code> directory it expects:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo mkdir -p /var/www/zotero/zotero</span></span>
<span class="line"><span>sudo chown -R www-data:www-data /var/www/zotero</span></span>
<span class="line"><span>sudo chmod -R 755 /var/www/zotero</span></span></code></pre>
<h3 id="step-4-set-up-authentication">Step 4: Set Up Authentication</h3>
<p>You don’t want anyone on the internet accessing your PDFs. We will secure the server with Basic HTTP Authentication.</p>
<p>Install the required utilities:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo apt install -y apache2-utils</span></span></code></pre>
<p>Generate a password file. Replace <code>zoterouser</code> with whatever username you want to type into your Zotero app (this has nothing to do with your system username):</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo htpasswd -c /etc/nginx/.htpasswd zoterouser</span></span></code></pre>
<p>You will be prompted to create a strong password. Note this down; you’ll need it later.</p>
<h3 id="step-5-configure-nginx">Step 5: Configure Nginx</h3>
<p>Now we tell Nginx how to handle the WebDAV requests. Create a new site configuration:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo nano /etc/nginx/sites-available/zotero</span></span></code></pre>
<p>Paste the following configuration (replace <code>zotero.yourdomain.com</code> with your actual subdomain):</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>server {</span></span>
<span class="line"><span>    listen 80;</span></span>
<span class="line"><span>    server_name zotero.yourdomain.com;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>    root /var/www/zotero;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>    auth_basic "Zotero WebDAV";</span></span>
<span class="line"><span>    auth_basic_user_file /etc/nginx/.htpasswd;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>    client_max_body_size 100M;</span></span>
<span class="line"><span>    autoindex on;</span></span>
<span class="line"><span></span></span>
<span class="line"><span>    location / {</span></span>
<span class="line"><span>        dav_methods PUT DELETE MKCOL COPY MOVE;</span></span>
<span class="line"><span>        dav_ext_methods PROPFIND OPTIONS;</span></span>
<span class="line"><span>        dav_access user:rw group:r all:r;</span></span>
<span class="line"><span>        create_full_put_path on;</span></span>
<span class="line"><span>    }</span></span>
<span class="line"><span>}</span></span></code></pre>
<p><em>Note: Avoid using</em> <code>try_files</code> <em>in this location block. Doing so will block the</em> <code>PUT</code> <em>requests Zotero uses to verify the server, resulting in a 404 error during setup!</em></p>
<p>Enable the site and verify the Nginx syntax:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo ln -s /etc/nginx/sites-available/zotero /etc/nginx/sites-enabled/</span></span>
<span class="line"><span>sudo nginx -t</span></span>
<span class="line"><span>sudo systemctl reload nginx</span></span></code></pre>
<h3 id="step-6-secure-with-ssl-https">Step 6: Secure with SSL (HTTPS)</h3>
<p>Run Certbot to automatically fetch an SSL certificate and update your Nginx configuration to use HTTPS:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>sudo certbot --nginx -d zotero.yourdomain.com</span></span></code></pre>
<p>Follow the prompts. Certbot will automatically alter your Nginx file to route traffic securely over port 443.</p>
<p>To verify WebDAV is actually responding to requests, you can run this curl command from your terminal:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="plaintext"><code><span class="line"><span>curl -u zoterouser -X PROPFIND https://zotero.yourdomain.com/zotero/</span></span></code></pre>
<p>If you enter your password and see a block of XML code in the terminal, congratulations! Your WebDAV server is alive.</p>
<h3 id="step-7-connect-the-zotero-app">Step 7: Connect the Zotero App</h3>
<p>The hard part is over. Now, let’s point Zotero to your new server:</p>
<ol>
<li>Open Zotero on your computer.</li>
<li>Go to <strong>Edit</strong> > <strong>Settings</strong> (or <strong>Zotero</strong> > <strong>Preferences</strong> on Mac) > <strong>Sync</strong>.</li>
<li>Under the <strong>File Syncing</strong> section, check <strong>“Sync attachment files in My Library using WebDAV”</strong>.</li>
<li>Enter your details:</li>
</ol>
<ul>
<li><strong>URL:</strong> <code>https://zotero.yourdomain.com/zotero/</code></li>
<li><strong>Username:</strong> The username you created in step 4 (<code>zoterouser</code>).</li>
<li><strong>Password:</strong> The password you generated in step 4.</li>
</ul>
<ol start="5">
<li>Click <strong>“Verify Server”</strong>.</li>
</ol>
<p>Zotero will reach out to your VPS, create a test file, and read it back. You should see a green checkmark and the message: <strong>“File sync is successfully set up!”</strong></p>
<h3 id="conclusion">Conclusion</h3>
<p>You now have a fully private, fully secure storage backend for your entire research library. Every time you drag a PDF into Zotero, it will quietly upload to your VPS. You can connect your laptop, your desktop, and your iPad to the same WebDAV URL and keep your entire workflow perfectly synchronized without ever worrying about hitting a 300 MB quota again.</p>
<p>Happy researching!</p>]]></content></entry><entry><title>Three Doors: Announcing the New Site</title><id>https://ali.mk/posts/announcing-the-new-site/</id><link href="https://ali.mk/posts/announcing-the-new-site/" /><published>2026-07-07T00:00:00.000Z</published><updated>2026-07-07T00:00:00.000Z</updated><summary>Why ali.mk is now a house with three doors instead of one crowded room.</summary><category term="design" /><category term="meta" /><category term="personal site" /><category term="astro" /><content type="html"><![CDATA[<p>I started the journey of having a personal web footprint with my first website <code>horotat.com</code>. That is right after the time that I passed the course <strong>Web Design</strong> during my bachelor’s. I started from wordpress, the moved to pure <code>HTML</code>, and adding <code>CSS</code> to it later on. I have always wanted an effective, personal, and customized digital presence. But for many years, I was very confused as in, what do I really want from my personal website. Since for now, I am in academia, this was a perfect opportunity for me to establish a real base for presenting myself properly in the scientific society. That is when I discovered <code>Jekyll</code> around 2018. I moved to <code>Jekyll</code> using <em>GitHub Pages</em> to deploy my static, fast website. After exploring much, I endded up with the amazing <a href="https://chirpy.cotes.page/posts/getting-started/">Chirpy</a> theme. It has a great active commmunity around it who are taking it forward to date, and make it even better.</p>
<p>In the meantime, I figured out the north macedonian domain of <code>.mk</code> which was the exact initials of my last name (<strong>M</strong>ahmoudi <strong>K</strong>amelabad) and I noticed that my short and long first names (ali and alireza) are both available for this domain so I quickly grabbed them and I love them very much. I must say, I have never seen a better personal website domain than mine! So I became: <a href="https://ali.mk">ali.mk and alireza.mk</a>.</p>
<p>As I grew and did my career and personality, I felt that I need more than one dimension to present online, each of which have their own audience; yet, the information of each would mostly be noise for the other ones---a recruiter scrolling past political essays to find my CV, a fellow researcher wading through film reviews to find a publication, a friend getting a wall of BibTeX before the actual writing. Everyone got the whole of me, whether they’d asked for it or not. It worked, technically. It never quite felt right. That is where the idea of the three door came from.</p>
<p>The people I needed to talk to are:</p>
<ol>
<li><strong>Professionals Hiring</strong>: who would want to quickly get to know about my skills, passion, and match for their workflow and business.</li>
<li><strong>Academics</strong>: the fellow researchers and scientists who can access my papers, resources, and contributions to science.</li>
<li><strong>Readers and Followers</strong>: a place where I could publish my non-academic writings, whether political, opinion, diary, etc.</li>
</ol>
<p>The new site fixes that by not trying to be one thing. The root page is a <strong>threshold</strong> — you pick a door, and each door opens onto a self-contained room that never cross-surfaces the others’ content:</p>
<ul>
<li><strong><a href="/research/">/research</a></strong> — publications, field notes, the academic CV. For fellow researchers.</li>
<li><strong><a href="/work/">/work</a></strong> — experience, toolbox, craft notes, the availability line. For people hiring.</li>
<li><strong><a href="/life/">/life</a></strong> — essays (politics and opinion included), the shelf of films and shows, the running/hiking log, the parts of me that don’t belong on a CV.</li>
</ul>
<p>Nothing is hidden — everything is still public and indexed — the separation is about <em>surfacing</em>, not secrecy. A recruiter reading Work is simply never pitched an essay about closing my Twitter account; a reader in Life is never handed a CV. The only threads back are the wordmark, which always returns to the threshold, and a quiet footer line: “elsewhere in the house.”</p>
<h3 id="the-design-language">The design language</h3>
<p>Once the three-room idea was settled, the visual language had to do two contradictory things: read as one coherent person, and let each room have its own temperament. The solve was to fix almost everything — type, spacing, the warm paper-and-ink base — and let exactly one thing vary: an accent color per room, used sparingly enough that color still <em>means</em> something (“which room am I in”) instead of just decorating the page.</p>
<p>Type is doing more work than color, actually. Headlines and the wordmark are set in <strong>Instrument Serif</strong>, with the occasional word breaking into italic — <em>Research</em> — a signature move I made myself use sparingly, at most once per view, after an early draft turned it into a tic. Long-form essay text sits in <strong>Newsreader</strong>, sized and leaded for actual reading rather than scanning. Numerals — years in a publication list, in a BibTeX block — get <strong>JetBrains Mono</strong>, and nowhere else; an earlier pass had mono-caps in the navigation and it immediately read as a developer’s terminal rather than someone’s front door, so that idea died fast.</p>
<blockquote>
<p>Color always means “which room am I in,” never decoration.</p>
</blockquote>
<p>Research got a blue that reads scholarly and a little cold on purpose; Work got a green that’s meant to feel dependable; Life got a warm orange-red, on paper that warms half a shade to match. Dark mode isn’t an inversion — it’s a second, separately tuned palette, system-synced by default with a manual override that remembers your choice.</p>
<p>The tokens themselves, for anyone curious enough to check the CSS:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="css"><code><span class="line"><span style="color:#6A737D">/* base — light */</span></span>
<span class="line"><span style="color:#E1E4E8">--paper: </span><span style="color:#FDAEB7;font-style:italic">#F7F2E9;</span><span style="color:#E1E4E8">  --ink: </span><span style="color:#FDAEB7;font-style:italic">#1C1712</span><span style="color:#E1E4E8">;  --ink-2: </span><span style="color:#FDAEB7;font-style:italic">#6C6053</span><span style="color:#E1E4E8">;  --ink-3: </span><span style="color:#FDAEB7;font-style:italic">#A2937F;</span></span>
<span class="line"><span style="color:#6A737D">/* base — dark */</span></span>
<span class="line"><span style="color:#E1E4E8">--paper: </span><span style="color:#FDAEB7;font-style:italic">#141009</span><span style="color:#E1E4E8">;  --ink: </span><span style="color:#FDAEB7;font-style:italic">#F2EADC;</span><span style="color:#E1E4E8">  --ink-2: </span><span style="color:#FDAEB7;font-style:italic">#A99A85;</span><span style="color:#E1E4E8">  --ink-3: </span><span style="color:#FDAEB7;font-style:italic">#6E6252</span><span style="color:#E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A737D">/* rooms      light      dark    */</span></span>
<span class="line"><span style="color:#E1E4E8">--research:  </span><span style="color:#FDAEB7;font-style:italic">#2447C5</span><span style="color:#E1E4E8">;   </span><span style="color:#FDAEB7;font-style:italic">#7B94FF</span><span style="color:#E1E4E8">;</span></span>
<span class="line"><span style="color:#E1E4E8">--work:      </span><span style="color:#FDAEB7;font-style:italic">#166E5A</span><span style="color:#E1E4E8">;   </span><span style="color:#FDAEB7;font-style:italic">#4CC7A4</span><span style="color:#E1E4E8">;</span></span>
<span class="line"><span style="color:#E1E4E8">--life:      </span><span style="color:#FDAEB7;font-style:italic">#D14E24;</span><span style="color:#FDAEB7;font-style:italic">   #FF7847;</span></span></code></pre>
<h3 id="building-it">Building it</h3>
<p>The honest version of this story includes a false start. An earlier attempt at rebuilding the site tried to do the room-separation via subdomains, three fully separate themes, and <a href="https://strapi.io">Strapi</a> — a headless CMS — running in its own Docker container. It was technically impressive and operationally exhausting: every room ended up looking like it came from a different template rather than one house, and writing a single post meant a server had to be up somewhere first. I shelved it. The only thing worth keeping was the thinking around how publication data should be modeled, which survived into this version.</p>
<p>What I actually wanted was smaller than a CMS with more features — it was the ability to write a post from whatever device I had open, without spinning anything up first. That’s what sent me looking past headless CMSes entirely, toward something that would commit straight to Git. What shipped reflects that: a static Astro site, one content pipeline where a post declares which room(s) it belongs to in its front matter, no CSS framework — just custom properties and plain CSS, because the design system is small enough that a framework would be more ceremony than help. Editing happens through <a href="https://pagescms.org">Pages CMS</a>, a lightweight browser editor that commits straight to this repo and triggers a deploy — no admin server to run, no separate database to back up. I’m typing this very announcement into a form field, and in a few minutes it’ll be a live page.</p>
<p><em>Built with:</em></p>
<div style="display:flex; flex-wrap:wrap; gap:28px; justify-content:center; margin:0.6em 0 0.2em;">
  <div style="display:flex; flex-direction:column; align-items:center; gap:6px; width:78px;">
    <svg width="30" height="30" viewBox="0 0 24 24" fill="#BC52EE" aria-hidden="true"><path d="M8.358 20.162c-1.186-1.07-1.532-3.316-1.038-4.944.856 1.026 2.043 1.352 3.272 1.535 1.897.283 3.76.177 5.522-.678.202-.098.388-.229.608-.36.166.473.209.95.151 1.437-.14 1.185-.738 2.1-1.688 2.794-.38.277-.782.525-1.175.787-1.205.804-1.531 1.747-1.078 3.119l.044.148a3.158 3.158 0 0 1-1.407-1.188 3.31 3.31 0 0 1-.544-1.815c-.004-.32-.004-.642-.048-.958-.106-.769-.472-1.113-1.161-1.133-.707-.02-1.267.411-1.415 1.09-.012.053-.028.104-.045.165h.002zm-5.961-4.445s3.24-1.575 6.49-1.575l2.451-7.565c.092-.366.36-.614.662-.614.302 0 .57.248.662.614l2.45 7.565c3.85 0 6.491 1.575 6.491 1.575L16.088.727C15.93.285 15.663 0 15.303 0H8.697c-.36 0-.615.285-.784.727l-5.516 14.99z"></path></svg>
    <span style="font-size:12px; color:var(--ink-3);">Astro</span>
  </div>
  <div style="display:flex; flex-direction:column; align-items:center; gap:6px; width:78px;">
    <svg width="30" height="30" viewBox="0 0 24 24" fill="#3178C6" aria-hidden="true"><path d="M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75c.612 0 1.154.037 1.627.111a6.38 6.38 0 0 1 1.306.34v2.458a3.95 3.95 0 0 0-.643-.361 5.093 5.093 0 0 0-.717-.26 5.453 5.453 0 0 0-1.426-.2c-.3 0-.573.028-.819.086a2.1 2.1 0 0 0-.623.242c-.17.104-.3.229-.393.374a.888.888 0 0 0-.14.49c0 .196.053.373.156.529.104.156.252.304.443.444s.423.276.696.41c.273.135.582.274.926.416.47.197.892.407 1.266.628.374.222.695.473.963.753.268.279.472.598.614.957.142.359.214.776.214 1.253 0 .657-.125 1.21-.373 1.656a3.033 3.033 0 0 1-1.012 1.085 4.38 4.38 0 0 1-1.487.596c-.566.12-1.163.18-1.79.18a9.916 9.916 0 0 1-1.84-.164 5.544 5.544 0 0 1-1.512-.493v-2.63a5.033 5.033 0 0 0 3.237 1.2c.333 0 .624-.03.872-.09.249-.06.456-.144.623-.25.166-.108.29-.234.373-.38a1.023 1.023 0 0 0-.074-1.089 2.12 2.12 0 0 0-.537-.5 5.597 5.597 0 0 0-.807-.444 27.72 27.72 0 0 0-1.007-.436c-.918-.383-1.602-.852-2.053-1.405-.45-.553-.676-1.222-.676-2.005 0-.614.123-1.141.369-1.582.246-.441.58-.804 1.004-1.089a4.494 4.494 0 0 1 1.47-.629 7.536 7.536 0 0 1 1.77-.201zm-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z"></path></svg>
    <span style="font-size:12px; color:var(--ink-3);">TypeScript</span>
  </div>
  <div style="display:flex; flex-direction:column; align-items:center; gap:6px; width:78px;">
    <svg width="30" height="30" viewBox="0 0 24 24" fill="#F38020" aria-hidden="true"><path d="M10.715 14.32H5.442l-.64-1.203L13.673 0l1.397.579-1.752 9.112h5.24l.648 1.192L10.719 24l-1.412-.54ZM4.091 5.448a.5787.5787 0 1 1 0-1.1574.5787.5787 0 0 1 0 1.1574zm1.543 0a.5787.5787 0 1 1 0-1.1574.5787.5787 0 0 1 0 1.1574zm1.544 0a.5787.5787 0 1 1 0-1.1574.5787.5787 0 0 1 0 1.1574zm8.657-2.7h5.424l.772.771v16.975l-.772.772h-7.392l.374-.579h6.779l.432-.432V3.758l-.432-.432h-4.676l-.552 2.85h-.59l.529-2.877.108-.552ZM2.74 21.265l-.772-.772V3.518l.772-.771h7.677l-.386.579H2.98l-.432.432v16.496l.432.432h5.586l-.092.579zm1.157-1.93h3.28l-.116.58h-3.55l-.192-.193v-3.473l.578 1.158zm13.117 0 .579.58H14.7l.385-.58z"></path></svg>
    <span style="font-size:12px; color:var(--ink-3);">Cloudflare Pages</span>
  </div>
  <div style="display:flex; flex-direction:column; align-items:center; gap:6px; width:78px;">
    <svg width="30" height="30" viewBox="0 0 24 24" fill="#2088FF" aria-hidden="true"><path d="M10.984 13.836a.5.5 0 0 1-.353-.146l-.745-.743a.5.5 0 1 1 .706-.708l.392.391 1.181-1.18a.5.5 0 0 1 .708.707l-1.535 1.533a.504.504 0 0 1-.354.146zm9.353-.147l1.534-1.532a.5.5 0 0 0-.707-.707l-1.181 1.18-.392-.391a.5.5 0 1 0-.706.708l.746.743a.497.497 0 0 0 .706-.001zM4.527 7.452l2.557-1.585A1 1 0 0 0 7.09 4.17L4.533 2.56A1 1 0 0 0 3 3.406v3.196a1.001 1.001 0 0 0 1.527.85zm2.03-2.436L4 6.602V3.406l2.557 1.61zM24 12.5c0 1.93-1.57 3.5-3.5 3.5a3.503 3.503 0 0 1-3.46-3h-2.08a3.503 3.503 0 0 1-3.46 3 3.502 3.502 0 0 1-3.46-3h-.558c-.972 0-1.85-.399-2.482-1.042V17c0 1.654 1.346 3 3 3h.04c.244-1.693 1.7-3 3.46-3 1.93 0 3.5 1.57 3.5 3.5S13.43 24 11.5 24a3.502 3.502 0 0 1-3.46-3H8c-2.206 0-4-1.794-4-4V9.899A5.008 5.008 0 0 1 0 5c0-2.757 2.243-5 5-5s5 2.243 5 5a5.005 5.005 0 0 1-4.952 4.998A2.482 2.482 0 0 0 7.482 12h.558c.244-1.693 1.7-3 3.46-3a3.502 3.502 0 0 1 3.46 3h2.08a3.503 3.503 0 0 1 3.46-3c1.93 0 3.5 1.57 3.5 3.5zm-15 8c0 1.378 1.122 2.5 2.5 2.5s2.5-1.122 2.5-2.5-1.122-2.5-2.5-2.5S9 19.122 9 20.5zM5 9c2.206 0 4-1.794 4-4S7.206 1 5 1 1 2.794 1 5s1.794 4 4 4zm9 3.5c0-1.378-1.122-2.5-2.5-2.5S9 11.122 9 12.5s1.122 2.5 2.5 2.5 2.5-1.122 2.5-2.5zm9 0c0-1.378-1.122-2.5-2.5-2.5S18 11.122 18 12.5s1.122 2.5 2.5 2.5 2.5-1.122 2.5-2.5zm-13 8a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm2 0a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm12 0c0 1.93-1.57 3.5-3.5 3.5a3.503 3.503 0 0 1-3.46-3.002c-.007.001-.013.005-.021.005l-.506.017h-.017a.5.5 0 0 1-.016-.999l.506-.017c.018-.002.035.006.052.007A3.503 3.503 0 0 1 20.5 17c1.93 0 3.5 1.57 3.5 3.5zm-1 0c0-1.378-1.122-2.5-2.5-2.5S18 19.122 18 20.5s1.122 2.5 2.5 2.5 2.5-1.122 2.5-2.5z"></path></svg>
    <span style="font-size:12px; color:var(--ink-3);">GitHub Actions</span>
  </div>
  <div style="display:flex; flex-direction:column; align-items:center; gap:6px; width:78px;">
    <svg width="30" height="30" viewBox="0 0 24 24" fill="#111111" aria-hidden="true"><path d="M18 6a6 6 0 10-6 6 6 6 0 015.35 9h1.5A7.5 7.5 0 0012 10.5 4.5 4.5 0 1116.5 6Zm-6-3a3 3 0 000 6 1 1 0 000-6m0 1.5a1.5 1.5 0 010 3 1 1 0 010-3M7.5 15v1.5H9v6H4.5V24h15v-1.5H15v-6h1.5V15Zm3 1.5h3v6h-3zm-6 1.5a7.5 7.5 0 00.7 3h1.5a6 6 0 01-.7-3Z"></path></svg>
    <span style="font-size:12px; color:var(--ink-3);">Simple Icons</span>
  </div>
</div>
<h3 id="under-the-hood">Under the hood</h3>
<p>Content lives in a couple of Astro content collections, each checked against a schema — a post’s <code>rooms</code> array has to contain at least one of <code>research | work | life</code>, dates get coerced automatically, and anything that doesn’t match fails the build rather than showing up broken in someone’s browser. One shared layout renders a post regardless of which room it’s in, which is also why something like an optional cover photo only had to be written once to work everywhere.</p>
<p>Routing follows the room structure directly — no server, no database, just static files generated at build time:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="mermaid"><code><span class="line"><span style="color:#E1E4E8">graph TD</span></span>
<span class="line"><span style="color:#E1E4E8">  classDef research fill:#2447C5,stroke:#2447C5,color:#fff</span></span>
<span class="line"><span style="color:#E1E4E8">  classDef work fill:#166E5A,stroke:#166E5A,color:#fff</span></span>
<span class="line"><span style="color:#E1E4E8">  classDef life fill:#D14E24,stroke:#D14E24,color:#fff</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8">  T["/ — threshold"] --> R["/research"]:::research</span></span>
<span class="line"><span style="color:#E1E4E8">  T --> W["/work"]:::work</span></span>
<span class="line"><span style="color:#E1E4E8">  T --> L["/life"]:::life</span></span>
<span class="line"><span style="color:#E1E4E8">  R --> RP["publications"]:::research</span></span>
<span class="line"><span style="color:#E1E4E8">  R --> RN["notes"]:::research</span></span>
<span class="line"><span style="color:#E1E4E8">  R --> RC["cv"]:::research</span></span>
<span class="line"><span style="color:#E1E4E8">  R --> RCon["contact"]:::research</span></span>
<span class="line"><span style="color:#E1E4E8">  W --> WN["notes"]:::work</span></span>
<span class="line"><span style="color:#E1E4E8">  W --> WC["cv"]:::work</span></span>
<span class="line"><span style="color:#E1E4E8">  W --> WCon["contact"]:::work</span></span>
<span class="line"><span style="color:#E1E4E8">  L --> LE["essays"]:::life</span></span>
<span class="line"><span style="color:#E1E4E8">  L --> LS["shelf"]:::life</span></span>
<span class="line"><span style="color:#E1E4E8">  L --> LA["about"]:::life</span></span></code></pre>
<p><em>Fig. 1 — routing, colored by room: research in blue, work in green, life in orange.</em></p>
<p>The node colors above are the exact room tokens from the block earlier — not a coincidence, the diagram is styled from the same three hex values as the site.</p>
<p>Deployment is the same shape as the CMS itself: everything funnels down to a single <code>git push</code> to the <code>v2</code> branch, whether that push comes from a terminal or from Pages CMS saving a form.</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="mermaid"><code><span class="line"><span style="color:#E1E4E8">graph LR</span></span>
<span class="line"><span style="color:#E1E4E8">  classDef gha stroke:#2088FF,stroke-width:2px</span></span>
<span class="line"><span style="color:#E1E4E8">  classDef cf stroke:#F38020,stroke-width:2px</span></span>
<span class="line"><span style="color:#E1E4E8">  classDef logo stroke:#A2937F,stroke-width:1.5px</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8">  A["Edit in Pages CMS"] --> B["&#x3C;span>&#x3C;img src='/assets/images/icons/github.svg' width='24' height='24'/>&#x3C;/span>"]</span></span>
<span class="line"><span style="color:#E1E4E8">  C["&#x3C;span>&#x3C;img src='/assets/images/icons/git.svg' width='24' height='24'/>&#x3C;/span>"] --> B</span></span>
<span class="line"><span style="color:#E1E4E8">  B --> D["&#x3C;img src='/assets/images/icons/github-actions.svg' width='22' height='22'/>&#x26;nbsp;&#x3C;img src='/assets/images/icons/astro.svg' width='22' height='22'/>"]:::gha</span></span>
<span class="line"><span style="color:#E1E4E8">  D --> E["&#x3C;img src='/assets/images/icons/cloudflare-pages.svg' width='22' height='22'/>&#x26;nbsp;&#x3C;img src='/assets/images/icons/rocket.svg' width='22' height='22'/>"]:::cf</span></span>
<span class="line"><span style="color:#E1E4E8">  E --> F["&#x3C;span>&#x3C;img src='/assets/images/icons/threshold-lines.svg' width='34' height='34'/>&#x3C;/span>"]:::logo</span></span></code></pre>
<p><em>Fig. 2 — an edit becomes a live page: git/GitHub, GitHub Actions running an Astro build, Cloudflare Pages deploying it, landing at ali.mk.</em></p>
<p>Nothing to patch, nothing to back up, no build step I have to remember to run by hand — the whole loop from “edit a field” to “it’s live” takes under a minute.</p>
<p>Zoomed out, the whole system is small enough to draw on one diagram: content and code meet at the <code>v2</code> branch, GitHub Actions turns that into static files, Cloudflare serves them at the edge, and a visitor’s browser reports back a single privacy-respecting pageview.</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="mermaid"><code><span class="line"><span style="color:#E1E4E8">graph TB</span></span>
<span class="line"><span style="color:#E1E4E8">  classDef gha fill:#2088FF,stroke:#2088FF,color:#fff</span></span>
<span class="line"><span style="color:#E1E4E8">  classDef cf fill:#F38020,stroke:#F38020,color:#fff</span></span>
<span class="line"><span style="color:#E1E4E8">  classDef gc fill:#0EA5A0,stroke:#0EA5A0,color:#fff</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8">  subgraph Authoring</span></span>
<span class="line"><span style="color:#E1E4E8">    CMS["Pages CMS&#x3C;br/>(browser form)"]</span></span>
<span class="line"><span style="color:#E1E4E8">    Term["Terminal&#x3C;br/>(git push)"]</span></span>
<span class="line"><span style="color:#E1E4E8">  end</span></span>
<span class="line"><span style="color:#E1E4E8">  CMS -->|commit| Repo["GitHub&#x3C;br/>v2 branch"]</span></span>
<span class="line"><span style="color:#E1E4E8">  Term -->|push| Repo</span></span>
<span class="line"><span style="color:#E1E4E8">  Repo --> CI["GitHub Actions&#x3C;br/>astro build"]:::gha</span></span>
<span class="line"><span style="color:#E1E4E8">  CI -->|static HTML/CSS/JS| CDN["Cloudflare Pages&#x3C;br/>edge network"]:::cf</span></span>
<span class="line"><span style="color:#E1E4E8">  CDN --> Visitor["Visitor's browser"]</span></span>
<span class="line"><span style="color:#E1E4E8">  Visitor -.->|one pageview,&#x3C;br/>no cookies| GC["GoatCounter"]:::gc</span></span></code></pre>
<p><em>Fig. 3 — the whole system in one picture: authoring, build, hosting, and analytics.</em></p>
<h3 id="analytics-briefly">Analytics, briefly</h3>
<p>The pageview count on this site comes from <a href="https://www.goatcounter.com/">GoatCounter</a> — open source, no cookies, no personal data collected, nothing to justify in a cookie banner because there’s nothing to consent to. The only wrinkle is that this site does client-side page transitions (Astro’s view transitions swap content without a full reload), so a plain analytics snippet that only fires <code>onload</code> would count the first page of every visit and miss the rest. The fix was small: disable GoatCounter’s automatic count and fire it manually on <code>astro:page-load</code>, an event Astro dispatches on the initial load <em>and</em> every soft navigation after it — so every room, every essay, every publication page gets counted exactly once, however someone got there.</p>
<h3 id="standing-on-open-source">Standing on open source</h3>
<p>None of this exists without a long list of people who gave their work away for free. This site runs on <a href="https://astro.build">Astro</a> and <a href="https://www.typescriptlang.org/">TypeScript</a>, validates its content with <a href="https://zod.dev">Zod</a>, renders the diagrams above with <a href="https://mermaid.js.org/">Mermaid</a>, highlights its code blocks with Shiki (bundled straight into Astro), draws its brand logos from <a href="https://simpleicons.org">Simple Icons</a>, sets its type with self-hosted <a href="https://fontsource.org">Fontsource</a> packages of Instrument Sans, Instrument Serif, Newsreader, and JetBrains Mono, and gets edited through <a href="https://pagescms.org">Pages CMS</a> — a genuinely lovely piece of software for something I don’t pay a cent for. <a href="https://www.goatcounter.com/">GoatCounter</a> covers analytics, <a href="https://github.com/features/actions">GitHub Actions</a> covers the build, and <a href="https://pages.cloudflare.com/">Cloudflare Pages</a> covers hosting, all on free tiers that exist because someone decided small personal projects deserve good infrastructure too. And further back, this whole habit started with <a href="https://jekyllrb.com/">Jekyll</a> and the <a href="https://chirpy.cotes.page/">Chirpy</a> theme, which is still out there being maintained by people who owe me nothing.</p>
<p>If you maintain any of the above: thank you. Genuinely.</p>
<h3 id="what-its-for">What it’s for</h3>
<p>The point was never to look different for its own sake. It was to stop asking one page to perform three roles simultaneously, and to stop <em>self-censoring by architecture</em> — quietly softening an opinion, or leaving out a film review, because it might sit two scrolls away from someone deciding whether to fund my next project. Now the writing can be as direct as it needs to be in whichever room it belongs to, because the room it belongs to is the only room it’s in.</p>
<p>Come in through whichever door fits why you’re here. Or, if you’re curious, try all three — that’s kind of the point of having them.</p>]]></content></entry><entry><title>My Participation in HRI 2025</title><id>https://ali.mk/posts/hri-2025/</id><link href="https://ali.mk/posts/hri-2025/" /><published>2025-02-27T00:00:00.000Z</published><updated>2025-02-27T00:00:00.000Z</updated><summary>Papers, HRI Pioneers, and a week in Melbourne at the 20th ACM/IEEE International Conference on Human-Robot Interaction.</summary><category term="conference" /><category term="presentation" /><category term="HRI" /><category term="HRI pioneers" /><content type="html"><![CDATA[<h2 id="my-mission-at-hri-2025">My Mission at HRI 2025</h2>
<ul>
<li>Presenting and promoting my research to the HRI community. Growing my network.</li>
<li>Gather ideas about my longitudinal study
<ul>
<li>interesting possible research questions</li>
<li>ideas about the design of the study</li>
<li>potential collaborators</li>
<li>potential extra funding sources</li>
</ul>
</li>
<li>Updating myself with the latest research in the field of Human-Robot Interaction.</li>
</ul>
<h2 id="presenting-and-promoting-my-research">Presenting and Promoting my Research</h2>
<h3 id="paper-presentation-comparing-monolingual-and-bilingual-social-robots-as-conversational-practice-companions-in-language-learning">Paper Presentation: “Comparing Monolingual and Bilingual Social Robots as Conversational Practice Companions in Language Learning”</h3>
<p>Listen to the podcast of this paper:</p>
<iframe src="https://creators.spotify.com/pod/show/alireza844/embed/episodes/Translanguaging-in-RALL-Do-Bilingual-Robots-Enhance-Language-Learning-e2vk39o/a-abqelo6" height="102px" width="400px" frameborder="0" scrolling="no"></iframe>
<h3 id="hri-pioneers-workshop-the-question-is-not-whether-it-is-how">HRI Pioneers Workshop: “The Question Is Not Whether; It Is How!”</h3>
<p>I will present the story about my PhD projects and why I think the question is not wether and rather it is “how” robots will be part of our future.</p>
<p><youtube id="gsEiYnhLIrA"></youtube></p>
<p>Extended Abstract: <strong><a href="https://doi.org/10.1145/3610978.3638377">The Question Is Not Whether; It Is How!</a></strong></p>
<p><strong><a href="/research/publications/">The Question is Not Whether, but How — see the publication page</a></strong></p>
<p>I was initially accepted for Pioneers at HRI 2024, but USA visa officer decided that I am not a pioneer and they are still processing my visa.</p>
<p>Here is my poster for HRI Pioneer 2025:</p>
<div style="position: relative; width: 100%; height: 0; padding-top: 141.3793%;
 padding-bottom: 0; box-shadow: 0 2px 8px 0 rgba(63,69,81,0.16); margin-top: 1.6em; margin-bottom: 0.9em; overflow: hidden;
 border-radius: 8px; will-change: transform;">
  <iframe loading="lazy" style="position: absolute; width: 100%; height: 100%; top: 0; left: 0; border: none; padding: 0;margin: 0;" src="https://www.canva.com/design/DAGgT7RAfSo/ZyOcd3wQT7MC_uumsqNKGQ/view?embed" allowfullscreen allow="fullscreen">
  </iframe>
</div>
<a href="https://www.canva.com/design/DAGgT7RAfSo/ZyOcd3wQT7MC_uumsqNKGQ/view?utm_content=DAGgT7RAfSo&#x26;utm_campaign=designshare&#x26;utm_medium=embeds&#x26;utm_source=link" target="_blank" rel="noopener">HRI Pioneers</a> by Alireza M. Kamelabad]]></content></entry><entry><title>My Participation in IVA 2024</title><id>https://ali.mk/posts/iva-2024/</id><link href="https://ali.mk/posts/iva-2024/" /><published>2024-09-12T00:00:00.000Z</published><updated>2024-09-12T00:00:00.000Z</updated><summary>Paper presentation and Doctoral Consortium at the 24th ACM International Conference on Intelligent Virtual Agents.</summary><category term="conference" /><category term="presentation" /><category term="IVA" /><content type="html"><![CDATA[<h2 id="paper-presentation">Paper Presentation</h2>
<p>I presented our paper <a href="/research/publications/kamelabad2024-conformity-trust/">Conformity and Trust in Multi-Party vs. Individual Human-Robot Interaction</a> at the <strong>Trust</strong> session on Wednesday, September 18th.</p>
<h2 id="doctoral-consortium">Doctoral Consortium</h2>
<p>I presented my Ph.D. studies on <strong>Innovative Language Learning Using AI and Robot Environment</strong> at the Doctoral Consortium on Sunday, September 15th.</p>
<h3 id="interactive-poster">Interactive Poster</h3>
<div style="position: relative; width: 100%; height: 0; padding-top: 141.3793%; margin-top: 1.6em; margin-bottom: 0.9em; overflow: hidden; border-radius: 8px;">
  <iframe loading="lazy" style="position: absolute; width: 100%; height: 100%; top: 0; left: 0; border: none; padding: 0; margin: 0;" src="https://www.canva.com/design/DAGQdrg_vuU/xOwwXHkIUPFG4pM1wMNbhw/view?embed" allowfullscreen allow="fullscreen">
  </iframe>
</div>
<p><a href="https://www.canva.com/design/DAGQdrg_vuU/xOwwXHkIUPFG4pM1wMNbhw/view">Doctoral Consortium — IVA 2024</a> by Alireza M. Kamelabad</p>]]></content></entry><entry><title>Understanding Yoked Control Groups in Experimental Research</title><id>https://ali.mk/posts/understanding-yoked-control-groups/</id><link href="https://ali.mk/posts/understanding-yoked-control-groups/" /><published>2024-08-20T00:00:00.000Z</published><updated>2024-08-20T00:00:00.000Z</updated><summary>Same shocks, same timing, same everything — except which animal can make them stop. The yoked control is one of psychology&apos;s cleverest designs, and one of its most argued-over.</summary><category term="methods" /><category term="experimental design" /><category term="psychology" /><content type="html"><![CDATA[<p>Two dogs sit in identical harnesses and receive identical electric shocks — same intensity, same duration, same onset. The only difference is that one dog has a panel it can press with its nose to end the shock. The other has an identical panel in front of it, but pressing it does nothing; its shocks stop only when its partner, in a different room, presses theirs. The next day, both dogs are moved to a box where any shock can be escaped just by stepping over a low barrier. The first dog learns this in seconds. The second dog, in most trials, never tries.<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></p>
<p>The second dog is a yoked control — literally “yoked,” harnessed to the first dog’s behavior the way a pair of oxen shares a crossbar. It’s one of the more elegant tricks in experimental design, and, it turns out, one of the more contested. Working through why it works, and where it breaks, is a useful lesson in experimental design generally.</p>
<h2 id="what-yoked-actually-buys-you">What “yoked” actually buys you</h2>
<p>A garden-variety control group just goes without the treatment. That’s not good enough here, because the thing being tested — whether an animal has <em>control</em> over an outcome — can’t be separated from the outcome itself by simply withholding it. If you gave the control dog no shocks at all, and it later behaved differently from the shocked dog, you’d have shown that shock does something, which nobody doubted. You wouldn’t know whether it was the shock or the <em>helplessness</em> driving the later passivity.</p>
<p>Yoking solves this by giving the control subject the exact same physical stimulus, on the exact same schedule, as its paired partner — the only thing that differs is whether the subject’s own behavior had any say in it. The full version of this logic is usually run as a three-way (triadic) comparison: an escapable-shock group, a yoked inescapable-shock group, and a no-shock group as a baseline.</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="mermaid"><code><span class="line"><span style="color:#E1E4E8">flowchart TB</span></span>
<span class="line"><span style="color:#E1E4E8">    classDef escapable fill:#166E5A,stroke:#166E5A,color:#fff</span></span>
<span class="line"><span style="color:#E1E4E8">    classDef yoked fill:#D14E24,stroke:#D14E24,color:#fff</span></span>
<span class="line"><span style="color:#E1E4E8">    classDef baseline fill:#5b5b5b,stroke:#5b5b5b,color:#fff</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8">    A["Escapable group&#x3C;br/>presses panel → shock ends"] -->|"shock onset &#x26; offset&#x3C;br/>copied in real time"| B["Yoked group&#x3C;br/>identical shock, no working panel"]</span></span>
<span class="line"><span style="color:#E1E4E8">    C["No-shock group&#x3C;br/>never shocked at all"]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#E1E4E8">    class A escapable</span></span>
<span class="line"><span style="color:#E1E4E8">    class B yoked</span></span>
<span class="line"><span style="color:#E1E4E8">    class C baseline</span></span></code></pre>
<p><em>Fig. 1 — the triadic design: two groups get physically identical shocks and differ only in who controls them; the third gets none, as a baseline.</em></p>
<p>Because the escapable and yoked groups receive physically identical treatment, any difference between them afterward can’t be attributed to the shock itself — only to whether the shock was contingent on the animal’s own behavior. That’s the whole trick.</p>
<h2 id="the-original-case-learned-helplessness">The original case: learned helplessness</h2>
<p>That dog experiment is Martin Seligman and Steven Maier’s 1967 study, and it’s the paper that introduced the term “learned helplessness.”<sup><a href="#user-content-fn-1" id="user-content-fnref-1-2" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup> Dogs that could press a panel to end shock later learned to escape shock in a new apparatus without trouble. Dogs yoked to them — same shocks, no working panel — later just lay down and took it, even once escape became trivially available. Seligman and Maier’s original account was that the yoked dogs had <em>learned</em> that nothing they did mattered, and that this learning suppressed the motivation to try.</p>
<p>That account held for about fifty years, and then Maier and Seligman revisited it themselves in a 2016 retrospective — and reversed the central mechanism.<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup> Passivity, they now argue, is the <em>default</em>, unlearned response to a prolonged aversive event, driven by serotonin activity in the dorsal raphe nucleus. What the escapable-shock dogs had wasn’t a passivity they avoided learning — it was an active, learned <em>inhibition</em> of that default passivity, generated by the ventromedial prefrontal cortex the moment it detects that outcomes are controllable. In their words, “there is nothing in the brain that is selectively turned on by a lack of control, only something that turns things off when there is the presence of control.” The yoked design was never in question — it’s still exactly how you’d isolate this effect — but what it was shown to be isolating changed. The paper also notes that inescapable shock reproduces eight of the nine DSM diagnostic symptoms of depression, which is part of why the paradigm became a standard animal model in depression research.</p>
<h2 id="the-logic-travels-ulcers-without-any-learning-at-all">The logic travels: ulcers, without any learning at all</h2>
<p>The same yoked structure produces a strikingly similar result outside the realm of learning and memory altogether. In a 1968 study, Joseph Weiss ran rats through a comparable pairing: one rat could avoid or shorten shock with a coping response, its yoked partner received identical shock on an identical schedule with no working response, and a third rat got no shock. The yoked “helpless” rats developed substantially more gastric ulceration than their paired counterparts — despite receiving, again, the exact same physical stressor.<sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup> The result argues that it’s the psychological experience of control, not the raw quantity of aversive stimulation, driving the physiological damage. Weiss also turned up a wrinkle worth keeping in mind: within the coping group, rats that made more responses developed <em>more</em> ulceration, not less — a reminder that “having control” and “exercising it a lot” aren’t the same variable, and a yoked design only cleanly isolates the one it was built to isolate.</p>
<h2 id="not-just-shocks-and-not-just-animals">Not just shocks, and not just animals</h2>
<p>Nothing about the yoked logic requires an aversive stimulus, and the design shows up well outside the shock literature. Developmental psychologists studying infant learning use a gentler version of exactly the same structure: a ribbon ties a 2–3-month-old infant’s ankle to a mobile overhead, so kicking makes the mobile move. The infant’s kick rate roughly triples within minutes as they learn the contingency. In the yoked control condition, a different infant’s mobile moves on the same schedule as their paired partner’s — same visual stimulation, same timing, no contingency — and yoked infants show none of the learning.<sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup> It’s the same experimental question — does behavior producing an effect matter, independent of the effect itself — asked with a toy instead of a shock panel.</p>
<p>The design hasn’t dated, either. A 2020 human study built a “translational” version of the original triadic design to study uncontrollable stress in people directly: an escapable-stress group, a yoked group receiving identical stress with the escape response disabled, and a no-stress control, used to study how perceived controllability shapes stress and depression risk in humans.<sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup></p>
<h2 id="the-catch-hiding-inside-the-design">The catch hiding inside the design</h2>
<p>Here’s where the story gets less tidy. In 1964, Robert Church published a statistical objection to the yoked control design that experimental psychologists have been arguing about ever since.<sup><a href="#user-content-fn-6" id="user-content-fnref-6" data-footnote-ref="" aria-describedby="footnote-label">6</a></sup> The yoked subject’s data isn’t statistically independent of its partner’s — by construction, the yoked animal’s entire stimulus schedule is a copy of whatever the master animal happened to do. If the master animals differ from each other for reasons that have nothing to do with the manipulation — one is just more anxious, or more active, or reacts more strongly to shock — that individual variation gets transmitted wholesale into the yoked animal’s environment. Church showed that this correlated-error structure can produce apparent group differences at a rate well above chance even when there’s no real effect of controllability at all — the design can manufacture “significant” results out of nothing but between-subject noise in the master group.</p>
<p>A follow-up paper by Kimmel and Terrant in 1968 took the critique seriously enough to propose a fix: a <em>reciprocal</em> yoked design, where each pair of subjects serves as both master and yoked partner across two different conditioned stimuli, so any individual bias one animal contributes gets balanced out rather than one-directional.<sup><a href="#user-content-fn-7" id="user-content-fnref-7" data-footnote-ref="" aria-describedby="footnote-label">7</a></sup> It’s a partial patch, not a full solution — and it’s telling that, decades on, methods papers are still finding new bias sources in yoked comparisons.</p>
<h2 id="so-does-it-still-hold-up">So does it still hold up?</h2>
<p>Mostly, yes — with a caveat about how much weight any single yoked comparison should carry. Church’s objection doesn’t mean learned helplessness, or Weiss’s ulcer result, are statistical artifacts; both have been replicated many times, across labs, strains, and eventually species, including the 2016 mechanistic account that traced the effect down to specific brain circuitry. But it does mean a lone yoked-pair comparison is weaker evidence on its own than it looks. What holds up is the pattern that keeps showing up when a yoked design is cross-checked against something else — a different paradigm, a different species, a molecular mechanism, a human neuroimaging study — rather than any single experiment in isolation.</p>
<p>That’s really the design’s legacy: not a flawless tool, but a genuinely clever one, honest enough about its own weak spot that the field has spent sixty years arguing about it in public. Next time you read that some group of animals, or infants, or people “had no control” in an experiment, it’s worth asking who they were yoked to — and what that pairing might be quietly carrying along with it.</p>
<p><em>Photo: an operant-conditioning (“Skinner box”) chamber set up for a pigeon-conditioning demonstration, Universidad Nacional Mayor de San Marcos, 1998 — the general class of apparatus behind the classic lever/panel-press experiments described above. Photo by <a href="https://commons.wikimedia.org/wiki/File:UNMSM_PsiExperimental_1998_2.jpg">Dtarazona</a>, public domain, via Wikimedia Commons.</em></p>
<section data-footnotes="" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-1">
<p>Seligman, M. E. P., &#x26; Maier, S. F. (1967). <a href="https://doi.org/10.1037/h0024514">Failure to escape traumatic shock</a>. <em>Journal of Experimental Psychology</em>, 74(1), 1–9. <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a> <a href="#user-content-fnref-1-2" data-footnote-backref="" aria-label="Back to reference 1-2" class="data-footnote-backref">↩<sup>2</sup></a></p>
</li>
<li id="user-content-fn-2">
<p>Maier, S. F., &#x26; Seligman, M. E. P. (2016). <a href="https://doi.org/10.1037/rev0000033">Learned helplessness at fifty: Insights from neuroscience</a>. <em>Psychological Review</em>, 123(4), 349–367. <a href="#user-content-fnref-2" data-footnote-backref="" aria-label="Back to reference 2" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-3">
<p>Weiss, J. M. (1968). <a href="https://doi.org/10.1037/h0025562">Effects of coping responses on stress</a>. <em>Journal of Comparative and Physiological Psychology</em>, 65(2), 251–260. <a href="#user-content-fnref-3" data-footnote-backref="" aria-label="Back to reference 3" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-4">
<p>Rovee, C. K., &#x26; Rovee, D. T. (1969). <a href="https://doi.org/10.1016/0022-0965(69)90025-3">Conjugate reinforcement of infant exploratory behavior</a>. <em>Journal of Experimental Child Psychology</em>, 8(1), 33–39. <a href="#user-content-fnref-4" data-footnote-backref="" aria-label="Back to reference 4" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-5">
<p>Meine, L. E., Schüler, K., Richter-Levin, G., Scholz, V., &#x26; Wessa, M. (2020). <a href="https://doi.org/10.3390/ijms21176010">A translational paradigm to study the effects of uncontrollable stress in humans</a>. <em>International Journal of Molecular Sciences</em>, 21(17), 6010. <a href="#user-content-fnref-5" data-footnote-backref="" aria-label="Back to reference 5" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-6">
<p>Church, R. M. (1964). <a href="https://doi.org/10.1037/h0042733">Systematic effect of random error in the yoked control design</a>. <em>Psychological Bulletin</em>, 62(2), 122–131. <a href="#user-content-fnref-6" data-footnote-backref="" aria-label="Back to reference 6" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-7">
<p>Kimmel, H. D., &#x26; Terrant, F. R. (1968). <a href="https://doi.org/10.3758/BF03209860">Bias due to individual differences in yoked control designs</a>. <em>Behavior Research Methods &#x26; Instrumentation</em>, 1(1), 11–14. <a href="#user-content-fnref-7" data-footnote-backref="" aria-label="Back to reference 7" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content></entry><entry><title>Commenting on Your Thesis</title><id>https://ali.mk/posts/commenting-on-your-thesis/</id><link href="https://ali.mk/posts/commenting-on-your-thesis/" /><published>2024-05-24T00:00:00.000Z</published><updated>2024-05-24T00:00:00.000Z</updated><summary>How I give feedback to the students I supervise.</summary><category term="student" /><category term="supervision" /><category term="thesis" /><content type="html"><![CDATA[<h2 id="my-reviews-on-your-thesis">My Reviews on Your Thesis</h2>
<p>Your are most probably writing your thesis in LaTeX, on overleaf. I comment your thesis in three different ways:</p>
<h3 id="specific-comments">Specific Comments</h3>
<p>I use Overleaf’s review feature to add comments about a specific instance when there is something at the spot that is not clear to me. You need to either answer the comment, or modify the text to reflect the comment in a way that resolves the matter I have pointed out in the comment. You can reply the comment if it is not clear to you. If you are sure about your change and think that it is resolved, then you can choose “Resolve” option under the comment to close it.</p>
<h3 id="general-comments-and-suggestions">General Comments and Suggestions</h3>
<p>There might be systematic suggestions that would have several instances in your writing. For example specific grammatical mistake that you have repeated. Or a comment about your referencing style. For such matters, I comment on the first few instances that I see and after that I will use the <code>todonotes</code> package of LaTeX to add a comment in the margin or inline. I probably also create a list of todos somewhere at the beginning of the document. When you are done resolving them, you can put a comment on it using overleaf’s commenting system, or if you have questions about it, you can ask.</p>
<p>You do not need to delete these <code>\todo</code> commands from your document. If they are resolved simply use <code>\usepackage[disable]{todonotes}</code> at the preamble of your LaTeX document to disable them in your final version.</p>
<blockquote class="prompt-tip">
<p><strong>Useful LaTeX Package</strong>: Check out <a href="https://ctan.org/pkg/todonotes"><code>todonotes</code></a> package. I find it very useful in many cases.</p>
</blockquote>
<h3 id="corrections">Corrections</h3>
<p>Sometimes I might find a mistake in your thesis that needs to be corrected and it does not require your attention. I will correct it directly in the document. For such matters I use “track changes” option of Overleaf. You can see the changes I have made and accept or reject them. If you have questions about the change, you can ask me.</p>
<h2 id="common-mistakes">Common Mistakes</h2>
<p>There are a few common mistakes that I have encountered master students make. I think it is a good idea to list them here so that you can avoid them before starting to write your thesis.</p>
<h3 id="use-of-informal-language">Use of Informal Language</h3>
<p>Your thesis is a formal academic document. You should avoid using informal or casual language in your thesis. This includes contractions, slang, and colloquial expressions. A common informal structure is the use of short forms like “don’t”, “can’t”, “won’t”, etc. You should use the full form of these words in your thesis. Examples:</p>





























<table><thead><tr><th>Incorrect</th><th>Correct</th></tr></thead><tbody><tr><td>don’t</td><td>do not</td></tr><tr><td>can’t</td><td>cannot</td></tr><tr><td>won’t</td><td>will not</td></tr><tr><td>I’m</td><td>I am</td></tr><tr><td>you’re</td><td>you are</td></tr></tbody></table>
<h3 id="use-acurate-precise-and-unambiguous-language">Use Acurate, Precise, and Unambiguous Language</h3>
<p>Be careful with the use of adjectives and adverbs when writing an academic piece. Lots of adjectives and adverbs imply subjective interpretation and their measure differ from person to person. They are incalculable, unquantifiable, and immeasurable. Therefore, they can distort the actual message you want to convey. For example:</p>
<blockquote class="prompt-danger">
<p>The results show a significantly better learning outcome of the participants in group A compared to group B (what is significantly better? How much better?).</p>
</blockquote>
<blockquote class="prompt-tip">
<p>The results show a $10%$ increase in the word retention of the participants in group A compared to group B (this is a quantifiable measure).</p>
</blockquote>
<p>A more conceptual example of how adjectives can differ in meaning is:</p>
<blockquote class="prompt-warning">
<ul>
<li>I am “very happy” to announce that we have a new colleague in our team.</li>
<li>I am “very happy” that I won the lottery of $5 million.</li>
</ul>
</blockquote>
<p>In the two sentences above, both are very happy, but one is much happier than the other. Also, in the second one, me thinking about it might imagine a person crying from happiness for winning the money, while you might imagine a person jumping around. Now can you say whether the happiness I am imagining that person has is the same amount of happiness you are imagining for her? Maybe my very happy is happier than your very happy. That is why, using such terms in scientific writing is dangerous:</p>
<blockquote class="prompt-danger">
<p>The fail-safe system of the seat eject mechanism is “extremely reliable”. For this aircraft it “almost never” fails.</p>
</blockquote>
<p>Now I am sitting at the corner thinking ok, I guess “extremely reliable” means like 99.9999% reliable which makes me happy to use their system. Also, I would say “almost never” when it is a one in a million chance. Now imagine the author of this sentence is a person who is very optimistic and always sees the glass half full. He might say “extremely reliable” when it is 95% reliable and “almost never” when it is 1 in 100. Now I am not happy to use their system. I hope you get the gist of it.</p>
<h3 id="first-person-pronoun">First Person Pronoun</h3>
<p>In almost all the cases, the master thesis is done by a single person (you). You do the practical part and also the writing. You are the sole author and beneficiary of the thesis. Therefore, when you need to use a pronoun to refer to the author, you should use the first person singular pronoun “I”. It is true that I might help you with some stages in your thesis, but I am your supervisor and it is my job to do so. Therefore I should not be credited in your thesis as an author. :)</p>

















<table><thead><tr><th>Incorrect</th><th>Correct</th></tr></thead><tbody><tr><td>We have implemented the algorithm</td><td>I have implemented the algorithm</td></tr><tr><td>We conducted an experiment</td><td>I conducted an experiment</td></tr></tbody></table>
<h3 id="balance-passive-and-active-voice">Balance Passive and Active Voice</h3>
<p>Conventionally, there is a preference for the passive voice in academic writing. However, the passive voice can make your writing unclear and difficult to read. Therefore, my personal preference is to use the active voice whenever possible. The active voice is more direct and concise. It is also more engaging and easier to read. Examples:</p>





















<table><thead><tr><th>Commonly Used Passive</th><th>My Preference</th></tr></thead><tbody><tr><td>An experiment was conducted</td><td>I conducted an experiment</td></tr><tr><td>The algorithm was implemented</td><td>I implemented the algorithm</td></tr><tr><td>The results were analyzed</td><td>I analyzed the results</td></tr></tbody></table>
<p>However, there are cases where the passive voice is more appropriate. For example, when the focus is on the action rather than the actor. Examples:</p>
<ul>
<li>It is widely believed that…</li>
<li>The results show that…</li>
<li>It has been shown that…</li>
<li>The data suggest that…</li>
</ul>
<h3 id="use-of-abbreviations">Use of Abbreviations</h3>
<p>When you introduce an abbreviation, you should first write the full form of the abbreviation followed by the abbreviation in parentheses. After that, you can use the abbreviation in the rest of the document. For example:</p>
<blockquote class="prompt-tip">
<p><strong>Useful LaTeX Packages</strong>: <a href="https://ctan.org/pkg/acronym"><code>acronym</code></a> and <a href="https://ctan.org/pkg/glossaries"><code>glossaries</code></a></p>
</blockquote>
<h3 id="back-up-your-claims-either-by-reference-or-by-proof-data">Back up your claims! Either by reference or by proof (data)</h3>
<p>When you make a claim in your thesis, you should back it up with evidence. This evidence can be a reference to a scientific paper, a book, or a reliable website. It can also be data that you have collected or analyzed. If you make a claim or a statement without evidence, it is considered an opinion. Opinions are not valid in academic writing. You should always back up your claims with evidence. Example:</p>
<p>Claim by Opinion
: Electric cars are better for the environment than gasoline cars. (it sounds obvious, but without experimentation or data, it is just an opinion. Which means I can claim otherwise and you cannot do anything about it. :D)</p>
<p>Evidence
: Electric cars produce CO2 emissions only during their production phase. After that, they are emission-free. Gasoline cars produce CO2 emissions throughout their lifetime (Smith, 2020). (In order to oppose this statement, now I need to at least provide counter-evidence or find a problem in the analysis or the quality of Smith’s study.)</p>
<h3 id="consistent-referencing-style">Consistent Referencing Style</h3>
<p>You should use a consistent referencing style throughout your thesis. You can use any referencing style you like, or the one that the university is suggesting. However, you should use it consistently. If you are using a reference management software like Zotero (my prefered option), Mendeley, or EndNote you can easily change the style of your references.</p>
<p>You can also connect Zotero and Mendelely to your Overleaf account to use the references directly in your LaTeX document.</p>
<h4 id="placement-of-the-references">Placement of the References</h4>
<p>People place the citations at different parts of the sentences and it is a bit of a personal writing style. I have two personal preferences depending on whether the citation is “numbered” or “named”.</p>
<h5 id="numbered">Numbered</h5>
<p>In numbered citations I prefer to place the citation at the end of the sentence. For example:</p>
<ul>
<li>Language is unique to humans [1].</li>
<li>Computers can understand human language [2].</li>
<li>The field of natural language processing is growing rapidly [3].</li>
</ul>
<h5 id="named">Named</h5>
<p>I prefer placing the citation where a statement is made. For example:</p>
<ul>
<li>According to (Smith, 2020), language is unique to humans.</li>
<li>Computers can understand human language (Jones, 2019).</li>
<li>Doe (2018) showed that the field of natural language processing is growing rapidly.</li>
</ul>
<p>These examples are not the only way to place the citations. You can choose your own style. However, you should be consistent in your choice.</p>
<h3 id="own-your-work">Own your work</h3>
<p>In my view, there is no problem in using assistive technologies (LLMs like ChatGPT and many others) for writing your thesis or analyzing your data, statistics, interpretations, or learning, and I even encourage you using them. However, after using such tools you should be able to judge the outcome. If the systems made outputs that included any sort of statement, you need to fact check them. Especially when it is used for content creation, you should have a complete understanding of the system’s output and it should not contain pieces that you do not understand or cannot explain. If you cannot explain a part of your thesis, it is a sign that you should not include it in your thesis.</p>
<p>Being my student, I ask you to include a comment in the LaTeX document of your thesis, where you use such tools, to indicate that you have used them. Examples:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="latex"><code><span class="line"><span style="color:#6A737D">% GPT-4o (grammar correction)</span></span>
<span class="line"><span style="color:#E1E4E8">Today's Russian language has a limited number of accents due to the influence of the Soviet Union (Gorbachev, 1985). This has made the language easier to learn and understand for non-native speakers who wish to use within countries who use russian as one of their main languages.</span></span></code></pre>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="latex"><code><span class="line"><span style="color:#E1E4E8">I collected data from </span><span style="color:#9ECBFF">$</span><span style="color:#79B8FF">60</span><span style="color:#9ECBFF">$</span><span style="color:#E1E4E8"> participants. </span></span>
<span class="line"><span style="color:#6A737D">% GPT-5 (Choice of statistical model)</span></span>
<span class="line"><span style="color:#E1E4E8">I conducted a linear regression analysis to find the relationship between the age of the participants and their performance in learning verb forms in Amharic. The results for the regression analysis showed that the age of the participants is a significant predictor of their performance in learning verb forms in Amharic (</span><span style="color:#9ECBFF">$</span><span style="color:#79B8FF">\beta = 0.45</span><span style="color:#9ECBFF">$</span><span style="color:#E1E4E8">, </span><span style="color:#9ECBFF">$</span><span style="color:#79B8FF">p &#x3C; 0.001</span><span style="color:#9ECBFF">$</span><span style="color:#E1E4E8">).</span></span>
<span class="line"><span style="color:#6A737D">% Gemini Pro 1.5 (Interpretation of the results)</span></span>
<span class="line"><span style="color:#E1E4E8">This result suggests that the older the participants are, the better they are in learning verb forms in Amharic. This is in line with the previous studies that showed that the age of the participants is a significant predictor of their performance in learning verb forms in Amharic.</span></span></code></pre>]]></content></entry><entry><title>My Favorite Research Tools</title><id>https://ali.mk/posts/my-favorite-research-tools/</id><link href="https://ali.mk/posts/my-favorite-research-tools/" /><published>2024-02-14T00:00:00.000Z</published><updated>2024-02-14T00:00:00.000Z</updated><summary>Reference managers, annotation, and the glue between them.</summary><category term="research" /><category term="apps" /><category term="reference" /><category term="literature" /><content type="html"><![CDATA[<h2 id="reference-management">Reference Management</h2>
<h3 id="zotero"><a href="https://zotero.org">Zotero</a></h3>
<p><img src="https://www.zotero.org/static/images/promote/zotero-logo-512x123.svg" alt="Zotero Logo"></p>
<h4 id="add-ons--plugins">Add-ons &#x26; Plugins</h4>
<p>The main advantage of Zotero is that you can install <a href="https://www.zotero.org/support/plugins">plugins and add-ons</a> to extend its functionality. Here are some of the most useful ones for me:</p>
<ul>
<li><a href="https://retorque.re/zotero-better-bibtex/">Better BibTex</a>: This plugin allows you to export your references in a variety of formats, including BibTeX, which is essential for LaTeX users.</li>
<li><a href="https://github.com/scitedotai/scite-zotero-plugin">Scite zotero plugin</a></li>
</ul>]]></content></entry><entry><title>Useful LaTeX Packages for Scientific Writing</title><id>https://ali.mk/posts/useful-latex-packages/</id><link href="https://ali.mk/posts/useful-latex-packages/" /><published>2024-01-19T00:00:00.000Z</published><updated>2024-01-19T00:00:00.000Z</updated><summary>The short list that survives every paper.</summary><category term="latex" /><category term="packages" /><category term="writing" /><content type="html"><![CDATA[<style>
    .table td:last-child {
        white-space: normal;
        word-wrap: break-word;
    }
</style>















<table><thead><tr><th>Package</th><th>Links</th><th>What it does</th></tr></thead><tbody><tr><td>Changes</td><td><a href="https://changes.sourceforge.net/">Homepage</a> · <a href="https://ctan.org/pkg/changes">CTAN</a></td><td>Tracking changes in a document. Useful for doing a paper revision after getting the reviews.</td></tr></tbody></table>]]></content></entry><entry><title>ABC of SSH: An Introduction</title><id>https://ali.mk/posts/ssh-tutorial/</id><link href="https://ali.mk/posts/ssh-tutorial/" /><published>2024-01-14T00:00:00.000Z</published><updated>2024-01-14T00:00:00.000Z</updated><summary>The remote-work workflow I teach every new student.</summary><category term="network" /><category term="SSH" /><category term="server" /><content type="html"><![CDATA[<p>SSH, or Secure Shell, is a network protocol that allows you to securely connect and communicate with remote servers over the internet. With SSH, you can run commands, transfer files, and configure services on remote machines. SSH also supports various authentication methods, such as passwords and public-key cryptography.</p>
<p>In this post, we will focus on the public-key authentication method, which is more secure and convenient than using passwords. We will explain what SSH keys are, how they work, and how to create and use them on different operating systems, such as Windows 11, MacOS, and Ubuntu.</p>
<h2 id="what-are-ssh-keys">What are SSH keys?</h2>
<p>SSH keys are two long strings of characters that are used to verify the identity of a user who wants to access a remote server. These keys are generated by the user on their local machine using a SSH utility. One key is private and stored on the user’s local machine. The other key is public and shared with the remote server or any other entity the user wishes to securely communicate with.</p>
<p>The private key is like a secret password that should never be revealed to anyone. The public key is like a lock that can be opened only by the matching private key. When the user tries to connect to the remote server, the server will check if the user has the correct private key that matches the public key stored on the server. If the keys match, the user is granted access. If not, the connection is denied.</p>
<p>SSH keys provide several advantages over passwords:</p>
<ul>
<li>They are more secure, as they are harder to guess or crack by brute force attacks.</li>
<li>They are more convenient, as they do not require the user to remember or type a password every time they connect to the server.</li>
<li>They can be used to automate tasks, such as running scripts or deploying applications, without human intervention.</li>
</ul>
<h2 id="how-to-create-ssh-keys">How to create SSH keys?</h2>
<p>To create SSH keys, you need to use a SSH utility that is available on your operating system. There are different tools and commands for different operating systems, but the basic steps are similar:</p>
<ul>
<li>Run a command to generate a pair of SSH keys, usually a 3072-bit or 4096-bit RSA key pair. You can optionally add a passphrase to further protect your private key.</li>
<li>Save the keys in a secure location on your local machine, usually in a hidden folder named <code>.ssh</code> in your home directory. The private key will have no file extension, while the public key will have a <code>.pub</code> extension.</li>
<li>Copy the public key to the remote server or any other entity you want to communicate with. You can use a utility called <code>ssh-copy-id</code> or manually append the public key to a file named <code>authorized_keys</code> in the <code>.ssh</code> folder on the remote server.</li>
</ul>
<p>In the following sections, we will show you how to create SSH keys on Windows 11, MacOS, and Ubuntu, using different tools and commands.</p>
<h3 id="windows-11">Windows 11</h3>
<p>Windows 11 comes with a built-in OpenSSH client that you can use to generate SSH keys. To use it, open the Windows Terminal or the Command Prompt and follow these steps:</p>
<ul>
<li>Type the following command to generate a pair of SSH keys and press Enter:</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">ssh-keygen</span><span style="color:#79B8FF"> -t</span><span style="color:#9ECBFF"> rsa</span><span style="color:#79B8FF"> -b</span><span style="color:#79B8FF"> 4096</span><span style="color:#79B8FF"> -C</span><span style="color:#9ECBFF"> "your_email@example.com"</span></span></code></pre>
<p>This will create a 4096-bit RSA key pair with your email address as a comment.</p>
<ul>
<li>You will be prompted to specify the file name and location for the keys. Press Enter to accept the default location, which is <code>C:\Users\yourusername\.ssh\id_rsa</code> for the private key and <code>C:\Users\yourusername\.ssh\id_rsa.pub</code> for the public key.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">Enter</span><span style="color:#9ECBFF"> file</span><span style="color:#9ECBFF"> in</span><span style="color:#9ECBFF"> which</span><span style="color:#9ECBFF"> to</span><span style="color:#9ECBFF"> save</span><span style="color:#9ECBFF"> the</span><span style="color:#9ECBFF"> key</span><span style="color:#E1E4E8"> (C:</span><span style="color:#79B8FF">\U</span><span style="color:#E1E4E8">sers</span><span style="color:#79B8FF">\y</span><span style="color:#E1E4E8">ourusername/.ssh/id_rsa):</span></span></code></pre>
<ul>
<li>You will be asked to enter a passphrase for the keys. This is optional, but recommended for extra security. Type a secure passphrase and press Enter. You will need to enter the same passphrase again to confirm it.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">Enter</span><span style="color:#9ECBFF"> passphrase</span><span style="color:#E1E4E8"> (empty </span><span style="color:#9ECBFF">for</span><span style="color:#9ECBFF"> no</span><span style="color:#9ECBFF"> passphrase</span><span style="color:#E1E4E8">):</span></span>
<span class="line"><span style="color:#B392F0">Enter</span><span style="color:#9ECBFF"> same</span><span style="color:#9ECBFF"> passphrase</span><span style="color:#9ECBFF"> again:</span></span></code></pre>
<ul>
<li>You will see a message that your keys have been generated, along with a fingerprint and a randomart image.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">Your</span><span style="color:#9ECBFF"> identification</span><span style="color:#9ECBFF"> has</span><span style="color:#9ECBFF"> been</span><span style="color:#9ECBFF"> saved</span><span style="color:#9ECBFF"> in</span><span style="color:#9ECBFF"> C:</span><span style="color:#79B8FF">\U</span><span style="color:#9ECBFF">sers</span><span style="color:#79B8FF">\y</span><span style="color:#9ECBFF">ourusername/.ssh/id_rsa</span></span>
<span class="line"><span style="color:#B392F0">Your</span><span style="color:#9ECBFF"> public</span><span style="color:#9ECBFF"> key</span><span style="color:#9ECBFF"> has</span><span style="color:#9ECBFF"> been</span><span style="color:#9ECBFF"> saved</span><span style="color:#9ECBFF"> in</span><span style="color:#9ECBFF"> C:</span><span style="color:#79B8FF">\U</span><span style="color:#9ECBFF">sers</span><span style="color:#79B8FF">\y</span><span style="color:#9ECBFF">ourusername/.ssh/id_rsa.pub</span></span>
<span class="line"><span style="color:#B392F0">The</span><span style="color:#9ECBFF"> key</span><span style="color:#9ECBFF"> fingerprint</span><span style="color:#9ECBFF"> is:</span></span>
<span class="line"><span style="color:#B392F0">SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span><span style="color:#9ECBFF"> your_email@example.com</span></span>
<span class="line"><span style="color:#B392F0">The</span><span style="color:#9ECBFF"> key's randomart image is:</span></span>
<span class="line"><span style="color:#9ECBFF">+---[RSA 4096]----+</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">+----[SHA256]-----+</span></span></code></pre>
<ul>
<li>To copy the public key to the remote server, you can use the <code>ssh-copy-id</code> utility. Type the following command, replacing <code>remote_username</code> and <code>server_ip_address</code> with the username and IP address of the remote server. You will be prompted to enter the password of the remote user.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="shell"><code><span class="line"><span style="color:#B392F0">ssh-copy-id</span><span style="color:#9ECBFF"> remote_username@server_ip_address</span></span></code></pre>
<ul>
<li>Alternatively, you can manually copy the public key to the remote server. To do that, you need to open the public key file with a text editor, such as Notepad, and copy its contents. Then, you need to log in to the remote server using SSH, create a <code>.ssh</code> folder in your home directory if it does not exist, and append the public key to a file named <code>authorized_keys</code> in the <code>.ssh</code> folder. You can use the following commands to do that:</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="shell"><code><span class="line"><span style="color:#B392F0">ssh</span><span style="color:#9ECBFF"> remote_username@server_ip_address</span></span>
<span class="line"><span style="color:#B392F0">mkdir</span><span style="color:#79B8FF"> -p</span><span style="color:#9ECBFF"> ~/.ssh</span></span>
<span class="line"><span style="color:#79B8FF">echo</span><span style="color:#9ECBFF"> 'paste_your_public_key_here'</span><span style="color:#F97583"> >></span><span style="color:#9ECBFF"> ~/.ssh/authorized_keys</span></span></code></pre>
<h3 id="macos">MacOS</h3>
<p>MacOS comes with a SSH utility called OpenSSH that you can use to generate SSH keys. To use it, open the Terminal application and follow these steps:</p>
<ul>
<li>Type the following command to generate a pair of SSH keys and press Enter:</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">ssh-keygen</span><span style="color:#79B8FF"> -t</span><span style="color:#9ECBFF"> rsa</span><span style="color:#79B8FF"> -b</span><span style="color:#79B8FF"> 4096</span><span style="color:#79B8FF"> -C</span><span style="color:#9ECBFF"> "your_email@example.com"</span></span></code></pre>
<p>This will create a 4096-bit RSA key pair with your email address as a comment.</p>
<ul>
<li>You will be prompted to specify the file name and location for the keys. Press Enter to accept the default location, which is <code>/Users/yourusername/.ssh/id_rsa</code> for the private key and <code>/Users/yourusername/.ssh/id_rsa.pub</code> for the public key.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">Enter</span><span style="color:#9ECBFF"> file</span><span style="color:#9ECBFF"> in</span><span style="color:#9ECBFF"> which</span><span style="color:#9ECBFF"> to</span><span style="color:#9ECBFF"> save</span><span style="color:#9ECBFF"> the</span><span style="color:#9ECBFF"> key</span><span style="color:#E1E4E8"> (/Users/yourusername/.ssh/id_rsa):</span></span></code></pre>
<ul>
<li>You will be asked to enter a passphrase for the keys. This is optional, but recommended for extra security. Type a secure passphrase and press Enter. You will need to enter the same passphrase again to confirm it.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">Enter</span><span style="color:#9ECBFF"> passphrase</span><span style="color:#E1E4E8"> (empty </span><span style="color:#9ECBFF">for</span><span style="color:#9ECBFF"> no</span><span style="color:#9ECBFF"> passphrase</span><span style="color:#E1E4E8">):</span></span>
<span class="line"><span style="color:#B392F0">Enter</span><span style="color:#9ECBFF"> same</span><span style="color:#9ECBFF"> passphrase</span><span style="color:#9ECBFF"> again:</span></span></code></pre>
<ul>
<li>You will see a message that your keys have been generated, along with a fingerprint and a randomart image.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">Your</span><span style="color:#9ECBFF"> identification</span><span style="color:#9ECBFF"> has</span><span style="color:#9ECBFF"> been</span><span style="color:#9ECBFF"> saved</span><span style="color:#9ECBFF"> in</span><span style="color:#9ECBFF"> /Users/yourusername/.ssh/id_rsa</span></span>
<span class="line"><span style="color:#B392F0">Your</span><span style="color:#9ECBFF"> public</span><span style="color:#9ECBFF"> key</span><span style="color:#9ECBFF"> has</span><span style="color:#9ECBFF"> been</span><span style="color:#9ECBFF"> saved</span><span style="color:#9ECBFF"> in</span><span style="color:#9ECBFF"> /Users/yourusername/.ssh/id_rsa.pub</span></span>
<span class="line"><span style="color:#B392F0">The</span><span style="color:#9ECBFF"> key</span><span style="color:#9ECBFF"> fingerprint</span><span style="color:#9ECBFF"> is:</span></span>
<span class="line"><span style="color:#B392F0">SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span><span style="color:#9ECBFF"> your_email@example.com</span></span>
<span class="line"><span style="color:#B392F0">The</span><span style="color:#9ECBFF"> key's randomart image is:</span></span>
<span class="line"><span style="color:#9ECBFF">+---[RSA 4096]----+</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">+----[SHA256]-----+</span></span></code></pre>
<ul>
<li>To copy the public key to the remote server, you can use the <code>ssh-copy-id</code> utility. Type the following command, replacing <code>remote_username</code> and <code>server_ip_address</code> with the username and IP address of the remote server. You will be prompted to enter the password of the remote user.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">ssh-copy-id</span><span style="color:#9ECBFF"> remote_username@server_ip_address</span></span></code></pre>
<ul>
<li>Alternatively, you can manually copy the public key to the remote server. To do that, you need to open the public key file with a text editor, such as TextEdit, and copy its contents. Then, you need to log in to the remote server using SSH, create a <code>.ssh</code> folder in your home directory if it does not exist, and append the public key to a file named <code>authorized_keys</code> in the <code>.ssh</code> folder. You can use the following commands to do that:</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">ssh</span><span style="color:#9ECBFF"> remote_username@server_ip_address</span></span>
<span class="line"><span style="color:#B392F0">mkdir</span><span style="color:#79B8FF"> -p</span><span style="color:#9ECBFF"> ~/.ssh</span></span>
<span class="line"><span style="color:#79B8FF">echo</span><span style="color:#9ECBFF"> 'paste_your_public_key_here'</span><span style="color:#F97583"> >></span><span style="color:#9ECBFF"> ~/.ssh/authorized_keys</span></span></code></pre>
<h3 id="ubuntu">Ubuntu</h3>
<p>Ubuntu comes with a SSH utility called OpenSSH that you can use to generate SSH keys. To use it, open the Terminal application and follow these steps:</p>
<ul>
<li>Type the following command to generate a pair of SSH keys and press Enter:</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">ssh-keygen</span><span style="color:#79B8FF"> -t</span><span style="color:#9ECBFF"> rsa</span><span style="color:#79B8FF"> -b</span><span style="color:#79B8FF"> 4096</span><span style="color:#79B8FF"> -C</span><span style="color:#9ECBFF"> "your_email@example.com"</span></span></code></pre>
<p>This will create a 4096-bit RSA key pair with your email address as a comment.</p>
<ul>
<li>You will be prompted to specify the file name and location for the keys. Press Enter to accept the default location, which is <code>/home/yourusername/.ssh/id_rsa</code> for the private key and <code>/home/yourusername/.ssh/id_rsa.pub</code> for the public key.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">Enter</span><span style="color:#9ECBFF"> file</span><span style="color:#9ECBFF"> in</span><span style="color:#9ECBFF"> which</span><span style="color:#9ECBFF"> to</span><span style="color:#9ECBFF"> save</span><span style="color:#9ECBFF"> the</span><span style="color:#9ECBFF"> key</span><span style="color:#E1E4E8"> (/home/yourusername/.ssh/id_rsa):</span></span></code></pre>
<ul>
<li>You will be asked to enter a passphrase for the keys. This is optional, but recommended for extra security. Type a secure passphrase and press Enter. You will need to enter the same passphrase again to confirm it.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">Enter</span><span style="color:#9ECBFF"> passphrase</span><span style="color:#E1E4E8"> (empty </span><span style="color:#9ECBFF">for</span><span style="color:#9ECBFF"> no</span><span style="color:#9ECBFF"> passphrase</span><span style="color:#E1E4E8">):</span></span>
<span class="line"><span style="color:#B392F0">Enter</span><span style="color:#9ECBFF"> same</span><span style="color:#9ECBFF"> passphrase</span><span style="color:#9ECBFF"> again:</span></span></code></pre>
<ul>
<li>You will see a message that your keys have been generated, along with a fingerprint and a randomart image.</li>
</ul>
<p>Your identification has been saved in /home/yourusername/.ssh/id_rsa</p>
<p>OK, I will continue generating the blog post.</p>
<ul>
<li>You will see a message that your keys have been generated, along with a fingerprint and a randomart image.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">Your</span><span style="color:#9ECBFF"> identification</span><span style="color:#9ECBFF"> has</span><span style="color:#9ECBFF"> been</span><span style="color:#9ECBFF"> saved</span><span style="color:#9ECBFF"> in</span><span style="color:#9ECBFF"> /home/yourusername/.ssh/id_rsa</span></span>
<span class="line"><span style="color:#B392F0">Your</span><span style="color:#9ECBFF"> public</span><span style="color:#9ECBFF"> key</span><span style="color:#9ECBFF"> has</span><span style="color:#9ECBFF"> been</span><span style="color:#9ECBFF"> saved</span><span style="color:#9ECBFF"> in</span><span style="color:#9ECBFF"> /home/yourusername/.ssh/id_rsa.pub</span></span>
<span class="line"><span style="color:#B392F0">The</span><span style="color:#9ECBFF"> key</span><span style="color:#9ECBFF"> fingerprint</span><span style="color:#9ECBFF"> is:</span></span>
<span class="line"><span style="color:#B392F0">SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span><span style="color:#9ECBFF"> your_email@example.com</span></span>
<span class="line"><span style="color:#B392F0">The</span><span style="color:#9ECBFF"> key's randomart image is:</span></span>
<span class="line"><span style="color:#9ECBFF">+---[RSA 4096]----+</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">|                 |</span></span>
<span class="line"><span style="color:#9ECBFF">+----[SHA256]-----+</span></span></code></pre>
<ul>
<li>To copy the public key to the remote server, you can use the <code>ssh-copy-id</code> utility. Type the following command, replacing <code>remote_username</code> and <code>server_ip_address</code> with the username and IP address of the remote server. You will be prompted to enter the password of the remote user.</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">ssh-copy-id</span><span style="color:#9ECBFF"> remote_username@server_ip_address</span></span></code></pre>
<ul>
<li>Alternatively, you can manually copy the public key to the remote server. To do that, you need to open the public key file with a text editor, such as Gedit, and copy its contents. Then, you need to log in to the remote server using SSH, create a <code>.ssh</code> folder in your home directory if it does not exist, and append the public key to a file named <code>authorized_keys</code> in the <code>.ssh</code> folder. You can use the following commands to do that:</li>
</ul>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">ssh</span><span style="color:#9ECBFF"> remote_username@server_ip_address</span></span>
<span class="line"><span style="color:#B392F0">mkdir</span><span style="color:#79B8FF"> -p</span><span style="color:#9ECBFF"> ~/.ssh</span></span>
<span class="line"><span style="color:#79B8FF">echo</span><span style="color:#9ECBFF"> 'paste_your_public_key_here'</span><span style="color:#F97583"> >></span><span style="color:#9ECBFF"> ~/.ssh/authorized_keys</span></span></code></pre>
<h2 id="how-to-use-ssh-keys">How to use SSH keys?</h2>
<p>Once you have created and copied your SSH keys, you can use them to connect to the remote server without entering a password. To do that, you need to use the <code>ssh</code> command with the <code>-i</code> option to specify the path to your private key. For example, to connect to the remote server using the private key stored in the default location, you can use the following command:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">ssh</span><span style="color:#79B8FF"> -i</span><span style="color:#9ECBFF"> ~/.ssh/id_rsa</span><span style="color:#9ECBFF"> remote_username@server_ip_address</span></span></code></pre>
<p>If you have added a passphrase to your private key, you will be asked to enter it once per session. If you want to avoid typing the passphrase every time, you can use a utility called <code>ssh-agent</code> to store the passphrase in memory. To do that, you need to run the following commands:</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#79B8FF">eval</span><span style="color:#E1E4E8"> $(</span><span style="color:#B392F0">ssh-agent</span><span style="color:#E1E4E8">)</span></span>
<span class="line"><span style="color:#B392F0">ssh-add</span><span style="color:#9ECBFF"> ~/.ssh/id_rsa</span></span></code></pre>
<p>You will be prompted to enter the passphrase once, and then it will be cached by the <code>ssh-agent</code>. You can then connect to the remote server using the <code>ssh</code> command without entering the passphrase again.</p>
<h2 id="conclusion">Conclusion</h2>
<p>In this post, we have learned what SSH and SSH keys are, how they work, and how to create and use them on different operating systems. SSH keys are a secure and convenient way to access and communicate with remote servers over the internet. We hope you have found this post useful and informative. If you have any questions or feedback, please leave a comment below. Thank you for reading! 😊</p>]]></content></entry><entry><title>Platform Recommendations for Students</title><id>https://ali.mk/posts/platform-recommendations-for-students/</id><link href="https://ali.mk/posts/platform-recommendations-for-students/" /><published>2024-01-12T00:00:00.000Z</published><updated>2024-01-12T00:00:00.000Z</updated><summary>The tools I recommend to every thesis student I supervise.</summary><category term="platforms" /><category term="students" /><category term="tools" /><content type="html"><![CDATA[<p>In this post I describe the platforms I use for working. These platforms facilitate collaboration and boost teamwork. I recommend all my students to familiarize themselves with these platforms and use them for their projects and in communication with me.</p>
<h2 id="communication">Communication</h2>
<h3 id="slack">Slack</h3>
<p>I preffer to use Slack for work communication. I need to invite you to my workspace using Slack Connect. I will let you know about it.</p>
<h2 id="materials">Materials</h2>
<h3 id="user-interfanceexperience-uiux-design">User Interfance/Experience (UI/UX) Design</h3>
<p>Go through this part if your project includes a user interface design. If not, skip to the next section.</p>
<h4 id="prototyping">Prototyping</h4>
<h5 id="figma-recommended">Figma (Recommended)</h5>
<ol>
<li>Create an account on <a href="https://www.figma.com/">Figma</a></li>
<li>Register for <a href="https://www.figma.com/education/">Figma Education</a> using your KTH email</li>
</ol>
<h3 id="version-control">Version Control</h3>
<p>Needless to say that we will need a version control for our programming materials</p>
<h4 id="github">GitHub</h4>
<ol>
<li>Create an account on <a href="https://github.com/">GitHub</a> if you do not have one already</li>
<li>Register for <a href="https://education.github.com/">GitHub Education</a> and get verified as a student so that you can access the premium features for free and so many other benefits that I encourage you to use, such as <a href="https://copilot.github.com/">GitHub Copilot</a></li>
<li>Activate your GitHub Copilot</li>
<li>Create a private repository for your degree project/thesis and add me as a collaborator using my GitHub username <a href="https://github.com/horotat">@horotat</a></li>
</ol>
<h3 id="open-science-framework-osf">Open Science Framework (OSF)</h3>
<p>A healthy research ethics means not to be worried about sharing your work with others. If we are honest in all what we do, then we sholdn’t worry about sharing the details of our analsys, data, and methods with others. An open science attitude is a good way to give the other researchers the opportunity to reproduce your work and build on it. <a href="https://osf.io/">OSF</a> is a platform that facilitates this process. If you are going to work on a scientific project with me, I recommend you to:</p>
<ol>
<li>Create an account on OSF</li>
<li>Create a project for your degree project/thesis</li>
<li>Add me as a contributor using my KTH email</li>
<li>Keep the repository private for the time being</li>
<li>In our first meeting we will put the proposal on the OSF repo and build on top of that</li>
</ol>
<h2 id="time-management">Time Management</h2>
<p>I am not strict about your preferred way of time management, but it is important that you have a framework and we follow up with the agreed method. You need to take care of the time management yourself but present your plan and updates, each time we meet. You can as well just use Slack Canvas or written text. But if you want some flaivour, here are some recommendations of the systems that I personally have used and liked:</p>
<ul>
<li>(<em>Recommended</em>) <a href="https://www.notion.so/">Notion</a>(With free <a href="https://www.notion.so/product/notion-for-education">student subscription</a>).</li>
<li>(Recommended) <a href="https://todo.microsoft.com/tasks/">Microsoft To Do</a></li>
<li>Other platforms:
<ul>
<li><a href="https://clickup.com/">ClickUp</a></li>
<li><a href="https://trello.com/">Trello</a></li>
<li><a href="https://todoist.com/">Todoist</a></li>
<li><a href="https://mail.google.com/tasks/canvas">Google Tasks</a></li>
</ul>
</li>
</ul>
<h2 id="literature">Literature</h2>
<h3 id="search--review">Search &#x26; Review</h3>
<p>During your project with me, you will learn about how to search for literature and find relevant studies to shape your project in a proper academic way. We will discuss the techniques all together but before hand you can familiarize yourself with the following platforms:</p>
<blockquote class="prompt-info">
<p>If you are KTH student, review the KTH Library information about <a href="https://www.kth.se/en/biblioteket/soka-vardera">Literature search</a>.</p>
</blockquote>
<p>Here is a list of platforms to use for literature search and review:</p>
<ul>
<li>Search
<ul>
<li><a href="https://scholar.google.com/">Google Scholar</a></li>
<li><a href="https://www.scopus.com/">Scopus</a></li>
<li><a href="https://www.webofscience.com/">Web of Science</a></li>
</ul>
</li>
<li>Evaluate
<ul>
<li><a href="https://elicit.org/">Elicit</a></li>
<li><a href="https://scite.ai/">Scite</a></li>
</ul>
</li>
</ul>
<h3 id="reference-management">Reference Management</h3>
<p>You will need a way to keep track of the references and literature that you find so that later you can easily cite them. There are some softwares that can do that. You can find information about many of them on <a href="https://www.kth.se/en/biblioteket/skriva-referera/referenshanteringsprogram-1.856567">this page</a> of KTH Library. My preffered software is <a href="https://www.zotero.org/">Zotero</a>.</p>
<h4 id="zotero">Zotero</h4>
<ol>
<li>Install Zotero on your computer and browser</li>
<li>Create an account on Zotero</li>
<li>Create a group for your degree project/thesis, and add me as a member using my KTH email</li>
</ol>
<h2 id="writing">Writing</h2>
<h3 id="latex-on-overleaf">LaTeX, on Overleaf</h3>
<p>I recommend you to use LaTeX for writing your thesis and personally I am most comfortable with LaTeX for collaboration and commenting on your writings. For this purpose follow these steps:</p>
<ol>
<li>Go to <a href="https://www.overleaf.com/">Overleaf</a>. Sign in with your KTH account (SSO)</li>
<li>Create a project and add me as a collaborator using my KTH email</li>
<li>Go to the setting of your profile and connect your Overleaf account to your GitHub and Zotero accounts (included in the Overleaf premium with your KTH account)</li>
</ol>
<p>Overleaf is pretty straight forward, but if you do not know LaTeX, the pages below provide very nice and quick tutorials:</p>
<ul>
<li><a href="https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes"><strong>Learn LaTeX in 30 minutes</strong></a>: Quick option</li>
<li><a href="https://www.learnlatex.org/"><strong>Learn LaTeX</strong></a>: More comprehensive option</li>
</ul>
<p>Apart from these there is a ton of resources online. Just google it!</p>
<h2 id="facilities-for-my-students">Facilities for My Students</h2>
<p>As long as you work with me I could try to provide you with the following facilities:</p>
<h3 id="computational-resources">Computational Resources</h3>
<p>I can give you SSH access to my server for the duration of your project to exclusively be used for your processes. The server configuration is as follows:</p>
<p>| OS | Ubuntu <code>22.04</code> LTS |
| CPU | Intel(R) Core(TM) <code>i9-10850K</code> @ <code>3.60GHz</code> |
| GPU | GeForce RTX 3090, <code>24GB</code> |
| RAM | DDR4 <code>128GB</code> |
| Storage | <code>1TB</code> SSD, <code>4TB</code> HDD |</p>
<p>If you need heavy computation in your project send me your SSH public key, mentioning your needs and demands, and I will give you access to the server.</p>
<blockquote class="prompt-info">
<p>If you are not familiar with SSH, you can find a tutorial in <a href="/posts/SSH-tutorial/">this post</a>.</p>
</blockquote>
<h3 id="office-space-and-access-to-tmh">Office Space and Access to TMH</h3>
<p>If you need it, I can provide you with office space within TMH division. This is not promised and depends on the availability of the space.</p>
<blockquote class="prompt-info">
<p>To get access to TMH facilities, send me your Personal Number (Personnummer) (or birthdate if you do not have a Swedish personal number.).</p>
</blockquote>
<h3 id="computer">Computer</h3>
<p>Depending on what you need to do, I might be able to get you a laptop for the duration of your project. This is not promised and depends on the availability of the laptops.</p>]]></content></entry><entry><title>Annotation Instructions</title><id>https://ali.mk/posts/annotation-instructions/</id><link href="https://ali.mk/posts/annotation-instructions/" /><published>2023-10-15T00:00:00.000Z</published><updated>2023-10-15T00:00:00.000Z</updated><summary>ELAN annotation protocol for the CardGame21 experiment.</summary><category term="experiment" /><category term="annotation" /><category term="guide" /><category term="ELAN" /><content type="html"><![CDATA[<h2 id="annotation">Annotation</h2>
<p>The annotations are about the data collected in the experiment related to this study: <a href="https://dl.acm.org/doi/10.1145/3568162.3577004">https://dl.acm.org/doi/10.1145/3568162.3577004</a> . Please have a look at the paper before the annotation (At least the methodology part).</p>
<p>The data has two main subdivisions for the condition: Collaborative (two students and the robot) and individual (one student and the robot).</p>
<p>The annotations are in the <code>.eaf</code> file that can be opened by <a href="https://archive.mpi.nl/tla/elan">ELAN Annotations software</a>. The main version we are using is <code>ELAN 6.6</code> for <code>macOS</code>. You will be provided with laptops that contain the annotation data and you will be given the direction to the annotation files.</p>
<h2 id="data-folder">Data Folder</h2>
<p>The data folder contains sub-folders that are named with these two main structures:</p>
<ul>
<li>CG21G## (Collaborative)</li>
<li>CG21P## (Individual)</li>
</ul>
<p>Each of these folders should have only one subfolder in them (either called <code>combined</code> or something long with numbers at the end of it.) which you need to open to arrive to the actual data. It does not matter what the name of the folder is, the important part is the <code>.eaf</code> file inside. When you arrive to each participant’s data, then open the <code>.eaf</code> file to start annotaiting.</p>
<h2 id="eaf-annotation-file-structure"><code>.eaf</code> Annotation File Structure</h2>
<p>The <code>.eaf</code> file already contains many of the annotations. Most of these are automatically extracted before (these have annotator name as <code>logs</code>) so you do not need to touch the settings about them. Below in the structure I will explain exactly which tier is automatic or which one you need to annotate.</p>
<h3 id="tires">Tires</h3>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="mermaid"><code><span class="line"><span style="color:#E1E4E8">flowchart TB</span></span>
<span class="line"><span style="color:#E1E4E8">    subgraph game</span></span>
<span class="line"><span style="color:#E1E4E8">            subgraph deck</span></span>
<span class="line"><span style="color:#E1E4E8">                subgraph cards</span></span>
<span class="line"><span style="color:#E1E4E8">                    subgraph changed</span></span>
<span class="line"><span style="color:#E1E4E8">                    end</span></span>
<span class="line"><span style="color:#E1E4E8">                end</span></span>
<span class="line"><span style="color:#E1E4E8">            end</span></span>
<span class="line"><span style="color:#E1E4E8">            subgraph ra</span></span>
<span class="line"><span style="color:#E1E4E8">            end</span></span>
<span class="line"><span style="color:#E1E4E8">        end</span></span>
<span class="line"><span style="color:#E1E4E8">    subgraph left</span></span>
<span class="line"><span style="color:#E1E4E8">        subgraph twl</span></span>
<span class="line"><span style="color:#E1E4E8">            subgraph twl_fluency</span></span>
<span class="line"><span style="color:#E1E4E8">            end</span></span>
<span class="line"><span style="color:#E1E4E8">            subgraph twl_context</span></span>
<span class="line"><span style="color:#E1E4E8">            end</span></span>
<span class="line"><span style="color:#E1E4E8">        end</span></span>
<span class="line"><span style="color:#E1E4E8">    end</span></span>
<span class="line"><span style="color:#E1E4E8">    subgraph right</span></span>
<span class="line"><span style="color:#E1E4E8">        subgraph twr</span></span>
<span class="line"><span style="color:#E1E4E8">            subgraph twr_fluency</span></span>
<span class="line"><span style="color:#E1E4E8">            end</span></span>
<span class="line"><span style="color:#E1E4E8">            subgraph twr_context</span></span>
<span class="line"><span style="color:#E1E4E8">            end</span></span>
<span class="line"><span style="color:#E1E4E8">        end</span></span>
<span class="line"><span style="color:#E1E4E8">    end</span></span>
<span class="line"><span style="color:#E1E4E8">    subgraph rs</span></span>
<span class="line"><span style="color:#E1E4E8">        subgraph twf</span></span>
<span class="line"><span style="color:#E1E4E8">            subgraph attention_l</span></span>
<span class="line"><span style="color:#E1E4E8">            end</span></span>
<span class="line"><span style="color:#E1E4E8">            subgraph attention_r</span></span>
<span class="line"><span style="color:#E1E4E8">            end</span></span>
<span class="line"><span style="color:#E1E4E8">            subgraph twf_context</span></span>
<span class="line"><span style="color:#E1E4E8">            end</span></span>
<span class="line"><span style="color:#E1E4E8">        end</span></span>
<span class="line"><span style="color:#E1E4E8">        opinion</span></span>
<span class="line"><span style="color:#E1E4E8">    end</span></span></code></pre>
<h3 id="game-automatic"><strong>game</strong> [Automatic]</h3>
<blockquote class="prompt-tip">
<p><code>alien</code>, <code>trip</code></p>
</blockquote>
<p>Part of the experiment with a particular story line. Each game contains exactly three decks of cards. There are two games that are called <code>Trip</code>, and <code>Alien</code>.</p>
<h4 id="deck-automatic"><strong>deck</strong> [Automatic]</h4>
<blockquote class="prompt-tip">
<p><code>Object</code>/<code>Tool</code>, <code>Occupation</code>/<code>Job</code>, <code>Shelter</code>/<code>Shelter</code></p>
</blockquote>
<p>You only need to annotate the data that is under deck timelines. (you can skip the times which are not within the decks. We do not care about them). Each deck of card game contains 5 target words and 3 of them are hard words that are important for the annotation.</p>
<h4 id="cards-automatic"><strong>cards</strong> [Automatic]</h4>
<blockquote class="prompt-tip">
<p>Lists of 5 words which shows the order of the cards on the table at the moment in time.</p>
</blockquote>
<h5 id="changed-semi-automatic-later-manual-annotation-dont-take-action-now"><strong>changed</strong> [Semi-Automatic] [Later Manual Annotation, don’t take action now]</h5>
<p>Possible Values: <code>left</code>, <code>right</code>
This tier says when a change happened in the order of the cards, who was the person who touched the screen and changed the card. (participant on the left or right).</p>
<h4 id="ra-robot-attention-automatic-empty-for-now"><strong>ra</strong>: Robot Attention [Automatic] [Empty for Now]</h4>
<blockquote class="prompt-tip">
<p><code>left</code>, <code>right</code>, <code>screen</code>, <code>other</code></p>
</blockquote>
<p>Where the robot was looking at the moment in time. (where was the attention of the robot?)</p>
<h3 id="left-and-right-semi-automatic-correct-when-awefully-different-than-the-reality"><strong>left</strong> and <strong>right</strong> [Semi-Automatic] [correct when awefully different than the reality]</h3>
<blockquote class="prompt-tip">
<p>Speech Transcription</p>
</blockquote>
<p>The speech of the participant on the left and right side. (In the individual condition, “left” is the only participant.)</p>
<h4 id="twl-target-word-left-twr-target-word-right-control-semi-automatic"><strong>twl</strong>: Target Word Left, <strong>twr</strong>: Target Word Right [<em>Control</em>] [Semi-Automatic]</h4>
<blockquote>
<p><code>mallet</code>, <code>altimeter</code>, <code>funnel</code>, <code>hummock</code>, <code>fuselage</code>, <code>escarpment</code>, <code>spokesperson</code>, <code>welder</code>, <code>meteorologist</code>, (one of the 9 target words
)</p>
</blockquote>
<p>This tier contains annotation of when the left (right) speaker (or the only twl in the individual condition) mentions any of the target words while playing a deck. For example if a participant says “mallet” since it is one of the hard target words, it should be in this tier with the roughly correct timing. In the initial annotation file there are the automatic hard target word transcriptions based on the whisper automatic speech recognition system. You have to go through the data and annotate any of the target words that are missing and remove if the participant says something that is not a target word but has been mistakenly annotated as a target word by the automatic transcription. <em>Pay attention that they user does not need to pronounce the word correctly. It is enough that they pronounce something close to the hard target word.</em></p>
<h5 id="twl_detection-and-twr_detection-automatic"><strong>twl_detection</strong> and <strong>twr_detection</strong> [Automatic]</h5>
<blockquote class="prompt-tip">
<p><code>yes</code>, empty</p>
</blockquote>
<p>Whether the word was detected by the automatic transcription or was transcribed by the annotator (you). Do not touch this tier. It is automatically filled by the system.</p>
<h5 id="twl_fluency-and-twr_fluency-disfluency-manual-annotate"><strong>twl_fluency</strong> and <strong>twr_fluency</strong>: <strong>Disfluency</strong> [Manual] [Annotate]</h5>
<blockquote class="prompt-tip">
<p><code>disfluent</code>, <code>fluent</code></p>
</blockquote>
<p><strong>While saying the target word, or a little before saying that word, did the user have any fluency problem?</strong></p>
<p>Disfluency in the context of learning a new foreign language refers to interruptions or hesitations in speech when attempting to produce unfamiliar words. It’s like hitting a linguistic speed bump as your brain navigates the terrain of a new language, causing momentary pauses or stumbles as you search for the right words. here’s a list of disfluency forms commonly observed when learning a new foreign language:</p>
<ol>
<li>Repetition: Repeating a word or phrase to reinforce memory or clarify understanding. (e.g., “I want to go to the store, the store.”, or “<em>The</em>, uh, <em>the</em> restaurant we went to was really good.”)</li>
<li>Hesitation: Momentary pauses or delays as the speaker searches for the right word or formulates a sentence.</li>
<li>Filler Words: Inserting filler words like “um,” “uh,” or equivalents in the target language while thinking. (e.g., “I, uh, want to go to the store.”)</li>
<li>Self-Correction: Interrupting oneself to correct a mistake or choose a more accurate word. (e.g., “She’s, uh, they’re—sorry, I mean, she’s studying French, not Spanish.”)</li>
<li>False Starts: Initiating a sentence and then restarting it with different wording. (e.g., “I wanted to buy, no, actually, I decided to rent a, um, bicycle instead.”)</li>
<li>Circumlocution: Describing a word or concept rather than using the exact term, especially when the correct word is momentarily inaccessible. (e.g., “I couldn’t remember the, uh, the word for that thing you wear when it’s cold, you know, the, um, jacket!”)</li>
<li>Code-Switching: Inadvertently using words or structures from one’s native language in the middle of a foreign language sentence. (e.g., “I was walking down the calle—oops, I mean street, and suddenly I saw a really cool tienda—store.”)</li>
<li>Pauses for Translation: Pausing to mentally translate a word or phrase from the native language to the target language. (e.g “He is a very buen chico—um, good guy, you know.”)</li>
<li>Gesture or Expression: Using non-verbal cues like gestures or facial expressions to convey meaning when struggling with words.</li>
<li>Phonetic Approximation: Pronouncing a word using sounds from one’s native language due to unfamiliarity with the correct pronunciation in the new language. (e.g., saying “Meteorolog” which is the swedish word for the “Meteorologist” while speaking in English. Or saying anything else that is close in pronounciation.)</li>
</ol>
<h5 id="twl_context-and-twr_context-context-manual-annotate"><strong>twl_context</strong> and <strong>twr_context</strong>: <strong>Context</strong> [Manual] [Annotate]</h5>
<blockquote class="prompt-tip">
<p><code>asking definition</code>, <code>comparison</code>, <code>use in context</code>, <code>providing definition</code></p>
</blockquote>
<p>This tier determines in which context the target word was used. Whether the party who said it was asking for definition, comparing, using it in context, or providing definition.</p>
<h2 id="annotating">Annotating</h2>
<p>At the current stage, these are the steps and tires that need to be annotated. Please follow these steps:</p>
<ol>
<li>You are given the link to a spreadsheet. Open that and choose a group that you are going to annotate, and write your name in front of the group code.</li>
<li>Open the <code>.eaf</code> file in the data folder of the group that you have chosen.</li>
<li>If anything is wrong with the group annotation file, write that in the spreadsheet.</li>
<li>If everything is fine, place the time header at the beginning of the first deck and start the annotation.</li>
<li>Start the annotation of:
<ul>
<li><code>left</code> and <code>right</code>: Most important is the timing of speech. Check that the transcription in the tier have correct timing and that they represent the speech of the relative participant. You do not need to correct the transcriptions. Do so, only if it is very different.</li>
<li><code>twl</code>, <code>twr</code>: Check that the automatically detected target words are correct. Especially check for the timing as well. If the timing is wrong, correct it. If the word is wrong, delete it. If the word is missing, add it.</li>
<li><code>twl_fluency</code>, <code>twr_fluency</code>: If the target word is produced with disfluency as defined above, mark it as <code>disfluent</code>. If it is fluent, mark it as <code>fluent</code>.</li>
<li>Fill in the <code>twl_context</code> and <code>twr_context</code> tiers. There are four options.</li>
</ul>
</li>
<li>Annotate all the decks, and save the file at the end.</li>
<li>Upload the annotated version to the cloud.</li>
<li>After doing all the annotation, mark the steps that you have completed in the spreadsheet.</li>
</ol>
<blockquote class="prompt-warning">
<p>Do not forget to regularly save the file after each annotation or regularly by using <code>command + s</code>.</p>
</blockquote>
<blockquote class="prompt-tip">
<p>When you open a file to annotate, write your name as annotator in the settings.</p>
</blockquote>]]></content></entry></feed>