draw.io 線上畫圖表、流程圖工具

本篇 ShengYu 介紹 draw.io 這套工具,在現代日常工作的信件、簡報中常常用到圖表和流程圖,這些圖是溝通和表達想法的重要橋樑。本篇就是要來介紹一款名為 draw.io 的線上工具。draw.io 它不僅提供了強大的圖表製作功能,還讓使用者輕鬆地建立各種類型的圖形和圖表。只要連上網路不用安裝任何軟體即可馬上製作流程圖是我覺得的一個巨大優勢,還能夠支援存檔與讀檔,以及匯出成常見png 、jpeg或bmp格式,本篇都會一一來作介紹,一起來了解一下這款 draw.io。

特點和功能

draw.io 的簡潔而直觀的使用者界面讓使用者能夠輕鬆上手,即使是沒有設計經驗的人也能夠快速建立專業水準的圖表。它提供了豐富的圖形和圖表類型,包括流程圖、組織圖、UML 圖、網路圖等,滿足了不同場景下的需求。此外,draw.io 還支持將圖表匯出為多種格式,方便使用者在不同平台上分享和使用。

使用方法

使用 draw.io 建立新的圖表非常簡單,只需選擇所需的圖表類型,然後拖動和放置圖形即可。使用者可以輕鬆編輯和自定義每個圖形的外觀和屬性,使其符合自己的需求。匯入和匯出功能讓使用者可以方便地將圖表嵌入到其他檔案中或與他人共享。

應用範圍

Draw.io 的應用範圍非常廣泛,不僅適用於商業和教育領域,也適用於個人用途。在商業領域,它可以用於製作企業組織結構圖、流程圖、市場分析圖等;在教育領域,它可以用於製作教學資料、課程規劃等;在個人用途方面,它可以用於製作個人計劃、生活日程等。

Draw.io與其他類似工具的比較

儘管市面上有許多類似的圖表製作工具,但 draw.io 仍然脫穎而出。它不僅功能強大,而且免費且開放源碼,為使用者提供了更多的自由和靈活性。

draw.io 跟一些付費工具相比,例如:Microsoft Visio,draw.io 免費使用免安裝任何軟體馬上即可使用是一個極大優勢,以及能夠存檔進度與讀取,匯出成圖片常見功能都有支援,實在是超級方便好用。

總結

綜上所述,draw.io 是一款功能強大、易於使用的圖表製作工具,為使用者提供了無限的創作可能性。無論是在工作、學習還是生活中,它都能夠幫助使用者將複雜的想法清晰地表達出來。期待它在未來的發展中繼續帶給我們更多驚喜和便利!

以上就是 draw.io 線上畫圖表、流程圖工具介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
GIMP 圖片裁切
GIMP 去背/去除背景

macOS 版本升級的方法

本篇 ShengYu 紀錄 macOS 版本升級的方法,最近要將我的 mbpr15 從 10.13.6 升級到 macOS 11 時遇到線上無法更新,出現『無法聯絡復原伺服器』的錯誤訊息,以下紀錄解決方法,

最後只好從從另一台 mbp13 新的 macOS 下載 macOS 在弄到 USB 裏,讓我的 mbpr15 去安裝,
參考為 macOS 製作可開機安裝磁碟

官方教學已經寫的夠詳細了,直接切入重點,

  1. 從 Apple 下載完整的 macOS 安裝磁碟
    再把它製作可開機安裝磁碟,

以我的範例為例,我的 USB 隨身碟名稱就剛好叫 “USB”,所以以下為製作的指令與過程,

1
2
3
4
5
6
7
8
9
sudo /Applications/Install\ macOS\ Big\ Sur.app/Contents/Resources/createinstallmedia --volume /Volumes/USB
Password:
Ready to start.
To continue we need to erase the volume at /Volumes/USB.
If you wish to continue type (Y) then press return: Y
Erasing disk: 0%... 10%... 20%... 30%... 100%
Copying to disk: 0%... 10%... 20%... 30%... 40%... 50%... 60%... 70%... 80%... 90%... 100%
Making disk bootable...
Install media now available at "/Volumes/Install macOS Big Sur"

以上就是 macOS 版本升級的方法介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
macOS 查詢 Xcode 版本的 3 種方法
macOS 安裝 zsh-completions 自動完成指令
mac 雙螢幕延伸模式的 dock 切換方法
macOS Screen Sharing 用指令開啟螢幕分享
macOS 安裝舊版的 Xcode 版本

