<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Rich Liu on Medium]]></title>
        <description><![CDATA[Stories by Rich Liu on Medium]]></description>
        <link>https://medium.com/@Rich627?source=rss-d16b3c2b93b7------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*dZfGiqvrQhiu5Ns-</url>
            <title>Stories by Rich Liu on Medium</title>
            <link>https://medium.com/@Rich627?source=rss-d16b3c2b93b7------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 23 Jun 2026 13:28:28 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@Rich627/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Building a WhatsApp Channel Plugin for Claude Code]]></title>
            <link>https://medium.com/@Rich627/building-a-whatsapp-channel-plugin-for-claude-code-2557f164ed6b?source=rss-d16b3c2b93b7------2</link>
            <guid isPermaLink="false">https://medium.com/p/2557f164ed6b</guid>
            <category><![CDATA[chatbots]]></category>
            <category><![CDATA[whatsapp]]></category>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Rich Liu]]></dc:creator>
            <pubDate>Sun, 29 Mar 2026 04:47:18 GMT</pubDate>
            <atom:updated>2026-03-29T04:47:18.492Z</atom:updated>
            <content:encoded><![CDATA[<p><em>How I built an open-source MCP plugin that turns Claude Code into a WhatsApp-connected AI agent — running 24/7 on a headless Mac Mini with voice transcription, group personalities, and cron scheduling</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/793/1*blR34et7qrGAkwGBuj-TCw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rnEXsMeK7nxwcx8w2SvTUg.png" /></figure><h4>The Problem</h4><p>Claude Code is an incredibly powerful coding assistant, but it is locked inside the terminal. If you step away from your desk, you lose access. Anthropic ships official channel plugins for Telegram and Discord, but nothing for WhatsApp — the messaging app used by over 2 billion people worldwide.</p><p>I wanted Claude Code available from my phone at all times: approve tool calls from the bus, check on deployments during lunch, or just ask a question without opening a laptop. So I built a WhatsApp channel plugin from scratch.</p><h4>Architecture Overview</h4><p>The plugin is a single-file TypeScript MCP server (~1300 lines) that runs alongside Claude Code. It uses <strong>Baileys</strong>, an open-source library that implements the WhatsApp Web multi-device protocol. Your phone links to Claude Code the same way it links to WhatsApp Web — no WhatsApp Business API, no monthly fees, no third-party services.</p><p>The data flow looks like this:</p><pre>WhatsApp message → Baileys socket → MCP notification → Claude Code session → MCP tool call (reply) → Baileys → WhatsApp</pre><h4>Key Features</h4><p><strong>Two-way messaging:</strong> Send messages to Claude from WhatsApp, get responses back instantly. Photos, voice notes, videos, and documents are all supported.</p><p><strong>Voice transcription:</strong> Voice messages are automatically transcribed using local mlx-whisper — no cloud API needed. Claude receives the transcript as text and responds naturally.</p><p><strong>Group chat with AI personalities:</strong> Each WhatsApp group gets its own config.md where you define the AI identity, tone, and boundaries. One group can have a fitness coach persona while another has a finance assistant — each with persistent memory.</p><p><strong>Permission relay:</strong> When Claude needs to run a tool that requires approval, it sends the permission request to your WhatsApp DM. Reply “yes” or “no” directly from your phone — no need to be at the terminal.</p><p><strong>Access control:</strong> Built-in pairing system with 6-character codes, allowlists, and auto-lockdown. You control exactly who can talk to your Claude instance.</p><p><strong>Cron scheduling:</strong> Define recurring tasks in each group config — daily news summaries, workout reminders, Dependabot checks — using natural language or standard cron syntax.</p><h4>The Hard Parts</h4><p><strong>WhatsApp protocol changes:</strong> WhatsApp deprecated older protocol versions, forcing an upgrade to Baileys 7. This meant patching multiple breaking changes — LID identifier resolution, message key formats, and connection handling all needed custom fixes.</p><p><strong>Claude Code plugin constraints:</strong> Channel plugins must be MCP servers communicating via stdio. The plugin architecture requires careful alignment with how Claude Code manages tool registration, permission prompts, and notification delivery.</p><p><strong>Protected directory permissions:</strong> Claude Code treats .claude/ as a protected directory — writes always prompt for confirmation, even with — dangerously-skip-permissions. I initially stored state in ~/.claude/channels/whatsapp/, but moved everything to ~/.whatsapp-channel/ to eliminate permission prompts.</p><p><strong>24/7 headless operation:</strong> Running Claude Code unattended on a Mac Mini required solving TUI trust prompts at startup, configuring a macOS LaunchAgent with proper auto-restart, managing tmux sessions, and cleaning up zombie processes.</p><h4>Quick Start</h4><p>Install in 3 commands inside Claude Code:</p><pre>/plugin marketplace add Rich627/whatsapp-claude-plugin<br>/plugin install whatsapp@whatsapp-claude-plugin<br>/whatsapp:configure your-phone-number</pre><p>Then enter the pairing code on your phone: WhatsApp → Linked Devices → Link with phone number.</p><h4>Tech Stack</h4><p>TypeScript + Bun, Baileys 7 (custom patches), MCP server protocol, Claude Code plugin system, mlx-whisper for local voice transcription, macOS LaunchAgent + tmux for 24/7 headless operation.</p><h4>What Comes Next</h4><p>The plugin is fully open-source and available now. I have submitted a feature request to the Claude Code team for official WhatsApp channel support. In the meantime, this plugin bridges the gap for developers who want Claude Code on their phone.</p><p>If you are building AI agents that need to meet users where they already are, WhatsApp is hard to ignore — two billion users are already there.</p><p><strong>GitHub: </strong><a href="https://github.com/Rich627/whatsapp-claude-plugin">github.com/Rich627/whatsapp-claude-plugin</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2557f164ed6b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[無縫整合Salesforce數據,AWS AppFlow帶來無限可能]]></title>
            <link>https://medium.com/@Rich627/appflow-b16d76a9ea61?source=rss-d16b3c2b93b7------2</link>
            <guid isPermaLink="false">https://medium.com/p/b16d76a9ea61</guid>
            <dc:creator><![CDATA[Rich Liu]]></dc:creator>
            <pubDate>Mon, 25 Mar 2024 12:07:29 GMT</pubDate>
            <atom:updated>2024-03-25T12:07:29.602Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/300/1*yOYNrncZBvNCM7AWLt3fjw.jpeg" /></figure><p><em>打通數據孤島,助力企業數據驅動之路</em></p><p>在當今數位化時代,數據無疑是企業的核心資產之一。然而, 由於系統和應用程式的多樣性,企業往往面臨著數據孤島的挑戰, 單一數據被鎖定在不同的系統和應用程式中, 難以實現無縫整合和高效利用。</p><p>作為全球領先的客戶關係管理(CRM)解決方案之一, Salesforce匯集了大量有關客戶、銷售機會、市場活動等寶貴數據。但僅依賴Salesforce本身可能無法滿足現代企業日益增長的數據需求。企業還需要將Salesforce數據與其他系統和應用程式中的數據進行整合, 並對數據做一些處從而獲得更全面的業務洞見力。</p><p>AppFlow就是一個強大的工具作為Amazon Web Services提供的一款無服務器數據整合服務,AWS AppFlow旨在幫助企業無縫整合各種軟體即服務(SaaS)應用程式、AWS服務以及內部企業應用程式。它提供了一種安全、可擴展且經濟高效的方式,實現不同系統和應用程式之間的數據傳輸。</p><p>在接下來的內容中, 我將詳細介紹AWS AppFlow的功能, 並通過一個小demo向您展示如何使用AppFlow將Salesforce數據整合進S3 bucket並同時建立Glue Data catalog再使用Athena 做Query。</p><ol><li><strong>先進到</strong><a href="https://aws.amazon.com/tw/appflow/"><strong><em>AWS Appflow 頁面</em></strong></a><strong>, 點擊建立流程</strong></li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4-NLjRVg6iXwxz-0sq0vAw.png" /></figure><p>步驟1 指定流程詳細資訊:</p><p>輸入流程名稱, 這邊可以開啟使用KMS來開啟資料加密</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kP56P_rbb5Sqr9lnb8fg9Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YPnA6AUJ9w4nRoIaUkuCpA.png" /></figure><p>步驟2 設定流程:</p><p>我這邊用Salesforce做範例, 來源選擇Salesforce接著點擊右邊的建立新連線, 會將畫面導到登入Salesforce的page, 這邊可以開啟PrivatetLink建立私人連線, 讓資料傳輸更安全。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7ai3lEbqXSgNZLBKY0HZRg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TxZGmFwhr_r38-EdR57P3A.png" /></figure><p>目的地選擇S3 bucket, 大家可以自行建立S3 bucket, 也可以設置Prefix, 接著我們啟用Glue Data Catalog, 這邊需要指定一個IAM Role, 我將在下一步教大家如何建立, 下面是說在Glue裡面要先建立一個Database, 再將Table存在DB裡面, 這邊取個名稱就可以嘍。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tEhVv8HJgVTbS3lcCSEE6A.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dGmzVZTAEJcbs3iYDR_ogA.png" /></figure><p>檔案格式我選擇Parquet, 原因是在做查詢時會比較省時、省錢。<em>有關Parquet的更多說明可以看這邊: </em><a href="https://myapollo.com.tw/blog/apache-parquet/"><em>https://myapollo.com.tw/blog/apache-parquet/</em></a></p><p>流程觸發分為： 隨需, 排程, 以及事件驅動, 事件驅動只限定選擇Salesforce事件, ex. 如果在Salesforce平台新增了一些新的資料, Appflow會自動觸發將結果append到S3，這邊就選隨需執行就好了。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NVjPn3PXneKCp2ZYL0BJSQ.png" /></figure><p>2. 進到<a href="https://aws.amazon.com/tw/iam/?gclid=Cj0KCQjwwYSwBhDcARIsAOyL0fiSYrJw7K2mAJT7pZu1fPGChNEFCrC4AXY-wpLLnSHO4iL1YqV_Y1UaArBVEALw_wcB&amp;trk=132399a4-7941-43ef-bbc4-a995f6035a75&amp;sc_channel=ps&amp;ef_id=Cj0KCQjwwYSwBhDcARIsAOyL0fiSYrJw7K2mAJT7pZu1fPGChNEFCrC4AXY-wpLLnSHO4iL1YqV_Y1UaArBVEALw_wcB:G:s&amp;s_kwcid=AL!4422!3!651541934833!e!!g!!amazon%20iam!19836376207!143940288861"><em>AWS IAM</em></a>, 並建立一個IAM Role</p><p>先點擊右側建立角色, 進到頁面後選擇自訂信任政策</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4yeyINk21gqVktXindKNhw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KSomr-jRi3IUgUa-jJngxQ.png" /></figure><p>進來之後複製下面的Json檔直接貼上, 接著按下一步</p><pre>{<br> &quot;Version&quot;: &quot;2012-10-17&quot;,<br> &quot;Statement&quot;: [<br>  {<br>   &quot;Effect&quot;: &quot;Allow&quot;,<br>   &quot;Principal&quot;: {<br>    &quot;AWS&quot;: &quot;*&quot;,<br>    &quot;Service&quot;: &quot;appflow.amazonaws.com&quot;<br>   },<br>   &quot;Action&quot;: &quot;sts:AssumeRole&quot;<br>  }<br> ]<br>}</pre><p>第二步在給予這個IAMRole “AWSGlueServiceRole”的權限, 我這邊給很大的權限, 一般實務上不建議User這樣管理, 包含上面Json也是應該要設置arn, 沒問題後進到下一步取的名字後就可以建立了。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-Sjm9DLmDnTKliu17bMnvA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jHEyoWhU9WpoYemu7kYhrg.png" /></figure><p>步驟3: 映射資料欄位</p><p>先帶大家看一下Salesforce上面的Account object, 我這邊就選擇映射Account Name以及Account ID兩個欄位</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7o-xj9FKtS1kjfq7QV2oxQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vUAPIheE1yKf4dG6inhNjw.png" /></figure><p>往下可以可以看到設置Partition的選項, 這邊可以可以自行設置, 切partition是非常重要的, 切成功可以大幅度的減少查詢成本也能提高執行效率, <em>Partition介紹: </em><a href="https://www.nextlink.cloud/search/%E3%80%90AWS+%E6%95%B8%E6%93%9A%E6%88%B0%E6%83%85%E5%AE%A4%E3%80%91Day+12+Glue+Partition+%E6%95%99%E5%AD%B8+%E2%80%93+Part"><em>https://www.nextlink.cloud/search/%E3%80%90AWS+%E6%95%B8%E6%93%9A%E6%88%B0%E6%83%85%E5%AE%A4%E3%80%91Day+12+Glue+Partition+%E6%95%99%E5%AD%B8+%E2%80%93+Part</em></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oWLIxHb_SVxuSufEutJtrQ.png" /></figure><p>步驟4: 新增篩選條件</p><p>這邊可以設置一些篩選條件, 內容比較進階我這邊先<strong>skip</strong>掉。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DmUPyD7JM_2Yyy4395ZmmQ.png" /></figure><p>步驟5: 檢閱和建立</p><p>確定沒問題就可以直接建立喔, 創建好之後可以點擊執行流程</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YSXUXc-BwCtNvaSxi2A2Lw.png" /></figure><p>3. 確認結果</p><p>我們可以在<a href="https://aws.amazon.com/tw/glue/"><em>Glue</em></a>查看一下結果, 也可以在Appflow的執行歷史紀錄找到相關資訊。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Tg5BR6wLBikAJDxur7V1OQ.png" /></figure><p>4. 使用SQL查詢資料</p><p>這邊選擇作為<a href="https://aws.amazon.com/tw/athena/"><em>Athena</em></a>查詢結果, 先點擊啟動查詢編輯器, 進到右邊的頁面後需要先建立S3 bucket來存放查詢記錄, 點擊上方的編輯設定會進到管理S3的頁面, User可以自訂或是選現有的bucket做存放。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2exK4YjdYDhNzk-HmtMWfw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x5ua_do_R8ObpH5shRKd9A.png" /></figure><p>設定好之後左邊可以選擇DataCatalog並選擇先前在Appflow建立的DB應該可以看到我們的Table, 接著輸入一些簡單的SQL就可以查詢到資料啦！</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NIB6AH6YpybfMDgetrg3Sg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gehrkUctLiip8vRX4dtUiQ.png" /></figure><p>透過本文的介紹,相信您已經對AWS AppFlow和如何將Salesforce數據無縫整合到AWS服務有了初步了解。AppFlow提供了一種簡單且安全的方式,幫助企業輕鬆整合各種雲端服務和內部應用程式,從而充分釋放數據的潛力。無論您是想將Salesforce數據導入數據湖以支持分析需求,還是想與其他系統進行數據交換,AppFlow都是一個值得考慮的選擇。展望未來,隨著數據生態系統的不斷發展,AppFlow將為企業帶來更多創新的使用場景,助力企業實現數據驅動的願景。</p><pre>Email：rich.liu@hotmail.com<br>Website：https://rich-liu.com/ <br>Linkedin：https://www.linkedin.com/in/rich-liu/ <br>Github：https://github.com/rich627</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b16d76a9ea61" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[AWS 開箱體驗：CodeWhisperer、CodeCatlyst 和 Q 讓開發更輕鬆]]></title>
            <link>https://medium.com/@Rich627/aws-%E9%96%8B%E7%AE%B1%E9%AB%94%E9%A9%97-codewhisperer-codecatlyst-%E5%92%8C-q-%E8%AE%93%E9%96%8B%E7%99%BC%E6%9B%B4%E8%BC%95%E9%AC%86-584f9df1fbad?source=rss-d16b3c2b93b7------2</link>
            <guid isPermaLink="false">https://medium.com/p/584f9df1fbad</guid>
            <category><![CDATA[aws-codecodecatalyst]]></category>
            <category><![CDATA[aws-codewhisperer]]></category>
            <category><![CDATA[amazon-q]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Rich Liu]]></dc:creator>
            <pubDate>Sun, 14 Jan 2024 08:35:35 GMT</pubDate>
            <atom:updated>2024-01-16T04:06:11.780Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UTnf3IQrHBdKP1MLw12VKg.jpeg" /></figure><p><em>深入解析新世代開發者工具，優雅運用 Code Whisperer、CodeCatlyst 與 Q 提升開發效率。</em></p><p>在2023年，科技巨頭們展開生成式大戰。Amazon終於在年底發力了，推出一項全新的服務Amazon Q，這款新型生成式AI助理專為滿足辦公需求而生，更可根據客戶業務進行訂製。借助客戶的資訊儲存庫、程式碼和企業系統，AWS Q 能夠快速提供複雜問題的相關答案、生成內容並支援有效行動，同時，Amazon的開發者工具也不斷進化，其中包括AWS CodeCatalyst和CodeWhisperer。CodeCatalyst為開發團隊提供了協作空間、整合開發環境（IDE）、AWS Toolkit整合和任務自動化等功能，旨在強化開發團隊的協作和效率。而CodeWhisperer則是一款智能AI助手，提供智慧化的程式碼協助，包括智能建議、程式碼重構、程式碼品質洞察和智能代碼檢視等功能，使開發更輕鬆、更高效。<a href="https://aws.amazon.com/tw/q/"><em>瞭解更多 Amazon Q 的功能和使用案例</em></a>，這邊有很完整的介紹到Q的use case喔，有興趣的讀者可以自行閱讀。</p><p>這篇文章將演示如何善用 Amazon CodeCatalyst 和 Code Whisperer，搭配 AWS Q，創造出更為強大的開發體驗。</p><ol><li>在 AWS CodeCatalyst 網頁上建立一個 Space，點擊右上角的 “Continue with AWS Builder ID”，填寫資料後點擊 “Create Space”。AWS accountID 可以在Console右上角找到，需進行帳戶驗證才能進入下一步</li></ol><p><em>請注意：目前只開放兩個AZ: us-east1(維吉尼亞洲), us-west2(奧勒岡)</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LGGuvJ7kI8vGwHZktvdxiw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_BmYs41voSTVk35JCe8-zg.png" /></figure><p>2. 接下來創建一個新的Project，點擊右上角”Crate Project”選擇一個空白的模板。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RWsap_lzCRPOoXoq3pn4rA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1-TzvkiegGun1n5QY6JmtQ.png" /></figure><p>3. 成功創建Project後，先在local IDE下載”AWS Toolkit”。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n4FD6wgFxbYGIC9_ES87hw.png" /></figure><p>4.接著進到Project的頁面，創建一個Repository，並點擊右上角”Create Dev Environment”並選擇VScode，此舉動將會在local ide開啟這個repo。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rRTOqfbgCqS8ZFH2DVZI9w.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dOQKEw0XckiuSjkGc-ViXw.png" /></figure><p>5. 接下來在ide點擊左側AWS 圖標選擇AWS CodWhisperer，選擇Amazon Q + Codewhisperer做一下基本的驗證，</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IhcAAXMAemz5god4uf1Xfg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LknrJTkCLzPwq87RuEV8Uw.png" /></figure><p>6. 然後我們就可以使用CodeWhisperer啦，我創建了一個demo.py檔案並且先打上一些code，CodeWhisperer就跳出建議了，直接按”tab”接受，</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pQ-70hcpVLBSeHd623Fcng.png" /></figure><p>7. 接下來點擊左側Q的圖標和小助手交談。我這邊prompt請他幫我寫Test case來驗證這段code是否可行，目前好像只支援英文版。</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gnHRYzkTOXQd0nCw0j3HsA.png" /></figure><p>8. 下一步我將他的code貼到一個名為test.py的檔案中，接下來我在Terminal run發現都正常，很神奇吧！</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7Ze26d1j0HrfObM0IZPXow.png" /></figure><p>若想看更多功能，例如請Q直接修改檔案, 發Pull Reqest… ，我這邊推薦一個影片，供大家參考: <a href="https://www.youtube.com/watch?v=lj4Kiq4RWkY&amp;t=1332s">https://www.youtube.com/watch?v=lj4Kiq4RWkY&amp;t=1332s</a></p><p>結語：</p><p>透過這次深入探討 Amazon 的最新開發者工具，我們不僅了解到 AWS CodeCatalyst、CodeWhisperer 和 Amazon Q 的功能，更見證了它們如何協同作業，為開發者提供一個無比順暢的開發體驗，透過文章中的實際操作步驟，我們看到如何在 AWS CodeCatalyst 創建 Space、建立 Project，並運用 CodeWhisperer 的智能建議。同時，透過 Amazon Q 的生成式 AI 助手，我們體驗了如何解決複雜情境，這使得開發過程更加靈活且具有創新性，大家有問題歡迎問我～ 感謝閱讀</p><pre>信箱：rich.liu@hotmail.com<br>網址：https://rich-liu.com/ <br>Linkedin：https://www.linkedin.com/in/rich-liu/ <br>Github：https://github.com/rich627</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=584f9df1fbad" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[從0開始：在Mac M系列上配置深度學習環境Tensorflow+Pytorch]]></title>
            <link>https://medium.com/@Rich627/mac-tensorflow-pytorch-setup-bc60a7211da9?source=rss-d16b3c2b93b7------2</link>
            <guid isPermaLink="false">https://medium.com/p/bc60a7211da9</guid>
            <category><![CDATA[pytorch]]></category>
            <category><![CDATA[mac]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[tensorflow]]></category>
            <category><![CDATA[deep-learning]]></category>
            <dc:creator><![CDATA[Rich Liu]]></dc:creator>
            <pubDate>Sat, 23 Dec 2023 09:31:41 GMT</pubDate>
            <atom:updated>2023-12-23T09:40:30.784Z</atom:updated>
            <content:encoded><![CDATA[<p>在配置新電腦的過程中，有一個系統性的安裝是非常方便的，可以根據自己的需求去修改script.bash。以下是一份詳盡的步驟指南，幫助你在新的 macOS 系統上安裝所需的工具、程式和機器學習框架。</p><h3>步驟 1：安裝基本工具</h3><p>首先，開啟終端機，clone 我寫的repo，我建議在clone下載頁面，因為腳本都是按照這個路徑，<strong>如果要clone在別的路徑記得拉到下載!!!</strong>如果沒有git 可以點擊這邊下載repo: <a href="https://github.com/Rich627/Setup-New-Machine">https://github.com/Rich627/Setup-New-Machine</a></p><pre>git clone git@github.com:Rich627/Setup-New-Machine.git</pre><p>下載後進入~/Downloads/Setup-New-Machine-main/Mac 資料夾。</p><pre>cd ~/Downloads/Setup-New-Machine-main/Mac</pre><p>下一步會安裝一些基本的套件，若不想要安裝可以直接刪除對應的指令，我主要是使用brew管理套件，若想增加其他的app可以查看bew是否支援再放到腳本裡面即可。</p><pre># script.bash<br>xcode-select --install<br>curl -O https://update.code.visualstudio.com/latest/darwin/stable<br>/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;<br>eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;<br><br><br>mkdir -p ~/miniconda3<br>curl https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.sh<br>bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3<br>rm -rf ~/miniconda3/miniconda.sh<br>~/miniconda3/bin/conda init bash<br>~/miniconda3/bin/conda init zsh<br><br>brew install --cask visual-studio-code<br>brew install --cask docker<br>brew install --cask git<br># brew install --cask line <br># brew install --cask google-chrome<br># brew install --cask firefox<br># brew install --cask slack<br># brew install --cask zoom<br># brew install --cask notion<br># brew install --cask r<br># brew install --cask rstudio<br># brew install --cask mysql</pre><p>使用以下指令給予腳本執行權限並運行安裝腳本</p><pre>cd ~/Downloads/Setup-New-Machine-main/Mac<br>chmod +X script.bash<br>./script.bash</pre><h3>步驟 2：建立 TensorFlow 環境</h3><p>重新啟動終端機後，創建一個名為 Tensorflow 的環境，並啟動它。</p><pre>conda env create -f ~/Downloads/Setup-New-Machine-main/Mac/tensorflowenvironment.yml</pre><pre>conda activate Tensorflow<br>conda update --all<br>pip install --upgrade pip</pre><p>接著，使用以下指令安裝 Apple Silicon 版本的 TensorFlow。</p><pre>conda install -c apple tensorflow-deps<br>pip install tensorflow-macos<br>pip install tensorflow-metal</pre><p>到這邊tensorlfow就裝好嘍，在terminal使用以下程式測試 GPU 是否可用。</p><pre>python3 ~/Downloads/Setup-New-Machine-main/Mac/tensorflowTestCode.py</pre><h3>步驟 3：建立 PyTorch 環境</h3><p>同樣地，創建一個名為 Pytorch 的環境，並啟動它。</p><pre>conda env create -f ~/Downloads/Setup-New-Machine-main/Mac/torchenvironment.yml</pre><pre>conda activate Pytorch<br>conda update --all<br>pip install --upgrade pip</pre><p>接著，使用以下指令安裝 Apple Silicon 版本的 PyTorch。</p><pre>pip3 install torch torchvision torchaudio</pre><p>Torch也裝好嘍，運行以下程式檢查 MPS 是否可用。</p><pre>python3 ~/Downloads/Setup-New-Machine-main/Mac/torchTestCode.py</pre><h3>步驟 4：測試運行</h3><p>開啟活動監視器觀察 GPU 使用情況，並運行以下程式測試 TensorFlow 和 PyTorch。</p><pre>conda activate Tensorflow<br>python3 ~/Downloads/Setup-New-Machine-main/keras_example.ipynb</pre><pre>conda activate Pytorch<br>python3 ~/Downloads/Setup-New-Machine-main/torchtest.ipynb</pre><p>這是我在 Medium 上的第一篇文章，希望這篇指南對你有所幫助，如果有需要Windows和Ubuntu的版本，我在考慮找時間寫。若有任何問題，歡迎與我聯繫~</p><pre>Mail: rich.liu@hotmail.com<br>Site: https://rich-liu.com/<br>Linkedin: https://www.linkedin.com/in/rich-liu/<br>Github: https://github.com/rich627</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bc60a7211da9" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>