<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://jakub.jankiewicz.org/blog/pretty-feed.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jakub T. Jankiewicz Blog</title>
    <description>Personal blog of Jakub T. Jankiewicz</description>
    <link>https://jakub.jankiewicz.org/blog/rss.xml</link>
    <atom:link href="https://jakub.jankiewicz.org/blog/rss.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Fri, 03 Jul 2026 00:00:00 +0000</lastBuildDate>
      <item>
        <title>The Importance of Questioning When Using AI Agents</title>
        <link>https://jakub.jankiewicz.org/blog/questioning-ai/</link>
        <description>&lt;p&gt;The other day I&apos;ve seen this post in a Twitter community.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/LacTranAn/status/2072559283657740604&quot;&gt;https://x.com/LacTranAn/status/2072559283657740604&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And few days before that I had this idea when the agent was thinking and struggle to follow my
instructions.  I was looking at his reasoning process. And think myself, to end his missery and just
change the taktic.&lt;/p&gt;
&lt;p&gt;I asked him to implement something in Bash, and he was &amp;quot;wrestling&amp;quot; and was thiking how to write this
bash script to follow my instructions.  So canceled his reasoning, and said &amp;quot;let&apos;s use Python&amp;quot;.&lt;/p&gt;
&lt;p&gt;Here is a transcript with collapsed thinking, same experience as I have with Agent-Shell in Emacs.&lt;/p&gt;
&lt;p&gt;When I was working on my project &lt;a href=&quot;https://github.com/jcubic/Clarity&quot;&gt;Clarity&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Conversation with Claude&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;## User (2026-06-27 01:03:15)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;it doesn&apos;t make sense to install composer dependenices twice. Please modify the script to be in
bash. So there is no need to have dependenices.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;
&lt;strong&gt;## Agent&apos;s Thoughts (2026-06-27 01:03:18)&lt;/strong&gt;
&lt;/summary&gt;
&lt;p&gt;The user wants me to convert the &lt;code&gt;extract-icons.php&lt;/code&gt; script to bash so that it doesn&apos;t require PHP
(and therefore Composer dependencies) to run during the build. The extract script reads SVG files
and extracts path &lt;code&gt;d&lt;/code&gt; attributes via regex - this can easily be done with bash + grep/sed.&lt;/p&gt;
&lt;p&gt;Actually wait, let me re-read. The user says &amp;quot;it doesn&apos;t make sense to install composer dependencies
twice.&amp;quot; The Makefile has &lt;code&gt;make vendor&lt;/code&gt; which runs &lt;code&gt;composer install&lt;/code&gt;, and then &lt;code&gt;make icons&lt;/code&gt; which
runs PHP scripts that don&apos;t need Composer dependencies (they&apos;re standalone PHP scripts).&lt;/p&gt;
&lt;p&gt;I see now - the GitHub workflow runs &lt;code&gt;make vendor&lt;/code&gt; and then Wasmer&apos;s &lt;code&gt;--build-remote&lt;/code&gt; probably also
runs &lt;code&gt;composer install&lt;/code&gt;. But the real issue is that the user wants to eliminate PHP entirely from
the build step so there&apos;s no need for &lt;code&gt;setup-php&lt;/code&gt; in the workflow at all. I should convert both the
extract and build icon scripts to bash, which means reading through files.txt, processing each SVG
file from the theme directory, and extracting the path &lt;code&gt;d&lt;/code&gt; attributes using standard Unix tools.&lt;/p&gt;
&lt;p&gt;For the extract script, I need to output valid JSON from bash - I can either use &lt;code&gt;jq&lt;/code&gt; or manually
construct the JSON with proper comma handling. For the build script, it&apos;s mostly string replacement
work where I read the icons.json, find the template files, and for each template-icon combination,
replace the placeholders and optimize the SVG output.&lt;/p&gt;
&lt;p&gt;The real motivation here is that converting these to bash means the GitHub workflow won&apos;t need PHP
setup just to extract the icons - the Composer install is still needed for the actual web app
(Slim/Twig), but that&apos;s handled separately by Wasmer&apos;s remote build or the workflow itself. So I&apos;ll
convert both scripts to bash.&lt;/p&gt;
&lt;p&gt;Converting extract-icons.php to bash... Writing the extraction logic...&lt;/p&gt;
&lt;p&gt;I&apos;m finishing up the JSON output and then realizing that using Perl regex might not be portable
across all systems, so I should consider a more compatible approach for extracting the path data
from the SVG files.&lt;/p&gt;
&lt;p&gt;For the build script, I need to parse the icons.json file to get each icon&apos;s name and path data,
then iterate through templates and perform string replacements for each icon combination. I&apos;ll use
&lt;code&gt;jq&lt;/code&gt; to extract the name and d attributes from the JSON in a tab-separated format that&apos;s easy to
process in bash.&lt;/p&gt;
&lt;p&gt;Now I&apos;m mapping out the sed transformations needed to clean up the SVG output—removing the XML
declaration, namespace attributes, metadata blocks, and various style properties. The multiline
metadata removal is the trickiest part since sed handles single-line patterns more easily.&lt;/p&gt;
&lt;p&gt;I&apos;ll preprocess each template once to strip out all the unnecessary elements, then use that cleaned
version for the per-icon substitutions. For the path data substitution, I need to pick a sed
delimiter that won&apos;t conflict with the SVG path syntax—&lt;code&gt;|&lt;/code&gt; should work since path data only contains
letters, numbers, commas, spaces, periods, and minus signs.&lt;/p&gt;
&lt;p&gt;For the title generation, I&apos;m converting the icon name by replacing hyphens with spaces and
capitalizing the first letter of each word using sed&apos;s uppercase transformation.&lt;/p&gt;
&lt;p&gt;Now I need to be careful when substituting the path data into the SVG template—since sed treats &lt;code&gt;&amp;amp;&lt;/code&gt;
as a special character representing the matched string, I&apos;ll need to escape any &lt;code&gt;&amp;amp;&lt;/code&gt; characters in
the path data before passing it to sed to avoid unintended replacements.&lt;/p&gt;
&lt;p&gt;Actually, using bash&apos;s built-in string replacement with &lt;code&gt;${variable//pattern/replacement}&lt;/code&gt; is safer
and cleaner than sed for this substitution, since it treats the replacement as a literal string and
won&apos;t have issues with special characters like &lt;code&gt;&amp;amp;&lt;/code&gt; or &lt;code&gt;/&lt;/code&gt;. This avoids the escaping problem
entirely.&lt;/p&gt;
&lt;p&gt;For the template optimization, I can still use sed once per template to strip out the XML
declaration, namespaces, and other metadata, then store that cleaned version in a variable to reuse
for each icon substitution. Now I&apos;m structuring the build script to read the icon data, iterate
through each template variant, and optimize it once before processing all the icons.&lt;/p&gt;
&lt;p&gt;Writing build script... Cleaning up SVG files... I&apos;m wrestling with how bash handles the braces in
the pattern substitution—whether &lt;code&gt;{{PATH}}&lt;/code&gt; needs escaping or if I can use it directly. Let me just
test the simpler approach without the backslashes to see if it works cleanly.&lt;/p&gt;
&lt;p&gt;Actually, storing the pattern in a variable first is the safest bet to avoid any parsing
ambiguity. I&apos;m also thinking through whether the path data &lt;code&gt;$d&lt;/code&gt; could cause issues when it&apos;s very
long or contains special characters, though SVG path data shouldn&apos;t have newlines. With 324 total
iterations across all icons and templates, the performance should be fine even with bash string
substitution. For extracting the path data itself, I need a grep command that pulls out the
&lt;code&gt;d=&amp;quot;...&amp;quot;&lt;/code&gt; attribute value from the SVG.&lt;/p&gt;
&lt;p&gt;Now I&apos;m considering whether to use jq for constructing the JSON output in the extract script, since
that would handle any edge cases with character escaping more robustly than manual string
concatenation. I&apos;d pass the extracted values as arguments to jq and then combine all the individual
objects into a single array.&lt;/p&gt;
&lt;p&gt;However, running jq multiple times could be slow, so I might just build the JSON manually since SVG
path data shouldn&apos;t contain problematic characters that need escaping. I should also account for the
fact that jq might not be available on all systems, though it&apos;s standard on most Linux distributions
and CI runners. Let me use jq for parsing the input JSON in the build script but construct the
output JSON manually in the extract script for simplicity.&lt;/p&gt;
&lt;p&gt;I&apos;m realizing I need to think about whether a single combined script would work better, but the PHP
app still needs icons.json at runtime to know what icons exist and their metadata, so the extraction
step has to remain separate. Let me check how the PHP app actually uses this file to make sure I&apos;m
building the right structure.&lt;/p&gt;
&lt;/details&gt;
&lt;p&gt;&lt;strong style=&quot;color:#0085FF&quot;&gt;I&apos;ve broken his reasoning here&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;### User (2026-06-27 01:05:53)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ok, if this is a problem we can use differetn lightwight language. PHP is not a good tool for CLI
scripts. That&apos;s all. Maybe use Python. I already wanted to have the clarity CLI in Python. We can
use it for all the scripts.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;
&lt;strong&gt;## Agent&apos;s Thoughts (2026-06-27 01:05:56)&lt;/strong&gt;
&lt;/summary&gt;
&lt;p&gt;The user wants to replace the PHP CLI scripts with Python scripts. The reasons are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PHP requires Composer dependencies for CLI, which doesn&apos;t make sense&lt;/li&gt;
&lt;li&gt;PHP is not ideal for CLI scripts&lt;/li&gt;
&lt;li&gt;They plan to have a Clarity CLI in Python anyway&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let me convert both scripts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;scripts/extract-icons.php&lt;/code&gt; → &lt;code&gt;scripts/extract-icons.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scripts/build-icons.php&lt;/code&gt; → &lt;code&gt;scripts/build-icons.py&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Then update the Makefile to use &lt;code&gt;python3&lt;/code&gt; instead of &lt;code&gt;php&lt;/code&gt;, and update the GitHub workflow to not
need the PHP setup step (Python is available by default on ubuntu-latest).  Actually, I realize the
scripts themselves don&apos;t use Composer dependencies—those are for the web app. But the user&apos;s point
still stands: they want Python for CLI tooling anyway. The &lt;code&gt;make vendor&lt;/code&gt; step is still needed for
the web app&apos;s dependencies, but the &lt;code&gt;make icons&lt;/code&gt; step will now run Python instead of PHP. Since
Python 3 comes pre-installed on GitHub&apos;s ubuntu-latest runners, I can simplify the workflow.&lt;/p&gt;
&lt;/details&gt;
&lt;p&gt;&lt;strong&gt;### Agent (2026-06-27 01:06:04)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Good call. Python is preinstalled on CI runners too, so no setup step needed. Let me convert both scripts.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;http://CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt; file&lt;/h2&gt;
&lt;p&gt;After I&apos;ve reply to that the tweet (at the begining) I decide to test my guarails. First I added
this section to my &lt;a href=&quot;http://CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt; file.&lt;/p&gt;
&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token title important&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;##&lt;/span&gt; Question the user&lt;/span&gt;

if you think the solution I&apos;m asking you to implement is wrong or if
something is missing.  Give me the explanation why I&apos;m wrong (or what
is missing) and ask if I really want this to be implemented.  Give me
an alternative and ask if you should implement this instead.

Never blindly follow my instructions if you think there may be a
problem with implementation.  Only implement my original solution if I
confirm that I really want it.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And asked it to delete the index.php file from my project:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/claude_index_attempt_01.png&quot; alt=&quot;GNU Emacs screenshot where the agent is asked to delete index.php file, he is questioning the action, the CLADUE.md has the note. The agent thinking is expanded. The user is asking why he didn&apos;t delete the file. Claude is answering that this was in CLAUDE.md so he followed the instructions&quot;&gt;&lt;/p&gt;
&lt;p&gt;and &lt;strong&gt;Success&lt;/strong&gt; he didn&apos;t delted the file. But wait, what about if I delete that note from my
&lt;a href=&quot;http://CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt; and ask for the same thing:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/claude_index_attempt_02.png&quot; alt=&quot;GNU Emacs screenshot where the agent is asked to delete index.php file, he is questioning the action, the CLADUE.md doesn&apos;t have the note in CLAUDE.md the thinking the agent thinking is collapsed&quot;&gt;&lt;/p&gt;
&lt;p&gt;He also not delted the file without the section the file. So I thougth that I need a better task for
Claude. Let&apos;s see what he would say about deleting JSON/LD from the index.php file:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/claude_delete_json_ld_01.png&quot; alt=&quot;GNU Emacs screenshot where the agent is asked to delete JSON/LD from index.php which he did, there is no CLAUDE.md note&quot;&gt;&lt;/p&gt;
&lt;p&gt;Now let&apos;s check with the updated note:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/claude_delete_json_ld_02.png&quot; alt=&quot;GNU Emacs screenshot where the agent is asked to delete JSON/LD from index.php which he did, the CLAUDE.md note is included. he also deleted JSON/LD schema from polish translation at pl/index.php&quot;&gt;&lt;/p&gt;
&lt;p&gt;Hm, he even deleted polish version. No joy.&lt;/p&gt;
&lt;p&gt;I thought that I would do what any reasonable person whould do and ask Claude why he deleted the
JSON/LD schema even with my guardrails. After his explanation I asked him to give me something that
will fix this and he give me this gem.&lt;/p&gt;
&lt;pre class=&quot;language-diff&quot;&gt;&lt;code class=&quot;language-diff&quot;&gt;## Question the user

if you think the solution I&apos;m asking you to implement is wrong or if
something is missing.  Give me the explanation why I&apos;m wrong (or what
is missing) and ask if I really want this to be implemented.  Give me
an alternative and ask if you should implement this instead.

Never blindly follow my instructions if you think there may be a
problem with implementation.  Only implement my original solution if I
confirm that I really want it.

&lt;span class=&quot;token inserted-sign inserted&quot;&gt;&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;Even when the task seems trivial or the action is reversible, evaluate
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;whether the user&apos;s reasoning is sound before executing. The
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;instruction to question applies to the *why*, not just the *what*.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let&apos;s see this in action.&lt;/p&gt;
&lt;p&gt;Without the note asking about delting JSON/LD:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/claude_delete_json_ld_03.png&quot; alt=&quot;GNU Emacs screenshot with interaction with Claude where the agent is deleting JSON/lD from index.php file blidnly. The Claude.md has no note about questioning the user&quot;&gt;&lt;/p&gt;
&lt;p&gt;And now the final reveal, with the note:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/claude_delete_json_ld_04.png&quot; alt=&quot;GNU Emacs screenshot with interaction with Claude where the agent is questioning if I really want to delete the JSON/lD from index.php. The CLAUDE.md has updated note&quot;&gt;&lt;/p&gt;
&lt;p&gt;The last thing that I&apos;m thinking what Uncle Bob will say about it:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/unclebobmartin/status/2045485259127423369&quot;&gt;https://x.com/unclebobmartin/status/2045485259127423369&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Maybe he just uses a different Claude than I do.&lt;/p&gt;
</description>
        <pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/questioning-ai/</guid>
      </item>
      <item>
        <title>My Advice to New Developers</title>
        <link>https://jakub.jankiewicz.org/blog/programming-advice/</link>
        <description>&lt;p&gt;I&apos;m a moderator in two communities on Twitter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/i/communities/1699807431709041070&quot;&gt;Software Engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/i/communities/1488952693443997701&quot;&gt;Web Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A frequent question people ask is about advice or tips for new developers. I stopped answering those
questions, as they are a bit low-effort anyway. So I decided to write an article with my tips, and I
will share a link when someone asks this question.&lt;/p&gt;</description>
        <pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/programming-advice/</guid>
      </item>
      <item>
        <title>How to build zig book as PDF on Fedora?</title>
        <link>https://jakub.jankiewicz.org/blog/zig-book-pdf/</link>
        <description>&lt;p&gt;I planned to learn &lt;a href=&quot;https://en.wikipedia.org/wiki/Zig_(programming_language)&quot;&gt;Zig Programming
Language&lt;/a&gt;, and found a &lt;a href=&quot;https://pedropark99.github.io/zig-book/&quot;&gt;Zig
Book&lt;/a&gt;, but I wanted to read it on my &lt;a href=&quot;https://en.wikipedia.org/wiki/ReMarkable&quot;&gt;reMarkable
tablet&lt;/a&gt;, the problem was that officially Zig book is only
in &lt;abbr title=&quot;Hyper Text Markup Language&quot;&gt;HTML&lt;/abbr&gt; format, and don&apos;t support building PDF file from source. That&apos;s why it&apos;s not part of its
documentation. But with &lt;a href=&quot;https://quarto.org/&quot;&gt;quarto&lt;/a&gt; publishing system, used by the book, it&apos;s
possible to create a PDF file.&lt;/p&gt;
&lt;p&gt;Below is the instruction how to create a PDF version of Zig Book yourself. The instructions are for
Fedora &lt;abbr title=&quot;GNU&apos;s Not Unix&quot;&gt;GNU&lt;/abbr&gt;/Linux, because this is what I&apos;m using, but building on Ubuntu or different Linux distro
should be similar. You only need to find the right package names to install.&lt;/p&gt;</description>
        <pubDate>Sun, 23 Mar 2025 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/zig-book-pdf/</guid>
      </item>
      <item>
        <title>How to Help Charities and Your Ego?</title>
        <link>https://jakub.jankiewicz.org/blog/charity-bragging-page/</link>
        <description>&lt;p&gt;Do you donate to charities? I do. And in this post I decided to explain, why it&apos;s worth bragging about it.&lt;/p&gt;</description>
        <pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/charity-bragging-page/</guid>
      </item>
      <item>
        <title>Documentaries for Programmers</title>
        <link>https://jakub.jankiewicz.org/blog/programming-documentaries/</link>
        <description>&lt;p&gt;People love watching movies, especially related to things they love. Developers are no
different. And what is better to watch than documentaries about tools, libraries, and programming
languages that we all use and love. Here is a list of documentaries created by
&lt;a href=&quot;https://www.youtube.com/@CultRepo&quot;&gt;CultRepo&lt;/a&gt; (formerly Honeypot)
&lt;a href=&quot;https://www.youtube.com/@OfferZenOrigins&quot;&gt;OfferZen&lt;/a&gt;, and some older documentary that you can find
on YouTube.&lt;/p&gt;</description>
        <pubDate>Wed, 05 Mar 2025 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/programming-documentaries/</guid>
      </item>
      <item>
        <title>Handling auto-indentation in Node.js REPL</title>
        <link>https://jakub.jankiewicz.org/blog/node-repl-auto-indent/</link>
        <description>&lt;p&gt;When working on my Open Source project &lt;a href=&quot;https://lips.js.org/&quot;&gt;LIPS Scheme&lt;/a&gt; &lt;abbr title=&quot;Read Evel Print Loop&quot;&gt;REPL&lt;/abbr&gt;,
I wanted to have auto indentation, when you type multi line expression the text
on the next line is indented. This article will describe a story of adding this feature,
that require contributing to &lt;a href=&quot;https://nodejs.org/en&quot;&gt;Node.js&lt;/a&gt;.&lt;/p&gt;</description>
        <pubDate>Sat, 07 Dec 2024 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/node-repl-auto-indent/</guid>
      </item>
      <item>
        <title>Batman website inspired terminal quiz app</title>
        <link>https://jakub.jankiewicz.org/blog/batman-terminal-app/</link>
        <description>&lt;p&gt;Some time ago I was contacted by a person involved with &lt;abbr title=&quot;Non-fungible token&quot;&gt;NFT&lt;/abbr&gt;, to create a project inspired by &lt;a href=&quot;https://www.firstshowing.net/2021/there-is-a-new-viral-marketing-website-for-the-batman-to-follow/&quot;&gt;2022
Batman movie website&lt;/a&gt;.&lt;/p&gt;</description>
        <pubDate>Wed, 04 Dec 2024 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/batman-terminal-app/</guid>
      </item>
      <item>
        <title>How to Implement a Simple Markdown Parser?</title>
        <link>https://jakub.jankiewicz.org/blog/markdown-parser/</link>
        <description>&lt;p&gt;I&apos;ve had this idea some time ago to add limited support for
&lt;a href=&quot;https://en.wikipedia.org/wiki/Markdown&quot;&gt;Markdown&lt;/a&gt; into
&lt;a href=&quot;https://terminal.jcubic.pl/&quot;&gt;jQuery Terminal&lt;/a&gt;. I decided to use &lt;a href=&quot;https://peggyjs.org/&quot;&gt;Peggy.js&lt;/a&gt;,
a maintained fork of the PEG.js parser generator. I already used it for a few projects
so I thought it will be the best tool for the job.&lt;/p&gt;
&lt;p&gt;PEG is an abbreviation of so-called
&lt;a href=&quot;https://en.wikipedia.org/wiki/Parsing_expression_grammar&quot;&gt;Parsing expression grammar&lt;/a&gt;,
a well-known way to define
&lt;a href=&quot;https://en.wikipedia.org/wiki/Formal_grammar&quot;&gt;language grammars&lt;/a&gt; and create
&lt;a href=&quot;https://en.wikipedia.org/wiki/Compiler-compiler&quot;&gt;parser generators&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this article, I will show how to implement a simple Markdown parser to be used
with jQuery Terminal. But if you follow along, you should be able to use it
for different targets, like &lt;abbr title=&quot;Hyper Text Markup Language&quot;&gt;HTML&lt;/abbr&gt;.&lt;/p&gt;</description>
        <pubDate>Tue, 26 Nov 2024 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/markdown-parser/</guid>
      </item>
      <item>
        <title>How to Learn Design as a Web Developer?</title>
        <link>https://jakub.jankiewicz.org/blog/learn-design/</link>
        <description>&lt;p&gt;People often ask me how to learn design. And since I&apos;m mostly web developer, I get this
question mostly from web developers. I decided to write this blog post to redirect people
that ask this question.
q
In this article, I will show you 7 resources which will help you learn design as a web
developer.&lt;/p&gt;</description>
        <pubDate>Thu, 03 Oct 2024 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/learn-design/</guid>
      </item>
      <item>
        <title>Hack for Syntax Highlighting of Source Code</title>
        <link>https://jakub.jankiewicz.org/blog/display-source-files-in-color/</link>
        <description>&lt;p&gt;If you&apos;re a web developer, work with &lt;a href=&quot;https://en.wikipedia.org/wiki/JSON&quot;&gt;JSON&lt;/a&gt; data
format, and use Google Chrome browser, you have probably seen browser extension
&lt;a href=&quot;https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh&quot;&gt;JSON Viewer&lt;/a&gt;. This
extension adds Syntax Highlighting to JSON files viewed in the browser.&lt;/p&gt;
&lt;p&gt;I&apos;ve had a similar idea to display Syntax Highlighting but for JavaScript and &lt;abbr title=&quot;Cascading style sheets&quot;&gt;CSS&lt;/abbr&gt; files,
as part of the website. I just later realized that this is similar to JSON Viewer.&lt;/p&gt;
&lt;p&gt;In this article, I will show how I did it and add this feature to my blog.&lt;/p&gt;</description>
        <pubDate>Wed, 23 Aug 2023 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/display-source-files-in-color/</guid>
      </item>
      <item>
        <title>Welcome to my blog</title>
        <link>https://jakub.jankiewicz.org/blog/welcome-to-my-blog/</link>
        <description>&lt;p&gt;The content of this blog will be everything that interest me. I&apos;m mostly
a programmer. I have a few &lt;a href=&quot;https://github.com/jcubic&quot;&gt;Open Source projects&lt;/a&gt;.
I&apos;m also a Editor of Poslish Wikipedia, I&apos;m hobby photographer and I design
logos and logotypes (but not for the money). I&apos;m interested in Math, computer
graphics, comic books (including manga and anime). A lot of things will on subjects,
that don&apos;t fit to my Polish blog &lt;a href=&quot;https://jcubic.pl&quot;&gt;&amp;quot;Głównie JavaScript&amp;quot;&lt;/a&gt;,
(Mostly JavaScript).&lt;/p&gt;</description>
        <pubDate>Sun, 09 Jul 2023 00:00:00 +0000</pubDate>
        <dc:creator>Jakub T. Jankiewicz</dc:creator>
        <guid isPermaLink="true">https://jakub.jankiewicz.org/blog/welcome-to-my-blog/</guid>
      </item>
  </channel>
</rss>