Linux iostat 指令用法範例

本篇 ShengYu 介紹 Linux iostat 指令用法,iostat 是一個用於顯示系統的磁碟 I/O 統計資訊的 Linux 指令。它可以提供關於磁碟讀寫、平均回應時間、磁碟使用率等方面的資訊。現在讓我們來看一下它的基本用法以及其他常見和進階的用法。

基本用法

iostat 指令的基本用法如下:

1
iostat [options] [interval [count]]

其中,options 是一些可選的參數,interval 是兩次回報之間的延遲時間(以秒為單位),count 是回報的次數。

Ubuntu 要用 apt 安裝的話請輸入 sudo apt install sysstat 指令。

要查看磁碟的使用情況,只需在終端中輸入以下指令:

1
iostat

這將顯示所有磁碟的平均 I/O 情況和 CPU 使用率。

其他常見用法

iostat 指令指定延遲時間和回報次數,用法如下,

1
iostat 5 3

這將每隔五秒回報一次磁碟的使用情況,共回報三次。

iostat 指令顯示指定的磁碟資訊,用法如下,

1
iostat -d /dev/sda

這將僅顯示名為 /dev/sda 的磁碟的使用情況。

iostat 常用選項

當你在 Linux 系統中執行 iostat 指令時,你可以使用一些選項來調整它的行為。以下是一些常用的選項及其說明:
-c:顯示 CPU 使用情況的統計資訊,包括每個 CPU 核心的使用率、context switch次數和中斷次數。
-d:顯示磁碟 I/O 使用情況的統計資訊,包括每個磁碟的讀寫速率、平均等待時間和 I/O 佇列長度。
-h:以人類可讀的格式顯示結果,這樣可以更容易理解資料。
-k:以 KB/s 為單位顯示磁碟 I/O 資料,而不是預設的 blocks per second。
-m:以 MB/s 為單位顯示磁碟 I/O 資料。
-N:顯示網路 I/O 使用情況的統計資訊,包括每個網路接口的接收和發送速率。
-t:顯示時間戳記,以便在多次執行 iostat 時追蹤資料變化。

這些選項可以幫助你根據需要查看系統的 CPU、磁碟和網路使用情況的統計資訊。

進階用法

iostat 指令監視磁碟讀寫情況,用法如下,

1
watch -n 1 iostat -x

這將每秒更新一次磁碟的詳細 I/O 情況,包括讀寫速度、等待時間等。

iostat 指令監視指定磁碟的 I/O 活動,用法如下,

1
iostat -x -d /dev/sdb

這將持續顯示名為 /dev/sdb 的磁碟的詳細 I/O 情況。

iostat 指令顯示 CPU 和磁碟的詳細資訊,用法如下,

1
iostat -x -c

這將顯示 CPU 和磁碟的詳細資訊,包括每個 CPU 核心的使用率和磁碟的 I/O 活動。

總結

iostat 指令是一個強大的工具,用於監視和分析系統的磁碟 I/O 情況。透過了解其基本用法、其他常見用法和進階用法,使用者可以更好地了解系統的磁碟使用情況,並進行性能優化和故障排除。無論是用於監視系統狀態、測試磁碟性能還是除錯磁碟問題,iostat 都是一個非常有用的工具。

以上就是 Linux iostat 指令用法範例的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Linux 常用指令教學懶人包
Linux wget 下載檔案用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例
Linux xargs 參數清單轉換用法與範例
Linux tail 持續監看檔案輸出用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例

C++ std::swap 用法與範例

本篇 ShengYu 介紹 C++ std::swap 用法與範例,在 C++ 中,當我們需要交換兩個變數的值時,我們通常會使用一個名為swap的函式。這個函式可以幫助我們快速且簡單地交換變數的值,而不需要額外的程式碼。在本篇文章中,我們將探討如何使用C++標準庫中的std::swap函式,以及如何自製一個自己的swap函式。

使用 std::swap 函式

首先,讓我們看一下如何使用C++標準庫中提供的std::swap函式來交換兩個變數的值。這個函式非常方便,因為它已經被優化並且被廣泛使用。

要使用 std::swap 的話,需要引入的標頭檔: <algorithm>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>

