<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>EOG</title>
    <link>/</link>
    <description>Recent content on EOG</description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>© degD</copyright>
    <lastBuildDate>Sun, 31 May 2026 14:28:09 +0300</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Skyscraper</title>
      <link>/posts/skyscraper/</link>
      <pubDate>Sun, 31 May 2026 14:28:09 +0300</pubDate>
      <guid>/posts/skyscraper/</guid>
      <description>&lt;p&gt;SKY-SCRAPER is a small Flask app plus two processing scripts for turning selected regions of a video into a PDF. It is designed for videos where a small control area changes when the content changes. The app lets you pick:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A start time and stop time.&lt;/li&gt;&#xA;&lt;li&gt;A crop region to extract from each selected frame.&lt;/li&gt;&#xA;&lt;li&gt;A control region used to detect when a frame is novel.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;When processing runs, the script saves cropped frames to &lt;code&gt;tmp/&lt;/code&gt;, then &lt;code&gt;buildpdf.py&lt;/code&gt; compiles those images into &lt;code&gt;out.pdf&lt;/code&gt;. See the &lt;a href=&#34;https://github.com/degD/skyscraper&#34;&gt;source code&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ricoh SP150 Hack</title>
      <link>/posts/ricoh/</link>
      <pubDate>Sat, 30 May 2026 01:19:43 +0300</pubDate>
      <guid>/posts/ricoh/</guid>
      <description>&lt;p&gt;Most printers do not have a mechanism to measure the amount of ink left inside their cartridges. Therefore, instead of measuring ink, they use a print counter on the cartridge chip. When the counter reaches to zero, the cartridge becomes unusable, even if there is ink still left. That&amp;rsquo;s why filling the cartridge doesn&amp;rsquo;t work. The only &amp;ldquo;legal&amp;rdquo; solution is to throw away the old cartridge and get a new one. While searching for cartridges on the internet for my old Ricoh SP150 model printer, I came across a very useful blog. The blog explains how an old chip of the cartridge can be reset just with an Arduino and some wires.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DEHEAD: Anonymization by head detection</title>
      <link>/posts/dehead/</link>
      <pubDate>Sat, 30 May 2026 01:13:55 +0300</pubDate>
      <guid>/posts/dehead/</guid>
      <description>&lt;p&gt;I was looking for an anonymization tool for a project I was working on. Most existing tools follow a two step approach: they detect the face, then blur or mask it. However, this can get unreliable in edge cases where the subject moves significantly, turns sideways, or is viewed from above. Therefore, I built this small tool called dehead (inspired by deface). It uses YOLO to detect the entire head region, and masks it accordingly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>YAM (Yet Another Metronome)</title>
      <link>/posts/yam/</link>
      <pubDate>Sat, 30 May 2026 01:04:15 +0300</pubDate>
      <guid>/posts/yam/</guid>
      <description>&lt;p&gt;Yet Another Metronome (YAM) is a simplistic metronome app I built as an amateur musician looking for a free, ad-free, and powerful alternative.&#xA;Most apps I tried had a BPM (beats per minute) limit around 200, which felt too restrictive. I wanted something much faster, so I built it myself.&lt;/p&gt;&#xA;&lt;p&gt;This app was created using &lt;a href=&#34;https://capacitorjs.com/&#34;&gt;Capacitor.js&lt;/a&gt;, allowing me to deliver a cross-platform experience without diving into&#xA;native development. Building the whole project took just a week, but I believe learning native mobile development from scratch would’ve taken at least a month.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>/about/</link>
      <pubDate>Fri, 29 May 2026 22:10:18 +0300</pubDate>
      <guid>/about/</guid>
      <description>&lt;p&gt;Hi, I am degD. I like programming, playing guitar and harmonica, and reading all kinds of books, from fantasy to philosophy. The blog&amp;rsquo;s name, &amp;ldquo;EOG&amp;rdquo;, is a combination of the last letters of &amp;ldquo;the bloG with nO purposE&amp;rdquo; in reverse. However, this blog does have a purpose: logging my projects and progress for future readers, including myself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Digirepx2</title>
      <link>/posts/digirepx2/</link>
      <pubDate>Fri, 29 May 2026 20:10:26 +0300</pubDate>
      <guid>/posts/digirepx2/</guid>
      <description>&lt;p&gt;A digital repertoire and chord management app for musicians. Manage your song library with tagging, favorites, ChordPro editing and viewing, transposition, guitar chord diagrams, and import/export. Built with Expo (React Native). Successor to &lt;a href=&#34;https://github.com/degD/digirepx&#34;&gt;digirepx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Song Viewer:&#xA;&lt;img src=&#34;./img/digirepx2/Screenshot_1773515537.png&#34; alt=&#34;DigiRepX2 Screenshot #1&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Editor:&#xA;&lt;img src=&#34;./img/digirepx2/Screenshot_1773515559.png&#34; alt=&#34;DigiRepX2 Screenshot #2&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Library:&#xA;&lt;img src=&#34;./img/digirepx2/Screenshot_1773515567.png&#34; alt=&#34;DigiRepX2 Screenshot #3&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Settings:&#xA;&lt;img src=&#34;./img/digirepx2/Screenshot_1773515589.png&#34; alt=&#34;DigiRepX2 Screenshot #4&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Song library with full-text search, tag filters, and favorites&lt;/li&gt;&#xA;&lt;li&gt;Raw ChordPro editor with undo/redo, auto-save, and assisted chord picker&lt;/li&gt;&#xA;&lt;li&gt;Song viewer with real-time transposition, per-song font scaling, and split-pane mode&lt;/li&gt;&#xA;&lt;li&gt;Offline guitar chord diagrams with multiple voicings per chord (&lt;a href=&#34;https://github.com/T-vK/chord-collection&#34;&gt;source&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Import and export songs as &lt;code&gt;.cho&lt;/code&gt; files (single song or full library)&lt;/li&gt;&#xA;&lt;li&gt;Share songs&lt;/li&gt;&#xA;&lt;li&gt;Accent chord color picker and dark mode&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;supported-languages&#34;&gt;Supported Languages&lt;/h2&gt;&#xA;&lt;p&gt;English, Spanish, French, German, Portuguese, Turkish. Open an issue to request a new language.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perceptron</title>
      <link>/posts/perceptron/</link>
      <pubDate>Wed, 25 Feb 2026 12:17:50 +0300</pubDate>
      <guid>/posts/perceptron/</guid>
      <description>&lt;p&gt;A perceptron model trained to classify sentences as positive or negative.&#xA;Three optimization methods are compared: Gradient Descent (GD), Stochastic Gradient Descent (SGD), and Adam.&#xA;Another goal is to learn how a perceptron, building block of neural networks, work by building it from scratch.&#xA;Dataset consists of 400 sentences, 20% used for testing and the other 80% for training.&#xA;Most of the dataset generated by using LLMs. 200 positive and 200 negative sentences.&#xA;You can see some example sentences below:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cetris</title>
      <link>/posts/cetris/</link>
      <pubDate>Mon, 23 Feb 2026 16:59:04 +0300</pubDate>
      <guid>/posts/cetris/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;./img/cetris/cetris2.png&#34; alt=&#34;Screenshot from Cetris&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-project&#34;&gt;The Project&lt;/h2&gt;&#xA;&lt;p&gt;This &lt;strong&gt;&lt;a href=&#34;https://gitlab.com/den.ege.der/cetris&#34;&gt;Cetris&lt;/a&gt;&lt;/strong&gt; project&#xA;(Tetris in C) is an old project of mine,&#xA;from a time when I was learning how to use &lt;code&gt;make&lt;/code&gt; for the first&#xA;time, and compile a C project that is composed of multiple &lt;code&gt;.h&lt;/code&gt;&#xA;and &lt;code&gt;.c&lt;/code&gt; files. I got introduced to many interesting problems&#xA;while working on this project. And bear in mind, that was a time&#xA;when LLMs hadn&amp;rsquo;t been invented yet. I remember looking the net for&#xA;Tetris versions, and trying to decide which rotation logic should&#xA;I use, and which pieces should be on the board. From the project&#xA;&lt;code&gt;README.md&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hikaie</title>
      <link>/posts/hikaie/</link>
      <pubDate>Fri, 20 Feb 2026 16:52:03 +0300</pubDate>
      <guid>/posts/hikaie/</guid>
      <description>&lt;p&gt;An unofficial attempt at creating an open-source Storytel client, with no direct real-world use. It is MIT licensed, so you can copy and share it however you want. See &lt;a href=&#34;https://gitlab.com/den.ege.der/download-a-story&#34;&gt;source code&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tech-stack&#34;&gt;Tech Stack&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Language&lt;/strong&gt;: TypeScript&lt;br&gt;&#xA;&lt;strong&gt;Bundler&lt;/strong&gt;: Vite&lt;br&gt;&#xA;&lt;strong&gt;Wrapper&lt;/strong&gt;: Capacitor.js&lt;br&gt;&#xA;&lt;strong&gt;Platform&lt;/strong&gt;: Android&lt;br&gt;&#xA;&lt;strong&gt;UI&lt;/strong&gt;: Vanilla HTML/CSS&lt;br&gt;&#xA;&lt;strong&gt;Routing&lt;/strong&gt;: Custom SPA router&lt;/p&gt;&#xA;&lt;h2 id=&#34;background--lessons-learned&#34;&gt;Background &amp;amp; Lessons Learned&lt;/h2&gt;&#xA;&lt;p&gt;This project started as an experiment to see how far I could go without frameworks or guides, using only minimal &lt;a href=&#34;https://en.wikipedia.org/wiki/Large_language_model&#34;&gt;LLM&lt;/a&gt; help. It began as a &lt;a href=&#34;https://flask.palletsprojects.com/&#34;&gt;Flask&lt;/a&gt; app, but I switched to &lt;a href=&#34;https://capacitorjs.com/&#34;&gt;Capacitor.js&lt;/a&gt; for mobile, expecting it to be easier. While Capacitor.js is great for porting web apps to native, it lacks native features and its plugins are often basic wrappers. For example, I could play audiobooks but not change speed, or download large files quicly but couldn&amp;rsquo;t abort them.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
