🔍 搜尋結果:AWS

🔍 搜尋結果:AWS

20 多個 DOM 專案:您的前端突破!

透過 DOM 專案提升您的前端技能:新手開發人員的遊樂場 ---------------------------- 透過[DOM 專案改變您的學習體驗!](https://github.com/jisan-mia/dom-projects/)深入研究 20 多個使用 HTML、CSS 和 JavaScript 建構的實用專案。非常適合新手和經驗豐富的開發人員,您會發現一些可以挑戰和激勵您的東西。 以下是 DOM 專案的與眾不同之處: - **邊做邊學:** DOM 專案直接深入前端開發的實際面向。您將透過建立實際專案來學習,鞏固對核心概念的理解。 - **漸進式學習:** DOM 專案提供了按難度分類的精選專案。從適合初學者的專案開始,例如“計數器”或“滾動動畫”,並逐漸進展到更高級的專案,例如“高級待辦事項”或“REST 用戶端”。 - **[開源與協作:](https://github.com/jisan-mia/dom-projects/)** DOM 專案的美妙之處在於其開源特性。您不僅可以從現有專案中學習,還可以將您的創作貢獻給該平台,從而培養一個充滿活力的學習者和開發者社群。 - **輕鬆設定:**設定 DOM 專案輕而易舉。不涉及複雜的安裝過程。只需分叉存儲庫,將其克隆到本地計算機,然後在瀏覽器中打開 index.html 文件。您已準備好開始您的程式設計冒險! ### 深入研究專案: [DOM Projects](https://www.jisan.io/dom-projects/)擁有**20 多個專案**,每個專案都針對特定技能和概念精心設計。以下是一些激發您興趣的詳細範例: ### [計數器](https://www.jisan.io/dom-projects/projects/counter/) ![櫃檯](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/egsodt4dyfekiwp8ln4q.png) **描述**:一個簡單的計數器專案,允許使用者增加和減少螢幕上顯示的數字。它還包括一個用於將計數器重置為零的按鈕。 **學習理念:** - DOM 操作:了解如何使用 JavaScript 存取和修改 HTML 元素。 - 事件處理:了解如何擷取使用者互動(在本例中為點擊)並使用 JavaScript 觸發特定操作。 - 基本 JavaScript 函數:探索如何寫函數來執行遞增、遞減和重置計數器值等任務。 ### [爸爸笑話](https://www.jisan.io/dom-projects/projects/dad-jokes/) ![爸爸笑話](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z09wwb70arrb5ccjhl87.png) **描述**:該專案使用 JavaScript 中的非同步技術從外部 API 獲取隨機爸爸笑話。一旦檢索到,笑話就會顯示在網頁上供您娛樂。 **學習理念:** - 非同步程式設計:了解如何處理需要時間才能完成的操作(例如從 API 取得資料)而不阻塞 JavaScript 中的主執行緒。 - Fetch API:了解如何使用內建瀏覽器功能向 API 發出 HTTP 請求並擷取資料。 - 使用 API:探索如何與外部 API 互動以存取這些服務提供的資料或功能。 ### [表單驗證](https://www.jisan.io/dom-projects/projects/form-validation/) ![表單驗證](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7b7mbyvuwxdwkzv2eidr.png) **描述**:此專案示範了使用 JavaScript 進行客戶端表單驗證。它在提交之前驗證表單中的使用者輸入。此外,驗證成功後,它會顯示成功訊息並允許使用者以唯讀格式預覽提交的資料。 **學習理念:** - 表單驗證:了解如何使用 JavaScript 在提交之前驗證表單中的使用者輸入。這有助於確保資料完整性並防止處理無效資料。 - DOM 操作:了解如何根據驗證結果存取和修改表單元素(例如顯示錯誤訊息或停用輸入欄位)。 - 事件處理:使用 JavaScript 擷取表單提交事件並觸發驗證邏輯。 ### [隨機用戶](https://www.jisan.io/dom-projects/projects/random-user/) ![隨機用戶](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jlfog2j2okpgtx01eyso.png) **描述**:此專案利用 API 產生隨機使用者資訊。它會取得姓名、電子郵件、頭像等資料,並將其顯示在網頁上,模擬隨機使用者設定檔。 **學習理念:** - 非同步程式設計:與專案 2 (DadJokes) 類似,此專案強化了 JavaScript 中的非同步操作。 - Fetch API:繼續練習使用工具向 API 發出 HTTP 請求並檢索資料。 - 使用 API:進一步探索與外部 API 互動以存取特定功能或資料。 ### [摩斯電碼翻譯器](https://www.jisan.io/dom-projects/projects/morse-translator/) ![摩斯電碼翻譯器](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/il6si3v62r76udcis9lq.png) **描述**:此專案允許使用者在摩斯電碼和文字之間進行翻譯。使用者可以鍵入文字並查看對應的摩斯電碼,也可以輸入摩斯電碼並查看翻譯後的文字。 **學習理念**: - 字串操作:了解如何在 JavaScript 中使用字串,包括拆分、連接和字元操作的函數,這對於摩斯電碼翻譯至關重要。 - 條件語句:學習如何在 JavaScript 中使用條件語句(if/else)來實現基於使用者輸入(文字或摩斯電碼)的翻譯邏輯。 ### [基本計算機](https://www.jisan.io/dom-projects/projects/basic-calculator/) ![基本計算機](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/riz357iso4aux1an08sx.png) **描述**:該專案使用 JavaScript 建立一個最基本的計算器應用程式。它允許使用者執行基本算術運算,例如加法、減法、乘法和除法。使用者可以輸入數字並使用螢幕上的按鈕選擇所需的操作。計算器顯示計算結果。 **學習理念**: - 事件處理:與先前的專案類似,此專案練習捕捉使用者對計算器按鈕的點擊並觸發操作(更新計算和結果)。 - DOM 操作:示範如何使用 JavaScript 更新計算器介面中顯示的數字和結果。 - JavaScript 中的基本數學運算:探索使用 JavaScript 內建的數學運算子和函數來執行加法、減法、乘法和除法等計算。 ### [普通計算機](https://www.jisan.io/dom-projects/projects/normal-calculator/) ![普通計算機](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qpgq9hnt59vlcaz8r0zx.png) **描述**:該專案建立在基本計算器的基礎上,為標準數學計算提供更全面的使用者體驗。它適合熟悉基本計算器功能的使用者。 **學習理念:** - 基於現有專案:示範對基本計算器概念的擴展,以建立更用戶友好且功能豐富的計算器。 - 增強的使用者互動:引入改進使用者與計算器互動的技術,例如處理小數輸入或合併記憶體功能。 ### [科學計算機](https://www.jisan.io/dom-projects/projects/scientific-calculator/) ![科學計算機](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4taeew6vv1ublamhbyod.png) **描述**:此專案透過提供三角函數(正弦、餘弦、正切)、對數和指數等科學函數,將計算器功能提升到一個新的水平。它迎合需要高級數學計算的用戶。 **學習理念:** - 建立複雜的應用程式:示範如何建立具有先進科學功能的更複雜的應用程式。 - JavaScript 中的數學函數:介紹使用 JavaScript 內建的數學函數進行高階計算 ### [簡單的一切應用程式](https://www.jisan.io/dom-projects/projects/js-todo/) ![簡單的一切應用程式](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/55d842o20i8j528q2maz.png) **描述**:該專案是一個基本的待辦事項清單應用程式。使用者可以新增任務、將其標記為已完成以及從清單中刪除它們。它演示了管理和追蹤任務。 \*\*學習理念: - DOM 操作:此專案強化了使用 JavaScript 動態新增、刪除和修改 HTML 中的清單專案的實務。 - 陣列:它演示了在 JavaScript 中使用陣列儲存和管理任務資料。 - 使用者介面更新:探索如何根據使用者互動更新待辦事項清單的視覺表示(新增、完成、刪除任務)。 ### [個人資料表和卡片](https://www.jisan.io/dom-projects/projects/profile-form/) ![個人資料表和卡片](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13yidfqfe156556rky87.png) **描述**:此專案允許使用者使用表單建立動態個人資料卡。用戶可以輸入他們的訊息,提交後,將建立一個新的個人資料卡並顯示在頁面上。它還包括刪除現有個人資料卡的功能。 **學習理念:** - 表單處理:該專案基於表單驗證(專案 3)的概念,重點關注捕獲表單資料並將其用於進一步的操作。 - DOM 建立和操作:它超越了基本的 DOM 操作,根據使用者輸入動態建立新的 HTML 元素(個人資料卡)。 - 事件處理:繼續練習捕獲使用者與表單和刪除按鈕的互動並觸發適當的操作。 ### [PC元件過濾](https://www.jisan.io/dom-projects/projects/pc-component-filter/) ![PC元件過濾](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/txtgpqu4t0zbi2mcovbo.png) **描述**:該專案允許使用者根據他們的選擇過濾電腦部件。使用者可以從各種選項中進行選擇,例如 CPU 品牌、RAM 大小、顯示卡類型等,顯示的元件清單將動態更新以反映所選的篩選器。 **學習理念:** - DOM 操作:與先前的專案類似,此專案實踐根據使用者選擇動態更新顯示的元件清單。 - 陣列和資料過濾:探索使用陣列來存儲計算機部件資料,並在 JavaScript 中實現過濾邏輯以匹配用戶選擇。 - 使用者介面更新:重點是根據應用的過濾器更新元件列表的視覺表示。 ### [天氣應用程式](https://www.jisan.io/dom-projects/projects/weather-app/) ![天氣應用程式](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l4tjhdmz5xlpxia218lp.png) **描述**:該專案是一個天氣應用程式,允許用戶透過城市名稱搜尋當前的天氣資訊。它利用外部天氣 API 來獲取資料並在螢幕上顯示溫度、濕度和天氣狀況等詳細資訊。 **學習理念:** - 非同步程式設計:與 DadJokes(專案 2)等專案類似,此專案強化了處理非同步操作以獲取天氣資料的概念。 - Fetch API:繼續練習使用工具向 API 發出 HTTP 請求並檢索天氣資料。 - 使用 API:進一步探索與外部 API 互動以存取天氣資訊。 ### [感言滑塊](https://www.jisan.io/dom-projects/projects/testimonial-slider/) ![感言滑塊](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sroguxb8914j1dv65fpw.png) **描述**:此專案建立一個具有滑桿功能的推薦部分。它顯示使用者的引言或推薦,使用者可以使用滑桿控制來瀏覽它們。 **學習理念:** - DOM 操作:示範如何根據滑桿位置操作建議元素的可見性。 - 事件處理:捕捉使用者與滑桿控制項的互動並觸發滑動動畫。 ### [滾動動畫](https://www.jisan.io/dom-projects/projects/animation-on-scroll/) ![滾動動畫](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3o5psut9f3d5cmns3ld3.png) **描述**:此專案包含向下捲動頁面時觸發的動畫。當使用者滾動時,網頁上的不同元素會變成動畫,增加視覺趣味和互動性。 ### 學習理念: - CSS 動畫:探索使用 CSS 動畫來建立根據滾動位置啟動的視覺效果。 - 用於捲動事件的 JavaScript:介紹使用 JavaScript 來偵測滾動事件並相應地觸發動畫。 ### [搜尋字段顯示](https://www.jisan.io/dom-projects/projects/search-field-reveal/) ![搜尋字段顯示](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/awycht9282x9n35gyy5j.png) **描述**:此專案利用動畫來增強使用者體驗。它會建立一個搜尋字段,在使用者互動(例如,點擊按鈕)時透過動畫顯示自身。 **學習理念:** - CSS 動畫:介紹使用 CSS 動畫為搜尋欄位顯示建立動態視覺效果。 - 事件處理:涵蓋捕獲使用者互動(例如按鈕單擊)並使用 JavaScript 觸發動畫。 ### [問題清單及進展](https://www.jisan.io/dom-projects/projects/question-list-progress/) ![問題清單及進展](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1p6unngf1az0084i3tnb.png) **描述**:此專案示範了 JavaScript 中常見的 DOM 操作技術。它具有問題清單和進度指示器,進度指示器會隨著使用者回答問題而更新。 **學習理念:** - DOM 操作:此專案強調根據使用者與問題的互動來操作進度指示器等元素。 - 事件處理:捕捉使用者與問題元素的互動並觸發更新進度指示器等操作。 ### [莫代爾](https://www.jisan.io/dom-projects/projects/modal/) ![莫代爾](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q0b06e0fi84z7wqsjev4.png) **描述**:該專案會建立一個模式窗口,它是一個覆蓋頁面主要內容的彈出元素。它通常用於登入表單、註冊提示或警報訊息等內容。 **學習理念:** - DOM 操作:重點是根據使用者互動顯示和隱藏模式視窗元素。 - 事件處理:捕捉觸發元素和模式的關閉按鈕上的點擊以控制其可見性。 ### [高級待辦事項](https://www.jisan.io/dom-projects/projects/advanced-todo/) ![高級待辦事項](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8baq9a3n6qdwlookd338.png) **描述**:該專案基於簡單的待辦事項應用程式(專案 8)建置,提供過濾、編輯和刪除任務等高級功能。使用者可以對任務進行分類、編輯現有任務以及從清單中刪除不需要的任務。 **學習理念:** - 基於現有專案:與科學計算器(專案 7)類似,該專案演示了對基本概念(待辦事項清單)的擴展以建立更高級的應用程式。 - 使用者介面更新:擴展了更新待辦事項清單的概念,包括過濾、編輯任務內容和刪除任務等功能。 ### [復古計算器](https://www.jisan.io/dom-projects/projects/retro-calculator/) ![復古計算器](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/thdpc8rzcppjfhlw8aru.png) **描述**:該專案實現了經典的計算器設計,並支援實體鍵盤輸入。它允許用戶使用類似於傳統計算器的佈局輸入數字並執行計算。 **學習理念:** - 事件處理:與其他專案類似,該專案側重於捕獲用戶交互,但在本例中,它包括處理計算器按鈕上的點擊和鍵盤上的按鍵。 - DOM 操作:根據使用者輸入和計算結果更新計算器顯示。 - 物件導向程式設計:此專案引入了 JavaScript 中物件導向程式設計 (OOP) 的概念,用於建立更模組化且可重複使用的計算器功能。 ### [簡單的測驗應用程式](https://www.jisan.io/dom-projects/projects/simple-quiz-app/) ![簡單的測驗應用程式](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khvz1xnzfvusxb8hvwrh.png) **描述**:該專案建立一個簡單的測驗應用程式,用戶可以在其中回答問題並查看結果。它包括每個問題的計時器,以加入時間壓力元素。 **學習理念:** - DOM 操作:更新測驗介面以顯示問題、處理答案選擇並顯示最終結果 ### [進階測驗應用程式](https://www.jisan.io/dom-projects/projects/advanced-quiz-app/) ![進階測驗應用程式](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/98kzkz9jyfl6vjkau9z1.png) **描述**:該專案建立在簡單的測驗應用程式的基礎上,提供更多自訂選項。使用者可以在開始測驗之前設定問題數量、選擇主題並定義難度等級。 **學習理念:** - 基於現有專案:與其他專案(科學計算器、高級待辦事項清單)類似,該專案演示了透過附加功能擴展基本概念。 - 使用者輸入驗證:它引入了驗證自訂選項的使用者輸入的概念(例如,確保選擇有效數量的問題)。 - 條件語句:在此專案中發揮更重要的作用,因為 JavaScript 邏輯需要根據使用者定義的參數來調整測驗。 ### 採取下一步: 準備好開始您的前端開發之旅了嗎?以下是如何開始使用 DOM 專案: 1. 造訪 GitHub 上的 DOM 專案儲存庫: <https://github.com/Jisan-mia/dom-projects> 2. 瀏覽專案清單並選擇一個符合您的技能水平和興趣的專案。 3. 請按照設定[說明](https://github.com/Jisan-mia/dom-projects?tab=readme-ov-file#how-to-set-up-dom-projects-for-development)進行操作並在瀏覽器中開啟專案。 4. 深入研究程式碼、實驗並學習! DOM 專案中的每個專案都可以讓您練習編碼技能,並幫助您理解前端開發中的關鍵概念。無論您是剛起步的初學者,還是希望提高技能的經驗豐富的開發人員,DOM 專案都能滿足每個人的需求。 請記住,最好的學習方法是實踐。所以,捲起袖子,選擇一個專案,然後開始編碼吧!快樂學習! --- 原文出處:https://dev.to/jisan/20-dom-projects-your-frontend-breakthrough-1h8a

50 個最佳免費 HTML 範本網站

您可以在其中找到和下載使用普通 CSS 以及每個主要框架建立的免費 HTML 模板。這些高品質的專案將為您的網站、登陸頁面、部落格、作品集、電子商務和儀表板專案提供支援。 在線空間中有許多模板建立者。以下是使下面提到的那些脫穎而出的原因。 - 模板免費提供給個人和商業用途 - 專案看起來很現代,並提供強制性的即時預覽 - 您只需提供電子郵件地址或註冊即可下載 本文分為兩部分。第一個展示了網站和登陸頁面模板提供者。第二部分重點介紹儀表板和 UI 套件建立者。 HTML 修訂版 -------- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/08tufzx4fdyi5drm42i8.jpg)](https://htmlrev.com/) [HTMLrev](https://htmlrev.com/)展示免費的 HTML vanilla CSS、Bootstrap、Tailwind、Bulma、Angular、React、Vue、Nextjs、Nuxt、Svelte、Astro、Laravel、Django、Gatsby、Hugo、Jekyll 和 BCMS 模板。可以肯定地說,它是面向 Web 開發人員的最大的免費 HTML 模板庫。您會發現來自世界各地頂級製造商的最佳商品。 **特徵** - 為 Web 開發人員提供的最大的免費範本庫 - 展示頂級創客的最佳作品 - 不斷更新 --- HTML5 升級 -------- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k82m0f3tk6f6tduc3vfk.jpg)](https://html5up.net/) [HTML5 UP](https://html5up.net/)提供免費的 HTML vanilla CSS 模板。可能是同一製造商建立的最大的精心設計的 HTML 模板集合。這意味著所有專案的程式碼品質和設計風格都是一致的。讓設計脫穎而出的是影像背景、漸層疊加、彩色部分和流暢佈局之間的組合。 **特徵** - 由設計驅動的開發人員提供的大量收藏 - 獨特的風格和大量的性格 - 無需註冊即可輕鬆下載 --- 風格吶喊 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ttal7mqy1owbufmdr54j.jpg)](https://styleshout.com/) [StyleShout](https://styleshout.com/)提供免費的 HTML 普通 CSS 範本。這些物品美麗、多樣、精美,無需電子郵件或註冊即可下載。所有模板的風格都遵循相同的線條,但絕不感覺重複或無聊。正確的字詞是一致且原創的。主題涵蓋 SaaS、行動應用程式、部落格、即將推出、投資組合和代理商。 **特徵** - 美麗優雅的模板 - 廣泛的用例 - 無需註冊即可輕鬆下載 --- 一頁的愛 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kgdw49kyxcr48nsi4p68.jpg)](https://onepagelove.com/) [One Page Love](https://onepagelove.com/)提供免費+付費的 HTML vanilla CSS 範本。除了他們自己的專案之外,OPL 還具有許多來自其他製造商的針對不同技術的模板 Bootstrap、Nextjs、Tailwind、Carrd、Framer。該演示網站看起來像一個藝術畫廊,使用起來很愉快。您在用例方面的選擇太多了。 **特徵** - 精心製作、專業打磨的模板 - 無需註冊即可輕鬆下載 --- 克魯普 --- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kxxvy0xwzzp4znvlv749.jpg)](https://cruip.com/free-templates/) [Cruip](https://cruip.com/free-templates/)提供免費 + 付費的 Tailwind、React、Vue、Nextjs 和 Laravel 範本。它們的獨特之處在於設計的獨創性和對細節的關注。他們提高了標準,我在瀏覽其他商品時經常發現自己在想「這看起來像克魯普風格」。這就是它們的獨特之處。 **特徵** - 獨特而有個性的設計 - 無需註冊即可輕鬆下載 --- 範本 -- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dc4kepier5gix9yznevt.jpg)](https://templatemo.com/) [Templatemo](https://templatemo.com/)提供免費的 Bootstrap 模板。商品數量之多令人驚嘆,而且品質也很棒。在列出的專案中很難不為您的專案找到堅實的基礎。除了看起來不錯之外,模板還以行銷為導向。 **特徵** - 豐富的海量模板集合 - 無需註冊即可輕鬆下載 --- 創意提姆 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2750dlh3rzf6y20v7clk.jpg)](https://www.creative-tim.com) [Creative Tim](https://www.creative-tim.com)提供免費+付費的 Bootstrap、Tailwind、Angular、React、Vue、Nextjs、Nuxt、Svelte、Laravel、Django 和 Astro 專案。絕對是模板和 UI 套件的強大工具。它受到開發人員的喜愛,因為免費專案與高級專案相當。設計精良、打磨光滑、文件齊全。 **特徵** - 設計精美且一致 - 具有進階功能的元件 - 文件自成一體 --- 泰梅斯貝格 ----- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zmhosp1knzec5aql5n4y.jpg)](https://themesberg.com/) [Themesberg](https://themesberg.com/)提供免費+付費的 Bootstrap、Tailwind、React、Laravel、Django 和 Astro 模板。這些資源包括儀表板、登陸頁面、設計系統和 UI 套件。設計品質和精緻程度處於行業領先水平。除了看起來令人驚嘆之外,這些專案的結構和文件都很好。 **特徵** - 很棒的儀表板模板和 UI 套件 - 用於複雜功能的高階元件 --- 模板甲板 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2obnfisjfwrfz42fmqt.jpg)](https://templatedeck.com/) [TemplateDeck](https://templatedeck.com/)提供免費的 Bootstrap 模板。這是一個很棒的資源,提供少量但高品質的物品。描述它們的正確詞彙是極簡主義、創造性和令人印象深刻。公司、個人和創業網站模板均按照最高設計和程式碼標準精心製作。 **特徵** - 示範網站很漂亮且易於瀏覽 - 模板皆經過專業設計與編碼 --- 嘲笑使用者介面 ------- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g1h7s8vfp33yquuw49k2.jpg)](https://floatui.com/) [Float UI](https://floatui.com/)提供免費的 Nextjs 範本。它實際上是一個 Tailwind 元件庫,還提供完整的網站模板。用例多種多樣,佈局看起來非常好。它們製作精良,甚至具有微妙的滾動動畫。 **特徵** - SaaS、新創公司、數位產品、課程模板 - 精心設計,具有令人印象深刻的黑暗主題 - 無需註冊即可輕鬆下載 --- 麥可·安德烈扎 ------- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8ezbwmkeodvaglh4dx7h.jpg)](https://www.michaelandreuzza.com/resources/) [Michael Andreuzza](https://www.michaelandreuzza.com/resources/)提供免費的 Astro 範本。他是一位極具創意的模板製作者,在他的[列剋星敦主題](https://lexingtonthemes.com/)網站上提供了一系列令人印象深刻的優質專案。他個人網站上列出的免費 Astro 模板因其簡約而時尚的設計而脫穎而出。 **特徵** - 獨特且令人難忘的設計 - 大量的部分和元素 --- 剛剛好的使用者介面 --------- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kyif9plag7l51csjxc3c.jpg)](https://justgoodui.com/) [Just Good UI](https://justgoodui.com/)提供免費 + 付費的 Astro 模板。這是一個有前途的模板建立者,提出了新的願景和設計。網站上提供的免費專案是為部落格和作品集製作的。很高興看到軟體包包含多個頁面和額外元素來盡可能地支援開發人員。 **特徵** - 美麗的簡約設計 - 多個頁面和部分 --- 創業登陸 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvrn4qbh1z1natjqg07r.jpg)](https://startuplanding.redq.io/) [Startup Landing](https://startuplanding.redq.io/)提供免費的 Nextjs 和 Gatsby 模板。它可能是您能找到的最好的完全免費登陸頁面集合。在撰寫本文時,有 18 個可用。設計現代且引人注目。它們混合了圖像背景和精美的彩色插圖。 **特徵** - 設計適用於創意和商業專案 - 廣泛的用例可供選擇 --- Web3模板 ------ [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tpz7x6tln49s3jm2ewrt.jpg)](https://web3templates.com/) [Web3Templates](https://web3templates.com/)提供免費 + 付費的 Tailwind、Astro 和 Nextjs 範本。建立者對細節投入了大量精力,為網頁開發人員建立真正有用的資源。設計美觀、富有創意,並且針對轉換進行了最佳化。為您的專案奠定堅實的現成基礎。 **特徵** - 基於插圖的精美創意設計 - 程式碼結構良好,易於定制 --- 蘭化 -- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w1on9qnjq84pi8bi2uvl.jpg)](https://www.landify.design) [Landify](https://www.landify.design)提供免費 + 付費的 Gatsby 模板。他們是漂亮的 UI 套件、元件和模板的後起之秀的創造者。他們的免費套裝是為成功的登陸頁面精心製作的。這些設計對於每個用例來說都是現代且一致的。 **特徵** - 令人驚嘆的美麗模板 - 為您的專案奠定良好的基礎 --- Nextjs 模板 --------- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7y3kucjtz6k6elb2qzq9.jpg)](https://nextjstemplates.com/) [Nextjs Templates](https://nextjstemplates.com/)提供免費+付費的 Nextjs 範本。這是一個模板庫,展示了他們自己的和其他製造商的專案。他們自己的免費 Nextjs 範本是綜合包,包含多個頁面、部分和元件,適用於各種用例。設計簡潔、現代且一致。 **特徵** - SaaS、新創公司、商業、軟體、部落格用例 - 令人印象深刻的設計提供多個頁面 - 無需註冊即可輕鬆下載 --- 佈局流程 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sudi6m8q7bnbukyyou8q.jpg)](https://layoutflow.com/) [LayoutFlow](https://layoutflow.com/)提供免費+付費的 HTML vanilla CSS 範本。它們經過專業設計,將為您節省大量創意精力。讓它們脫穎而出的是對負空間和大於平均字體大小的明智使用。代理商、投資組合和服務網站的絕佳資源。 **特徵** - 來自優質製造商的精美模板 - 尖銳的邊緣設計和大膽的排版 --- 模板基礎 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/48vqy3i8juxhzcp3y6s3.jpg)](https://www.templatefoundation.com/) [Template Foundation](https://www.templatefoundation.com/)提供免費的 HTML vanilla CSS 範本。物品在佈局、顏色和排版方面都非常現代。他們更關注令人回味的圖像而不是向量插圖。如果您選擇這些範本之一作為您的專案的基礎,您就不會出錯。 **特徵** - 現代時尚的設計引人注目 - 面向作品集和個人網站 - 無需註冊即可輕鬆下載 --- 模板化 --- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u6iv9mgzuiq4ppbyy79p.jpg)](https://templated.co/) [Templated](https://templated.co/)提供免費的 HTML vanilla CSS 和 Bootstrap 模板。設計精良、一致且永恆。我認為即使再過幾年它們也不會顯得過時。有很多可用的用例。從企業和新創公司到部落格和投資組合。 **特徵** - 學科範圍廣泛 - 美觀永恆的設計 - 無需註冊即可輕鬆下載 --- 免費贈品bug ------- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1r5lbexk8rad43ikp84o.jpg)](https://freebiesbug.com/) [Freebiesbug](https://freebiesbug.com/)提供免費的 HTML vanilla CSS Bootstrap、Tailwind 和 React 模板。高品質的設計注重細節。除了 Cruip 團隊自己的作品外,他們還展示了其他頂級製造商製作的現成包裝。 **特徵** - 精美的營銷優化佈局 - 自己的專案,還有範本庫 - 無需註冊即可輕鬆下載 --- 啟動引導程式 ------ [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ra8bxapn981gmumstqdx.jpg)](https://startbootstrap.com/) [Start Bootstrap](https://startbootstrap.com/)提供免費+付費的Bootstrap模板。它是新創公司、代理商、投資組合、個人和部落格的優質專案的既定來源。它甚至提供功能豐富的管理儀表板模板。它們的建置標準非常高,人們甚至可以向它們學習 Web 開發。 **特徵** - 令人難以置信的精心建置和多樣化的模板 - 設計遵循形式遵循功能原則 - 無需註冊即可輕鬆下載 --- 怪物一號 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/676v0czfivfinfvbobux.jpg)](https://monsterone.com/html-templates/free-website-templates/) [MonsterOne](https://monsterone.com/html-templates/free-website-templates/)提供免費+付費的 HTML vanilla CSS 和 Bootstrap 模板。它實際上是 Template Monster 的基於訂閱的模板庫。如果您註冊免費帳戶,您無需支付訂閱費用即可存取免費物品。它們的品質很高,但您需要手動檢查哪些是普通 CSS,哪些是 Bootstrap。 **特徵** - 具有多個頁面的現代模板 - 由於製造商眾多,品質參差不齊 --- 範本叢林 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1mvfietep6jonyv9bidn.jpg)](https://templatesjungle.com/) [TemplatesJungle](https://templatesjungle.com/)提供免費+付費的 HTML vanilla CSS 和 Bootstrap 模板。設計很棒,以行銷為導向,涵蓋多種用例。商業、代理商、服務、投資組合、電子商務。您會找到適合您能想像到的幾乎任何主題的模板。 **特徵** - 大量精心設計的模板可供選擇 - 設計令人印象深刻,讓您的專案脫穎而出 --- 第三波媒體 ----- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/le1r0xzgu167v6ggdq9q.jpg)](https://themes.3rdwavemedia.com/freebies/) [3rd Wave Media](https://themes.3rdwavemedia.com/freebies/)提供免費+付費的 Bootstrap 模板。它們是清單中對開發人員最友善的資源之一。它是由開發者為開發者製作的,體現在設計效率和程式碼結構上。模板結構良好且以結果為導向。您會找到適合各種主題的專案。 **特徵** - 有大量用例可供選擇 - 無需註冊即可輕鬆下載 --- 車頂板 --- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rz09nou89dnn3cutgzbf.jpg)](https://www.tooplate.com/) [Tooplate](https://www.tooplate.com/)提供免費的 Bootstrap 模板。它是一個巨大的精心設計的 Bootstrap 模板庫。設計現代且精美。每個模板都經過精心設計,可在所有裝置上呈現良好效果。廣告有時可能會造成乾擾,但好的一面是下載不受限制且不需要註冊。 **特徵** - 各種 Bootstrap 模板的大集合 - 高級產品專用的高級元件 - 無需註冊即可輕鬆下載 --- 像素火箭 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8ubqga6p7ox5innn3532.jpg)](https://pixelrocket.store/free-templates) [Pixel Rocket](https://pixelrocket.store/free-templates)提供免費的 Bootstrap 和 Tailwind 範本。這個小系列的現代配色看起來令人驚嘆。每個專案都包含許多基本和高級部分和元件。涵蓋的用例包括電子商務、儀表板、作品集和商業網站。 **特徵** - 高品質模板小集合 - 無需註冊即可輕鬆下載 --- HTML 法典 ------- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axduylz8rghwm6umiztd.jpg)](https://htmlcodex.com/) [HTML Codex](https://htmlcodex.com/)提供免費+付費的 Bootstrap 模板。這些專案看起來不錯,並且可以不受任何限制地下載。多個用例之間存在巨大差異。業務、課程、產品、代理商、服務、作品集、履歷等等。適合每個人的東西。 **特徵** - 針對各種用例的以結果為導向的設計 - 基於微妙滾動的動畫,帶來更好的使用者體驗 - 無需註冊即可輕鬆下載 --- W3佈局 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x85jgxjgly0zj8nn53gm.jpg)](https://w3layouts.com/) [W3Layouts](https://w3layouts.com/)提供免費+付費的 Bootstrap 模板。基本上他們網站上的所有模板都是免費提供的,但為了刪除歸屬連結,您必須支付少量費用。要免費取得它們,只需檢查試玩版下方的「免費下載」按鈕即可。有點難發現。 **特徵** - 大量的商業風格模板 - 涵蓋廣泛的用例 --- 引導帶 --- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d5f28ecptq06wr0ihvc7.jpg)](https://bootstrapious.com/) [Bootstrapious](https://bootstrapious.com/)提供免費+付費的 Bootstrap 模板。 Web 開發人員可以從各種現成的程式碼和設計套件中進行選擇。設計看起來不錯,有些免費物品包含高級元件。唯一的小缺點是您需要提供電子郵件地址才能下載專案。 **特徵** - 各種主題的大量免費物品 - 有些設計特別好 --- 溫樹 -- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ysunwzk28eg703cwxki8.jpg)](https://untree.co/) [Untree](https://untree.co/)提供免費的 Bootstrap 模板。它們幫助開發人員節省時間和金錢。物品設計精美,非常注重細節。模板具有許多特色,並帶有多個頁面和高級元件。下拉導覽、滑桿和微妙的動畫等功能將使您的工作更加輕鬆。 **特徵** - 設計有個性,不重複 - 無需註冊即可輕鬆下載 --- 順風工具箱 ----- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1gnbs90ot43hn96ekkk.jpg)](https://www.tailwindtoolbox.com/) [Tailwind Toolbox](https://www.tailwindtoolbox.com/)提供免費 + 付費的 Tailwind 範本。專案是他們自己的,並由其他頂級模板製作者展示。設計結構良好,涵蓋最受歡迎的用例,如新創公司、SaaS、行動應用程式、部落格和管理儀表板。 **特徵** - 漂亮的專案,結構良好,程式碼乾淨 - 專案涵蓋廣泛的用例 - 無需註冊即可輕鬆下載 --- 像素洞穴 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qg3tmq1f2xbbihol89c.jpg)](https://pixelcave.com/) [Pixelcave](https://pixelcave.com/)提供免費 + 付費的 Tailwind 模板。軟體包專用於建立網站和管理介面。免費的網站和儀表板模板具有現代的配色方案和以結果為導向的佈局。由於它們是由同一作者製作的,所以一致性很普遍。 **特徵** - 獨特的設計可幫助您的專案脫穎而出 - 乾淨的展示網站,沒有廣告 - 無需註冊即可輕鬆下載 --- 主題漁夫 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dl89v5po9st2ad83io98.jpg)](https://themefisher.com/) [Themefisher](https://themefisher.com/)提供免費 + 付費的 Nextjs 和 Astro 模板。它基本上是一個模板市場,為 Web 開發人員提供基於各種框架類別建構的套件。專案經過創意設計,並為商業、SaaS 和部落格網站提供多個頁面。 **特徵** - 精心設計的多頁面模板 - 易於瀏覽的示範網站 --- 尾火 -- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9dduazx5klc5wibm5fkt.jpg)](https://tailspark.co/) [Tailspark](https://tailspark.co/)提供免費 + 付費的 Tailwind 模板。即使它們的專案編號不足,它們也可以透過提供的元件來彌補。這些模板是該系列中最複雜、功能最豐富的資源之一。您將獲得許多採用華麗設計的元件、部分和頁面。 **特徵** - SaaS 網站和登陸頁面的最佳選擇 - 幾個巨大的、功能豐富的模板 --- 紅色像素主題 ------ [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mg2xmdb5jhouypat66ul.jpg)](https://redpixelthemes.com/) [紅色像素主題](https://redpixelthemes.com/)提供免費+付費的Tailwind模板。開發者專注於簡化 Web 開發工作。設計很棒,佈局包含大量有用的元件。基本上有 2 個模板,一個用於作品集,另一個用於部落格。為您的專案提供良好的起點。 **特徵** - 幾個好看的免費模板 - 部落格和作品集用例 --- 阿里·布丁 ----- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9zmmt2ppmz1qoje0r35b.jpg)](https://aribudin.gumroad.com/) [Ari Budin](https://aribudin.gumroad.com/)提供免費 + 付費的 Tailwind 模板。免費物品集合雖小但很有用。設計獨特,將幫助您的專案脫穎而出。主題涵蓋代理商、作品集、雜誌和設計系統。作品集模板具有豐富的特色,一定會帶給您啟發。 **特徵** - 精選免費優質物品 - 投資組合和代理模板脫穎而出 --- 特雷克特 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8dzak35uivlm48ps8nol.jpg)](https://treact.owaiskhan.me/) [Treact](https://treact.owaiskhan.me/)提供免費的 React 模板。它擁有令人印象深刻的網站和登陸頁面模板集合。這個圖書館雖小但內容豐富,為新創公司、SaaS 和服務提供設計精美的現成物品。配色方案使用了許多現代技術佈局特有的藍色調。 **特徵** - 帶有額外頁面的登陸頁面模板 - 易於自訂的元件塊 --- 程式碼設計 ----- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jgm9wwgaxrvgeiz11a2p.jpg)](https://designtocodes.com/) [DesignToCodes](https://designtocodes.com/)提供免費+付費的 Bootstrap 和 Tailwind 範本。涵蓋的用例包括新創公司、代理商和投資組合網站。您也可以找到結構良好的管理儀表板範本。設計經過精心設計和建置,並牢記行銷目標。 **特徵** - 很棒的網站和儀表板模板 - 針對行銷結果優化佈局 --- 使用者介面庫 ------ [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2i1gk5ui7b3o1f02yf3y.jpg)](https://ui-lib.com/) [UI Lib](https://ui-lib.com/)提供免費 + 付費的 Bootstrap、Tailwind、Angular、React 和 Vue 模板。它涵蓋了從即將推出的專案和登陸頁面到管理儀表板和 UI 工具包的整個範圍。專案設計精良,易於自訂,包裝中附有用的文件。 **特徵** - 模板涵蓋多種用例 - 有些帶有有用的高級元件 --- 管理市場 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s2yhvhu68eoj080wwivc.jpg)](https://adminmart.com/) [AdminMart](https://adminmart.com/)提供免費+付費的 Bootstrap、Tailwind、Angular、React、Vue、Nextjs 和 Nuxt 模板。使用案例涵蓋 SaaS 登陸頁面、教育、課程、代理商、服務網站和管理儀表板。物品經過專業設計,並配有許多部分和元件。 **特徵** - 多個框架的多個用例 - 物品可用於商業專案 --- 包裹像素 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7kwvjgp027tiqije3fiu.jpg)](https://www.wrappixel.com/) [WrapPixel](https://www.wrappixel.com/)提供免費 + 付費的 Bootstrap、Tailwind、Angular、React、Vue、Nextjs 和 Nuxt 模板。它們的與眾不同之處在於對儀表板和 UI 套件的一貫關注。在設計和結構方面有很多選擇。您可以選擇經典佈局或更富有創意的佈局。 **特徵** - 儀表板模板和 UI 套件的可靠集合 - 不同的設計和配色可供選擇 --- 桌子 -- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qjlhiy7n7tyoxp2gjjqv.jpg)](https://tabler.io/) [Tabler](https://tabler.io/)提供免費的 Bootstrap 模板。專注於儀表板,因為 Tabler 本身是專門用於建立 Web 應用程式的管理儀表板 UI 套件。如此大而精美的軟體包竟然可以免費取得,真是令人難以置信。設計很棒,文件很全面,程式碼結構很好。這個資源是寶石。 **特徵** - 專注於儀表板的引導模板 - 頂級的設計和程式碼品質 - 許多優質的先進元件 --- 敏銳的主題 ----- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a1hauyits355t5dw5ied.jpg)](https://keenthemes.com/) [KeenThemes](https://keenthemes.com/)提供免費 + 付費的 Bootstrap、React 和 Vue 模板。該建立者專門研究儀表板模板。每個包都配有多個採用現代設計的節省時間的元件。有不同的風格可供選擇,適應多種可能的場景。 **特徵** - 在網頁應用程式管理儀表板上佔有一席之地 - 乾淨的網站,沒有廣告或其他煩惱 --- BootstrapDash ------------- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yl1ymof4pdxzmangcy4v.jpg)](https://www.bootstrapdash.com/) [BootstrapDash](https://www.bootstrapdash.com/)提供免費+付費的 Bootstrap 模板。有用的集合集中在管理儀表板上。軟體包包含的頁面和元件非常豐富。設計始終保持現代感,並針對效果進行了最佳化。網站沒有廣告,瀏覽起來很愉快。 **特徵** - 很棒的儀表板模板 - 廣泛的設計風格 --- 編碼主題 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i3u1oseo5vj4g5mnnn6q.jpg)](https://codedthemes.com/) [CodedThemes](https://codedthemes.com/)提供免費+付費的 Bootstrap、Angular、React 和 Vue 模板。製造商專注於管理儀表板和完整的 UI 套件。他們的工藝水平透過產品品質而閃耀。包裝經過精心組裝,採用精美的設計,給人一種準備就緒的感覺。 **特徵** - 設計精美的物品具有先進的元件 - 網站瀏覽很愉快,沒有煩人的廣告 --- 丹參套件 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tpy8f28sb9gbkw9kz5ol.jpg)](https://www.salvia-kit.com) [Salvia Kit](https://www.salvia-kit.com)提供免費的 Angular、React、Vue、Nuxt 和 Svelte 範本。它是您可以免費下載的最好的管理儀表板集合之一。套件使用戶能夠為各種 Web 應用程式建立美觀且高效的介面。有不同的視覺風格和多個元件可用。 **特徵** - 高度關注管理儀表板模板 - 同一開發商打造的品質一致 --- 煮沸 -- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0dl17974czs5ru0eg2s2.jpg)](https://justboil.me/) [JustBoil](https://justboil.me/)提供免費 + 付費的 Tailwind、React、Vue、Nextjs、Nuxt 和 Laravel 模板。在這裡,您將找到一些用於建立出色的 Web 應用程式介面的最佳儀表板範本。佈局是為了可用性而精心設計的,設計是以效率為導向的。 **特徵** - 不斷更新的專業模板 - 以結果為導向的高效佈局 --- 主題選擇 ---- [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0tiizky4chnasi713lck.jpg)](https://themeselection.com/) [ThemeSelection](https://themeselection.com/)提供免費 + 付費的 Vue、Nextjs、Nuxt 和 Laravel 模板。製造商專注於管理儀表板和 UI 套件。免費物品設計精良,與優質物品不相上下。很棒的現成包可幫助開發人員更快地啟動專案。 **特徵** - 結構良好的美麗物品 - 模組化且易於定製程式碼 --- 愛康尼克設計 ------ [![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vngpaoo80t2gcaysk7uh.jpg)](https://iqonic.design/) [Iqonic Design](https://iqonic.design/)提供免費 + 付費的 React 和 Vue 模板。儘管製造商在 HTML 專案方面建立了 Flutter 和 WordPress 主題,但他們專注於管理儀表板。有一些免費的軟體包可以幫助網頁開發人員建立現代介面。 **特徵** - 精心設計的儀表板模板 --- 為了整理這篇綜述,我瀏覽了所有可以想像的可以找到模板的線上資源。我希望它能讓你的工作更輕鬆。 --- 原文出處:https://dev.to/devluc/50-best-websites-for-free-html-templates-1i2l

📕 新創企業 vs 大公司:您需要知道的最佳要點 📊

我仍然記得我第一天與數百名其他員工一起參加公司會議。經過幾個月成功的自由工作後,我終於能夠加入一家大公司,焦慮和興奮的混合是真實的。現在的挑戰不同了,風險更高了,環境也勢不可擋。 但這並不是唯一讓我感到壓力的情況。我還清楚記得有一天,在一家小型新創公司工作時,我向整個公司展示了我們將要使用的新前端架構的一部分。我們規模很小,會議上的每個人都在專心聽我說的話。 從在新創公司中發揮重要作用,到成為公司中更大群體中的一小部分,每一次經驗都有自己的一套學習經驗。 當然,情況並非總是如此。我們都知道存在沒有做好準備的公司,這就是建立本文的原因。在這裡,我們將探討**我在新創公司和大公司工作時獲得的一些**關鍵經驗和收穫,這樣你就可以從你目前工作的公司中學習到這些知識,甚至可以自己決定你下一步的職業步驟,看看哪一個更適合您。 流程和文化 ----- ![流程](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0exqcm882w9gvs11u3go.png) 讓我們從流程開始,因為它們是第一個非常明顯的差異。在新創公司工作時,大多數流程仍在實施中,您工作的很大一部分實際上可能涉及**嘗試和試驗**這些任務的不同流程。 文化也可能處於創造階段,因此,定義公司及其員工的共同價值觀,或「在這裡做事的方式」。可以改變很多而且很快! 當然,這使得體驗方式更加混亂,但也更加靈活。兼顧多重角色和責任並不罕見,這可能是在不同方面學習和成長的絕佳機會,例如創造新的良好文化模式。 另一方面,在更企業化的環境中,流程更加結構化和明確,這可以提供穩定性和明確的期望,但也會帶來官僚主義的缺點,需要很長時間才能真正通過多個管道和渠道。 這裡的關鍵要點是**平衡**。流程的稀缺會讓整個生態系統變得混亂,這讓人不舒服,但流程太多,你就什麼都做不了。平衡缺勤和超額的權重將為每個人創造一個更好的環境。 敏捷性和適應性 ------- ![敏捷](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yasslnhkhhhx9oycybps.png) 在新創公司工作通常需要身兼數職,並隨時適應變化。在快節奏的新創環境中,敏捷性和適應性是關鍵。你必須準備好轉變,這可以讓你成長很多,不要太執著於自己的想法。您還必須準備好調整您的策略並接受新技術和方法(如果它們看起來合適)。 這可能是一次令人興奮的經歷,可以促進創造力和創新,但從長遠來看,也可能導致分散且充滿壓力的環境(公司的各個方面都採用不同的技術,讓所有混亂的工作變得**困難**)。 相較之下,大公司擁有豐富的時間和資源,可以進行更徹底的規劃和執行。此外,大公司傾向於依賴他們已經信任的東西,並且通常不太願意接受新事物。 雖然這不如動態的創業環境那麼令人興奮,但它提供了不同類型的學習體驗。在這裡,您可以加深對策略規劃、專案管理和業務營運其他方面的理解。 這裡的關鍵要點是學會**在需要時**變得敏捷、多才多藝和適應能力強。如果您不想相信我的話,我建議您閱讀[這篇關於無聊技術的文章](https://mcfunley.com/choose-boring-technology)。這是令人驚訝的洞察力和偉大的閱讀! --- 哦!在我忘記之前,這篇文章之所以成為可能,是因為[Wasp](https://wasp-lang.dev/) ,他們正在建立一個非常酷的全端 React + NodeJS 框架,如果您能透過[在 GitHub 上為我們的儲存庫加註星標](https://www.github.com/wasp-lang/wasp)來幫助我們,那將意義重大。 透過這樣做,您將幫助我們繼續使網頁開發更快、更輕鬆,並每週為您帶來這樣的內容! 🚀 ![](https://media2.giphy.com/media/v1.Y2lkPTc5MGI3NjExbWFnZzJ5dGV2cXduOGluaTgyaTdvbnJ4c3ZvZGxuY3V3czQxZmZzNSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ZfK4cXKJTTay1Ava29/giphy.gif) https://www.github.com/wasp-lang/wasp ⭐️ 在 GitHub 上給我們一個 star 🙏 --- 社交機會 ---- ![聯網](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/flkmybnqw8ocfj0jd1bn.png) 新創公司和大公司之間的另一個主要區別是它們提供的網路機會。大公司通常擁有廣泛的員工、客戶、供應商和合作夥伴網路。在這樣的環境中工作可以提供大量建立人際網絡和建立有價值的專業關係的機會。這些聯繫對於您的職業發展非常有益。 另一方面,新創公司由於規模較小,提供了更親密的社交機會。您可能會與團隊的每個成員密切合作,讓您有機會建立更牢固的關係並直接向同事和上級學習。 這裡的關鍵要點是擁抱每一個聯繫,並**嘗試在任何地方創造一個良好的工作環境**。這將使您更輕鬆地度過困難時期,並且您一定會在一生中結交一些友誼😃 影響 -- ![影響](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1hn0o5x8olm7sw7i21c.png) 現在,我們來談談影響。在較大的公司中,您的程式碼庫可能會被數千(更可能是數百萬人)人存取。這意味著做一個小的改變可以改變很多人對應用程式的看法,並且看到你的工作被這麼多人使用是非常令人滿意的。不幸的是,第一次必須為數百萬用戶存取的程式碼庫部署一個小的程式碼變更絕對是令人傷腦筋的——儘管這對於增加您的經驗和彈性是必要的。 在新創公司中,您可能會看到有數百人(相信有數千人)造訪的程式碼庫。這意味著,你的工作將被更少的人看到,但是,由於你可以創造更多,你可能會創造出更多的東西,而不僅僅是一個小小的改變。頁面、使用者旅程和所有內容都可以在您的範圍內單獨或與您的團隊一起進行。但它並非沒有缺點。由於流程更加稀缺,因此回滾和恢復變更有時可能是一個困難的過程(甚至更糟的是,沒有記錄)。 這裡的關鍵要點是了解您的角色以及您在不同環境中帶來的價值的重要性。無論您是在一家新創公司,您的工作直接推動公司的成功,還是在一家大公司,您的行為有助於更廣泛的目標,**您的工作都很重要,您應該為此感到自豪。** 舉個例子,我為在一個巨大的電子商務網站上製作一個簡單的產品過濾器(他們一直使用到今天)感到非常自豪,並且我也為積極實施/參與至少 2 個專案的實施感到自豪/3是我曾經合作過的新創公司的設計師所提出的新設計系統的每個元件的/3。**好的工作不會讓別人貶低。** 結論 -- ![所有的主題都變成了插圖](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ev801q6beoct1a0ijfa.png) 如果這段穿越新創公司和企業領域的旅程為您帶來了啟發,為什麼不支持[Wasp](https://wasp-lang.dev/)呢?我們正在精心打造工具和內容,為像您這樣的開發人員提供協助,無論您是獨自編碼還是克服企業挑戰。 如果您想看到更多這樣的內容,您可以[在 GitHub 上給我們一個星星,非常輕鬆地幫助我們!](https://www.github.com/wasp-lang/wasp) ![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgbmn45pia04bxt6zf83.gif) https://www.github.com/wasp-lang/wasp ⭐️ GitHub 上的 Star Wasp 🙏 新創企業和大公司都提供寶貴的經驗。在新創公司,你可以做不同的任務,嘗試新事物,並直接影響公司的未來。這是一種親身實踐的學習經驗。 在大公司中,您可以存取許多資源和結構化環境。您可以與多元化專家團隊合作,這有助於您學習和成長。既定的流程、穩定性和可預測性可以幫助提高您的技能並塑造您的職業生涯。 但是,這並不是要選擇其中之一。這是關於學習在兩種環境中都表現出色。汲取兩者中最好的部分,並隨時隨地使用它們。保持敏捷、適應力強、樂於接受新體驗。這兩種經歷對你的職業生涯都很重要。 總之,每種環境都有其獨特的挑戰與機會。擁抱差異,從經驗中學習,並利用它們為你帶來優勢。畢竟,正是這些多樣化的經驗可以幫助您實現個人和職業成長。因此,無論您是在新創公司還是大公司,請始終記住 - 您的工作很重要,並有助於實現更大的目標。 您對新創公司和大公司之間的比較有何看法?我們很想聽聽您的經驗和收穫。請在下面的評論中分享您的想法! --- 原文出處:https://dev.to/wasp/start-ups-vs-big-companies-the-best-takeaways-for-you-to-know-28n5

掌握 SQL:結構化查詢語言綜合指南

介紹 -- 在上一篇部落格文章中,我們共同探討了以下內容的綜合指南: https://dev.to/louaiboumediene/mastering-relational-database-design-a-compressive-guide-3jh8 在本文中,我們將在較高層次上發現實際用於實現資料庫模式設計的語言的語法和核心功能... SQL。 那麼...讓我們深入探討吧! ![讓我們深入了解圖像](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cvmr1vh4frdyjfmzf5sh.gif) --- 什麼是 SQL ------- SQL,即結構化查詢語言,是用於與所有**RDMS**對話的外觀語言,但是大多數時候,作為後端工程師(我們不是資料庫工程師),我們不直接使用 SQL,而是使用物件關係映射器**ORM**它在原始SQL 之上提供了一個更好、更可靠的接口,以便用我們首選的程式語言與資料庫進行通信,但是我們仍然需要SQL 的基本知識,以便快速、簡單地操作以及與資料庫互動。 ![如果我告訴你表情包怎麼辦](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fvpr0nujx4fed7e4xvh3.png) --- 基本 SQL 查詢 --------- 基本 SQL 查詢涉及使用 SELECT、DISTINCT、WHERE、LIMIT 和 OFFSET 等命令從資料庫表中選擇特定資料。 ``` -- Selecting all columns from a table SELECT * FROM employees; -- Selecting specific columns SELECT first_name, last_name FROM employees; -- Using DISTINCT to get unique values SELECT DISTINCT department_id FROM employees; -- Using WHERE to filter results SELECT * FROM employees WHERE department_id = 10; -- Using LIMIT to limit the number of results SELECT * FROM employees LIMIT 5; -- Using OFFSET to skip certain rows SELECT * FROM employees OFFSET 5; ``` --- 過濾資料 ---- 在 SQL 中篩選資料可讓您根據某些條件從表格中擷取特定記錄,例如使用 >、<、= 等比較運算子以及 AND、OR 和 NOT 等邏輯運算子。 ``` -- Using comparison operators SELECT * FROM employees WHERE salary > 50000; -- Using logical operators SELECT * FROM employees WHERE department_id = 10 AND salary > 50000; -- Using IN and NOT IN SELECT * FROM employees WHERE department_id IN (10, 20); -- Using BETWEEN SELECT * FROM employees WHERE salary BETWEEN 40000 AND 60000; -- Using LIKE for pattern matching SELECT * FROM employees WHERE last_name LIKE 'S%'; ``` --- 資料排序 ---- SQL 中的資料排序是使用 ORDER BY 子句根據指定列以升序或降序排列檢索到的記錄。 ``` -- Sorting data in ascending order SELECT * FROM employees ORDER BY salary; -- Sorting data in descending order SELECT * FROM employees ORDER BY salary DESC; -- Sorting by multiple columns SELECT * FROM employees ORDER BY department_id, salary DESC; ``` --- 聚合函數 ---- SQL 中的聚合函數對一組值執行計算並傳回單一值。常見的聚合函數包括 COUNT、SUM、AVG、MIN 和 MAX。 ``` -- Counting the number of rows SELECT COUNT(*) FROM employees; -- Calculating total salary SELECT SUM(salary) FROM employees; -- Finding average salary SELECT AVG(salary) FROM employees; -- Finding minimum salary SELECT MIN(salary) FROM employees; -- Finding maximum salary SELECT MAX(salary) FROM employees; ``` --- 資料分組 ---- 在 SQL 中將資料分組可讓您使用 GROUP BY 子句(通常與聚合函數結合使用)對指定列中具有相同值的行進行分組。 ``` -- Grouping data by department SELECT department_id, COUNT(*) FROM employees GROUP BY department_id; -- Using HAVING to filter grouped data SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 5; ``` --- 加入 -- SQL 中的聯結會根據相關資料列組合來自多個資料表的資料,以擷取跨這些資料表的資料。 ``` -- Inner Join SELECT * FROM employees INNER JOIN departments ON employees.department_id = departments.department_id; -- Left Join SELECT * FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id; -- Right Join SELECT * FROM employees RIGHT JOIN departments ON employees.department_id = departments.department_id; -- Full Outer Join SELECT * FROM employees FULL OUTER JOIN departments ON employees.department_id = departments.department_id; ``` --- 子查詢 --- SQL 中的子查詢是另一個查詢中的巢狀查詢,用於檢索依賴另一個查詢結果的資料。 ``` -- Subquery example SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1700); -- Correlated subquery example SELECT * FROM employees e WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id); ``` --- 意見 -- SQL 中的檢視是根據查詢結果產生的虛擬表,提供了一種簡化複雜查詢並限制對某些資料的存取的方法。 ``` -- Creating a view CREATE VIEW high_paid_employees AS SELECT * FROM employees WHERE salary > 80000; -- Updating a view CREATE OR REPLACE VIEW high_paid_employees AS SELECT * FROM employees WHERE salary > 90000; -- Dropping a view DROP VIEW IF EXISTS high_paid_employees; ``` --- 索引 -- SQL 中的索引透過在列上建立索引來提高查詢效能,從而實現更快的資料檢索。 ``` -- Creating an index CREATE INDEX idx_lastname ON employees(last_name); -- Dropping an index DROP INDEX idx_lastname; ``` --- 交易 -- SQL 中的交易透過將 SQL 語句分組為原子單元來確保資料完整性,從而確保所有語句都成功執行或全部都不執行。 ``` -- Beginning a transaction BEGIN TRANSACTION; -- Committing a transaction COMMIT; -- Rolling back a transaction ROLLBACK; ``` --- 儲存過程 ---- SQL中的預存程序是儲存在資料庫中的預編譯的SQL程式碼,可以透過單一命令執行,通常用於封裝頻繁執行的任務 ``` -- Creating a stored procedure CREATE PROCEDURE get_employee (IN employee_id INT) BEGIN SELECT * FROM employees WHERE employee_id = employee_id; END; -- Executing a stored procedure CALL get_employee(100); -- Modifying a stored procedure ALTER PROCEDURE get_employee (IN employee_id INT) BEGIN SELECT employee_id, first_name, last_name FROM employees WHERE employee_id = employee_id; END; -- Dropping a stored procedure DROP PROCEDURE IF EXISTS get_employee; ``` --- 備份與復原 ----- SQL 中的備份和復原涉及建立資料庫備份以防止資料遺失,並在資料庫發生故障或損壞時還原它們。 ``` -- Creating a full backup BACKUP DATABASE dbname TO disk = 'path_to_backup'; -- Creating a differential backup BACKUP DATABASE dbname TO disk = 'path_to_backup' WITH DIFFERENTIAL; -- Creating a transaction log backup BACKUP LOG dbname TO disk = 'path_to_backup'; -- Restoring from a backup RESTORE DATABASE dbname FROM disk = 'path_to_backup'; ``` --- SQL 方言和特定於供應商的擴展 ---------------- 雖然 SQL 是一種標準化語言,但不同的資料庫供應商已經實作了自己的擴充和方言,導致不同 RDBMS 之間 SQL 的編寫和執行方式略有不同。這些變更可能會影響使用特定資料庫系統的開發人員可用的語法、函數和特性。 例如,以下是特定於供應商的 SQL 方言和擴展的一些範例: **甲骨文SQL** : - Oracle SQL 包括專有擴展,例如分層查詢、分析函數和用於資料建模的 MODEL 子句。 - 範例: `SELECT CUBE(product, region) FROM sales;` (CUBE 是 Oracle 特定的用於產生小計的擴充) **SQL Server(微軟)** : - SQL Server 包含 T-SQL (Transact-SQL),它透過串流控制語言建構、錯誤處理和流程程式設計建構等功能擴展了標準 SQL。 - 範例: `SELECT ISNULL(column_name, 'default_value') FROM table_name;` (ISNULL 是一個 T-SQL 函數) **MySQL** : - MySQL 包括空間資料類型和函數、視窗函數以及用於正規表示式匹配的 REGEX 運算子等擴充。 - 範例: `SELECT column_name REGEXP '^pattern' FROM table_name;` (REGEXP 是 MySQL 特定的運算子) **PostgreSQL** : - PostgreSQL 包括陣列、JSON 支援、全文搜尋和範圍資料類型等擴充。 - 範例: `SELECT column_name || 'suffix' FROM table_name;` (|| 是 PostgreSQL 特定的字串連接運算子) ![RDBMS 之間的差異](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z7m0q9jdx3opw29zja6j.png) 所以最合乎邏輯的方法是: 1. **基礎知識**:了解關聯式資料庫設計的基礎:實體、鍵、關係…。 。 2. **SQL** :學習 SQL 作為獨立語言的基礎知識。 3. **選擇 RDBM** :選擇最適合您的 RDBMS,然後按照其所有特殊語法和結構來使用它。 結論 -- SQL 本身就是一個廣闊的領域,包含許多我們沒有涉及的概念。事務、備份和文件管理只是更廣泛範圍的幾個範例。然而,對於像我們這樣的後端工程師來說,我們所介紹的基礎知識足以作為 SQL 的基礎概述。 --- 原文出處:https://dev.to/louaiboumediene/mastering-sql-comprehensive-guide-to-structured-query-language-4gh

如何使用 Visual Studio Code 自訂新的 Windows 終端

幾天前,微軟發布了新[Windows Terminal](https://www.microsoft.com/en-us/p/windows-terminal-preview/9n0dx20hk701)的早期版本。 Windows 終端是一種新型、現代化、快速、高效、強大且高效的終端應用程式,適用於命令列工具和 shell(例如命令提示字元、PowerShell 和 WSL)的使用者。 其主要功能包括多個選項卡、Unicode 和 UTF-8 字元支援、GPU 加速文字渲染引擎以及自訂主題、樣式和配置。 顯然,這是一個託管在 GitHub 上的開源專案: <https://github.com/microsoft/terminal> 請隨意參與。 目前它有點不穩定,將來會推出更多功能,但我已經使用它幾天了,我喜歡這個想法。 到目前為止,我一直在使用[Cmder](https://cmder.net/) ,但 Windows Terminal 有一些新的有前景的功能。 如何安裝 ---- 您可以直接從 Windows 應用程式商店安裝 Windows 終端,或者如果您想了解它的工作原理,您可以下載原始程式碼、建置它並啟動終端。 ![](https://thepracticaldev.s3.amazonaws.com/i/rb6x6yo858b6ufdt42vw.PNG) 商店版本的連結: <https://www.microsoft.com/en-us/p/windows-terminal-preview/9n0dx20hk701> GitHub 專案的連結: <https://github.com/microsoft/terminal> 原始碼和專案都有很好的文件記錄。 第一次發射 ----- 如果您從“開始”功能表啟動該應用程式,它將如下面的螢幕截圖所示。 ![](https://thepracticaldev.s3.amazonaws.com/i/iut0oi8j4iufgdyi6du6.PNG) 預設終端是 PowerShell。 如果按一下「+」符號,應用程式將在新分頁中啟動另一個終端。 如果您按一下向下箭頭符號 ⬇,您可以從清單中選擇新終端。 清單下方還有另一個有趣的按鈕,就是設定按鈕。 設定 -- 如果按一下向下箭頭,然後按一下「設定」按鈕,此時,設定檔案(它是 JSON 檔案)將在 Visual Studio 的新實例中開啟。 如果您想要直接開啟文件,可以開啟 Visual Studio Code 並直接從下列目錄開啟檔案: **%USERPROFILE%\\AppData\\Local\\Packages\\Microsoft.WindowsTerminal\_8wekyb3d8bbwe\\LocalState** 在此文件中,您可以找到 Windows 終端機的所有設定。 目前,您只能透過該文件與設定進行交互,但將來,將向應用程式加入 UI。 新增的個人資料 ------- 如果要新增新的設定文件,請前往 JSON 設定檔的「設定檔」部分,然後新增新的設定檔部分,如下所示: ``` { ``` ``` "acrylicOpacity" : 0.85, ``` ``` "background" : "#012456", ``` ``` "backgroundImage" : "C:/users/barto/AppData/Local/Packages/Microsoft.WindowsTerminal_8wekyb3d8bbwe/RoamingState/unicorn.gif", ``` ``` "backgroundImageOpacity" : 0.7, ``` ``` "backgroundImageStretchMode" : "uniformToFill", ``` ``` "closeOnExit" : false, ``` ``` "colorScheme" : "Solarized Dark", ``` ``` "commandline" : "powershell.exe", ``` ``` "cursorColor" : "#00FF00", ``` ``` "cursorHeight" : 25, ``` ``` "cursorShape" : "vintage", ``` ``` "fontFace" : "Fira Code", ``` ``` "fontSize" : 12, ``` ``` "guid" : "{79285a8e-036c-446f-8a9c-78994e34bf78}", ``` ``` "historySize" : 9001, ``` ``` "icon" : "ms-appdata:///roaming/pwsh-32.png", ``` ``` "name" : "PowerShell with Unicorn", ``` ``` "padding" : "0, 0, 0, 0", ``` ``` "snapOnInput" : true, ``` ``` "startingDirectory" : "%USERPROFILE%", ``` ``` "useAcrylic" : false ``` ``` } ``` 如果您想從此處複製此部分,請注意指南。 請記住每次貼上文件時都要更改它。 例如,它用於設定預設終端,並且它在檔案中必須是唯一的。 正如您在我的個人資料部分中看到的,您可以加入圖像作為背景、更改字體大小、遊標形狀等等。 例如,我使用 Fira Code 作為字體,因為我也喜歡 Visual Studio Code 中的它。 它在文本中加入了一些很棒的體驗。 您可以從這裡下載: <https://github.com/tonsky/FiraCode> 如果您想在會議上給您的朋友或與會者留下深刻印象,您可以加入 gif 作為背景。 您可以在下圖中看到它的實際效果。 ![](https://thepracticaldev.s3.amazonaws.com/i/uaackzt4yxp854i0l5rl.gif) 配色方案 ---- 在profiles.json 檔案的末尾,您可以找到一個名為「schemes」的部分。 從這裡您可以新增或更改終端的預設顏色。 如果您想在新設定檔中使用它,則必須在屬性「name」和設定檔部分的「colorScheme」屬性中插入相同的方案名稱。 分享您的個人資料 -------- 我在我的個人資料上建立了一個新要點來共享我的個人資料設置,您可以在這裡找到它: <https://gist.github.com/kasuken/076d68b92e2a67dfda591587c77a40c0#file-profiles-json> 。 在評論中分享您的個人資料! 我們一起可以創造一些很棒的東西! ![](https://thepracticaldev.s3.amazonaws.com/i/2k9fw1y21k3sv8q1swr3.gif) ### 我的動圖 有些使用者要求提供 gif 動圖。 我在下面分享它們! ![](https://thepracticaldev.s3.amazonaws.com/i/s8ysw6hfoj1a61ovz0us.gif) ![](https://thepracticaldev.s3.amazonaws.com/i/3u7x3b3otmyh6kytychp.gif) ![](https://thepracticaldev.s3.amazonaws.com/i/asvdrzeanv9a20jekihr.gif) --- 原文出處:https://dev.to/kasuken/how-to-customize-the-new-windows-terminal-with-visual-studio-code-56b1

2024 年程式設計師和開發人員應該學習的 5 項技能

*揭露:這篇文章包含附屬連結;如果您透過本文中提供的不同連結購買產品或服務,我可能會獲得補償。* [![面試時必須了解的 10 個系統設計概念](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kfxdldzd09fwws7nve36.png)](https://bit.ly/3cNF0vw) image\_credit -[指數](https://bit.ly/3cNF0vw) 開發者們大家好,如果您一直從事程式設計和軟體開發,那麼您就會知道,在我們的領域中只有一個常數,那就是「變化」。 我們總是需要學習新的工具、技術、框架和技能來完成我們的工作,而且永無止境。如果你不學習,你就會和其他人一起落後,這就是為什麼我總是尋找新技能來學習。 在本文中,我將分享程式設計師和開發人員在 2024 年可以學習的 5 項技能,以更好地完成工作並提高效率。 過去,我討論過[API 網關與負載平衡器、](https://dev.to/somadevtoo/difference-between-api-gateway-and-load-balancer-in-system-design-54dd)[水平與垂直擴展](https://dev.to/somadevtoo/horizontal-scaling-vs-vertical-scaling-in-system-design-3n09)、 [正向代理與反向代理](https://dev.to/somadevtoo/difference-between-forward-proxy-and-reverse-proxy-in-system-design-54g5)之間的區別,你們非常喜歡,在本文中我將分享最重要的五種開發人員技能2024 年成為舞台中心。 ***PS 繼續閱讀直到最後。我有一份獎金給你。*** 這些技能包括新舊但必不可少的技能,例如快速工程、編碼、雲端運算領域、系統設計和Python,這些技能是任何軟體開發人員都需要的基本技能。 無論您是想要提升自己的經驗豐富的開發人員,還是想要提升自己形象的中級開發人員,這些技能都一定會對您有所幫助。 2024 年軟體工程師應該學習的 5 項技能 ---------------------- 在不斷發展的技術領域,對於尋求在 2024 年及以後蓬勃發展的開發人員來說,保持領先地位至關重要。 當我們探索軟體開發的動態領域時,某些技能已經成為現代開發人員不可或缺的技能,這就是您將在本文中學到的內容。 讓我們深入探討預計在 2024 年產生重大影響的前五項開發人員技能。 ### 1. 系統設計 到 2024 年,開發人員需要超越傳統的程式設計實踐,擁抱現代系統設計原則。這涉及了解分散式系統、微服務架構以及設計可擴展和彈性的應用程式。 能夠應對系統設計複雜性的開發人員能夠更好地建立強大的解決方案,以滿足快速發展的技術環境的需求。 如果您想深入學習系統設計,那麼您也可以查看[**ByteByteGo**](https://bit.ly/3P3eqMN) 、 [**Design Guru**](https://bit.ly/3pMiO8g) 、 [**Exponent**](https://bit.ly/3cNF0vw) 、 [**Educative**](https://bit.ly/3Mnh6UR)和[**Udemy**](https://bit.ly/3vFNPid)等網站,它們有許多很棒的系統設計課程 [![如何回答系統設計問題](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xd9nfio7kl57gyevndql.jpg)](https://bit.ly/3pMiO8g) 如果您需要更多資源,那麼這裡有[系統設計書籍](https://www.linkedin.com/pulse/8-best-system-design-books-programmers-developers-soma-sharma/)、 [課程](https://www.linkedin.com/pulse/10-best-system-design-courses-beginners-experienced-2023-soma-sharma/)和[網站](https://javarevisited.blogspot.com/2022/08/top-7-websites-to-learn-system-design.html)的列表,供您在 2024 年學習和掌握軟體設計和架構。 --- 2. 快速工程 ------- 在這個人工智慧工具的時代,軟體開發並非一成不變,越來越多的人工智慧工具來幫助您進行編碼、除錯和測試,但您需要及時的工程設計才能有效地利用這些工具。 換句話說,快速工程已成為旨在快速交付高品質產品的開發人員的關鍵技能。 這不僅涉及編寫高效、簡潔的程式碼,還涉及採用敏捷方法和工具來簡化整個開發過程。 精通即時工程的開發人員可以快速回應不斷變化的需求,確保他們的軟體在面對不斷變化的市場需求時保持適應性和彈性。 如果您需要資源來學習 ChatGPT 和提示工程,那麼我建議您查看 Coursera 上的[針對開發人員的 ChatGPT 提示工程](https://datacamp.pxf.io/c/1193463/1012793/13294?u=https%3A%2F%2Fwww.datacamp.com%2Fcourses%2Fchatgpt-prompt-engineering-for-developers)課程。 [![最佳即時工程課程](https://miro.medium.com/v2/resize:fit:609/1*gpcsXMiCmBgVIr_I7RFYGg.jpeg)](https://medium.com/javarevisited/top-5-chatgpt-online-courses-for-2023-e6fc706cc483) 如果您需要更多選項,那麼您也可以查看這些[ChatGPT 和 Prompt Engineering 課程](https://javinpaul.medium.com/top-10-udemy-courses-to-learn-artificial-intelligence-in-2023-85a10ef473ca)以了解更多資訊。 --- 3. 編碼 ----- 雖然編碼似乎是一項顯而易見的技能,但其重要性怎麼強調也不為過。掌握編碼不僅限於編寫功能性程式;它涉及編寫乾淨、可維護和可擴展的程式碼。 開發人員應該專注於提高程式語言的熟練程度、理解演算法和實施最佳實踐。 堅實的編碼基礎是任何開發工作成功的基石。而且,如果您需要資源,可以查看[《2024 年完整 JavaScript 課程:建立真實專案》](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fthe-complete-javascript-course%2F)作為開始。 [![學習 JavaScript 編碼的最佳課程](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aesrzc6ogw58ktw6nxax.png)](https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fthe-complete-javascript-course%2F) 如果您需要更多選擇,您也可以查看這些[**程式設計和程式設計課程**](https://medium.com/javarevisited/7-best-coding-course-to-learn-programming-with-zero-experience-in-2020-52f7d0d9cb80) --- 4.雲端運算 ------ 雲端運算已經從一個流行詞變成了開發人員的基本技能。隨著對雲端服務的依賴日益增加,開發人員必須精通在雲端環境中部署、管理和最佳化應用程式。 AWS、Azure 和 Google Cloud 等平台是現代開發不可或缺的一部分,精通雲端運算的開發人員可以建立可擴展且經濟高效的解決方案。 而且,如果您需要資源,可以查看這些文章,您可以在其中找到強烈建議的[**資源來學習雲端運算**](https://coursera.pxf.io/c/3294490/1164545/14726?u=https%3A%2F%2Fwww.coursera.org%2Flearn%2Faws-fundamentals) [![學習AWS的最佳課程](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d4mboj5cv4fufo8om7v0.jpeg)](https://coursera.pxf.io/c/3294490/1164545/14726?u=https%3A%2F%2Fwww.coursera.org%2Flearn%2Faws-fundamentals) 而且,如果您需要更多選擇,還可以參考這篇文章,您可以在 Coursera 上找到強烈推薦的[AWS 基礎專業課程](https://medium.com/javarevisited/top-10-courses-to-learn-amazon-web-services-aws-cloud-in-2020-best-and-free-317f10d7c21d)。該程式是AWS自己建立的。 --- ### 5.Python [Python](https://www.python.org/)繼續維護其作為多功能且強大的程式語言的主導地位。從 Web 開發到資料科學、機器學習和人工智慧,Python 始終處於創新的前沿。 2024 年的開發人員應該投資掌握 Python,因為它不僅有助於快速開發,而且還提供了通往塑造產業未來的眾多尖端技術的入口網站。 如果你想在 2024 年學習並掌握 Python,你可以從 Python 課程[100 Days of Code: The Complete Python Pro Bootcamp for 2024 開始](https://click.linksynergy.com/deeplink?id=JVFxdTr9V80&mid=39197&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2F100-days-of-code%2F),我現在也用它來學習 Python。 [![學習Python的最佳課程](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p5wlgc9kzsa03o0agoz3.png)](https://click.linksynergy.com/deeplink?id=JVFxdTr9V80&mid=39197&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2F100-days-of-code%2F) 如果您需要更多資源,您也可以查看這些[Python 書籍](https://javarevisited.blogspot.com/2019/07/top-5-books-to-learn-python-in-2019.html)、 [課程](https://betterprogramming.pub/top-5-courses-to-learn-python-in-2018-best-of-lot-26644a99e7ec)和[網站](https://medium.com/javarevisited/10-free-python-tutorials-and-courses-from-google-microsoft-and-coursera-for-beginners-96b9ad20b4e6)來深入學習 Python。 這就是**您在 2024 年可以學習的 5 項最重要的開發人員技能**。總之,2024 年頂尖開發人員技能反映了業界對敏捷性、適應性和卓越技術的需求。 無論您是經驗豐富的開發人員還是剛開始編碼之旅,磨練這些技能無疑將使您成為不斷發展的軟體開發世界中的寶貴資產。 迎接挑戰,保持好奇心,踏上持續學習之旅,在 2024 年及以後的動態格局中蓬勃發展。 ### 獎金 正如所承諾的,這是給您的獎勵,一本免費的書,您可以閱讀它來學習分散式系統設計,您可以下載免費的 PDF 或在 Microsoft 上在線閱讀 --- [https://info. microsoft.com/rs/ 157-GQE-382/images/EN-CNTNT-eBook-DesigningDistributedSystems.pdf](https://info.microsoft.com/rs/157-GQE-382/images/EN-CNTNT-eBook-DesigningDistributedSystems.pdf) ![學習分散式系統設計的免費書籍](https://miro.medium.com/v2/resize:fit:276/0*AwK4rZgpbC15wA_b.png) 請在評論中告訴我您 2024 年將學習哪些技能?我總是渴望學習可以提升我作為軟體開發人員的形象的技能。 謝謝 --- 原文出處:https://dev.to/somadevtoo/5-skills-programmers-and-developers-should-learn-in-2024-3bmp

使用 NextJS 和 Wing 建立您自己的 ChatGPT 圖形客戶端 🤯

--- 標題:使用 NextJS 和 Wing 建立您自己的 ChatGPT 圖形客戶端 🤯 描述:使用 Winglang 和 NextJS 建立的 ChatGPT 客戶端應用程式 canonical\_url:https://www.winglang.io/blog/2024/05/16/chatgpt-client-with-nextjs-and-wing 發表:真實 --- 長話短說 ---- 在本文結束時,您將使用 Wing 和 Next.js 建置並部署 ChatGPT 用戶端。 該應用程式可以在本地執行(在本地雲端模擬器中)或將其部署到您自己的雲端提供者。 ![舞蹈](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1sm2cj4sbcm4skp0ho23.gif) --- 介紹 -- 建置 ChatGPT 用戶端並將其部署到您自己的雲端基礎架構是確保對資料進行控制的好方法。 將 LLM 部署到您自己的雲端基礎架構可為您的專案提供隱私和安全性。 有時,在使用 OpenAI 的 ChatGPT 等專有 LLM 平台時,您可能會擔心資料在遠端伺服器上儲存或處理,這可能是由於輸入平台的資料的敏感度或其他隱私原因。 在這種情況下,將 LLM 自託管到您的雲端基礎架構或在您的電腦上本地執行可以讓您更好地控制資料的隱私和安全性。 > [Wing](https://git.new/wing-repo)是一種面向雲端的程式語言,可讓您建置和部署基於雲端的應用程式,而無需擔心底層基礎架構。 它允許您使用相同的語言定義和管理雲端基礎架構和應用程式程式碼,從而簡化了您在雲端上建置的方式。 Wing 與雲端無關——用它建置的應用程式可以編譯並部署到各種雲端平台。 > {% cta https://git.new/wing-repo %} 看 ⭐ Wing {% endcta %} [![給我們一顆星星](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rg63klimgm7s0aw72rn2.png)](https://git.new/wing-repo) --- 讓我們開始吧! ------- 要繼續操作,您需要: - 對 Next.js 有一定了解 - 在您的機器上[安裝 Wing](https://www.winglang.io/docs/) 。如果您不知道如何操作,請不要擔心。我們將在這個專案中一起討論它。 - 取得您的 OpenAI API 金鑰。 建立您的專案 ------ 首先,您需要在電腦上安裝 Wing。執行以下命令: ``` npm install -g winglang ``` 透過檢查版本確認安裝: ``` wing -V ``` ### 建立您的 Next.js 和 Wing 應用程式。 ``` mkdir assistant cd assistant npx create-next-app@latest frontend mkdir backend && cd backend wing new empty ``` 我們已在 Assistant 目錄中成功建立了 Wing 和 Next.js 專案。我們的 ChatGPT 用戶端的名稱是 Assistant。聽起來很酷,對吧? 前端和後端目錄分別包含我們的 Next 和 Wing 應用程式。 `wing new empty`建立三個檔案: `package.json` 、 `package-lock.json`和`main.w` 。後者是應用程式的入口點。 ### 在 Wing 模擬器中本地執行您的應用程式 Wing 模擬器可讓您在本機電腦內執行程式碼、編寫單元測試和偵錯程式碼,而無需部署到實際的雲端供應商,從而幫助您更快地進行迭代。 使用以下命令在本機上執行您的 Wing 應用程式: ``` wing it ``` 您的 Wing 應用程式將在`localhost:3000`上執行。 ![安慰](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5ytrntrz7lc5225w8w8.png) 設定您的後端 ------ - 讓我們安裝 Wing 的 OpenAI 和 React 函式庫。 OpenAI 庫提供了與 LLM 互動的標準介面。 React 程式庫可讓您將 Wing 後端連接到 Next 應用程式。 ``` npm i @winglibs/openai @winglibs/react ``` - 將這些套件匯入到`main.w`檔案中。我們還導入需要的所有其他庫。 ``` bring openai bring react bring cloud bring ex bring http ``` `bring`是 Wing 中的導入語句。這樣想,Wing 使用`bring`來實現與 JavaScript 中`import`相同的功能。 `cloud`是 Wing 的雲端庫。它公開了雲端 API、儲存桶、計數器、網域、端點、函數和更多雲端資源的標準介面。 `ex`是用於與表格和雲端 Redis 資料庫介面的標準庫, `http`用於呼叫不同的 HTTP 方法 - 從遠端資源發送和檢索資訊。 取得您的 OpenAI API 金鑰 ------------------ 我們將在我們的應用程式中使用`gpt-4-turbo`但您可以使用任何 OpenAI 模型。 - 如果您還沒有[OpenAI](https://platform.openai.com/signup)帳戶,請建立一個。若要建立新的 API 金鑰,請前往[platform.openai.com/api-keys](http://platform.openai.com/api-keys)並選擇**建立新金鑰。** ![OpenAI 金鑰](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9645jxsf1fj8902iwnr7.png) - 設定**名稱**、**專案**和**權限,**然後按一下**建立金鑰。** ![OpenAI Key2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yng28wns7esezf94t3uq.png) 初始化 OpenAI ---------- 建立一個`Class`來初始化您的 OpenAI API。我們希望它可以重複使用。 我們將向`Assistant`類別加入`personality` ,以便在向 AI 助手傳遞提示時可以指定 AI 助手的個性。 ``` let apiKeySecret = new cloud.Secret(name: "OAIAPIKey") as "OpenAI Secret"; class Assistant { personality: str; openai: openai.OpenAI; new(personality: str) { this.openai = new openai.OpenAI(apiKeySecret: apiKeySecret); this.personality = personality; } pub inflight ask(question: str): str { let prompt = `you are an assistant with the following personality: ${this.personality}. ${question}`; let response = this.openai.createCompletion(prompt, model: "gpt-4-turbo"); return response.trim(); } } ``` Wing 分別使用`preflight`和`inflight`概念來統一基礎設施定義和應用程式邏輯。 **預檢**程式碼(通常是基礎設施定義)在編譯時執行一次,而執行**中**程式碼將在執行時執行以實現應用程式的行為。 雲端儲存桶、佇列和 API 端點是預檢的一些範例。定義預檢時不需要新增預檢關鍵字,Wing 預設知道這一點。但對於飛行塊,您需要在其中加入“飛行”一詞。 > 上面的程式碼中有一個飛行中的區塊。 Inflight 區塊是您編寫非同步執行時間程式碼的地方,這些程式碼可以透過其 inflight API 直接與資源互動。 > 測試和儲存雲端秘密 --------- 讓我們來看看如何保護我們的 API 金鑰,因為我們肯定要[考慮安全性](https://techhq.com/2022/09/hardcoded-api-keys-jeopardize-data-in-the-cloud/)。 讓我們在後端的根目錄中建立一個`.env`檔案並傳入我們的 API 金鑰: ``` OAIAPIKey = Your_OpenAI_API_key ``` 我們可以在本地引用 .env 檔案來測試 OpenAI API 金鑰,然後由於我們計劃部署到 AWS,因此我們將逐步設定[AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 。 ![AWS 主控台](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e2a1nbh0egmjkckxnaov.png) 首先,我們前往 AWS 並登入控制台。如果您沒有帳戶,可以免費建立一個。 ![AWS平台](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n937801fzs0lajf2knaq.png) 導覽至 Secrets Manager,讓我們儲存 API 金鑰值。 ![AWS 秘密管理器](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/scbb1snyzjdoip2nvdpl.png) ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lf79xzn6vfhqylao8iuo.png) 我們已將 API 金鑰儲存在名為`OAIAPIKey`的雲端機密中。複製您的金鑰,我們將跳到終端並連接到現在儲存在 AWS 平台中的金鑰。 ``` wing secrets ``` 現在將您的 API 金鑰貼上為終端中的值。您的密鑰現已正確存儲,我們可以開始與我們的應用程式互動。 --- 將人工智慧的回應儲存在雲端。 -------------- 將人工智慧的回應儲存在雲端可以讓您控制資料。它駐留在您自己的基礎設施上,與 ChatGPT 等專有平台不同,您的資料位於您無法控制的第三方伺服器上。您也可以在需要時檢索這些回應。 讓我們建立另一個類,使用 Assistant 類來傳遞 AI 的個性和提示。我們還將每個模型的回應作為`txt`檔案儲存在雲端儲存桶中。 ``` let counter = new cloud.Counter(); class RespondToQuestions { id: cloud.Counter; gpt: Assistant; store: cloud.Bucket; new(store: cloud.Bucket) { this.gpt = new Assistant("Respondent"); this.id = new cloud.Counter() as "NextID"; this.store = store; } pub inflight sendPrompt(question: str): str { let reply = this.gpt.ask("{question}"); let n = this.id.inc(); this.store.put("message-{n}.original.txt", reply); return reply; } } ``` --- 我們為我們的助理設定了「受訪者」的個性。我們希望它能夠回答問題。您也可以讓前端使用者在發送提示時指定此個性。 每次產生回應時,計數器都會遞增,並且計數器的值會傳遞到用於在雲端中儲存模型回應的`n`變數中。然而,我們真正想要的是建立一個資料庫來儲存來自前端的使用者提示和模型的回應。 讓我們定義我們的資料庫。 定義我們的資料庫 -------- Wing 內建了`ex.Table` - 一個用於儲存和查詢資料的 NoSQL 資料庫。 ``` let db = new ex.Table({ name: "assistant", primaryKey: "id", columns: { question: ex.ColumnType.STRING, answer: ex.ColumnType.STRING } }); ``` --- 我們在資料庫定義中新增了兩列 - 第一列用於儲存使用者提示,第二列用於儲存模型的回應。 建立 API 路由和邏輯 ------------ 我們希望能夠在後端發送和接收資料。讓我們建立 POST 和 GET 路由。 ``` let api = new cloud.Api({ cors: true }); api.post("/assistant", inflight((request) => { // POST request logic goes here })); api.get("/assistant", inflight(() => { // GET request logic goes here })); ``` --- ``` let myAssistant = new RespondToQuestions(store) as "Helpful Assistant"; api.post("/assistant", inflight((request) => { let prompt = request.body; let response = myAssistant.sendPrompt(JSON.stringify(prompt)); let id = counter.inc(); // Insert prompt and response in the database db.insert(id, { question: prompt, answer: response }); return cloud.ApiResponse({ status: 200 }); })); ``` 在 POST 路由中,我們希望將從前端收到的使用者提示傳遞到模型中並獲得回應。提示和回應都將儲存在資料庫中。 `cloud.ApiResponse`可讓您傳送對使用者要求的回應。 新增前端發出 GET 請求時檢索資料庫專案的邏輯。 --- 新增前端發出 GET 請求時檢索資料庫專案的邏輯。 ``` api.get("/assistant", inflight(() => { let questionsAndAnswers = db.list(); return cloud.ApiResponse({ body: JSON.stringify(questionsAndAnswers), status: 200 }); })); ``` 我們的後端已經準備好了。我們在本地雲端模擬器中測試一下。 跑`wing it` 。 讓我們轉到`localhost:3000`並向我們的助理詢問一個問題。 ![助理回應](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ox67623b9vye7o6quqe.png) 我們的問題和助理的回答都已儲存到資料庫中。看一看。 ![表資料](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ajd94ywkhjw04yb21e2.png) 向前端公開您的 API URL --------------- 我們需要將後端的 API URL 公開給 Next 前端。這就是之前安裝的 React 函式庫派上用場的地方。 ``` let website = new react.App({ projectPath: "../frontend", localPort: 4000 }); website.addEnvironment("API_URL", api.url); ``` 將以下內容加入 Next 應用程式的`layout.js`中。 ``` import { Inter } from "next/font/google"; import "./globals.css"; const inter = Inter({ subsets: ["latin"] }); export const metadata = { title: "Create Next App", description: "Generated by create next app", }; export default function RootLayout({ children }) { return ( <html lang="en"> <head> <script src="./wing.js" defer></script> </head> <body className={inter.className}>{children}</body> </html> ); } ``` 我們現在可以在 Next 應用程式中存取`API_URL` 。 實作前端邏輯 ------ 讓我們實作前端邏輯來呼叫後端。 ``` import { useEffect, useState, useCallback } from 'react'; import axios from 'axios'; function App() { const [isThinking, setIsThinking] = useState(false); const [input, setInput] = useState(""); const [allInteractions, setAllInteractions] = useState([]); const retrieveAllInteractions = useCallback(async (api_url) => { await axios ({ method: "GET", url: `${api_url}/assistant`, }).then(res => { setAllInteractions(res.data) }) }, []) const handleSubmit = useCallback(async (e)=> { e.preventDefault() setIsThinking(!isThinking) if(input.trim() === ""){ alert("Chat cannot be empty") setIsThinking(true) } await axios({ method: "POST", url: `${window.wingEnv.API_URL}/assistant`, headers: { "Content-Type": "application/json" }, data: input }) setInput(""); setIsThinking(false); await retrieveAllInteractions(window.wingEnv.API_URL); }) useEffect(() => { if (typeof window !== "undefined") { retrieveAllInteractions(window.wingEnv.API_URL); } }, []); // Here you would return your component's JSX return ( // JSX content goes here ); } export default App; ``` `retrieveAllInteractions`函數取得後端資料庫中的所有問題和答案。 `handSubmit`函數將使用者的提示傳送到後端。 讓我們加入 JSX 實作。 ``` import { useEffect, useState } from 'react'; import axios from 'axios'; import './App.css'; function App() { // ... return ( <div className="container"> <div className="header"> <h1>My Assistant</h1> <p>Ask anything...</p> </div> <div className="chat-area"> <div className="chat-area-content"> {allInteractions.map((chat) => ( <div key={chat.id} className="user-bot-chat"> <p className='user-question'>{chat.question}</p> <p className='response'>{chat.answer}</p> </div> ))} <p className={isThinking ? "thinking" : "notThinking"}>Generating response...</p> </div> <div className="type-area"> <input type="text" placeholder="Ask me any question" value={input} onChange={(e) => setInput(e.target.value)} /> <button onClick={handleSubmit}>Send</button> </div> </div> </div> ); } export default App; ``` 在本地執行您的專案 --------- 導航到您的後端目錄並使用以下命令在本地執行您的 Wing 應用程式 ``` cd ~assistant/backend wing it ``` 也執行您的 Next.js 前端: ``` cd ~assistant/frontend npm run dev ``` 讓我們看一下我們的應用程式。 ![聊天應用程式](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/97g8kikxfwwb7ephfdni.png) 讓我們透過 Next 應用程式向 AI 助理詢問幾個開發人員問題。 ![聊天應用程式2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5uoz1y9czt0nwwtsesrz.png) 將您的應用程式部署到 AWS -------------- 我們已經了解了我們的應用程式如何在本地執行。 Wing 也允許您部署到包括 AWS 在內的任何雲端提供者。要部署到 AWS,您需要使用您的憑證來設定[Terraform](https://terraform.io/downloads)和[AWS CLI](https://docs.aws.amazon.com/cli/) 。 - 使用`tf-aws`編譯到 Terraform/AWS 。此指令指示編譯器使用 Terraform 作為配置引擎,將所有資源綁定到預設的 AWS 資源集。 ``` cd ~/assistant/backend wing compile --platform tf-aws main.w ``` --- - 執行 Terraform 初始化並應用 ``` cd ./target/main.tfaws terraform init terraform apply ``` --- 注意: `terraform apply`需要一些時間才能完成。 您可以[在此處](https://github.com/NathanTarbert/chatgpt-client-wing-nextjs)找到本教程的完整程式碼。 總結一下 ---- 正如我之前提到的,我們都應該關心我們的應用程式的安全性,建立您自己的 ChatGPT 用戶端並將其部署到您的雲端基礎設施可以為您的應用程式提供一些非常好的[保障](https://docs.aws.amazon.com/whitepapers/latest/aws-overview/security-and-compliance.html#:~:text=Keep%20Your%20data%20safe%20%E2%80%94%20The,compliance%20programs%20in%20its%20infrastructure.)。 我們在本教程中演示了[Wing](https://git.new/wing-repo)如何提供一種簡單的方法來建置可擴展的雲端應用程式,而無需擔心底層基礎設施。 如果您有興趣建立更酷的東西,Wing 擁有一個活躍的開發人員社區,他們可以合作建立雲端願景。我們很高興在那裡見到你。 只需前往我們的[Discord](https://t.winglang.io/discord)打個招呼即可! --- 原文出處:https://dev.to/winglang/building-your-own-chatgpt-graphical-client-with-nextjs-and-wing-29jj

加入我們參加 AWS Amplify Fullstack TypeScript 挑戰賽:獎品為 3,000 美元!

--- 標題:加入我們參加 AWS Amplify Fullstack TypeScript 挑戰賽:獎品為 3,000 美元! 發表:真實 描述: 標籤:devchallenge、awschallenge、放大、全端 封面圖:https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z55ngddx33ptj9dapt07.png 使用 100:42 的比例可獲得最佳效果。 ===================== 發佈於: 2024-05-14 20:36 +0000 =========================== --- 我們很高興地宣布我們與 AWS Amplify 的第一個合作挑戰。 [AWS Amplify Fullstack TypeScript 挑戰賽](https://dev.to/challenges/aws)將持續到**5 月 26 日**,提供了一個探索 AWS 服務的廣度和深度以及提升您的技能的機會。 AWS Amplify 擁有您在短短幾個小時內建立 Web 和行動應用程式所需的一切。 **這項挑戰有一個提示,但有幾種獲勝方法!**我們迫不及待地想看看您學到了什麼和取得了什麼成就! 提示 -- ### 使用 AWS Amplify Gen 2 建置和部署全端應用程式 您的任務是使用 AWS Amplify Gen 2 建立一個整合以下一項或多項功能的應用程式: - **[資料](https://docs.amplify.aws/react/build-a-backend/data/)** - **[驗證](https://docs.amplify.aws/react/build-a-backend/auth/)** - **[無伺服器功能](https://docs.amplify.aws/react/build-a-backend/functions/)** - **[文件儲存](https://docs.amplify.aws/react/build-a-backend/storage)** 這是供任何想要直接參與的人使用的提交模板,但請在提交之前查看[官方挑戰頁面](https://dev.to/challenges/aws)上的所有挑戰規則。 {% cta https://dev.to/new?prefill=---%0Atitle%3A%20%0Apublished%3A%20%0Atags%3A%20devchallenge%2C%20awschallenge%2C%20amplify%2C%20fullstack%0A ---%0A%0A*這%20是%20a%20submission%20for%20the%20%5BThe%20AWS%20Amplify%20Fullstack%20TypeScript%20Challenge%20%5D(https%3A%2F%2Fdevgesto% 2Fawschallenge )* %0A%0A%23%23%20什麼%20I%20內建%0A%3C! %0A%0A%23%23% 20Demo%0A%3C!--%20Share%20a%20link%20to%20your%20deployed%20solution%20on%20Amplify%20Hosting%2C%20and%20% 20screenshots%20。 2C%20what%20you%20learned%2C%20anything%20you%20are %20尤其%20proud%20of%2C%20what%20you%20hop%20to%20do%20next%2C%20etc.you%20.20to%20do%20next%2C%20etc.%20.20--% %0A%0A**已連接%20Components%20and%2For%20Feature%20Full** % 0A%0A%3C!--%20讓%20us%20知道%20if%20you%20development%20UI%20using%20Amify%20you%20development%20UI%20using%20Amifyify% 20for%20UX%20patterns%2C%20and%2For%20if%20your%20project%20includes %20all%20four%20features%3A%20data%2C%20authentication%2C%20features%3A%20data%2C%20authentication%2C%20features%3A%20data%20function. --%3E%0A%0A%3C!--%20Team%20Submissions%3A %20請%20pick%20one%20member%20到%20publish%20the%20submission%20and%20credit%20teammates%20by%200%20by%20and%20credit%20teammates%20by%20and%20credit%20teammates%20by%的%20DEV%20usernames%20直接%20in%20the%20body%20of%20the%20post。 %20image%20(if%20you%20want).%20--%3E%0A%0A%0A %3C!--%20感謝%20%20參與!%20%E2%86%92%0A %} 提交模板 {% 結束%} **正在尋找一些專業技巧?[向下滾動](#tips-and-tricks)!** ### 評審標準 所有提交的作品將根據以下內容進行評判: - 底層技術的使用 - 可用性和使用者體驗 - 無障礙 - 創造力 兩個額外獎項類別 -------- - **連線元件**:授予使用 Amplify 連線元件實現 UX 模式開發 UI 的頂級提交。 - **功能完整**:授予頂級提交,該提交包含挑戰提示中的所有四個功能:資料、身份驗證、無伺服器功能和文件儲存。 獎品 -- **我們的總冠軍將獲得:** - $1,500 禮品卡或同等金額 - 專屬開發者徽章 - 來自[DEV 商店](https://shop.forem.com)的禮物 **我們的兩個獎項類別獲獎者將獲得:** - $750 等禮品卡 - 專屬開發者徽章 - 來自[DEV 商店](https://shop.forem.com)的禮物 **所有提交有效提交的參與者都**將在其 DEV 個人資料中收到完成徽章。 如何參與 ---- 為了參與,您需要使用與每個提示關聯的提交範本來發布貼文。所有提交內容都必須部署到 Amplify Hosting。 請在提交之前查看我們的完整[規則、指南和常見問題解答頁面,](https://dev.to/challenges/aws)以便您了解我們的參與指南和官方競賽規則(例如資格要求)。 技巧和竅門 ----- 您可以使用 AWS 做很多事情,因此我們提供了一些想法,讓您在考慮建置什麼以及如何建置時供您思考。 - 您可以用不到 5 行程式碼定義由 Amazon Simple Storage Service (S3) 提供支援的儲存桶!更好的是,您可以使用[Amplify 的雲端沙箱環境](https://docs.amplify.aws/react/deploy-and-host/sandbox-environments/)測試您的儲存功能。 - 如果您想同時檢查兩個功能,則可以透過上傳到您的 S3 儲存桶來觸發由 AWS Lambda 提供支援的無伺服器功能 😉 - Next.js 和 Nuxt 應用程式的部署是零配置![存取入門指南](https://docs.aws.amazon.com/amplify/latest/userguide/getting-started.html)。 指南和文件 ----- - 第一次建立 Amplify 應用程式?查看他們的[快速入門指南](https://docs.amplify.aws/react/start/quickstart/)以快速入門。 - [完整的 AWS Amplify 開發人員文件](https://docs.amplify.aws) **有技術問題嗎?在 AWS Amplify 說明線程中留下評論:** {% 嵌入 https://dev.to/aws/the-aws-amplify-fullstack-typescript-challenge-help-thread-529a %} 重要的日子 ----- - 5 月 15 日:AWS Amplify Fullstack TypeScript 挑戰賽開始! - 5 月 26 日:提交截止時間為太平洋夏令時間晚上 11:59 - 5 月 28 日:公佈得獎者 我們希望您喜歡使用 AWS Amplify 快速從前端過渡到全端。 🚀 祝你好運,編碼愉快! --- 原文出處:https://dev.to/devteam/join-us-for-the-the-aws-amplify-fullstack-typescript-challenge-3000-in-prizes-ghm

20 多個使用 AI 的專案,具有完整的源程式碼🚀

過去幾天對於人工智慧來說是令人興奮的。 然而,作為開發人員,我們中的許多人還不了解人工智慧的易用性。 今天,我們將介紹您可以使用人工智慧輕鬆建立的精彩專案。無需成為人工智慧專家,每個工具都附帶教學或程式碼演練。 讓我們跳進去吧! ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0vxxzizvu643bfpbo1xu.gif) --- 1. [CopilotKit](https://github.com/CopilotKit/CopilotKit) - 在數小時內為您的產品提供 AI Copilot。 ------------------------------------------------------------------------------------ [![副駕駛套件](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nzuxjfog2ldam3csrl62.png)](https://github.com/CopilotKit/CopilotKit) 將 AI 功能整合到 React 中是很困難的,這就是 Copilot 的用武之地。一個簡單快速的解決方案,可將可投入生產的 Copilot 整合到任何產品中! 您可以使用兩個 React 元件將關鍵 AI 功能整合到 React 應用程式中。它們還提供內建(完全可自訂)Copilot 原生 UX 元件,例如`<CopilotKit />` 、 `<CopilotPopup />` 、 `<CopilotSidebar />` 、 `<CopilotTextarea />` 。 開始使用以下 npm 指令。 ``` npm i @copilotkit/react-core @copilotkit/react-ui ``` Copilot Portal 是 CopilotKit 提供的元件之一,CopilotKit 是一個應用程式內人工智慧聊天機器人,可查看目前應用狀態並在應用程式內採取操作。它透過插件與應用程式前端和後端以及第三方服務進行通訊。 這就是整合聊天機器人的方法。 `CopilotKit`必須包裝與 CopilotKit 互動的所有元件。建議您也開始使用`CopilotSidebar` (您可以稍後切換到不同的 UI 提供者)。 ``` "use client"; import { CopilotKit } from "@copilotkit/react-core"; import { CopilotSidebar } from "@copilotkit/react-ui"; import "@copilotkit/react-ui/styles.css"; export default function RootLayout({children}) { return ( <CopilotKit url="/path_to_copilotkit_endpoint/see_below"> <CopilotSidebar> {children} </CopilotSidebar> </CopilotKit> ); } ``` 您可以使用此[快速入門指南](https://docs.copilotkit.ai/getting-started/quickstart-backend)設定 Copilot 後端端點。 之後,您可以讓 Copilot 採取行動。您可以閱讀如何提供[外部上下文](https://docs.copilotkit.ai/getting-started/quickstart-chatbot#provide-context)。您可以使用`useMakeCopilotReadable`和`useMakeCopilotDocumentReadable`反應掛鉤來執行此操作。 ``` "use client"; import { useMakeCopilotActionable } from '@copilotkit/react-core'; // Let the copilot take action on behalf of the user. useMakeCopilotActionable( { name: "setEmployeesAsSelected", // no spaces allowed in the function name description: "Set the given employees as 'selected'", argumentAnnotations: [ { name: "employeeIds", type: "array", items: { type: "string" } description: "The IDs of employees to set as selected", required: true } ], implementation: async (employeeIds) => setEmployeesAsSelected(employeeIds), }, [] ); ``` 您可以閱讀[文件](https://docs.copilotkit.ai/getting-started/quickstart-textarea)並查看[演示影片](https://github.com/CopilotKit/CopilotKit?tab=readme-ov-file#demo)。 您可以輕鬆整合 Vercel AI SDK、OpenAI API、Langchain 和其他 LLM 供應商。您可以按照本[指南](https://docs.copilotkit.ai/getting-started/quickstart-chatbot)將聊天機器人整合到您的應用程式中。 基本想法是非常快速地建立人工智慧聊天機器人,而無需在製作任何基於法學碩士的應用程式時費力。 用例是巨大的,作為開發人員,我們絕對應該在下一個專案中嘗試使用 CopilotKit。 CopilotKit 在 GitHub 上擁有超過 5800 顆星,發布了 200 多個版本,這意味著它們不斷改進。 ![明星副駕駛套件](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p8i6roafbjxvds26fl35.gif) {% cta https://go.copilotkit.ai/Anmol %} Star CopilotKit ⭐️ {% endcta %} --- ### 🎯 使用 CopilotKit 建立的熱門應用程式。 我們可以使用 CopilotKit 建立許多創新應用程式,所以讓我們探索一些脫穎而出的應用程式! ### ✅ [人工智慧驅動的部落格平台](https://dev.to/copilotkit/how-to-build-an-ai-powered-blogging-platform-nextjs-langchain-supabase-1hdp)。 ![部落格平台](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tvx995v2lvyujnsavaxx.gif) 您可以閱讀本文,使用`Next.js` 、 `Langchain` 、 `Supabase`和`CopilotKit`來建立這個令人驚嘆的應用程式。 LangChain&Tavily用作網路搜尋人工智慧代理,Supabase用於儲存和檢索部落格平台文章資料,CopilotKit用於將人工智慧整合到應用程式中。 ![演示人工智慧部落格平台](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/88ni6x3pdno43vani7q9.png) 您可以檢查[GitHub 儲存庫](https://github.com/TheGreatBonnie/aipoweredblog)。 ### ✅ [V0.dev 複製](https://dev.to/copilotkit/i-created-a-v0-clone-with-nextjs-gpt4-copilotkit-3cmb)。 ![v0](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pyutbegrv571lp3i6081.png) 如果您不熟悉,Vercel 的 V0 是一款人工智慧驅動的工具,可讓您根據提示產生 UI,以及許多其他有用的功能。 shadcn 元件現在可以在文件本身的 v0 中進行編輯(如其網站所示)。 ![v0 開發](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/951hk0jqrioboe4jxf5i.gif) 您可以使用`Next.js` 、 `GPT4`和`CopilotKit`建立 V0 的克隆。這個詳細的教程名列前 7 名,總的來說,這是一個值得加入到您的作品集中的偉大專案。 簽名頁的產生輸出如下所示。 ![簽名頁](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8xu1l5el91x4w62sz7kh.png) 您可以透過點擊右上角的按鈕輕鬆在`React Code`和`UI`之間切換。這麼酷的概念! 您可以檢查[GitHub 儲存庫](https://github.com/Tabintel/v0-copilot-next)。 ### ✅ [人工智慧行銷經理](https://dev.to/copilotkit/build-an-ai-powered-campaign-manager-nextjs-openai-copilotkit-59ii)。 ![競選經理](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/moytsjm7lcq1g52sn0ot.gif) 您可以使用`Next.js` 、 `OpenAI` 、 `Radix UI` (用於實現可存取性)、 `Recharts` (用於建立互動式圖表)以及`CopilotKit`來建立這個出色的專案來閱讀本文。 您可以觀看 David 的示範! {% 嵌入 https://youtu.be/gCJpH6Tnj5g %} 如果你想用更少的錢學到更多,這是我最喜歡的一個。 我喜歡它的 UI(一般教學不是這樣),這正是它成為你的編碼清單上的一個乾淨專案的原因:) ![示範動圖](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gt14n0xn3bekl7u5uib1.gif) 您可以查看該應用程式的[現場演示](https://campaign-manager-demo.vercel.app/)。 您可以檢查[GitHub 儲存庫](https://github.com/CopilotKit/campaign-manager-demo)。 ### ✅ [附有人工智慧副駕駛的電子表格應用程式](https://dev.to/copilotkit/build-an-ai-powered-spreadsheet-app-nextjs-langchain-copilotkit-109d)。 ![電子表格應用程式](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gexhqf0alwmwguu7kqsv.gif) 您可以閱讀本文,使用`Next.js` 、 `GPT-4` 、 `LangChain`和`CopilotKit`來建立這個很棒的工具。 為了使工作更輕鬆,它使用[React Spreadsheet](https://github.com/iddan/react-spreadsheet)套件為 React 和[Tavily AI](https://tavily.com/)建立簡單的可自訂電子表格作為搜尋引擎,使 AI 代理能夠進行研究並存取即時知識 你可以觀看這個演示! {% 嵌入 https://www.youtube.com/watch?v=kGQ9xl5mSoQ %} 您也可以查看[現場演示](https://spreadsheet-demo-tau.vercel.app/)。我可以肯定地說,這是一個獨特的案例,你可以得到很多啟發。 您可以檢查[GitHub 儲存庫](https://github.com/CopilotKit/spreadsheet-demo)。 ### ✅[與您的履歷聊天](https://dev.to/copilotkit/how-to-build-the-with-nextjs-openai-1mhb)。 ![與履歷聊天](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gdagmyn1tvoa2lwfoqto.gif) 您可以閱讀本文,使用`Next.js` 、 `OpenAI`和`CopilotKit`來建立這個很棒的用例。 您不僅可以使用 ChatGPT 產生履歷,還可以將其匯出為 PDF,甚至可以透過與其對話來進一步改進它。多酷啊,對吧:) ![簡歷聊天演示](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x6j27yls99cdv219ztwx.png) 您可以檢查[GitHub 儲存庫](https://github.com/TheGreatBonnie/AIPoweredResumeBuilder)。 ### ✅ [文字到 Powerpoint 應用程式](https://dev.to/copilotkit/how-to-build-ai-powered-powerpoint-app-nextjs-openai-copilotkit-ji2)。 ![文字到 Powerpoint 應用程式](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vh01hh3l29qtztri4180.png) 您可以閱讀本文,使用`Next.js` 、 `OpenAI`和`CopilotKit`建立 Text to Powerpoint 應用程式。 這是一個簡單但非常強大的概念,本文也清楚地說明如何在任何幻燈中加入背景圖像。 您可以檢查[GitHub 儲存庫](https://github.com/TheGreatBonnie/aipoweredpresentation)。 ### ✅ [StudyPal:您的人工智慧驅動的個人化學習伴侶](https://dev.to/rajesh-adk-137/studypal-your-ai-powered-personalized-learning-companion-59d)。 ![學習夥伴](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qhau3p28cylr25lae5r4.png) 您可以從精選清單中選擇您想要的主題,為個人化的學習旅程奠定基礎。 您需要提供有關您的教育背景的詳細訊息,以便 StudyPal 能夠根據他們當前的知識水平定製材料和練習。 `Additional Details`部分可讓學生指定重點領域,確保內容與其學習目標一致。 您可以閱讀本文,使用`React` 、 `Node`和`CopilotKit`來建立這個很棒的用例。 您可以觀看該應用程式的[演示](https://github-production-user-asset-6210df.s3.amazonaws.com/89499267/328419789-a06b11c6-ffbc-44b6-96b0-648d2a38cd7c.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240512%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240512T083208Z&X-Amz-Expires=300&X-Amz-Signature=f6fe016e65e167e94b8322b70743a7fb02fed91f2c87c5af7459e1fa022faac2&X-Amz-SignedHeaders=host&actor_id=74038190&key_id=0&repo_id=793889064)。 您可以檢查[GitHub 儲存庫](https://github.com/rajesh-adk-137/StudyPal)。 --- 2.什麼是郎鏈? -------- 其餘專案將與 langchain 和 AI 相關(有些使用 python)。最好稍微了解一下這一點。 LangChain 是用於開發由大型語言模型(LLM)支援的應用程式的框架。 ![朗查恩](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0fuo9c2ljruv3c54is10.png) ![朗查恩](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/btgq9o8y1yhjfnrinqqn.png) 總體而言,LangChain 簡化了 LLM 申請生命週期的每個階段。您可以閱讀[官方文件](https://python.langchain.com/docs/get_started/introduction/)以了解更多內容。 如果您想了解有關 langchain 的更多訊息,我建議您觀看 freeCodeCamp 的[本教程](https://www.youtube.com/watch?v=HSZ_uaif57o)。 {% 嵌入 https://www.youtube.com/watch?v=HSZ\_uaif57o %} --- ### 🎯 使用 Langchain/AI/Python 建立的熱門應用程式。 我們可以使用 langchain 建立很多很多高級應用程式,所以讓我們探索一些脫穎而出的應用程式! ### ✅ [Mac 上的語音助理](https://github.com/chidiwilliams/GPT-Automator)- 您的語音控制 Mac 助理。 ![GPT自動機](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rdzv06jnr3z33s7qll5k.png) 您的語音控制 Mac 助理。 GPT Automator 可讓您使用語音在 Mac 上執行任務。例如,打開應用程式、尋找餐廳、綜合資訊。太棒了:D 它是在倫敦黑客馬拉松期間建構的。 它有兩個主要部分: A。語音命令:它使用本地執行的 Whisper(Buzz 的一個分支)來產生命令。 b.命令到行動:您向配備了我們編寫的自訂工具的 LangChain 代理程式發出命令。這些工具包括使用 AppleScript 控制電腦的作業系統以及使用 JavaScript 控制活動瀏覽器。最後,就像任何優秀的人工智慧一樣,我們讓代理商使用 AppleScript 說出最終結果「{Result}」(如果您以前沒有使用過,請嘗試在 Mac 終端機中輸入「Hello World!」)。 我們製作了一個自訂工具,讓法學碩士使用 AppleScript 控制電腦。提示符是文件字串: ``` @tool def computer_applescript_action(apple_script): """ Use this when you want to execute a command on the computer. The command should be in AppleScript. Here are some examples of good AppleScript commands: Command: Create a new page in Notion AppleScript: tell application "Notion" activate delay 0.5 tell application "System Events" to keystroke "n" using {{command down}} end tell ... Write the AppleScript for the Command: Command: """ p = subprocess.Popen(['osascript', '-'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate(applescript.encode('utf-8')) if p.returncode != 0: raise Exception(stderr) decoded_text = stdout.decode("utf-8") return decoded_text ``` 如果您想知道它是如何運作的,GPT Automator 使用 OpenAI 的 Whisper 將您的音訊輸入轉換為文字。然後,它使用LangChain Agent 選擇一組操作,包括使用OpenAI 的GPT-3(“text-davinci-003”)從提示符號產生AppleScript(用於桌面自動化)和JavaScript(用於瀏覽器自動化)命令,然後執行產生的腳本。 請記住,這不適用於生產用途。該專案執行從自然語言產生的程式碼,可能容易受到提示注入和類似的攻擊。這項工作是作為概念驗證而進行的。 您可以閱讀[安裝指南](https://github.com/chidiwilliams/GPT-Automator?tab=readme-ov-file#instructions)。 讓我們看看一些提示及其作用: ⚡ 求計算結果。 > 提示:“2 + 2 是什麼?” 它將編寫 AppleScript 開啟計算器並輸入 5 \* 5。 ⚡ 尋找附近的餐廳。 > 提示:“查找我附近的餐廳” 它將打開 Chrome,谷歌搜尋附近的餐廳,解析頁面,然後返回最上面的結果。有時它很厚顏無恥,反而會打開谷歌地圖結果並說「最好的餐廳是谷歌地圖頁面頂部的餐廳」。其他時候,它會打開 Google 上的頂部連結 - 並卡在 Google 可存取性頁面上... 以下是執行時列印到終端的內容: ``` Command: Find a great restaurant near Manchester. > Entering new AgentExecutor chain... I need to search for a restaurant near Manchester. Action: chrome_open_url Action Input: https://www.google.com/search?q=restaurant+near+Manchester Observation: Thought: I need to read the page Action: chrome_read_the_page Action Input: Observation: Accessibility links Skip to main content ... # Shortned for brevity Dishoom Manchester 4.7 (3.3K) · £££ · Indian 32 Bridge St · Near John Rylands Library Closes soon ⋅ 11 pm Stylish eatery for modern Indian fare San Carlo 4.2 (2.8K) · £££ · Italian 42 King St W · Near John Rylands Library Closes soon ⋅ 11 pm Posh, sceney Italian restaurant Turtle Bay Manchester Northern Quarter 4.7 Thought: I now know the final answer Final Answer: The 15 best restaurants in Manchester include El Gato Negro, Albert's Schloss, The Refuge, Hawksmoor, On The Hush, Dishoom, Banyan, Zouk Tea Room & Grill, Edison Bar, MyLahore Manchester, Turtle Bay Manchester Northern Quarter, San Carlo, The Black Friar, Mana, and Tast Cuina Catalana. ``` 我不能保證這些餐廳值得,請自行承擔風險。哈哈! ⚡ 如果您要求 GPT Automator 擦除您的計算機,它會的。 是的,如果您要求的話,它會擦除您的電腦! 我內心的自我尖叫著要這麼做:) 您可以在這裡查看完整的演示! {% 嵌入 https://www.loom.com/share/7bfa82c604f3412fbbb04191ce2ae12f %} 您可以在[Chidi 的部落格](https://chidiwilliams.com/posts/gpt-automator)上閱讀更多內容。 它更像是一個業餘專案,因此他們在 GitHub 上有大約 200 個 star,但它非常酷。 您可以檢查[GitHub 儲存庫](https://github.com/chidiwilliams/GPT-Automator)。 ✅ [Instrukt](https://github.com/blob42/Instrukt) - 終端中整合人工智慧。 ------------------------------------------------------------- ![指示](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wsk64pf5yuosui91tmz9.png) Instrukt是一個基於終端的AI整合環境。它提供了一個平台,用戶可以: - 建立並指導模組化人工智慧代理。 - 產生問答的文件索引。 - 建立工具並將其附加到任何代理程式。 用自然語言指導它們,並且為了安全起見,在安全容器(目前使用 Docker 實作)中執行它們,以在其專用的沙盒空間中執行任務。 使用`Langchain` 、 `Textual`和`Chroma`建構。 開始使用以下命令。 ``` pip install instrukt[all] ``` ![指示](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r3aza7hnlji7hbi2o0js.gif) 有許多令人興奮的功能,例如: - 基於終端的介面,讓強力鍵盤使用者無需離開鍵盤即可指示 AI 代理。 - 對您的資料建立索引並讓代理程式檢索它以進行問答。您可以使用簡單的 UI 建立和組織索引。 - 索引建立將自動偵測程式語言並相應地優化拆分/分塊策略。 - 在安全的 Docker 容器內執行代理程式以確保安全和隱私。 - 整合的 REPL-Prompt 可實現與代理程式的快速交互,以及用於開發和測試的快速回饋循環。 - 您可以使用自訂命令自動執行重複任務。它還具有內建的提示/聊天歷史記錄。 您可以閱讀有關所有[功能的](https://github.com/blob42/Instrukt?tab=readme-ov-file#features)資訊。 您可以閱讀[安裝指南](https://blob42.github.io/Instrukt/install.html)。 您還可以使用內建的 IPython 控制台來除錯和內省代理,這是一個簡潔的小功能。 ![控制台除錯](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qaan8np68e3fk1yueexm.png) Instrukt 已獲得 AGPL 許可證,這意味著任何人都可以將其用於任何目的。 可以肯定地說,Instrukt 是您觸手可及的終端人工智慧指揮官。 這是一個新專案,因此他們在 GitHub 上有大約 200 多顆星,但用例非常好。 您可以檢查[GitHub 儲存庫](https://github.com/blob42/Instrukt)。 ✅ [ChatFiles](https://github.com/guangzhengli/ChatFiles) - 上傳您的檔案並與其對話。 ----------------------------------------------------------------------- ![聊天文件](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lhimajsma8ijyzeknmlg.png) 文件聊天機器人 — 多個文件,由 GPT / Embedding 提供支援。你可以上傳任何文件並與之對話,考慮到他們使用了另一個著名的開源專案,UI 非常好。 它在底層使用 Langchain 和[Chatbot-ui](https://github.com/mckaywrigley/chatbot-ui) 。使用 Nextjs、TypeScript、Tailwind 和 Supabase(向量 DB)建構。 如果您想了解該方法和技術架構,那麼就在這裡! ![建築學](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8zbn7h50k6gwxgz6rkaf.png) 此環境僅用於試用,支援最大檔案大小為 10 MB,這是一個缺點,如果您想要更大的大小,則可以[在本機安裝](https://github.com/guangzhengli/ChatFiles?tab=readme-ov-file#how-to-run-locally)。 他們提供了您可以使用的[入門問題](https://github.com/guangzhengli/ChatFiles/blob/main/doc/Example.md)。您可以查看[現場演示](https://chatfile.vectorhub.org/)。 他們在 GitHub 上有 3k star,並且發布了`v0.3`版本。 您可以檢查[GitHub 儲存庫](https://github.com/guangzhengli/ChatFiles)。 ✅ [具有多代理協作的終極人工智慧自動化 - LangGraph + GPT 研究人員](https://blog.langchain.dev/how-to-build-the-ultimate-ai-automation-with-multi-agent-collaboration/)。 ------------------------------------------------------------------------------------------------------------------------------------------------- LangGraph 是一個使用 LLM 建立有狀態、多參與者應用程式的函式庫。此範例使用 Langgraph 自動化對任何給定主題的深入研究過程。 簡而言之,這個範例展示了人工智慧代理團隊如何協同工作,對給定主題進行從規劃到發布的研究。此範例還將利用領先的自主研究代理[GPT Researcher](https://github.com/assafelovic/gpt-researcher) ,我已在過去的一篇文章中介紹過該代理。 研究團隊由七名法學碩士代理人: ⚡ `Chief Editor` - 監督研究過程並管理團隊。這是使用 LangGraph 協調其他代理程式的「主」代理程式。該代理充當主要的 LangGraph 介面。 ⚡ `GPT Researcher` - 專門的自主代理,對給定主題進行深入研究。 ⚡ `Editor` - 負責規劃研究大綱和結構。 ⚡ `Reviewer` - 根據一組標準驗證研究結果的正確性。 ⚡ `Reviser` - 根據審查者的回饋修改研究結果。 ⚡ `Writer` - 負責編譯和撰寫最終報告。 ⚡ `Publisher` - 負責以各種格式發布最終報告。 自動化過程基於以下階段(架構),文章中清楚地顯示了這一點。 - 策劃階段。 - 資料收集和分析。 - 審查和修訂。 - 寫作並提交。 - 出版品. ![建築學](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zwpvlf859m9c6v8mttxk.png) 您可以閱讀有關正在發生的事情的[詳細步驟文件](https://github.com/assafelovic/gpt-researcher/tree/master/multi_agents?ref=blog.langchain.dev#steps)。 助手的最終運作將產生 Markdown、PDF 和 Docx 等格式的最終研究報告。 您可以閱讀這篇文章,其中介紹[如何透過多代理協作來建立終極人工智慧自動化](https://blog.langchain.dev/how-to-build-the-ultimate-ai-automation-with-multi-agent-collaboration/),其中 Wix 研發主管 Assaf Elovic 介紹如何使用 LangGraph 與專業代理團隊建立自主研究助理。它具有易於理解的程式碼範例,並清楚地說明正在發生的事情。開發者必讀! 最好的部分是,如果您想更改研究查詢並自訂報告,只需編輯主目錄中的`task.json`檔案。真的很棒:) 它由 GPT 研究人員負責,擁有 10k 顆星,但自從上次提交是在幾天前以來,它經常更新。 您可以檢查[GitHub 儲存庫](https://github.com/assafelovic/gpt-researcher/tree/master/multi_agents)。 ✅[僚機AI](https://github.com/e-johnstonn/wingmanAI) 。 --------------------------------------------------- ![僚機人工智慧](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ortnj43j63gx4riqvl4x.png) WingmanAI 是一款功能強大的工具,可與系統和麥克風音訊的即時轉錄進行互動。 它使用 ChatGPT,讓您與文字記錄即時交互,作為機器人的廣泛記憶體基礎,提供獨特的通訊平台。 當您載入指定人員的文字記錄時,機器人甚至可以回答有關過去對話的問題。 所有精彩功能的詳細介紹: ⚡ 它可以轉錄系統輸出和麥克風輸入音頻,讓您以易於閱讀的格式查看即時轉錄。 ⚡ 機器人以令牌有效的方式維護對話記錄,因為只有當前的文字區塊會傳遞給機器人。 ⚡ 您可以與 ChatGPT 支援的機器人聊天,機器人會即時讀取您的文字記錄。 ⚡ 您可以繼續附加到已儲存的記錄中,隨著時間的推移建立一個龐大的資料庫供機器人從中提取。 ⚡ 它允許您保存成績單以供將來使用。您可以稍後隨時加載它們,並且對機器人進行的任何查詢都將與保存的轉錄本的向量資料庫交叉引用,從而為機器人提供更豐富的上下文。 您可以閱讀[安裝說明](https://github.com/e-johnstonn/wingmanAI?tab=readme-ov-file#installation)。 您只需將 OpenAI API 金鑰放入`keys.env`檔案中並執行`main.py` 。 唯一的缺點是該應用程式目前僅與 Windows 相容。 Windows 用戶現在更高興了:) 您可以觀看[完整的示範影片](https://github.com/e-johnstonn/wingmanAI?tab=readme-ov-file#demo)。由於限制,下面所附的 gif 很短(86 秒中只有 30 秒)。 ![30 秒演示 gif](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gmosnsbwkkb76q83y46i.gif) 我對這個概念感到非常驚訝,因為我從來沒有想過它可以以這種方式實現。當開發人員用非常簡單的概念創造出一些很酷的東西時,感覺真的很棒:) 它在 GitHub 上有 420 多顆星,並且不再維護。但你可以用它來建造更好的東西。 您可以檢查[GitHub 儲存庫](https://github.com/e-johnstonn/wingmanAI)。 ✅[考試](https://github.com/codeacme17/examor)。 -------------------------------------------- ![前愛](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x4fh09yrwhnalr1oxgv4.png) 一款允許您根據知識筆記參加考試的應用程式。它可以讓您專注於您所學和所寫的內容🧠。 它不斷提示您提出問題以複習筆記內容,這對於學生、學者、受訪者和終身學習者非常有用。 專案管理員正在使用 next.js 重構專案,這對於使用`next.js`開發人員來說非常好。 讓我們來詳細分析一下一些很棒的功能: ⚡ 建立筆記時可以上傳相關文件。該應用程式根據這些文件的內容產生一組問題。這些問題將在未來呈現給大家。建立筆記時,您作為使用者還可以選擇要產生的問題類型。 ![問題選擇](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rp5seq1zpotaxej6dj6l.png) ⚡ 收到每日問題後,您可以提供答案。 GPT 將評分、驗證並提供正確答案。透過評估答案和連結文件的正確性來確定分數(0 ~ 10 分)。這個分數會影響隨後的艾賓浩斯評審過程。將會在未來的發布版本中進行最佳化。 ⚡ 角色可以為問題產生和評估提供更多可能性。您可以在設定頁面上設定角色。有關各種角色的更多訊息,建議參閱詳細的[角色手冊指南](https://github.com/codeacme17/examor/blob/main/docs/en-role.md)。 ![角色選擇](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n0zdohzkowcdrdnxjzba.png) ⚡ 練習問題時,可以用不同的方法作答。下圖顯示了單選題的範例。 ![回答問題](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yzg8vvuxndhw9v2s1x8c.png) ⚡ 它有一個包含多個[模組](https://github.com/codeacme17/examor?tab=readme-ov-file#-modules)的列表,例如`Examine` 、 `Note` 、 `Notes Management`和`Random Question`使用這些模組您可以在筆記中導入問題,刪除或加入新文件到上傳的筆記中,等等。 我喜歡整個概念,這會引起任何曾經面臨過修改筆記問題的人的注意。 您可以閱讀包含如何正確使用它的詳細指南的[文件](https://github.com/codeacme17/examor/blob/main/README.md)。 它在 GitHub 上有 1k star,目前版本為`v0.4.2` 。 您可以檢查[GitHub 儲存庫](https://github.com/codeacme17/examor)。 ✅[語音GPT](https://github.com/hahahumble/speechgpt) 。 --------------------------------------------------- ![語音GPT](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/on0exhy65owc13tzue0v.png) ![語音GPT](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4rrge2nyhowtcdyd3gi5.png) SpeechGPT 是一個 Web 應用程式,可讓您與 ChatGPT 進行對話。 您可以利用此應用程式來提高您的語言技能,或只是透過 ChatGPT 享受聊天的樂趣。 大多數人會說這有什麼獨特之處,但事實確實如此。 讓我們來打破一些很棒的功能: ⚡ 所有資料儲存在本地,隱私性更強。 ⚡ 根據文件,它支援 100 多種語言,但我在現場演示中只能看到對三種語言的支援。 ![語言](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g6e7jsrhmvrdlidyvnho.png) ⚡ 包含內建語音辨識以及與 Azure 語音服務的整合。 ![語音辨識](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gr2vsaymy50wtiperprd.png) ⚡ 包含內建語音合成,以及與 Amazon Polly 和 Azure 語音服務的整合。 ![語音合成](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2m3kp9othpa9rbb4it57.png) 請按照[文件中的教學](https://github.com/hahahumble/speechgpt?tab=readme-ov-file#-tutorial)了解如何使用它。 您可以在[speechgpt.app](https://speechgpt.app/)上觀看現場演示。這是一個完美的例子,說明了一些額外的功能如何將您的應用程式提升到一個新的水平! SpeechGPT 在 GitHub 上有 2700 顆星,目前版本為`v0.5.1` 。 您可以檢查[GitHub 儲存庫](https://github.com/hahahumble/speechgpt)。 ✅ [myGPTReader](https://github.com/madawei2699/myGPTReader) - 閱讀並與 AI 機器人聊天。 ---------------------------------------------------------------------------- ![我的GPT閱讀器](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/58doii8daomf54te5eca.png) myGPTReader 是 Slack 上的機器人,可以閱讀和總結任何網頁、文件(包括電子書),甚至來自 YouTube 的影片。它可以透過語音與您交流。 一些有價值的功能是: ⚡ 使用 myGPTReader 透過對話快速閱讀和理解任何網頁內容,甚至是影片(目前僅支援帶有字幕的 YouTube 影片)。 ![讀者](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x626mtnvqr5vw43938iw.gif) ⚡ 使用 myGPTReader 快速閱讀任何文件的內容,支援電子書、PDF、DOCX、TXT 和 Markdown。 ![文件](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5am7njxco7vhronuirgu.gif) ⚡ 透過與 myGPTReader 語音對話來練習外語,它可以成為您的私人導師,支援中文、英語、德語和日語。 ![嗓音](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/40pzlgtuhcyxgwa1z2gs.gif) ⚡ 內建大量提示模板,使用它們可以更好地與chatGPT對話。 ![問](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ehgn218hwewzeft98xkp.gif) ⚡ myGPTReader 每天發送最新熱點新聞,並自動產生摘要,讓您快速了解今日熱點。 您可以造訪[官方網站](https://www.myreader.io/)。 您可以加入擁有超過 5000 名會員的儲存庫上的 Slack 頻道,免費體驗所有這些功能。 它們在 GitHub 上有 4.4k 顆星,並且像此列表中的其他專案一樣使用 Python 建置。 您可以檢查[GitHub 儲存庫](https://github.com/madawei2699/myGPTReader)。 ✅ [RepoChat](https://github.com/pnkvalavala/repochat) - 支援 GitHub 儲存庫互動的聊天機器人助理。 -------------------------------------------------------------------------------- ![重新聊天](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gf9bjn2a47f1t43aiju.png) Repochat 是一個互動式聊天機器人專案,旨在使用大型語言模型 (LLM) 參與有關 GitHub 儲存庫的對話。 它允許用戶進行有意義的討論、提出問題並從 GitHub 儲存庫檢索相關資訊。本自述文件提供了在本機電腦上設定和使用 Repochat 的逐步說明。 他們建立了兩個具有不同功能的分支,這對我來說有點新鮮。 ⚡ Repochat 的主要分支被設計為完全在本機上執行。此版本的 Repochat 不依賴外部 API 呼叫,並且可以更好地控制您的資料和處理。如果您正在尋找獨立的解決方案,那麼主分支就是您的最佳選擇。 ⚡ Repochat 的雲端分支主要依賴對外部服務的 API 呼叫來進行模型推理和儲存。它非常適合那些喜歡基於雲端的解決方案並且不想設定本地環境的人。 您可以閱讀[安裝說明](https://github.com/pnkvalavala/repochat?tab=readme-ov-file#installation)。 Repochat 讓您與聊天機器人進行對話。您可以提出問題或提供輸入,聊天機器人將從向量資料庫中檢索相關文件。 然後,它將您的輸入以及檢索到的文件傳送到語言模型以產生回應。 預設情況下,我已將模型設為`codellama-7b-instruct` ,但您可以根據計算機的速度更改它,甚至可以嘗試 13b 量化模型進行回應。 聊天機器人在對話過程中保留記憶以提供上下文相關的回應。 您可以查看[即時網站](https://repochat.streamlit.app/),您可以使用 API 金鑰進行檢查。 你可以觀看這個演示! ![示範](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7ndxqpwkkww4f5qudiq.gif) 如果您想查看的話,我找到了另一種[選擇](https://github.com/peterw/Chat-with-Github-Repo)。 Repochat 擁有 200 多顆星,並部署在 Streamlit 上。 您可以檢查[GitHub 儲存庫](https://github.com/pnkvalavala/repochat)。 ✅ [NextChat - ChatGPT Next Web](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web) 。 ------------------------------------------------------------------------------------- ![下次聊天](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lnuqjkfcyz8z7kejgbb1.png) 這不是一個典型的副專案,因為程式碼庫足夠大,但值得一看作為靈感。 您只需一鍵即可獲得精心設計的跨平台 ChatGPT Web UI,支援 GPT3、GPT4 和 Gemini Pro(Web / PWA / Linux / Win / MacOS)。 一些很棒的功能是: ⚡ 隱私 首先,所有資料都儲存在瀏覽器本地。 ⚡ 首屏載入速度快(~100kb),支援串流響應。 ⚡ 自動壓縮聊天歷史記錄以支援長時間對話,同時儲存您的代幣。 ⚡ Linux/Windows/MacOS 上的緊湊型用戶端 (~5MB)。 ⚡ 您只需在 Vercel 上一鍵點擊即可在 1 分鐘內免費部署。 ⚡ 與自行部署的法學碩士完全相容。 ⚡ Markdown 支援:LaTex、mermaid、程式碼高亮等。 ![下次聊天](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2uvdfwz1rgy1l2l4pb9p.png) 您可以查看 NextChat 的[現場演示](https://app.nextchat.dev/)和[文件,](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web?tab=readme-ov-file#roadmap)其中包括所有環境變數(主要是 API 金鑰)的清單。 ![下次聊天](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fqykjwgjf35khapdfu20.png) 在本地處理它並不難,他們還提供了 GitHub 操作工作流程,每小時都會自動更新。 NextChat 在 GitHub 上擁有 69k+ 顆星,目前已發布`v2.2`版本。 您可以檢查[GitHub 儲存庫](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web)。 --- 如果您喜歡觀看教程來建立專案,我有一些很好的建議。 🎯 [LangChain GEN AI 教學 – 使用 OpenAI、Google Gemini Pro、LLAMA2 的 6 個端到端專案](https://www.youtube.com/watch?v=x0AnCE9SE4A)– 4 小時。 本教學涵蓋的專案: ✅ LangChain 速成課程 - 打下基礎。 ✅ 使用 Langchain 和 Astradb 與 PDF 聊天。 ✅ 使用 Llama 2 LLM 模型產生部落格。 ✅ 使用 Pinecone VectorDB 的端到端法學碩士課程。 ✅ Google Gemini 專業版示範。 ✅ 多語言發票提取器 LLM 專案。 ✅ 使用 Gemini Pro API 的對話式問答聊天機器人。 {% 嵌入 https://www.youtube.com/watch?v=x0AnCE9SE4A %} 🎯 Streamlit 的 LangChain 速成課程。 本教學涵蓋的專案: ✅ 發票資料提取器。 ✅ 針對自訂資料的基本 QA。 ✅ 總結和有用的鏈類型。 ✅ WordPress 程式碼助理。 ✅ 將語音備忘錄轉換為文字。 你可以找到[速成課程](https://learnlangchain.streamlit.app/)。側邊欄中將有一個關於實踐專案的部分! --- 這麼多很棒的專案:) 但說實話,我見過很多開發人員建立相同的應用程式,您可以獲得無限的靈感。我希望你喜歡這個。 繼續,保存它,並建造每一個,以展示誰是技術老大! 讓我知道哪個專案最讓你驚訝。 祝你有美好的一天!直到下一次。 |如果你喜歡這類東西, 請關注我以了解更多:) | [![用戶名 Anmol_Codes 的 Twitter 個人資料](https://img.shields.io/badge/Twitter-d5d5d5?style=for-the-badge&logo=x&logoColor=0A0209)](https://twitter.com/Anmol_Codes) [![用戶名 Anmol-Baranwal 的 GitHub 個人資料](https://img.shields.io/badge/github-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/Anmol-Baranwal) [![用戶名 Anmol-Baranwal 的 LinkedIn 個人資料](https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/Anmol-Baranwal/) | |------------|----------| 請關注 Copilotkit 以獲取更多此類內容。 {% 嵌入 https://dev.to/copilotkit %} --- 原文出處:https://dev.to/copilotkit/20-projects-you-can-build-with-ai-today-352k

🚀 科技影響者和內容作者賺錢的最簡單方法 💰

在過去兩年裡,我與 100 多名創辦人交談過。他們都面臨著同樣的問題──找不到好的內容作者和影響者。 另一方面,我遇到了許多內容作者和影響者遇到的困難: - 上班 - 管理他們的訂單 - 透過賺錢保證自己的安全 這就是[Gitroom 的](https://git.sn/gitroom-dev)閃光點 TL;DR:它是免費的。您可以註冊並賺錢。 --------------------- ![賺錢](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ag2oygkavq20a6kom4n0.gif) --- 為什麼不一樣呢? -------- 如今, [Gitroom](https://gitroom.com)是最著名的開源創辦人開源社群之一。他們中的許多人都有資金支持——他們的問題不是花錢,而是找到合適的人來花錢。 下週,我們將為社區的新作家和影響者舉辦一場盛大的發布會 - 所以你想參加。 Gitroom 與[Fiverr](https://www.fiverr.com/)非常相似。 1. 您在平台上列出自己。 創辦人聯絡您進行晉升。 2. 您向他們發送每個帖子的報價。 3. 他們支付費用,他們的錢將由 Gitroom 持有。 4. 您開始從系統內部建立貼文(是的,Gitroom 也是一個調度工具) 5. 他們批准你的帖子 6. 發布後,Gitroom 會自動向您發送資金。 Gitroom 的技巧在於,貼文是從 Gitroom 內部發出的,因此您受到 100% 的保護。 ![安全的](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7pzzxq8rv7s394o6bffg.png) --- 如何開始 ---- 前往[Gitroom 平台](https://git.sn/gitroom-dev)並註冊。 ![Gitroom 註冊](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q0i9cnqmw37000xmznv8.png) 然後,完成入職;非常重要的是: 1. 您新增您的姓名、個人簡介和個人資料圖片。 2. 連接您的社交媒體平台,以便您稍後可以提供它們。 ![入職](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v75zgd1nwcfoxr7tewwa.png) 以賣家身分進入市場,連接您的銀行帳戶,並加入您的專業知識。 ![市場](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/me9nk0qgwqtrk2yaur2m.png) --- 我做完。現在做什麼? ---------- 只需等待收件匣中發送有關新優惠的電子郵件即可。 此外, [Gitroom 是完全開源的](https://github.com/gitroomhq/gitroom/)。 因此,請隨意檢查程式碼並查看是否一切正常。 您也可以建議新功能/貢獻一些程式碼:) 目前,您不需要申請加入該平台,但如果我開始收到大量垃圾郵件,我會更改它。 讓我知道你對這個系統的看法❤️ --- 原文出處:https://dev.to/github20k/the-easiest-way-tech-influencers-and-content-writers-can-make-money-4n90

被開除的心路歷程

![射擊](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aro2mn9dgxz28sc68di5.jpg) 不久前,我從高級開發人員的職位被解雇了,在此之前我從未被解僱過,無論我走到哪裡,我一直都是中等到頂級的表現,並且一直受到同事的喜愛,但這裡的情況卻大不相同。 我當時在哪裡 ------ 我離開了以前的工作,因為他們遇到了財務問題,而且我已經在那裡工作了一段時間,覺得自己的角色已經變得陳舊,我是高級開發人員和團隊負責人的混合體,我的團隊到最後只剩下我了。 我變得沒有動力,我的團隊不知疲倦地工作的公司主要專案之一被取消了。由於公司必須轉型,一年多來的工作實質上都被丟進了垃圾箱。 所以我開始尋找另一份工作,我不想要另一個發展職位,我想要更多的挑戰,我想要擴展自己。我看到一家顧問公司正在尋找一位開發人員,希望能夠從事一些很酷的專案。我申請了,通過了他們的測試,通過了面試,準備嘗試新的東西。 ![風暴](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ymelx2tsgdr6mlucvmur.jpg) 走進暴風雨 ----- 在我加入之前,我參加了這家公司的夏季聚會,沒有任何危險信號,人們看起來很高興,業主看起來也很好。 我拿到了筆記型電腦和一個漂亮的迎賓禮盒,我真的很興奮,準備重新振作起來,抓住這個機會。 我做了正常的人力資源工作,在第一天設定了我的環境,然後被告知我應該繼續的專案尚未獲得批准。被告知開始關注我的認證,並被告知專案何時準備就緒。 突然接到一位業主的電話,說有一個前端專案需要資源來加速進度。技術堆疊有點超出了我的舒適區,但想要給人留下深刻的印象並表明我相當多才多藝,就像確信我能做到一樣,我解釋說我需要加快使用所使用的技術堆疊的速度,並獲得了大約一半的時間閱讀我需要的內容的一天。 烏雲密佈 --- 我遇到了該專案的首席開發人員,雖然他有點友好,但他似乎對我沒有技術堆疊經驗感到相當不高興,但他給我分配了一些任務,然後讓我去做,直到…一個小時後,他打電話給我,問我過得怎麼樣。告訴他,努力讓專案在本地執行,他和我一起完成了編譯和執行,有一些環和資料庫條目讓我執行。 任務本身很簡單,但我無法弄清楚所使用的編碼風格和模式。事後看來,這個計畫的一些決定有點值得懷疑。 我每兩個小時就會接到電話詢問進度,並會收到評論,例如你們進展緩慢,我們落後了,然後很快就保證我們會到達目標。很快我就從「我可以征服任何事情」變成了「也許我作為開發人員很糟糕」。 看起來要開始下雨了 --------- 我確實沒有交到任何朋友,也沒有與這家公司的人建立任何密切的聯繫。我感到非常孤獨,從派對生活變成一個非常內向和保守的人,這真是令人震驚。我還沒有完全從這件事中恢復過來,我現在還是比較安靜,不會說太多話。 這種情況又持續了兩週,一直對我進行微觀管理的開發人員需要休假,並給了我一週的任務。 他完成了有問題的任務,我們給了他們估計,此時我開始變得有點矛盾,我是否能夠完成我的工作。 這些任務在紙上很簡單,但實際上我花了很多時間嘗試瀏覽程式碼庫。有時我會分心,看太多 YouTube 影片,很快就會失去注意力。我不再關心,此時,開始找工作,解釋我覺得我在這個角色上犯了錯。 ![噢,雷鳴般的](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l661a91r5htrz4ntiqy6.jpg) 現在雷聲大作 ------ 另一位開發人員度假回來後,他似乎對我沒有完成所有任務感到憤怒,我確實為我設法完成的任務提出了 PR,但他的半令人放心的台詞回來了“我們會完成它”。 一天快結束時,我收到了人力資源部門發來的一封不祥的電子郵件,告訴我客戶不滿意,我已經完成了對該專案所做的所有工作的審核。 我完成了審計並回信說,我對客戶沒有向我提出這個問題感到失望,回想起來,這是一個非常糟糕的主意。下一分鐘我就收到了隔天早上召開人力資源會議的請求。 雷擊 -- 在人力資源電話中,很快就告訴我要被解僱,我知道為什麼,我沒有費心去抗爭或爭論,我接受了它,現在接受了我新發現的失業。 在那之後的幾天裡,我感到很生氣,這表明我對面試官失去了冷靜,對這個世界普遍感到不安。我給了自己幾天悶悶不樂的時間,然後重新上馬並找到了一家更好的諮詢公司,儘管我的角色不太注重開發人員。 反思 -- 我寫這篇文章的原因是,被解僱是可以的,是的,這很可怕,而且尋找新角色的不確定性,特別是在當今的市場上,是一種可怕的感覺,但正如偉大的首席開發人員會說「我們會到達那裡」。 反思這一點,我需要休息一下,我以前的角色到這個可怕的角色是如此充實,我經歷了一些重大的生活事件和一些普遍困難的時期,去年,我搬了家,我的兒子出生並換了工作。我注定會崩潰,我的通知期很長,我應該在角色之間休息一些時間。 我還認為我應該從開發中休息一下,我覺得我在這個階段確實失去了對開發的熱情,而進入我現在所擔任的角色幫助我通過遠離開發一步來重新激發了我對開發的熱情。 我不應該那麼急於接受任何專案,我應該直截了當地說我不認為我可以勝任這個角色,請為我找到另一個專案,也應該儘早標記我不認為我可以勝任這個角色工作。 我應該更以客戶為中心,如今,只需與客戶交談就可以幫助我克服一些障礙。 對於首席開發人員,我理解他們承受的壓力,我不會因為我的失敗而抨擊他們或責備他們。然而,作為現在的團隊領導,我確保自己保持專業,鼓勵我的團隊成員,並確保回饋是建設性的,而不是一系列帶有虛假保證的挖掘。 歸根結底,被解僱並不是你生命的終結,甚至不是你職業生涯的終結,你可以重新振作起來,並將其作為一種學習經驗。 ![反思](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o6baqjwghqu6svzrmkn6.jpg) --- 原文出處:https://dev.to/darkliahos/so-i-got-fired-3ko5

成為資深前端開發者需要的 37 個心態

我真的很喜歡 @abbeyperini 的[帖子](https://dev.to/abbeyperini/12-tips-from-a-mid-level-developer-29bk),並決定在擔任軟體開發人員**5 年多**後分享我的技巧。 準備好?讓我們深入探討。 1.掌握基礎知識 ======== 建在搖搖欲墜的土地上的房子🏠,稍有問題就會倒塌。 同樣,如果你沒有紮實的基礎: - 你會很難適應 JavaScript 框架 - 你會陷入第一個不熟悉的問題 - 您無法掌握某些問題之間的共同主題 因此,如果你想提升前端開發人員的水平,首先要掌握**HTML** 、 **CSS**和**JavaScript** 。 --- 2. 了解網路的工作原理 ============ 在過去的幾年裡,前端開發變得更加複雜。 使用了許多工具(*捆綁器*、*轉譯器*等) 如果您不了解網路的工作原理(即「唯一」支援的語言是**HTML** (用於結構)、 **CSS** (用於樣式)和**JavaScript** (用於互動)),您將很難理解為什麼需要有這麼多工具可以在線執行您的程式碼。 ![建築模組](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/miha7y379n9wnemtnhdi.gif) --- 3.熟悉資料結構與演算法 ============ 由於程式設計面試,資料結構和演算法經常受到不好的評價🤦‍♀️。 **然而**,了解關鍵因素及其複雜性至關重要。如果沒有這些知識,您將無法編寫複雜的程式或評估程式碼效率。 以下是需要了解的資料結構/演算法的非詳盡列表: **資料結構:***棧*、*佇列*、*雜湊圖*、*集合*、*圖*等。 **演算法:***動態規劃*、*貪心演算法*、*遞迴*等。 --- 4. 透過實踐而不是閱讀/觀看來學習 ================== 教學會欺騙您,讓您感覺自己正在取得進步。 它們讓你相信你正在學習和進步,但你並沒有前進。真正的學習是透過實踐或教學發生的。 所以,多多練習,避免陷入教學地獄🔥。 --- 5.遇到困難時尋求協助 =========== 你不是一個人。 您附近很可能有高級開發人員,您可以向他們尋求協助。 所以,不要浪費時間去兔子洞裡。您的目標是提供價值,如果您浪費時間解決其他人已經解決的問題,您就無法實現這一目標。 ![請求幫忙](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iksbkr0yvd3gqh4x22d5.png) --- 6.以正確的方式尋求協助 ============ 在尋求幫助之前,請確保您已經做了最低限度的事情。 你應該首先: - 在 Google/Stack Overflow/ChatGPT 上搜尋解決方案 - 了解你的目標以及什麼不起作用 - 記錄所有失敗的嘗試 另外,不要針對同一問題重複尋求協助。當您獲得幫助時,請在某處記下,以免忘記。 --- 7. 不要複製/貼上你不理解的程式碼 ================== 由於多種原因,這非常糟糕: - 您最終可能會得到不安全的程式碼,這些程式碼會暴露令牌等敏感資訊。 - 您將無法輕鬆除錯程式碼。 - 你將無法向你的同事解釋它。 這對 ChatGPT 尤其重要,因為它有時只能提供 80% 的準確答案。 ![困惑的表情符號](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sfansm0i6qss45kkcz8a.png) --- 8. 不要盲目採納網路上找到的每一個建議 ==================== 我剛開始的時候就犯了這個錯誤。 我發現有人建議說 React 中的記憶化是邪惡的,所以我停止使用它。 令我尷尬的是,我的程式碼在預生產中崩潰了。 所以,別讓我「老」了。 當您在網路上看到建議時,請先問自己以下問題: - 這個建議適用於我嗎? - 提供建議的人是否與我的情況類似? **TLDR** :運用常識🫠。 --- 9. 懷抱良好的意願:人們希望你成功❤️ ==================== 當你是新人時,人們通常會認為人們正在等待發現你的錯誤並解僱你。 至少,這是我的思想對我低聲說的。 但事實恰恰相反。 當一家公司僱用你時,它非常希望你成功。否則,這就是浪費他們在培訓和入職方面投入的時間和資源。 因此,相信你的公司希望你做得很好,並毫不猶豫地向你的同事尋求支持。 --- 10.完成勝於完美 ========= 追求完美往往會導致以下結果: - 拖延 - 浪費時間 - 過於複雜 - ETC。 因此,目標是在推動更多之前交付/驗證 V0。 ![做完比求完美強](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u146x2ia7stie8eyvwpa.png) --- 11. 始終將任務分解為可管理的任務 ================== 感到不知所措的最簡單方法是什麼? 👉 試圖咬得比你能咀嚼的更多。 始終將專案分解為更小的任務。 這會: - 讓你不會感到不知所措 - 讓您的 PR(拉取請求)更容易審核 - 提供進步感 --- 12. 值得信賴,當你需要幫助時會伸出援手 ===================== 剛開始時,您的首要任務是贏得經理的信任。 當他們想到你時,應該安心。 他們應該相信: - 你在簡單的任務上很可靠 - 必要時您會尋求協助 - 有任何問題你都會溝通 您不想因為成為經理必須持續監控的問題而增加他們的工作量🔎。 --- 13.表現出對工作的熱情 ============ 用熱情可以彌補很多不足🤪。 當你是新人時,要充滿渴望和興奮。 只有經驗豐富的開發人員才能承受缺乏熱情的後果。 沒有人願意不斷地督促某人工作。指導已經夠困難的了;必須激勵某人會使事情變得更具挑戰性。 ![熱情](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmc0s50vm86bam0069nw.png) --- 14. 對學習新事物/工具/方法保持開放態度 ====================== 前端開發不斷發展。 因此,您需要對新技術持開放態度。 不要太拘泥於現有的工具。相反,表現出學習的興趣😋。 --- 15. 掌握你的開發工具🛠️ ============== 想要加快您的開發時間嗎? 掌握你的開發工具: - 您的 IDE(例如 VSCode) - 您的原始碼控制系統(例如 Github) - 您的瀏覽器和檢查器(例如 Chrome 檢查器) - ETC。 ![工具包](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9h6zn8k68yghmb0ecffh.png) --- 16. 專注於創造價值 =========== 不要在真空中編寫程式碼。 您編寫的每段程式碼都應該為以下方面提供價值: - 您的客戶 - 你的公司 - 您的利害關係人 - ETC。 您的報酬與您提供的價值掛鉤,而不是與您編寫的程式碼掛鉤。 因此,優先考慮編寫有目的的有效程式碼🥅。 --- 17. 為你的工作辯護:它不會自己說話 =================== 可能是新開發人員最常見的錯誤之一(特別是如果您來自重視謙虛的文化)。 1. 你做了一些了不起的事。 2. 沒有人知道這件事。 👉 那工作並不重要。 因此,透過寫作、演示等方式分享您的作品。 ![為你的工作說話](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t55ep1c3phxgypwchbfh.png) --- 18. 喜歡寫愚蠢的程式碼而不是聰明的程式碼 ====================== 程式碼被閱讀的次數遠多於寫的次數📝。 因此,不要編寫只有您才能理解的聰明程式碼。 **可讀性>效能>聰明。** 您希望您的同事能夠有效率地處理您的程式碼,並在必要時為您提供協助等。 --- 19.你的經理是你最好的盟友 ============== 除非你特別不幸,否則你的經理會支持你的成長📈。 他們通常希望你能夠蓬勃發展,為團隊做出貢獻,並留在公司,而不是在其他地方尋找機會。 因此,請務必招募他們來實現您的目標。 分享你的勝利、挫折(以積極的方式)和挫折,而不是獨自奮鬥。 --- 20.讓你的經理的生活更輕鬆 ============== 這個很簡單,但常被忽略。 您的經理可能有您可以協助解決的問題: - 他們可能需要加入文件但缺乏時間 - 他們的工作量可能龐大,需要支持 - 和更多 這可能是贏得經理支持(升遷、加薪等)的最簡單方法。他們已經意識到這些任務並且可以直接看到它們的影響(至少對他們來說)。 ![最佳老闆杯](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yz4tz3h7o12oh4x4f0lg.png) --- 21.了解任務背後的大局 ============ 不要成為程式碼猴子🐒。 剛開始時它可能會對您很有幫助。 但要達到下一個級別,您需要了解任務背後的背景: - 為什麼它們有價值 - 為什麼你被分配給他們 - 它們如何適應公司的整體策略 這種理解對於您的職業生涯更上一層樓至關重要。 --- 22. 為團隊做出貢獻(文件、技術講座、演示等) ======================== 這不僅對公司有利,對您也有利。 透過進行演示、共享文件等,您可以展示您的技能並提高團隊的生產力。 始終致力於盡可能提升團隊的表現:這是令人愉快且有益的😊。 ![貢獻](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbmz4r1ucrrqe84mpq6f.png) --- 23. 成為特定領域的“掌門人” ================ 如果我必須提供一個建議,那就是這個。 在職業生涯的初期,探索各個領域是可以的。 但是,要晉升到中/高級級別,請專注於培養某一領域的專業知識。這對於促銷來說比多個領域的平均水平更具吸引力。 因此,我們的目標是培養[T 型](https://www.forbes.com/sites/lisabodell/2020/08/28/futurethink-forecasts-t-shaped-teams-are-the-future-of-work/)技能:在某一領域擁有廣泛的知識和深厚的專業知識。 --- 24. 培養你的溝通技巧 ============ 不幸的是,這是必須的。 溝通對於開發人員來說至關重要。我們經常需要做以下事情: - RFC(徵求意見) - 示範 - 演講 - ETC。 因此,請確保您具有基本的溝通能力。 --- 25. 當你遇到問題時休息一下 =============== 當你深陷一個問題時,很難停下來。 即使已經過去了 5 年多,我仍然在掙扎🥹。 然而,休息後我總是會產生更新鮮的想法。 所以,如果你已經被困太久了,那就離開吧。 ![休息](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/96yk7dr61s2sc7rflive.png) --- 26. 發揮你的優勢,而不是劣勢 ================ 不要再浪費時間試圖修復明顯的弱點。 如果您持續花費超過 1 小時才能完成同您級別的其他人在不到 5 分鐘內完成的任務,請避開該任務。 投入更多的精力很可能不會讓你在這方面表現出色。 相反,做必要的事情並專注於最大限度地發揮你的優勢。如果某件事對你來說很自然且有價值,那就多做一點吧🚀。 --- 27. 掌控自己的職涯道路 ============= 沒有人會為你規劃你的職涯。 如果沒有計劃,你就會為別人的計劃而努力。 因此,請確保您為自己想要在 1/2/5 年內實現的目標制定計劃 💪。 --- 28. 與其他開發人員一起交流 =============== 您目前是否患有冒名頂替症候群? 如果是這樣,請花時間與其他開發人員交流。 您很快就會意識到您並不孤單。 與其他開發人員聯繫還有其他好處: - 您可以學習新的技巧/技巧 - 你們可以討論共同的經歷 - 你們可以在工作上互相補充 - ETC。 ![朋友們](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y9r46ijzzv99jfdjrssa.png) --- 29. 指導年輕開發人員 ============ 這是冒名頂替症候群的最佳治療方法之一。 一旦你開始指導年輕的開發人員: - 你會發現你知道一些事情 - 您將把自己定位為中/高級開發人員 - ETC。 --- 30.讓你解決的問題多樣化 ============= 如果你不斷地解決同樣的問題,你的進步就會趨於穩定。 確保您正在解決不同的問題,以便您可以: - 比較各種方法 - 開發解決問題的工具包 - ETC。 ![雞蛋放在多個籃子裡](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hllqddeurnt0bx03m2md.png) --- 31.尋找導師 ======= 擁有偉大的導師是我職業生涯的亮點。 - 導師了解您的旅程,讓您腳踏實地。 - 他們會指導你避免他們所犯的錯誤。 - ETC。 **如何尋找導師?** 與您互動的更有經驗的開發人員聯繫,提出問題,討論他們的經驗等。 如果您無法聯繫資深開發人員,請與 X 等平台上的個人互動,與他們建立關係,然後聯絡 😉。 --- 32. 致力於 JavaScript 框架並掌握它 ========================= 最好的框架是能夠幫助您最快實現目標的框架。 所以,忽略網路上毫無意義的爭論。 選擇您最熟悉或需要學習的框架。 並掌握它。這就足夠了。 有了紮實的 JavaScript 基礎知識,過渡到另一個框架將會很快。 ![合約](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s7p9c7u02uqv5b8fhxew.png) --- 33.不斷思考使用者體驗 ============ 身為前端開發人員,你應該考慮使用者。 即使您有 PM 或設計師,也要確保使用者體驗良好 😌。 - 需要時使用載入狀態 - 在 UI 中傳達進度 - 給用戶回饋 - ETC。 --- 34. 坦然地說“不” =========== 這對我來說是一件艱難的事。 我對每一個專案都感到興奮,並努力拒絕。 但身為開發人員,您經常會收到超出您處理能力的請求。 因此,請優先考慮與您的目標最相符的那些。 --- 35.不斷投資你的技能 =========== 選擇成為前端開發人員,您就致力於從事必須不斷學習的職業。 因此,透過學習新語言、掌握新技術等不斷投資你的技能。 ![技能](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l2lptuajtkra0p080nnc.png) --- 36. 當面臨太多工作時,減少功能而不是提高程式碼品質。 ============================ 您的應用程式擁有的功能越多越好,對嗎?正確的? 最初,這似乎是正確的,但附加的功能會導致更多的程式碼。更多的程式碼意味著更多的問題(維護、錯誤等)。 因此,當時間緊迫時,應減少功能而不是犧牲程式碼品質。 --- 37. 努力了解你的合作者(設計師、後端開發人員等) ========================== 始終尊重您的合作者(後端開發人員、設計師、產品經理等)。 應用程式開發是團隊的努力。 團隊成員之間的協同越多,環境就會越快樂、越有效🥰。 ![交朋友](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1vdbfdepvkkxdug91noo.gif) --- 感謝您閱讀這篇文章🙏。 發表評論 📩 分享小貼士。 並且不要忘記加上“💖🦄🔥”。 如果您喜歡這樣的文章,請加入我的**免費時事**通訊**[FrontendJoy](https://frontendjoy.substack.com/)** 。 如果您想要每日提示,請在[X/Twitter](https://twitter.com/_ndeyefatoudiop)上找到我。 --- 原文出處:https://dev.to/_ndeyefatoudiop/37-tips-from-a-senior-frontend-developer-251b

使用 Typescript 和 Jest 進行單元測試

--- 標題:使用 Typescript 和 Jest 進行單元測試 發表:真實 描述: 標籤: typescript、javascript、玩笑、單元測試 --- ![vscode-is](https://thepracticaldev.s3.amazonaws.com/i/gd97g4kdyk1bpdeyfqst.png) *原文發佈於<https://muhajirframe.com/writing/unit-test-typescript-jest/>* 在本文中,我們將嘗試介紹 Typescript + jest 中的簡單單元測試。 我們將建立一個簡單的實用程式來檢測 url 是內部連結還是外部連結。 例如`https://www.google.com`是外部連結,而`/page1`是內部連結。我們將專案命名為`is-internal-link` ,但您可以將其命名為任何名稱。 先決條件 ---- - NodeJS - VSCode + Jest 外掛程式(可選) 建立新目錄 ``` mkdir is-internal-link ``` 初始化 npm ``` npm init ``` 安裝依賴項 ``` npm install --save-dev @types/jest @types/node jest ts-jest typescript ``` 建立`jest.config.js` ``` module.exports = { roots: ['<rootDir>/src'], transform: { '^.+\\.tsx?$': 'ts-jest', }, testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], } ``` 建立`tsconfig.json` ``` { "compilerOptions": { "target": "es5", "module": "commonjs", "lib": ["es2015"], "strict": true, "declaration": true, "outDir": "dist", "sourceMap": true }, "include": ["src/**/*"], "exclude": ["node_modules", "**/*.spec.ts"] } ``` 好了,我們準備好要寫程式碼了。建立檔案`src/main.ts`和`src/main.spec.ts` 您的文件樹現在應該如下所示 ``` . ├── node_modules ├── package-lock.json ├── package.json ├── src │ ├── main.spec.ts │ └── main.ts └── tsconfig.json ``` 在您最喜歡的編輯器中打開它。 (VSCode / Atom / Sublime / 等)。 我個人使用VSCode ``` import { isInternalLink } from './main' test('should return false given external link', () => { expect(isInternalLink('https://google.com')).toBe(false) }) test('should return true given internal link', () => { expect(isInternalLink('/some-page')).toBe(true) }) ``` 現在有辦法測試這一點。 ### 方式一 打開你的`package.json` 。並將其替換為您的`scripts` ``` "scripts": { "test": "jest" }, ``` 執行`npm run test` 。 現在您應該看到錯誤,因為我們還沒有實作程式碼,對嗎? ### 方式2 使用您的編輯器外掛程式。我比較喜歡這種方式。我只會在 VSCode 上展示它。您最喜歡的編輯器可能也有它。 安裝[vscode - 是](https://github.com/jest-community/vscode-jest) ![vscode-is](https://github.com/jest-community/vscode-jest/raw/master/images/vscode-jest.gif) 這個 GIF 應該是一個很好的解釋 vscode-jest 是如何運作的 我們繼續吧。 ![vscode-is](https://thepracticaldev.s3.amazonaws.com/i/38h9s3601vnvzl75wouf.png) 您的 VSCode 現在可能如下所示。 ### 實施程式碼 讓我們實作我們的`main.ts` ``` export const isInternalLink = (link: string) => /^\/(?!\/)/.test(link) ``` 切換回`main.spec.ts` 。現在您應該看到錯誤消失了,並且它變成了綠色。 專業提示:使用[VSCode 分割編輯器](https://code.visualstudio.com/docs/getstarted/userinterface#_side-by-side-editing)同時檢視程式碼 ( `main.ts` ) 和規格 ( `main.spec.ts` )。 長話短說 在第一面開啟`main.ts` `cmd+1` `cmd+p` `main.ts` 打開第二面的`main.spec.ts` `cmd+2` `cmd+p1` `main.spec.ts` *附註:我是 VSCode 和 Vim 的忠實粉絲,我有很多關於如何使用 VSCode 提高工作效率的技巧。如果你們有興趣的話請在評論中告訴我,我可以在這裡寫下來* 恭喜! 您剛剛使用 Typescript 和 Jest 進行了單元測試 --- 原文出處:https://dev.to/muhajirdev/unit-testing-with-typescript-and-jest-2gln

48 小時內更改資料庫 5 次,使我們的發布瀏覽量達到 35,000 次

這個故事的開始方式和它的標題一樣古怪。我於 2021 年開始[整合推理](https://integrated-reasoning.com/),以找出在解決[背包問題](https://en.wikipedia.org/wiki/Knapsack_problem)(例如 9、33 和 65 位元暫存器)時使用[任意精度](https://docs.amd.com/r/en-US/ug1399-vitis-hls/Overview-of-Arbitrary-Precision-Integer-Data-Types)整數會發生什麼。我的想法是,靈活的字長將使解決背包問題的[偽多項式時間演算法](https://en.wikipedia.org/wiki/Pseudo-polynomial_time#Knapsack_problem)更有效。簡而言之,它確實有幫助,但最大的收益來自[管道化](https://www.xilinx.com/developer/articles/task-level-parallelism-and-pipelining-in-hls.html)。 快進到 2024 年 4 月[中旬](https://irx.app)。我們規劃了一個 MVP,從本質上將執行[HiGHS](https://github.com/ERGO-Code/HiGHS)等開源求解器的體驗從命令列轉移到瀏覽器中。賣點是這些過程可能需要數月或更長時間才能完成,並且不必爭論它們將幫助我們的用戶專注於優化而不是執行優化所需的基礎設施。 將日誌從 AWS 即時推送到瀏覽器是我以前從未做過的事情。我認為這與[從 LLM 串流文字](https://vercel.com/docs/recipes/streaming-from-llm)的問題大致相似,這是我以前從未做過的事情,最近已經有了大量的發展。一方面,即時日誌事件對 MVP 來說可能有些過大了。另一方面,即時渲染日誌看起來很漂亮,並且可以幫助我們提供像命令列一樣流暢的使用者體驗。我們就這麼做了。 ![irx.app](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f5ncdab8cecwrfidgv5o.png) 我們最初的計劃是使用[Prisma Pulse](https://www.prisma.io/docs/pulse/what-is-pulse)在邊緣函數中訂閱 Postgres 寫入,該邊緣函數使用[Vercel 串流回應](https://vercel.com/docs/functions/streaming)將每一行標準輸出從[HiGHS](https://github.com/ERGO-Code/HiGHS) 、 [CBC](https://github.com/coin-or/Cbc)和[SCIP](https://github.com/scipopt/scip)傳送到瀏覽器。除了複雜性之外,該計劃還存在兩個主要問題。找到一個具有正確的[表複製功能](https://www.prisma.io/docs/pulse/database-setup/general-database-instructions)組合來滿足 Pulse 和我們後端的要求的託管 Postgres 實例並非易事,這導致了本文標題前半部分的荒謬之處。兩天內五次更換 Postgres 提供者所引發的一系列事件仍然令我震驚。 ![螞蟻威爾森推特](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/42o4f7nsoane5mzl3bap.png) 當來自 Supabase 的 Long ( [@beertocode](https://x.com/beertocode) ) 提出挑戰時,骨牌效應開始了。他解釋說,他希望為使用 Supabase 進行建造的新人提供額外的推動力。如果我們在兩週內與 Supabase 一起建立並發布,他們將利用社交媒體上的超級粉絲來使此次發布成為一項重大活動。挑戰被接受了,挑戰確實如此。 在評估資料庫選項時,社群媒體機會通常不被考慮在內。然而,我們的發布目標是收集盡可能多的用戶回饋,因此這是我們不能忽視的因素。我對 Supabase 的產品幾乎一無所知,因此花了一個下午的時間閱讀了他們的所有文件。到那天晚上,我對於如何建立 IRX 有了一個完全不同、更簡單的思維模型。 Supabase 的[匿名登入](https://supabase.com/docs/guides/auth/auth-anonymous)功能與[行級安全性相](https://supabase.com/docs/guides/auth/row-level-security)結合,這意味著人們可以在發布當天使用 IRX,而無需執行註冊程序。我們談論的是零准入門檻,在 2024 年看似永無止境的「建立另一個帳戶並重置密碼」的循環中,我什至認為這是不可能的。 事實證明,匿名登入對我們來說非常有價值,因為它使近 300 人能夠在發布當天嘗試使用 IRX 解決混合整數程式 - 即使他們不知道 IRX 是什麼並且只是玩玩。我們從比我想像的更廣泛的背景中獲得了令人難以置信的反饋。 ![IRX 流量](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h0en2wbnzudxv7wfsbn9.png) 我們的即時日誌流方法的兩個問題中的第二個問題直到我們實現該功能之後才出現。 Prisma Pulse 每個表最多有 20 個同時訂閱。直到資源洩漏瞬間消耗了我們的整個連接配額之前,這個限制並不明顯。如果將並髮用戶數限制在 20 個,則不會帶來良好的啟動效果,而且時間真的很緊迫。 ![IRX 啟動定時器](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7banl0soa2fm39kcwqdu.png) 當 Long 在三小時後向我們發推文時,我們仍在除錯串流媒體。幸運的是,到目前為止,我已經閱讀了有關 Supabase 的所有內容,包括他們的[即時事件](https://supabase.com/docs/guides/realtime)[配額表](https://supabase.com/docs/guides/realtime/quotas),該表支援開箱即用的 10,000 個並發用戶端。進行切換很容易,這很大程度上要歸功於 Supabase 的 TypeScript[類型產生](https://supabase.com/docs/reference/cli/supabase-gen-types-typescript)。 除了一些[背壓](https://sdk.vercel.ai/docs/advanced/backpressure)問題之外,我們還設法為在可能不同的現場實例上同時執行的三個求解器提供即時日誌流。 ![IRX基礎設施](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1lgl316idyd9vcprnz8.png) ![IRX 解算器基礎設施](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tv7730xmmhcmn1rqcfgh.png) (IRX 內部基礎架構圖,作者: [@baykovr](https://twitter.com/baykovr) ) 龍說得最好: ![長推特](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1s50siph4hz53iqtpn5r.png) 真正瘋狂的是,我因為 Supabase 整合而註冊了 Resend。他們的創辦人[@zenorocha](https://x.com/zenorocha)在發布前幾天炸毀了[我們的 Twitter](https://twitter.com/IntegrateReason/) ,僅用一條推文就為我們的發布周流量增加了 16,000 次瀏覽。 ![芝諾·羅查在推特上](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/juruto1h7g5m32eum8ho.png) 這是我在發布當天對 IRX 基礎設施的草圖: ![IRX 發布日基礎設施](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a263k49npgp2p22ane1i.png) 我們驚慌地發射了。感謝您對 Supabase 的挑戰! ![Supabase 在 Twitter 上](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5j5fqeqyfolulnf1ctrb.png) --- 原文出處:https://dev.to/supabase/changing-databases-5-times-in-48-hours-boosted-our-launch-to-35000-views-1oc2

Wasp x Supabase:煙霧繚繞的全端組合🌶️ 🔥

**TL;DR:**在這篇文章中,我將向您介紹使用 React 和 Node.js 輕鬆建立全端應用程式的超高效堆疊 - Supabase 和 Wasp!我們將這兩種技術結合起來,使身份驗證、非同步作業、全端類型安全性、託管資料庫和託管儲存開箱即用。 ### 嘿,我是美穗! 👋 我是一名高級全端開發人員,我從事夢想和建立專案的工作已經近 10 年了。幾乎每天我都會偶然發現一個問題,並想建立一個應用程式來解決它!這就是為什麼我必須盡快做好這件事,盡可能少麻煩。 在使用 Wasp 和 Supabase 一段時間後,將它們組合在一起對我來說似乎是理所當然的。事實證明我是對的! 沒有理論,我們將建立一個應用程式! ----------------- 我們製作了一些有趣的東西:賀卡產生器,它不僅可以工作,而且還具有無限的*創意!*利用開源人工智慧模式——是的,閃亮的全新 Llama 3 和超高速的 SDXL-Lighting——我們將這個想法變成了現實。 需要視覺效果嗎?這是我製作的一個快速草圖(幸好我有那台平板電腦!): ![不同應用程式元件的草圖,其中一些是 Wasp 全端應用程式以及 Supabase 資料庫和存儲](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/88b9d1bdqr3ijfesn7j2.jpg) 這就是我們的應用程式在完善並準備就緒後的樣子: {% 嵌入 https://twitter.com/infomiho/status/1782416172111024600 %} 查看[我們應用程式的部署版本](https://lazy-greeting-cards-client.fly.dev/)- 使用 Google 登入並獲得一些甜蜜的卡片! ### 駱駝有最後發言權 在我們的應用程式中,多個模型協作產生漂亮的結果。 ![有趣的圖像是一隻美洲駝告訴畫家要畫什麼](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/calgh9rgnpegrc4e5yjm.jpg) 它的工作原理如下: 1. 用戶給我們一個主題 2. Llama 3 產生賀卡文字(「text」) 3. ……它還描述了一些適合文字的藝術作品(“圖像提示”) 4. 穩定擴散繪製藝術品 5. ??? 6. 利潤! 想像一下,為你三歲的、專橫的、喜歡穿紅衣服的美洲駝索要一張賀卡(因為誰不會呢?!)。 你會得到這樣可愛的東西! 🦙: ![提示:“為我的美洲駝三歲生日準備的賀卡,它很專橫,喜歡穿紅色衣服”](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tt9bouh1tb1t1gvt8izb.jpeg) > 提示:“為我的美洲駝三歲生日準備的賀卡,它很專橫,喜歡穿紅色衣服” 支持我們! 🙏⭐️ --------- ![GH星點擊](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/id9s6t8rcvfxty40bv2m.gif) 如果您覺得這篇文章有幫助,[請考慮在 Github 上給我們一顆星](https://github.com/wasp-lang/wasp)!我們在 Wasp 所做的一切都是開源的,您的支援幫助我們使 Web 開發變得更容易,並激勵我們撰寫更多這樣的文章。 ![支持我們](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgbmn45pia04bxt6zf83.gif) {% cta [https://github.com/wasp-lang/wasp](https://www.github.com/wasp-lang/wasp) %} ⭐️ 感謝您的支持🙏 {% endcta %} 我們是如何成功的 -------- 恕我直言,這是一張非常酷的賀卡,但我們還需要更多的東西才能使其成為適合我們用戶的合適應用程式。 ### 我們想用Google登入 我們使用[Wasp](https://wasp-lang.dev/)的內建[身份驗證](https://wasp-lang.dev/docs/auth/overview),這使您的身份驗證完全屬於您自己,並且獨立於任何第三方服務。在底層,它使用[Lucia](https://lucia-auth.com/)和[Arctic](https://arctic.js.org/)為您提供開箱即用的電子郵件、使用者名稱和多個 OAuth 提供者。 除了這段程式碼之外,我們不需要做太多的工作來設定它: ![Wasp設定檔程式碼](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q5y0hm80oipqcuozhdjc.png) > Wasp設定檔程式碼 ### 我們想把製卡過程分開 使用 Wasp 的非同步作業,我們將卡片建立過程分成可管理的步驟,因此使用者不會被蒙在鼓裡。他們獲得了有趣的更新,例如“預熱人工智慧”和“繪製圖像”——讓等待變得更容易忍受🐻 這些任務由[pg-boss](https://github.com/timgit/pg-boss/)在幕後管理(基於 PostgreSQL),哦,看,無縫連接到... ### 託管 PostgreSQL 在這個應用程式中使用[Supabase](https://supabase.com/)堅如磐石的 PostgreSQL 資料庫是一次很棒的體驗。該產品的 DX 是驚人的:當您不想從頭開始建立自己的管理面板時,查看和管理資料庫資料是一個救星。 ![Supabase 表編輯器的螢幕截圖](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lyk8ns3yii8ozs3u2kbv.png) > 表編輯器非常適合對資料庫進行快速管理工作 ### 現代應用程式需要現代存儲 對於存儲,我們選擇了 Supabase 的[S3 相容存儲](https://supabase.com/blog/s3-compatible-storage?utm_source=postmark&utm_medium=email&utm_campaign=launch-week-11)選項。這意味著我們的應用程式不依賴專用磁碟儲存 - 使其更便攜且更容易擴展。 ![賀卡圖像概述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/swf5v97w3u3om8jhoqd8.png) > 賀卡圖像概述 ### [火焰3-70B](https://replicate.com/meta/meta-llama-3-70b-instruct)型號 Meta 最新的 Llama3 是 GPT-4(仍在訓練的 405B 模型)的開源競爭者。 {% 嵌入 https://twitter.com/lmsysorg/status/1782483699449332144 %} 它產生的文本在大多數情況下總是有用且有趣的。我覺得不需要那麼多的及時調整就能獲得好的結果。 **我們使用的提示** 寫賀卡: ``` Write a greeting card text for the following topic: "<topic>". Make it clever. Return it as plain text, no quotes, no extra syntax. Return only the greeting card text. Max chars: 80! ``` 例如,如果我們使用**“笑”**這個主題,我們會得到以下結果:“笑是最好的良藥,除非您有健康保險,否則可能會更好。” 取得可用影像提示: ``` Based on the text I'll provide, give me a nice artwork to go alongside it. Describe it in a way of a short list of features of the artwork. Use descriptive language so someone can paint it. Only respond with the description, no extra syntax. Max words: 30 Context: <original_topic> Text: <text> ``` 對於上面的範例,我們會得到以下圖像提示:「一個微笑的藥瓶的異想天開的插圖,周圍環繞著旋轉的笑聲氣泡,背景中有一個微妙的醫療十字架,襯託在溫暖、陽光明媚的黃色天空的映襯下。 現在,我們為什麼要做第二步?只需比較“文字”和“圖像提示”直接生成的圖像: ![使用文字作為提示來產生圖像](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/562chgclebakt1vyiq6m.png) > 直接使用“文字” ![使用特殊圖像提示產生的圖像](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/smb20h6us30g6siumohl.png) > 使用 Llama 3 產生的“影像提示” 正如您所看到的,基於圖像提示的版本在美學上與賀卡氛圍更加一致——色彩豐富且友好。 ### [SDXL-Lighting](https://replicate.com/bytedance/sdxl-lightning-4step) (4 步變體)模型 位元組跳動基於Stable Diffusion XL製作了這個模型,並使其*速度超快*。賀卡圖像在 1-2 秒內建立。這些圖像讓我想起了 Midjourney 的質量,這意味著模型做得很好。 ![SDXL-Lighting 範例圖片 1:抽象藝術](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k9rla0gdcojylfzgtxt4.png) ![SDXL-Lighting 圖片範例 2:貓的影像](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/24gutoemdtr4oso82myy.png) ![SDXL-Lighting 圖像範例 3:太空人的圖像](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u51c3m48qrwsewk3usq9.png) ### 生成成本和時間 我們使用[Replicate](https://replicate.com/)來執行模型,到目前為止,90 張卡的成本為 26 美分,這意味著每張卡的成本不到三分之一美分! 開源模型、最少的代幣使用和快速圖像生成的結合使成本保持在令人印象深刻的低水平。 製作一張卡片只需不到 5 秒,如果您趕時間,這會有所幫助 🙂 試一試! ---- 在[我們應用程式的部署版本](https://lazy-greeting-cards-client.fly.dev/)中查看[ShadCN](https://ui.shadcn.com/)製作的漂亮 UI — 使用 Google 登入並獲得一些可愛的卡片!另外,整個專案是開源的。從[GitHub](https://github.com/wasp-lang/lazy-card-generator)取得程式碼。 --- 原文出處:https://dev.to/wasp/wasp-x-supabase-smokin-hot-full-stack-combo-ioe

AI 驅動的前端 UI 元件產生器(Next.js、GPT4、Langchain 和 CopilotKit)

**長話短說** -------- 在本文中,您將了解如何建立由 AI 驅動的前端 UI 元件產生器,該產生器使您能夠透過實作教學產生 Next.js Tailwind CSS UI 元件。 我們將介紹如何: - 使用 Next.js、TypeScript 和 Tailwind CSS 建立 UI 元件產生器 Web 應用程式。 - 使用 CopilotKit 將 AI 功能整合到 UI 元件產生器中。 - 整合嵌入式程式碼編輯器以變更產生的程式碼。 先決條件 ---- 要完全理解本教程,您需要對 React 或 Next.js 有基本的了解。 以下是建立 AI 支援的 UI 元件產生器所需的工具: - [Ace 程式碼編輯器](https://ace.c9.io/)- 用 JvaScript 編寫的嵌入式程式碼編輯器,與本機編輯器的功能和效能相符。 - [Langchain](https://www.langchain.com/) - 提供了一個框架,使人工智慧代理能夠搜尋網路並研究任何主題。 - [OpenAI API](https://platform.openai.com/api-keys) - 提供 API 金鑰,讓您能夠使用 ChatGPT 模型執行各種任務。 - [Tavily AI](https://tavily.com/) - 一個搜尋引擎,使人工智慧代理能夠在應用程式中進行研究並存取即時知識。 - [CopilotKit](https://github.com/CopilotKit) - 一個開源副駕駛框架,用於建立自訂 AI 聊天機器人、應用程式內 AI 代理程式和文字區域。 專案設定和套件安裝 --------- 首先,透過在終端機中執行以下程式碼片段來建立 Next.js 應用程式: ``` npx create-next-app@latest aiuigenerator ``` 選擇您首選的配置設定。在本教學中,我們將使用 TypeScript 和 Next.js App Router。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0c2uq47mrd3ppxqvr1v7.png) 接下來,安裝 Ace 程式碼編輯器和 Langchain 軟體套件及其相依性。 ``` npm install react-ace @langchain/langgraph ``` 最後,安裝 CopilotKit 軟體套件。這些套件使我們能夠從 React 狀態檢索資料並將 AI copilot 新增至應用程式。 ``` npm install @copilotkit/react-ui @copilotkit/react-textarea @copilotkit/react-core @copilotkit/backend ``` 恭喜!您現在已準備好建立由人工智慧驅動的部落格。 **建構 UI 元件產生器前端** ----------------- 在本節中,我將引導您完成使用靜態內容建立 UI 元件產生器前端的過程,以定義生成器的使用者介面。 首先,請在程式碼編輯器中前往`/[root]/src/app`並建立一個名為`components`的資料夾。在 Components 資料夾中,建立兩個名為`Header.tsx`和`CodeTutorial.tsx`的檔案。 在`Header.tsx`檔案中,新增以下程式碼,定義一個名為`Header`的功能元件,該元件將呈現生成器的導覽列。 ``` "use client"; import Link from "next/link"; export default function Header() { return ( <> <header className="flex flex-wrap sm:justify-start sm:flex-nowrap z-50 w-full bg-gray-800 border-b border-gray-200 text-sm py-3 sm:py-0 "> <nav className="relative max-w-7xl w-full mx-auto px-4 sm:flex sm:items-center sm:justify-between sm:px-6 lg:px-8" aria-label="Global"> <div className="flex items-center justify-between"> <Link className="w-full flex-none text-xl text-white font-semibold p-6" href="/" aria-label="Brand"> AI-UI-Components-Generator </Link> </div> </nav> </header> </> ); } ``` 在`CodeTutorial.tsx`檔案中,加入以下程式碼,定義一個名為`CodeTutorial`的功能元件,該元件呈現 UI 元件產生器主頁,該首頁將顯示產生的 UI 元件、嵌入式程式碼編輯器和產生的實作教學。 ``` "use client"; import Markdown from "react-markdown"; import { useState } from "react"; import AceEditor from "react-ace"; import React from "react"; export default function CodeTutorial() { const [code, setCode] = useState<string[]>([ `<h1 class="text-red-500">Hello World</h1>`, ]); const [codeToDisplay, setCodeToDisplay] = useState<string>(code[0] || ""); const [codeTutorial, setCodeTutorial] = useState(``); function onChange(newCode: any) { setCodeToDisplay(newCode); } return ( <> <main className=" min-h-screen px-4"> <div className="w-full h-full min-h-[70vh] flex justify-between gap-x-1 "> <div className="w-2/3 min-h-[60vh] rounded-lg bg-white shadow-lg p-2 border mt-8 overflow-auto"> <div className="w-full min-h-[60vh] rounded-lg" dangerouslySetInnerHTML={{ __html: codeToDisplay }} /> </div> <AceEditor placeholder="Placeholder Text" mode="html" theme="monokai" name="blah2" className="w-[50%] min-h-[60vh] p-2 mt-8 rounded-lg" onChange={onChange} fontSize={14} lineHeight={19} showPrintMargin={true} showGutter={true} highlightActiveLine={true} value={codeToDisplay} setOptions={{ enableBasicAutocompletion: true, enableLiveAutocompletion: true, enableSnippets: false, showLineNumbers: true, tabSize: 2, }} /> </div> <div className="w-10/12 mx-auto"> <div className="mt-8"> <h1 className="text-white text-center text-xl font-semibold p-6"> Code Tutorial </h1> {codeTutorial ? ( <Markdown className="text-white">{codeTutorial}</Markdown> ) : ( <div className="text-white"> The Code Tutorial Will Appear Here </div> )} </div> </div> </main> </> ); } ``` 接下來,前往`/[root]/src/page.tsx`文件,新增以下程式碼,導入`CodeTutorial`和`Header`元件,並定義名為`Home`的功能元件。 ``` import React from "react"; import Header from "./components/Header"; import CodeTutorial from "./components/CodeTutorial"; export default function Home() { return ( <> <Header /> <CodeTutorial /> </> ); } ``` 接下來,刪除 globals.css 檔案中的 CSS 程式碼並新增以下 CSS 程式碼。 ``` @tailwind base; @tailwind components; @tailwind utilities; @tailwind base; @tailwind components; @tailwind utilities; body { height: 100vh; background-color: rgb(16, 23, 42); } pre { margin: 1rem; padding: 1rem; border-radius: 10px; background-color: black; overflow: auto; } h2, p { padding-bottom: 1rem; padding-top: 1rem; } code { margin-bottom: 2rem; } ``` 最後,在命令列上執行命令`npm run dev` ,然後導航到 http://localhost:3000/。 現在您應該在瀏覽器上查看 UI 元件產生器前端,如下所示。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/id9z3bizkb2bghbe4bxb.png) **使用 CopilotKit 將 AI 功能整合到元件產生器** --------------------------------- 在本節中,您將學習如何為 UI 元件產生器新增 AI 副駕駛以產生 UI 元件程式碼以及使用 CopilotKit 的實作教學。 CopilotKit 提供前端和[後端](https://docs.copilotkit.ai/getting-started/quickstart-backend)套件。它們使您能夠插入 React 狀態並使用 AI 代理在後端處理應用程式資料。 首先,讓我們將 CopilotKit React 元件加入到部落格前端。 ### **將 CopilotKit 新增至部落格前端** 在這裡,我將引導您完成將 UI 元件產生器與 CopilotKit 前端整合的過程,以方便產生 UI 元件程式碼和實作教學。 首先,使用下面的程式碼片段導入`/[root]/src/app/components/CodeTutorial.tsx`檔案頂部的自訂掛鉤`useMakeCopilotReadable`和`useCopilotAction` 。 ``` import { useCopilotAction, useMakeCopilotReadable, } from "@copilotkit/react-core"; ``` 在`CodeTutorial`函數內的狀態變數下方,加入以下程式碼,該程式碼使用`useMakeCopilotReadable`掛鉤來新增將作為應用程式內聊天機器人的上下文產生的程式碼。該鉤子使副駕駛可以讀取程式碼。 ``` useMakeCopilotReadable(codeToDisplay); ``` 在上面的程式碼下方,新增以下程式碼,該程式碼使用`useCopilotAction`掛鉤來設定名為`generateCodeAndImplementationTutorial`的操作,該操作將啟用 UI 元件程式碼和實作教學課程的產生。 這個操作接受兩個參數,稱為`code`和`tutorial` ,這兩個參數可以產生 UI 元件程式碼和實作教程。 該操作包含一個處理函數,該函數根據給定的提示產生 UI 元件程式碼和實作教程。 在處理函數內部, `codeToDisplay`狀態會使用新產生的程式碼進行更新,而`codeTutorial`狀態會使用新產生的教學課程進行更新,如下所示。 ``` useCopilotAction( { name: "generateCodeAndImplementationTutorial", description: "Create Code Snippet with React.js(Next.js), tailwindcss and an implementation tutorial of the code generated.", parameters: [ { name: "code", type: "string", description: "Code to be generated", required: true, }, { name: "tutorial", type: "string", description: "Markdown of step by step guide tutorial on how to use the generated code accompanied with the code. Include introduction, prerequisites and what happens at every step accompanied with code generated earlier. Don't forget to add how to render the code on browser.", required: true, }, ], handler: async ({ code, tutorial }) => { setCode((prev) => [...prev, code]); setCodeToDisplay(code); setCodeTutorial(tutorial); }, }, [codeToDisplay, codeTutorial] ); ``` 之後,請前往`/[root]/src/app/page.tsx`檔案並使用下面的程式碼匯入頂部的 CopilotKit 前端套件和樣式。 ``` import { CopilotKit } from "@copilotkit/react-core"; import { CopilotSidebar } from "@copilotkit/react-ui"; import "@copilotkit/react-ui/styles.css"; ``` 然後使用`CopilotKit`包裝`CopilotSidebar`和`CodeTutorial`元件,如下所示。 `CopilotKit`元件指定 CopilotKit 後端端點 ( `/api/copilotkit/` ) 的 URL,而`CopilotSidebar`呈現應用程式內聊天機器人,您可以提示產生 UI 元件程式碼和實作教學。 ``` export default function Home() { return ( <> <Header /> <CopilotKit url="/api/copilotkit"> <CopilotSidebar instructions="Help the user generate code. Ask the user if to generate its tutorial." defaultOpen={true} labels={{ title: "Code & Tutorial Generator", initial: "Hi! 👋 I can help you generate code and its tutorial.", }}> <CodeTutorial /> </CopilotSidebar> </CopilotKit> </> ); } ``` 之後,執行開發伺服器並導航到 http://localhost:3000。您應該會看到應用程式內聊天機器人已整合到 UI 元件產生器中。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ty4g6tuluhfiqtnnyxvg.png) ### **將 CopilotKit 後端加入博客** 在這裡,我將引導您完成將 UI 元件產生器與 CopilotKit 後端整合的過程,該後端處理來自前端的請求,並提供函數呼叫和各種 LLM 後端(例如 GPT)。 此外,我們將整合一個名為 Tavily 的人工智慧代理,它可以研究網路上的任何主題。 首先,在根目錄中建立一個名為`.env.local`的檔案。然後在保存`ChatGPT`和`Tavily` Search API 金鑰的檔案中加入下面的環境變數。 ``` OPENAI_API_KEY="Your ChatGPT API key" TAVILY_API_KEY="Your Tavily Search API key" ``` 若要取得 ChatGPT API 金鑰,請導覽至 https://platform.openai.com/api-keys。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mjl2g88iedd1n0qkd3ai.png) 若要取得 Tavilly Search API 金鑰,請導覽至 https://app.tavily.com/home ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m00kyux6biskw7xn2wec.png) 之後,轉到`/[root]/src/app`並建立一個名為`api`的資料夾。在`api`資料夾中,建立一個名為`copilotkit`的資料夾。 在`copilotkit`資料夾中,建立一個名為`research.ts`的檔案。然後導航到[該 Research.ts gist 文件](https://gist.github.com/TheGreatBonnie/58dc21ebbeeb8cbb08df665db762738c),複製程式碼,並將其新增至**`research.ts`**檔案中 接下來,在`/[root]/src/app/api/copilotkit`資料夾中建立一個名為`route.ts`的檔案。該文件將包含設定後端功能來處理 POST 請求的程式碼。它有條件地包括對給定主題進行研究的“研究”操作。 現在在文件頂部導入以下模組。 ``` import { CopilotBackend, OpenAIAdapter } from "@copilotkit/backend"; // For backend functionality with CopilotKit. import { researchWithLangGraph } from "./research"; // Import a custom function for conducting research. import { AnnotatedFunction } from "@copilotkit/shared"; // For annotating functions with metadata. ``` 在上面的程式碼下面,定義一個執行時間環境變數和一個名為`researchAction`的函數,該函數使用下面的程式碼研究某個主題。 ``` // Define a runtime environment variable, indicating the environment where the code is expected to run. export const runtime = "edge"; // Define an annotated function for research. This object includes metadata and an implementation for the function. const researchAction: AnnotatedFunction<any> = { name: "research", // Function name. description: "Call this function to conduct research on a certain topic. Respect other notes about when to call this function", // Function description. argumentAnnotations: [ // Annotations for arguments that the function accepts. { name: "topic", // Argument name. type: "string", // Argument type. description: "The topic to research. 5 characters or longer.", // Argument description. required: true, // Indicates that the argument is required. }, ], implementation: async (topic) => { // The actual function implementation. console.log("Researching topic: ", topic); // Log the research topic. return await researchWithLangGraph(topic); // Call the research function and return its result. }, }; ``` 然後在上面的程式碼下加入下面的程式碼來定義處理POST請求的非同步函數。 ``` // Define an asynchronous function that handles POST requests. export async function POST(req: Request): Promise<Response> { const actions: AnnotatedFunction<any>[] = []; // Initialize an array to hold actions. // Check if a specific environment variable is set, indicating access to certain functionality. if (process.env.TAVILY_API_KEY) { actions.push(researchAction); // Add the research action to the actions array if the condition is true. } // Instantiate CopilotBackend with the actions defined above. const copilotKit = new CopilotBackend({ actions: actions, }); // Use the CopilotBackend instance to generate a response for the incoming request using an OpenAIAdapter. return copilotKit.response(req, new OpenAIAdapter()); } ``` 如何產生 UI 元件 ---------- 現在轉到您之前整合的應用程式內聊天機器人,並給它一個提示,例如「產生聯絡表單」。 生成完成後,您應該會看到生成的聯絡表單元件及其實作教程,如下所示。您也可以使用嵌入式程式碼編輯器修改產生的程式碼。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43t9oauptomio4cy1gwr.png) ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/297vxxiqti56ydevfmyl.png) 恭喜!您已完成本教學的專案。 結論 -- [CopilotKit](https://copilotkit.ai/)是一款令人難以置信的工具,可讓您在幾分鐘內將 AI Copilot 加入到您的產品中。無論您是對人工智慧聊天機器人和助理感興趣,還是對複雜任務的自動化感興趣,CopilotKit 都能讓您輕鬆實現。 如果您需要建立 AI 產品或將 AI 工具整合到您的軟體應用程式中,您應該考慮 CopilotKit。 您可以在 GitHub 上找到本教學的源程式碼: <https://github.com/TheGreatBonnie/AIPoweredUIComponentsGenerator> --- 原文出處:https://dev.to/tcms/ai-powered-frontend-ui-components-generator-nextjs-gpt4-langchain-copilotkit-1hac

AI 驅動的前端 UI 元件產生器(Next.js、GPT4、Langchain 和 CopilotKit)

**長話短說** -------- 在本文中,您將了解如何建立由 AI 驅動的前端 UI 元件產生器,該產生器使您能夠透過實作教學產生 Next.js Tailwind CSS UI 元件。 我們將介紹如何: - 使用 Next.js、TypeScript 和 Tailwind CSS 建立 UI 元件產生器 Web 應用程式。 - 使用 CopilotKit 將 AI 功能整合到 UI 元件產生器中。 - 整合嵌入式程式碼編輯器以變更產生的程式碼。 先決條件 ---- 要完全理解本教程,您需要對 React 或 Next.js 有基本的了解。 以下是建立 AI 支援的 UI 元件產生器所需的工具: - [Ace 程式碼編輯器](https://ace.c9.io/)- 用 JvaScript 編寫的嵌入式程式碼編輯器,與本機編輯器的功能和效能相符。 - [Langchain](https://www.langchain.com/) - 提供了一個框架,使人工智慧代理能夠搜尋網路並研究任何主題。 - [OpenAI API](https://platform.openai.com/api-keys) - 提供 API 金鑰,讓您能夠使用 ChatGPT 模型執行各種任務。 - [Tavily AI](https://tavily.com/) - 一個搜尋引擎,使人工智慧代理能夠在應用程式中進行研究並存取即時知識。 - [CopilotKit](https://github.com/CopilotKit) - 一個開源副駕駛框架,用於建立自訂 AI 聊天機器人、應用程式內 AI 代理程式和文字區域。 專案設定和套件安裝 --------- 首先,透過在終端機中執行以下程式碼片段來建立 Next.js 應用程式: ``` npx create-next-app@latest aiuigenerator ``` 選擇您首選的配置設定。在本教學中,我們將使用 TypeScript 和 Next.js App Router。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0c2uq47mrd3ppxqvr1v7.png) 接下來,安裝 Ace 程式碼編輯器和 Langchain 軟體套件及其相依性。 ``` npm install react-ace @langchain/langgraph ``` 最後,安裝 CopilotKit 軟體套件。這些套件使我們能夠從 React 狀態檢索資料並將 AI copilot 新增至應用程式。 ``` npm install @copilotkit/react-ui @copilotkit/react-textarea @copilotkit/react-core @copilotkit/backend ``` 恭喜!您現在已準備好建立由人工智慧驅動的部落格。 **建構 UI 元件產生器前端** ----------------- 在本節中,我將引導您完成使用靜態內容建立 UI 元件產生器前端的過程,以定義生成器的使用者介面。 首先,請在程式碼編輯器中前往`/[root]/src/app`並建立一個名為`components`的資料夾。在 Components 資料夾中,建立兩個名為`Header.tsx`和`CodeTutorial.tsx`的檔案。 在`Header.tsx`檔案中,新增以下程式碼,定義一個名為`Header`的功能元件,該元件將呈現生成器的導覽列。 ``` "use client"; import Link from "next/link"; export default function Header() { return ( <> <header className="flex flex-wrap sm:justify-start sm:flex-nowrap z-50 w-full bg-gray-800 border-b border-gray-200 text-sm py-3 sm:py-0 "> <nav className="relative max-w-7xl w-full mx-auto px-4 sm:flex sm:items-center sm:justify-between sm:px-6 lg:px-8" aria-label="Global"> <div className="flex items-center justify-between"> <Link className="w-full flex-none text-xl text-white font-semibold p-6" href="/" aria-label="Brand"> AI-UI-Components-Generator </Link> </div> </nav> </header> </> ); } ``` 在`CodeTutorial.tsx`檔案中,加入以下程式碼,定義一個名為`CodeTutorial`的功能元件,該元件呈現 UI 元件產生器主頁,該首頁將顯示產生的 UI 元件、嵌入式程式碼編輯器和產生的實作教學。 ``` "use client"; import Markdown from "react-markdown"; import { useState } from "react"; import AceEditor from "react-ace"; import React from "react"; export default function CodeTutorial() { const [code, setCode] = useState<string[]>([ `<h1 class="text-red-500">Hello World</h1>`, ]); const [codeToDisplay, setCodeToDisplay] = useState<string>(code[0] || ""); const [codeTutorial, setCodeTutorial] = useState(``); function onChange(newCode: any) { setCodeToDisplay(newCode); } return ( <> <main className=" min-h-screen px-4"> <div className="w-full h-full min-h-[70vh] flex justify-between gap-x-1 "> <div className="w-2/3 min-h-[60vh] rounded-lg bg-white shadow-lg p-2 border mt-8 overflow-auto"> <div className="w-full min-h-[60vh] rounded-lg" dangerouslySetInnerHTML={{ __html: codeToDisplay }} /> </div> <AceEditor placeholder="Placeholder Text" mode="html" theme="monokai" name="blah2" className="w-[50%] min-h-[60vh] p-2 mt-8 rounded-lg" onChange={onChange} fontSize={14} lineHeight={19} showPrintMargin={true} showGutter={true} highlightActiveLine={true} value={codeToDisplay} setOptions={{ enableBasicAutocompletion: true, enableLiveAutocompletion: true, enableSnippets: false, showLineNumbers: true, tabSize: 2, }} /> </div> <div className="w-10/12 mx-auto"> <div className="mt-8"> <h1 className="text-white text-center text-xl font-semibold p-6"> Code Tutorial </h1> {codeTutorial ? ( <Markdown className="text-white">{codeTutorial}</Markdown> ) : ( <div className="text-white"> The Code Tutorial Will Appear Here </div> )} </div> </div> </main> </> ); } ``` 接下來,前往`/[root]/src/page.tsx`文件,新增以下程式碼,導入`CodeTutorial`和`Header`元件,並定義名為`Home`的功能元件。 ``` import React from "react"; import Header from "./components/Header"; import CodeTutorial from "./components/CodeTutorial"; export default function Home() { return ( <> <Header /> <CodeTutorial /> </> ); } ``` 接下來,刪除 globals.css 檔案中的 CSS 程式碼並新增以下 CSS 程式碼。 ``` @tailwind base; @tailwind components; @tailwind utilities; @tailwind base; @tailwind components; @tailwind utilities; body { height: 100vh; background-color: rgb(16, 23, 42); } pre { margin: 1rem; padding: 1rem; border-radius: 10px; background-color: black; overflow: auto; } h2, p { padding-bottom: 1rem; padding-top: 1rem; } code { margin-bottom: 2rem; } ``` 最後,在命令列上執行命令`npm run dev` ,然後導航到 http://localhost:3000/。 現在您應該在瀏覽器上查看 UI 元件產生器前端,如下所示。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/id9z3bizkb2bghbe4bxb.png) **使用 CopilotKit 將 AI 功能整合到元件產生器** --------------------------------- 在本節中,您將學習如何為 UI 元件產生器新增 AI 副駕駛以產生 UI 元件程式碼以及使用 CopilotKit 的實作教學。 CopilotKit 提供前端和[後端](https://docs.copilotkit.ai/getting-started/quickstart-backend)套件。它們使您能夠插入 React 狀態並使用 AI 代理在後端處理應用程式資料。 首先,我們將 CopilotKit React 元件加入到部落格前端。 ### **將 CopilotKit 新增至部落格前端** 在這裡,我將引導您完成將 UI 元件產生器與 CopilotKit 前端整合的過程,以方便產生 UI 元件程式碼和實作教學。 首先,使用下面的程式碼片段導入`/[root]/src/app/components/CodeTutorial.tsx`檔案頂部的自訂掛鉤`useMakeCopilotReadable`和`useCopilotAction` 。 ``` import { useCopilotAction, useMakeCopilotReadable, } from "@copilotkit/react-core"; ``` 在`CodeTutorial`函數內的狀態變數下方,加入以下程式碼,該程式碼使用`useMakeCopilotReadable`掛鉤來新增將作為應用程式內聊天機器人的上下文產生的程式碼。該鉤子使副駕駛可以讀取程式碼。 ``` useMakeCopilotReadable(codeToDisplay); ``` 在上面的程式碼下方,新增以下程式碼,該程式碼使用`useCopilotAction`掛鉤來設定名為`generateCodeAndImplementationTutorial`的操作,該操作將啟用 UI 元件程式碼和實作教學課程的產生。 這個操作接受兩個參數,稱為`code`和`tutorial` ,這兩個參數可以產生 UI 元件程式碼和實作教程。 該操作包含一個處理函數,該函數根據給定的提示產生 UI 元件程式碼和實作教程。 在處理函數內部, `codeToDisplay`狀態會使用新產生的程式碼進行更新,而`codeTutorial`狀態會使用新產生的教學課程進行更新,如下所示。 ``` useCopilotAction( { name: "generateCodeAndImplementationTutorial", description: "Create Code Snippet with React.js(Next.js), tailwindcss and an implementation tutorial of the code generated.", parameters: [ { name: "code", type: "string", description: "Code to be generated", required: true, }, { name: "tutorial", type: "string", description: "Markdown of step by step guide tutorial on how to use the generated code accompanied with the code. Include introduction, prerequisites and what happens at every step accompanied with code generated earlier. Don't forget to add how to render the code on browser.", required: true, }, ], handler: async ({ code, tutorial }) => { setCode((prev) => [...prev, code]); setCodeToDisplay(code); setCodeTutorial(tutorial); }, }, [codeToDisplay, codeTutorial] ); ``` 之後,請前往`/[root]/src/app/page.tsx`檔案並使用下面的程式碼匯入頂部的 CopilotKit 前端套件和樣式。 ``` import { CopilotKit } from "@copilotkit/react-core"; import { CopilotSidebar } from "@copilotkit/react-ui"; import "@copilotkit/react-ui/styles.css"; ``` 然後使用`CopilotKit`包裝`CopilotSidebar`和`CodeTutorial`元件,如下所示。 `CopilotKit`元件指定 CopilotKit 後端端點 ( `/api/copilotkit/` ) 的 URL,而`CopilotSidebar`呈現應用程式內聊天機器人,您可以提示產生 UI 元件程式碼和實作教學。 ``` export default function Home() { return ( <> <Header /> <CopilotKit url="/api/copilotkit"> <CopilotSidebar instructions="Help the user generate code. Ask the user if to generate its tutorial." defaultOpen={true} labels={{ title: "Code & Tutorial Generator", initial: "Hi! 👋 I can help you generate code and its tutorial.", }}> <CodeTutorial /> </CopilotSidebar> </CopilotKit> </> ); } ``` 之後,執行開發伺服器並導航到 http://localhost:3000。您應該會看到應用程式內聊天機器人已整合到 UI 元件產生器中。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ty4g6tuluhfiqtnnyxvg.png) ### **將 CopilotKit 後端加入博客** 在這裡,我將引導您完成將 UI 元件產生器與 CopilotKit 後端整合的過程,該後端處理來自前端的請求,並提供函數呼叫和各種 LLM 後端(例如 GPT)。 此外,我們將整合一個名為 Tavily 的人工智慧代理,它可以研究網路上的任何主題。 首先,在根目錄中建立一個名為`.env.local`的檔案。然後在保存`ChatGPT`和`Tavily` Search API 金鑰的檔案中加入下面的環境變數。 ``` OPENAI_API_KEY="Your ChatGPT API key" TAVILY_API_KEY="Your Tavily Search API key" ``` 若要取得 ChatGPT API 金鑰,請導覽至 https://platform.openai.com/api-keys。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mjl2g88iedd1n0qkd3ai.png) 若要取得 Tavilly Search API 金鑰,請導覽至 https://app.tavily.com/home ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m00kyux6biskw7xn2wec.png) 之後,轉到`/[root]/src/app`並建立一個名為`api`的資料夾。在`api`資料夾中,建立一個名為`copilotkit`的資料夾。 在`copilotkit`資料夾中,建立一個名為`research.ts`的檔案。然後導航到[該 Research.ts gist 文件](https://gist.github.com/TheGreatBonnie/58dc21ebbeeb8cbb08df665db762738c),複製程式碼,並將其新增至**`research.ts`**檔案中 接下來,在`/[root]/src/app/api/copilotkit`資料夾中建立一個名為`route.ts`的檔案。該文件將包含設定後端功能來處理 POST 請求的程式碼。它有條件地包括對給定主題進行研究的“研究”操作。 現在在文件頂部導入以下模組。 ``` import { CopilotBackend, OpenAIAdapter } from "@copilotkit/backend"; // For backend functionality with CopilotKit. import { researchWithLangGraph } from "./research"; // Import a custom function for conducting research. import { AnnotatedFunction } from "@copilotkit/shared"; // For annotating functions with metadata. ``` 在上面的程式碼下面,定義一個執行時間環境變數和一個名為`researchAction`的函數,該函數使用下面的程式碼研究某個主題。 ``` // Define a runtime environment variable, indicating the environment where the code is expected to run. export const runtime = "edge"; // Define an annotated function for research. This object includes metadata and an implementation for the function. const researchAction: AnnotatedFunction<any> = { name: "research", // Function name. description: "Call this function to conduct research on a certain topic. Respect other notes about when to call this function", // Function description. argumentAnnotations: [ // Annotations for arguments that the function accepts. { name: "topic", // Argument name. type: "string", // Argument type. description: "The topic to research. 5 characters or longer.", // Argument description. required: true, // Indicates that the argument is required. }, ], implementation: async (topic) => { // The actual function implementation. console.log("Researching topic: ", topic); // Log the research topic. return await researchWithLangGraph(topic); // Call the research function and return its result. }, }; ``` 然後在上面的程式碼下加入下面的程式碼來定義處理POST請求的非同步函數。 ``` // Define an asynchronous function that handles POST requests. export async function POST(req: Request): Promise<Response> { const actions: AnnotatedFunction<any>[] = []; // Initialize an array to hold actions. // Check if a specific environment variable is set, indicating access to certain functionality. if (process.env.TAVILY_API_KEY) { actions.push(researchAction); // Add the research action to the actions array if the condition is true. } // Instantiate CopilotBackend with the actions defined above. const copilotKit = new CopilotBackend({ actions: actions, }); // Use the CopilotBackend instance to generate a response for the incoming request using an OpenAIAdapter. return copilotKit.response(req, new OpenAIAdapter()); } ``` 如何產生 UI 元件 ---------- 現在轉到您之前整合的應用程式內聊天機器人,並給它一個提示,例如「產生聯絡表單」。 生成完成後,您應該會看到生成的聯絡表單元件及其實作教程,如下所示。您也可以使用嵌入式程式碼編輯器修改產生的程式碼。 ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43t9oauptomio4cy1gwr.png) ![圖片描述](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/297vxxiqti56ydevfmyl.png) 恭喜!您已完成本教學的專案。 結論 -- [CopilotKit](https://copilotkit.ai/)是一款令人難以置信的工具,可讓您在幾分鐘內將 AI Copilot 加入到您的產品中。無論您是對人工智慧聊天機器人和助理感興趣,還是對複雜任務的自動化感興趣,CopilotKit 都能讓您輕鬆實現。 如果您需要建立 AI 產品或將 AI 工具整合到您的軟體應用程式中,您應該考慮 CopilotKit。 您可以在 GitHub 上找到本教學的源程式碼: <https://github.com/TheGreatBonnie/AIPoweredUIComponentsGenerator> --- 原文出處:https://dev.to/the_greatbonnie/ai-powered-frontend-ui-components-generator-nextjs-gpt4-langchain-copilotkit-1hac

推出適用於 AWS 的新 Fullstack TypeScript DX

我們聽到開發人員一次又一次地表達同樣的痛點:很難將應用程式的前端與後端集成,您需要在日常工作負載中解決不斷擴大的技術範圍,並且很難駕馭廣泛的雲端產品。雖然後端即服務產品提供了一個簡單的入口,但它們通常要求開發人員隨著公司規模的擴大而遷移。這就是我們從頭開始重建[AWS Amplify 的](https://aws.amazon.com/amplify/?trk=60cc8d4a-110e-474c-ac1a-69b65329c4ff&sc_channel=el)原因,以直接解決前端開發人員每天在工作中面臨的這些挑戰。 我們非常高興地宣布推出全新的 Amplify 體驗,旨在讓前端開發人員僅使用 TypeScript 即可建立全端、雲端驅動的應用程式。讓我們更深入地了解第二代 Amplify 的樣子! https://www.youtube.com/watch?v=BCXdLx6xHmc 只需幾分鐘即可將您的前端運送到全球 ----------------- 您可以使用 Amplify Hosting 透過幾個快速簡單的步驟部署您的應用程式前端。首先前往 AWS 控制台,選擇您的 Git 供應商,選擇您的儲存庫和分支,更新您想要自訂的任何建置設置,然後「儲存並部署」。幾分鐘後,您的應用程式將在全球部署!您可以使用下列步驟託管使用 Next.js、Nuxt、Astro 和 Vite 等框架建立的靜態或伺服器端渲染應用程式。 ![Amplify 在新控制台 UI 中支援所有 Git 提供者](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tg7lv7dwbihn1rbwivv3.jpg) 快速從前端到全端 -------- 當您建立新的 Amplify 應用程式時,您將獲得一些為您建立的文件,您可以在其中保存後端程式碼。 ``` ├── amplify/ │ ├── auth/ │ │ └── resource.ts │ ├── data/ │ │ └── resource.ts ``` 在這些檔案中,您可以編寫 TypeScript 程式碼來建立應用程式後端。您可以使用以下程式碼建立資料模型,該程式碼還為您的資料設定授權規則。 ``` // amplify/data/resource.ts import { a, defineData, type ClientSchema } from '@aws-amplify/backend'; // Create a data model with two fields, `content` and `done`. The default authorization mode is apiKey -- meaning anyone authenticated using an API key can create, read, update, and delete todos. const schema = a.schema({ Todo: a.model({ content: a.string(), isDone: a.boolean() }) .authorization(allow => [allow.publicApiKey()]) }); // Used for code completion / highlighting when making requests from frontend export type Schema = ClientSchema<typeof schema>; // defines the data resource to be deployed export const data = defineData({ schema, authorizationModes: { defaultAuthorizationMode: 'apiKey', apiKeyAuthorizationMode: { expiresInDays: 30 } } }); ``` 然後,您可以使用 Amplify 用戶端庫與應用程式前端的資料模型進行交互,例如要列出所有待辦事項,您可以編寫如下程式碼: ``` import type { Schema } from "../amplify/data/resource"; import { generateClient } from "aws-amplify/data"; const client = generateClient<Schema>(); const fetchTodos = async () => { const { data: items, errors } = await client.models.Todo.list(); }; ``` Amplify 擁有為許多不同框架和語言編寫的程式庫 - 從適用於行動開發人員的 Swift、Android 和 Flutter 到適用於 Next.js 應用程式的 SSR 功能。 您可以執行類似的身份驗證操作!下面的程式碼定義並配置了一個身分驗證資源,向新使用者發送一封主題行為「Welcome to Amplify 🚀」的驗證電子郵件。 ``` import { defineAuth } from "@aws-amplify/backend" export const auth = defineAuth({ loginWith: { email: { verificationEmailSubject: "Welcome to Amplify 🚀" }, }, }) ``` 然後,您可以使用`withAuthenticator`高階 React 元件建立完整的使用者驗證流程,包括登入和註冊! ``` import { Authenticator } from '@aws-amplify/ui-react' function App() { return ( <Authenticator> <h1>You can't see this until you log in!</h1> </Authenticator> ) } export default App ``` 您可以執行類似的操作來在應用程式中建立無伺服器函數和檔案儲存資源。部署所需要做的就是`git push`您的程式碼! ### 與您的團隊合作,而不是對抗 在本機開發 Amplify 應用程式時,您可以執行沙箱,每次變更後端程式碼時,該沙箱都會自動快速重新部署雲端資源。您團隊中的每個開發人員都將擁有自己的沙箱,因此您在迭代時不會相互覆蓋。 ``` npx ampx sandbox ``` 您也可以為專案中的每個 Git 分支設定部署環境 - 例如`dev` 、 `prod`和`my-new-feature` 。您可以在交付生產之前在隔離環境中測試變更! Amplify 現在建立在 AWS 雲端開發套件 (AWS CDK) 之上,因此您可以連接到 Amplify 本身不支援的服務 - 例如用於 AI/ML 的 Amazon Bedrock! 試試看! ---- 要了解有關 Amplify 的更多訊息,請嘗試我們的[快速入門教程](https://docs.amplify.aws/react/start/quickstart/?trk=c33e0637-74b4-466d-8750-a7d201b6c7a5&sc_channel=el)之一,該教程將指導您完成建立全端 Amplify 應用程式的步驟。 --- 原文出處:https://dev.to/aws/introducing-a-new-fullstack-typescript-dx-for-aws-1ap9

讓我保持高效率的工具

此頁面詳細介紹了我作為開發人員使用的大部分內容。我使用 Mac,因此許多工具都是 macOS 特定的,但清單中也有一些與作業系統無關的工具。 在我們開始之前要提到的一件事是,這些工具可以提高我的工作效率。也許他們不會像他們為我所做的那樣讓你有生產力。我總是說,*使用能讓你最有效率的工具*。 其中一些工具是免費的,但有些是付費的。我個人認為付費的是值得的,但這取決於你和你的錢包。 *注意:我在這裡放置了一些推薦連結。只是想坦率地說明這一點而已。* 編輯 -- 這一切都從編輯器開始。 [Visual Studio Code](https://code.visualstudio.com/) (VS Code) 是我的首選編輯器。我使用[Insider 版本的](https://code.visualstudio.com/insiders/)時間最長,但有些擴充功能會嘗試登入並重定向到 VS Code 普通版,所以我決定回到它。也就是說,VS Code Insider 非常穩定。 我很長時間以來都是 Dank Mono 的忠實粉絲,但 GitHub 今年發布了一堆等寬字體,我一直很喜歡[Monaspace Krypton](https://monaspace.githubnext.com/) 。 對於主題,它有所不同。我最近一直在使用輕現代預設主題,因為我發現它更適合[我的直播](https://nickyt.live),但我也是[休士頓](https://marketplace.visualstudio.com/items?itemName=astro-build.houston)和[堡壘之夜](https://marketplace.visualstudio.com/items?itemName=sdras.fortnite-vscode-theme)主題的粉絲。 [![當我告訴他們我在編輯器中使用深色主題。](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/52lbfjxugvqsj017c5e5.png)](https://x.com/nickytonline/status/1787621116636221727) 雖然我安裝了[iTerm](https://iterm2.com/) ,這是一個很棒的 macOS 終端,但老實說,99.999% 的時間我都住在 VS Code 終端中。 ### 編輯器設定 如果您對我的編輯器設定感興趣,[這是我目前的設定](https://gist.github.com/nickytonline/e6ceb17a1fb7b6438c3f09ff800748da)。 更有趣的事情之一是您可以更改標題欄,因此我加入了一些表情符號。 ``` "window.title": "🦙⚡🫡 – ${activeEditorShort}${separator}${rootName} – 🫡⚡🦙", ``` ![一隻羊駝漂浮在彩虹中](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbzQ1NzBodWZuam84b2FlYmV1a3o5cHRhYzZqcGp6bHVoYWNra2ZsZSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/tZB5MG7OOPuZIAcPZZ/giphy.gif) 我發現超級方便的另一個設定是`terminal.integrated.autoReplies` 。我從來不想獲取我的 .env 文件,這可以完美地處理它。 ``` "terminal.integrated.autoReplies": { "dotenv: found '.env' file. Source it? ([Y]es/[n]o/[a]lways/n[e]ver)": "e\r" }, ``` ### 也許澤德很快? 我確實想向[Zed](https://zed.dev/)編輯大聲喊叫。我偶爾會使用它,而且速度超級快,但它還沒有成為我的主要編輯器。我認為一旦擴展生態系統進一步發展,我就會轉向這個。也許在明年。我們拭目以待。 😎 瀏覽器擴充 ----- 我並不是每天都使用所有這些,但這些是我首選的瀏覽器擴充功能。 - [精緻的 GitHub](https://chrome.google.com/webstore/detail/refined-github/hlepfoohegkhhmjieoechaddaejaokhf) - GitHub 上的類固醇 - [VisBug](https://chrome.google.com/webstore/detail/visbug/cdockenadnadldjbbgcallicgledbeoc?hl=en) - 一個很棒的前端工具(這對我來說是新工具)(僅適用於基於 Chromium 的瀏覽器) - [React 開發者工具](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en)- 因為 React - [Preact DevTools](https://preactjs.github.io/preact-devtools/) - 因為 Preact - [Axe](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd) - 用於網路可存取性測試 - [WAVE](https://wave.webaim.org/extension/) - 用於網路可存取性測試 - [HTTPS 無所不在](https://www.eff.org/https-everywhere) - [優布洛克](https://ublock.org/) - [LanguageTool](https://languagetool.org) - 文法和拼字檢查工具 - [Pocket](https://getpocket.com/) - 用於為要閱讀的內容加入書籤 - [JSONView](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc) - JSON 有效負載的美化視圖 - [調整新 Twitter](https://github.com/insin/tweak-new-twitter/) - 消除 Twitter 使用者介面中的大量噪音 - [a11y Twitter](https://github.com/nickytonline/a11y-twitter) - 對如何使用 Twitter 進行小幅更改,以方便的方式推廣推文。 桌面應用程式 ------ 這些是我每天使用的大部分桌面應用程式。讓我們從一些通用的開始。 ### 我每天做的常見事情的通用工具 [Arc 瀏覽器](https://arc.net/gift/93e342bc)是一款基於 Chromium 的瀏覽器,在我看來,它解決了我在使用任何其他瀏覽器時遇到的大量使用者體驗 (UX) 問題。垂直選項卡、命令面板和自動畫中畫影片等等。 我在頂部選單列圖示上使用[Vanilla 的](https://matthewpalmer.net/vanilla/)時間最長,但當我拿到帶有瀏海的 MacBook Pro 後,它就不太好用了。從那以後,我開始使用[Bartender](https://www.macbartender.com)來管理我的選單列。 macOS 上的表情符號選擇器並不是那麼好,但[Rocket](https://matthewpalmer.net/rocket/)讓加入表情符號變得如此簡單。我無法告訴你我一天使用它多少次。 [Raycast](https://raycast.com)是我首選的 macOS 聚光燈替代品。這就像類固醇的聚光燈。我之前使用過[Alfred](https://www.alfredapp.com/) ,這是另一個出色的 Spotlight 替代品,但由於某種原因 Raycast 越來越吸引我了。我也用它來進行視窗管理。 對於那些坐在電腦前的夜晚, [f.lux](https://justgetflux.com/)是必須的。正如一些智者所說:「善待你的眼球」。 macOS 的[Nightshift](https://support.apple.com/en-ca/102191)還可以,但 f.lux 卻破壞了它。 對於管理會議, [Dato](https://sindresorhus.com/dato)是一款更好的 macOS 約會應用程式。在網址列中顯示多個時區非常有用。我有當地時間和 UTC。我還將它用於即將舉行的會議和活動。以前我使用的是[Meeter](https://trymeeter.com) ,它對此非常有用,但現在我需要的應用程式少了一個。 我幾乎每天都會截取螢幕截圖或錄製短影片, [Cleanshot X](https://cleanshot.com/)非常適合此操作。 ### Git 工具 我的大部分「git」工作都是在命令列上進行的,但有時我需要圖形使用者介面(GUI)來真正了解正在發生的事情。當我需要它時,我會伸手去拿[Fork](https://git-fork.com/) 。 ![Cassidy 示範擠壓、變基和合併](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExd3hscnE3bjlucm93aDJ2YjF1cjNkemQzNWcwc28yY2g4eG8yZjA1eCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/zQOmyYc8TXzSBfrTFb/giphy.gif) 向 Cassidy (@cassidoo) 的精彩 GIF 致敬! 如果你使用 Git(我想你們大多數人都使用 Git), [那麼簽署你的提交](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits)就非常重要。 [GPG Suite](https://gpgtools.org/)讓設定變得簡單。 ### 前端工具 我做了很多建立使用者介面 (UI) 的工作,這些都是這類工作不可或缺的工具。 [xScope](https://xscope.app)是一個非常棒的前端開發工具組。標尺、指南等 當我需要與設計師協調、查看設計或提取一些資源時, [Figma](https://www.figma.com/)就是我居住的地方。 我以前聽說過[Polypane](https://polypane.app/) ,我想幾年前我可能已經嘗試過它,但現在,它是前端的必備品。它可以幫助您建立具有各種優點的響應靈敏、易於存取的應用程式。對此感到好奇嗎?今年早些時候,我在一次直播中與 Polypane 的創作者 Kilian Valkhof (@kilianvalkhof) 進行了交流。 https://www.youtube.com/watch?v=fsIhghVlHJE 對於顏色對比問題,TPGi 的[顏色對比分析儀](https://www.tpgi.com/color-contrast-checker/)是頂級的。我強烈推薦它。感謝 Todd Libby (@colabottles) 去年向我推薦了這個。 ### 我使用的其他桌面應用程式 - [Cloudflare Warp](https://blog.cloudflare.com/1111-warp-better-vpn/) - 更快的網路和一些 VPN 優點 - [Plash](https://apps.apple.com/us/app/plash/id1494023538) - 適用於 Mac 的互動式桌面背景(一個或多個網頁) - [CleanMyMac X](https://macpaw.com/cleanmymac) - 一套實用程序,可讓您的 Mac 保持最佳狀態。 - [Starship](https://starship.rs/) - 跨 shell 提示符 直播軟體 ---- 我確信有些擁有更多觀眾的主播擁有更好的設置,但這就是我的工作方式。 我使用[Restream.io](https://restream.io/join/zZ8Wr)串流傳輸到多個平台,目前包括 Twitch、YouTube、X/Twitter 和 LinkedIn。 [OBS](https://obsproject.com/download)被很多人使用,包括我自己。這是一個很棒的開源軟體。我使用它來進行串流傳輸,而不是 Restream Studio 或 Streamyard 等類似工具,因為我有自訂疊加層和其他一些自訂功能。 https://github.com/obsproject/obs-studio [Krisp](https://krisp.ai/)在過濾通話和串流中不需要的噪音方面表現出色。在直播時告別背景的消防車。 🤣 我將[Loopback](https://rogueamoeba.com/loopback/)用於虛擬音訊來源。這非常有用,因為我建立了一個音頻源,即我的麥克風和客人的音頻,並將其視為一個輸入源。我使用這個音訊來源作為即時字幕的音訊來源。 我沒有用於串流媒體的精美相機。我曾經使用我的羅技網路攝像頭,這很好,但當我終於得到一部像樣的 iPhone 時,我覺得它的相機太棒了!所以我決定用它來進行直播。 [Camo](https://reincubate.com/camo/)使這成為可能,並且它有很多細節,如縮放、水印、濾鏡等。 ### 直播嘉賓工具 在很長一段時間裡,我都不明白人們是如何把嘉賓帶上直播的。在我從事串流媒體的早期,我曾經引入完整的 Discord 螢幕並在我的直播中分享。雖然這有效,但並不理想。我也嘗試了類似的 Zoom,然後我也開始在螢幕上裁剪 Zoom 的部分內容,但同樣不理想。 最終,我發現了[vdo.ninja](https://vdo.ninja/) 。 TLDR 是,它使用點對點技術將遠端攝影機引入 OBS 或其他工作室軟體。 https://github.com/steveseguin/vdo.ninja 這是一個很棒的專案,我強烈推薦它。如果您的客人有 Twitch 帳戶,另一個類似的軟體是 Twitch 的[Stream Together](https://help.twitch.tv/s/article/stream-together-host-guide?language=en_US) 。我也用這個,取決於客人。 命令列介面 (CLI) 工具 -------------- 我沒有很多 CLI 工具,但以下是一些我常用的工具: - [Homebrew](https://brew.sh) - macOS(或 Linux)缺少的套件管理器 - [GitHub CLI](https://github.com/cli/cli) - 命令列上的 GitHub。非常適合建立 PR 等。 https://dev.to/opensauced/boost-productivity-with-the-github-cli-2mne - [nvm](https://github.com/nvm-sh/nvm) - 節點版本管理器 - [cloudflared](https://github.com/cloudflare/cloudflared) - 透過安全隧道將本地伺服器公開到公共網路 如果您對我的設定(例如硬體和辦公室設定)的重置或我在旅途中攜帶的物品感到好奇,請隨時查看[我的使用頁面](https://nickyt.co/uses)。 直到下一篇! --- 原文出處:https://dev.to/nickytonline/tools-that-keep-me-productive-1no5

掌握關聯式資料庫設計:綜合指南

介紹 -- 在當今資料驅動的世界中,有效儲存和管理資訊對於各種規模的企業和組織都至關重要。關聯式資料庫已成為以結構化和可擴展的方式組織和操作資料的強大解決方案。在這篇文章中,我們將探討關聯式資料庫的基礎知識、它們的管理系統以及支援有效資料庫設計的原則。 --- 什麼是資料庫? ------- 資料庫是資料的結構化集合,其組織和儲存方式有利於高效檢索、操作和管理。將其視為數位文件櫃,其中不是實體資料夾和文件,而是整齊排列的表格和記錄,以便於存取。 什麼是關係資料庫? --------- 關聯式資料庫是一種將資料組織成具有行(記錄)和列(欄位)的表(關係)的資料庫。這些表透過關係互連,允許以各種方式存取和組合資料。想像一下電子表格的集合,每個電子表格代表資料的不同方面,但能夠無縫連結和組合它們之間的資訊。 關係型資料庫管理系統 ---------- 關聯式資料庫管理系統 (RDBMS) 是一種軟體應用程式,旨在建立、管理關聯式資料庫並與之互動。它提供了一個用於在資料庫中儲存、檢索和操作資料的結構化框架。 RDBMS 的一些熱門範例包括 MySQL、PostgreSQL、Oracle 和 Microsoft SQL Server。 --- SQL簡介 ----- SQL(結構化查詢語言)是用於與關聯式資料庫互動的標準程式語言。它允許您建立、讀取、更新和刪除資料庫中的資料,以及定義和修改資料庫結構本身。 SQL 就像一種通用語言,可讓您與不同的 RDBMS 平台進行通訊。 命名約定 ---- 在 SQL 中,遵循一致的命名約定對於清晰度和可維護性至關重要。這是一個例子: ``` -- Good naming conventions CREATE TABLE customers ( customer_id INT PRIMARY KEY, first_name VARCHAR(100), last_name VARCHAR(100), email VARCHAR(100) ); ``` 什麼是資料庫設計? --------- 資料庫設計是建立用於儲存和管理資料庫中的資料的高效且有組織的結構的過程。它涉及定義表、列、關係和約束,以確保資料完整性、最小化冗餘並優化效能。正確的資料庫設計是建立健全且可擴展的應用程式的基礎。 ![資料庫設計形象](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/de0l7km0yufdp2ssak3s.png) 資料的完整性 ------ 資料完整性是指資料庫中儲存的資料的準確性、一致性和可靠性。它確保資料遵循特定的規則和約束,防止錯誤和不一致。資料完整性分為三種: 1. **實體完整性**:確保表中的每一行都可以透過主鍵唯一標識,且主鍵不能有空值。 2. **參照完整性**:透過確保一個表中的外鍵值與另一表中的主鍵值相符來維護表之間的關係。 3. **域完整性**:透過限制可儲存的資料類型、格式和值範圍,強制給定列輸入有效的條目。 ``` -- Example: Enforcing data integrity CREATE TABLE orders ( order_id INT PRIMARY KEY, -- Entity integrity customer_id INT FOREIGN KEY REFERENCES customers(customer_id), -- Referential integrity order_date DATE NOT NULL, -- Domain integrity total_amount DECIMAL(10, 2) CHECK (total_amount >= 0) -- Domain integrity ); ``` 資料庫術語 ----- - **表**:按行和列組織的相關資料的集合。 - **行**:表中的單一實例或條目(也稱為記錄或元組)。 - **列**:表中資料的特定特徵或屬性(也稱為欄位或屬性)。 - **主鍵**:唯一標識表中每一行的列或列組合。 - **外鍵**:引用另一個表的主鍵的列或列的組合,在兩個表之間建立關係。 - **連接**:根據相關列組合兩個或多個表中的行的操作。 - **索引**:一種資料結構,透過建立表格中資料的排序表示來提高資料檢索操作的效能。 - **視圖**:從一個或多個基礎表動態產生的虛擬表。 - **預存程序**:預先編譯的 SQL 語句集合,可以作為單一單元執行。 - **觸發器**:特殊類型的預存程序,當表中發生特定事件(例如 INSERT、UPDATE 或 DELETE 語句)時會自動執行。 原子值 --- 在資料庫設計中,儲存原子值非常重要,這意味著儲存無法進一步劃分的最小資訊片段。這項原則有助於保持資料完整性並避免冗餘。 例如,與其將客戶的全名儲存在單一欄位中,不如將其分成名字和姓氏欄位。這樣,您可以輕鬆地獨立搜尋、排序或操作名稱的每個部分。 ``` -- Example: Storing atomic values CREATE TABLE customers ( customer_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100) ); ``` --- 按鍵簡介 ---- 鍵是資料庫設計中的重要組成部分,有助於確保資料完整性並建立表之間的關係。它們充當記錄的唯一標識符,並實現高效的資料檢索和操作。 主鍵索引 ---- 主鍵是唯一標識表中每筆記錄的列或列的組合。它確保每個記錄都是唯一的並且可以輕鬆找到。通常會對主鍵建立索引以提高查詢效能。 ``` CREATE TABLE customers ( customer_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100) ); ``` 查找表 --- 查找表也稱為參考表或程式碼表,是包含預定義值集的表,這些值可用於填入其他表中的列。查找表透過確保一致性和減少冗餘來幫助維護資料完整性。 ``` -- Lookup table for product categories CREATE TABLE product_categories ( category_id INT PRIMARY KEY, category_name VARCHAR(100) ); -- Products table referencing the lookup table CREATE TABLE products ( product_id INT PRIMARY KEY, product_name VARCHAR(100), category_id INT, FOREIGN KEY (category_id) REFERENCES product_categories(category_id) ); ``` 超級密鑰和候選密鑰 --------- 超級鍵是表中唯一標識每筆記錄的一組或多列。候選鍵是最小超鍵,這意味著它不包含不必要的列。換句話說,候選鍵是一個超級鍵,具有唯一標識每個記錄所需的最少列數。 主鍵和備用鍵 ------ 主鍵是選擇作為表的主要唯一辨識符的候選鍵。備用鍵也稱為唯一鍵,是任何其他本來可以被選為主鍵但沒有被選為主鍵的候選鍵。 ``` CREATE TABLE employees ( employee_id INT PRIMARY KEY, email VARCHAR(100) UNIQUE, -- Alternate key first_name VARCHAR(50), last_name VARCHAR(50) ); ``` 代理鍵和自然鍵 ------- 代理鍵是用作表中主鍵的人工鍵(通常是序號或 GUID)。它與資料本身沒有固有的意義或關係。另一方面,自然金鑰是從資料本身衍生的金鑰,例如員工 ID 或產品程式碼。 ``` -- Surrogate key CREATE TABLE orders ( order_id INT PRIMARY KEY IDENTITY(1,1), -- Surrogate key customer_name VARCHAR(100), order_date DATE ); -- Natural key CREATE TABLE products ( product_code VARCHAR(10) PRIMARY KEY, -- Natural key product_name VARCHAR(100), price DECIMAL(10,2) ); ``` 我應該使用代理鍵還是自然鍵? -------------- 代理鍵和自然鍵之間的選擇取決於多個因素,包括資料的性質、資料變更的可能性以及重複或衝突的可能性。 代理鍵通常是首選,因為它們是: - 不可變:即使資料發生變化,它們也不會隨著時間而改變。 - 保證唯一性:由資料庫系統生成,保證唯一性。 - 不透明:它們不會洩露有關資料本身的任何訊息,這對於安全和隱私來說是有益的。 另一方面,自然鍵在以下情況下可能會很有優勢: - 資料具有固有的唯一性,例如產品程式碼或員工 ID。 - 資料不太可能隨著時間的推移而改變,從而降低了衝突或重複的風險。 - 需要人類可讀且有意義的辨識符。 外鍵 -- 外鍵是一個表中引用另一個表的主鍵的列或列的組合。它在兩個表之間建立連結並強制引用完整性,確保子表中的資料有效且與父表中的資料一致。 ``` CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ); ``` NOT NULL 外鍵 ----------- 在某些情況下,可能需要對外鍵列設定 NOT NULL 約束,這表示該列不能有空值。此約束可確保子表中的每筆記錄都與父表中的有效記錄相關聯。 ``` CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT NOT NULL, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ); ``` 外鍵約束 ---- 外鍵約束定義表之間引用完整性的規則。這些約束可以包括更新或刪除父表中引用的記錄時要採取的操作,例如: - `CASCADE` :當父表中的記錄被更新或刪除時,子表中對應的記錄也會被更新或刪除。 - `SET NULL` :當父表中的記錄被更新或刪除時,子表中對應的外鍵值被設定為NULL。 - `NO ACTION` :當父表中的記錄被更新或刪除時,子表中對應的外鍵值保持不變,如果違反引用完整性則回滾操作。 ``` CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON UPDATE CASCADE ON DELETE SET NULL ); ``` 簡單鍵、複合鍵、複合鍵 ----------- - 簡單鍵是用作主鍵或外鍵的單一欄位。 - 複合鍵是用作主鍵或外鍵的兩個或多個列的組合。 - 複合鍵是用作外鍵的兩個或多個簡單鍵的組合。 ``` -- Simple key CREATE TABLE orders ( order_id INT PRIMARY KEY, ... ); -- Composite key CREATE TABLE order_items ( order_id INT, product_id INT, quantity INT, PRIMARY KEY (order_id, product_id) ); -- Compound key CREATE TABLE shipments ( shipment_id INT PRIMARY KEY, order_id INT, product_id INT, FOREIGN KEY (order_id, product_id) REFERENCES order_items(order_id, product_id) ); ``` --- 關係 ---- 關係是關聯式資料庫的基石,可讓您連接和組合來自不同表的資料。關係主要分為三種: ![關係形象](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qadj6qd495g7yovdcx2d.jpg) 一對一的關係 ------ 在一對一關係中,一個表中的每筆記錄都與另一個表中的一筆記錄相關聯,反之亦然。例如,考慮一個資料庫,其中每位員工都有一名且僅有一名經理,且每位經理管理一名且僅有一名員工。這種關係在實務上比較少見。 ![一對一影像](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qm0xf8h40rktgqzbp4o4.png) 一對多關係 ----- 在一對多關係中,一個表格(「一」側)中的每筆記錄都可以與另一個表(「多」側)中的多個記錄關聯。例如,在學校的資料庫中,一位老師可以教授多個班級,但每個班級只有一位老師授課。 ![一對多影像](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qe9iuj8n0n3b1cj24pdf.png) 多對多關係 ----- 在多對多關係中,一個表中的每筆記錄可以與另一表中的多筆記錄關聯,反之亦然。例如,在大學的資料庫中,一個學生可以註冊多個課程,每個課程可以有多個學生註冊。 ![多對多關係影像](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r2prop1r97o0cj7cr6qw.jpg) ### 關係摘要 - 一對一:表A中的一筆記錄與表B中的一筆且只有一筆記錄相關,反之亦然。 - 一對多:A表中的一筆記錄可以與B表中的多筆記錄相關,但B表中的一筆記錄只能與A表中的一筆記錄相關。 - 多對多:表A中的多筆記錄可以與表B中的多筆記錄相關,反之亦然。 設計關係(SQL 實作) ------------ **1 - 設計一對一關係** 要設計一對一關係,您可以將兩個表中的所有列包含在一個表中,也可以建立兩個單獨的表並使用外鍵約束來連結它們。 ``` -- Option 1: Single table CREATE TABLE employees ( employee_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), manager_first_name VARCHAR(50), manager_last_name VARCHAR(50) ); -- Option 2: Two tables with foreign key CREATE TABLE employees ( employee_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), manager_id INT UNIQUE, FOREIGN KEY (manager_id) REFERENCES employees(employee_id) ); ``` 2 -**設計一對多關係** 要設計一對多關係,通常會建立兩個表:父表(“一”側)和子表(“多”側)。子表包含引用父表主鍵的外鍵列。 ``` -- Parent table CREATE TABLE teachers ( teacher_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50) ); -- Child table CREATE TABLE classes ( class_id INT PRIMARY KEY, class_name VARCHAR(100), teacher_id INT, FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id) ); ``` **3 - 設計多對多關係** 要設計多對多關係,通常會建立第三個表(稱為聯結表或關聯表),將兩個主表連結在一起。此聯結表包括引用主表的外鍵列 ``` -- Table 1 CREATE TABLE students ( student_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50) ); -- Table 2 CREATE TABLE courses ( course_id INT PRIMARY KEY, course_name VARCHAR(100), description TEXT ); -- Junction or Intemediary table CREATE TABLE enrollments ( enrollment_id INT PRIMARY KEY, student_id INT, course_id INT, FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (course_id) REFERENCES courses(course_id) ); ``` 父表和子表 ----- 在一對多或多對多關係中, **“一”**側的表通常稱為父表,而**“多”**側的表稱為子表。子表包含引用父表主鍵的外鍵。 例如,在教師-班級關係中, `teachers`表是父表, `classes`表是子表。同樣,在學生-課程關係中, `students`和`courses`表是父表,而`enrollm`是父表。 實體關係建模簡介 -------- 實體關係建模(ER Modeling)是資料庫設計中使用的一種技術,用於直觀地表示資料庫的邏輯結構。它有助於辨識實體(表)、屬性(列)以及它們之間的關係,從而更容易理解和傳達資料庫設計。 ER 圖由以下部分組成: - **實體**:以矩形表示,實體是資料庫中的表或物件。 - **屬性**:在實體矩形內列出,屬性是描述實體的列或欄位。 - **關係**:以連接實體的線表示,關係描述了實體之間的關聯。 基數 -- 基數定義了兩個實體之間的數值關係。它指定一個實體可以與另一個實體的單一實例關聯的最大實例數。最常見的基數是: - 一對一(1:1):實體 A 的一個實例最多可以與實體 B 的一個實例關聯,反之亦然。 - 一對多(1:N):實體 A 的一個實例可以與實體 B 的多個實例關聯,但實體 B 的一個實例只能與實體 A 的一個實例關聯。 - 多對多 (M:N):實體 A 的多個實例可以與實體 B 的多個實例關聯,反之亦然。 在 ER 圖中,基數以特定的符號表示,例如單線表示一對一,帶箭頭的線表示一對多,兩端帶箭頭的線表示多對多關係。 ![基數影像](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nmife5ost450cgntriyi.png) 模態 -- 模態是指一個實體實例的存在是否依賴它與另一個實體的關係。有兩種類型的模態: - 部分模態:實例的存在不依賴它與另一個實體的關係。例如,客戶可以在沒有任何訂單的情況下存在。 - 總模態:實例的存在取決於它與另一個實體的關係。例如,沒有訂單,訂單項就不可能存在。 在 ER 圖中,模態使用特定的符號表示,例如單一條表示部分模態,雙條表示總模態。 --- 資料庫規範化簡介 -------- 資料庫規範化是組織資料庫中的資料以減少冗餘、最大限度地減少資料異常(插入、更新和刪除異常)並提高資料完整性的過程。它涉及將資料庫分解為較小的表,並根據特定規則或範式定義它們之間的關係。 資料庫規範化的主要目標是: - 消除冗餘資料 - 確保資料完整性 - 促進資料操作和維護 資料庫規範化有多種範式,每種都建立在前一種範式的基礎上。最常用的範式是: 1. 第一範式 (1NF) 2. 第二範式 (2NF) 3. 第三範式 (3NF) 1NF(資料庫規範化第一範式) --------------- 第一範式(1NF)是最基本的規範化形式。它規定表中的屬性(列)必須具有原子值,這意味著表中的每個單元格應包含單一值,而不是一組值。 例如,假設一個表格具有名為「PhoneNumbers」的資料列,該資料列儲存客戶的多個電話號碼。這違反了 1NF,因為該列包含一組值而不是單一值。為了符合 1NF,您需要將電話號碼分成單獨的列或為電話號碼建立單獨的表。 ``` -- Violates 1NF CREATE TABLE customers ( customer_id INT PRIMARY KEY, name VARCHAR(100), phone_numbers VARCHAR(200) -- Stores multiple phone numbers, violating 1NF ); -- Conforms to 1NF CREATE TABLE customers ( customer_id INT PRIMARY KEY, name VARCHAR(100), phone1 VARCHAR(20), phone2 VARCHAR(20), phone3 VARCHAR(20) ); ``` 2NF(資料庫規範化的第二範式) ---------------- 第二範式 (2NF) 建立在 1NF 的基礎上,解決了部分依賴問題。如果表屬於 1NF,且每個非主屬性(列)完全依賴整個主鍵,則該表屬於 2NF。 換句話說,如果一個表有一個複合主鍵(由多個列組成),那麼所有非鍵列必須依賴整個主鍵,而不僅僅是它的一部分。 例如,考慮一個具有複合主鍵`(student_id, course_id)`和列`grade`的表。如果`grade`欄位僅取決於`course_id` ,而不取決於`student_id`和`course_id`的組合,則該表違反了 2NF。 ``` -- Violates 2NF CREATE TABLE student_courses ( student_id INT, course_id INT, course_name VARCHAR(100), grade CHAR(2), -- Depends only on course_id, not the entire primary key PRIMARY KEY (student_id, course_id) ); -- Conforms to 2NF CREATE TABLE student_courses ( student_id INT, course_id INT, grade CHAR(2), PRIMARY KEY (student_id, course_id) ); CREATE TABLE courses ( course_id INT PRIMARY KEY, course_name VARCHAR(100) ); ``` 3NF(資料庫規範化的第三範式) ---------------- 第三範式 (3NF) 建立在 2NF 的基礎上,解決了傳遞依賴問題。如果表屬於 2NF,且每個非主屬性都非傳遞依賴於主鍵,則該表屬於 3NF。 換句話說,如果一個非鍵列依賴另一個非鍵列,那麼該表就違反了 3NF,並且非鍵列應該分離到它們自己的表中。 例如,考慮一個包含`student_id` 、 `student_name` 、 `class_id`和`class_name`欄位的表。 `student_name`欄位取決於`student_id` ,而`class_name`欄位取決於`class_id` 。但是, `class_name`欄位也透過`class_id`欄位傳遞依賴`student_id` 。這違反了 3NF。 ``` -- Violates 3NF CREATE TABLE student_classes ( student_id INT, student_name VARCHAR(100), class_id INT, class_name VARCHAR(100), PRIMARY KEY (student_id, class_id) ); -- Conforms to 3NF CREATE TABLE students ( student_id INT PRIMARY KEY, student_name VARCHAR(100) ); CREATE TABLE classes ( class_id INT PRIMARY KEY, class_name VARCHAR(100) ); CREATE TABLE student_classes ( student_id INT, class_id INT, PRIMARY KEY (student_id, class_id), FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (class_id) REFERENCES classes(class_id) ); ``` 透過遵循資料庫規範化的原則,您可以建立結構良好且高效的資料庫,從而最大限度地減少冗餘、保持資料完整性並促進資料操作和維護。 --- 索引(聚集索引、非聚集索引、複合索引) ------------------- 索引是提高資料庫中資料檢索操作效能的資料結構。它們在表中建立資料的排序表示,從而允許更快的搜尋和查詢。索引有幾種類型: - **聚集索引**:聚集索引根據索引鍵值對表中的行進行實體重新排序。每個表只能有一個聚集索引。 - **非聚集索引**:非聚集索引是一個單獨的物件,其中包含索引鍵值和指向表中相應行的指標。一個表可以有多個非聚集索引。 - **複合索引**:複合索引是索引鍵中包含多個欄位的索引。它可以是集群的,也可以是非集群的。 ``` -- Clustered index CREATE CLUSTERED INDEX idx_customers_name ON customers (last_name, first_name); -- Nonclustered index CREATE NONCLUSTERED INDEX idx_orders_date ON orders (order_date); -- Composite index CREATE INDEX idx_products_category_price ON products (category_id, price); ``` 資料類型 ---- 在資料庫領域,資料類型就像是保存特定類型資訊的不同形狀的容器。就像您不會將液體儲存在籃子中或將固體物體儲存在罐子中一樣,資料庫需要強制執行特定的資料類型以確保資料的完整性和一致性。 SQL 中的一些常見資料類型包括: - `INT`或`INTEGER` :儲存整數,例如`42`或`17` 。 - `FLOAT`或`DOUBLE` :儲存十進制數,例如`3.14159`或`0.00005` 。 - `VARCHAR`或`TEXT` :儲存文字資料,例如名稱或描述。 - `DATE`或`DATETIME` :儲存日期和時間值,例如`'2023-05-06'`或`'2024-01-01 12:34:56'` 。 - `BOOLEAN` :儲存真/假值,例如`1` (真)或`0` (假)。 選擇正確的資料類型至關重要,因為它會影響資料的儲存、查詢和操作方式。例如,嘗試在`INT`列中儲存大字串會導致錯誤或資料截斷。 ``` CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, is_active BOOLEAN DEFAULT 1 ); ``` 在此範例中,我們建立一個`users`表,其中包含`id` (整數)、 `name` (最多 50 個字元的字串)、 `age` (整數)和`is_active` (布林值,預設值為`1`或 true)欄位。 --- 連接簡介 ---- 連接就像連接資料庫中不同表的橋樑,允許您組合和檢索來自多個來源的相關資料。它們是關係資料庫中的基本概念,對於有效查詢和操作資料至關重要。 ![加盟圖片](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iks7pvzjikxzgqicjh2x.png) 內部聯接 ---- 內部聯結就像兩個表之間的友好握手,其中只有在兩個表中具有匹配值的行才會包含在結果集中。這是一種基於公共列或列集組合多個表中的資料的方法。 ``` SELECT users.name, orders.order_date FROM users INNER JOIN orders ON users.id = orders.user_id; ``` 在這個範例中,我們從`users`表中檢索`name`列,從`orders`表中檢索`order_date`列,但僅限於`users`表中的`id`與`orders`表中的`user_id`相符的行。 3 個表上的內連接(範例) ------------- 假設我們有三個表: `users` 、 `orders`和`products` 。我們想要檢索每個訂單的使用者名稱、訂單日期和產品名稱。我們可以透過在所有三個表之間執行內部聯結來實現這一點: ``` SELECT users.name, orders.order_date, products.product_name FROM users INNER JOIN orders ON users.id = orders.user_id INNER JOIN products ON orders.product_id = products.id; ``` 在這裡,我們首先在`id`和`user_id`列上連接`users`和`orders`表。然後,我們將該連接的結果與`products`表的`product_id`和`id`列連接起來。這樣,我們可以在單一查詢中從所有三個表中檢索資料,但僅限於滿足連接條件的行。 外連接簡介 ----- 內部連接就像友好的握手,而外部連接更像是歡迎的擁抱。它們不僅包括兩個表中的匹配行,還包括一個或兩個表中的不匹配行,具體取決於外連接的類型。 右外連接 ---- 右外連接就像從右表到左表的溫暖擁抱。它包括右表中的所有行以及左表中的匹配行。如果左表中沒有符合的行,則結果將包含左表列的`NULL`值。 ``` SELECT users.name, orders.order_date FROM users RIGHT OUTER JOIN orders ON users.id = orders.user_id; ``` 在此範例中,我們從`orders`表(右表)中檢索所有行,以及`users`表(左表)中的符合`name`值。如果訂單沒有符合的用戶,則`name`列將包含`NULL` 。 JOIN 與 NOT NULL 列 ----------------- 有時,您可能只想對不為空的列執行聯接。當您想要從結果集中排除缺少資料的行時,這會很有用。 ``` SELECT users.name, orders.order_date FROM users INNER JOIN orders ON users.id = orders.user_id AND users.name IS NOT NULL; ``` 在此範例中,我們在`users`和`orders`表之間執行內部聯接,但我們新增了一個附加條件`users.name IS NOT NULL`以確保結果集中僅包含具有非空`name`值的行。 跨 3 個表的外連接 ---------- 與內連接範例類似,我們可以跨多個表執行外連接。假設我們想要檢索所有訂單以及使用者名稱和產品名稱,即使`users`或`products`表中缺少值。 ``` SELECT users.name, orders.order_date, products.product_name FROM orders LEFT OUTER JOIN users ON orders.user_id = users.id LEFT OUTER JOIN products ON orders.product_id = products.id; ``` 在這裡,我們從`orders`表開始,並對`users`和`products`表執行左外連接。這可確保所有訂單以及符合的使用者名稱和產品名稱(如果可用)都包含在結果集中。如果`users`或`products`表中沒有符合的行,則對應的列將包含`NULL`值。 別名 -- 別名就像 SQL 查詢中表格或欄位的暱稱。它們可以使查詢更具可讀性和更容易理解,特別是在處理長表或列名時,或在查詢中多次引用同一個表時。 ``` SELECT u.name, o.order_date, p.product_name FROM users u INNER JOIN orders o ON u.id = o.user_id INNER JOIN products p ON o.product_id = p.id; ``` 在此範例中,我們對`users`表使用別名`u` ,對`orders`表使用別名`o` ,對`products`表使用`p` 。這使得查詢更加簡潔且更易於閱讀,而不必多次重複完整的表名稱。 自加入 --- 自連結就像一張表在與自己對話。這是一種根據同一個表中的特定條件或關係將表與其自身連接的方法。這在處理分層或遞歸資料結構(例如員工-經理關係或巢狀類別)時非常有用。 ``` SELECT e.name AS employee, m.name AS manager FROM employees e LEFT OUTER JOIN employees m ON e.manager_id = m.id; ``` 在此範例中,我們對`employees`表執行自聯接以檢索每位員工的姓名及其對應經理的姓名。我們使用左外連接來確保所有員工都包含在結果集中,即使他們沒有指派經理。 --- 資料庫標記語言 (DBML) -------------- 資料庫建模語言(DBML)是一種簡單直觀的標記語言,用於描述關係型資料庫的結構。它提供了一種人類可讀的方式來定義表、列、關係和約束,從而使資料庫設計方面的溝通和協作變得輕鬆。 **DBML 入門** 要開始使用 DBML,您需要一個文字編輯器並對資料庫概念有基本的了解。讓我們建立第一個 DBML 檔案: ``` // my_database.dbml Table users { id int [pk, increment] username varchar email varchar [unique] created_at datetime [default: `now()`] } ``` 在這個範例中,我們定義了一個`users`表,其中包含`id` 、 `username` 、 `email`和`created_at`列。 `[pk]`標記指定`id`為主鍵, `[increment]`表示自動遞增, `[unique]`確保`email`的唯一性, `[default:` now() `]`將`created_at`的預設值設為目前時間戳記。 **建立表** DBML 可讓您在單一檔案中定義多個表格及其列。讓我們為資料庫新增更多表: ``` // my_database.dbml Table users { id int [pk, increment] username varchar email varchar [unique] created_at datetime [default: `now()`] } Table posts { id int [pk, increment] title varchar content text user_id int [ref: > users.id] created_at datetime [default: `now()`] } ``` 在這個範例中,我們新增了一個`posts`表,其中包含`id` 、 `title` 、 `content` 、 `user_id`和`created_at`欄位。 `[ref: > users.id]`標籤在`posts`表中的`user_id`欄位和`users`表中的`id`列之間建立外鍵關係。 **定義關係** DBML 支援表之間各種類型的關係,包括一對一、一對多和多對多。讓我們在資料庫中定義一些關係: ``` // my_database.dbml Table users { id int [pk, increment] username varchar email varchar [unique] created_at datetime [default: `now()`] } Table posts { id int [pk, increment] title varchar content text user_id int [ref: > users.id] created_at datetime [default: `now()`] } Ref: users.id < posts.user_id ``` 在此範例中,我們定義了`users`和`posts`表之間的一對多關係。 `Ref: users.id < posts.user_id`行指定`users`表中的`user_id`欄位引用`posts`表中的`id`列。 **新增約束** 約束確保資料完整性並在資料庫上強制執行規則。 DBML 支援各種約束,例如主鍵、外鍵、唯一約束和預設值。讓我們在表格中加入一些約束: ``` // my_database.dbml Table users { id int [pk, increment] username varchar [unique] email varchar [unique] created_at datetime [default: `now()`] } Table posts { id int [pk, increment] title varchar content text user_id int [ref: > users.id] created_at datetime [default: `now()`] } Ref: users.id < posts.user_id ``` 在此更新的範例中,我們為`users`表中的`username`名列新增了`[unique]`約束,以確保每個使用者名稱都是唯一的。 **記錄您的資料庫** DBML 可讓您為資料庫模式新增註解和註釋,使其更易於理解和維護。讓我們用註釋來記錄我們的表格: ``` // my_database.dbml Table users { id int [pk, increment] // Unique identifier for users username varchar [unique] // User's username email varchar [unique] // User's email address created_at datetime [default: `now()`] // Date and time when the user was created } Table posts { id int [pk, increment] // Unique identifier for posts title varchar // Title of the post content text // Content of the post user_id int [ref: > users.id] // ID of the user who created the post created_at datetime [default: `now()`] // Date and time when the post was created } Ref: users.id < posts.user_id // Relationship between users and posts ``` **DBML 的好處** - 簡單且人類可讀的語法 - 與資料庫無關的方法 - [dbdiagram.io](dbdiagram.io)上的免費視覺化工具 - 一致的可讀性和可維護性約定 - 豐富的文件和範例 --- 結論 -- 總而言之,關聯式資料庫設計構成了現代應用程式中高效能資料組織的支柱。了解其原理使您能夠建立強大且可擴展的資料庫。接下來,我們將深入研究 SQL 語法,釋放與資料庫有效互動的能力。請繼續關注我們對 SQL 世界的探索! --- 原文出處:https://dev.to/louaiboumediene/mastering-relational-database-design-a-comprehensive-guide-3jh8