Arduino Create 平台

Arduino Create 是一個雲端編輯器,讓您可以直接在瀏覽器中編寫和編譯程式碼。 您可以在 http://create.arduino.cc 上使用這個令人驚嘆的工具。 在這篇文章中,我想要探索網頁編輯器的功能。 使用這個編輯器,您不需要在電腦上安裝任何東西來建立 Arduino 程式,除了一個插件以讓它「看見」連接到電腦的板子,但除此之外一切都會自動更新,且無需安裝設定,這讓您能夠快速上手 Arduino。 這是一個免費的工具,提供慷慨的免費層級,在雲端上進行備份且可以在不同設備上使用,支援 Windows、Mac 和 Linux。 它還可以讓您在「Project Hub」(https://create.arduino.cc/projecthub)上分享程式。那是一個您可以分享自己的專案和觀看其他人專案的地方。 當您註冊後,系統會要求您安裝我提到的插件,一旦安裝完成,您就已經完成設定。 前往 https://create.arduino.cc/editor,您將立即看到一個新的 sketch,這是 Arduino 程式的名稱: 在頂端,您可以看到它已經識別出我連接到 USB 埠的 Arduino Uno(/dev/cu.usbmodem14301 行顯示了 USB 埠)。它會自動識別 Arduino 板子。 在左側有一個側邊欄。 Examples 選單列出了許多預先製作的範例,包括程式碼、說明,以及一些情況下還包含電路圖和電路圖片: 這個 Examples 選單中還有一個方便的「From libraries」分頁,列出了由 Arduino 函式庫提供的範例。 Libraries 選單列出了官方的 Arduino 函式庫,以及許多由社群貢獻的函式庫。 很好的一點是您可以將函式庫標記為收藏,並能輕鬆找到它們。 側邊欄中的第四個項目是串口監視器(serial monitor),這是一個非常方便的工具,用於除錯和從 Arduino 程式中獲取資訊(也可向板子發送資訊): 接下來是行內說明,其中包含一些教學、偏好設定以及您的使用配額,例如儲存空間、編譯時間和專案數量等等。 每天使用配額有一個限制,包括 100MB 的儲存空間、100 個 Sketch 和 200 秒的編譯時間,超過限制後,您可以升級到每月 6.99 美元的付費方案,該方案還包括一些先進的物聯網功能,我將在另一篇文章中詳細介紹。

Arduino vs Raspberry Pi

對比兩個最受歡迎的 tinkering 平台 最近我買了一個 Arduino。 在我構思要在 15 年無觸碰電阻器後玩弄電子裝置的點子時,我記得我花了一些時間搜索什麼樣的裝置最適合我想做的事情。 在這方面,最受歡迎的兩個平台有 Arduino 和 Raspberry Pi。雖然還有許多其他平台,但這兩個是最受歡迎的,我想在這篇文章中解釋一下這兩者的不同之處。 這是 Arduino Uno,我們將以它作為例子,雖然 Arduino 還提供許多不同的板子。這是我選擇的板子,順便說一下: 這是 Raspberry Pi Model B+: 一開始看它們相似,芯片、連接器、螺絲孔。 結果,它們實際上非常非常不同。 從核心開始講。Arduino 使用 8 位元微控制器(microcontroller)。Raspberry Pi 使用 64 位元微處理器(microprocessor)。 Arduino 只有 2 KB 的 RAM。Raspberry Pi 有 1GB 的 RAM(是 Arduino 的 500,000 倍)。 在 I/O 方面,Arduino 有一個 USB-B 連接埠可供電腦傳送新的程式來執行,還有一個電源輸入和一組 I/O 引脚。 Raspberry Pi 在這方面更加複雜,有一個視訊輸出、一個 HDMI 連接埠、一個 SD 記憶卡連接埠、一個音訊插孔、一個 CSI 相機連接埠、一個 DSI 顯示器連接埠、4 個 USB 2.0 連接埠,可用於連接 USB 裝置,一個 Gigabit 以太網插孔、無線局域網 (Wireless LAN)、藍牙 4....

blogging-3-half-years

#關於寫部落格三年半的心得 自2018年1月起,我開始每天寫部落格。這已經是很長一段時間了,大約三年半。 是什麼讓我持續下去呢? 有一件事我喜歡開玩笑地說,那就是我被這個部落格困住了。 我寫了這麼久,已經無法停下來了。 我會討厭在隔天醒來時問自己:「我到底在幹嘛????」我已經持續進行中,我希望這三年半能變成五年、十年、二十年。 有些日子寫起來非常容易。我只需要做些事情,然後找到值得分享的內容。也許那天我能找到十個值得分享的事情。 有些日子就很難。我只想寫一些讓我興奮的事情,否則就會感覺像是在工作。 但最終我不能只寫我感興趣的內容。有時候我會跳到一些與我主要從事的網頁開發工作無關的話題,比如我的深入探索Arduino、電子學或者Swift。 當然,這些也都與編程相關。也有時候我會寫一些跟這篇文章一樣的後設文章,更關於寫部落格而非編程本身。 但我也覺得我不能一直寫關於JavaScript。或者我可以?也許。也許不。 也許有一天我會突然停下來,走向其他事情。 但不是今天。

