<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nanda Kresnatara</title>
    <description>The latest articles on DEV Community by Nanda Kresnatara (@taradevio).</description>
    <link>https://dev.to/taradevio</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F899959%2F0eb2734b-e25c-40f3-b467-620862d4b271.jpeg</url>
      <title>DEV Community: Nanda Kresnatara</title>
      <link>https://dev.to/taradevio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/taradevio"/>
    <language>en</language>
    <item>
      <title>What is this thing #1: Artifacts</title>
      <dc:creator>Nanda Kresnatara</dc:creator>
      <pubDate>Tue, 14 Apr 2026 12:07:02 +0000</pubDate>
      <link>https://dev.to/taradevio/what-is-this-thing-1-artifacts-27in</link>
      <guid>https://dev.to/taradevio/what-is-this-thing-1-artifacts-27in</guid>
      <description>&lt;p&gt;Recently, since using Claude, I've come to notice that it generates code, charts, and docs in an interactive way. For example, usually, when I asked Claude to generate a simple navigation bar, it would spoon-feed me with codes that if I paste it into my IDE, and test it myself, it would show a simple navigation bar as requested. However, the recent experience has been different. Instead of showing the code, it creates me a navigation bar that I can view it directly on the conversation along with the code to be downloaded.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3peyeyf0dhgq6ne02szx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3peyeyf0dhgq6ne02szx.png" alt="A simple artifact of navigation bar" width="800" height="491"&gt;&lt;/a&gt;&lt;br&gt;
Here's another example of a CSV file&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faazv9tyay330221s996x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faazv9tyay330221s996x.png" alt="An artifact of a CSV file on game" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the csv file above, it has variations since I asked to generate products, users, orders, and rating.&lt;/p&gt;

&lt;p&gt;The navigation bar and the csv files are known as &lt;strong&gt;Artifacts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An artifact is a structured output that an LLM, especially Claude, generates during your conversation — something meant to be used and modified, not just read&lt;/p&gt;

&lt;p&gt;Now you might wonder: "Does that mean all generated text is an artifact?" Not quite. Regular text responses are just called &lt;strong&gt;AI responses&lt;/strong&gt;. An LLM typically returns text you can read and copy, and that's about it. An artifact goes further than that. It's interactive, editable, and often exportable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Think of it this way:&lt;br&gt;
AI response = a text message someone sent you. You read it, maybe copy it.&lt;br&gt;
AI artifact = a file someone sent you. You open it, edit it, and maybe download it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Another example of Artifact
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1nqyelz8njv05fnobrvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1nqyelz8njv05fnobrvl.png" alt="TinaCMS Installation Summarization on Markdown" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the screenshot above, I asked Claude to visit the TinaCMS docs and summarize the installation steps as a Markdown document. As you can see, the output isn't just text in the chat. You can view it in a dedicated panel, download it as an &lt;code&gt;.md&lt;/code&gt; file, or even export it as a PDF.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common&lt;a href="https://support.claude.com/en/articles/9487310-what-are-artifacts-and-how-do-i-use-them" rel="noopener noreferrer"&gt; examples&lt;/a&gt; of artifacts
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Code snippet&lt;/li&gt;
&lt;li&gt;Document&lt;/li&gt;
&lt;li&gt;Single-page HTML website&lt;/li&gt;
&lt;li&gt;SVG image&lt;/li&gt;
&lt;li&gt;Diagram and flowcharts&lt;/li&gt;
&lt;li&gt;Interactive React component&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;An artifact is what happens when an LLM stops telling you something and starts making something usable for you. It's a difference between AI sending you text and AI that hands you something you can actually use.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>learning</category>
      <category>llm</category>
    </item>
    <item>
      <title>Why Data is Important for LLM</title>
      <dc:creator>Nanda Kresnatara</dc:creator>
      <pubDate>Thu, 19 Mar 2026 15:01:01 +0000</pubDate>
      <link>https://dev.to/taradevio/why-data-is-important-for-llm-2859</link>
      <guid>https://dev.to/taradevio/why-data-is-important-for-llm-2859</guid>
      <description>&lt;p&gt;I had always thought that I could just feed any data into AI and expect a good output.  One tiny example that I sometimes still do is less context when prompting. I remember asking: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Create me a set of schedule to support my fundamental daily learning on Software and AI Engineer". &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It then created me schedules. It technically worked..., but not quite! It gave me an 8-hour straight schedule with no breaks. What I actually wanted was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple learning sessions (morning, afternoon, evening)&lt;/li&gt;
