最好的技術堆疊可能是你最熟悉的那個。或者也可能不是。

當你想要建立一個新應用程式時,你有兩個選擇。 第一個選擇是使用你已經熟悉的技術來建立。如果你熟悉 React,那就繼續使用 React。 另一個選擇是選擇全新的技術堆疊。如果你熟悉 React,你可能會選擇使用 Svelte 或 Vue.js。如果你熟悉 Swift,你可能會選擇使用 React Native。 這是一個困難的問題,因為作為一個開發者,我認為我們應該平衡對某個技術的深入了解,成為該技術的專家,以及對各種技術都有一定的了解。 如果你所有的應用都使用 React,你就永遠不會知道 Vue.js 的優勢。相反的情況也是如此。 當 Twitter 或 Reddit 上出現關於 Vue vs React(或其他任何東西)的「在線戰爭」時,大多數時候,一方的支持者對另一方並不是非常了解,只是根據其他人的話來進行討論。 但在選擇技術堆疊之前,很少有時間能夠探索所有選項。 通常情況下,我可能會堅持使用我最熟悉的技術堆疊,目前恰好是 React 和 Next.js,除非我確定或認為其他技術是最佳選擇。三年後,我的默認選擇可能完全不同。我並沒有對工具產生依賴,我不是一個 React 開發者。我只是一個碰巧是軟體工程師的人,碰巧經常使用 React。 很久以前,我非常深入地研究了一個技術堆疊,然後一個新的項目出現了,其中使用 Node.js 或許是更好的選擇。我們作為一個團隊決定全力支持 Node.js,儘管我們遇到了很多未知的問題,但我認為這是一個不錯的選擇。 每次切換到新的技術堆疊時,你知道你正在放棄什麼,但你不知道你真正要面對什麼。 但這就是你建立專業知識的方式。下一個項目你就會知道這是否是一個好的選擇。只有時間能夠告訴你。

創建 create-react-app 的介紹

create-react-app 是開始使用 React 應用的最簡單方法。 create-react-app 是一個旨在讓您快速掌握 React 的項目。它提供了一個現成的 React 應用程序起始器,讓您可以開始構建應用程序,而不必處理 Webpack 和 Babel 的配置。 它提供了以下功能: 具有熱重載的開發服務器 集成了 Jest 的測試環境 构建 React 應用程序的能力 兼容 ES6+ 語法 打包所有 JavaScript 和資源文件 包含 CSS 自動添加器、SASS 和 CSS Modules 支持 等等! 您可以通過使用 npx 開始使用,這是一種在不安裝命令的情況下下載和執行 Node.js 命令的簡單方法。npx 隨 npm 一起提供(自版本 5.2 起)。如果您尚未安裝 npm,請從 https://nodejs.org 安裝(npm 會隨 Node 一同安裝)。 如果您不確定自己的版本,我建議您檢查是否需要更新。 提示:如果您對終端機不熟悉,請查看我的終端機教程 https://flaviocopes.com/macos-terminal/。 當您運行 npx create-react-app <app-name> 時,npx 將下載最新的 create-react-app 版本,並運行它,然後將其從您的系統中刪除。這非常好,因為您的系統上永遠不會有過時的版本,每次運行該命令時,您都會獲得最新和最好的代碼。 讓我們開始: npx create-react-app todolist 執行完畢時的截圖: 這是執行完成後的截圖: create-react-app 在您指定的文件夾中(此例中為todolist)創建了文件結構,並初始化了 Git 存儲庫。...

創建一個帶有自簽名證書的 Express HTTPS 伺服器

如何為 Node.js 創建一個自簽名的 HTTPS 證書以在本地測試應用程式 要能夠從本地主機上提供 HTTPS 的網站,您需要創建一個自簽名證書。 自簽名證書足以建立一個安全的 HTTPS 連接,用於開發目的。儘管瀏覽器會報錯說該證書是自簽名的(並且因此不受信任)。 要創建證書,您必須在系統上安裝 OpenSSL。 您可能已經安裝了它,只需在終端中嘗試鍵入 openssl 即可。 如果沒有,在 Mac 上,您可以使用 brew install openssl(如果您使用的是 Homebrew)。否則,請在 Google 上搜索“如何在 ”。 安裝了 OpenSSL 之後,運行以下命令: openssl req -nodes -new -x509 -keyout server.key -out server.cert 您會被提示回答幾個問題。第一個是國家名稱: Generating a 1024 bit RSA private key ...........++++++ .........++++++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request....

