<?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: Tuan Hai Pham</title>
    <description>The latest articles on DEV Community by Tuan Hai Pham (@tuan_haipham_3fd97c6ecff).</description>
    <link>https://dev.to/tuan_haipham_3fd97c6ecff</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3807399%2Fe3eb6054-3317-49ab-8105-912fb3d784ef.jpg</url>
      <title>DEV Community: Tuan Hai Pham</title>
      <link>https://dev.to/tuan_haipham_3fd97c6ecff</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tuan_haipham_3fd97c6ecff"/>
    <language>en</language>
    <item>
      <title>Convert a mixed folder of office files into Markdown you can diff</title>
      <dc:creator>Tuan Hai Pham</dc:creator>
      <pubDate>Fri, 09 Oct 2026 16:49:36 +0000</pubDate>
      <link>https://dev.to/tuan_haipham_3fd97c6ecff/convert-a-mixed-folder-of-office-files-into-markdown-you-can-diff-239c</link>
      <guid>https://dev.to/tuan_haipham_3fd97c6ecff/convert-a-mixed-folder-of-office-files-into-markdown-you-can-diff-239c</guid>
      <description>&lt;p&gt;A project folder full of PDF exports, a Word spec, a spreadsheet of field names, and a handful of screenshots is hard to search and worse to review in git. I convert that pile to Markdown, edit the Markdown, and export only the format someone actually asked for.&lt;/p&gt;

&lt;p&gt;The converter I use is &lt;a href="https://markany.ai/" rel="noopener noreferrer"&gt;MarkAny&lt;/a&gt;, a browser tool between common office files and Markdown. It batch-converts PDF, Word, Excel, PowerPoint, HTML, EPUB, and images, with OCR for scans and images, and it can write edited Markdown back out to DOCX, PDF, HTML, PNG, JPG, WebP, EPUB, PPTX, or XLSX. I work on this product. This post was generated with AI assistance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sort the folder before you upload. Put scans and screenshots in one group and real text documents in another. OCR and text extraction fail in different ways, and mixing them hides which file needs a retry.&lt;/li&gt;
&lt;li&gt;Convert the document group to Markdown in one batch. Open each result and check three things: headings are still headings, tables are still tables, and running headers or footers were not pasted into every section.&lt;/li&gt;
&lt;li&gt;Run the image group separately so OCR is actually used. Read the first page of each result against the image. If a heading is missing or two columns merged into one, retry that file instead of hand-fixing a bad parse. Per-file review is the reason not to dump fifty files into one blob.&lt;/li&gt;
&lt;li&gt;Edit the Markdown in your repo. This is where the conversion pays off: you can diff a spec, comment on a line, and search for a field name.&lt;/li&gt;
&lt;li&gt;Export only what a reader asked for. A DOCX if they will comment in Word, a PDF for a snapshot, HTML for a preview. Do not export every format "just in case". You will not know which file is current.&lt;/li&gt;
&lt;li&gt;Keep the Markdown as the source of truth, and put the date in the export filename.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What tends to go wrong
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Converting a scanned PDF on the non-OCR path and getting an empty file. If the text layer is empty, the file needed OCR.&lt;/li&gt;
&lt;li&gt;Trusting a spreadsheet conversion without checking merged cells. One merged header can shift every column.&lt;/li&gt;
&lt;li&gt;Editing the exported DOCX and the Markdown as if both were the source. Pick one. For me that is the Markdown.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a single file fails, retry that file and leave the good ones alone. Re-running the whole batch is how you overwrite a file you already fixed.&lt;/p&gt;

</description>
      <category>beginners</category>
    </item>
    <item>
      <title>Translate a slide deck without rebuilding every text box</title>
      <dc:creator>Tuan Hai Pham</dc:creator>
      <pubDate>Fri, 09 Oct 2026 16:49:20 +0000</pubDate>
      <link>https://dev.to/tuan_haipham_3fd97c6ecff/translate-a-slide-deck-without-rebuilding-every-text-box-137c</link>
      <guid>https://dev.to/tuan_haipham_3fd97c6ecff/translate-a-slide-deck-without-rebuilding-every-text-box-137c</guid>
      <description>&lt;p&gt;Translating a PowerPoint by copying each text box into a translator, then pasting it back, breaks line breaks, overflows shapes, and drops speaker notes. A PDF is worse when the page is really a picture of text.&lt;/p&gt;