&lt;li&gt;Breaks in between&lt;/li&gt;
&lt;li&gt;Software Engineer topics in the morning and afternoon&lt;/li&gt;
&lt;li&gt;AI topics in the evening&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, even though they have the same intent: create a set of schedules, the outcome is very different, just because of a missing context. This simple example already shows how critical input data is. And that’s just prompting. When we scale this up to real-world systems feeding data into LLMs like Gemini, ChatGPT, Qwen, or Kimi, the impact becomes much bigger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Types
&lt;/h2&gt;

&lt;p&gt;Speaking of data, I think we also need to understand what data that goes in and not just nod along, "Oh, let's feed some data" without really understanding what kind of data we're dealing with. There are three main types of data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured Data&lt;/li&gt;
&lt;li&gt;Unstructured Data&lt;/li&gt;
&lt;li&gt;Semi-structured Data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Structured Data
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqbamviwdr6yoi8unel4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqbamviwdr6yoi8unel4.jpg" alt="Example of structured data. Image by Christine Sandu" width="800" height="1157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Structured data has a fixed, predefined format.&lt;/p&gt;

&lt;p&gt;Think of spreadsheets or relational databases—data neatly organized into rows and columns. It’s easy to query, validate, and process.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Financial reports&lt;/li&gt;
&lt;li&gt;Survey results&lt;/li&gt;
&lt;li&gt;Class schedules&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Unstructured Data
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7exf1slnilfvg9bj7v77.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7exf1slnilfvg9bj7v77.jpg" alt="Example of unstructured data. Image by Saad Chaudry" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unstructured data has no predefined format.&lt;/p&gt;

&lt;p&gt;This is actually what we interact with most of the time in real life.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Emails&lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;li&gt;Chat messages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike structured data, this type requires additional processing (like NLP or computer vision) before it becomes useful. &lt;/p&gt;

&lt;h3&gt;
  
  
  Semi-structured Data
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F524fy73h67ja00u43hdm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F524fy73h67ja00u43hdm.jpg" alt="Example of semi-structured data. Image by Thought Catalog" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Semi-structured data sits somewhere in between.&lt;/p&gt;

&lt;p&gt;It doesn’t follow a strict table format, but it still contains some organization through metadata or tags.&lt;/p&gt;

&lt;p&gt;A good example is a social media post:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The image itself → unstructured&lt;/li&gt;
&lt;li&gt;Metadata (caption, hashtags, timestamp) → structured elements&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How Data Shapes AI
&lt;/h2&gt;

&lt;p&gt;So far I think we already understand that in the example of my own, data is crucial. In a machine learning domain, there is this well-known principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Garbage In, Garbage Out (GIGO)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Basically, if your input data is messy, incomplete, or misleading, your output will reflect that. Imagine if models are ingested with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Noisy datasets&lt;/li&gt;
&lt;li&gt;Biased sources&lt;/li&gt;
&lt;li&gt;Incomplete information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don't think we will achieve what we have today if they were trained on poor-quality data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real World Example
&lt;/h2&gt;

&lt;p&gt;Currently, I’m building a project that uses OCR + LLM to extract and parse data from shopping receipts into a backend system, which is then visualized on a dashboard. I did a lot of trial and error, especially on receipts that are not in good conditions. Here's the first example:&lt;/p&gt;

&lt;h3&gt;
  
  
  Case 1: Blurry Receipt
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feze0qhdh93jtrjmw9f9q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feze0qhdh93jtrjmw9f9q.jpg" alt="Missing information on shopping receipt" width="720" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the above example, two critical things are blurry: date and item name. I used RapidOCR to scan the receipt and here's what I got:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bangorejo Sol WARUNG lobaru, Kwar SAYUR Sukoharjo UPSP KIIA Gr rugu!
/02/ 10115 /2026 Kasir:KASIK Jam 10:57
PHIFIK 1PCKx NGKUNG 8. 000= BALADO 8. .000
KEMBALI.. JUMLAH OT A UANG .. 10 8 2. 000 .000 .000
1 Items Pembayai TUNAI
TERIMA KASIH
ATAS KUNJUNGAN ANDA
PEMESANAN xxxxxxxxxxxx
KRITIK DAN SARAN xxxxxxxxxxxx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, the date is fragmented &lt;code&gt;02&lt;/code&gt; and &lt;code&gt;2026&lt;/code&gt; and the item name is partially corrupted. Yes, the gap is my biggest obstacle in laying out what has been scanned, but apart from that, bad data produces bad output.&lt;/p&gt;

