<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>Alireza M. Kamelabad — All posts</title><subtitle>Every post — research, work, and life — in one feed.</subtitle><id>https://ali.mk/posts/atom.xml</id><link rel="alternate" type="text/html" href="https://ali.mk/posts/" /><link rel="self" type="application/atom+xml" href="https://ali.mk/posts/atom.xml" /><updated>2026-07-30T00:00:00.000Z</updated><author><name>Alireza M. Kamelabad</name></author><entry><title>Words as Weapons: How Media Framing Shapes the Iran War Narrative</title><id>https://ali.mk/posts/words-as-weapons-how-media-framing-shapes-the-iran-war-narrative/</id><link href="https://ali.mk/posts/words-as-weapons-how-media-framing-shapes-the-iran-war-narrative/" /><published>2026-07-30T00:00:00.000Z</published><updated>2026-07-30T00:00:00.000Z</updated><summary>Why “hit” and “destroyed” dominate coverage of US-Israeli strikes while “intercepted” and “no damage” define Iranian ones — and what that gap in language reveals.</summary><category term="media bias" /><category term="war journalism" /><category term="Iran war coverage" /><category term="media framing" /><category term="battle damage assessment" /><category term="Western media" /><category term="propaganda" /><category term="information war" /><category term="Al Jazeera" /><category term="Pentagon transparency" /><category term="Iran" /><content type="html"><![CDATA[<p>There is a pattern I cannot unsee: when Iran launches missiles, headlines often lead with “intercepted”, “targeted”, or “no damage”. When the US or Israel attacks Iran, the language is more often “hit”, “destroyed”, or “struck”. This difference is not proof that every Iranian claim is true or that every Western report is false. But it does shape what the public assumes before the evidence is fully available.</p>
<h2 id="the-language-gap-is-documented">The Language Gap Is Documented</h2>
<p>This is not only an impression. Analyses of coverage of the Iran–Israel–US confrontation argue that Western reporting frequently presents US and Israeli attacks through a “self-defence” frame while casting Iranian action as “provocation”, with consequences for how legitimacy, aggression, and civilian harm are understood<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup>. A comparative study of American and European television coverage also found a broad predominance of “war journalism” — coverage that relies heavily on official sources and military frames rather than civilian impact and independent ground verification<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup>.</p>
<p>Other comparative research identifies a related divide: Western coverage tends to foreground stability, deterrence, and security, while Middle Eastern coverage more often foregrounds sovereignty, historical grievance, and humanitarian consequences<sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup>. Neither lens is neutral. Each selects facts, sources, and language that make a different side’s violence appear more reasonable, necessary, or effective.</p>
<h2 id="intercepted-is-not-a-final-assessment">“Intercepted” Is Not a Final Assessment</h2>
<p>An early statement that a missile was “intercepted” may be accurate in a narrow sense: an air-defence system engaged it. It does not, on its own, establish that every projectile was destroyed, that no debris reached a site, or that there was no damage. Nor does an initial “no damage” claim substitute for a completed battle-damage assessment.</p>
<p>The most reliable record often arrives later, through commercial satellite imagery, geolocation, post-strike photographs, repair activity, casualty reporting, and congressional disclosures. That delay gives official military narratives a major advantage: they become the first headline, while more complicated evidence appears days or weeks later.</p>
<h2 id="the-evidence-that-emerged-later">The Evidence That Emerged Later</h2>
<p>The Washington Post conducted a satellite-imagery investigation using imagery published by Iranian state-affiliated media and independently verified damage to at least 228 structures or pieces of equipment at US military sites. The Post found the extent of damage was substantially greater than what had previously been reported or publicly acknowledged by the US government<sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup>. Reporting on that investigation identified affected assets including hangars, barracks, fuel depots, aircraft, radar, communications, and air-defence equipment across multiple countries<sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup>.</p>
<p>The New York Times separately reported that satellite images released by Iran showed at least 20 structures at US-linked facilities completely or partly destroyed<sup><a href="#user-content-fn-6" id="user-content-fnref-6" data-footnote-ref="" aria-describedby="footnote-label">6</a></sup>. CNN also geolocated imagery showing a severely damaged US Air Force E-3 Sentry early-warning aircraft at Prince Sultan Air Base in Saudi Arabia after an Iranian strike<sup><a href="#user-content-fn-7" id="user-content-fnref-7" data-footnote-ref="" aria-describedby="footnote-label">7</a></sup>. Other CNN reporting based on satellite imagery described damage to the AN/TPY-2 radar component of the THAAD missile-defence system at the same base<sup><a href="#user-content-fn-8" id="user-content-fnref-8" data-footnote-ref="" aria-describedby="footnote-label">8</a></sup>.</p>
<p>These findings do not validate every official Iranian military claim. They do demonstrate that early accounts centered on “interception” and “no damage” did not tell the full story.</p>
<h2 id="the-money-trail-matters">The Money Trail Matters</h2>
<p>The question becomes even harder to dismiss when looking at the cost of the war. Pentagon comptroller Jules Hurst acknowledged during congressional questioning that the department’s public $29 billion war-cost figure did not include a final accounting of damage to US installations; when pressed, the Pentagon did not provide a complete figure<sup><a href="#user-content-fn-9" id="user-content-fnref-9" data-footnote-ref="" aria-describedby="footnote-label">9</a></sup>. Senator Patty Murray described the estimate as “suspiciously low” and criticized the lack of transparency over damage to US facilities<sup><a href="#user-content-fn-9" id="user-content-fnref-9-2" data-footnote-ref="" aria-describedby="footnote-label">9</a></sup>.</p>
<p>Senate Democrats later urged investigators to examine the Pentagon’s accounting. USA Today reported that outside analysts and congressional sources estimated repair and replacement costs — including battle damage not captured in the official figure — could add roughly $15–25 billion<sup><a href="#user-content-fn-10" id="user-content-fnref-10" data-footnote-ref="" aria-describedby="footnote-label">10</a></sup>. The discrepancy does not prove deliberate deception in every case, but it strongly suggests that initial public estimates were incomplete.</p>
<h2 id="why-this-narrative-persists">Why This Narrative Persists</h2>
<p>There are practical reasons for the gap. Battle-damage assessment takes time, and militaries often withhold operational details for security reasons. But there are political reasons too: acknowledging effective Iranian strikes challenges claims of overwhelming air-defence superiority, raises the visible costs of the war, and weakens public confidence in escalation.</p>
<p>That creates a recurring informational sequence: an Iranian strike is immediately described as “intercepted” or ineffective; days later, satellite imagery, local evidence, or financial disclosures reveal a more serious outcome. By then, the first headline has already shaped the public impression.</p>
<h2 id="whose-media-whose-narrative">Whose Media, Whose Narrative</h2>
<p>Iranian state media is not neutral. It has obvious incentives to inflate Iran’s military effectiveness and suppress its own losses. But US and allied official statements should not be treated as neutral final verdicts either, especially when later independent imagery and reporting contradict the first account.</p>
<p>The deeper imbalance is one of reach and agenda-setting. American and allied outlets dominate the English-language information environment, with far greater resources, access to officials, and syndication power than Iranian domestic media. That influence helps establish which vocabulary becomes normal: US and Israeli attacks “hit”; Iranian attacks are “intercepted”, “targeted”, or said to have caused “no damage”.</p>
<p>The responsible response is not to reverse the bias and accept every Iranian claim uncritically. It is to treat all same-day military claims as provisional, distinguish official assertions from independently verified evidence, and revisit early headlines when the satellite record, repair data, and human consequences become visible. In war, the first account is often the most politically useful one — not necessarily the most complete.</p>
<section data-footnotes="" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-1">
<p><a href="https://institute.aljazeera.net/en/ajr/article/3575">Al Jazeera Media Institute — “Missiles Made of Words: How Western Media Narratives Shape the Iran–Israel–US Conflict”</a> <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-2">
<p><a href="https://peerianjournal.com/index.php/tpj/article/view/1199">The Peerian Journal — “The Role of Framing in Reframing Conflict: A Comparative Quantitative Content Analysis of American and European Television Coverage of the 2025 Iran-Israel War”</a> <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><a href="https://qrjsocial.com/index.php/38/article/view/987">Qualitative Research Journal for Social Studies — “Bias and Ideology in Western and Middle Eastern Media Coverage of the Iran–Israel War”</a> <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><a href="https://www.washingtonpost.com/investigations/2026/05/06/iran-us-bases-satellite-images/">The Washington Post — “Iran has hit far more U.S. military assets than reported, satellite images show”</a> <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><a href="https://www.middleeasteye.net/news/satellite-imagery-suggests-far-more-us-middle-east-sites-hit-iran-reported">Middle East Eye — “Satellite imagery suggests far more US assets in Middle East hit by Iran than reported”</a> <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><a href="https://www.nytimes.com/2026/07/22/world/middleeast/iran-war-us-bases-images.html">The New York Times — “What Visuals Show About Recent Damage to U.S. Military Bases”</a> <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><a href="https://www.cnn.com/2026/03/30/us/video/us-aircraft-damaged-saudi-vrtc">CNN — “Images show vital US radar aircraft damaged after Iranian strike”</a> <a href="#user-content-fnref-7" data-footnote-backref="" aria-label="Back to reference 7" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-8">
<p><a href="https://fakti.bg/en/world/1045941-cnn-iran-hits-key-us-missile-defense-radar-at-saudi-air-base">CNN reporting, summarized by Fakti — “Iran hits key US missile defense radar at Saudi air base”</a> <a href="#user-content-fnref-8" data-footnote-backref="" aria-label="Back to reference 8" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-9">
<p><a href="https://www.pbs.org/newshour/politics/watch-murray-calls-pentagons-iran-war-cost-estimate-suspiciously-low-presses-for-damage-price-tag">PBS NewsHour — “Murray calls Pentagon’s Iran war cost estimate ‘suspiciously low,’ presses for damage price tag”</a> <a href="#user-content-fnref-9" data-footnote-backref="" aria-label="Back to reference 9" class="data-footnote-backref">↩</a> <a href="#user-content-fnref-9-2" data-footnote-backref="" aria-label="Back to reference 9-2" class="data-footnote-backref">↩<sup>2</sup></a></p>
</li>
<li id="user-content-fn-10">
<p><a href="https://www.usatoday.com/story/news/politics/2026/05/28/senate-democrats-iran-war-cost-letter/90278167007/">USA Today — “Senate Dems urge investigators to check Pentagon’s math on Iran war”</a> <a href="#user-content-fnref-10" data-footnote-backref="" aria-label="Back to reference 10" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content></entry><entry><title>When Fine Print Fails: How We Took On an Airline’s (Jetstar) &quot;Final Position&quot;</title><id>https://ali.mk/posts/2026-07-21-when-fine-print-fails-how-we-took-on-an-airlines-final-position/</id><link href="https://ali.mk/posts/2026-07-21-when-fine-print-fails-how-we-took-on-an-airlines-final-position/" /><published>2026-07-21T00:00:00.000Z</published><updated>2026-07-21T00:00:00.000Z</updated><summary>The story of how I got a full refund for a Jetstar flight cancelled due to weather.</summary><category term="Legal" /><category term="Jetstar" /><category term="Consumer rights" /><category term="Airline refunds" /><category term="Australia" /><content type="html"><![CDATA[<p>We were scheduled to fly from Melbourne to Brisbane on Jetstar Flight JQ568. A major cyclone (I think it was called Alfred) hit on March 6, the flight was suddenly pulled, and our travel plans were instantly wiped out. Basically, the beach of Brisbane was no more after the cyclone 🌀🤦🏻. Unheard of in the last 50 years 😐 (speaking of luck)</p>
<p>While weather cancellations are an unfortunate reality of travel, but in the EU at least we are used to just get a refund for our flight and call it a bad luck. So I was very surprised that it was not the case in Australia. What followed was a masterclass in corporate stonewalling—and an empowering reminder of why knowing your legal rights actually matters.</p>
<h2 id="the-offer-we-couldnt-use">The Offer We Couldn’t Use</h2>
<p>Shortly after the cancellation, Jetstar sent a notification and offered us their standard resolution: <strong>a credit voucher</strong>.</p>
<p>For local Australian frequent flyers, a voucher might be a fair compromise (depending on what you consider fair). But as residents of another continent, a domestic Australian flight credit is completely useless to us. I contacted their support team and requested what made sense: a full monetary refund for both of our bookings.</p>
<p>The initial support experience was incredibly frustrating. When I pressed for a refund, their live chat agent abruptly ended the session without notice, completely shutting down the conversation. Escalating the issue to Jetstar’s resolutions team only resulted in a firm <strong>“No.”</strong></p>
<p>They cited <strong>Clause 8.2</strong> of their <em><a href="https://www.jetstar.com/us/en/conditions-of-carriage-jq">Conditions of Carriage</a></em><sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup>:</p>
<blockquote>
<p>8.2 Changes due to Events Beyond Our Control</p>
<p>Where we make a Significant Change to your flight due to an Event Beyond Our Control, whether you have checked in or not, we will:</p>
<ul>
<li>use reasonable endeavours to rebook you on the next available flight on our services at no additional cost to you; or</li>
<li>alternatively, if we are unable to rebook you on services acceptable to you, we will provide you with a flight credit where the purpose of your trip cannot be achieved.</li>
</ul>
</blockquote>
<p>Claiming that because the disruption was caused by weather (an “Event Beyond Our Control”), their policy stated they were not obligated to issue cash refunds. To drive the point home, their agent quoted the clause in an email and declared that this was their <strong>“final position,”</strong> effectively stonewalling us and stating they would no longer respond to further inquiries.</p>
<p>Case closed? Not quite. It just sounded outrageous to me and I could not accept that.</p>
<h2 id="spotting-the-omission-in-the-fine-print">Spotting the Omission in the Fine Print</h2>
<p>Instead of taking “final position” for an answer, I decided to pull up Jetstar’s actual <em>Conditions of Carriage</em> to read Clause 8.2 line by line.</p>
<p>That’s when I noticed something glaring.</p>
<p>In their email denying our refund, the agent quoted the clause but conveniently stopped short right before the final sentence. The actual clause ends with a crucial caveat stating:</p>
<blockquote>
<p><em>“You may also have rights to remedies under applicable law.”</em><sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup></p>
</blockquote>
<p>By deliberately leaving out that sentence, they were presenting their internal policy as absolute truth while hiding the very legal escape hatch built into it.</p>
<h2 id="the-legal-grounding-australian-consumer-law">The Legal Grounding: Australian Consumer Law</h2>
<p>Under the <a href="https://www.accc.gov.au/consumers/specific-products-and-activities/travel-delays-and-cancellations">Australian Consumer Law (ACL)</a><sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup>, travel services automatically come with basic consumer rights known as consumer guarantees. One of these is the guarantee that services will be provided within a reasonable time.</p>
<p>When a business sells a product or service that fails to meet these consumer guarantees, it is legally required to offer the consumer a solution. A “<strong>major failure</strong>” occurs when a service is substantially unfit for purpose and cannot be fixed within a reasonable time, which entitles the consumer to choose between a replacement or a full refund.<sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup></p>
<p>Crucially, <em>an airline’s internal compensation policy does not replace the consumer guarantees that automatically apply</em>. In short: internal terms and conditions cannot strip away statutory consumer protections.</p>
<h2 id="taking-action-the-final-resolution">Taking Action: The Final Resolution</h2>
<p>With the law clearly on our side, I prepared a multi-pronged strategy:</p>
<ol>
<li><strong>The Formal Complaints:</strong> I didn’t just threaten to report them; I actually lodged formal complaints with the <a href="https://www.airlinecustomeradvocate.com.au/">Airline Customer Advocate (ACA)</a><sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup> and the <a href="https://www.accc.gov.au/">Australian Competition and Consumer Commission (ACCC)</a>. Interestingly, while the ACA initially deemed the complaint ineligible, the sheer act of filing it triggered an internal escalation at Jetstar. My case was finally moved out of the standard “Resolutions” queue and handed over to their Customer Advocacy Team.</li>
</ol>
<p>In case if you wonder why ACA complaint was deemed ineligible initially was because Jetstar had not closed the support case in their system yet. ACA needs your case to have been concluded without a desired resolution first, to take up the case.</p>
<p><img src="/assets/images/image.png" alt="The email from Jetstar after ACA complaint."></p>
<ol start="2">
<li><strong>The Chargeback Dispute:</strong> Since Jetstar had declared they were closing the case on their end, I also took the matter directly to our payment provider, <a href="https://www.klarna.com/">Klarna</a>. I opened a dispute on the grounds of <strong>“Services Not Rendered,”</strong> providing them with the full email transcript showing Jetstar’s refusal to refund and the legal argument demonstrating the airline’s failure to fulfill its statutory obligations.</li>
</ol>
<h3 id="the-airline-backs-down">The Airline Backs Down</h3>
<p>Once escalated to the Customer Advocacy Team, a new case manager reached out. For the first time, someone acknowledged our situation. She noted that we reside in Sweden and requested official supporting documentation confirming our residency. I immediately sent over our public registry extracts from the Swedish Tax Agency (<em>Skatteverket</em>).</p>
<p>Within days, we received the email we had been fighting for. Jetstar stated: <em>“As a gesture of goodwill, we will proceed with a full refund for both bookings.”</em> (They still couldn’t admit they were legally obligated, wrapping it in “goodwill” instead).</p>
<p>While there were still some frustrating delays that required a few more follow-up chats to get their finance team to process the transactions, the funds finally cleared. I received the full cash refunds back to my PayPal and Klarna accounts across July and August.</p>
<p>Ironically, Klarna had actually closed my dispute in the merchant’s favor at one point because I missed an email requesting further evidence—but it didn’t matter Jetstar had already conceded and initiated the refunds on their end anyway.</p>
<h2 id="the-aftermath-a-quiet-policy-update">The Aftermath: A Quiet Policy Update</h2>
<p>Perhaps the most satisfying part of this entire ordeal happened after the dust settled. Out of curiosity, I checked Jetstar’s website again and noticed that they had quietly updated Clause 8.2.</p>
<p>The clause now explicitly includes the very laws they originally tried to ignore:</p>
<p>“…including the <a href="https://www.jetstar.com/au/en/help/australian-consumer-law-information">Australian Consumer Law</a>, the New Zealand Consumer Law, the Convention and/or the Civil Aviation Law (NZ). We will not be responsible for paying any costs or expenses you may incur as a result of the delay or cancellation, unless otherwise required by applicable laws, such as the <a href="https://www.jetstar.com/au/en/help/australian-consumer-law-information">Australian Consumer Law</a>, the New Zealand Consumer Law, the Convention and/or the Civil Aviation Law (NZ).”</p>
<p>It’s proof that pushing back works. They knew their original framing was misleading, and our dispute forced them to clarify their obligations in their public-facing terms.</p>
<h3 id="key-takeaways-for-travelers">Key Takeaways for Travelers</h3>
<ul>
<li><strong>Company policy is not law:</strong> A contract or terms-of-service page cannot void your statutory consumer rights.</li>
<li><strong>Read the full clause:</strong> Companies often quote their policies selectively to protect their bottom line. Always verify the source text yourself.</li>
<li><strong>Document everything:</strong> Save emails, chat logs, booking references, and cancellation notices.</li>
<li><strong>Use your payment protections:</strong> If a merchant refuses a lawful refund after failing to provide a service, leverage your bank or payment provider for a chargeback.</li>
</ul>
<p>Standing up for your consumer rights takes effort, but holding companies accountable is always worth the fight</p>
<hr>
<section data-footnotes="" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-1">
<p><a href="https://www.jetstar.com/us/en/conditions-of-carriage-jq">Jetstar Conditions of Carriage, Clause 8.2</a>  Outlines Jetstar’s policy on delays and cancellations due to “Events Beyond Our Control”. <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-2">
<p>Jetstar Conditions of Carriage, Clause 8.2 explicitly notes that terms do not override statutory rights under national law. <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><a href="https://www.accc.gov.au/consumers/specific-products-and-activities/travel-delays-and-cancellations">ACCC: Travel Delays and Cancellations</a>  Explains that consumer guarantees automatically apply to travel services and cannot be replaced by internal airline policies. <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>Australian Consumer Law (ACL), Schedule 2 of the <em>Competition and Consumer Act 2010</em>. <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><a href="https://www.airlinecustomeradvocate.com.au/">Airline Customer Advocate (ACA)</a>  A free and independent service facilitating the resolution of unresolved complaints about major Australian airlines. <a href="#user-content-fnref-5" data-footnote-backref="" aria-label="Back to reference 5" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content></entry><entry><title>The (rotten) Apple Illusion</title><id>https://ali.mk/posts/2026-07-14-the-rotten-apple-illusion/</id><link href="https://ali.mk/posts/2026-07-14-the-rotten-apple-illusion/" /><published>2026-07-14T00:00:00.000Z</published><updated>2026-07-14T00:00:00.000Z</updated><summary>How the EU Standoff Exposed a Walled Garden of Disrespect</summary><category term="Apple" /><category term="DMA" /><category term="European Union (EU)" /><content type="html"><![CDATA[<p>As a tech enthusiast, I’ve always believed in experimenting with different ecosystems to find the best tools for my daily life and workflow. Up until early 2025, I was fully immersed in the Samsung ecosystem. My Galaxy S22 Plus, Galaxy Tab S8 Plus, and Buds Pro worked flawlessly together. They were cutting-edge, unrestricted, and constantly evolving with new AI integrations.</p>
<p>But I wanted to experience the legendary “Apple magic.” I wanted to see what the absolute pinnacle of their hardware and software integration felt like.</p>
<p>So, in March 2025, I made a massive financial commitment. I went all-in, purchasing the iPhone 16 Pro, an iPad Pro M4, AirPods Pro 2nd Gen, an Apple TV, AirTags, and an Apple Pencil Pro. These flagship devices were significantly more expensive than my Samsung setup, but I was buying into a promise: seamless integration, premium performance, and the highly anticipated “Apple Intelligence” they had promised would revolutionize their platforms.<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></p>
<p>It didn’t take long for the buyer’s remorse to set in.</p>
<hr>
<h2 id="a-timeline-of-broken-promises">A Timeline of Broken Promises</h2>
<p>The initial failure was Apple’s inability to deliver Apple Intelligence on time. When iOS 18 rolled out, instead of stepping into the future, I felt like I had been thrown four years back in time. The capabilities of my brand-new, premium iPhone 16 Pro were fundamentally lagging behind what my older Samsung S22 Plus was doing before Gemini even became a standard feature.</p>
<p>Then came the iOS 26 cycle. Apple heavily marketed a suite of new features, but as a user living in the European Union, I quickly realized the fine print: the best features were either locked to US English or completely geoblocked in the EU. Features as simple as iPhone Mirroring were stripped from my multi-thousand-euro devices.<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup></p>
<p>But today was the breaking point.</p>
<p>I recently updated to the iOS 27 beta, eager to finally experience the revamped Siri interface and the next-generation AI features Apple has been showcasing. After installing the update, I searched everywhere. Nothing. The new Siri experience was completely missing.</p>
<p>After digging through Apple’s official statements and reading through frustrating Reddit threads, the reality hit me: Apple has intentionally blocked the new Siri AI in the EU.<sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup></p>
<p>Their justification? The European Union’s Digital Markets Act (DMA).<sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup></p>
<hr>
<h2 id="the-regulatory-standoff-privacy-as-a-weapon">The Regulatory Standoff: Privacy as a Weapon</h2>
<p>Under the DMA, gatekeeper companies like Apple are required to allow interoperability. If Apple gives its own AI (Siri) deep, system-level hooks into iOS to read context, messages, and screen data, the EU dictates they must offer a secure way for third-party assistants to have that same access.</p>
<p>In June 2026, Apple proposed a “Trusted System Agent” to act as a middleman for this data, which the European Commission rejected.<sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup> Following a major court loss on July 8, 2026, where Europe’s General Court upheld the DMA’s strict gatekeeper rules against Apple’s appeals,<sup><a href="#user-content-fn-6" id="user-content-fnref-6" data-footnote-ref="" aria-describedby="footnote-label">6</a></sup> Apple threw its hands up. Instead of complying, they took their ball and went home, indefinitely blocking the new Siri AI for the entire European market.</p>
<p>Apple’s public defense is entirely predictable: <em>Privacy and Security</em>. They claim that granting third-party AIs the deep system access required by the DMA is fundamentally dangerous, arguing that it is impossible to mitigate the risks of bad actors scraping user data.</p>
<p>But when you actually scrutinize this argument, it completely falls apart under basic technical and logical analysis.</p>
<h4 id="1-the-solvable-engineering-problem-the-waterfall-proxy-solution">1. The Solvable Engineering Problem (The Waterfall Proxy Solution)</h4>
<p>Apple’s claim that it is “impossible” to safely comply with the interoperability rules is an insult to their users’ intelligence. As anyone with a background in software web development knows, secure data isolation and intermediary routing are highly solvable problems.</p>
<p>Instead of allowing third-party AI systems direct, unfettered access to core system hooks, Apple could easily engineer a <strong>waterfall proxy architecture</strong> at the OS level. This middle layer would sequentially intercept, authenticate, and safely sandbox third-party AI requests before routing them to system apps. It would act as a secure buffer, ensuring external assistants never directly touch raw underlying data. Apple has the best software engineering talent in the world; they didn’t fail to build this because it was a technical impossibility. They failed because they chose to spend their resources paying lawyers to fight the EU in court, hoping to protect their monopoly.</p>
<h4 id="2-the-patronizing-consent-argument">2. The Patronizing “Consent” Argument</h4>
<p>Apple’s stance relies on the idea that users are fundamentally incapable of managing their own risks. In modern software, we already use a robust “inform and opt-in” model. iOS asks us explicitly if we want to grant an app access to our camera, our location, or our microphone.</p>
<p>If Apple genuinely cared about user choice, they could implement a clear, highly specific warning screen:</p>
<blockquote>
<p><em>“Warning: Granting this third-party AI system access allows it to process your screen and personal data. Proceed at your own risk.”</em></p>
</blockquote>
<p>Let the user decide. Instead, Apple’s logic is patronizing: <em>We don’t trust you to make the right choice with your own hardware, so we are stripping the feature entirely.</em></p>
<h4 id="3-the-macos-hypocrisy">3. The macOS Hypocrisy</h4>
<p>The most glaring hole in Apple’s defense is macOS. On a Mac, you can download whatever third-party software you want from the open web, grant it deep accessibility permissions to read your screen, and Apple trusts you to manage it. macOS is currently exempt from the DMA’s strictest mobile gatekeeper rules, so Apple allows this freedom there.<sup><a href="#user-content-fn-7" id="user-content-fnref-7" data-footnote-ref="" aria-describedby="footnote-label">7</a></sup> The “unmitigated danger” they claim exists on iOS mysteriously vanishes when it comes to their desktop operating system.</p>
<hr>
<h2 id="double-gatekeeping-software-blocks-and-hardware-taxes">Double Gatekeeping: Software Blocks and Hardware Taxes</h2>
<p>To make matters worse, Apple is running a double-gatekeeping scheme. Even if you live outside the EU and can access these features, Apple has weaponized software updates to force a hardware super-cycle.</p>
<p>While the baseline requirement for Apple Intelligence started at the iPhone 15 Pro, running the localized, advanced voice models introduced for iOS 27 now requires devices with at least 12GB of RAM<sup><a href="#user-content-fn-8" id="user-content-fnref-8" data-footnote-ref="" aria-describedby="footnote-label">8</a></sup>—conveniently locking out users who bought flagships just a year or two ago. They are squeezing users on hardware requirements while simultaneously cutting off software access for an entire continent.</p>
<p>Meanwhile, competitors like Google and Samsung actually chose to respect their users. They adapted to the EU’s regulations, pushed Gemini and Galaxy AI to their European customers, and even backported advanced features to older hardware like the S22 series.<sup><a href="#user-content-fn-9" id="user-content-fnref-9" data-footnote-ref="" aria-describedby="footnote-label">9</a></sup> They played by the rules and delivered the technology.</p>
<hr>
<h2 id="prediction-the-long-walk-to-2027">Prediction: The Long Walk to 2027</h2>
<p>Where does this leave us? Right now, Apple is playing a corporate game of chicken, using millions of European users as leverage to pressure regulators. But Europe is too massive a market for Apple to permanently offer a degraded, second-rate product.</p>
<p>My prediction is that Apple will eventually be forced to cave, but it won’t be quick. They will likely spend the rest of 2026 licking their wounds from their recent court defeat. Only then will they quietly begin engineering the secure proxy APIs they should have built in the first place. We likely won’t see the new Siri experience unlocked in the EU until a major point-update like iOS 27.5, or alongside iOS 28 in <strong>mid-to-late 2027</strong>.</p>
<hr>
<h2 id="time-to-exit-the-walled-garden">Time to Exit the Walled Garden</h2>
<p>This entire saga is a masterclass in corporate disrespect. I paid an incredible premium to enter this ecosystem, expecting a company that delivers on its promises. Instead, I was handed an artificially crippled device, caught in the crossfire of a political standoff that Apple manufactured by refusing to innovate within the law.</p>
<p>As a tech enthusiast who just wanted to experience their take on the future of computing, they have devastatingly failed me. I refuse to hold onto devices that treat me like a second-class consumer while a four-year-old Samsung phone handles modern AI workflows with ease.</p>
<p>I am officially done waiting. It is time to offload my Apple devices on the secondary market, liquidate the Apple stock in my portfolio, and return to an ecosystem that actually functions, respects its users, and innovates without holding its customers hostage.</p>
<hr>
<section data-footnotes="" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2>
<ol>
<li id="user-content-fn-1">
<p><a href="https://www.apple.com/newsroom/2024/06/apple-introduces-apple-intelligence-for-iphone-ipad-and-mac/">Apple introduces Apple Intelligence</a> (Apple Newsroom, WWDC 2024 announcement). <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-2">
<p><a href="https://www.cnbc.com/2024/06/21/apple-says-it-wont-roll-out-ai-features-in-europe-due-to-regulatory-concerns.html">Apple says it won’t roll out AI features in Europe due to regulatory concerns</a> (CNBC, June 21, 2024 — details the initial EU delay of Apple Intelligence, iPhone Mirroring, and SharePlay). <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><a href="https://www.apple.com/newsroom/2026/06/due-to-dma-siri-ai-delayed-in-eu-for-ios-27-and-ipados-27/">Due to DMA, Siri AI delayed in EU for iOS 27 and iPadOS 27</a> (Apple Newsroom, June 8, 2026 — Apple’s own statement confirming Siri AI ships on macOS 27 and visionOS 27 but not iOS 27, iPadOS 27, or watchOS 27 in the EU). <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><a href="https://commission.europa.eu/strategy-and-policy/priorities-2019-2024/europe-fit-digital-age/digital-markets-act-ensuring-fair-and-open-digital-markets_en">The Digital Markets Act: ensuring fair and open digital markets</a> (European Commission official overview). <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><a href="https://www.macrumors.com/2026/06/09/eu-says-decision-not-to-launch-siri-ai-in-europe-is-apples/">EU Says Decision Not to Launch Siri AI in Europe Is Apple’s Alone</a> (MacRumors, June 9, 2026 — reports that the Commission says Apple never submitted a concrete Trusted System Agent proposal and instead sought a blanket exemption from its interoperability obligations, which the Commission does not offer). <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><a href="https://www.macrumors.com/2026/07/08/apple-loses-eu-fight-app-store-gatekeeper-label/">Apple Loses EU Fight Over App Store Gatekeeper Label</a> (MacRumors, July 8, 2026); see also the <a href="https://curia.europa.eu/site/upload/docs/application/pdf/2026-07/cp260096en.pdf">General Court’s official press release</a> (Court of Justice of the European Union, July 2026), confirming the General Court dismissed Apple’s challenge to its gatekeeper designation for the App Store and iOS. <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><a href="https://dataconomy.com/2026/07/09/eu-court-rejects-apple-digital-markets-act-gatekeeper-tag/">Apple loses EU court fight over App Store ‘gatekeeper’ status</a> (Dataconomy, July 9, 2026 — notes macOS has not been designated a core platform service under the DMA, unlike iOS); corroborated by Apple’s own <a href="https://www.apple.com/newsroom/2026/06/due-to-dma-siri-ai-delayed-in-eu-for-ios-27-and-ipados-27/">June 2026 statement</a> that Siri AI shipped on macOS 27 in the EU while withheld from iOS 27 and iPadOS 27. <a href="#user-content-fnref-7" data-footnote-backref="" aria-label="Back to reference 7" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-8">
<p><a href="https://www.macrumors.com/2026/06/08/most-powerful-on-device-ai-now-requires-iphone-17-pro-or-air/">Apple’s Most Powerful On-Device AI Now Requires iPhone 17 Pro or iPhone Air</a> (MacRumors, June 8, 2026 — the most advanced on-device model in iOS 27 requires 12GB of unified memory, up from the previous 8GB Apple Intelligence baseline, excluding devices like the base iPhone 17). <a href="#user-content-fnref-8" data-footnote-backref="" aria-label="Back to reference 8" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-9">
<p><a href="https://news.samsung.com/global/samsung-brings-galaxy-ai-to-more-galaxy-devices">Samsung brings Galaxy AI to more Galaxy devices</a> (Samsung Newsroom — officially backporting AI features to the Galaxy S22 series). <a href="#user-content-fnref-9" data-footnote-backref="" aria-label="Back to reference 9" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content></entry><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>Why I&apos;m Closing My Twitter Account</title><id>https://ali.mk/posts/why-im-closing-my-twitter-account/</id><link href="https://ali.mk/posts/why-im-closing-my-twitter-account/" /><published>2024-08-25T00:00:00.000Z</published><updated>2024-08-25T00:00:00.000Z</updated><summary>On platforms, principles, and what we owe the places where we speak.</summary><category term="social media" /><category term="digital freedom" /><category term="platform accountability" /><content type="html"><![CDATA[<p>After more than a decade on Twitter, a platform I joined in 2011 to stay informed on political news, technological advancements, and to engage in discussions on topics I am passionate about, I’ve made the decision to close my account. This decision is driven by the recent developments that have fundamentally altered the nature of the platform.</p>
<p>The acquisition of Twitter by Elon Musk, and the subsequent rebranding to X, marks a significant shift in how the platform is governed and utilized. While I recognize that capitalism allows for such moves, I firmly believe that platforms that have become essential tools for communication in our society should not be subject to the whims of a single individual or a small group. The actions taken by Musk—limiting freedom of speech, reinstating controversial figures, and manipulating algorithms to serve personal interests—are deeply troubling and contrary to the values of open and fair communication.</p>
<p><img src="/assets/images/posts/twitterx.webp" alt="">
I signed up for Twitter, not X, and I do not agree with the new terms and conditions imposed by this transformation. While I acknowledge that this decision comes later than perhaps it should have, I am closing my Twitter account today in protest of these changes.</p>
<p>For those who wish to stay in touch, you can find alternative ways to connect with me through the contact details available on my website. I look forward to continuing our conversations on platforms that respect the diversity of thought and the integrity of open communication.</p>]]></content></entry><entry><title>The Role of Noises in Chinese Dining Etiquette: A Cultural Insight</title><id>https://ali.mk/posts/noises-in-chinese-dining-etiquette/</id><link href="https://ali.mk/posts/noises-in-chinese-dining-etiquette/" /><published>2024-08-20T00:00:00.000Z</published><updated>2024-08-20T00:00:00.000Z</updated><summary>Slurping, burping, and rènao — why a good meal in China is supposed to be loud, and what the old ritual texts actually said about it.</summary><category term="china" /><category term="culture" /><category term="food" /><content type="html"><![CDATA[<p>Sit down at a proper Chinese banquet and the first thing you notice isn’t the food — it’s the noise. The lazy Susan creaks as someone spins it toward the last dumpling. Ice cracks in a dozen glasses. Someone two seats over is halfway through a bowl of noodle soup, slurping with real commitment. Over all of it, a half-dozen conversations run at full volume, punctuated by toasts. If you grew up eating dinner in near-silence, your instinct is to apologize for existing.</p>
<p>That instinct is misplaced. The noise isn’t a lapse in manners — it has a name, 热闹 (<em>rènao</em>, literally “hot and noisy”), and in Chinese social life it isn’t the exception to a good meal. It’s closer to the definition of one.</p>
<h2 id="rènao-the-case-for-a-loud-table">Rènao: the case for a loud table</h2>
<p><em>Rènao</em> is one of those words that resists a clean English translation, built from 热 (hot) and 闹 (noisy, bustling). Marketing researchers who set out to pin it down found it clusters around a specific set of associations — crowds, food, noise, and a sense of occasion — that Chinese consumers consistently link to a <em>successful</em> social space.<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup> A restaurant that’s dead silent isn’t calm, in this reading; it’s failing. A wedding banquet, a hotpot dinner where six people are talking over each other, a market at dusk — these are <em>rènao</em>, and <em>rènao</em> is good. It’s the same logic behind the firecrackers and gongs at Lunar New Year: noise announces that something worth celebrating is happening, and it’s meant to be heard.</p>
<p>Slurping and burping sit inside that framework. They’re not purely about the food-appreciation angle the internet loves to repeat, though that’s part of it — they’re evidence that you’ve relaxed into the room. Eating in total silence at a family dinner reads less like discipline and more like distance.</p>
<h2 id="the-actual-physics-of-a-slurp">The actual physics of a slurp</h2>
<p><img src="/assets/images/posts/lanzhou-beef-noodles.jpg" alt="A bowl of Lanzhou beef noodle soup, hand-pulled noodles in a clear broth">
<em>Lanzhou beef noodle soup — the kind of bowl slurping was made for.</em></p>
<p>There’s also a mechanical reason the sound happens at all, and it’s the same one across the noodle-eating world. Pulling broth and noodles in fast draws a rush of air in alongside them, which does two things at once: it cools food that’s often served close to boiling, and it aerosolizes the broth’s aromatic compounds, forcing them up the back of the throat toward the olfactory receptors behind the nose. That pathway is called retronasal olfaction, and it’s most of what “flavor” means once you get past the five basic tastes. A 2021 study in <em>Frontiers in Nutrition</em> found that more vigorous, more numerous chewing strokes measurably increase the concentration of aroma compounds reaching the nose — more forceful eating quite literally tastes like more.<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="" aria-describedby="footnote-label">2</a></sup></p>
<p>Japan’s soba shops arrived at the same mechanism from the opposite direction. Soba culture took shape in Edo-period Tokyo, where buckwheat noodles were cheap, fast food sold from street stalls to laborers eating standing up — no time and no occasion for the formality of a sit-down meal. Slurping (<em>susuru</em>) caught on partly because cold soba’s aroma is faint, and drawing it in fast with a rush of air is close to the only way to taste it at all; one Tokyo soba-shop owner has compared the technique directly to how a sommelier aerates wine.<sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="" aria-describedby="footnote-label">3</a></sup> It’s a strikingly similar physical trick to the Chinese case, arrived at from a completely different direction — Japan’s noodle noise grew out of the practical demands of cheap street food, China’s grew out of a broader value placed on a lively table. The sound is the same. The reason for it isn’t.</p>
<h2 id="what-the-old-rules-actually-said">What the old rules actually said</h2>
<p>This is the part the “ancient Chinese tradition” version of this story usually skips: the classical texts most associated with Chinese dining ritual don’t endorse noise. They endorse the opposite.</p>
<p>The <em>Analects</em> record Confucius eating in careful, deliberate quiet: “When eating, he did not converse. When in bed, he did not speak.”<sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="" aria-describedby="footnote-label">4</a></sup> It’s not a throwaway line, either — a South China Morning Post columnist recently traced her own family’s mealtime silence straight back to it, describing a childhood where talking at dinner simply wasn’t done, on the belief (also drawn from traditional Chinese medicine) that conversation, and even too much liquid, worked against digestion.<sup><a href="#user-content-fn-5" id="user-content-fnref-5" data-footnote-ref="" aria-describedby="footnote-label">5</a></sup> The <em>Book of Rites</em> (<em>Liji</em>), one of the Five Classics compiled from Zhou-dynasty material, goes further, devoting whole passages to the correct choreography of a banquet: who sits facing the door, who tastes the food first, how dishes are apportioned down the table.<sup><a href="#user-content-fn-6" id="user-content-fnref-6" data-footnote-ref="" aria-describedby="footnote-label">6</a></sup> Anthropologist Eugene Cooper’s field account of contemporary Chinese table manners makes the same argument from the other end — much of what happens at a Chinese table, he writes, is a system for communicating rank and relationship, dressed up as generosity: who serves whom, who eats first, who gets the best piece.<sup><a href="#user-content-fn-7" id="user-content-fnref-7" data-footnote-ref="" aria-describedby="footnote-label">7</a></sup> None of that is loud. It’s closer to choreography than celebration.</p>
<p>Even now, etiquette guides written for a Chinese audience keep both halves of this alive without much apparent friction. A list of core table manners circulated by the World Federation of Chinese Catering Industry puts “the eldest tastes first” right next to “keep quiet while eating, per Confucius” — two rules from the same code, neither one about slurping.<sup><a href="#user-content-fn-8" id="user-content-fnref-8" data-footnote-ref="" aria-describedby="footnote-label">8</a></sup></p>
<p>So the honest version of this story runs on two registers, not one continuous “ancient tradition of joyful noise.” A formal register — quiet, hierarchical, closely watched — inherited from ritual texts over two thousand years old. And a separate, more vernacular register, <em>rènao</em>, that prizes exactly the opposite: noise, crowding, a table so alive it spills over. Slurping your soup lives entirely in the second register. Do it in front of the wrong people at the wrong table and you’ll get a very different reaction than you will halfway through a hotpot with friends.</p>
<h2 id="same-country-different-room">Same country, different room</h2>
<p>That’s really the throughline: how much noise is welcome depends far more on the room than the country. A business banquet in Beijing runs on the formal register — assigned seating built around seniority, a fixed order for toasts, a junior colleague angling their glass slightly lower than a senior’s when clinking, as a small, wordless sign of deference.<sup><a href="#user-content-fn-9" id="user-content-fnref-9" data-footnote-ref="" aria-describedby="footnote-label">9</a></sup> A hotpot dinner with friends in Chengdu runs on <em>rènao</em>, and nobody there is quietly monitoring anyone’s noodle technique.</p>
<p>Journalist Luisa Tam put the personal version of this well, in a column defending her own eating habits abroad. She’ll adjust plenty about how she eats when she travels, she wrote — but she wasn’t going to sit through a bowl of noodles in dignified silence and pretend she wasn’t enjoying them. After warning her French hosts what was coming, she “slurped through it unashamedly” until the bowl was empty, and came away, in her words, feeling liberated.<sup><a href="#user-content-fn-10" id="user-content-fnref-10" data-footnote-ref="" aria-describedby="footnote-label">10</a></sup></p>
<p>Burping gets folded into the same story constantly — you’ll find it stated flatly, across a hundred travel guides, that a burp is a compliment to the chef in China. Treat that one with a bit more caution than the slurping claim. It’s real enough as a piece of folk belief and older etiquette, repeated in guide after guide for decades,<sup><a href="#user-content-fn-11" id="user-content-fnref-11" data-footnote-ref="" aria-describedby="footnote-label">11</a></sup> but it’s also one of the first things to have softened with a generation raised on international travel and Western dining norms — particularly in cities, and particularly at anything resembling a formal meal. It hasn’t disappeared. It’s just no longer quite the safe bet the internet makes it out to be.</p>
<h2 id="conclusion">Conclusion</h2>
<p>None of this makes the popular version of the story wrong, exactly. Slurping really is fine, often genuinely appreciated, and physically tied to how the food actually tastes. It just isn’t a straight line back to some unbroken ancient custom of joyful eating noise — it’s closer to a compromise Chinese dining culture has always negotiated between two real, competing instincts: the old ritual insistence on order and restraint, and a newer, equally strong sense that a good table should sound like one. Next time you’re at a meal that’s properly <em>rènao</em> — loud, crowded, dish after dish still arriving — slurp with a clear conscience. Just read the room first.</p>
<p><em>Photo credits: cover photo by <a href="https://commons.wikimedia.org/wiki/File:Chinese_banquet_in_a_banquet_hall.JPG">Ctny</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a>); noodle-soup photo by <a href="https://commons.wikimedia.org/wiki/File:Lanzhou_Ramen.JPG">Berthe</a> (<a href="https://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>), both 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>Warden, C.A., &#x26; Chen, J.F. (2009). <a href="https://doi.org/10.1108/13555850910950040">When hot and noisy is good: Chinese values of renao and consumption metaphors</a>. <em>Asia Pacific Journal of Marketing and Logistics</em>, 21(2), 216–231. <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-2">
<p>Okawa, J., Hori, K., Yoshimoto, T., Salazar, S.E., &#x26; Ono, T. (2021). <a href="https://doi.org/10.3389/fnut.2021.623507">Higher masticatory performance and higher number of chewing strokes increase retronasal aroma</a>. <em>Frontiers in Nutrition</em>, 8, 623507. <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>Motohashi, T. (2017, June 20). <a href="https://www.nippon.com/en/views/b07501/">A Cultural History of Noodle Slurping</a>. <em>Nippon.com</em> — soba-shop owner Horii Yoshinori compares slurping’s aroma-release effect to wine-tasting technique. <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><em>The Analects</em>, Book X (“Xiang Dang”), trans. James Legge, via the <a href="https://ctext.org/analects/xiang-dang">Chinese Text Project</a>. <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>Yang, X. (2026, June 27). <a href="https://www.scmp.com/opinion/china-opinion/article/3358413/talking-when-you-eat-bad-you-and-other-chinese-beliefs">Talking when you eat is bad for you, and other Chinese beliefs</a>. <em>South China Morning Post</em>. <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><a href="https://www.britannica.com/topic/Liji">Liji</a>. <em>Encyclopaedia Britannica</em> — overview of the Book of Rites’ place in the Confucian ritual canon and its treatment of banquet and ceremonial procedure. <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>Cooper, E. (1986). <a href="https://doi.org/10.17730/humo.45.2.4034u85x3058m025">Chinese Table Manners: You Are How You Eat</a>. <em>Human Organization</em>, 45(2), 179–184. <a href="#user-content-fnref-7" data-footnote-backref="" aria-label="Back to reference 7" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-8">
<p><a href="https://artsandculture.google.com/story/8-tips-for-chinese-table-manners-world-federation-of-chinese-catering-industry/rAURl4mH72mvmQ">8 Tips for Chinese Table Manners</a>, World Federation of Chinese Catering Industry, via Google Arts &#x26; Culture. <a href="#user-content-fnref-8" data-footnote-backref="" aria-label="Back to reference 8" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-9">
<p><a href="https://harris-sliwoski.com/chinalawblog/chinese-business-dinner-etiquette-the-essentials/">Chinese Business Dinner Etiquette: The Essentials</a> (China Law Blog, Harris Sliwoski LLP, updated 2025-09-24 — on toast order, seating by seniority, and glass-clinking etiquette). <a href="#user-content-fnref-9" data-footnote-backref="" aria-label="Back to reference 9" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-10">
<p>Tam, L. (2018, December 3). <a href="https://www.scmp.com/news/hong-kong/society/article/2176092/its-nice-respect-different-cultures-table-manners-i-wont-stop">It’s nice to respect different cultures’ table manners – but I won’t stop slurping my soup noodles</a>. <em>South China Morning Post</em>. <a href="#user-content-fnref-10" data-footnote-backref="" aria-label="Back to reference 10" class="data-footnote-backref">↩</a></p>
</li>
<li id="user-content-fn-11">
<p><a href="https://www.rd.com/list/rude-american-manners/">Where Is Burping a Compliment? 14 Global Etiquette Differences</a>. <em>Reader’s Digest</em>. <a href="#user-content-fnref-11" data-footnote-backref="" aria-label="Back to reference 11" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></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>ADHD Care and Diagnosis in Sweden</title><id>https://ali.mk/posts/adhd-diagnosis-in-sweden/</id><link href="https://ali.mk/posts/adhd-diagnosis-in-sweden/" /><published>2023-10-23T00:00:00.000Z</published><updated>2023-10-23T00:00:00.000Z</updated><summary>The practical, bureaucratic, and emotional map of getting assessed in Stockholm.</summary><category term="adhd" /><category term="sweden" /><category term="mental health" /><content type="html"><![CDATA[<!--  -->
<h1 id="adhd-in-sweden">ADHD in Sweden</h1>
<p>In Sweden, <strong>Attention Deficit Hyperactivity Disorder (ADHD)</strong> is recognized as a neurodevelopmental disorder and is diagnosed and treated within both the public healthcare system and the private healthcare sector. Sadly, the quality of care differs significantly between the two — private care is generally far better resourced than its public counterpart. The public healthcare system in Sweden is overwhelmed and heavily understaffed in terms of specialists, nurses, and therapists. This has led to <em>long waiting times</em> for diagnosis and treatment of ADHD, especially for adults.</p>
<p>In this post, I share general information about how to start getting help — whether you have already been diagnosed with ADHD or suspect you might have it. I also share my personal experience navigating the public healthcare system in Stockholm, including the challenges I have faced and some practical approaches that have worked for me.</p>
<p>In Swedish society, ADHD as a term is fairly well-known — but usually only at a surface level. People tend to have a general awareness of the broad symptoms, which can sometimes give those of us <em>with</em> ADHD the mistaken impression that others truly understand our day-to-day challenges. Unfortunately, that is rarely the case.</p>
<p>One of the most important early steps you can take is to <strong>educate your immediate manager, colleagues, friends, and family</strong> about ADHD — specifically, how it affects <em>you</em>, and how they can support you. This is especially valuable in the workplace, where difficulties with time management, organization, and communication are common. By creating that awareness around you, you can build a more supportive environment, avoid unnecessary conflicts, and reduce misunderstandings that are not your fault to begin with. Below, I have collected some of the best resources in both Swedish and English to help you do that.</p>
<h2 id="swedish-adhd-websites">Swedish ADHD Websites</h2>
<ul>
<li><strong><a href="https://www.1177.se/sjukdomar--besvar/hjarna-och-nerver/neuropsykiatriska-funktionsnedsattningar/adhd/">1177.se – Adhd</a></strong> — Sweden’s official healthcare guide. Explains what ADHD is, symptoms, diagnosis criteria, and treatments (including medication). Written in plain, accessible Swedish. A great starting point for anyone with no prior background. <a href="https://www.1177.se/sjukdomar--besvar/hjarna-och-nerver/neuropsykiatriska-funktionsnedsattningar/adhd/">1177</a></li>
<li><strong><a href="https://www.hjarnfonden.se/om-hjarnan/diagnos/adhd/vad-ar-adhd-hos-barn/">Hjärnfonden – Adhd hos barn</a> &#x26; <a href="https://www.hjarnfonden.se/om-hjarnan/diagnos/adhd/vad-ar-adhd-hos-vuxna/">Adhd hos vuxna</a></strong> — The Brain Foundation of Sweden. Has separate, well-structured pages for ADHD in children and adults. Both were updated in May 2026, so the content is current. <a href="https://www.hjarnfonden.se/om-hjarnan/diagnos/adhd/vad-ar-adhd-hos-barn/">hjarnfonden</a></li>
<li><strong><a href="https://attention.se">Riksförbundet Attention (attention.se)</a></strong> — Sweden’s main interest organization for people with neuropsychiatric conditions (NPF), including ADHD. Aimed at people with ADHD, their families, and professionals. Also runs <strong>attentionung.se</strong> specifically for young people. <a href="https://www.funktionshindersguiden.se/intresseorganisationer/attention/">funktionshindersguiden</a></li>
<li><strong><a href="https://www.vardochinsats.se/adhd/om-tillstaandet/adhd-hos-barn-ungdomar-och-vuxna/">Vardochinsats.se – Adhd</a></strong> — National program for care and support. More detailed clinical information, updated December 2024, covering children, adolescents, and adults. Good if you want deeper reading. <a href="https://www.vardochinsats.se/adhd/om-tillstaandet/adhd-hos-barn-ungdomar-och-vuxna/">vardochinsats</a></li>
<li><strong><a href="https://kunskapsguiden.se/omraden-och-teman/funktionshinder/adhd/utredning-och-diagnos/">Kunskapsguiden.se – Adhd</a></strong> — Run by the Swedish National Board of Health and Welfare (Socialstyrelsen). Covers diagnosis, investigation, and treatment. Updated November 2025. More technical, but thorough. <a href="https://kunskapsguiden.se/omraden-och-teman/funktionshinder/adhd/utredning-och-diagnos/">kunskapsguiden</a></li>
<li><strong><a href="https://www.habilitering.se/om-oss/vara-mottagningar/adhd-center/">Habilitering.se – Adhd-center</a></strong> — Region Stockholm’s ADHD center. Offers practical tips for everyday life, particularly for families with children. <a href="https://www.habilitering.se/om-oss/vara-mottagningar/adhd-center/">habilitering</a></li>
<li><strong><a href="https://www.understood.org/en/topics/adhd">Understood.org – ADHD Explained</a></strong> — An English-language resource from the US, but very accessible and well-structured. Covers all aspects of ADHD clearly.
<strong>Best for a total beginner:</strong> Start with <strong>1177.se</strong> for a clear overview, then <strong>Hjärnfonden</strong> for more depth.</li>
</ul>
<p>On top of that, the best video I have ever seen explaining ADHD is a 30-minute talk by <strong>Dr. Brown</strong>, a clinical psychologist and ADHD expert. He explains ADHD in a simple, clear, and deeply human way — and helps people <em>without</em> ADHD understand the real challenges those of us with it face every day. I highly recommend sharing it with anyone you want to bring on board:</p>
<p><youtube id="ouZrZa5pLXk"></youtube></p>
<h2 id="recognition-as-a-disability">Recognition as a Disability</h2>
<p>In Sweden, ADHD is recognized as a disability under the <strong>Swedish Discrimination Act</strong> (<em>Diskrimineringslagen</em>). This means that individuals with ADHD are protected from discrimination in employment, education, and access to public services.</p>
<p>This recognition matters in practice. In the workplace, employers are <em>required</em> to provide reasonable accommodations — such as flexible working hours or modified responsibilities. In education, students with ADHD may be entitled to special services or academic accommodations. Even for things like the driver’s license theory exam, people with ADHD are allowed extra time and other adjustments.</p>
<p>Overall, this legal framework helps ensure that individuals with ADHD have equal access to support and the opportunity to thrive in both their personal and professional lives.</p>
<hr>
<h1 id="adhd-treatment-in-sweden">ADHD Treatment in Sweden</h1>
<p>To receive treatment for ADHD in Sweden, you need a diagnosis from a psychiatrist. In the public sector, there are specialized psychiatric centers for ADHD diagnosis and treatment, called <em><strong>ADHD-mottagning</strong></em> in Swedish. You can find a list of all <a href="https://www.1177.se/Stockholm/hitta-vard/?st=e4ffc212-8d33-4a35-8ad3-7ede300c4433&#x26;nearby=false&#x26;s=distance&#x26;g=&#x26;lat=&#x26;lng=&#x26;location=&#x26;caretype=ADHD&#x26;q=&#x26;openN=&#x26;openE=&#x26;openW=&#x26;openTN=&#x26;openTE=&#x26;openTW=&#x26;ow=&#x26;es=&#x26;l=&#x26;lq=">ADHD-mottagningar at 1177</a>.</p>
<p>Below is the general adult ADHD treatment pathway in Sweden:</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 TD</span></span>
<span class="line"><span style="color:#E1E4E8">    A([🏥 Initial Contact\nPrimary care or specialist psychiatry])</span></span>
<span class="line"><span style="color:#E1E4E8">    A --> B[📋 Initial Mapping\nFunctional &#x26; needs assessment]</span></span>
<span class="line"><span style="color:#E1E4E8">    B --> C[🤝 Early Support\nCan start before diagnosis based on need]</span></span>
<span class="line"><span style="color:#E1E4E8">    B --> D{🔍 Strong suspicion of ADHD\nand specialist assessment needed?}</span></span>
<span class="line"><span style="color:#E1E4E8"> </span></span>
<span class="line"><span style="color:#E1E4E8">    D -- No --> E([🔄 Continue support &#x26; follow-up\nat appropriate care level])</span></span>
<span class="line"><span style="color:#E1E4E8">    D -- Yes --> F[🧠 Diagnostic Assessment\nSpecialist psychiatry — Utredning]</span></span>
<span class="line"><span style="color:#E1E4E8"> </span></span>
<span class="line"><span style="color:#E1E4E8">    F --> G{📁 Documented prior diagnosis\naccepted after specialist review?}</span></span>
<span class="line"><span style="color:#E1E4E8">    G -- Yes --> H[📝 Individualized Treatment Plan\nwith assigned psychiatrist]</span></span>
<span class="line"><span style="color:#E1E4E8">    G -- No --> I[⏳ Complete diagnostic process\nWaiting list if needed]</span></span>
<span class="line"><span style="color:#E1E4E8">    I --> H</span></span>
<span class="line"><span style="color:#E1E4E8"> </span></span>
<span class="line"><span style="color:#E1E4E8">    H --> J([💊 Multimodal Treatment\nPsychoeducation · CBT / Group Therapy · OT · Medication when indicated])</span></span>
<span class="line"><span style="color:#E1E4E8"> </span></span>
<span class="line"><span style="color:#E1E4E8">    J --> K[📅 Weekly follow-ups\nDuring dose titration — after each dose increase\nBP &#x26; pulse · Effect &#x26; side effects · Adjust dose]</span></span>
<span class="line"><span style="color:#E1E4E8">    K --> L[📅 Structured review at 3–6 months\nAfter stable dose reached\nBP · pulse · weight · ASRS · function · adherence]</span></span>
<span class="line"><span style="color:#E1E4E8">    L --> M[📅 Follow-up every 6 months\nOngoing maintenance\nBP · pulse · weight · ASRS · symptoms · side effects]</span></span>
<span class="line"><span style="color:#E1E4E8">    M --> N([📅 Annual physician review\nEvaluate continued treatment &#x26; cardiovascular status])</span></span>
<span class="line"><span style="color:#E1E4E8"> </span></span>
<span class="line"><span style="color:#E1E4E8">    style A fill:#c6d8e4,stroke:#006494,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style B fill:#f9f8f5,stroke:#dcd9d5,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style C fill:#f9f8f5,stroke:#dcd9d5,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style D fill:#fef9e7,stroke:#c07d0a,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style E fill:#f9f8f5,stroke:#dcd9d5,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style F fill:#c6d8e4,stroke:#006494,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style G fill:#fef9e7,stroke:#c07d0a,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style H fill:#cedcd8,stroke:#01696f,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style I fill:#e7d7c4,stroke:#da7101,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style J fill:#d4dfcc,stroke:#437a22,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style K fill:#d4dfcc,stroke:#437a22,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style L fill:#d4dfcc,stroke:#437a22,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style M fill:#d4dfcc,stroke:#437a22,color:#1a1a1a</span></span>
<span class="line"><span style="color:#E1E4E8">    style N fill:#dacfde,stroke:#7a39bb,color:#1a1a1a</span></span></code></pre>
<!-- EMBED START: paste everything from here into your Jekyll markdown -->
<style>
@import url('https://api.fontshare.com/v2/css?f[]=satoshi@400,500,600,700&display=swap');
 
.ap{--ap-bg:#f7f6f2;--ap-surf:#ffffff;--ap-border:#dcd9d5;--ap-text:#28251d;--ap-muted:#7a7974;--ap-blue:#006494;--ap-blue-l:#ddeaf3;--ap-gold:#b87200;--ap-gold-l:#fef6e4;--ap-teal:#01696f;--ap-teal-l:#e0f0ef;--ap-green:#437a22;--ap-green-l:#e4f0da;--ap-orange:#c05e00;--ap-orange-l:#faeade;--ap-purple:#6b35a8;--ap-purple-l:#ede5f7;--ap-shadow:0 1px 3px rgba(0,0,0,.07),0 4px 12px rgba(0,0,0,.05);--ap-shadow-h:0 2px 8px rgba(0,0,0,.1),0 8px 24px rgba(0,0,0,.08);--ap-r:10px;font-family:'Satoshi',system-ui,sans-serif;background:var(--ap-bg);border-radius:16px;padding:2rem 1.5rem 2.5rem;max-width:700px;margin:0 auto;color:var(--ap-text);box-sizing:border-box}
.ap *{box-sizing:border-box}
 
/* ── Banner ── */
.ap-banner{background:var(--ap-teal-l);border:1px solid var(--ap-teal);border-radius:8px;padding:.6rem .9rem;font-size:.75rem;line-height:1.55;display:flex;gap:.55rem;align-items:flex-start;margin-bottom:2rem;color:var(--ap-text)}
.ap-banner svg{flex-shrink:0;color:var(--ap-teal);margin-top:1px}
.ap-banner a{color:var(--ap-teal);font-weight:600;text-decoration:underline;text-underline-offset:2px}
 
/* ── Flow column ── */
.ap-flow{display:flex;flex-direction:column;align-items:center}
 
/* ── Generic node ── */
.ap-node{width:100%;max-width:480px;border-radius:var(--ap-r);padding:.7rem 1.15rem;box-shadow:var(--ap-shadow);font-size:.855rem;font-weight:500;line-height:1.5;text-align:center;transition:box-shadow .18s,transform .18s;background:var(--ap-surf);border:1.5px solid var(--ap-border)}
.ap-node:hover{box-shadow:var(--ap-shadow-h);transform:translateY(-1px)}
.ap-node .ap-sub{display:block;font-size:.72rem;font-weight:400;color:var(--ap-muted);margin-top:.2rem}
.ap-node.ap-pill{border-radius:999px;padding:.65rem 1.5rem}
.ap-n-start{background:var(--ap-blue-l);border-color:var(--ap-blue)}
.ap-n-diag{background:var(--ap-orange-l);border-color:var(--ap-orange)}
.ap-n-psych{background:var(--ap-teal-l);border-color:var(--ap-teal)}
.ap-n-treat{background:var(--ap-green-l);border-color:var(--ap-green);font-weight:700;font-size:.9rem}
 
/* ── Straight arrow (between main-flow nodes) ── */
.ap-arr{width:2px;height:35px;background:var(--ap-border);margin:0px auto 3px auto;position:relative;flex-shrink:0}
.ap-arr::after{content:'';position:absolute;bottom:-1px;left:50%;transform:translateX(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:7px solid var(--ap-border)}
 
/* ── Fork section ──
   max-width 540px — the decision diamond + branches + merge all live here.
   Branch column centres: col-1 at 90px (16.7%), col-3 at 450px (83.3%).
   Both the combined fork SVG (xMidYMid meet) and the merge SVG
   (preserveAspectRatio=none) use x=90/x=450, so they always align with
   the 3-col CSS grid column centres at any rendered width.
── */
.ap-fork-section{width:100%;max-width:540px;display:flex;flex-direction:column}
.ap-fork-section>svg{width:100%;display:block}
 
/* ── Branches: 3 equal columns (No | gap | Yes) ── */
.ap-branches{display:grid;grid-template-columns:repeat(3,1fr);width:100%}
.ap-branch{display:flex;flex-direction:column;align-items:center;padding:0 .55rem}
.ap-branch .ap-node{max-width:100%;width:100%}
 
/* Small arrow within a branch path */
.ap-branch-arr{width:2px;height:18px;background:var(--ap-border);margin:0 auto;position:relative;flex-shrink:0}
.ap-branch-arr::after{content:'';position:absolute;bottom:-1px;left:50%;transform:translateX(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:7px solid var(--ap-border)}
 
/* Filler: flex:1 stretches both branch cols to equal height;
   ::before draws the vertical line running its full height */
.ap-branch-filler{flex:1;min-height:32px;position:relative;width:100%}
.ap-branch-filler::before{content:'';position:absolute;left:50%;transform:translateX(-50%);top:0;bottom:0;width:2px;background:var(--ap-border)}
 
/* ── Divider label ── */
.ap-divider{display:flex;align-items:center;gap:.6rem;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ap-muted);width:100%;max-width:480px;margin:.1rem 0}
.ap-divider::before,.ap-divider::after{content:'';flex:1;height:1px;background:var(--ap-border)}
 
/* ── Timeline ── */
.ap-tl{width:100%;max-width:480px;border-left:2px solid var(--ap-border);padding-left:1.5rem;display:flex;flex-direction:column;gap:1rem}
.ap-tl-item{position:relative}
/*
  Dot positioning:
    - .ap-tl has padding-left:1.5rem=24px and border-left:2px
    - .ap-tl-item left edge is at 24+2=26px from .ap-tl outer-left
    - We want dot centre (5px from left edge) ON the border centre (1px from outer-left)
    - dot left from item = 1 - 5 - 26 = -30px = calc(-1.5rem - 6px)
*/
.ap-tl-dot{position:absolute;left:calc(-1.5rem - 6px);top:.35rem;width:10px;height:10px;border-radius:50%;border:2.5px solid var(--ap-green);background:var(--ap-bg)}
.ap-tl-item.ap-tl-blue .ap-tl-dot{border-color:var(--ap-blue)}
/* Purple dot: hollow like all others — no background override */
.ap-tl-item.ap-tl-purple .ap-tl-dot{border-color:var(--ap-purple)}
.ap-tl-phase{display:inline-block;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--ap-muted);background:var(--ap-surf);border:1px solid var(--ap-border);border-radius:999px;padding:.15rem .5rem;margin-bottom:.3rem}
.ap-tl-time{font-size:.76rem;font-weight:700;color:var(--ap-green)}
.ap-tl-item.ap-tl-blue .ap-tl-time{color:var(--ap-blue)}
.ap-tl-item.ap-tl-purple .ap-tl-time{color:var(--ap-purple)}
.ap-tl-desc{font-size:.82rem;line-height:1.45;margin-top:.1rem}
.ap-tl-detail{font-size:.73rem;color:var(--ap-muted);margin-top:.1rem;line-height:1.4}
 
/* ── Footnote ── */
.ap-footnote{margin-top:2rem;padding:.9rem 1rem;background:var(--ap-surf);border:1px solid var(--ap-border);border-radius:10px;font-size:.73rem;color:var(--ap-muted);line-height:1.6}
.ap-footnote strong{color:var(--ap-text)}
.ap-footnote a{color:var(--ap-teal);text-decoration:underline;text-underline-offset:2px}
.ap-footnote ol{padding-left:1.1rem;margin-top:.45rem}
.ap-footnote li{margin-bottom:.25rem}
.ap-footnote p{margin-top:.5rem;font-size:.7rem}
 
/* ── Mobile ── */
@media(max-width:500px){
  .ap{padding:1.25rem 1rem 1.5rem}
  .ap-node{font-size:.8rem;padding:.6rem .9rem}
  .ap-branch{padding:0 .25rem}
}
</style>
<div class="ap">
<div class="ap-banner">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4M12 8h.01"></path></svg>
<span>Follow-up schedule based on <a href="https://www.vardochinsats.se/adhd/behandling-och-stoed/uppfoeljning-av-laekemedelsbehandling/" target="_blank" rel="noopener">Nationellt Vård- och Insatsprogram (NVP) for ADHD</a> &#x26; <strong>Socialstyrelsen Nationella Riktlinjer (2022)</strong>. Pathway structure reflects standard Swedish specialist psychiatry practice.</span>
</div>
<div class="ap-flow">
<!-- 1. Entry -->
<div class="ap-node ap-pill ap-n-start">🏥 Contact Vårdcentral</div>
<div class="ap-arr"></div>
<!-- 2. Remiss -->
<div class="ap-node">
Referral to ADHD Clinic
<span class="ap-sub">Remiss — via GP or self-referral to vuxenpsykiatri</span>
</div>
<div class="ap-arr"></div>
<!-- 3. Utredning -->
<div class="ap-node">
Utredning
<span class="ap-sub">Comprehensive neuropsychiatric investigation at the ADHD clinic</span>
</div>
<!-- No separate .ap-arr here: the fork SVG includes the incoming connector -->
<!-- ═══════════════════════════════════════════════════════════════
FORK SECTION
Combined SVG: connector + diamond + side arms + vertical drops
───────────────────────────────────────────────────────────────
viewBox 0 0 540 145
Diamond: "270,1 380,56 270,111 160,56"
· Width 220 units, Height 110 units → 2:1 ratio (classic)
· Centre at (270,56)
· Left tip  (160,56) → left arm  → x=90  (16.7% of 540)
· Right tip (380,56) → right arm → x=450 (83.3% of 540)
No/Yes badges drawn ON the arm lines, covering them visually.
Vertical drops from arm corners (x=90, x=450) end with arrowheads.
═══════════════════════════════════════════════════════════════ -->
<p><svg viewBox="0 0 540 124" xmlns="http://www.w3.org/2000/svg" width="100%" role="img" aria-label="Decision diamond: Prior diagnosis from abroad?">
<defs>
<filter id="ap-dshadow2" x="-12%" y="-12%" width="124%" height="124%">
<feDropShadow dx="0" dy="2" stdDeviation="4" flood-color="#00000010"></feDropShadow>
</filter>
</defs></svg></p>
<!-- Incoming connector from Utredning node above
<line x1="270" y1="0" x2="270" y2="20" stroke="#dcd9d5" stroke-width="2"/>
<polygon points="264,16 276,16 270,23" fill="#dcd9d5"/> -->
<!-- ── Diamond shape: width 220, height 110 → 2:1 ratio ── -->
<p><polygon points="270,1 380,56 270,111 160,56" fill="#fef6e4" stroke="#b87200" stroke-width="2" filter="url(#ap-dshadow2)"></polygon></p>
<!--
Diamond text (embedded in SVG so it scales with the shape).
Checked all lines fit within the polygon at their respective y values:
y=51 (5 above centre): available width ≈ 196u → "Prior diagnosis from abroad?" at 12px ≈ 165u ✓
y=65 (9 below centre): available width ≈ 184u → sub line 1 at 9.5px ≈ 155u ✓
y=76 (20 below centre): available width ≈ 140u → sub line 2 at 9.5px ≈ 124u ✓
-->
<p><text x="270" y="51" font-family="Satoshi,system-ui,-apple-system,sans-serif" font-size="12" font-weight="700" fill="#28251d" text-anchor="middle">Prior diagnosis from abroad?</text>
<text x="270" y="65" font-family="Satoshi,system-ui,-apple-system,sans-serif" font-size="9.5" font-weight="400" fill="#7a7974" text-anchor="middle">Formally documented &#x26; available</text>
<text x="270" y="76" font-family="Satoshi,system-ui,-apple-system,sans-serif" font-size="9.5" font-weight="400" fill="#7a7974" text-anchor="middle">at time of investigation</text></p>
<!-- ══ LEFT ARM (No path) ══
Arm from left diamond tip (160,56) → branch centre (90,56)
Badge centre at arm midpoint: x = (160+90)/2 = 125
Line drawn first; badge rect drawn over it (covers the line) -->
<line x1="160" y1="56" x2="90" y2="56" stroke="#dcd9d5" stroke-width="2">
<!-- No badge pill overlaid on arm -->
<rect x="101" y="46" width="48" height="20" rx="10" fill="#faeade" stroke="#c05e00" stroke-width="1.5">
<text x="125" y="60" font-family="Satoshi,system-ui,-apple-system,sans-serif" font-size="11" font-weight="700" fill="#c05e00" text-anchor="middle">No</text>
<!-- Left vertical drop → arrowhead tip at (90,121) -->
<line x1="90" y1="56" x2="90" y2="112" stroke="#dcd9d5" stroke-width="2">
<polygon points="84,112 96,112 90,118" fill="#dcd9d5">
<!-- ══ RIGHT ARM (Yes path) ══
Arm from right diamond tip (380,56) → branch centre (450,56)
Badge centre at arm midpoint: x = (380+450)/2 = 415 -->
<line x1="380" y1="56" x2="450" y2="56" stroke="#dcd9d5" stroke-width="2">
<!-- Yes badge pill overlaid on arm -->
<rect x="391" y="46" width="48" height="20" rx="10" fill="#e0f0ef" stroke="#01696f" stroke-width="1.5">
<text x="415" y="60" font-family="Satoshi,system-ui,-apple-system,sans-serif" font-size="11" font-weight="700" fill="#01696f" text-anchor="middle">Yes</text>
<!-- Right vertical drop → arrowhead tip at (450,120) -->
<line x1="450" y1="56" x2="450" y2="112" stroke="#dcd9d5" stroke-width="2">
<polygon points="444,112 456,112 450,118" fill="#dcd9d5">

<!-- ── Branches: 3-col grid (No | spacer | Yes) ──
Col centres: 540/6=90px and 540*5/6=450px
→ aligns with x=90 and x=450 in both SVGs above and below ✓ -->
<div class="ap-branches">
<!-- No branch (col 1) -->
<div class="ap-branch">
<div class="ap-node ap-n-diag">
Placed on Diagnosis<br>Waiting List
</div>
<div class="ap-branch-arr"></div>
<div class="ap-node ap-n-diag">
✓ Diagnosis confirmed
</div>
<!-- filler extends the vertical connector line to the grid row bottom -->
<div class="ap-branch-filler"></div>
</div>
<!-- Middle spacer (col 2): empty — no line drawn here -->
<div></div>
<!-- Yes branch (col 3) -->
<div class="ap-branch">
<div class="ap-node ap-n-psych">
Assigned Psychiatrist<br>&#x26; Treatment Plan
</div>
<!-- filler stretches to match No-branch height -->
<div class="ap-branch-filler"></div>
</div>
</div><!-- end .ap-branches -->
<!-- ── Merge SVG ──
preserveAspectRatio="none" keeps height fixed while x-coords scale:
at 540px: x=90 → 90px, x=450 → 450px (match col centres) ✓
at 400px: x=90 → 66.7px, x=450 → 333.3px (still match 1/3 and 5/6) ✓ -->
<p><svg viewBox="0 0 540 42" height="42" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" width="100%" aria-hidden="true">
<line x1="90" y1="0" x2="90" y2="20" stroke="#dcd9d5" stroke-width="2"></line>
<line x1="450" y1="0" x2="450" y2="20" stroke="#dcd9d5" stroke-width="2"></line>
<line x1="90" y1="20" x2="450" y2="20" stroke="#dcd9d5" stroke-width="2"></line>
<line x1="270" y1="20" x2="270" y2="34" stroke="#dcd9d5" stroke-width="2"></line>
<polygon points="264,32 276,32 270,42" fill="#dcd9d5"></polygon>
</svg></p>
</polygon></line></rect></line></polygon></line></rect></line></div><!-- end .ap-fork-section -->
<!-- 5. Treatment -->
<div class="ap-node ap-n-treat">
💊 Treatment
<span class="ap-sub" style="font-size:.78rem">Medication (stimulant / non-stimulant)  ·  Psychoeducation  ·  CBT / Group Therapy  ·  Occupational Therapy</span>
</div>
<div class="ap-arr"></div>
<!-- Divider -->
<div class="ap-divider">Follow-up schedule — per NVP / Socialstyrelsen</div>
<div class="ap-arr"></div>
<!-- Timeline -->
<div class="ap-tl">
<div class="ap-tl-item">
<div class="ap-tl-dot"></div>
<div class="ap-tl-phase">Phase 1 — Dose titration</div>
<div class="ap-tl-time">Weekly — after each dose increase</div>
<div class="ap-tl-desc">Follow-up — Nurse (or Psychiatrist)</div>
<div class="ap-tl-detail">Blood pressure &#x26; pulse  ·  Effect &#x26; side effects  ·  Increase dose if tolerated  ·  Continue until optimal dose is reached</div>
</div>
<div class="ap-tl-item ap-tl-blue">
<div class="ap-tl-dot"></div>
<div class="ap-tl-phase">Phase 2 — Maintenance dose reached</div>
<div class="ap-tl-time">3–6 months after stable dose</div>
<div class="ap-tl-desc">Structured follow-up — Psychiatrist &#x26; Nurse</div>
<div class="ap-tl-detail">Medication effect  ·  Symptoms &#x26; function  ·  Side effects &#x26; adherence  ·  BP, pulse &#x26; weight  ·  ASRS questionnaire  ·  Revise care plan if needed</div>
</div>
<div class="ap-tl-item ap-tl-blue">
<div class="ap-tl-dot"></div>
<div class="ap-tl-time">Every 6 months (ongoing)</div>
<div class="ap-tl-desc">Follow-up — Psychiatrist &#x26; Nurse</div>
<div class="ap-tl-detail">Medication effect  ·  Symptoms &#x26; function  ·  Side effects &#x26; adherence  ·  BP, pulse &#x26; weight  ·  ASRS questionnaire</div>
</div>
<div class="ap-tl-item ap-tl-purple">
<div class="ap-tl-dot"></div>
<div class="ap-tl-phase">Phase 3 — Long-term (layered on 6-month checks)</div>
<div class="ap-tl-time">Every 12 months (ongoing)</div>
<div class="ap-tl-desc">Annual follow-up with Physician</div>
<div class="ap-tl-detail">Evaluate need &#x26; conditions for continued medication  ·  Cardiovascular status check</div>
</div>
</div><!-- end .ap-tl -->
<!-- Footnote -->
<div class="ap-footnote" style="width:100%">
<strong>Sources</strong>
<ol>
<li><a href="https://www.vardochinsats.se/adhd/behandling-och-stoed/uppfoeljning-av-laekemedelsbehandling/" target="_blank" rel="noopener">NVP — Uppföljning av läkemedelsbehandling vid adhd</a>, Socialstyrelsen &#x26; SKR</li>
<li><a href="https://www.socialstyrelsen.se/kunskapsstod-och-regler/regler-och-riktlinjer/nationella-riktlinjer/" target="_blank" rel="noopener">Nationella riktlinjer för vård och stöd vid adhd och autism</a>, Socialstyrelsen (2022)</li>
<li><a href="https://www.vardochinsats.se/adhd/" target="_blank" rel="noopener">NVP för adhd — overview</a>, vardochinsats.se</li>
</ol>
<p>Note: Actual intervals may vary by region and clinical judgment. More frequent follow-up is warranted when new side effects or symptom worsening occur.</p>
</div>
</div><!-- end .ap-flow -->
<!-- end .ap -->
<!-- EMBED END -->
<h2 id="the-treatment-pathway--step-by-step">The Treatment Pathway — Step by Step</h2>
<p>Here is what each stage of the flowchart actually involves in practice:</p>
<p><strong>1. Initial Contact</strong>
Your journey begins at a primary care center (<em>Vårdcentral</em>) or, in some cases, directly with specialist psychiatry. You describe your difficulties to a general practitioner (GP), who assesses whether a referral to a specialist is appropriate.</p>
<p><strong>2. Initial Mapping and Needs Assessment</strong>
The GP or referring professional carries out a brief mapping of your functional needs — understanding how your symptoms affect daily life, work, and relationships. Based on this, <em>early support</em> such as practical coping strategies or workplace adjustments can begin even before a formal diagnosis is established.</p>
<p><strong>3. Decision Point: Specialist Assessment Needed?</strong>
If there is a strong enough suspicion of ADHD and specialist-level evaluation is warranted, a referral (<em>remiss</em>) is issued to an ADHD clinic. If not, support continues at the primary care level with regular follow-up.</p>
<p><strong>4. Diagnostic Assessment — <em>Utredning</em></strong>
At the specialist clinic, a thorough diagnostic process (<em>utredning</em>) is carried out by a psychiatrist. This typically includes structured clinical interviews, validated questionnaires (such as the ASRS), a review of your developmental history — and often, input from people who knew you in childhood, such as parents or teachers.</p>
<p><strong>5. Prior Diagnosis?</strong></p>
<ul>
<li><strong>If you have a documented diagnosis from abroad</strong>, the specialist reviews and validates it. If accepted, you are assigned a psychiatrist and a personalized treatment plan can begin within weeks — you can largely skip the waiting list.</li>
<li><strong>If no prior diagnosis exists</strong>, you enter the full diagnostic process, which may involve a waiting list of several months to over a year depending on the clinic and region.
<strong>6. Individualized Treatment Plan</strong>
Once diagnosed, you and your assigned psychiatrist co-create a treatment plan tailored to your specific profile, symptoms, and functional needs. This is <em>your</em> plan — bring your questions, your goals, and your history to this conversation.</li>
</ul>
<p><strong>7. Multimodal Treatment</strong>
Treatment in Sweden is <em>multimodal</em> in principle, meaning it is intended to combine several approaches. In practice, access to the non-medication components varies significantly by region and clinic:</p>
<ul>
<li>
<p><strong>Psychoeducation</strong>: Understanding how ADHD works and how it specifically affects you</p>
</li>
<li>
<p><strong>CBT and Group Therapy</strong>: Cognitive behavioural therapy or structured group sessions (where available — often only in Swedish)</p>
</li>
<li>
<p><strong>Occupational Therapy (OT)</strong>: Practical strategies for day-to-day functioning, organization, and environment</p>
</li>
<li>
<p><strong>Medication</strong>: Stimulants (e.g., methylphenidate-based: <em>Ritalin</em>, <em>Concerta</em>, <em>Medikinet</em>, <em>Equasym</em>) or non-stimulants (e.g., <em>atomoxetine</em> / <em>Strattera</em>), when clinically indicated. The choice of medication and dosage is based on your individual symptoms, medical history, and response to treatment.
<strong>8. Follow-up Schedule</strong>
Follow-up is structured and progressive. Think of it like calibrating a new instrument — the early checks are frequent, and they gradually space out as things stabilize:</p>
</li>
<li>
<p><strong>During dose titration</strong>: Short check-ins after <em>each</em> dose increase — monitoring blood pressure, pulse, perceived effect, and side effects, with dosage adjusted as needed</p>
</li>
<li>
<p><strong>At 3–6 months</strong>: A structured review once a stable dose is reached — covering blood pressure, pulse, weight, ASRS score, functional status, and medication adherence</p>
</li>
<li>
<p><strong>Every 6 months</strong>: Ongoing maintenance visits covering the same parameters, plus symptom trajectory and any emerging concerns</p>
</li>
<li>
<p><strong>Annual physician review</strong>: A comprehensive evaluation of whether continued treatment is appropriate and a full cardiovascular status check</p>
</li>
</ul>
<hr>
<h1 id="adhd-diagnosis">ADHD Diagnosis</h1>
<p>Many people have asked me about the procedure for getting an ADHD diagnosis as a resident of Sweden (Swedish citizens and legal residents with a <em>personnummer</em> and state healthcare coverage). I have tried to summarize the process clearly below, and I will keep this post updated as things change.</p>
<p>Currently, there is an overwhelming number of patients on waiting lists across Sweden awaiting their initial appointment for ADHD assessment. This is especially severe in larger cities (Stockholm, Göteborg, Malmö). Waiting times for the initial appointment can reach up to two years — a long time to wait when you have been struggling for much of your life. That said, I have also heard of people reaching the diagnosis stage in around two months recently, so the picture is uneven.</p>
<p>Below are the two most practical routes to getting diagnosed while living in Sweden as an independent adult.</p>
<blockquote class="prompt-info">
<p>Beware that for all the ways below, you need to have a <a href="https://www.skatteverket.se/privat/folkbokforing/personnummer.4.3810a01c150939e893f18c29.html">personal number (personnummer)</a> and <a href="https://www.bankid.com/">BankID</a> already active.</p>
</blockquote>
<h2 id="diagnosis-in-sweden">Diagnosis in Sweden</h2>
<h3 id="1-get-a-referral-from-general-practitioner-for-a-psychiatrist">1. Get a Referral from General Practitioner for a Psychiatrist</h3>
<p>First, you need to be registered with a primary care center (<em>Vårdcentral</em>). You can find the closest one by searching “Vårdcentral” in Google Maps, or asking friends or colleagues for recommendations. Personally, I recommend using <a href="https://www.kry.se/">Kry</a>, which lets you book a video appointment with a GP quickly and without a physical visit.</p>
<p>When you meet the GP, be clear: tell them either that you have a prior ADHD diagnosis and wish to continue treatment in Sweden, or that you have been struggling with ADHD symptoms for a long time and would like to be assessed. <strong>Be specific about how your symptoms affect your daily life</strong> — this is what will support your referral.</p>
<h3 id="2-book-appointment-with-the-psychiatrist">2. Book Appointment with the Psychiatrist</h3>
<p>The GP will refer you to an ADHD clinic in your region (<em>ADHD-mottagning</em>). In Swedish, this referral is called a <em><strong>remiss</strong></em>.</p>
<blockquote class="prompt-info">
<p>You can find a list of ADHD clinics <a href="https://www.1177.se/Stockholm/hitta-vard/?st=6015bced-3a87-4218-93ab-db4b2b021a43&#x26;nearby=false&#x26;s=distance&#x26;g=&#x26;lat=41.1496568&#x26;lng=-8.6148196&#x26;location=&#x26;caretype=ADHD&#x26;q=">here</a>.</p>
</blockquote>
<p>After the referral is sent, the clinic should contact you within a week. If they do not, <em>follow up yourself</em> — call them and mention your <em>remiss</em>. Depending on availability, they will set an appointment within up to three months. This first appointment is called the <em><strong>Utredning</strong></em> — the initial investigation for ADHD diagnosis.</p>
<p>Worth noting: some ADHD centers do not require a GP referral, and you can self-refer (<em>egenremiss</em>) directly. It is worth checking whether any clinic in your region offers this, as it can save time.</p>
<blockquote class="prompt-warning">
<p>Read this page thoroughly before attending your first appointment: <a href="https://www.1177.se/Stockholm/behandling--hjalpmedel/undersokningar-och-provtagning/psykiatriska-utredningar/neuropsykiatrisk-utredning/"><strong>ADHD Utredning</strong></a></p>
</blockquote>
<h3 id="3-attend-the-initial-appointment">3. Attend the Initial Appointment</h3>
<p><strong>Before you go</strong>, create a note on your phone listing <em>everything</em> that has been affecting you — the specific situations, the patterns you have noticed, and how long they have been part of your life. This is important: in the moment, it is easy to forget, minimize, or struggle to articulate what you live with every day. A written list keeps you grounded and ensures nothing gets left out.</p>
<p>At the <em>utredning</em>, the doctor (usually a psychiatrist) will listen to your challenges, have you fill in questionnaires about your symptoms, and try to build a picture of your difficulties. Based on their assessment, they will decide whether further investigation is needed. If it is, you may be placed on a waiting list — but if you already have a diagnosis from abroad, you can skip this entirely (see below).</p>
<h3 id="4-the-routine-starts">4. The Routine Starts</h3>
<p>After diagnosis, you enter a structured follow-up cycle with consecutive appointments. Use this time well — educate yourself about ADHD through reliable sources, and come to appointments with questions. Here is a resource I recommend as a starting point:</p>
<ul>
<li><a href="https://www.1177.se/Stockholm/sjukdomar--besvar/hjarna-och-nerver/neuropsykiatriska-funktionsnedsattningar/adhd/">Sweden: ADHD i Vuxen Ålder (in Swedish, translate using Google Translate)</a></li>
</ul>
<h2 id="already-have-a-diagnosis-from-another-country">Already Have a Diagnosis from Another Country?</h2>
<p>If you already have a diagnosis from another country, <strong>you can skip the long waiting list</strong> and move directly into treatment in Sweden. At <a href="#1-get-a-referral-from-general-practitioner-for-a-psychiatrist">step 1</a>, make sure to tell your GP about your prior diagnosis. When you attend your first appointment at the ADHD clinic, bring all your documentation. The psychiatrist will review and validate your prior diagnosis, and if accepted, a treatment plan can be established within weeks.</p>
<h2 id="danish-diagnosis-shortcut">Danish Diagnosis (Shortcut)</h2>
<p>Compared to Sweden, the waiting time for ADHD diagnosis in Denmark is <em>dramatically</em> shorter — in some cases, you can complete a full assessment in a fraction of the time. Getting diagnosed in Denmark and then continuing your treatment in Sweden is a legitimate and practical route for many people.</p>
<p><em>Practical information about how to do this will be updated here soon.</em></p>
<hr>
<h1 id="my-personal-experience">My Personal Experience</h1>
<blockquote class="prompt-info">
<p>My experience is mainly from my contact with two ADHD centers where I have been treated for my ADHD in Stockholm: <a href="https://www.aleris.se/psykiatri/adhd/stockholm/">Aleris Psykiatri Spånga</a> — which has since transitioned fully to private under <a href="https://wemind.se/psykiatri/vuxenpsykiatri/spanga/">WeMind</a> — and my current clinic, <a href="https://www.norrastockholmspsykiatri.se/vard-hos-oss/mottagningar/specialistpsykiatrisk-mottagning-4-st-eriksplan/">Specialistpsykiatrisk mottagning 4, S:t Eriksplan</a>. I have been treated exclusively under the public healthcare system.</p>
</blockquote>
<p>At the time of writing, the public healthcare system in Sweden is overwhelmed and heavily understaffed across the board — specialists, nurses, psychologists, and occupational therapists alike. In practical terms, this means that what is described on paper as “multimodal treatment” often translates into <em>medication-only care</em> in the public sector. <strong>There is little to no access to psychotherapy, cognitive behavioural therapy, or individual psychological support.</strong> Group therapies exist in some clinics, but are available only in Swedish and are limited in number. The shortage of qualified professionals is acute, and it directly shapes the quality of care patients receive.</p>
<h2 id="challenges-and-difficulties">Challenges and Difficulties</h2>
<p>I was first diagnosed with ADHD at age 12. I was re-diagnosed at 24 in Italy, during my master’s degree. My ADHD treatment journey in Sweden began in 2021, after moving to Stockholm. I was able to visit a psychiatrist relatively quickly by presenting my Italian diagnosis, and a treatment plan was established fairly promptly.</p>
<p>However, what became apparent over time was that the public sector ADHD services in Sweden are, in many ways, <em>not adequately equipped</em> to care for adults with ADHD. The level of expertise varies widely, and the field’s more recent developments — particularly around adult presentations of ADHD and evidence-based psychological interventions — are often not reflected in the care provided.</p>
<p>I have been requesting access to psychotherapy for <strong>five years</strong>. Every request has been declined, with the explanation that psychotherapy is not an officially recommended first-line treatment for ADHD in Sweden, and that psychotherapists are in critically short supply. While the former is debatable and the latter is undeniably true, the cumulative effect is a system that leaves many adults — <em>particularly those with complex presentations or co-occurring conditions</em> — without the full range of support they need.</p>
<p>This is not a criticism of the individual professionals I have worked with, many of whom are dedicated and competent within the constraints they face. It is a structural problem, and one worth naming clearly so that others navigating this system know what to expect.</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>