&lt;p&gt;This is the pass I use with &lt;a href="https://www.transmonkey.ai" rel="noopener noreferrer"&gt;TransMonkey&lt;/a&gt;, which translates documents, images, and video and tries to keep the file's structure. I work on this product. This post was generated with AI assistance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The source file: a PPT, a PDF, or a short video&lt;/li&gt;
&lt;li&gt;The target language, including the variety if it matters (Brazilian Portuguese is not European Portuguese)&lt;/li&gt;
&lt;li&gt;The original file left untouched, so you can compare&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Translate the deck as a document first, not as screenshots of the slides. A document pass can keep slides, text boxes, and notes together. Use an image pass only when the PDF is a scan and there is no text layer.&lt;/li&gt;
&lt;li&gt;Open the result beside the source and check every slide for three failures: text longer than the shape, a term that should have stayed in the source language (product names, code, API identifiers), and a speaker note that was translated when it was only for you.&lt;/li&gt;
&lt;li&gt;If text overflows, shorten the source sentence and run the translation again. Fixing twenty overflowed boxes by hand in the target language is slower, and you will miss one.&lt;/li&gt;
&lt;li&gt;For a scan or a screenshot of a UI, use image translation and then read every label at 100% zoom. OCR plus translation will invent a button name that was never on the screen.&lt;/li&gt;
&lt;li&gt;For a demo or talking-head video, review the captions before you trust a dubbed track. Listen for names and numbers. If a number changed, redo that segment. Do not publish dubbing you have not listened to.&lt;/li&gt;
&lt;li&gt;Export, and keep source and target in the same folder with the language in the filename.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What tends to go wrong
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Translating a screenshot of a slide instead of the PPT, then wondering why the text cannot be edited.&lt;/li&gt;
&lt;li&gt;Leaving code comments and UI strings in the same job with no do-not-translate list.&lt;/li&gt;
&lt;li&gt;Checking only the title slide. Overflow usually shows up on the dense slides near the end.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A clean structural translation is a draft. The review pass above is the actual work, and it is still faster than rebuilding the deck by hand.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Draft a quiz and a rubric from one lesson objective</title>
      <dc:creator>Tuan Hai Pham</dc:creator>
      <pubDate>Fri, 09 Oct 2026 16:48:51 +0000</pubDate>
      <link>https://dev.to/tuan_haipham_3fd97c6ecff/draft-a-quiz-and-a-rubric-from-one-lesson-objective-m4c</link>
      <guid>https://dev.to/tuan_haipham_3fd97c6ecff/draft-a-quiz-and-a-rubric-from-one-lesson-objective-m4c</guid>
      <description>&lt;p&gt;Teachers lose evenings to the same three artifacts: a quiz, a rubric, and a lesson outline that matches both. Copying last year's file and swapping the topic usually leaves questions that do not match the objective.&lt;/p&gt;

&lt;p&gt;This is how I draft those three from one objective with &lt;a href="https://www.teachany.com" rel="noopener noreferrer"&gt;TeachAny&lt;/a&gt;, an AI workspace for quizzes, rubrics, and lesson plans, including support for many languages. I work on this product. This post was generated with AI assistance and checked against the workflow below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start from the objective, not the questions
&lt;/h2&gt;