C 標頭檔案

如何使用 C 標頭檔案將程式分割成多個檔案 簡單的程式可以放在單一個檔案中,但當程式變得越來越龐大時,將它們全部放在一個檔案中將變得不可能。 您可以將程式的一部分放在一個獨立的檔案中,然後建立一個標頭檔案。 標頭檔案看起來像一個普通的 C 檔案,只是以 .h 結尾而不是 .c,且不同於函式的實作和程式的其他部分,它僅包含聲明。 當您第一次使用 printf() 函式或其他輸入/輸出函式時,您已經使用過標頭檔案,並且您必須輸入: #include <stdio.h> 來使用它。 #include 是一個預處理器指示。 預處理器會在標準庫中查找 stdio.h 檔案,因為您在它周圍使用了尖括號。要包含自己的標頭檔案,您將使用引號,就像這樣: #include "myfile.h" 上述將會在當前資料夾中查找 myfile.h。 您還可以使用資料夾結構來管理庫: #include "myfolder/myfile.h" 讓我們舉個例子。這個程式計算從給定年份至今的年數: #include <stdio.h> int calculateAge(int year) { const int CURRENT\_YEAR = 2020; return CURRENT\_YEAR - year; } int main(void) { printf("%u", calculateAge(1983)); } 假設我們想將 calculateAge 函式移到一個獨立的檔案中。 我們建立一個 calculate_age.c 檔案: int calculateAge(int year) { const int CURRENT\_YEAR = 2020; return CURRENT\_YEAR - year; } 還有一個 calculate_age....

c-constants

# C常量 介紹在C中處理常量的方式 在上一篇文章中,我介紹了[C中的變量](/ c-variables-types/)。 在這篇文章中,我想告訴您關於C中所有的常量。 常量的聲明方式與變量類似,只是在之前加上了const關鍵字,並且您總是需要指定一個值。 像這樣: const int age = 37; 這在C語言中是完全有效的,儘管通常常量的聲明是大寫的,就像這樣: const int AGE = 37; 這只是一個約定,但它在閱讀或撰寫C語言程序時非常有幫助,因為它提高了可讀性。大寫名稱表示常量,小寫名稱表示變量。 常量名遵循相同的命名規則,可以包含任何大寫或小寫字母,可以包含數字和下劃線字符,但不能以數字開頭。AGE和Age10都是有效的變量名,1AGE不是。 另一種定義常量的方式是使用以下語法: #define AGE 37 在這種情況下,您不需要添加類型,也不需要=等號,並且省略最後的分號。 C編譯器將在編譯時從指定的值推斷出類型。

COBOL簡介

COBOL是一種你經常聽到的語言,是過去的遺留物之一。 事實證明,它是讓世界運轉的語言,尤其是在銀行和金融機構中。我在某處讀到,超過70%的商業交易是通過用COBOL編寫的程序完成的。 有很多原因。首先,這種語言是為這種用例而設計的。 畢竟,它的名字就是“COmmon Business-Oriented Language”(通用商業導向語言)。 這名字有點無聊,但它直接切入主題。 另一個原因是它很古老。COBOL設計於1959年,從一開始就被用於構建系統,沒有人會重新編寫運行良好的程序。 這些程序非常重要,只需維護和改進,而不需要從頭重寫。 無論如何,您可以在維基百科上閱讀有關COBOL的歷史。這裡的目標是快速介紹一下這種語言,這樣下次你聽到COBOL時,你就知道它是什麼樣子。 安裝GNU COBOL編譯器 安裝 gnu-cobol。 在Mac上,使用 Homebrew: brew install gnu-cobol 或者使用任何能在您的操作系統上安裝GNU命令的方式(提示:Homebrew也可在Windows / Linux上運行)。 完成後,您將可以使用 cobc 命令。 這是它的手冊頁面: man cobc 我在網絡上找到的一些指示涉及安裝集成開發環境(IDE),但您無需安裝IDE來測試。 在.cob文件中編寫您的COBOL程序,並使用以下命令編譯: cobc -x <filename>.cob 編寫COBOL Hello, World! 我創建了一個 hello.cob 文件,並在 VS Code 中打開它。立即彈出窗口告訴我一些擴展可以幫助處理 .cob 文件。我留下了深刻的印象。 我將安裝第一個和最受歡迎的名為COBOL的擴展,以提供語法高亮顯示。 現在將以下代碼添加到 hello.cob 文件中: HELLO IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. PROCEDURE DIVISION. DISPLAY "Hello, World!". STOP RUN. 從命令行編譯它: cobc -x hello.cob 然後運行生成的二進制文件: ./hello 這很簡單。 將兩個從用戶端接收的數字相加 現在創建一個 sum.cob 文件:...