int main() {
int a = 5;
int b = 10;

std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;

std::swap(a, b);

std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;

return 0;
}

在上面的程式碼中,我們首先定義了兩個整數變數ab,並且初始化它們的值。然後,我們使用std::swap函式來交換它們的值,最後輸出交換後的結果。

1
2
Before swapping: a = 5, b = 10
After swapping: a = 10, b = 5

這種方法非常簡單且高效,因為std::swap函式已經被優化並且具有良好的性能。

自製swap函式:使用參考進行交換

除了使用標準庫提供的函式外,我們還可以自製一個自己的swap函式。這樣做的好處是我們可以更好地理解變數交換的原理,並且可以根據需要進行修改和擴充。請看以下範例,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>

void referenceSwap(int& x, int& y) {
int temp = x;
x = y;
y = temp;
}

int main() {
int a = 5;
int b = 10;

std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;

referenceSwap(a, b);

std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;

return 0;
}

在這個自製的swap函式中,我們使用了參考(reference)參數,這樣可以直接修改變數的值而不需要回傳值。這種方法與使用標準庫提供的方法相比,更加靈活且容易理解。

自製swap函式:使用指標進行交換

除了使用參考(reference)外,我們還可以使用指標(pointer)來交換兩個變數的值。這種方法與使用參考類似,但是需要傳遞指向變數的指標。請看以下範例,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>

void pointerSwap(int* x, int* y) {
int temp = *x;
*x = *y;
*y = temp;
}

int main() {
int a = 5;
int b = 10;

std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;

pointerSwap(&a, &b);

std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;

return 0;
}

在這個方法中,我們透過將變數的地址傳遞給pointerSwap函式,然後在函式內部使用指標操作來交換兩個變數的值。這種方法與使用參考的方法非常相似,但是指標允許我們明確地操作變數的記憶體地址。

總結

在本篇文章中,我們學習了如何使用C++中的std::swap函式來交換兩個變數的值,以及如何自製一個自己的參考跟指標swap函式來進行變數交換。無論是使用標準庫提供的函式還是自製的函式,都可以方便地實現變數交換的功能。

以上就是 C++ std::swap 用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
C/C++ 新手入門教學懶人包
std::string 用法與範例
std::vector 用法與範例
std::sort 用法與範例
std::map 用法與範例
std::set 用法與範例

Swiss File Knife 多功能命令列工具介紹及超實用FTP功能

本篇 ShengYu 介紹 Swiss File Knife 多功能命令列工具,在現代的數位工作環境中,擁有一款功能強大的命令列工具是每個開發者、系統管理員及技術愛好者的夢想。Swiss File Knife(SFK)就是這樣一款多功能的命令列工具,它能在不需要安裝多個單獨工具的情況下,幫助使用者完成許多常見的檔案和文字處理任務。本文將介紹 SFK 的主要功能,特別是其強大的 FTP 功能,並提供一些實用的使用範例。

Swiss File Knife 介紹

Swiss File Knife,顧名思義,其名稱靈感來自瑞士軍刀(Swiss Army Knife),這是一款集多種工具於一身的實用軟體。SFK 支持 Windows、Linux 和 MacOS 系統,提供了一系列實用的檔案和文字處理功能,使得使用者可以輕鬆完成各種任務。

