理解 process.nextTick()

Node.js的 process.nextTick 函数以特殊的方式与事件循环进行交互。 当你尝试理解 Node.js 事件循环 时,其中一个重要部分就是 process.nextTick()。 每次事件循环完成一次循环,我们称之为一次 tick。 当我们将一个函数传递给 process.nextTick() 时,我们指示引擎在当前操作结束后,在下一个事件循环 tick 开始之前调用该函数: process.nextTick(() => { // 做一些事情 }) 事件循环正在忙于处理当前函数的代码。 当此操作结束时,JS 引擎会运行在该操作期间传递给 nextTick 调用的所有函数。 这是我们告诉 JS 引擎以异步方式处理函数的一种方法(在当前函数之后),但尽快执行而不是将其排队。 调用 setTimeout(() => {}, 0) 会在下一个 tick 结束时执行函数,比使用 nextTick() 要晚得多,后者优先调用并在下一个 tick 开始之前执行。 在下一个事件循环迭代中,使用 nextTick() 可确保代码已经被执行。

產品/市場適配

您的產品必須滿足一個細分市場的需求,解決一個問題。 任何人都可以製作一個應用程式,撰寫一本書,或者製作一個WordPress主題或外掛程式。事實上,每一樣我提到的東西都有數以萬計的產品在市面上販售。它們都成功嗎?絕對不是!許多產品因為商業上的失敗而被廢棄,它們沒有取得足夠的市場關注。 我們可以說,只有1%的產品非常成功,另外9%處於既不具有超高成功的範疇,也不屬於失敗的範疇,算是一種適度的成功。 這符合著名的帕累托原則,即90/10。 帕累托原則由Vilfredo Pareto提出,他是一位生活在1800年到1900年之間的義大利工程師和經濟學家,在世界各地都因其發現一種規律而聞名,該規律在許多不同領域中以許多不同的形式出現: 大部分的結果是由少數原因所引起的 例如: 80%的財富由20%的人口擁有。 20%的銷售人員賣出了80%的銷售額。 80%的倉庫價值由總物品數量的20%所決定。 20%的產品在市場上占據了80%的營收。 80%的產品成功來自於具有合適的產品/市場適配。 馬克·安德森尼斯將產品/市場適配定義如下: 產品/市場適配意味著你的產品在一個好市場中,並能夠滿足該市場的需求。 您的產品必須滿足一個細分市場的需求,解決一個問題。 除非它們是與客戶溝通的利益的一部分,技術、細節以及實現方式對於任何人都沒有興趣,如果產品不能解決一個值得解決的問題,且如果沒有任何市場活動可以讓產品被目標市場所知道。 給程式設計師的警告:不要太追求潮流。 在選擇全新的程式設計技術或語言來創建您的產品時要小心,因為您將不得不花費大量時間學習它,您不了解它的限制和隱患,而且您會把焦點從產品轉移到實現細節上,而這些對於除了您之外的任何人都不重要。 如果您使用TypeScript或ClojureScript來製作應用程式,而不是使用JavaScript,對於任何人來說都沒有意義。如果您花了兩天時間在Node.js中調試一個不起作用的功能,但您不知道原因,也許您應該像平常一樣使用Python。

產品業務的自由

獨立擁有的產品業務可以提供最高程度的自由。 作為一個完全由個人擁有的小型在線業務,它沒有固定成本,沒有倉庫,沒有員工,沒有辦公室,也沒有必要在某個特定的時間待在某個地方,也沒有會議,也沒有會議電話,這是世界上最美好的生活。它是最接近完全自由的事物。 通過經營在線業務,例如,你可以決定明天出發一個月,探索遙遠的阿拉斯加或新西蘭,而不必關閉業務的任何事務。你不需要給客戶發送郵件告知他們你的旅行,也不需要使用自動回覆器來回復郵件 “我不在辦公室”,因為業務可以 - 根據情況 - 100% 自動化,或者根據你的時間進行經營。你保持對情況的控制。 如果你是一個自由職業者,只有一個客戶,那麼你實際上有一個老闆;而如果你是一個自由職業者,有5個客戶,你有5個老闆。 然而,如果你以中低價格出售數字產品,比如低於100美元,給很多客戶,那麼你就有了控制權,這些客戶都不會認為他們可以隨時索取你的注意,給你打電話或者要求與你會面,因為沒有人會認為他們對你的時間有任何權利。

移除圖片中的 EXIF 資料

在上傳圖片到網路之前,我有需要移除可能包含位置和其他應該不被分享的 EXIF 資料,因為這是使用 iPhone 拍攝的照片。 小技巧:如果您已經知道要從照片中移除位置資料,在分享面板中點擊「選項」,然後再選擇「AirDrop」之前,您可以選擇停用位置資料和其他元數據的傳送。 我找到了一種在 Mac 上簡單完成的方法。 最簡單的方式是使用 ImageOptim。只需將圖片拖放到該工具中,它將移除所有的 EXIF 資料。 或者,如果您更喜歡使用命令行,或者想使用一個能與您的腳本集成的工具,可以安裝 exiv2: brew install exiv2 然後使用 exiv2 pr 列出圖片的 EXIF 資料: exiv2 pr <filename> 使用 exiv2 rm 移除圖片的 EXIF 資料: exiv2 rm <filename>

設置您的網站以在iOS上允許全屏

在使用iPad Pro期間,我決定將一些網站添加到主屏幕。雖然同樣的操作在iPhone上也有效: 按壓分享按鈕(在底部中間)以顯示選項面板: 選擇“添加到主屏幕”: 現在,您將在主屏幕上看到一個帶有網站圖標的應用程序。 點擊它只會在Safari中打開該網站。 但是,如果將此meta標籤添加到頁面中: <meta name="apple-mobile-web-app-capable" content="yes"> 點擊應用程序圖標將在全屏中打開該網站: 這在iPad上也是有效的: 這將幫助您節省螢幕空間,因為Safari的用戶界面將無用,也能提升整體應用程式使用體驗。 當然,這必須得到網站/應用程式開發者的支援,否則無法全屏顯示。

設置項目以使用Phaser構建JavaScript遊戲

建立一個現代化的項目,並開始使用Phaser 3構建JavaScript HTML5遊戲 Phaser是一個了不起的平台,它使創建遊戲變得非常簡單,還支持物理引擎。它足夠受歡迎,你可以找到插件和工具來更好地構建遊戲並更快地構建遊戲。 它基於HTML5技術,這意味著您可以通過Web進行遊戲分發,並且如果需要,也可以將其打包為桌面或移動應用程序。 遊戲編程是一個大的主題,在這個介紹中,我想談談基本知識,這些基本知識足以創建簡單的遊戲。 在這個教程中,我想詳細介紹一個最佳設置,以使用Phaser 3構建遊戲。 讓我們在文件夾中使用npm安裝phaser: npm init -y npm install phaser 現在讓我們設置 Parcel 來打包我們的遊戲: npm install -g parcel-bundler 現在創建一個 game.js 文件,內容如下: import Phaser from 'phaser' new Phaser.Game() 現在運行 parcel watch game.js Parcel將在 dist/game.js 文件中生成我們的JavaScript代碼。 現在創建一個 index.html 文件,內容如下: <!DOCTYPE html> <html> <head> <script src="./dist/game.js"></script> </head> </html> 安裝 browser-sync 以運行一個包含這個文件夾內容的HTTP服務器: npm install -g browser-sync 然後運行 browser-sync start --server --files "." 上述命令將監視當前文件夾(和所有子文件夾)中的所有文件的變化,并在端口3000上啟動一個Web服務器,自動打開一個瀏覽器窗口連接到服務器。 每次您更改文件時,瀏覽器將自動刷新。 在我們原型開發遊戲時,這將非常有用。 您現在應該在瀏覽器中看到一個空白屏幕,因為我們初始化了Phaser: import Phaser from 'phaser' new Phaser....

貨車太陽能板升級

我在貨車上安裝了一個100W的太陽能板,這是買車時附帶的配件。 在貨車製造時就安裝好了。 在車上或是房車上,你永遠不會擁有足夠的電力。無論在其他非接網的地方。總是有更多東西需要充電,那些一整天都使用電力的東西,而電池只有有限的容量。 太陽能板隨著時間會變得效率下降,通常保修期為20-30年。根據我找到的日期,這块板子已經19歲了。 於是我決定升級,購買了一個容量更大、更長的175W的太陽能板。我選擇了Victron Polycristalline BlueSolar 175W太陽能板,主要是因為功率和尺寸之間的良好平衡。 我找到的大多數太陽能板要麼太長,要麼太寬。而這個就很完美。有些人喜歡超薄的太陽能板,可以直接黏貼在屋頂上,但是我總是會把東西放在屋頂上(比如風帆板),即使只有一點點遮蔽,也會使太陽能板的發電量減少10%。 由於比之前的太陽能板更長,所以我不得不將它安裝在車頂架上,而不是直接安裝在屋頂上。 這並沒有對車子的美觀造成太大影響。 我想嘗試的另一件事是讓太陽能板可以調整角度。 當太陽光以垂直角度照射時,太陽能板的發揮最佳效果,而當太陽光以其他角度照射時,效果則相對較差。 因此,我建造了一個小型結構,可以在早上、傍晚或是整天太陽一直在地平線下時(你好,拉普蘭地區),找到更佳的方位。 不幸的是,儘管我想保留舊板,但由於它直接黏貼在屋頂上,當我用比較大的力量試圖將其拆除時,它變成了碎片。 不幸的是,他們用來黏貼這種東西的膠水非常強力,我不得不選擇放棄它,否則可能會用電動工具來損壞貨車的屋頂,這不是我期待的結果。 對於100W到175W的升級和可傾斜系統,我非常滿意,因為現在鋰電池充電速度更快了。 我在一次旅行中進行了測試,基本上不用擔心一直開冰箱、使用吹風機,煮水器,充電所有的電子設備。 這只是一個插拔的替代品,但在夏天過後,我計劃再升級,在貨車上增加另一塊完全相同的板,這樣在太陽能不如現在強大的冬天,我就可以獲得2倍的能量。更不用說在冬天,我通常不會在車頂上放任何東西,所以我可以在冬天安裝2塊板,夏天只保留一塊。 我現在沒有時間進行這次升級,我只訂了一塊板來試驗,也是因為我認為我可能需要升級我的Victron SmartSolar太陽能充電控制器,以應對兩塊板。 更新:安裝了第二塊板並升級了Victron SmartSolar以應對兩塊板的串聯。即使在(晴朗的)冬天,也基本上達到了100%的獨立運行。

軟技能讓軟體開發人員繁榮

面試過程也是用來評估您的軟技能的。 什麼是軟技能? 我會將與技術無關的任何事情歸類為軟技能,而是與與他人相處有關。 軟技能對任何人都是必不可少的,尤其是對於在團隊中工作的人,這是您在99%的工作中都要做的事情。 每個人都有自己認為最佳的軟技能版本。 我會提到以下這些: 身體語言 共情 對新技術持開放態度 你不是你的代碼 擁抱改變 持續學習 提問 身體語言 試著練習在面試時保持舒適。 當然,你面試得越多,這一點就越容易。 身體語言是一門藝術,當我們緊張時,甚至不需要說一個字,就可以清楚地展示出來。 共情 共情是能夠站在別人的立場上,理解他們的感受,理解他們為什麼以某種方式行為的能力。 我把這個放在第一位,因為缺乏共情可能是許多問題的根源。 理解對方的觀點,積極聆聽並友善對待。 對新技術持開放態度 在面試過程中,您可能會被問及是否願意學習X框架或Y語言。 作為一名開發人員,開發渴望學習您所能學到的一切是至關重要的。 您將始終學習新事物。 你不是你的代碼 您的代碼總是會受到批評。無論它有多好或多壞,你不是你的代碼。您的代碼並不是您能力的證明。它只是在特定時間點下特定限制條件下您的工作產物。 如果招聘人員認為您的代碼不夠好,可能有原因,您不應該感到個人冒犯或煩惱,也不要使面試出現偏離。 您在當前情況下已經盡力了,但下次可以做得更好。 擁抱改變 派生於您花了很多時間學習的特定技術、框架或語言的喜愛是很容易的,並且認為它是有史以來最好的工具。 但在團隊環境中,許多時候您喜歡的技術、框架或語言可能會被換成另一個更好的工具。 對於變化始終保持主動態度,不要過於依附於任何事物。 在面試中展示出您是開放的思維方式很重要。 提問 保持好奇心。不要假設任何事情,而是主動提問。 提問意味著在下結論之前收集所有需求。 在面試中,問問題關於公司。這是一次雙向面試。他們了解您,您了解他們。

軟體是超能力

我們往往對我們已經知道的事情看輕:「因為我們知道它,每個人都應該也知道這個」。 但有一件事我永遠不會視為理所當然,那就是軟體賦予我們的力量。 不僅僅是寫軟體的能力,也包括簡單地擁有可以使用的軟體。無代碼工具已經非常先進,你可以用它們來做很多事情,並且它們將軟體的力量賦予給那些不是開發者而是專業使用者的人。 我是一個開發者,我也依賴低代碼或無代碼工具。它們能為你提供自動化的關鍵,將這種力量帶給更廣泛的受眾。 每當我做某件事情多次,我都會考慮建立一個系統,這樣我就不必手動重複執行該任務。 我是一個獨立工作者,之所以能做到這一點,完全是因為我有一支小機器人軍團,每天24小時工作,為我完成各種任務。別以為它們做複雜的事情… 它們實際上執行的是小任務。但這些小任務卻花費了我大量的精力和時間。 因為它們替我做這些事情,我可以專注於更大的圖景。 系統思維也是與此相關的一項重要能力:構建一個相互關聯的自動化系統,使其在你睡覺、度假、或者外出跑步時為你工作。 數千年來,人們只能夢想這種可能性。相反,他們不得不雇用人工。無論是有薪水的工人還是奴隸。他們不得不建造或購買昂貴且脆弱的機器。自從幾年前,不算太久之前,我們就有了一系列令人難以置信的工具,將這個千年長夢變為現實。我們在口袋和手腕上擁有極其強大的電腦。 我們應該百分之百地利用這個可能性。 如果你意識到這個機會,你已經走在正確的軌道上。這不是你天生擁有的。你可以學會它。這需要時間和大量的學習。 在這方面,我依賴於各種平台。我喜歡我的系統簡潔而小型。如果你喜歡的話,可以稱之為微服務。當觸發事件時,信息會被發送到我的自動化服務中,它就會按照預定的操作進行處理。 如果該任務失敗,並沒有很多東西需要尋找失敗的原因。而我的中央化日誌平台會告訴我發生了什麼、何時以及為什麼。 這正是讓我在數位領域成為一個獨立創業者的原因。

軟體開發沒有門檻

軟體開發作為一個職業非常棒,因為它沒有門檻。 你不需要學位或特殊學習。 你不需要在開始之前通過測驗。 你只需要一台電腦和一本書,就可以開始學習。 沒有任何阻礙。你不會只通過實驗病人而成為醫生,但你可以通過與電腦實驗成為一名程式設計師。 如果你發現自己不喜歡它,你可以賣掉你的電腦,一切就結束了。 還有什麼能阻止你呢?