創建您的部落格系統

我是一名工程師,我相信系統的力量。人類是脆弱的,但系統是強大的。有了系統,人們就能走上正確的軌道。 如果我們的部落格能有一套系統,一切都會變得簡單。 事實上,我們確實可以擁有一套系統,在這一節中,我將解釋我使用的系統。 它可能不是適合您的完美系統,我不會假裝這是一套適用於100%情況的系統。但這是一個起點,您可以通過調整它來創建您自己的完美系統。 系統使您保持一致。 一致性至關重要 為什麼一致性如此重要? 因為一致性深深植根於我們的爬行大腦中。 您是每週二發佈一篇博文的人。您不是那種每週努力寫博文的人。您是那種只是做的人。 這不是我,Flavio,在說。 讓我分享一些作者羅伯特·奇亞迪尼(Robert Cialdini)的話,他是《影響力》這本令人驚嘆的書的作者: 一旦我們做出選擇[…],我們就會遇到個人和人際壓力,要求我們與該行為保持一致。 一旦您連續發佈了5、10、20周的文章,您就自然而然地成為每週發佈文章的那個人。或者是每週兩次,或者是您選擇的其他任何計劃。 這就是系統的關鍵:一致性。 您聽說過Rand Fishkin的“白板星期五”嗎?那是一個每週五都會推出關於搜索引擎優化的絕佳視頻系列。您知道FunFunFunction嗎?MPJ每週一發佈一個視頻。他的粉絲們都知道,並且期待每週“愉快的星期一早晨”。 我相信您也知道那些在預定日子發佈內容的YouTuber。比如週六或週二。 每個人都可以找到時間每週寫一篇博文。但並非每個人都願意花時間每週創作內容。您願意嗎? 預先安排發佈時間 正如我們剛剛討論的那樣,您的部落格中最好的事情就是保持一致。 但是,保持一致很困難。 成為不一致的最簡單的方法之一是因為您生病、參加派對或度假而錯過了某天。 當您錯過一天,並且原諒了自己,您將錯過其他日子。 那就是我會做的事情。如果我錯過一天不發佈文章,嗯……並沒有什麼壞事發生,而且我也錯過了一篇文章的紀錄。 在我意識到之前,我肯定會錯過其他文章。只是因為某一天我太懶散,破壞了我部落格的一致性,現在無法再追求完美的連續發佈文章。 您如何避免這種情況?預先安排發佈時間。 在開始發佈博客之前,披露給所有人之前,正如我們之前討論的那樣,撰寫3篇博文,開始構建您的發佈隊列。 保持一個發佈隊列 當我第一次開始我的部落格時,我偶然發現了創建一個發佈隊列的概念。 我碰巧在另一個副業上工作,但該副業並不如我預期的那樣成功。 這個項目涉及創建一些關於我關心的主題的長指南。 因此,當我決定關閉該項目時,我認為將這些長指南拋棄是一個應該遺憾的事情。 所以我把每個章節分成了幾篇博文,大約15-20篇。 我本來可以在當天發佈所有這些文章,但我隨機決定將它們排入隊列中。一天發佈一篇,明天發佈下一篇,以此類推。 之後的幾天,我想到一個新的博文點子。我現在是一個博客作者,對吧?所以我將這篇點子排在所有博文的後面。 從那時起,我的發佈隊列從未乾涸,已經是700多天了。有些日子我達到了隊列的尽头,我不得不從零開始填充隊列,但我從來沒有錯過過一天。 我只是把這個結果歸功於系統——我建立的發佈隊列以及曾經編寫了所有這些文章然後停下來的羞愧感。 我不能停下來。 選擇一個您能長期維持的發佈頻率 在這種定時和隊列系統中,一個關鍵部分是發佈頻率。 您應該多久發佈一次? 我的建議是以您能夠保持一致的頻率發佈。從每週一篇開始。按照我建議的方式建立一個隊列,看看您能否在2-3個月內保持這個頻率。一旦您開始有了太長的隊列,例如您今天寫的博文將在3個月後發佈,那麼您可以開始增加發佈頻率。 始終將發佈頻率提高而不是減少,因為您無法維持最初設定的頻率。 我之所以如此著重於一致性和發佈頻率,是因為人們習慣了它,他們期待您的文章,他們會尋找您的文章。 如果您開始錯過發佈文章,並且不頻繁地分享信息,那麼人們就不知道何時能期待您的新文章,他們會感到迷失和孤立。 這對任何事情都是如此。我在視頻中也注意到這一點。 如果您經常觀看YouTube視頻,當一個YouTuber每天發佈視頻,而您天天都在觀看,突然一個星期沒有發佈,您會有何感想? 我訂閱了一位YouTuber,他每週六發佈視頻,每週六,除非我有其他事情要做,否則我都會在中午看他的視頻。 不要追求數量 如果您事先知道您每週有3個小時可以用於撰寫博客,那麼不要強迫自己創作太多文章。 每週發佈一篇,但要做好。不要撰寫與內容不相關或質量低下的多篇文章,而是創作一篇您可以為之自豪的文章。 質量是能被察覺到的,人們會將您的價值和您的工作質量聯繫在一起。 以創造高質量和有幫助的內容而聞名。 專注於過程,而非結果 我有一個提高生產力的建議​​,那就是專注於過程。 我專注於撰寫博文。 我專注於撰寫電子書。 我不專注於有多少人會閱讀博文,或者他們是否會喜歡它。 這不是我能掌控的事情。我能做的最好的事情就是專注於我的工作,確保今天的工作是我能做到的最好工作。 保持過程簡潔 在思考我的過程時,我喜歡簡化它。 我想要去除所有我可以去除的阻力。 一切都應該簡單,快速,流暢。 我不想要任何阻礙。 我盡力消除障礙和一切阻力的力量。 在我和撰寫一篇出色博文之間,不應該有任何事物。 保留主題清單 我並不總是有時間寫一些東西。 有時我對一個主題有一個點子,我在我最喜歡的編寫應用程序中寫下了文章的標題。...