主要功能概述

  1. 檔案處理

    • 合併檔案

      1
      sfk concat file1.txt file2.txt -o output.txt

      這個指令將 file1.txtfile2.txt 合併成一個新檔案 output.txt

    • 分割檔案

      1
      sfk split bigfile.txt -size 1m

      bigfile.txt 按每個部分 1MB 大小進行分割。

    • 比較檔案

      1
      sfk diff file1.txt file2.txt

      比較 file1.txtfile2.txt 之間的差異。

    • 查找檔案

      1
      sfk find -pattern "*.txt" -dir /path/to/search

      /path/to/search 目錄中查找所有 .txt 檔案。

    • 複製檔案

      1
      sfk copy file.txt /path/to/destination/

      file.txt 複製到 /path/to/destination/ 目錄。

  2. 文字處理

    • 搜尋和替換

      1
      sfk replace in file.txt from "oldtext" to "newtext"

      file.txt 中的所有 oldtext 替換為 newtext

    • 文字轉換

      1
      sfk tolower file.txt -o lowerfile.txt

      file.txt 中的所有文字轉換為小寫並保存到 lowerfile.txt

    • 提取文字

      1
      sfk extract file.txt "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"

      file.txt 中提取所有的電子郵件地址。

  3. 系統操作

    • 行程監控和管理

      1
      sfk ps

      列出當前系統中的所有行程。

    • 目錄樹查看

      1
      sfk tree /path/to/directory

      以圖形化方式顯示 /path/to/directory 目錄結構。

    • 服務監控

      1
      sfk check service

      檢查本地或遠端系統的服務狀態。

  4. 網路工具

    • 連接埠掃描

      1
      sfk scanport 192.168.1.1 1 65535

      掃描 IP 地址 192.168.1.1 上的所有連接埠。

    • 檔案傳輸

      1
      sfk httpserv -port 8080

      在本地啟動一個 HTTP 伺服器,連接埠號為 8080,用於檔案傳輸。

    • URL 檢查

      1
      sfk checkurl http://example.com

      檢查 URL http://example.com 的可達性和回應時間。

  5. 資料壓縮和解壓

    • 壓縮檔案

      1
      sfk zip output.zip file1.txt file2.txt

      file1.txtfile2.txt 壓縮為 output.zip 檔案。

    • 解壓檔案

      1
      sfk unzip output.zip

      解壓 output.zip 檔案。

  6. 腳本編寫

    • 批量處理

      1
      sfk script myscript.txt

      執行腳本檔案 myscript.txt 中的指令。

實用的 FTP 功能

SFK 的 FTP 功能特別實用,對於需要頻繁進行檔案傳輸和管理的使用者來說,是不可多得的利器。以下是 SFK 提供的主要 FTP 功能以及一些常見的使用範例:

主要 FTP 功能

  1. 上傳檔案:將本地檔案上傳到遠端 FTP 伺服器。
  2. 下載檔案:從遠端 FTP 伺服器下載檔案到本地。
  3. 列出檔案和目錄:列出遠端 FTP 伺服器上的檔案和目錄。
  4. 刪除檔案:刪除遠端 FTP 伺服器上的檔案。
  5. 建立和刪除目錄:建立新的遠端目錄或刪除現有目錄。
  6. FTP 腳本支持:支持使用腳本來自動化 FTP 任務,適合批量處理。

使用範例

以下是一些常見的 SFK FTP 指令範例:

上傳檔案到 FTP 伺服器

1
sfk ftpput user:password@ftp.server.com /remote/path/file.txt /local/path/file.txt

這個指令將本地檔案 /local/path/file.txt 上傳到 FTP 伺服器的 /remote/path/file.txt

從 FTP 伺服器下載檔案

1
sfk ftpget user:password@ftp.server.com /remote/path/file.txt /local/path/file.txt

這個指令將遠端檔案 /remote/path/file.txt 下載到本地的 /local/path/file.txt

列出遠端目錄中的檔案

1
sfk ftpls user:password@ftp.server.com /remote/path/

這個指令列出 /remote/path/ 目錄中的檔案和子目錄。

刪除遠端檔案

1
sfk ftprm user:password@ftp.server.com /remote/path/file.txt

這個指令刪除 FTP 伺服器上的 /remote/path/file.txt 檔案。

建立遠端目錄

1
sfk ftpmkdir user:password@ftp.server.com /remote/path/newdir

這個指令在 FTP 伺服器上建立一個新的目錄 /remote/path/newdir

自動化 FTP 任務

透過 SFK 的腳本功能,你可以將多個 FTP 操作組合起來,進行自動化處理。例如,下面是一個簡單的腳本範例,先上傳檔案,然後列出目錄:

1
sfk ftp user:password@ftp.server.com -command "put /remote/path/file.txt /local/path/file.txt; ls /remote/path/"

這個腳本首先上傳本地檔案,然後列出遠端目錄中的檔案。

總結

Swiss File Knife 是一款功能豐富且強大的命令列工具,特別適合那些需要高效處理檔案和文字的使用者。其強大的 FTP 功能使得檔案傳輸和管理變得更加便捷和高效。無論是單次的檔案上傳下載,還是批量自動化操作,SFK 都能夠提供高效便捷的解決方案。如果你經常處理 FTP 任務,Swiss File Knife 無疑是一個非常實用的工具。

下載點可以參考 Swiss File Knife sourceforge 這裡。

