<?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: Umitomo</title>
    <description>The latest articles on DEV Community by Umitomo (@umitomo-lab).</description>
    <link>https://dev.to/umitomo-lab</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%2F3830906%2Ff8ab1f50-43b4-40ee-b21a-a120d3344f42.jpg</url>
      <title>DEV Community: Umitomo</title>
      <link>https://dev.to/umitomo-lab</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/umitomo-lab"/>
    <language>en</language>
    <item>
      <title>Weekly Dev Log 2026-W19</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Wed, 16 Sep 2026 00:30:08 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w19-4goh</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w19-4goh</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;After all the hot weather we had up until last week, the days have suddenly turned much cooler. It finally feels like autumn is here🍂. Although I was busy this week, I think I was still able to use my time effectively and make steady progress on my iOS app📱.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Last week, I finished reviewing the basic game rules for &lt;strong&gt;Chord Tone Practice&lt;/strong&gt; and wrote that my next step would be to work on the UI. So this week, I mainly focused on designing the Chord Tone Practice screens in Figma🎨.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One of my goals was to keep the basic practice experience consistent with &lt;strong&gt;Note Practice&lt;/strong&gt;, which I had already designed and implemented earlier. The two modes share the same fretboard and basic screen structure, but Chord Tone Practice needs to display and manage more information because the player is looking for sets of three notes rather than a single note.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What I especially liked about this process was that &lt;strong&gt;I didn't have to redesign the whole practice screen from scratch&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When I designed Note Practice, I tried to keep the basic screen structure reusable because I already knew that I wanted to add more practice modes later. That decision helped a lot this week.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instead of reconsidering the fretboard layout, screen structure, navigation, and other common elements, I could focus on the parts that were unique to Chord Tone Practice💡.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I also continued using &lt;strong&gt;Codex and Figma together through MCP&lt;/strong&gt;. I could discuss possible layouts with Codex, immediately turn those ideas into visible designs in Figma, and then review and refine them using the actual screens as a shared reference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There are still some details that may change once I implement the design in SwiftUI, but the overall UI direction for Chord Tone Practice is now mostly settled🔥.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Designed the main UI for &lt;strong&gt;Chord Tone Practice&lt;/strong&gt; based on the game rules finalized last week.&lt;/li&gt;
&lt;li&gt;Reused the basic Practice Screen structure originally created for &lt;strong&gt;Note Practice&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Focused on the UI differences required for Chord Tone Practice instead of redesigning the entire screen.&lt;/li&gt;
&lt;li&gt;Added layouts for &lt;strong&gt;Root, Quality, Pattern, and Progress&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Designed the main states for multiple-note selection, correct answers, wrong answers, multiple valid sets, and completion.&lt;/li&gt;
&lt;li&gt;Compared accessibility layouts and checked how longer note labels such as &lt;code&gt;C#/Db&lt;/code&gt; would fit in compact UI elements.&lt;/li&gt;
&lt;li&gt;Used &lt;strong&gt;Codex and Figma through MCP&lt;/strong&gt; to visualize, review, and refine UI ideas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎸 Comparing Note Practice and Chord Tone Practice
&lt;/h3&gt;

&lt;p&gt;Here is a closer look at how I reused the Note Practice screen and what I added for Chord Tone Practice.&lt;/p&gt;

&lt;p&gt;Both modes use the same main structure: the title and question information at the top, the fret-range controls and guitar fretboard in the center, and an answer area at the bottom. This helped me keep the overall practice experience consistent between the two modes.&lt;/p&gt;

&lt;p&gt;However, the information needed to answer each question is different. Note Practice asks the player to find one type of note, while Chord Tone Practice asks the player to find three-note chord-tone patterns and may contain multiple valid sets within the visible fret range.&lt;/p&gt;

&lt;h4&gt;
  
  
  🎵 Note Practice
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The player finds every position that matches one target note within the visible fret range.&lt;/li&gt;
&lt;li&gt;The header only needs to show the target note and the current progress, such as &lt;code&gt;Find E 0 / 4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The player selects one position at a time, and each correct position remains highlighted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Note Practice: finding all positions for a single note)&lt;/em&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg2g2kg40s75n6f0xfx0t.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg2g2kg40s75n6f0xfx0t.png" alt="Note Practice screen showing a Find E question" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  🎶 Chord Tone Practice
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The player finds chord-tone sets across three consecutive strings.&lt;/li&gt;
&lt;li&gt;The header needs to show the &lt;strong&gt;Root&lt;/strong&gt;, &lt;strong&gt;Quality&lt;/strong&gt;, &lt;strong&gt;Pattern&lt;/strong&gt;, and &lt;strong&gt;Progress&lt;/strong&gt; separately.&lt;/li&gt;
&lt;li&gt;The selected pattern may be &lt;code&gt;1-3-5&lt;/code&gt;, &lt;code&gt;3-5-1&lt;/code&gt;, or &lt;code&gt;5-1-3&lt;/code&gt;, so the player needs to understand both the notes and their order.&lt;/li&gt;
&lt;li&gt;The screen also needs to manage temporary selections, correct and incorrect sets, previously discovered sets, and completion.&lt;/li&gt;
&lt;li&gt;I added a &lt;strong&gt;Settings&lt;/strong&gt; button so that the player can change the Root and Chord Quality used for the practice session.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Chord Tone Practice: finding three-note chord-tone sets)&lt;/em&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flzaj0jll16qq3g7egima.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flzaj0jll16qq3g7egima.png" alt="Chord Tone Practice screen showing Root, Quality, Pattern, and Progress" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The biggest visible change is the header. Instead of showing only a target note, Chord Tone Practice separates &lt;strong&gt;Root&lt;/strong&gt;, &lt;strong&gt;Quality&lt;/strong&gt;, &lt;strong&gt;Pattern&lt;/strong&gt;, and &lt;strong&gt;Progress&lt;/strong&gt; into four groups. At the same time, I was able to keep the fretboard, fret-range display, answer area, and overall visual style consistent with Note Practice.&lt;/p&gt;

&lt;p&gt;Because I had designed the original screen with future practice modes in mind, I could spend more time on these feature-specific differences instead of designing the entire screen again from the beginning.&lt;/p&gt;

&lt;p&gt;This process also showed me how useful the Codex and Figma workflow can be for UI design. When an idea from Codex was reflected in Figma, I could immediately see whether it worked visually. If something looked unclear or awkward, I could use the screen itself when discussing the next change. &lt;strong&gt;Figma became a shared visual reference between Codex and me&lt;/strong&gt;, reducing the effort required to explain every visual difference using words alone.&lt;/p&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Designing the original &lt;strong&gt;Note Practice&lt;/strong&gt; screen with future practice modes in mind made it much easier to add Chord Tone Practice.&lt;/li&gt;
&lt;li&gt;Reusing a common UI structure allowed me to focus on the differences specific to the new feature.&lt;/li&gt;
&lt;li&gt;Comparing the two practice screens visually made it easier to see which parts could remain consistent and which parts needed to change.&lt;/li&gt;
&lt;li&gt;Seeing Codex's UI ideas directly in Figma helped me notice issues that would have been difficult to find from text descriptions alone.&lt;/li&gt;
&lt;li&gt;Using &lt;strong&gt;Codex and Figma together through MCP&lt;/strong&gt; reduced the effort required to explain visual differences using words alone.&lt;/li&gt;
&lt;li&gt;Accessibility and longer labels need to be considered early, especially when adding more information to an already compact landscape layout.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Start implementing the backend logic for &lt;strong&gt;Chord Tone Practice&lt;/strong&gt; and review the implementation.&lt;/li&gt;
&lt;li&gt;Organize the UI adjustment points for the portfolio site implemented by Codex in Notion, then start making small UI refinements.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>webdev</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W18</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Tue, 08 Sep 2026 00:05:03 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w18-33bd</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w18-33bd</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We’ve still had plenty of hot days lately, but there have also been some cooler days when it rains. It’s starting to feel like summer is slowly coming to an end🎇.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Work has been quite busy recently&lt;/strong&gt;, and I haven’t been able to find as much time as I’d like for my own development projects💦. Because of that, &lt;strong&gt;it’s been about two weeks since my last Weekly Dev Log update&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;By my previous update, I had mostly finished &lt;strong&gt;Note Practice&lt;/strong&gt;, the first practice mode in ToneDrill. So I’ve now started working on the next feature, &lt;strong&gt;Chord Tone Practice&lt;/strong&gt;🦾.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Chord Tone Practice, I want the player to find chord-tone patterns on the guitar fretboard based on the selected root note and chord quality, Major or Minor🎸. For example, a Major chord can generate not only &lt;code&gt;1-3-5&lt;/code&gt;, but also patterns such as &lt;code&gt;3-5-1&lt;/code&gt; and &lt;code&gt;5-1-3&lt;/code&gt;. The player finds one correct note position on each of three consecutive strings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Personally, I really enjoy practicing simple chord tones using only the Root, 3rd, and 5th on the guitar, so that was one of the reasons I wanted to build this mode😂. I like how just a few notes can still create a clear and beautiful chord sound🎵.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This week, &lt;strong&gt;I worked with Codex to define the game rules in much more detail&lt;/strong&gt;💡. While deciding things like the root notes, Major / Minor chord qualities, chord-tone patterns, strings to use, and how correct answers should be counted, I started wondering: &lt;strong&gt;“Will these rules actually work under every possible condition?”&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;So before implementing the feature in SwiftUI, I had Codex create a separate JavaScript validation script to test the game rules first.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The script checked &lt;strong&gt;504 different conditions&lt;/strong&gt;, combining 12 root notes, Major / Minor chord qualities, three chord-tone patterns, and seven visible fret ranges.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The results confirmed that there were no cases with zero valid answers, no overlapping answer positions, and no situations where the player could get stuck before completing all valid answers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The ToneDrill app itself is being developed in Swift and SwiftUI, so using a separate JavaScript program only to validate the game rules before implementation was &lt;strong&gt;a new and interesting approach for me&lt;/strong&gt;🤔.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I also became curious about how the JavaScript script was actually checking all 504 conditions. I started debugging the code and asking Codex questions about each part of the process, and before I knew it, I had spent quite a lot of time on it 😅&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Still, it turned out to be a useful detour because I was able to learn more about how the JavaScript code worked as well🐛.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now that the basic game rules are settled, &lt;strong&gt;the next step is to work on the UI&lt;/strong&gt;🔥. I’m looking forward to seeing how the practice mode feels once it starts taking shape on screen✨.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;About a month ago, I was able to keep up with both development and my weekly Dev.to posts fairly consistently. Recently, though, work has been much busier, and &lt;strong&gt;there have been many days when I haven’t been able to make as much progress as I wanted&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Still, I want to remember why I started doing this in the first place: because I enjoy &lt;strong&gt;building things&lt;/strong&gt; and &lt;strong&gt;learning things I didn’t know before&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rather than comparing myself too much with other amazing developers, &lt;strong&gt;I want to keep moving forward one step at a time at my own pace&lt;/strong&gt;🚶. Lately, &lt;strong&gt;I’ve been reminded again of how important that is&lt;/strong&gt;🌱.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Defined and reviewed the core rules for the new &lt;strong&gt;Chord Tone Practice mode&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Finalized the root, chord quality, degree pattern, and valid answer rules.&lt;/li&gt;
&lt;li&gt;Used an AI-generated JavaScript script to validate all &lt;strong&gt;504 planned conditions&lt;/strong&gt; before Swift implementation.&lt;/li&gt;
&lt;li&gt;Reviewed the validation script to understand how it generated answer sets and checked edge cases.&lt;/li&gt;
&lt;li&gt;Debugged the script with breakpoints and conditional breakpoints to trace specific test cases.&lt;/li&gt;
&lt;li&gt;Documented the script’s execution flow, validation logic, and important JavaScript concepts in a separate Markdown learning note.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;I learned that a separate validation program can be useful for checking game rules before implementing them in the main application.&lt;/li&gt;
&lt;li&gt;I learned that reviewing AI-generated validation code is important, not just checking whether the final result says “passed.”&lt;/li&gt;
&lt;li&gt;I gained a better understanding of how the script used &lt;code&gt;map()&lt;/code&gt;, &lt;code&gt;filter()&lt;/code&gt;, &lt;code&gt;flatMap()&lt;/code&gt;, &lt;code&gt;reduce()&lt;/code&gt;, &lt;code&gt;some()&lt;/code&gt;, &lt;code&gt;every()&lt;/code&gt;, &lt;code&gt;Set&lt;/code&gt;, &lt;code&gt;Map&lt;/code&gt;, and bit masks.&lt;/li&gt;
&lt;li&gt;I learned how conditional breakpoints can help isolate one specific case from many repeated test combinations.&lt;/li&gt;
&lt;li&gt;Debugging the script helped me understand its execution flow much more clearly than simply reading the code.&lt;/li&gt;
&lt;li&gt;The investigation gave me more confidence in the Chord Tone Practice rules before moving on to the Swift implementation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Continue designing the UI for &lt;strong&gt;Chord Tone Practice&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Organize the UI adjustment points for the portfolio site implemented by Codex in Notion, then start making small UI refinements.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>webdev</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W17</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Mon, 17 Aug 2026 04:04:23 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w17-1ib</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w17-1ib</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This is my first update in &lt;strong&gt;two weeks&lt;/strong&gt;😂. I &lt;strong&gt;took a long break&lt;/strong&gt; and enjoyed the summer with my family🎐.&lt;/li&gt;
&lt;li&gt;I was busy enjoying summer events, so I did not make much progress over the past two weeks. However, I was able to &lt;strong&gt;make some progress on my iOS app&lt;/strong&gt;🐛.&lt;/li&gt;
&lt;li&gt;Until now, &lt;strong&gt;Note Practice mode&lt;/strong&gt; asked users to &lt;strong&gt;find just one position for a given note on the guitar fretboard&lt;/strong&gt;. During my break, I changed it so that users now need to &lt;strong&gt;find all matching note positions within the visible fret range&lt;/strong&gt;🎸.&lt;/li&gt;
&lt;li&gt;With this update, the development of Note Practice mode is mostly complete. I have finally &lt;strong&gt;finished developing one full practice mode&lt;/strong&gt;✨.&lt;/li&gt;
&lt;li&gt;While working on these changes, I also learned more about &lt;strong&gt;how several parts of the SwiftUI implementation work&lt;/strong&gt;💡.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Changed Note Practice mode so that users now need to find all matching positions for the target note within the visible fret range instead of finding only one position.&lt;/li&gt;
&lt;li&gt;Added a progress indicator such as &lt;code&gt;Find E 2 / 4&lt;/code&gt; to show how many correct positions have been found and how many remain.&lt;/li&gt;
&lt;li&gt;Replaced the previous single-selection state with a &lt;code&gt;Set&amp;lt;FretPosition&amp;gt;&lt;/code&gt; so that multiple correct positions can remain highlighted without counting the same position twice.&lt;/li&gt;
&lt;li&gt;Added temporary &lt;code&gt;Correct!&lt;/code&gt; and &lt;code&gt;Try Again&lt;/code&gt; feedback after each answer while keeping previously found positions highlighted.&lt;/li&gt;
&lt;li&gt;Introduced a &lt;code&gt;FeedbackState&lt;/code&gt; enum to manage idle, correct-feedback, and wrong-feedback states.&lt;/li&gt;
&lt;li&gt;Implemented a cancellable Swift concurrency &lt;code&gt;Task&lt;/code&gt; to automatically clear temporary feedback after approximately one second.&lt;/li&gt;
&lt;li&gt;Added UUID-based token validation to prevent an older feedback Task from updating the UI after a newer answer has already been processed.&lt;/li&gt;
&lt;li&gt;Separated fret-answer interactions from fret-range navigation so that each type of control can be enabled or disabled independently.&lt;/li&gt;
&lt;li&gt;Added cancellation handling in &lt;code&gt;onDisappear&lt;/code&gt; so that view-owned asynchronous work is stopped when the user leaves the practice screen.&lt;/li&gt;
&lt;li&gt;Used Xcode breakpoints to inspect &lt;code&gt;scheduleFeedbackReset()&lt;/code&gt; at key points such as UUID generation, Task creation, &lt;code&gt;Task.sleep&lt;/code&gt;, cancellation checks, token validation, and the final state reset.&lt;/li&gt;
&lt;li&gt;Reviewed the Codex-generated implementation against the official Apple and Swift documentation to better understand how SwiftUI state management, Tasks, cancellation, and view lifecycle behavior work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎸 How I Changed Note Practice Mode
&lt;/h3&gt;