&lt;p&gt;Then I passed this into an LLM (running via Ollama, model: GPT-OSS:120b-cloud):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response data: {'receipt_id': 'c5f962ce-1a48-432e-a4d2-a24ea048597f', 'merchant_name': {'value': 'WARUNG SAYUR KIIA'}, 'date': {'value': None}, 'time': {'value': '10:57'}, 'items': [{'name': {'value': 'NGKUNG BALADO'}, 'qty': {'value': 1}, 'price': {'value': 8000}, 'total_price': {'value': 8000}, 'category': {'value': 'Food &amp;amp; Beverage'}, 'discount_type': {'value': None}, 'discount_value': {'value': 0}, 'voucher_amount': {'value': 0}}], 'total_amount': {'value': 8000}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model cleaned up some parts, especially the merchant name, but:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The date is completely missing&lt;/li&gt;
&lt;li&gt;Item names are still incomplete
Here's another example:&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Case 2: Dirty Receipt
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka1bg35agaxdekiufn2d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka1bg35agaxdekiufn2d.jpg" alt="Dirty receipt" width="720" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now what about a noisy, dirty receipt? Here's what I got:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALFAMART KOMARASAN SUKOHARDO
KWARASAN SUKOHAROZF
CV ANXSRAH MARATA
JL. RAYA SOLO 4 BAKI NO. 24A ABRT OR
NPWP : 73  |  030.3-532060
Bon  |  701 13024083 Kasir POVRE
LERL AIR5L  |  1 16,090 16.0e
Disc  |  500
KP BRAMDING (5) 1 200 260
CNIONHRN (S) 1 200 200
Total Item! 16.009
Total Disc 589
Total Belanja 15, ,500
Tunai 15, 500
Kerbalian  |  D
PPN  |  DPP: 14. 324 PPM: 1.575
Tgl.  |  13- 02- 2026 16:30:18 V. 2025 11. 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, the OCR got some information correct and others are quite broken. The LLM returned this output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;data:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'receipt_id':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'ff&lt;/span&gt;&lt;span class="mi"&gt;78&lt;/span&gt;&lt;span class="err"&gt;be&lt;/span&gt;&lt;span class="mi"&gt;41&lt;/span&gt;&lt;span class="err"&gt;-a&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="err"&gt;d&lt;/span&gt;&lt;span class="mi"&gt;7-4&lt;/span&gt;&lt;span class="err"&gt;f&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="err"&gt;-b&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="err"&gt;ca-e&lt;/span&gt;&lt;span class="mi"&gt;54&lt;/span&gt;&lt;span class="err"&gt;ca&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="err"&gt;eb&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="err"&gt;b&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="err"&gt;a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'merchant_name':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'ALFAMART'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'date':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="mi"&gt;2026-02-13&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'time':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'items':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="err"&gt;'name':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'LERL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;AIR&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="err"&gt;L'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'qty':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'price':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16090&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'total_price':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15590&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'category':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'Food&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Beverage'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'discount_type':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'nominal'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'discount_value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'voucher_amount':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'name':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'KP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;BRAMDING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="err"&gt;)'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'qty':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'price':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'total_price':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;260&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'category':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'Food&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Beverage'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'discount_type':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;None&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'discount_value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'voucher_amount':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'name':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'(S)'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'qty':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'price':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'total_price':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'category':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'Food&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Beverage'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'discount_type':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;None&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'discount_value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'voucher_amount':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}}],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;'total_amount':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'value':&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;16050&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Interestingly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The date and time were reconstructed correctly&lt;/li&gt;
&lt;li&gt;But item names and pricing details are inconsistent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The body (line items) is where things degrade the most.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Insight
&lt;/h2&gt;

&lt;p&gt;This pipeline highlights something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;LLMs don’t “fix” bad data, but rather interpret it&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the OCR output is already corrupted/broken:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing tokens → missing fields&lt;/li&gt;
&lt;li&gt;Wrong tokens → hallucinated or incorrect values&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;It is important to note that what we feed into LLMs, —prompting, preprocessing, or model input—data quality directly shapes the output.&lt;/p&gt;