以上就是 Swiss File Knife 多功能命令列工具的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

為什麼 MVP 是每個創業者都應該了解的關鍵策略?

本篇 ShengYu 來聊聊什麼是最小可行產品,Minimum Viable Product (MVP) 最小可行產品是軟體開發和創業領域中一個重要的概念。以及做產品中這件事為什麼如此重要,你是否曾經花費大量時間和資源開發產品,卻發現市場並不接受?最小可行產品(MVP)能幫助你避免這種情況。在這篇文章中,我們將探討什麼是MVP,為什麼它對初創企業和成熟公司同樣重要,並分享一些真實案例,告訴你如何有效地構建和運用MVP。

什麼是最小可行產品(MVP)?

在現代創業和產品開發中,”最小可行產品”(Minimum Viable Product,簡稱MVP)是一個非常重要的概念。MVP是指具有最基本功能的產品,能夠滿足早期使用者的核心需求,並且可以快速推出市場以取得反饋,從而進一步完善和改進產品。

為什麼需要MVP?

創業和產品開發過程中,最常見的風險之一就是投入大量時間和資金開發一個最終可能並不受市場歡迎的產品。MVP的出現正是為了解決這一問題。透過先推出一個簡單的、功能有限但可以使用的產品,我們能夠:

  1. 驗證市場需求:了解目標使用者是否真的需要這樣的產品。
  2. 快速叠代改進:根據使用者的反饋,快速改進產品,提升使用者體驗。
  3. 節省資源:避免在無用的功能上浪費時間和資金,把精力集中在最重要的功能上。
  4. 降低風險:在初期就能發現並解決潛在的問題,減少未來開發的風險。

如何構建MVP?

構建MVP並不是簡單地去掉所有功能,而是有策略地選擇那些最關鍵的、能夠解決使用者核心問題的功能。以下是構建MVP的一些步驟:

  1. 定義問題和目標使用者:首先明確你要解決的問題以及目標使用者群體,這樣才能確保你的MVP能夠滿足這些使用者的需求。
  2. 列出所有潛在功能:把你認為產品應該具備的所有功能列出來,然後優先排序。
  3. 選擇核心功能:選擇那些最能解決目標使用者問題的核心功能,這些功能將構成你的MVP。
  4. 開發和測試:快速開發出MVP,並進行內部測試,確保基本功能可以正常執行。
  5. 推出市場並收集反饋:將MVP推向市場,收集使用者反饋,了解他們的使用體驗和需求。

成功的MVP案例

前面已經了解了什麼是MVP,那現在我們來看看市面上有什麼值得我們學習的MVP案例,

  1. Dropbox:Dropbox的創始人並沒有在一開始就構建完整的產品,而是製作了一個簡單的影片,展示了Dropbox的核心功能。這個影片吸引了大量使用者的興趣和註冊,幫助團隊驗證了市場需求。

  2. Airbnb:Airbnb最初的MVP是一個簡單的網站,允許使用者在自己的家中出租空閒房間。這個簡單的網站幫助創始人驗證了人們對短期出租房間的需求。

  3. Instagram
    Instagram一開始的MVP是一個名為Burbn的應用,主要功能是允許使用者分享地理位置和照片。創始人發現使用者對分享照片的功能最感興趣,於是他們簡化了產品,專注於照片分享和簡單的濾鏡功能,從而誕生了現在的Instagram。

  4. Facebook
    Facebook最初僅僅是一個面向哈佛大學學生的校內社交平台,名為“TheFacebook”。其功能非常簡單,主要是提供一個在線的學生名冊。透過逐步擴展到其他大學,並在收到使用者反饋後不斷增加新功能,Facebook最終成為全球最大的社交媒體平台之一。

  5. Spotify
    Spotify的MVP是一個簡單的桌面應用程式,允許使用者免費流媒體播放音樂。創始團隊透過這個基本產品測試了使用者對流媒體音樂服務的需求和反應。使用者的正面反饋幫助Spotify確信他們的商業模式,並逐步擴展其功能和音樂庫。

  6. Amazon
    Amazon的創始人Jeff Bezos一開始只是一個在線書店,產品非常簡單,只有基本的購物車和結賬功能。他透過這個MVP驗證了在線購物的市場需求。隨著時間的推移,Amazon逐步擴展到銷售其他產品,成為今天的電商巨頭。

  7. Uber
    Uber的MVP名為UberCab,是一個簡單的應用,允許使用者透過手機呼叫豪華車。在早期階段,創始人只在舊金山運營這項服務,並收集使用者反饋。透過不斷優化使用者體驗和擴大服務範圍,Uber逐漸成為全球範圍內的共享出行領導者。