&lt;p&gt;Here is a more detailed look at what I changed in Note Practice mode.&lt;/p&gt;

&lt;p&gt;Previously, the user only needed to find one correct position for the note shown in the question. With this update, the user now needs to find every position with the same note name within the currently visible fret range.&lt;/p&gt;

&lt;p&gt;In the old version, the question was completed as soon as the user found one correct position. This meant that a user could answer correctly even if they had only memorized one specific position for that note on the fretboard.&lt;/p&gt;

&lt;p&gt;In the new version, the user also needs to find where the same note appears on the other strings. The goal of this change was to encourage users to think about how the same note is distributed across the fretboard, rather than memorizing a single position for each note.&lt;/p&gt;

&lt;p&gt;I also added a progress indicator that updates each time the user finds a correct position. Once all of the correct positions have been found, the app displays &lt;code&gt;Congratulations!&lt;/code&gt; and moves on to the next question. This makes it easier for the user to see how many positions are still left to find before completing the question.&lt;/p&gt;

&lt;h4&gt;
  
  
  🎵 Old Version
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Within a seven-fret range, the user only needed to find one position that matched the note shown in the question.&lt;/li&gt;
&lt;li&gt;The app checked whether the selected position was correct or incorrect and provided feedback to the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Old version: Note Practice mode)&lt;/em&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F222hisedvy7gk2ut2got.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F222hisedvy7gk2ut2got.png" alt="NotePracticeMode_Old" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  🎶 New Version
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Within a seven-fret range, the user now needs to find every position that matches the note shown in the question.&lt;/li&gt;
&lt;li&gt;The app still checks each answer and provides feedback, but the number of correct answers now increases each time the user finds a new correct position.&lt;/li&gt;
&lt;li&gt;Once the number of correct answers reaches the total number of matching positions, the app displays &lt;code&gt;Congratulations!&lt;/code&gt; and moves on to the next question.&lt;/li&gt;
&lt;li&gt;The goal of this change was to help users become more aware of how notes are arranged across the entire guitar fretboard instead of memorizing each note as a single isolated position.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(New version: Note Practice mode)&lt;/em&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fen5vj16q65mze1cwha9j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fen5vj16q65mze1cwha9j.jpg" alt="NotePracticeMode_New" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I learned that an enum is a good way to model mutually exclusive UI states. Using &lt;code&gt;FeedbackState&lt;/code&gt; means the screen can only be in one feedback state at a time, instead of relying on several Boolean properties that could accidentally conflict with one another.&lt;/li&gt;
&lt;li&gt;I learned that a &lt;code&gt;Set&lt;/code&gt; is useful when I need to keep track of unique values. In this case, &lt;code&gt;Set&amp;lt;FretPosition&amp;gt;&lt;/code&gt; prevents the same fret position from being counted more than once while still preserving multiple correct answers.&lt;/li&gt;
&lt;li&gt;I learned that application state and UI interaction state do not always need to be represented in the same way. A computed Boolean property such as &lt;code&gt;isRangeInteractionDisabled&lt;/code&gt; can translate the current application state into a simple value that the view uses to enable or disable controls.&lt;/li&gt;
&lt;li&gt;I learned that &lt;code&gt;Task&amp;lt;Void, Never&amp;gt;?&lt;/code&gt; can be used to keep a reference to an asynchronous Task that returns no value. Keeping that reference also allows the current feedback Task to be cancelled when necessary.&lt;/li&gt;
&lt;li&gt;I learned that Swift Task cancellation is cooperative rather than an immediate forced stop. Calling &lt;code&gt;cancel()&lt;/code&gt; requests cancellation, but the Task still needs to check its cancellation state or reach a cancellation-aware suspension point such as &lt;code&gt;Task.sleep&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I learned why checking only Task cancellation may not always be enough. Comparing a UUID token captured by each Task with the latest &lt;code&gt;feedbackToken&lt;/code&gt; provides an additional way to make sure that an older Task cannot clear newer UI state.&lt;/li&gt;
&lt;li&gt;I learned that &lt;code&gt;Task.sleep&lt;/code&gt; suspends the current Task without blocking the underlying thread. This means the app and &lt;code&gt;MainActor&lt;/code&gt; can continue processing other work while the feedback timer is waiting.&lt;/li&gt;
&lt;li&gt;I learned that asynchronous work owned by a view should be cancelled when that view disappears. Using &lt;code&gt;onDisappear&lt;/code&gt; helps prevent a feedback Task from attempting to update state after the user has already left the practice screen.&lt;/li&gt;
&lt;li&gt;I learned that adding &lt;code&gt;Equatable&lt;/code&gt; to a custom enum allows its values to be compared with operators such as &lt;code&gt;==&lt;/code&gt; and &lt;code&gt;!=&lt;/code&gt;. For example, &lt;code&gt;feedbackState != .idle&lt;/code&gt; can be used to determine whether temporary feedback is currently being displayed.&lt;/li&gt;
&lt;li&gt;I learned that SwiftUI's &lt;code&gt;ButtonStyle&lt;/code&gt; can affect the visual appearance of disabled controls, so interaction behavior and visual behavior should both be checked when disabling buttons.&lt;/li&gt;
&lt;li&gt;I learned that &lt;code&gt;.accessibilityElement(children: .combine)&lt;/code&gt; can combine related child views into a single accessibility element, while &lt;code&gt;.accessibilityHidden(true)&lt;/code&gt; can hide decorative elements from VoiceOver. These modifiers change the accessibility structure without changing the visual layout.&lt;/li&gt;
&lt;li&gt;By stepping through &lt;code&gt;scheduleFeedbackReset()&lt;/code&gt; with Xcode breakpoints, I was able to see how UUID generation, &lt;code&gt;Task.sleep&lt;/code&gt;, cancellation checks, token validation, and state reset work together instead of only understanding them from the source code.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Start developing Chord Tone Practice mode, another practice mode separate from Note Practice mode.&lt;/li&gt;
&lt;li&gt;Organize the UI adjustment points for the portfolio site implemented by Codex in Notion, then start making small UI refinements.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>webdev</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W16</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Fri, 31 Jul 2026 04:46:31 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w16-c61</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w16-c61</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This week, I was able to &lt;strong&gt;make a little more progress&lt;/strong&gt; on my personal &lt;strong&gt;iOS development project&lt;/strong&gt;, continuing from last week❤️‍🔥.&lt;/li&gt;
&lt;li&gt;By last week, I had finished implementing the main screen that is opened from the top menu. Based on that screen, I &lt;strong&gt;discussed the game logic&lt;/strong&gt; for the single-note practice menu on the fretboard with &lt;strong&gt;Codex&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I &lt;strong&gt;enjoyed the process&lt;/strong&gt; of &lt;strong&gt;starting with a rough idea&lt;/strong&gt; and gradually &lt;strong&gt;turning it into&lt;/strong&gt; a more concrete &lt;strong&gt;implementation plan&lt;/strong&gt;🦾.&lt;/li&gt;
&lt;li&gt;For the first time, I asked &lt;strong&gt;Codex&lt;/strong&gt; to &lt;strong&gt;implement unit tests&lt;/strong&gt; for my SwiftUI project. As a result, I noticed that &lt;strong&gt;the implementation style&lt;/strong&gt; was &lt;strong&gt;different from&lt;/strong&gt; the testing approach I had &lt;strong&gt;learned in Apple’s SwiftUI tutorials&lt;/strong&gt;🤔.&lt;/li&gt;
&lt;li&gt;After looking into it, I found that &lt;strong&gt;Codex&lt;/strong&gt; had used the older &lt;strong&gt;XCTest&lt;/strong&gt; framework, so I revised the tests to use Swift &lt;strong&gt;Testing&lt;/strong&gt;, which is easier for me to understand based on what I have learned so far.&lt;/li&gt;
&lt;li&gt;By accumulating discoveries like this, I want to &lt;strong&gt;keep improving my ability&lt;/strong&gt; to develop iOS apps smoothly with AI agents🚶.&lt;/li&gt;
&lt;li&gt;I was also able to &lt;strong&gt;continue working on TryHackMe&lt;/strong&gt; again this week. I only completed a small part, but I want to &lt;strong&gt;keep moving forward one small step&lt;/strong&gt; at a time✨.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Defined the new completion logic for the current Note Practice mode through discussions with Codex.&lt;/li&gt;
&lt;li&gt;Finalized the progress display, feedback timers, fret-range controls, and automatic transition to the next question.&lt;/li&gt;
&lt;li&gt;Created the Note Practice completion feature specification and implementation plan, then updated the Task Index to reflect the latest decisions.&lt;/li&gt;
&lt;li&gt;Planned the SwiftUI state management, testing strategy, and file-level changes before starting implementation.&lt;/li&gt;
&lt;li&gt;Added completion-specific color assets for the new Note Practice feedback state.&lt;/li&gt;
&lt;li&gt;Implemented &lt;code&gt;NotePracticeCalculator&lt;/code&gt; to calculate visible positions, target positions, and eligible note names.&lt;/li&gt;
&lt;li&gt;Added logic that excludes the current note when alternative questions are available.&lt;/li&gt;
&lt;li&gt;When I asked Codex to implement unit tests without specifying a framework, it initially used XCTest.&lt;/li&gt;
&lt;li&gt;Since I had learned unit testing with Swift Testing in Apple’s Swift tutorials, I decided to use Testing instead.&lt;/li&gt;
&lt;li&gt;Refactored the tests with &lt;code&gt;@Suite&lt;/code&gt;, &lt;code&gt;@Test&lt;/code&gt;, and &lt;code&gt;#expect&lt;/code&gt;, adding clear Japanese display names for readability.&lt;/li&gt;
&lt;li&gt;Updated &lt;code&gt;AGENTS.md&lt;/code&gt; to preserve the testing policy and current progress for future Codex sessions.&lt;/li&gt;
&lt;li&gt;Ran the &lt;code&gt;NotePracticeCalculator&lt;/code&gt; unit tests in Xcode and confirmed that all tests passed.&lt;/li&gt;
&lt;li&gt;Investigated a Swift Concurrency warning related to the &lt;code&gt;Hashable&lt;/code&gt; conformance of &lt;code&gt;FretPosition&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Marked &lt;code&gt;FretPosition&lt;/code&gt; as &lt;code&gt;nonisolated&lt;/code&gt; after confirming that it is an immutable value type with no UI dependencies.&lt;/li&gt;
&lt;li&gt;Added shared layout metrics for the Answer and Feedback panels to keep the UI dimensions consistent.&lt;/li&gt;
&lt;li&gt;Introduced &lt;code&gt;FretCellVisualState&lt;/code&gt; to explicitly represent the &lt;code&gt;normal&lt;/code&gt;, &lt;code&gt;found&lt;/code&gt;, and &lt;code&gt;wrong&lt;/code&gt; states.&lt;/li&gt;
&lt;li&gt;Updated &lt;code&gt;FretCellView&lt;/code&gt;, its previews, and &lt;code&gt;FretboardView&lt;/code&gt; incrementally while documenting the next verification steps for Xcode.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Worked on the AI System Reconnaissance room, part of the AI Security Learning Path on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I really enjoyed brainstorming the Note Practice changes with Codex. I started with rough feature ideas and gradually saw them turn into a well-structured SwiftUI specification.&lt;/li&gt;
&lt;li&gt;Discussing the behavior step by step made the design process feel much more efficient.&lt;/li&gt;
&lt;li&gt;Separating persistent progress from temporary feedback makes SwiftUI state management clearer and safer.&lt;/li&gt;
&lt;li&gt;Planning interaction states, disabled appearances, tests, and accessibility before coding can prevent many implementation problems later.&lt;/li&gt;
&lt;li&gt;A range such as &lt;code&gt;0...6&lt;/code&gt; is a &lt;code&gt;ClosedRange&amp;lt;Int&amp;gt;&lt;/code&gt; that includes both endpoints.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;map&lt;/code&gt; transforms each element, while &lt;code&gt;filter&lt;/code&gt; keeps the original elements that satisfy a Boolean condition.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Set&lt;/code&gt; removes duplicates, &lt;code&gt;contains&lt;/code&gt; checks membership, and &lt;code&gt;Hashable&lt;/code&gt; makes custom values usable in a set.&lt;/li&gt;
&lt;li&gt;Codex may choose APIs or implementation styles that differ from those taught in Apple’s latest Swift and SwiftUI tutorials. These approaches are not necessarily wrong, but some may follow older conventions.&lt;/li&gt;
&lt;li&gt;Defining preferred modern patterns in &lt;code&gt;AGENTS.md&lt;/code&gt; is important for keeping future implementations consistent and preventing the same outdated approach from being chosen again.&lt;/li&gt;
&lt;li&gt;I learned that Xcode’s Default Actor Isolation can implicitly isolate a type and its protocol conformances to &lt;code&gt;MainActor&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I learned that a &lt;code&gt;MainActor&lt;/code&gt;-isolated &lt;code&gt;Hashable&lt;/code&gt; conformance cannot safely be used by a nonisolated generic collection such as &lt;code&gt;Set&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I learned that adding &lt;code&gt;@MainActor&lt;/code&gt; to a test function does not solve a warning caused by the isolation of the model type or its protocol conformance.&lt;/li&gt;
&lt;li&gt;I learned that &lt;code&gt;nonisolated&lt;/code&gt; should be applied based on a type’s responsibilities, not added mechanically just to remove a compiler warning.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 TryHackMe Learning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI System Reconnaissance
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Task 4: Enumerating AI Systems
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I learned that MLflow is a highly valuable service to enumerate because it can expose experiments, registered models, model versions, training runs, and downloadable artifacts through a small number of REST API calls.&lt;/li&gt;
&lt;li&gt;I learned that the &lt;code&gt;model-versions/search&lt;/code&gt; endpoint is especially important because it can reveal the artifact URI, user ID, timestamps, and stage labels, which show where model files are stored and whether a model is used in production or staging.&lt;/li&gt;
&lt;li&gt;I understood that inference servers such as Triton and TensorFlow Serving expose model metadata, including input tensor names, shapes, data types, backend frameworks, and maximum batch sizes, which can show exactly how to format a valid inference request.&lt;/li&gt;
&lt;li&gt;I learned that vector databases such as Qdrant, Weaviate, and Chroma can reveal what kind of data an AI system is indexing, including collection names, vector dimensions, distance metrics, point counts, schemas, and embedding model information.&lt;/li&gt;
&lt;li&gt;I learned how to use &lt;code&gt;curl -s&lt;/code&gt; to retrieve API responses quietly without extra progress output, and how to use &lt;code&gt;jq -r&lt;/code&gt; to extract specific values from JSON responses in a clean, readable format.&lt;/li&gt;
&lt;li&gt;I learned that Jupyter notebooks can become a serious security risk because data scientists may accidentally store cleartext credentials, access keys, or tokens in notebook cells, which can become a bridge to MLflow, cloud storage, and other parts of the AI stack.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Continue developing the Note Practice menu for ToneDrill.&lt;/li&gt;
&lt;li&gt;Organize the UI adjustment points for the portfolio site implemented by Codex in Notion, then start making small UI refinements.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>webdev</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W15</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Fri, 24 Jul 2026 07:28:11 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w15-4fhi</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w15-4fhi</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Summer has fully arrived in Japan, and people are enjoying the season in many ways, from local festivals to swimming pools🌊. &lt;strong&gt;Just like last week, work has stayed hot in more ways than one&lt;/strong&gt;💦, but I have still been &lt;strong&gt;finding small pockets of time to move my projects forward little by little&lt;/strong&gt;🐛. I want to &lt;strong&gt;keep growing at my own pace without rushing&lt;/strong&gt;✨.&lt;/li&gt;
&lt;li&gt;This week, I was able to &lt;strong&gt;make progress on the iOS app development&lt;/strong&gt; for ToneDrill. Based on &lt;strong&gt;the top menu UI design&lt;/strong&gt; I created in &lt;strong&gt;Figma&lt;/strong&gt; last week, I implemented the screen in &lt;strong&gt;SwiftUI&lt;/strong&gt;⛏️.&lt;/li&gt;
&lt;li&gt;I asked &lt;strong&gt;Codex&lt;/strong&gt; to implement it &lt;strong&gt;using the same workflow&lt;/strong&gt; I used when building &lt;strong&gt;the first screen with the app’s main feature&lt;/strong&gt;. This time as well, &lt;strong&gt;Codex helped me implement the SwiftUI screen closely based on the Figma UI design&lt;/strong&gt;🦾.&lt;/li&gt;
&lt;li&gt;However, some detailed adjustments still &lt;strong&gt;require human review&lt;/strong&gt; and &lt;strong&gt;manual refinement&lt;/strong&gt;. I will continue &lt;strong&gt;reviewing the implementation myself&lt;/strong&gt; while learning more about the overall iOS app development flow and SwiftUI implementation.&lt;/li&gt;
&lt;li&gt;Since &lt;strong&gt;Codex&lt;/strong&gt; handles the overall implementation structure, I can &lt;strong&gt;move forward with iOS app development while saving a significant amount of time&lt;/strong&gt;. This has made me feel the &lt;strong&gt;usefulness of AI even more clearly&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I was also able to &lt;strong&gt;complete one TryHackMe task for the first time in two weeks&lt;/strong&gt;😂. The room I am currently working on also covers &lt;strong&gt;infrastructure used in AI applications&lt;/strong&gt;, so &lt;strong&gt;there are many unfamiliar terms&lt;/strong&gt;. Even so, I want to &lt;strong&gt;keep making progress little by little while researching them as I go&lt;/strong&gt;🔍.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Organized the structure of the top menu screen in Figma.&lt;/li&gt;
&lt;li&gt;Created designs for both the main top menu and the submenu screen that opens when a menu button is selected.&lt;/li&gt;
&lt;li&gt;Defined a “Coming Soon” state for features planned for future development and established a corresponding color palette.&lt;/li&gt;
&lt;li&gt;Created the SVG icons used on the menu screens in Figma.&lt;/li&gt;
&lt;li&gt;Added the new colors and icons from the design process to &lt;code&gt;Assets.xcassets&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Organized &lt;code&gt;Assets.xcassets&lt;/code&gt; into separate folders for colors and images.&lt;/li&gt;
&lt;li&gt;Implemented the Top Menu and Practice Mode screens in SwiftUI.&lt;/li&gt;
&lt;li&gt;Added reusable menu card styles and layout settings.&lt;/li&gt;
&lt;li&gt;Connected the screens using &lt;code&gt;NavigationStack&lt;/code&gt; and &lt;code&gt;NavigationLink&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Added disabled “Coming Soon” cards for future features.&lt;/li&gt;
&lt;li&gt;Documented the implementation and prepared an Xcode verification checklist.&lt;/li&gt;
&lt;li&gt;Reviewed the Xcode result and found that the &lt;code&gt;NavigationStack&lt;/code&gt; navigation bar pushed &lt;code&gt;FretboardPracticeView&lt;/code&gt; downward, clipping the &lt;code&gt;Answer&lt;/code&gt; and &lt;code&gt;Next&lt;/code&gt; area.&lt;/li&gt;
&lt;li&gt;Hid the Back button and navigation bar using &lt;code&gt;.navigationBarBackButtonHidden(true)&lt;/code&gt; and &lt;code&gt;.toolbar(.hidden, for: .navigationBar)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Added a custom &lt;code&gt;Quit&lt;/code&gt; button that presents an alert before calling &lt;code&gt;dismiss()&lt;/code&gt; to return to &lt;code&gt;PracticeModeView&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Worked on the AI System Reconnaissance room, part of the AI Security Learning Path on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reviewed how to add new Color Sets and Image Sets to &lt;code&gt;Assets.xcassets&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Visually distinguishing between enabled and disabled menu components helped clarify the intended result before implementing the screens in SwiftUI.&lt;/li&gt;
&lt;li&gt;I was reminded that using Codex to edit and organize Figma designs through MCP is an efficient way to break down an existing UI concept into detailed, implementation-ready specifications.&lt;/li&gt;
&lt;li&gt;Parent views should decide a card’s state, layout, and destination.&lt;/li&gt;
&lt;li&gt;Reusable views can translate configuration values into visual styles.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MenuCardState&lt;/code&gt; is a display setting, not the same as SwiftUI’s &lt;code&gt;@State&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Keeping navigation outside reusable UI components makes responsibilities clearer.&lt;/li&gt;
&lt;li&gt;Figma designs should be adapted to responsive SwiftUI layouts instead of copied as fixed coordinates.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NavigationStack&lt;/code&gt; manages the screen hierarchy, while &lt;code&gt;NavigationLink&lt;/code&gt; opens each destination.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GeometryReader&lt;/code&gt; lets a view calculate its layout from the space currently available to it.&lt;/li&gt;
&lt;li&gt;Destination views are not placed inside the Top Menu’s &lt;code&gt;GeometryReader&lt;/code&gt;; they receive their own layout space when presented by &lt;code&gt;NavigationStack&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Adding &lt;code&gt;NavigationStack&lt;/code&gt; can change the available layout height, even when the destination view itself is unchanged.&lt;/li&gt;
&lt;li&gt;Navigation changes must be reviewed together with the destination screen’s existing size and safe-area assumptions.&lt;/li&gt;
&lt;li&gt;A practice or game screen may need a protected exit flow instead of the standard Back button.&lt;/li&gt;
&lt;li&gt;The destination view should control its own navigation-bar visibility when it requires a full-height layout.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 TryHackMe Learning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI System Reconnaissance
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Task 3: Fingerprinting AI Services
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I learned that finding an open port is only the first step. To understand what is actually running behind the port, I need to fingerprint the service.&lt;/li&gt;
&lt;li&gt;I learned that standard Nmap service detection is not always enough for AI infrastructure because AI services can be mislabeled as generic HTTP services or unknown gRPC services.&lt;/li&gt;
&lt;li&gt;I understood that AI service fingerprinting requires checking multiple clues, such as HTTP headers, JSON response structures, error messages, endpoint names, and gRPC behavior.&lt;/li&gt;
&lt;li&gt;I learned that some AI frameworks reveal their identity through response headers. For example, TorchServe may return a &lt;code&gt;Server: TorchServe&lt;/code&gt; header, while Triton can expose Triton-specific headers and telemetry information.&lt;/li&gt;
&lt;li&gt;I learned that API responses can also reveal the framework. For example, OpenAI-compatible endpoints often return JSON containing fields such as &lt;code&gt;"object": "model"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I understood that error messages can be useful for fingerprinting because AI frameworks often return detailed debugging information about tensor shapes, data types, or internal namespaces.&lt;/li&gt;
&lt;li&gt;I learned that AI-related endpoints often use names such as &lt;code&gt;/predict&lt;/code&gt;, &lt;code&gt;/infer&lt;/code&gt;, &lt;code&gt;/generate&lt;/code&gt;, &lt;code&gt;/embeddings&lt;/code&gt;, &lt;code&gt;/v1/models&lt;/code&gt;, and &lt;code&gt;/v2/models&lt;/code&gt;, which are different from traditional REST endpoints like &lt;code&gt;/users&lt;/code&gt; or &lt;code&gt;/products&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I learned that some AI services expose gRPC in addition to HTTP, and normal HTTP scanners may miss these services because gRPC is a binary protocol.&lt;/li&gt;
&lt;li&gt;I understood that &lt;code&gt;grpcurl&lt;/code&gt; can be used to inspect gRPC services, and if gRPC reflection is enabled, it may reveal the available services and API schema.&lt;/li&gt;
&lt;li&gt;I learned that fingerprinting does not always require exploitation. Even simple requests, harmless prompts, headers, and response formats can reveal what model or framework is running behind an endpoint.&lt;/li&gt;
&lt;li&gt;Through the exercise, I learned how to move from “this port is open” to “this service is likely Triton, MLflow, Qdrant, or Jupyter” by checking service-specific responses.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Continue developing the top menu screen for ToneDrill.&lt;/li&gt;
&lt;li&gt;Organize the UI adjustment points for the portfolio site implemented by Codex in Notion, then start making small UI refinements.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>webdev</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W14</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Thu, 16 Jul 2026 08:02:49 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w14-ope</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w14-ope</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;After several gloomy weeks of rain, &lt;strong&gt;summer suddenly arrived&lt;/strong&gt; in Japan, and &lt;strong&gt;it lifted my mood&lt;/strong&gt;❤️‍🔥! At the same time, &lt;strong&gt;work has been hot&lt;/strong&gt; in more ways than one💦, so I have been trying to &lt;strong&gt;enjoy development&lt;/strong&gt; efficiently with &lt;strong&gt;the limited time I have&lt;/strong&gt;😎.&lt;/li&gt;
&lt;li&gt;This week, I worked on &lt;strong&gt;designing the top menu screen for my iOS app&lt;/strong&gt; using the new workflow I built last week🐠.&lt;/li&gt;
&lt;li&gt;I also &lt;strong&gt;created rule files and a task management document for my portfolio website project&lt;/strong&gt; so that I can apply the same Codex workflow I built for iOS development to my web development project🌈.&lt;/li&gt;
&lt;li&gt;Setting everything up took some effort, but now I can use a similar workflow for both iOS and web development, which made me feel much more organized🦾.&lt;/li&gt;
&lt;li&gt;I also tried &lt;strong&gt;Penpot&lt;/strong&gt; to see whether it could replace some of the design work I currently do in &lt;strong&gt;Figma&lt;/strong&gt;, as I was &lt;strong&gt;reconsidering my Figma subscription&lt;/strong&gt;🤔.&lt;/li&gt;
&lt;li&gt;I thought &lt;strong&gt;Penpot was a great tool&lt;/strong&gt;, but &lt;strong&gt;I decided to treat the cost of Figma as a necessary expense for now&lt;/strong&gt; and &lt;strong&gt;focus on developing efficiently while still enjoying the process&lt;/strong&gt;🤗.&lt;/li&gt;
&lt;li&gt;I have not worked on &lt;strong&gt;TryHackMe&lt;/strong&gt; for more than two weeks, so &lt;strong&gt;next week I want to at least reconnect with it, even if I only review the content briefly&lt;/strong&gt;🐛.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Used Codex to create the top menu screen design for ToneDrill in Figma.&lt;/li&gt;
&lt;li&gt;Used the workflow I built last week, where Codex first reads documents such as &lt;code&gt;AGENTS.md&lt;/code&gt; and &lt;code&gt;TaskIndex.md&lt;/code&gt; before starting the task.&lt;/li&gt;
&lt;li&gt;Followed a similar process to the previous implementation: first, I asked Codex to generate multiple UI design ideas as images.&lt;/li&gt;
&lt;li&gt;Chose the design I liked the most from those options and used it as the base direction.&lt;/li&gt;
&lt;li&gt;Organized the information needed to implement the selected design in Figma as &lt;code&gt;top-menu-figma-brief.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Organized the structure of the top menu screen in Figma based on the design created there.&lt;/li&gt;
&lt;li&gt;Decided to include menu buttons for features I want to implement in the future on the top menu screen as well. I designed them so that it is clear they are currently unavailable.&lt;/li&gt;
&lt;li&gt;Since this added a new “unavailable” state, I also organized the color rules for that state in the Figma design system.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Last week, I created a new Codex workflow for ToneDrill, my personal iOS development project. This week, I introduced a similar workflow to My New Portfolio Website, a personal web development project, by creating an &lt;code&gt;AGENTS.md&lt;/code&gt; file and a dedicated task management file.&lt;/li&gt;
&lt;li&gt;To make the workflow easier to use, I reviewed both the immediate tasks and the medium- to long-term roadmap for My New Portfolio Website and organized them in the task management file.&lt;/li&gt;
&lt;li&gt;I also updated my Notion setup so that Codex can read and write project records through the Notion MCP integration.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🖼️ Design Tool Exploration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tried Penpot, an open-source design tool, to explore whether I can edit design data from Codex without using Figma’s Full Seat plan.&lt;/li&gt;
&lt;li&gt;Checked how Penpot works as a possible alternative to Figma for managing UI design data.&lt;/li&gt;
&lt;li&gt;Explored whether Penpot could fit into my AI-assisted design and development workflow.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;After reviewing and improving my workflow last week, &lt;strong&gt;I felt that Codex could work more smoothly because it had a better understanding of the task details and previous project context&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I asked Codex to create multiple design ideas, and I chose a simple layout.&lt;/li&gt;
&lt;li&gt;I realized that &lt;strong&gt;when the UI structure is simple and does not rely on complex image editing or highly detailed visual parts, there is less gap between what I imagine and what the AI understands&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Based on this, I felt that &lt;strong&gt;an efficient approach is to first use AI to build an app with a simple overall structure&lt;/strong&gt; and the main features I want to use, then work on detailed UI refinements later.&lt;/li&gt;
&lt;li&gt;Since I am developing this app by myself &lt;strong&gt;alongside my full-time job&lt;/strong&gt;, I realized that &lt;strong&gt;choosing what to focus on is very important&lt;/strong&gt;🤔.&lt;/li&gt;
&lt;li&gt;For now, I think &lt;strong&gt;it is better to prioritize finishing a simple working app&lt;/strong&gt;, even if that means sacrificing advanced, complex, or visually impressive UI design at the beginning❤️‍🔥.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Setting up this kind of workflow &lt;strong&gt;takes some time at first&lt;/strong&gt;, but having a consistent way of working across different projects has &lt;strong&gt;reduced both the mental effort and the stress involved in switching between them&lt;/strong&gt;😉.&lt;/li&gt;
&lt;li&gt;I had already been managing tasks for My New Portfolio Website in Notion, but aligning its task management structure with the one used for my iOS project made everything feel much more organized and easier to understand.&lt;/li&gt;
&lt;li&gt;Although the workflow is still relatively simple, I now have a basic and repeatable structure for using Codex in my personal development projects. As a result, &lt;strong&gt;I have a much clearer idea of how and when I want to use Codex than I did before&lt;/strong&gt;🧐.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎨 What I Learned from Exploring Design Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  💡 What I found
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Learned that &lt;strong&gt;Codex can read from and write to Penpot design files by using Penpot’s MCP server&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I actually asked Codex to create a simple dashboard design in Penpot, then tested whether I could implement a web app based on that design. Through this, I confirmed that &lt;strong&gt;Codex can write design data to Penpot and that it is possible to implement a program based on a Penpot design&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I also tested what differences would appear if I asked Codex to recreate the ToneDrill UI design I am currently working on in Figma as a similar design in Penpot.&lt;/li&gt;
&lt;li&gt;As a result, I found that &lt;strong&gt;it is possible to create a design in Penpot that is almost the same as the Figma design&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🖼️ Figma Design and Penpot Design
&lt;/h3&gt;