創造價值

作為一家產品企業,您運送的任何產品都會創造價值。 作為一名員工,如果您被解雇,您手中將一無所有。 作為一名自由職業者,當您停止工作時,您將不再擁有任何價值,除了一些以前工作的屏幕截圖或視頻樣本,這本身並沒有價值。 了解這些概念很重要:如果您的雇主或承包商不再需要您,您就必須尋找另一個雇主或買家。這是一個無窮循環,除非您立即開始建立自己的產品。 這不是一個簡單的過程,可能需要幾個月的時間才能製造產品並開始銷售,更重要的是,要創建一個通過適當營銷推動自動銷售的系統。 從您擁有產品的那一刻起,它們將永遠屬於您。您正在創造價值,向世界介紹了新事物。您已經建立了一項資產。如果您能在其周圍建立一個業務,則可以將此資產出售。 您的產品可以為多年帶來價值。 我目前有很多產品出售,其中一些產品多年來每個月可以自動獲得數萬美元的收入。這些產品之所以成功,是因為它們解決了一個問題,而我能夠找到合適的銷售渠道。 顯然,並非每個產品都能成功。過去我也曾製作過一些產品,在將它們推向市場的幾個月後,它們無法銷售,經過幾個月的嘗試和錯誤後,我放棄了它們。 這種情況也可能發生在您身上,它肯定會發生在您身上。重要的是要了解為什麼會發生這種情況,並避免在將來犯同樣的錯誤。

單飛企業家