&lt;p&gt;Or, as the principle puts it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Garbage In, Garbage Out&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>learning</category>
      <category>programming</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Documenting My Learning Journey on Software Engineer and AI Engineer</title>
      <dc:creator>Nanda Kresnatara</dc:creator>
      <pubDate>Sat, 07 Mar 2026 10:06:20 +0000</pubDate>
      <link>https://dev.to/taradevio/documenting-my-learning-journey-on-software-engineer-and-ai-engineer-4pdc</link>
      <guid>https://dev.to/taradevio/documenting-my-learning-journey-on-software-engineer-and-ai-engineer-4pdc</guid>
      <description>&lt;p&gt;I often find it difficult to stay consistent with learning every single day. I know what I want to achieve, but there is always this urge in my mind pushing me to avoid the tasks I should be doing. That resistance keeps growing, and honestly, it can get pretty frustrating.&lt;/p&gt;

&lt;p&gt;Sometimes even writing down a simple task feels surprisingly difficult.&lt;/p&gt;

&lt;p&gt;Because of that, I realized before fixing my productivity, I needed to fix the system behind it. My routine felt messy. There were no clear boundaries for what to do, when to do it, and how to approach it.&lt;/p&gt;

&lt;p&gt;So instead of forcing myself to “be more disciplined”, I decided to design a system first.&lt;/p&gt;

&lt;h2&gt;
  
  
  The System
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzsh7i444n81f7u7ecjon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzsh7i444n81f7u7ecjon.png" alt="My for-now schedule" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I tried to make this system as realistic as possible based on my current situation.&lt;/p&gt;

&lt;p&gt;At the moment, I have a significant amount of free time since I submitted my resignation in December, and January was my last month working as a Full Stack Developer. Although, to be more precise, the role also involved some elements of AI Engineering, such as working with N8N, building RAG pipelines, and tuning LLM parameters i. e sampling settings, top-p, and top-k.&lt;/p&gt;

&lt;p&gt;Despite that experience, I still feel that I’m missing some important fundamentals. Thus, I wanted to create a system that allows me to invest more time in strengthening the basics.&lt;/p&gt;

&lt;p&gt;This is why the system includes things like Data Structures &amp;amp; Algorithms (DSA) and fundamental mini-projects. The goal is not just to study theory, but to build a strong foundation through continuous practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Action
&lt;/h2&gt;

&lt;p&gt;One thing I’ve always believed is that doing something is always better than overthinking. Documentation is part of that process.&lt;/p&gt;

&lt;p&gt;Writing things down helps in two important ways. First, it preserves knowledge so I can revisit what I’ve learned later. Second, it acts as proof of progress that allows me to compare where I am today with where I was before, rather than comparing myself to others.&lt;/p&gt;

&lt;p&gt;That’s why I plan to start writing on this platform about my projects and what I learn along the way in both Software Engineering and AI Engineering.&lt;/p&gt;

&lt;p&gt;My goal is not just to document theory, but also to explain how those concepts are applied in real use cases.&lt;/p&gt;

&lt;p&gt;For example, I’m currently building a shopping receipt OCR system, which is still in the Proof-of-Concept phase. I might share the entire journey of building it — from the early experiments to the improvements and challenges I encounter along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Expectation
&lt;/h2&gt;

&lt;p&gt;Through this documentation process, I hope to build a habit of learning more consistently while preserving the knowledge I gain during my exploration and development journey.&lt;/p&gt;

&lt;p&gt;At the same time, I also hope this work adds more value to my professional profile. My goal is to strengthen my portfolio and improve my CV so that I can pursue roles such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI Engineer&lt;/li&gt;
&lt;li&gt;Full Stack AI Engineer&lt;/li&gt;
&lt;li&gt;Software Engineer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another thing I’ve realized is that personal branding is something I haven’t really explored yet. Sharing my learning journey publicly might help increase my chances of being discovered and create opportunities I might not find otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;This is still an experiment. I don’t know yet how effective it will be in the long run, but it feels like I'm heading towards the right direction.&lt;/p&gt;

&lt;p&gt;For now, the goal is simple: keep learning, keep building, and keep documenting the journey.&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>ai</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