&lt;p&gt;Write one sentence a student could fail. Example: "Explain how a for-loop differs from a while-loop and choose one for a given task." If you cannot picture a wrong answer, the quiz will be vague no matter which tool you use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Put that sentence into the quiz generator. Ask for a short mix: two recall items, two "which structure fits" items, and one short explanation. Cap it at five questions so you will actually read them.&lt;/li&gt;
&lt;li&gt;Read every question against the objective. Delete any item a student could answer without the skill you named. That filter is the step the model will not do for you.&lt;/li&gt;
&lt;li&gt;Build the rubric from the same sentence, not from the quiz. Criteria I keep: correctness of the choice, quality of the reason, and whether the example matches the choice. Four levels is enough. If a level only says "good" or "excellent", rewrite it so a second teacher could score it the same way.&lt;/li&gt;
&lt;li&gt;Generate the lesson outline last, and tell it to teach only what the quiz measures. If the outline introduces three extra topics, cut them. The outline should support the assessment, not replace the textbook.&lt;/li&gt;
&lt;li&gt;If the class is not in English, generate the student-facing text in their language and keep your answer key in the language you grade in. Still spot-check technical terms. A correct dictionary translation of "loop" can be the wrong word for your classroom.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What tends to go wrong
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Generating twenty questions and publishing the first ten. Length hides bad items.&lt;/li&gt;
&lt;li&gt;Letting the rubric describe effort ("tries hard") instead of the skill.&lt;/li&gt;
&lt;li&gt;Trusting a translated stem without reading it aloud. One wrong term makes the item unfair.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Save the objective at the top of the doc. When a question feels off later, you can see whether the question drifted or the objective did.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Clean a messy product screenshot without leaving the browser</title>
      <dc:creator>Tuan Hai Pham</dc:creator>
      <pubDate>Fri, 09 Oct 2026 16:47:02 +0000</pubDate>
      <link>https://dev.to/tuan_haipham_3fd97c6ecff/clean-a-messy-product-screenshot-without-leaving-the-browser-2k9n</link>
      <guid>https://dev.to/tuan_haipham_3fd97c6ecff/clean-a-messy-product-screenshot-without-leaving-the-browser-2k9n</guid>
      <description>&lt;p&gt;A product screenshot often ships with a watermark, a cluttered desktop, or a background that fights the subject. Opening a full desktop editor for a one-off cleanup is slow, and enhancing the file first just bakes the junk in at a higher resolution.&lt;/p&gt;

&lt;p&gt;This is the short workflow I use in the browser with &lt;a href="https://imgkits.com" rel="noopener noreferrer"&gt;Imgkits&lt;/a&gt;, a freemium set of AI image and video tools (object removal, background edits, restoration, and enhancement). I work on these tools; this is a practical how-to, not a feature list. Wording of this post had AI assistance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A PNG or JPG of the screen or photo, kept as the untouched original&lt;/li&gt;
&lt;li&gt;A browser&lt;/li&gt;
&lt;li&gt;A few minutes, and a zoom level of 100% when you check edges&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Start with object removal if one specific thing is in the way: a watermark, a cursor, a notification, or a stray window. Brush only that region. If the fill looks smeared, undo and paint a smaller area instead of covering the whole frame.&lt;/li&gt;
&lt;li&gt;When the subject should sit on a plain field, remove the background and replace it with a flat color that matches the doc you are writing. I use a light gray for README images so the screenshot does not glow against the page.&lt;/li&gt;
&lt;li&gt;Enhance or upscale only after the cleanup. Doing it earlier makes the next pass harder, because compression junk and the defect are now sharper.&lt;/li&gt;
&lt;li&gt;Export a PNG and put it next to the original. If you cannot tell which file is cleaner at a glance, the edit was not worth keeping.&lt;/li&gt;
&lt;li&gt;Treat a short UI video as a separate job. Still frames and motion fail in different ways, and mixing them in one pass makes it harder to see which step went wrong.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What tends to go wrong
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Painting the whole image instead of the defect. The model then invents texture you did not ask for.&lt;/li&gt;
&lt;li&gt;Running enhancement twice on a soft JPEG. A second pass often adds halos or a plastic look. Compare file size and stop after one pass.&lt;/li&gt;
&lt;li&gt;Replacing the background before the subject edge is clean. Fix the edge, then composite.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a pile of assets I still prefer a scripted pipeline. For a single screenshot that needs to go into a doc today, staying in the browser is faster than launching a desktop suite and hunting for the right export preset.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