我是一個單飛企業家。 什麼是單飛企業家?就是一個獨自工作的企業家。獨自一人掌握自己公司的方向和運營。沒有雇員,也沒有老板。 我的情況更甚,連承包商都沒有。 這一直是我的夢想,現在我正在活在夢裡。 我在2008年創辦了我的公司,最初只有一個目標:我不想再為任何公司工作。 我實現了這個目標。有時我扮演長期承包商的角色,但從未做過雇員。 除了在高中暑假期間擔任洗碗工之外。 在旅遊業中,洗碗工是最低級的工作,而這一點在我居住的阿爾卑斯山區已經得到了很好的確立。 我當時在意大利最美麗的山村之一的1800米高海拔地區的一家酒店工作。 責任很少,只需要出現並每天做重複的工作。 作為一個單飛企業家,情況則相反。我擁有所有的責任,並且總是在工作。沒有所謂的 “就位”。演出總是在繼續,演出必須繼續。 但是工作並不總是相同的。相反,每天都不一樣。 有一天,我花了10個小時坐在桌前為我的每日博客撰寫文章。 另一天,我在寫我的每週通訊或者是為一個計算機編程課程做準備。 還有一天,我在寫一些自動化腳本,幫助我避免無聊重複的工作,或者回復郵件。 還有一天,我在著手處理宏觀計劃,這將為接下來的幾個月定義運作任務。 還有一天,我致力於將這些計劃變成現實。 每天都不同,但不覺得像是在工作,而是像在生活。有時候我會放一天假,但那可能也是我與我的狗在山上散步時,想到最好的主意的那一天。 這就是雇員和單飛企業家的區別:你永遠不會忘記工作。但是我不會用沒有真正獨立和自由的方式來換取我的全天候工作/生活結合。 因為最終一切都回歸到自由。自由決定自己的工作內容。自由犯錯並修正錯誤。自由改變行動計劃,管理自己的時間。 自由重新發明自己並進步。這也是單飛企業家的一大特點:沒有人會告訴你需要在某個領域上改進。你必須意識到這一點,然後努力去改進。

循環收入 vs 一次性收入

對於循環收入,我擁有著愛恨交加的情感。 一方面,我認為擁有許多定期支付月費或年費的客戶對我來說是一件很棒的事情。 但是,每當我決定設立這樣的收入模式時,我卻討厭它。 我對這個概念並不陌生。 幾年前(好吧,10年前?),我有一個開源軟件業務,使用循環授權方式提供支持和更新服務。最終,由於我所在的市場的普及度不斷下降,預期的收入沒有達到預期,我決定結束它。 最近,我設立了我的在線課程會員制,兩年前,我現在已經停用它了。 每當我遇到一個有著可觀月收入(MRR)的優秀產品時,我都希望幾年前就建立了一個類似的產品。但是我從未這樣做過。 我對此有幾個問題。 首先,我有一個很長的專案清單,我試過但從未取得過成功。認為下一個應用程序會成功是很容易的,但當然這只是一個幻覺。 因此,第一個問題是很難達到顯著的MRR。 一個原因是流失率。當我在我的在線課程上嘗試月度會員制時,某個時候加入會員的人數等於停止會員的人數,而且增長停滯在一個程度上,這個程度對於我的努力來說遠遠不夠。 另一個問題是鎖定。 當有人使用你的產品時,除非它是一個不需要任何維護的低維護產品,否則你必須支援這些人。根據他們定期支付的費用,這些人可能很少,也可能很多。如果是後者,這就變成了一份工作。 如果你創建了一個被公司和個人使用的產品,而你不再想要維護它呢?我知道這聽起來很瘋狂,想要“淘汰”一個成功的產品,但我所想要避免的是像工作一樣的感覺。我知道我可以雇用人來做這份工作,但我也不想要員工或承包商。 我現在和將來想要做的是可以“完成”的創作工作。 從外表上看,循環收入是有吸引力的,但要實現並不容易,而且我認為隨著收入增長,我會失去一些自由。 最近,我更喜歡一次性銷售。我知道許多iOS應用程序嘗試通過訂閱來轉向循環收入,思考這個問題時,我喜歡為我使用的應用程序或服務付訂閱費。 但是當提供服務時,我不喜歡被它所束縛。部分原因是因為我是一個獨立創業者,我希望可以從事我喜歡的事情。如果我今天喜歡的業務在四個月後變成我討厭的業務,怎麼辦? 對於我在線課程,我發現了“解決這個問題”的最佳方法。 我創建課程,當它準備好時,我進行推出,希望它能為足夠多的人提供足夠的價值,成為一個有吸引力的選擇。 在初始購買之後,就再也沒有其他金錢關係了。課程在這裡,它不需要更新,也不需要像應用程序那樣進行調試,不會像應用程序一樣出現故障,除了回答人們的問題,它不需要其他支援。 這個概念在其他“靜態”數字產品(例如電子書)中更加激進。你寫了一本書,它就在那裡,它是一個完成的產品。 也許在這個階段,我更感興趣的是創造一些我認為可以“完成”的東西。 或許有一天我會改變想法,但這是我目前的思路。tags:循環收入,一次性收入,定期付費,月費,年費,市場普及度,在線課程,流失率,鎖定,鎖定用戶,獨立創業者,創作工作,應用程序訂閱,靜態數字產品,電子書,完成的產品

