<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Engineering on Andrii's Notes</title><link>https://trolmark.github.io/categories/engineering/</link><description>Recent content in Engineering on Andrii's Notes</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 20 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://trolmark.github.io/categories/engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a Fast CPU correlation kernel</title><link>https://trolmark.github.io/posts/blog_gemm_syrk/</link><pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate><guid>https://trolmark.github.io/posts/blog_gemm_syrk/</guid><description>&lt;h2 id="the-task-pearson-correlation"&gt;
 The task: Pearson correlation
 &lt;a class="heading-link" href="#the-task-pearson-correlation"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;This is the story of a task I solved during a performance-programming course from Aalto University&amp;rsquo;s
&lt;a href="https://ppc.cs.aalto.fi/" class="external-link" target="_blank" rel="noopener"&gt;Programming Parallel Computers&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;given an &lt;code&gt;ny × nx&lt;/code&gt; matrix, compute the lower triangle of its &lt;code&gt;ny × ny&lt;/code&gt;
Pearson correlation matrix as fast as possible on a CPU. &lt;strong&gt;Pearson correlation&lt;/strong&gt;
measures how similarly two rows vary after removing their means. A value near
&lt;code&gt;1&lt;/code&gt; means they move together, &lt;code&gt;-1&lt;/code&gt; means they move in opposite directions,
and &lt;code&gt;0&lt;/code&gt; means no linear correlation.&lt;/p&gt;</description></item><item><title>Building a Compact Handwritten OCR Pipeline</title><link>https://trolmark.github.io/posts/handwritten_ocr/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://trolmark.github.io/posts/handwritten_ocr/</guid><description>&lt;h2 id="introduction"&gt;
 Introduction
 &lt;a class="heading-link" href="#introduction"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;This project is my solution to the &lt;a href="https://www.kaggle.com/competitions/handwritten-to-data" title="Handwritten to Data" class="external-link" target="_blank" rel="noopener"&gt;Handwritten to Data&lt;/a&gt;
Kaggle competition for Ukrainian handwriting recognition. Its dataset is publicly
available on Hugging Face as &lt;code&gt;UkrainianCatholicUniversity/rukopys&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Part of my day job is on the deployment side of ML — &lt;strong&gt;porting and
optimizing models to run on mobile phones&lt;/strong&gt;, where the recurring
questions are &amp;ldquo;does this fit in memory?&amp;rdquo;, &amp;ldquo;does it hit the latency budget?&amp;rdquo;,
and &amp;ldquo;does it run on the target hardware?&amp;rdquo;. Within that, I work mostly
on document AI: page detection, document classification, image
enhancement. Handwritten-text recognition, though, was a piece of the
stack I had never built end-to-end myself. I treated this dataset as a
chance to fill that gap while staying inside the constraints I optimize
for at work.&lt;/p&gt;</description></item></channel></rss>