how-to-get-yesterday-date-javascript

#如何使用JavaScript獲取昨天的日期 你想要使用JavaScript獲取昨天的日期嗎? 那就先獲取當前時間的日期(今天),然後從它減去一天: const today = new Date() const yesterday = new Date(today) yesterday.setDate(yesterday.getDate() - 1) today.toDateString() yesterday.toDateString() 我們使用yesterday的setDate()方法,將當前日期減去一天作為參數。 即使今天是月份的第一天,JavaScript也會聰明地指向上個月的最後一天。

interview-questions

為什麼面試程式設計職位的問題這麼難? 我必須說,我討厭程式設計的面試問題。為什麼它們這麼難? 如果你曾經使用過 HackerRank 之類的工具或讀過一本編程面試問題的書,你可能會同意我的看法。是的,整個行業都圍繞著編程面試和準備而存在。 我討厭那些面試問題。在網絡上,並不是每個人都同意我的觀點。似乎很多人想要繼續這種“傳統”。 幾年前,我決定不再從事合同工作/自由職業,並參與了許多不同公司的招聘過程。 在我意識到我基本上是不可雇用之前,這是另一個故事。我所指的不可雇用,是指我除了為自己建立自己的產品和資產,而不是為別人建造產品,無法為任何其他人工作。 我申請的公司中有大約一半的公司都有進行實踐性的“在家完成”項目的初步篩選。 沒人要求我實現FizzBuzz,或者其他經常被描述為“必須知識”的算法。 我們可能被誤導以為每一個招聘過程都像在 Google 那樣。我讀到有人花了一年準備 Google 的面試,結果申請時被拒絕了。可悲。 有無數的小型和中型公司從不使用嚴格而乏味的技術面試,以白板為基礎,涉及算法和數據結構等主題。没有 Google 和(噢!)Stack Overflow。 當然,了解這些主題是很不錯的,我認為你應該真正了解它們。 我也明白其中的思維:這些問題基本上都一樣,只是有 10-20 個變化。實現冒泡排序。好的,我能做到。他們只是想聽你在這個主題上的推理方式。你如何處理這個問題。但實際上,這只是解釋你記住了一個問題的內容。如果求職者是剛畢業的話,他們可能會記得得很清楚。如果求職者有 5 年的實際工作經驗,他們可能不會記得了。 FizzBuzz 更合理。它不是在學校教的,這個問題可以在 3 分鐘內解釋清楚,而且你可以對它進行推理。 但是如果我負責組織我公司的招聘,可能作為一個 CTO,我永遠不會讓一個人站在白板前,讓他們實現FizzBuzz。為什麼?首先,這完全沒有用 - 你將永遠不需要在現實世界中實現它。 其次,這給應聘者帶來了很大的壓力。很多人在這種情況下表現不佳,我也是其中之一。我可能只能展示出我價值的 10%,因為我無法在這樣對我來說陌生的環境下很好地發揮作用。 DHH(David Heinemeier Hansson,超受歡迎的 Ruby on Rails 框架的創建者)曾經說過: “我在白板上寫冒泡排序會失敗” 這太糟糕了,也許只能用來測試應聘者的神經。這完全不同於測試一個人對公司的價值,如如果我正在招聘一名程序員,進行編程等測試。 你在傳統的白板面試中能解決的任何問題都與程序員的實際工作沒有任何相關性。 我必須思考一下我上一次花時間決定要使用哪些算法,更不用說實現一個全新的算法了。那麼為什麼人們總是被問到這些問題呢? 這是一個指出大公司也在朝著更好的方向發展的推文: 我們更新了發送給前端工程師候選人的內容,以更好地反映 Facebook 對這個職位的面試過程。我希望這能幫助人們準備他們的面試! pic.twitter.com/EvTyKbugYT — Dan Abramov (@dan_abramov) February 12, 2019 實際知識。向我們要求這個。 我記得在一次面試中我得到了一個很酷的問題:描述一下當你進行 Google 搜索時會發生什麼。這是一個開放式的問題,並且它是一個關於網絡協議和發生的細微差別的對話的開始。這是一個聰明的問題。 沒有白板,因為這是一個遠程的 Zoom 通話。 另一次面試是基於我在 React 上實現的編碼挑戰,離線完成的。我有 7 天的時間(實際編碼只需要 3 小時就夠了)。招聘過程的剩餘部分都基於我在這個代碼上所做的工作。...