&lt;p&gt;When I tested this workflow, the designs Codex actually created looked like this.&lt;/p&gt;

&lt;p&gt;I was surprised that Penpot could recreate almost the same design🔥!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Penpot Design)&lt;/em&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuhqn32jmfjm94vr2duuh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuhqn32jmfjm94vr2duuh.png" alt="Penpot_ToneDrillmini_UIimage" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Figma Design)&lt;/em&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwfxece4wz7pmmp1fre6a.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwfxece4wz7pmmp1fre6a.png" alt="Figma_ToneDrillmini_UIimage" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 What I will do next
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Since I am already familiar with Figma, I still find it easier to use in terms of both workflow and usability. However, Penpot appears to support many of the core features I need, so it could be a good option for personal projects like mine.&lt;/li&gt;
&lt;li&gt;I considered switching from Figma to Penpot for the next screen in the ToneDrill project. However, &lt;strong&gt;I have already established a basic workflow for creating designs and implementing them with Codex and Figma while working on the first screen&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changing the workflow in the middle of the project could lead to unexpected issues and additional rework&lt;/strong&gt;. Therefore, &lt;strong&gt;I decided to continue using Figma for the current ToneDrill project&lt;/strong&gt; and focus on completing the app with the workflow I have already tested&lt;/li&gt;
&lt;li&gt;Instead of introducing Penpot into ToneDrill immediately, I plan to create a separate small iOS project and use it to test a Penpot-based design and development workflow. I think it is more important to complete ToneDrill first and establish a reliable end-to-end workflow before experimenting with a different design tool.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Continue developing the top menu screen for ToneDrill.&lt;/li&gt;
&lt;li&gt;Organize the UI adjustment points for the portfolio site implemented by Codex in Notion, then start making small UI refinements.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>webdev</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W13</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Fri, 10 Jul 2026 21:08:52 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w13-51o0</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w13-51o0</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This week, I mainly focused on &lt;strong&gt;iOS development&lt;/strong&gt;📱.&lt;/li&gt;
&lt;li&gt;I also tested a small workflow using Codex: organizing ideas, creating a design file, and implementing a SwiftUI prototype. Through that process, I realized that &lt;strong&gt;Codex can be very helpful for making iOS development more efficient&lt;/strong&gt;💡.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Until now, I had been using Codex in a rather ad hoc way&lt;/strong&gt;, sending instructions only when I wanted it to handle a specific task😂.&lt;/li&gt;
&lt;li&gt;This week, I started thinking about &lt;strong&gt;how to make that workflow more efficient, and how to make Codex act more like a development partner&lt;/strong&gt; that understands the project in the same way I do🧐.&lt;/li&gt;
&lt;li&gt;As I explored this, I realized that &lt;strong&gt;I needed to review my Codex settings, build better rule files for giving instructions to Codex, and rethink how I use Codex in my own workflow&lt;/strong&gt;🛠️.&lt;/li&gt;
&lt;li&gt;Working through all of this slightly changed &lt;strong&gt;the way I think about AI agents&lt;/strong&gt;🤖.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I organized the UI structure for ToneDrill mini in Figma.&lt;/li&gt;
&lt;li&gt;I created a structured design page and a small Mini Design System in Figma.&lt;/li&gt;
&lt;li&gt;I summarized colors, typography, buttons, fretboard parts, spacing, and radius rules.&lt;/li&gt;
&lt;li&gt;I updated the implementation note so Codex could understand the design direction.&lt;/li&gt;
&lt;li&gt;I asked Codex to implement the SwiftUI fretboard UI based on the Figma design and implementation note.&lt;/li&gt;
&lt;li&gt;I changed the instruction so app colors would be managed as Color Sets in &lt;code&gt;Assets.xcassets&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I reviewed the SwiftUI code for ToneDrill implemented by Codex.&lt;/li&gt;
&lt;li&gt;I asked Codex questions to better understand the implementation.&lt;/li&gt;
&lt;li&gt;I checked how the fretboard UI is drawn and updated in SwiftUI.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🆙 Updating my workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🤖 AI agent workflow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I worked on setting up a more structured workflow for using Codex in my development projects.&lt;/li&gt;
&lt;li&gt;I created &lt;strong&gt;a global &lt;code&gt;AGENTS.md&lt;/code&gt; file for Codex&lt;/strong&gt; (&lt;code&gt;~/.codex/AGENTS.md&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;I created &lt;strong&gt;a project-level &lt;code&gt;AGENTS.md&lt;/code&gt; file&lt;/strong&gt; at the root of the repository (&lt;code&gt;repo-root/AGENTS.md&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;I separated the responsibilities of the global &lt;code&gt;AGENTS.md&lt;/code&gt; file and the project-level &lt;code&gt;AGENTS.md&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;I created &lt;strong&gt;&lt;code&gt;docs/codex/TaskIndex.md&lt;/code&gt; as a task management document&lt;/strong&gt;. In it, I organized both immediate tasks and mid- to long-term tasks, and defined a consistent format for writing them down.&lt;/li&gt;
&lt;li&gt;To reduce the need to repeatedly explain the project background, past work, and current tasks every time I move to a new chat, I decided to &lt;strong&gt;build a workflow and create a mid- to long-term project memory in Notion&lt;/strong&gt; for the work and lessons I develop with Codex.&lt;/li&gt;
&lt;li&gt;I created a Notion page called &lt;code&gt;AI Operating Manual&lt;/code&gt; so &lt;strong&gt;AI can summarize the project overview, what I learned, mistakes, improvements, fixes&lt;/strong&gt;, and any rules that should be added to the project-level &lt;code&gt;AGENTS.md&lt;/code&gt;. I connected it through &lt;strong&gt;Notion MCP&lt;/strong&gt; so Codex can update it.&lt;/li&gt;
&lt;li&gt;I organized this entire process as a workflow.&lt;/li&gt;
&lt;li&gt;At the start of a chat, Codex should read the &lt;code&gt;AI Operating Manual&lt;/code&gt; Notion page, then read &lt;code&gt;AGENTS.md&lt;/code&gt; and &lt;code&gt;TaskIndex.md&lt;/code&gt;, so it can start working with the same understanding as me. I registered this as a Skill so I can call it with a single phrase.&lt;/li&gt;
&lt;li&gt;At the end of a work session, Codex should summarize what was done and organize what should be saved as mid- to long-term project memory in the &lt;code&gt;AI Operating Manual&lt;/code&gt; Notion page. I registered this as another Skill so I can call it with a single phrase.&lt;/li&gt;
&lt;li&gt;Finally, I registered a separate Skill that can write the summarized content to the &lt;code&gt;AI Operating Manual&lt;/code&gt; Notion page. I separated this from the summary Skill so that I can review the content first and decide what should actually be saved as mid- to long-term project memory before running the write operation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;By asking Codex to implement the SwiftUI UI based on the Figma UI structure and the small design system page&lt;/strong&gt;, I was able to &lt;strong&gt;get a UI that was very close to the design I created in Figma&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I learned that &lt;strong&gt;Codex sometimes adds many custom style definitions in the code&lt;/strong&gt;, even in areas where SwiftUI’s default styling system would be enough. I need to decide more carefully which parts should rely on &lt;strong&gt;SwiftUI’s default styles&lt;/strong&gt; and which parts should be customized.&lt;/li&gt;
&lt;li&gt;Through this implementation, I learned that I need to &lt;strong&gt;separate the parts where I want to take advantage of SwiftUI’s built-in default styles from the parts where I want to apply my own custom design&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I also noticed that &lt;strong&gt;Codex tends to implement SwiftUI previews using older syntax&lt;/strong&gt;. This helped me understand the difference between older preview code and the newer style I learned in the SwiftUI tutorials.&lt;/li&gt;
&lt;li&gt;I also learned that if I want colors to be managed in &lt;code&gt;Assets.xcassets&lt;/code&gt;, I need to explicitly tell Codex to do that.&lt;/li&gt;
&lt;li&gt;I learned that I should add rules for Codex so that the same kind of issue does not happen in the next implementation.&lt;/li&gt;
&lt;li&gt;I learned how SwiftUI draws horizontal and vertical lines using &lt;code&gt;.frame(width:height:)&lt;/code&gt; and &lt;code&gt;.position(x:y:)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I learned that &lt;code&gt;.position(x:y:)&lt;/code&gt; places the center of a view.&lt;/li&gt;
&lt;li&gt;I learned that a parent view’s &lt;code&gt;@State&lt;/code&gt; change causes SwiftUI to recalculate the parent view’s body.&lt;/li&gt;
&lt;li&gt;I learned that child views are updated when new values are passed from the parent view.&lt;/li&gt;
&lt;li&gt;I learned that &lt;code&gt;@ViewBuilder&lt;/code&gt; does not trigger UI updates by itself.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@ViewBuilder&lt;/code&gt; is used to write conditional view logic, such as showing or hiding a view depending on a condition.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🆙 Updating my workflow Learning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🤖 AI agent workflow
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🐛 How My Workflow Changed
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Previously, I had to explain in each prompt who I am, how I prefer to work, and what kind of reasoning I expect from Codex. For example, I often had to explain my background and say things like, “Because I think this way, please do not do that.” By organizing this information in advance, &lt;strong&gt;I no longer need to repeat those explanations every time, and the direction of Codex’s responses is now much closer to what I expect&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I can now &lt;strong&gt;start talking with Codex about the task I want to work on right away, without wasting time aligning the process&lt;/strong&gt;. Before, when I felt that Codex was moving in a slightly different direction, I had to explain the project background, current progress, and what I wanted to do next in order to bring Codex back to the same understanding.&lt;/li&gt;
&lt;li&gt;By formatting the workflow, &lt;strong&gt;I no longer feel unsure about what information I should give Codex when working on any project&lt;/strong&gt;. I created a system that lets Codex reach a consistent level of understanding with a minimal prompt. Because I also defined a clear way to operate Codex in order to protect that system, I feel that I can work with it more confidently and without hesitation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📝 What I Learned From This
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I felt that &lt;strong&gt;in order to use an AI agent effectively&lt;/strong&gt;, I need to &lt;strong&gt;clearly tell it who I am and what kinds of actions or workflows I prefer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;At the same time, I realized that &lt;strong&gt;this kind of workflow becomes possible when I clearly define what I will delegate to the AI agent and what I will handle myself&lt;/strong&gt;. In my workflow, the AI agent should not immediately start working on a task. Instead, it should first propose a plan, and then I, as the human user, review and approve it before the task is executed.&lt;/li&gt;
&lt;li&gt;This feels &lt;strong&gt;similar to the relationship between a manager and a team member&lt;/strong&gt;. In other words, I felt that &lt;strong&gt;using an AI agent effectively depends on how well the human can act as a capable manager&lt;/strong&gt;. I also realized that &lt;strong&gt;the skills used to manage work in real-world teams can be useful when working with AI agents&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For regular applications that are used simply as tools&lt;/strong&gt;, &lt;strong&gt;the important skills are things like understanding the features&lt;/strong&gt; and knowing how to use the application well.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I found it interesting that the skills needed for AI agents are different&lt;/strong&gt; from the skills needed for ordinary tools. This difference feels like one of the unique characteristics of AI agents.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Continue developing the top menu screen for ToneDrill.&lt;/li&gt;
&lt;li&gt;Organize the UI adjustment points for the portfolio site implemented by Codex in Notion, then start making small UI refinements.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>webdev</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W12</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Fri, 03 Jul 2026 04:42:07 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w12-5hin</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w12-5hin</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I had &lt;strong&gt;less time to work on my personal projects&lt;/strong&gt; this week😅, but &lt;strong&gt;I was still able to make some progress&lt;/strong&gt; on both my iOS app and web development projects.&lt;/li&gt;
&lt;li&gt;One reason I was able to keep moving forward was that &lt;strong&gt;I used ChatGPT and Codex to work more efficiently&lt;/strong&gt;. This week reminded me &lt;strong&gt;how helpful AI can be for personal development projects&lt;/strong&gt;🦾.&lt;/li&gt;
&lt;li&gt;I continued &lt;strong&gt;refining the UI direction for ToneDrill mini&lt;/strong&gt;, the minimum-feature iOS app I implemented in Xcode last week.&lt;/li&gt;
&lt;li&gt;Last week, I was excited to build the basic functionality of a working minimum-feature app in Xcode. This week, I shifted my focus to &lt;strong&gt;creating a clearer UI image&lt;/strong&gt; for the app🎯.&lt;/li&gt;
&lt;li&gt;I was not sure how to approach the UI design at first, but after discussing it with AI, I decided on a direction. I would like to keep using this approach as a base going forward🐎.&lt;/li&gt;
&lt;li&gt;For web development, I &lt;strong&gt;finished reviewing the implementation of the portfolio site&lt;/strong&gt; that Codex created last week❤️‍🔥.&lt;/li&gt;
&lt;li&gt;I gained a better understanding of &lt;strong&gt;shadcn/ui&lt;/strong&gt; and realized how convenient it is for building consistent UI components.&lt;/li&gt;
&lt;li&gt;I was &lt;strong&gt;not able to work on TryHackMe this week&lt;/strong&gt;, so I would like to make time for it again next week🔥.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;I also want to thank everyone who commented on my previous &lt;a href="https://dev.to/umitomo-lab/weekly-dev-log-2026-w11-4ga6"&gt;Weekly Dev Log 2026-W11&lt;/a&gt;✨&lt;/p&gt;

&lt;p&gt;Reading the comments on my previous Weekly Dev Log made me feel that I would also like to try writing standalone articles that go deeper into what I learned.&lt;/p&gt;

&lt;p&gt;I hope I can share my honest learning process and thoughts in different formats, not only through Weekly Dev Logs.&lt;/p&gt;

&lt;p&gt;Also, thank you so much for leaving positive comments on my personal, honest Weekly Dev Logs!&lt;/p&gt;

&lt;p&gt;I always appreciate your comments, so please feel free to leave one if you have any thoughts or feedback.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;a id="ios-swiftui"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I used Codex and Figma to create the UI design for the minimum version of ToneDrill mini.&lt;/li&gt;
&lt;li&gt;I asked Codex to generate &lt;strong&gt;several UI design ideas&lt;/strong&gt;, then chose the one I liked and &lt;strong&gt;organized it as a design file in Figma&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;ToneDrill mini will have multiple screens in the future, but I focused on designing &lt;strong&gt;only one main interaction screen&lt;/strong&gt; first.&lt;/li&gt;
&lt;li&gt;I started &lt;strong&gt;organizing a Mini Design System&lt;/strong&gt; based on that one screen so that future screens can have a consistent UI.&lt;/li&gt;
&lt;li&gt;At first, I considered organizing the design rules in a text file like &lt;code&gt;Design.md&lt;/code&gt;, but I decided to &lt;strong&gt;organize them visually in Figma instead&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I organized the basic color structure, including background colors, text colors, button colors, and typography rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎸 ToneDrill mini UI Image
&lt;/h3&gt;

&lt;p&gt;Here are &lt;strong&gt;two UI images&lt;/strong&gt; of ToneDrill mini: the current UI before creating the Figma design, and the temporary UI direction I created this week using Codex and Figma🥰.&lt;/p&gt;

&lt;p&gt;I am excited to start implementing the app based on this new UI image🔥&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Current ToneDrill mini UI screenshot)&lt;/em&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F411rxuypf50dsv4k521s.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F411rxuypf50dsv4k521s.png" alt="ToneDrillmini_UIimage_now" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(ToneDrill mini UI screenshot decided this week)&lt;/em&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj4rf6ae317wtgnpjwde6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj4rf6ae317wtgnpjwde6.png" alt="ToneDrillmini_UIimage_future" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Posted my weekly dev log on Dev.to 📝.&lt;/li&gt;
&lt;li&gt;Reviewed the structure of the portfolio home page created with React Router v7.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I was not able to work on TryHackMe this week. I would like to make time for it again next week!&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I noticed that if I ask Codex to &lt;strong&gt;create UI designs each time without clear rules&lt;/strong&gt;, the colors, spacing, and font sizes can &lt;strong&gt;easily become inconsistent&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I learned that it is better to create one &lt;strong&gt;base UI design&lt;/strong&gt; first, then &lt;strong&gt;organize the frame structure and Mini Design System&lt;/strong&gt; based on that design.&lt;/li&gt;
&lt;li&gt;I also considered asking Codex to implement a SwiftUI prototype first and then adjusting it in Xcode, but I felt that &lt;strong&gt;organizing the UI visually in Figma first&lt;/strong&gt; was easier for me to understand.&lt;/li&gt;
&lt;li&gt;Having the UI structure and color roles visible in Figma made it easier to understand the design than organizing everything only in text.&lt;/li&gt;
&lt;li&gt;I learned that a visual design reference also makes it easier to imagine what needs to be changed after implementing the UI in SwiftUI.&lt;/li&gt;
&lt;li&gt;For a personal iOS app like this, I felt that it is better to start with a small set of design rules based on one screen, rather than trying to build a large design system from the beginning.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Learned that &lt;code&gt;sticky top-0&lt;/code&gt; keeps the sidebar content visible near the top of the screen while scrolling.&lt;/li&gt;
&lt;li&gt;Reviewed how Tailwind CSS utility classes are used to control layout in the profile sidebar.&lt;/li&gt;
&lt;li&gt;Learned that &lt;code&gt;flex flex-wrap&lt;/code&gt; is useful for arranging small elements naturally and letting them wrap when space is limited.&lt;/li&gt;
&lt;li&gt;Learned that &lt;code&gt;flex&lt;/code&gt; is better for content-sized inline groups, while &lt;code&gt;grid&lt;/code&gt; is better for structured row-and-column layouts.&lt;/li&gt;
&lt;li&gt;Reviewed the shadcn/ui &lt;code&gt;Button&lt;/code&gt; component and learned that &lt;code&gt;asChild&lt;/code&gt; lets a child element, such as an &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tag, receive the button styles while keeping its original HTML meaning.&lt;/li&gt;
&lt;li&gt;Rearned that this makes it possible to create a link that looks like a button, while still using the correct semantic element for navigation.&lt;/li&gt;
&lt;li&gt;Reviewed the official shadcn/ui &lt;code&gt;Button&lt;/code&gt; documentation and learned how &lt;code&gt;asChild&lt;/code&gt;, &lt;code&gt;variant&lt;/code&gt;, and &lt;code&gt;size&lt;/code&gt; help create consistent button UI patterns.&lt;/li&gt;
&lt;li&gt;Learned that shadcn/ui helps create consistent UI while allowing predefined design variations through component props, and its documentation makes it easy to understand how each prop affects the result.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Finish organizing the Mini Design System for ToneDrill mini in Figma.&lt;/li&gt;
&lt;li&gt;Organize the UI adjustment points for the portfolio site implemented by Codex in Notion, then start making small UI refinements.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>webdev</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W11</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Fri, 26 Jun 2026 21:04:23 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w11-4ga6</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w11-4ga6</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;While reviewing the code for &lt;strong&gt;the minimum-feature iOS app&lt;/strong&gt; that Codex implemented for &lt;strong&gt;ToneDrill&lt;/strong&gt;, I started coming up with &lt;strong&gt;many ideas for small improvements&lt;/strong&gt;💡.&lt;/li&gt;
&lt;li&gt;When I first started building the iOS app, I thought &lt;strong&gt;it would be enough to recreate the web version&lt;/strong&gt; I had casually built before. However, once the app started taking shape, I naturally began wanting to add &lt;strong&gt;more features and improve the design&lt;/strong&gt;🌋. At the same time, this is &lt;strong&gt;my first time building an iOS app&lt;/strong&gt;, so I often &lt;strong&gt;do not know the best way to move forward&lt;/strong&gt;. Human curiosity and ambition are interesting 😅.&lt;/li&gt;
&lt;li&gt;Because of that, I discussed my ideas with ChatGPT, &lt;strong&gt;separated them into short-term tasks and medium- to long-term ideas&lt;/strong&gt;, and &lt;strong&gt;organized a realistic development plan&lt;/strong&gt; in Notion🗃️.&lt;/li&gt;
&lt;li&gt;For now, I decided to focus on &lt;strong&gt;completing the minimum-feature version implemented by Codex&lt;/strong&gt;. I changed the app layout from the default portrait orientation to landscape orientation and organized several UI ideas🦾.&lt;/li&gt;
&lt;li&gt;I &lt;strong&gt;reviewed the program&lt;/strong&gt; that Codex implemented last week based on my Figma design.&lt;/li&gt;
&lt;li&gt;I learned more about &lt;strong&gt;React Router v7 features and several CSS functions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Worked on the &lt;strong&gt;AI System Reconnaissance&lt;/strong&gt; room from the AI Security Learning Path on TryHackMe this week 🤖.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Organized feature ideas I would like to add to ToneDrill in Notion and separated them into short-term tasks and medium- to long-term tasks.&lt;/li&gt;
&lt;li&gt;Changed the app layout from the default portrait-oriented design to a landscape-oriented design.&lt;/li&gt;
&lt;li&gt;Planned the next UI improvement for the app: replacing horizontal scrolling with left and right buttons to switch the visible fret range.&lt;/li&gt;
&lt;li&gt;Explored a design direction for a SwiftUI-drawn guitar fretboard background before using a real image background.&lt;/li&gt;
&lt;li&gt;Worked with ChatGPT to define the direction for a fretboard-style UI in SwiftUI, organized the required display elements, and prepared them as a specification for Codex.&lt;/li&gt;
&lt;li&gt;Prepared a concrete Codex prompt for generating a Figma draft based on the design task document and reference image.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Posted my weekly dev log on Dev.to 📝.&lt;/li&gt;
&lt;li&gt;Reviewed the structure of the portfolio home page created with React Router v7.&lt;/li&gt;
&lt;li&gt;Checked how &lt;code&gt;root.tsx&lt;/code&gt;, &lt;code&gt;routes.ts&lt;/code&gt;, and &lt;code&gt;home.tsx&lt;/code&gt; work together to render the top page.&lt;/li&gt;
&lt;li&gt;Studied how the &lt;code&gt;loader&lt;/code&gt; function passes page data to the home component.&lt;/li&gt;
&lt;li&gt;Looked through &lt;code&gt;home-page-layout.tsx&lt;/code&gt; and checked how the main area and profile sidebar are arranged.&lt;/li&gt;
&lt;li&gt;Reviewed &lt;code&gt;app.css&lt;/code&gt; to understand the layout, responsive design, and light/dark color settings.&lt;/li&gt;
&lt;li&gt;Looked up &lt;code&gt;grid-template-columns&lt;/code&gt;, &lt;code&gt;minmax()&lt;/code&gt;, &lt;code&gt;clamp()&lt;/code&gt;, and &lt;code&gt;@media&lt;/code&gt; using MDN and ChatGPT.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Worked on the AI System Reconnaissance room, part of the AI Security Learning Path on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Learned how to configure an iOS app to support landscape orientation.&lt;/li&gt;
&lt;li&gt;Learned how to adjust the UI layout so it fits neatly on the screen in landscape mode.&lt;/li&gt;
&lt;li&gt;Learned that a SwiftUI-drawn fretboard background is a safer first step than placing buttons directly on top of a real guitar image.&lt;/li&gt;
&lt;li&gt;Learned that building the fretboard UI with separate background and button layers will make it easier to replace the background with an image later.&lt;/li&gt;
&lt;li&gt;Learned that Codex should first explain its planned Figma structure before actually creating or modifying the design.&lt;/li&gt;
&lt;li&gt;Learned that giving Codex a task document, a reference image, and clear constraints helps reduce unexpected changes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Learned that &lt;code&gt;root.tsx&lt;/code&gt; provides the base HTML layout, and child routes are rendered through &lt;code&gt;&amp;lt;Outlet /&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Learned that &lt;code&gt;loader&lt;/code&gt; prepares data before the page component is rendered.&lt;/li&gt;
&lt;li&gt;Learned that &lt;code&gt;home-page-layout.tsx&lt;/code&gt; mainly controls the page structure, while &lt;code&gt;app.css&lt;/code&gt; controls most of the visual design.&lt;/li&gt;
&lt;li&gt;Learned how CSS Grid is used to create a two-column layout with a flexible main area and a fixed-width sidebar.&lt;/li&gt;
&lt;li&gt;Learned that &lt;code&gt;grid-template-columns&lt;/code&gt; defines the width rules for each grid column.&lt;/li&gt;
&lt;li&gt;Learned that &lt;code&gt;minmax()&lt;/code&gt; sets the minimum and maximum size of a grid column.&lt;/li&gt;
&lt;li&gt;Learned that &lt;code&gt;clamp()&lt;/code&gt; lets a value change flexibly within a minimum and maximum range.&lt;/li&gt;
&lt;li&gt;Learned that &lt;code&gt;@media&lt;/code&gt; rules can be used for different CSS conditions. In this project, they are used to change the layout based on the screen width.&lt;/li&gt;
&lt;li&gt;Learned how media queries change the layout from three-column cards to two columns, and then to one column on smaller screens.&lt;/li&gt;
&lt;li&gt;Learned how CSS variables are used to manage colors for light mode, dark mode, and portfolio-specific design tokens.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 TryHackMe Learning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI System Reconnaissance
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Task 2: The AI Infrastructure Stack
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I learned that AI infrastructure is not just a single AI model or server, but a collection of specialized services that support the whole machine learning lifecycle.&lt;/li&gt;
&lt;li&gt;I understood that AI systems often expose unfamiliar ports and APIs, so traditional network scanning alone may miss important AI-related services.&lt;/li&gt;
&lt;li&gt;I learned that services such as model serving endpoints, experiment tracking tools, vector databases, model registries, Jupyter notebooks, MinIO, and Prometheus can all become important reconnaissance targets.&lt;/li&gt;
&lt;li&gt;Although there were many new terms and I could not fully understand every single one, I was able to understand the main purpose of this task: building a mental map of AI infrastructure components and their common ports.&lt;/li&gt;
&lt;li&gt;Through the exercise, I learned how to compare AI-specific ports with traditional service ports and identify which hosts are likely running AI infrastructure.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Design the UI structure for the minimum-feature version of ToneDrill in Figma.&lt;/li&gt;
&lt;li&gt;Finish reviewing the program that Codex implemented last week based on my Figma design and deepen my understanding of how the code works.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>security</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W10</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Thu, 18 Jun 2026 06:39:33 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w10-33a9</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w10-33a9</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;While organizing ideas for &lt;strong&gt;my first iOS app&lt;/strong&gt;, I remembered an old web app idea called &lt;strong&gt;ToneDrill&lt;/strong&gt;, which I had casually built before to help practice note names on a guitar fretboard🎸. I decided to try &lt;strong&gt;turning it into an iOS app&lt;/strong&gt;🛠️.&lt;/li&gt;
&lt;li&gt;I clarified the purpose of &lt;strong&gt;ToneDrill&lt;/strong&gt;, its &lt;strong&gt;minimum requirements&lt;/strong&gt;, and its &lt;strong&gt;core features&lt;/strong&gt;, then &lt;strong&gt;organized them in Notion&lt;/strong&gt;📝.&lt;/li&gt;
&lt;li&gt;I was curious to see &lt;strong&gt;how well Codex could implement an iOS app from those minimum requirements&lt;/strong&gt;, so I gave it a try right away💡.&lt;/li&gt;
&lt;li&gt;I reviewed the SwiftUI code generated by Codex and &lt;strong&gt;worked through the app logic to understand how it was implemented&lt;/strong&gt;🔍. For now, I was able to create a working app, which felt like &lt;strong&gt;a meaningful step forward&lt;/strong&gt;🚶.&lt;/li&gt;
&lt;li&gt;I created &lt;strong&gt;the top page UI design&lt;/strong&gt; for my portfolio website in &lt;strong&gt;Figma&lt;/strong&gt;🎨. I focused on keeping the structure simple and implementation-friendly, and designed the UI with reusable components for each major part.&lt;/li&gt;
&lt;li&gt;Based on what I learned from my previous failed attempt, I &lt;strong&gt;tried again to see how well Codex could implement a prototype from the Figma UI design&lt;/strong&gt; (You can read about &lt;a href="https://dev.to/umitomo-lab/i-thought-figma-mcp-could-recreate-any-design-i-was-wrong-1ab3"&gt;my previous attempt that didn’t go so well&lt;/a&gt; here😅.)&lt;/li&gt;
&lt;li&gt;Worked on the &lt;strong&gt;AI Threat Modelling&lt;/strong&gt; room from the AI Security Learning Path on TryHackMe this week🤖.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Revisited an old web app idea called ToneDrill, which I had previously built casually as a guitar note-training app, and considered turning it into an iOS app.&lt;/li&gt;
&lt;li&gt;Organized the app idea in Notion, including its purpose, target use case, minimum requirements, and core features.&lt;/li&gt;
&lt;li&gt;Decided to aim for an MVP-level version first, instead of trying to build a fully featured app from the beginning.&lt;/li&gt;
&lt;li&gt;Wrote down simple requirements and tested how accurately Codex could implement the initial version of the app.&lt;/li&gt;
&lt;li&gt;Reviewed the iOS app implementation generated by Codex and examined the code in detail to understand how the logic worked.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Posted my weekly dev log on Dev.to📝&lt;/li&gt;
&lt;li&gt;Completed the top page UI design for my portfolio website in Figma.&lt;/li&gt;
&lt;li&gt;Tried using Codex again to generate a prototype app based on the Figma UI design.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Worked on the AI Threat Modelling room (part of the AI Security Learning Path) on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;h4&gt;
  
  
  🦄 What I learned by starting with a small app and minimum features
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I started building the app with the mindset of &lt;strong&gt;creating small&lt;/strong&gt;, &lt;strong&gt;steady progress&lt;/strong&gt; instead of trying to build a large app right away.&lt;/li&gt;
&lt;li&gt;Starting small made it &lt;strong&gt;much easier to take the first step mentally and actually&lt;/strong&gt; begin building the app.&lt;/li&gt;
&lt;li&gt;Even though the app is small, I realized that the knowledge I gained from &lt;strong&gt;tutorials alone was not enough to fully understand the implementation details&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I had to review and research the code &lt;strong&gt;step by step&lt;/strong&gt; to understand how each part worked.&lt;/li&gt;
&lt;li&gt;This made me realize that if I started with &lt;strong&gt;a much larger app&lt;/strong&gt;, it would &lt;strong&gt;take a lot more time to understand the implementation&lt;/strong&gt; while building it.&lt;/li&gt;
&lt;li&gt;I also learned that I should define more clearly when and how I use Codex during development.&lt;/li&gt;
&lt;li&gt;For now, my plan is to &lt;strong&gt;keep using AI actively until I can complete one working app&lt;/strong&gt;, then evaluate where AI is most helpful and where I need to review the code more carefully myself.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development Learning
&lt;/h2&gt;

&lt;h4&gt;
  
  
  ❤️‍🔥 What I learned from retrying prototype generation with Figma MCP and Codex
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Learned that I should &lt;strong&gt;first ask Codex to review the design system&lt;/strong&gt; in the Figma UI design, then have it &lt;strong&gt;create rule files&lt;/strong&gt; such as &lt;code&gt;app.css&lt;/code&gt; and &lt;code&gt;FIGMA_DESIGN_SYSTEM.md&lt;/code&gt; based on &lt;strong&gt;those design rules&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Learned that &lt;strong&gt;designing a Figma UI with implementation in mind&lt;/strong&gt; is important when asking Codex to generate a prototype.&lt;/li&gt;
&lt;li&gt;Instead of only creating a visual mockup, I structured the UI with &lt;strong&gt;clear frames&lt;/strong&gt;, &lt;strong&gt;reusable components&lt;/strong&gt;, and &lt;strong&gt;layout rules&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;I also documented the design system in rule files so Codex could better understand the intended structure, spacing, colors, and component styles.&lt;/li&gt;
&lt;li&gt;As a result, Codex was able to generate a prototype that &lt;strong&gt;closely matched the Figma design&lt;/strong&gt;🔥.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 TryHackMe Learning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI Threat Modelling
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Task 6: OWASP LLM Top 10 — Mapping Risks to Components
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I learned that the OWASP LLM Top 10 helps map LLM-specific risks to the components where they occur.&lt;/li&gt;
&lt;li&gt;OWASP LLM Top 10 is useful not only as a checklist, but also as an assessment tool for reviewing LLM architecture.&lt;/li&gt;
&lt;li&gt;I learned that the LLM inference endpoint has the highest risk concentration, including prompt injection, sensitive information disclosure, excessive agency, system prompt leakage, misinformation, and unbounded consumption.&lt;/li&gt;
&lt;li&gt;Vector databases and RAG pipelines require special attention because they can introduce indirect prompt injection, embedding weaknesses, and misinformation from stale or incorrect sources.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Review the issues and improvements needed in the minimum-feature app generated by Codex, then start making code changes.&lt;/li&gt;
&lt;li&gt;Ask Codex to help explore UI design ideas for the &lt;strong&gt;ToneDrill&lt;/strong&gt; app and decide on the overall UI direction.&lt;/li&gt;
&lt;li&gt;Review and understand the implementation details of the portfolio website prototype generated by Codex.&lt;/li&gt;
&lt;li&gt;Continue posting small articles on Dev.to.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>security</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W09</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Fri, 12 Jun 2026 00:10:44 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w09-55b6</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w09-55b6</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Completed the SwiftUI app development tutorial&lt;/strong&gt; and tested the app I built on a real iPhone🦾&lt;/li&gt;
&lt;li&gt;Learned &lt;strong&gt;the overall flow of building an iOS app with SwiftUI&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Organized my app ideas in Notion because I want to start building a real app next week🤔 I also realized that &lt;strong&gt;starting with a small app&lt;/strong&gt; is important at this stage💡&lt;/li&gt;
&lt;li&gt;Worked on the UI design for my portfolio site using the official shadcn/ui Figma template. I want to finish one design direction next week and then move on to implementation.&lt;/li&gt;
&lt;li&gt;Worked on the &lt;strong&gt;AI Threat Modelling&lt;/strong&gt; room from the AI Security Learning Path on TryHackMe this week🤖&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Completed the SwiftUI app development tutorial.&lt;/li&gt;
&lt;li&gt;Learned how to run an app on a real iPhone by connecting it to my computer, without joining the Apple Developer Program yet.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Posted my weekly dev log on Dev.to📝&lt;/li&gt;
&lt;li&gt;Worked on my portfolio site UI design using the official shadcn/ui Figma template.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Worked on the AI Threat Modelling room (part of the AI Security Learning Path) on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔬 What I learned from testing an app on a real iPhone
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I need to connect my iPhone, choose it as the run destination, and configure Signing &amp;amp; Capabilities before running the app.&lt;/li&gt;
&lt;li&gt;A unique Bundle Identifier is needed to identify the app.&lt;/li&gt;
&lt;li&gt;Xcode uses my personal Apple Account to sign the app for testing on my iPhone.&lt;/li&gt;
&lt;li&gt;I need to enable Developer Mode and trust the developer profile on the iPhone before launching the app.&lt;/li&gt;
&lt;li&gt;Preview data and real app data are handled differently in SwiftUI/SwiftData.&lt;/li&gt;
&lt;li&gt;In previews, &lt;code&gt;sampleContainer&lt;/code&gt; is used, so &lt;code&gt;includeSampleMoments&lt;/code&gt; is passed as &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The diary entries I create on the real iPhone are saved in the app’s local storage on the device.&lt;/li&gt;
&lt;li&gt;The data is not automatically saved to my Apple Account or iCloud.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🦄 What I learned from organizing ideas for my first iOS app
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;As a beginner developer, I should not try to build a large, market-ready app from the beginning.&lt;/li&gt;
&lt;li&gt;Large apps usually include many hidden complexities, such as data management, user experience design, error handling, security, performance, and long-term maintenance.&lt;/li&gt;
&lt;li&gt;Since I have a full-time job, my development time is limited, so starting too big would make it harder to keep making steady progress.&lt;/li&gt;
&lt;li&gt;Starting with a small app helps me focus on one or two core ideas and understand each part more deeply.&lt;/li&gt;
&lt;li&gt;Building something small first also makes it easier to finish, test, and improve the app step by step.&lt;/li&gt;
&lt;li&gt;I realized that the goal at this stage is not to compete with polished apps on the market, but to build practical experience by completing small projects.&lt;/li&gt;
&lt;li&gt;This approach should help me stay motivated while gradually improving my skills in real app development.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Learned more about how to create UI designs in Figma and how to design screens using components.&lt;/li&gt;
&lt;li&gt;Practiced building a consistent portfolio site design based on a design system instead of creating each part separately.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 TryHackMe Learning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI Threat Modelling
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Task2 AI-Specific Assets and Attack Surfaces
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;AI systems add new assets such as training data, model weights, embedding vectors, system prompts, feature stores, and model registries.&lt;/li&gt;
&lt;li&gt;I learned that poisoned training data can corrupt a model’s behaviour at the source.&lt;/li&gt;
&lt;li&gt;I learned that model weights are especially valuable because they define what the model has learned.&lt;/li&gt;
&lt;li&gt;If model weights are stolen, an attacker may obtain a functional copy of the AI system.&lt;/li&gt;
&lt;li&gt;I learned that system prompts can reveal the model’s behaviour, constraints, business logic, and security guardrails.&lt;/li&gt;
&lt;li&gt;Embedding vectors are important in systems such as RAG pipelines, recommendation engines, and fraud detection systems.&lt;/li&gt;
&lt;li&gt;Manipulating embeddings can change what information the model sees at query time.&lt;/li&gt;
&lt;li&gt;Feature stores are important because they provide preprocessed data used as real-time model inputs.&lt;/li&gt;
&lt;li&gt;Tampering with feature stores can affect model decisions without changing the model itself.&lt;/li&gt;
&lt;li&gt;A compromised model registry can allow an attacker to replace a legitimate model with a backdoored one.&lt;/li&gt;
&lt;li&gt;AI threat modelling needs to consider not only traditional application risks, but also AI-specific assets, behaviours, and failure modes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Task3 Data Supply Chain and STRIDE's Gaps
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I learned that AI systems have a data supply chain in addition to a traditional software supply chain.&lt;/li&gt;
&lt;li&gt;Each stage of the AI data supply chain can become a point of compromise.&lt;/li&gt;
&lt;li&gt;Data poisoning can start from data collection, labelling, or other early pipeline stages.&lt;/li&gt;
&lt;li&gt;If poisoned data reaches training, the damage can become embedded in the model’s weights.&lt;/li&gt;
&lt;li&gt;A compromised model registry can allow attackers to replace a validated model with a backdoored one.&lt;/li&gt;
&lt;li&gt;A backdoored model may look normal until it receives specific trigger inputs in production.&lt;/li&gt;
&lt;li&gt;LLM-based systems can introduce additional injection points through retrieval pipelines during inference.&lt;/li&gt;
&lt;li&gt;AI threats such as data poisoning, adversarial manipulation, tool misuse, and model theft do not always fit neatly into traditional STRIDE categories.&lt;/li&gt;
&lt;li&gt;The key takeaway is that AI threat modelling must cover the full data supply chain and AI-specific failure modes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Task4 Adapting STRIDE for AI Systems
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I learned that STRIDE does not need to be replaced, but it needs to be adapted for AI systems.&lt;/li&gt;
&lt;li&gt;In AI systems, familiar STRIDE categories can appear in new forms, such as data source impersonation, data poisoning, model extraction, and inference cost exploitation.&lt;/li&gt;
&lt;li&gt;AI decisions are harder to audit because the model version, input features, prompts, and retrieved context may not be fully recorded.&lt;/li&gt;
&lt;li&gt;Tool-enabled AI systems can make privilege risks broader, because a jailbroken model may misuse databases, email systems, or other connected tools.&lt;/li&gt;
&lt;li&gt;The key takeaway is that STRIDE is still a useful starting point, but some AI risks require additional AI-specific frameworks such as MITRE ATLAS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Task5 MITRE ATLAS: The AI Threat Technique Catalogue
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I learned that MITRE ATLAS is an AI-focused knowledge base for adversary tactics and techniques against AI and ML systems.&lt;/li&gt;
&lt;li&gt;ATLAS complements STRIDE by adding AI-specific technical detail, documented techniques, mitigations, and real-world case studies.&lt;/li&gt;
&lt;li&gt;I learned key ATLAS techniques such as Data Poisoning, Model Extraction, Evade ML Model, LLM Prompt Injection, and Backdoor ML Model.&lt;/li&gt;
&lt;li&gt;ATLAS helps turn broad STRIDE findings into specific, actionable threat findings with technique IDs and defensive guidance.&lt;/li&gt;
&lt;li&gt;Real-world cases such as ShadowRay and Morris II show that AI threats are not only theoretical, but can affect real AI infrastructure and RAG-based systems.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Start building a small iOS app based on the app ideas I organized this week.&lt;/li&gt;
&lt;li&gt;Finish one portfolio site UI design in Figma and start implementing it in code.&lt;/li&gt;
&lt;li&gt;Continue posting small articles on Dev.to.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>security</category>
      <category>swift</category>
    </item>
    <item>
      <title>Weekly Dev Log 2026-W08</title>
      <dc:creator>Umitomo</dc:creator>
      <pubDate>Thu, 04 Jun 2026 02:13:06 +0000</pubDate>
      <link>https://dev.to/umitomo-lab/weekly-dev-log-2026-w08-d2i</link>
      <guid>https://dev.to/umitomo-lab/weekly-dev-log-2026-w08-d2i</guid>
      <description>&lt;h2&gt;
  
  
  🗓️ This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Completed one section of the SwiftUI tutorial 🦾 Since I want to continue through the tutorial until &lt;strong&gt;I can build the app for testing and run it on an actual iPhone&lt;/strong&gt;, I’ll focus on that from next week.&lt;/li&gt;
&lt;li&gt;I also wrote another standalone article this week. It was about &lt;strong&gt;my experience experimenting with Codex and Figma MCP to see how much UI design work I could delegate to AI&lt;/strong&gt;📝 If you're interested, feel free to check it out 👇
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/umitomo-lab/i-thought-figma-mcp-could-recreate-any-design-i-was-wrong-1ab3" class="crayons-story__hidden-navigation-link"&gt;I Thought Figma MCP Could Recreate Any Design. I Was Wrong.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/umitomo-lab" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3830906%2Ff8ab1f50-43b4-40ee-b21a-a120d3344f42.jpg" alt="umitomo-lab profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/umitomo-lab" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Umitomo
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Umitomo
                
                
              
              &lt;div id="story-author-preview-content-3793102" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/umitomo-lab" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3830906%2Ff8ab1f50-43b4-40ee-b21a-a120d3344f42.jpg" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Umitomo&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/umitomo-lab/i-thought-figma-mcp-could-recreate-any-design-i-was-wrong-1ab3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 2&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/umitomo-lab/i-thought-figma-mcp-could-recreate-any-design-i-was-wrong-1ab3" id="article-link-3793102"&gt;
          I Thought Figma MCP Could Recreate Any Design. I Was Wrong.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devjournal"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devjournal&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/figma"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;figma&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/umitomo-lab/i-thought-figma-mcp-could-recreate-any-design-i-was-wrong-1ab3" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/umitomo-lab/i-thought-figma-mcp-could-recreate-any-design-i-was-wrong-1ab3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              5&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;I’ll continue working steadily on my portfolio site design by combining AI-generated UI ideas with the official shadcn/ui Figma design template.&lt;/li&gt;
&lt;li&gt;Completed &lt;strong&gt;LLM Security&lt;/strong&gt; room from the AI Security Learning Path on TryHackMe this week🤖&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Worked through the SwiftUI tutorial and completed "Reproduce a bug with unit tests"&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Posted my weekly dev log on Dev.to and a standalone article about my experience using Codex × Figma MCP 📝&lt;/li&gt;
&lt;li&gt;Started learning UI design in Figma using community resources&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Completed LLM Security room (part of the AI Security Learning Path) on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Key Takeaways
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 SwiftUI Learning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Reproduce a bug with unit tests
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Learned that a streak should only increase when a moment exists on the next consecutive day.&lt;/li&gt;
&lt;li&gt;Understood that multiple moments on the same day should not increase the streak more than once.&lt;/li&gt;
&lt;li&gt;Learned how &lt;code&gt;continue&lt;/code&gt; skips duplicate days while keeping the current streak.&lt;/li&gt;
&lt;li&gt;Realized that &lt;code&gt;break&lt;/code&gt; stops the calculation as soon as a gap in the streak is found.&lt;/li&gt;
&lt;li&gt;Learned that fixing one bug can accidentally introduce new bugs in other scenarios.&lt;/li&gt;
&lt;li&gt;Learned how to implement parameterized unit tests by preparing multiple input patterns and expected values.&lt;/li&gt;
&lt;li&gt;Used &lt;code&gt;@Test(arguments:)&lt;/code&gt; to run the same test logic with different test data.&lt;/li&gt;
&lt;li&gt;Used &lt;code&gt;#expect&lt;/code&gt; to compare the actual result with the expected value for each case.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Web Development Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;While experimenting with automating UI design using Codex × Figma MCP, I learned that clearly defining design system rules first and then building the UI from small components is important for reducing the gap between the original Figma design and the implementation generated from its design data.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 TryHackMe Learning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  LLM Security
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Threat Categories
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Data-Based Threats
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Training data extraction&lt;/li&gt;
&lt;li&gt;Membership inference&lt;/li&gt;
&lt;li&gt;Prompt leakage&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Model-Based Threats
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Model extraction&lt;/li&gt;
&lt;li&gt;Model inversion&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  System-Based Threats
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Prompt injection&lt;/li&gt;
&lt;li&gt;Context Overflow&lt;/li&gt;
&lt;li&gt;Memory Poisoning&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  User-Based Threats
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;LLM-powered social engineering&lt;/li&gt;
&lt;li&gt;Trust exploitation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LLM Security Threat Cheat Sheet
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Threat&lt;/th&gt;
&lt;th&gt;Target / Attack Surface&lt;/th&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Training Data Extraction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Training dataset (confidentiality)&lt;/td&gt;
&lt;td&gt;Crafted prompts designed to trigger memorised content&lt;/td&gt;
&lt;td&gt;Verbatim or near verbatim training data (text, PII, secrets)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Membership Inference&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Training dataset membership (privacy metadata)&lt;/td&gt;
&lt;td&gt;Known candidate data sample already possessed by the attacker&lt;/td&gt;
&lt;td&gt;Yes/no (or probability) decision indicating whether the sample was used in training&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Prompt Leakage / System Prompt Exposure (LLM07:2025)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;System prompt / developer instructions&lt;/td&gt;
&lt;td&gt;Prompts asking the model to reveal or reflect on its instructions&lt;/td&gt;
&lt;td&gt;Partial or full disclosure of hidden system or developer prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Weight Extraction (Model Stealing)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Model parameters (intellectual property)&lt;/td&gt;
&lt;td&gt;Large volumes of carefully chosen API queries&lt;/td&gt;
&lt;td&gt;A surrogate or distilled model replicating the original model's behaviour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Model Inversion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Model's internal representations&lt;/td&gt;
&lt;td&gt;Unknown or partially known data, or model embeddings/outputs&lt;/td&gt;
&lt;td&gt;New training data or attributes reconstructed from the model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;System-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Context Window Poisoning (Prompt Injection)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LLM context window (instruction hierarchy)&lt;/td&gt;
&lt;td&gt;Attacker controlled text embedded in input or retrieved content&lt;/td&gt;
&lt;td&gt;Altered behaviour, policy bypass, unintended actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;System-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Context Overflow / Unbounded Consumption (LLM10:2025)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Context window size and system resources&lt;/td&gt;
&lt;td&gt;Excessively large prompts or documents&lt;/td&gt;
&lt;td&gt;Truncated safeguards, degraded responses, or denial of service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;System-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Stateful Conversation Manipulation (Memory Poisoning)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Persistent conversation memory&lt;/td&gt;
&lt;td&gt;Malicious statements intended to be stored as long term context&lt;/td&gt;
&lt;td&gt;Persistent misinformation or corrupted future responses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;LLM-Powered Social Engineering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Human cognition and decision-making&lt;/td&gt;
&lt;td&gt;Contextual or personal information used to craft persuasive output&lt;/td&gt;
&lt;td&gt;Manipulated users (phishing success, fraud, coerced actions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User-Based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Trust Exploitation / Misinformation (LLM09:2025)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;User trust and judgment&lt;/td&gt;
&lt;td&gt;Confident but incorrect or maliciously framed prompts&lt;/td&gt;
&lt;td&gt;Users accepting false, unsafe, or harmful information&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Key Takeaways
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LLMs introduce a unique attack surface&lt;/strong&gt; distinct from traditional ML systems, driven by natural language interaction, context handling, and emergent behaviour.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-based threats&lt;/strong&gt; exploit how LLMs learn from and memorise training data, enabling attacks such as training data extraction, membership inference, and system prompt leakage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model-based threats&lt;/strong&gt; target the model itself, including model extraction (theft of model behaviour or weights) and model inversion (reconstructing sensitive training data).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System-based threats&lt;/strong&gt; arise from how LLMs process all inputs as a single context, enabling prompt injection, context window overflow, and memory poisoning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User-based threats&lt;/strong&gt; leverage LLMs as force multipliers for social engineering, increasing the effectiveness of phishing, scams, and trust exploitation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Next Week
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Work through the "Preparation for Distribution" section of the SwiftUI tutorial.&lt;/li&gt;
&lt;li&gt;Continue posting small articles on Dev.to.&lt;/li&gt;
&lt;li&gt;Explore Figma MCP and experiment with generating UI design ideas using AI.&lt;/li&gt;
&lt;li&gt;Continue working on the AI Security Learning Path.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌈 Goals for This Year
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📱 iOS (SwiftUI)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a solid foundation in SwiftUI and create at least one iOS app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌐 Web Development
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue posting learning logs on Dev.to and eventually turn them into a portfolio site using React Router v7.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔐 Security (TryHackMe)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning cybersecurity on TryHackMe.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>security</category>
      <category>swift</category>
    </item>
  </channel>
</rss>