總結

這些案例展示了MVP在不同領域和行業中的成功應用。它們的共同點在於創始人都選擇了一個簡單但具有關鍵價值的功能,迅速推出市場,並根據使用者反饋逐步改進和擴展產品。這種方法不僅有效地節省了資源,還能迅速驗證市場需求,是創業和產品開發中極其寶貴的策略。

最小可行產品(MVP)是一種有效的產品開發策略,可以幫助創業者和企業節省資源,降低風險,並且快速適應市場需求。在構建MVP的過程中,關鍵是聚焦於核心功能,快速推出市場並且不斷從使用者反饋中學習和改進。這樣,才能逐步打磨出一款成功的產品。

以上就是 什麼是最小可行產品的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

macOS python urllib3 v2 only supports OpenSSL 1.1.1 問題與解決方法

本篇 ShengYu 紀錄在 macOS 執行 python 跑 requests 遇到的 urllib3 v2 only supports OpenSSL 1.1.1 問題與解決方法,今日在新 macOS 中執行 python 跑 requests 遇到以下問題,

1
2
3
4
% ./main.py
/Users/shengyu/Library/Python/3.8/lib/python/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.co
m/urllib3/urllib3/issues/3020
warnings.warn(

看起來似乎是說我的Python環境中使用的ssl模組版本(LibreSSL 2.8.3)不被urllib3版本2.x支持。urllib3版本2要求OpenSSL 1.1.1或更高版本。

用 pip3 查看我安裝 urllib3 的版本是 2.2.1

1
2
pip3 list | grep urllib3
urllib3 2.2.1

網路上查的結果有幾種方式,最後是採用降級安裝 urllib3 舊版本解決,這篇是說安裝 1.26.6 可以解決

降級 urllib3 版本

要降級 urllib3,你可以使用 pip 安裝指定的 urllib3 舊版本,

1
pip3 install urllib3==1.26.15

安裝後查詢一下 urllib3 版本

1
2
% pip3 list | grep urllib3
urllib3 1.26.15

或者是安裝 urllib3 2.0 以下的最新版

1
pip3 install 'urllib3<2.0'

使用 Python 虛擬環境來安裝 urllib3 舊版本

以下是如何建立虛擬環境並安裝相容版本的 urllib3:

1
2
3
python -m venv myenv
source myenv/bin/activate # 在 Windows 上使用 `myenv\Scripts\activate`
pip install urllib3==1.26.15

離開虛擬環境的話則是輸入

1
deactivate

無論在哪個作業系統上,deactivate 指令都可以退出當前的虛擬環境,使你回傳到全域的 Python 環境。

以上就是 macOS 執行 python 跑 requests 遇到的 urllib3 v2 only supports OpenSSL 1.1.1 問題與解決方法,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

macOS 安裝舊版的 Xcode 版本 (Download an Older Version of Xcode)

本篇 ShengYu 紀錄 macOS 安裝舊版的 Xcode 版本,例如我家中現在服役的 2014 的 mbpr15 只能更新到 macOS 11.7.10,只能裝對應的 Xcode 13.2.1,但 AppStore 只能裝最新版本的 Xcode,那怎麼辦呢?

Apple 有提供開發者下載 Xcode 歷史版本,(需要登入一下Apple ID),
https://developer.apple.com/download/all/

然後在搜尋列中輸入 Xcode,也可以帶入 Xcode 版本資訊(例如 Xcode 13.2.1)

下載後點擊檔案,會自動解壓縮,解壓縮後移動到應用程式就可以執行了,
如果你有多個 Xcode 版本,你也可以將 Xcode 改名加上版號。

其他參考
https://forums.developer.apple.com/forums/thread/698396

以上就是 macOS 安裝舊版的 Xcode 版本介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
mac 雙螢幕延伸模式的 dock 切換方法
macOS Screen Sharing 用指令開啟螢幕分享
macOS 安裝 zsh-completions 自動完成指令
macOS 版本升級的方法

Linux iotop 指令用法範例

本篇 ShengYu 介紹 Linux iotop 指令用法,iotop 是一個 Linux 指令,用於監視系統中磁碟 I/O 的情況,類似於 top 指令用於監視 CPU 使用情況。它可以顯示正在進行的磁碟 I/O 操作的相關資訊,如行程、IO 速度、IOPS(每秒輸入/輸出操作數)等。現在讓我們來看一下它的基本用法以及其他常見和進階的用法。

基本用法

iotop 指令的基本用法如下,

1
iotop [options]

Ubuntu 要用 apt 安裝的話請輸入 sudo apt install iotop 指令。

要查看當前系統中正在進行的磁碟 I/O 操作,只需在終端中輸入以下指令:

1
iotop

這將列出正在進行的磁碟 I/O 操作的相關資訊,如行程 ID、使用者、IO 速度等。預設情況下,iotop 每秒更新一次資訊。

iotop 常用選項

當你在 Linux 系統中執行 iotop 指令時,你可以使用一些選項來調整它的行為。以下是一些常用的選項及其說明:
-o:僅顯示符合指定選項的行。例如,iotop -o 將僅顯示有 IO 活動的行程。
-b:以批次模式執行,這將禁用互動式模式,直接將結果輸出到標準輸出中。
-m:用來僅顯示檔案系統相關的 IO 活動,而忽略 swap 空間的 IO 活動。這對於關注檔案系統 IO 的場景很有用。
-n NUM:指定要執行的疊代次數,預設為一次。
-d SEC:指定更新延遲(秒)。預設為 1 秒。
-p PID:僅顯示指定行程 ID 的 IO 活動。
-u USER:僅顯示指定使用者名稱的 IO 活動。
-P:顯示行程 ID,而不是指定行程的指令行。
-a:顯示 IO 活動的累計資料而不是瞬時值。

這些選項可以根據你的需求來選擇,以更好地了解系統中的 IO 活動情況。

其他常見用法

iotop 指令使用 -o 選項,可以顯示磁碟 I/O 操作的每秒輸出操作數:

1
iotop -o

這將顯示每個行程的每秒輸出操作數。

iotop 指令使用 -a 選項,可以顯示正在進行磁碟 I/O 操作的每秒輸入操作數:

1
iotop -a

這將顯示每個行程的每秒輸入操作數。

進階用法

iotop 指令透過 -d 選項,可以顯示指定時間間隔的磁碟 I/O 操作:

1
iotop -d 5

這將每隔五秒顯示一次磁碟 I/O 操作的情況。

iotop 指令透過 -p 選項,可以顯示指定行程的 I/O 操作:

1
iotop -p <PID>

這將僅顯示指定行程 ID(PID)正在進行的 I/O 操作。

iotop 指令透過 -T 選項,可以顯示執行緒等級的磁碟 I/O 使用情況,而不僅僅是處理程式等級。例如:

1
iotop -T

iotop 指令透過 -P 選項,可以顯示磁碟 I/O 操作的累計值,而不是瞬時值。例如:

1
iotop -P

總結

iotop 指令是一個非常有用的工具,用於監視系統中的磁碟 I/O 操作。透過了解其基本用法、其他常見用法和進階用法,使用者可以更好地了解系統的磁碟 I/O 情況,並及時發現和解決可能存在的性能問題。無論是用於性能優化、故障排查還是監控系統狀態,iotop 都是一個非常實用的指令。

以上就是 Linux iotop 指令用法範例的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Linux 常用指令教學懶人包
Linux wget 下載檔案用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例
Linux xargs 參數清單轉換用法與範例
Linux tail 持續監看檔案輸出用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例

C/C++ sscanf 用法與範例

本篇 ShengYu 介紹 C/C++ sscanf 用法與範例,在 C/C++ 語言中,sscanf 函式是一個非常有用的工具,用於從字串中提取資料(從字串中讀取格式化的輸入)。本文將介紹 sscanf 函式的基本用法,並提供一些常見的使用情況和範例程式碼,scanf 詳細用法範例請繼續往下閱讀。

C/C++ 要讓指定的格式從字串中提取資料,並將提取的資料儲存到指定的變數可以使用 sscanf,使用 sscanf 的話需要引入的標頭檔 <stdio.h>,如果要使用 C++ 的標頭檔則是引入 <cstdio>
sscanf 函式原型為

1
int sscanf(const char *str, const char *format, ...);

其中,str 是包含要解析的字串,format 是格式字串,用於指定解析的方式,而 ... 則是輸出的變數。sscanf 函式會根據 format 字串中的格式來解析 str 字串,並將解析結果儲存到 ... 中指定的變數中。

C/C++ sscanf 基本用法範例

下面是一個簡單的範例,示範了如何使用 sscanf 函式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main() {
char str[] = "John 25";
char name[20];
int age;

// 從 str 中按照格式提取資料
sscanf(str, "%s %d", name, &age);

printf("Name: %s\n", name);
printf("Age: %d\n", age);

return 0;
}

在這個範例中,我們首先定義了一個字串 str 包含了一個名字和一個年齡,然後我們定義了兩個變數 nameage,用於儲存從字串中提取的名字和年齡,之後我們使用 sscanf 函式按照格式 "%s %d" 從字串 str 中提取名字和年齡,並將它們分別儲存到 nameage 變數中。最後我們列印出提取出的名字和年齡。

除了基本的用法外,C/C++ sscanf 函式還可以處理更覆雜的情況,下面是一些常見的用法及範例程式碼:

C/C++ sscanf 提取多個資料項

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main() {
char str[] = "3.14 42 hello";
double pi;
int num;
char word[20];

// 從 str 中按照格式提取資料
sscanf(str, "%lf %d %s", &pi, &num, word);

printf("Pi: %.2f\n", pi);
printf("Number: %d\n", num);
printf("Word: %s\n", word);

return 0;
}

這個範例中,字串 str 包含了一個浮點數、一個整數和一個單詞。我們定義了三個變數 pinumword,用於儲存從字串中提取的資料。使用 sscanf 函式按照格式 "%lf %d %s" 從字串 str 中提取這三個資料,並將它們分別儲存到對應的變數中。最後我們印出提取出的浮點數、整數和單詞。

C/C++ sscanf 使用格式修飾符

忽略特定的字元,例如:忽略-字元,範例如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main() {
char str[] = "2024-04-30";
int year, month, day;

// 從 str 中按照格式提取資料
sscanf(str, "%d-%d-%d", &year, &month, &day);

printf("Year: %d\n", year);
printf("Month: %d\n", month);
printf("Day: %d\n", day);

return 0;
}

這個範例中,字串 str 包含了一個日期,格式為 “年-月-日”。我們定義了三個變數 yearmonthday,用於儲存從字串中提取的年、月和日。使用 sscanf 函式按照格式 "%d-%d-%d" 從字串 str 中提取年、月和日,忽略中間的-連接字元,並將它們分別儲存到對應的變數中。最終我們列印出提取出的年、月和日。

C/C++ sscanf 處理不定長資料

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main() {
char str[] = "10 20 30 40 50";
int numbers[5];

// 從 str 中按照格式提取資料
int count = sscanf(str, "%d %d %d %d %d", &numbers[0], &numbers[1], &numbers[2], &numbers[3], &numbers[4]);

printf("Count: %d\n", count);
printf("Numbers: ");
for (int i = 0; i < count; ++i) {
printf("%d ", numbers[i]);
}
printf("\n");

return 0;
}

這個範例中,字串 str 包含了多個整數,以空格分隔。我們定義了一個整型陣列 numbers,用於儲存從字串中提取的整數。使用 sscanf 函式按照格式 "%d %d %d %d %d" 從字串 str 中提取整數,並將它們儲存到陣列 numbers 中。sscanf 函式回傳成功解析的資料項的數量,我們可以據此確定實際提取了多少個整數。最終,我們列印出提取出的整數以及實際提取的數量。

總結

sscanf 函式是 C 語言中用於從字串中提取資料的強大工具。透過指定合適的格式字串,我們可以靈活地從字串中提取各種類型的資料,並將其儲存到指定的變數中。本文介紹了 sscanf 函式的基本用法以及一些常見的使用情況和範例程式碼,你可以看到 sscanf 函式的靈活性和多功能性。無論是從簡單的整數和浮點數,到複雜的字串和特定格式的輸入,它都能應對自如。

以上就是 C/C++ sscanf 的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ strcpy 用法與範例
C/C++ strcmp 用法與範例
C/C++ strcat 用法與範例
C/C++ strstr 用法與範例
C/C++ strtok 用法與範例