測試 React 元件

使用 Jest 和 react-testing-library 測試你的第一個 React 元件 開始測試 React 元件最簡單的方法是使用快照測試。快照測試是一種讓你在獨立環境中測試元件的技術。 如果你對軟體測試很熟悉,這就像你為類別進行單元測試一樣:你測試每個元件的功能。 我假設你已經使用 create-react-app 創建了一個 React 應用,這個應用已經預先安裝了我們需要的測試套件 Jest。 讓我們從一個簡單的測試開始。CodeSandbox 是一個很好的環境來嘗試這個。在 CodeSandbox 中創建一個 React sandbox,並在 components 文件夾中創建一個 App.js 元件,然後添加一個 App.test.js 文件。 import React from 'react' export default function App() { return ( <div className="App"> <h1>Hello CodeSandbox</h1> <h2>Start editing to see some magic happen!</h2> </div> ) } 我們的第一個測試很簡單: test('First test', () => { expect(true).toBeTruthy() }) 當 CodeSandbox 檢測到測試文件時,它會自動執行這些測試,你可以點擊視圖底部的 “Tests” 按鈕來查看測試結果: 一個測試文件可以包含多個測試: 現在讓我們做一些更有用的事情,實際上測試一個 React 元件。我們現在只有一個沒有實際用途的 App 元件,所以讓我們先設置一個具有更多功能的小應用程式環境:我們之前構建的計數器應用程式。如果你跳過了這部分,你可以返回並閱讀我們是如何構建它的,但為了方便參考,我在這裡再次添加一遍。...

無意念

點子毫無價值,實踐加點子才是一切。 不要害怕公開談論你的點子。我告訴你一個事實:你的點子一文不值。真正有價值的是你如何實現這個點子。沒有人能偷走你的點子,因為沒有你的全部背景,最終結果將完全不同。 通常,最好的機會來自於奇怪的點子。有時機會是主動找上門來的。 一個一開始看起來是贏家的點子可能看起來不太可能。你向朋友、熟人和陌生人談論它。如果大多數人認為這是一個好點子,也許你應該擔心了。原因是:如果每個人都認為這是一個好點子,那麼把它帶到市場上已經太晚了,因為太多人已經意識到了。 如果你發現不同的意見、異議、問題、疑慮或抬起的眉毛,你可能在正確的軌道上。 話雖如此,要小心:市場必須存在。不要杜撰什麼。而是找到一個現有市場(你想做的事情是否有需求?)。帶上自己的觀點。 最好的業務從找到一個缺口開始,一個現有供應還無法滿足的需求。 已經有競爭者了嗎?很好!不是為了打敗競爭而進入業務,而是為了給你的客戶提供目前任何人都沒有提供的東西。專注於客戶。

然後不斷重複這個過程

#如何在Bash shell腳本中創建函數 我在寫一個shell腳本來自動化我在工作流程中的事情,以便發布書籍。 我一直在手動操作,通常我很懶,我會重複做同樣的事情,直到自動化,但今天我必須完成一個非常重複的任務,我希望能做對事情,所以我決定寫一個腳本來幫助我和未來的我。 所以我寫了一個腳本,它要進入不同的文件夾並且需要三次調用npx來執行某些操作,就像這樣: #!/bin/sh cd c-handbook npx honkit pdf ./ ../books/$(basename $PWD).pdf npx honkit epub ./ ../books/$(basename $PWD).epub npx honkit mobi ./ ../books/$(basename $PWD).mobi cd .. cd css-handbook npx honkit pdf ./ ../books/$(basename $PWD).pdf npx honkit epub ./ ../books/$(basename $PWD).epub npx honkit mobi ./ ../books/$(basename $PWD).mobi cd .. npx部分的操作都是相同的。 所以我把所有的npx調用封裝到一個函數中,然後我只需調用該函數,像這樣: #!/bin/sh generate\_book () { npx honkit pdf ./ ../books/$(basename $PWD).pdf npx honkit epub ./ ../books/$(basename $PWD).epub npx honkit mobi ....