JavaScript 中要避免的事情(糟糕的部分)

快速列出撰寫 JavaScript 程式碼時應避免的事情。 避免使用 new Object() 來建立新物件,改用物件字面語法 {}。 陣列也一樣,優先使用 [] 而非 new Array()。 除了在 if、switch、迴圈、try 等語句需要的情況下,盡量避免使用區塊。 永遠不要在 if 或 while 語句的條件部分進行賦值。 永遠不要使用 == 和 !=,改用 === 和 !==。 永遠不要使用 eval。為什麼?它會導致效能問題(執行解譯器/編譯器)、安全問題(若與使用者輸入一起使用,可能會造成代碼注入)和調試困難。 永遠不要使用 with,因為它會修改作用域鏈並導致混淆。 總是將函式傳遞給 setTimeout 和 setInterval。 永遠不要將 Array 用作關聯陣列,改用 Object。提供該功能的部分實際上是由 Object 的原型提供的,所以你實際上可以使用 Date 物件來達到同樣的目的。 不要在字串的末尾使用 \ 來建立多行字串,這不是 ECMAScript 的一部分。改用字串串接 ' string1 ' + ' string2 ' 代替。 永遠不要修改內建物件 Object 和 Array 的原型。修改其他物件的原型(例如 Function)時要小心,因為這可能導致難以調試的錯誤。

JavaScript 程式語言介紹

JavaScript 是全球最受歡迎的程式語言之一,現在也廣泛應用於瀏覽器以外的領域。近年來,Node.js 的崛起使得後端開發不再只局限於 Java、Ruby、Python、PHP 等傳統的服務器端語言。現在就一起來了解 JavaScript 吧! 介紹 JavaScript 的基本定義 JavaScript 的版本 介紹 JavaScript 是全球最受歡迎的程式語言之一。 它於 1995 年創建,從其不起眼的開始發展了很長的路程。 作為唯一直接由瀏覽器本地支持的腳本語言,JavaScript 就一直廣泛使用下去。 在開始時,它並不像現在這樣功能強大,主要用於瀏覽器的動畫效果和當時被稱為 DHTML 的奇技淫巧。 隨著 Web 平台需求的不斷增長,JavaScript 不得不隨之發展,以滿足全球最廣泛使用的生態系統的需求。 平台引入了許多功能,瀏覽器 API 也有所增加,而程式語言本身也有了很大的發展。 如今,JavaScript 也廣泛應用於瀏覽器以外的領域。近年來,Node.js 的崛起使得後端開發也得以解鎖,不再只局限於 Java、Ruby、Python、PHP等傳統的服務器端語言。 現在 JavaScript 同時也是許多數據庫和其他應用程式的開發語言,甚至可以開發嵌入式應用程式、移動應用程式、電視應用程式等等。從最初只是瀏覽器中的一門小語言,JavaScript 現在成為了世界上最受歡迎的語言。 JavaScript 的基本定義 JavaScript 是一種具有以下特點的程式語言: 高級語言:它提供抽象層,讓你無需關心程式在運行時的細節。JavaScript 使用垃圾回收機制自動管理記憶體,讓你能夠專注於程式碼本身,而不是管理記憶體位置。它還提供了很多功能,可以處理強大的變數和物件。 動態語言:與靜態程式語言相對,動態語言在運行時執行許多靜態語言編譯時執行的操作。這帶來了一些優點和缺點,也為我們提供了一些強大的功能,比如動態類型、遲綁定、反射、函數式編程、對象的運行時修改、閉包等等。 動態類型:變數不強制要求指定類型。你可以重新將任何類型賦值給一個變數,例如將整數賦值給一個保存字符串的變數。 弱類型:與強類型相對,弱(或鬆散)類型的語言不強制物件類型,這樣更加靈活,但也失去了型別安全和型別檢查的優勢(這正是 TypeScript 和 Flow 試圖改進的地方)。 解釋型語言:它通常被稱為解釋型語言,這意味著在程式運行之前不需要編譯步驟,與 C、Java 或 Go 等語言相對。實際上,瀏覽器在執行 JavaScript 之前會對其進行編譯,以提高性能,但這對你來說是透明的,不需要額外的步驟。 多範式:語言不強制使用特定的編程範式,不像 Java 強制使用物件導向編程,或者 C 強制使用命令式編程。你可以用面向對象的模式編寫 JavaScript,使用原型和 ES6 引入的類語法。你可以使用函數式編程風格來編寫 JavaScript,利用其一級函數的特性,甚至可以使用命令式的編程風格(類似於 C)。 如果你在想,JavaScript 與 Java 沒有任何關聯,這只是個名字選擇上的失誤,但我們不得不接受這個事實。...