PaceMaster / 配速大師 / 計圈器 / 計圈APP / 自動計圈器 / 走跑計圈器 / 走跑運動APP

最近的運動就是走路,常在公園裡繞圈快走,每次都忘記自己走了幾圈,因此就有了設計一個自動計圈APP的想法。

在此分享這個APP,此APP不需安裝直接在瀏覽器運行即可。

  • APP全名:PaceMaster 走跑運動計圈器
  • APP簡稱:PaceMaster / 配速大師 /
                      計圈器 / 計圈APP / 自動計圈器 / 走跑計圈器 / 走跑運動APP
  • APP使用說明書:如下
  • APP全名:PaceMaster 走跑運動計圈器
  • 使用建議為了確保 100% 的準確計圈,在使用本網頁 APP 運動時,請避免手動按下手機 側邊電源鍵關閉螢幕。請讓程式透過 Wake Lock 功能自動維持螢幕亮度(它會稍微變暗但不會關閉),這樣 JavaScript 才能獲取最高優先權,維持里程的精確度。

PaceMaster 走跑運動計圈器 使用說明

        PaceMaster 是一款專為「定點計圈」設計的專業運動追蹤工具。透過直覺的介面與精確的 GPS 運算,協助跑者與健走者在校園、社區或公園內繞圈運動時,輕鬆掌握總里程、配速及分段計圈數據。

🌟 為什麼您需要 PaceMaster?


生活化情境一:當你在校園操場進行「規律快走」時...

許多長輩喜歡在晨間或傍晚到鄰近小學、公園快走。但走著走著,常會忘記自己到底走了幾圈,或者因為路邊鄰居打個招呼,就忘了剛才的進度。

  • 免除記憶壓力: 每次經過司令台、大樹或路燈等標記點,輕按一下,APP 就幫您記住這圈的里程與時間,讓您可以放空心情,享受運動。
  • 字體大又清楚: 考慮到運動中與長輩的視力需求,主介面採用超大字體顯示「運動總里程」,一眼就能看清當前運動量。

生活化情境二:當你在進行「10 公里長跑」時...

對於專業跑者,在操場繞圈跑第 15 圈時,腦袋常會一片空白:「我現在是跑了 6 公里還是 6.4 公里?」

  • 不再燒腦算圈數: 手動計圈能精準對齊操場起點,自動為您紀錄每一圈數據。
  • 分段數據清晰: 進行間歇跑或變速訓練時,您可以精確抓出每一段衝刺的里程與耗時,讓訓練更科學。

🏃 核心功能亮點

  • 實時數據監測: 大字體顯示總里程,即時更新目前配速與運動總時間。
  • 多功能計圈按鈕: 一鍵切換「開始」與「結束」計圈,操作直覺不手忙腳亂。
  • 數據並列顯示: 計圈里程數據與操作按鈕並列,無需切換頁面即可掌握當前分段進度。
  • 最新紀錄至頂: 計圈列表自動將最新的分段資訊排在最上方,操作完立即能確認數據。
  • 螢幕常亮支援: 內建 Wake Lock 功能,運動期間螢幕不會自動熄滅,隨時可看。

📱 操作指南

  • 第一步:開始運動
    開啟 APP 後,點擊底部的 [開始運動]。系統會要求 GPS 定位權限,請點擊「允許」。頂部的狀態列若顯示「GPS 訊號良好」,代表系統已準備就緒。
  • 第二步:計圈操作
    在運動過程中,抵達起點時點擊 [開始計圈],系統將開始獨立計算該分段的里程。當再次回到起點或完成分段時,點擊 [結束計圈]。系統會自動紀錄單圈里程與耗時。
  • 第三步:結束運動
    訓練結束後,點擊紅色的 [結束運動] 按鈕。系統將停止所有計時與 GPS 追蹤,並保留當前的數據畫面供您參考。
💡 使用小撇步:
  • 定位精準度: 建議在戶外無遮蔽空間使用。初次啟動時,請給予系統 5-10 秒穩定 GPS 訊號。
  • 觸控回饋: 計圈按鈕設有震動回饋,確保您在運動中也能透過手感確認操作成功。
  • 配速參考: 若移動速度過慢,配速將顯示為 00:00 以維持數據純淨度。
🛠 技術限制說明:
1. 本程式運作於瀏覽器環境,若重新整理網頁,當前的運動數據將會清除。
2. 請確保手機的「省電模式」未限制瀏覽器的背景執行權限。

PaceMaster - 您的專業運動訓練夥伴

Read More »

蓋上筆電的螢幕時,如何讓筆電繼續工作?


n  根據個人經驗,你可能會因為以下原因,需要在筆電的螢幕蓋上時,還需要它繼續維持在工作狀態 :

1. 外接螢幕:當筆電有外接螢幕時,可能會把筆電蓋上,這樣可以專注於外接螢幕上的工作。 

2. 伺服器用途:有些人會使用筆電作為小型伺服器,處理特定的任務,如文件共享、媒體伺服器或開發環境。

3. 節省空間:在空間有限的情況下,蓋上筆電可以節省桌面空間,同時仍然能夠利用筆電的計算能力。

4. 避免分心:有時候,使用者可能會蓋上筆電以避免被筆電螢幕上的通知或其他內容分心,專注於其他工作。

5. 保護隱私:在公共場所或辦公室環境中,蓋上筆電可以保護螢幕上的敏感資訊不被他人看到。    

n  在Windows系統上,當我們把筆電蓋上時,筆電可能會進入以下四種狀態之一:

1.  不進行動作:這種情況下,即使蓋上了螢幕,筆電會繼續運行,如下載文件或運行伺服器應用程式。

2.  睡眠模式(sleep mode):這是一種低功耗狀態,允許快速喚醒(較睡眠模式更快速)並繼續工作。

3. 休眠模式(hibernate mode):大多數筆電預設會在蓋上時進入休眠模式,以節省電力(較睡眠模式更省電),這樣也可以快速恢復工作狀態。

4. 關機

n  以上四種狀態,我們當然要選擇"不進行動作",才能讓我們蓋上筆電的螢幕時,能維持繼續工作的狀態。如果有此需求請依照以下步驟調整此設定:

1. 在Windows的[搜尋]欄輸入"控制台"

2. 點擊 [控制台]













3. 點擊[硬體和音效]










4. 點擊[電源選項]










5. 點擊[選擇蓋上螢幕時的行為] 










6. 在 [當我關閉筆記電腦螢幕時] 下拉選單中,將"電池使用中"和"一般電源"都選擇 [不進行動作] 。

7.  點擊[儲存變更]

完成此設定後,我們蓋上筆電螢幕時筆電就會繼續保持運行。

Read More »

如果在dataGridView中新增一個"序號"欄位,如何讓此欄位值自動編號?

要在dataGrudView中新增Seq欄位並自動編號如下圖,在此列出三種方式,可依照各自的情境擇一使用 :








可將自動編號邏輯加在dataGridView的以下事件中:(擇一使用) 

Read More »

DataGridView的欄位名稱(HeaderText)如何換行(在Visual Studio IDE)?

我詢問ChatGPT這個問題,得到以下的答案:

在 Visual Studio IDE 中,您可以使用以下方法為 DataGridView 控制項的欄位標題換行:

  1. 打開 DataGridView 控制項的設計器,選中要換行的欄位。
  2. 在屬性視窗中,將 "HeaderText" 的值設置為您想要的文本,例如 "First Line\nSecond Line"。
  3. 按下 "Enter" 鍵確認更改,您應該可以看到欄位標題的文字已經換行了。

請注意,換行符 "\n" 是在 Windows 平台上的標準換行符號。如果您使用的是其他平台,可能需要使用不同的換行符號。

如果依照以上方法,在屬性視窗中加上\n,應該是不會看到換行的效果。以下是我實際操作成功的紀錄:

1. 如下圖,我們在HeaderText欄輸入 Line1\nLine2 或 Line1'\n'Line2 都不能換行。










2. 在Visual Studio IDE環境,尋找xxxxx.designer.cs檔案,並找到 .HeadText = "Line1Line2"; 如下圖,







3. 修改 .HeaderText = "Line1Line2" 為 .HeaderText = "Line1\nLine2";







4. 回到IDE環境下,我們可以看到DataGridView的欄位名稱已顯示兩行。

   但是HeaderText看到的還是Line1Line2,因為\n在純文字欄位下無法顯示出來。左側的資料行只顯示第一行Line1.




Read More »

LINE在電腦上無法執行,出現 “Windows 無法存取指定的裝置、路徑或檔案,您可能沒也適當的權限,所以無法存取該項目” 該怎麼辦?

錯誤訊息 :







從此錯誤的訊息看來,很明顯的是檔案出問題,可能是檔案被移除、損壞、權限不夠或被封鎖等原因。

Windows的支援網站對此錯誤指出以下原因 :

- 如果您的電腦上存在下列任何一種情況,就可能發生這個問題。

  1. 您沒有檔案或檔案位置的存取權限。
  2. 檔案的所在位置目前無法存取,例如網路位置,或是目前未連接到電腦的外部磁碟機。
  3. 檔案已經移動或遭到刪除。
  4. 檔案或捷徑已損毀。
  5. 檔案可能遭到 Windows 封鎖。
  6. 您的防毒軟體可能封鎖檔案。

解決方法在這個網站上也有詳細的說明,你可以點選這裡前往察看

如果你在經過權限更改、移除、重灌、更新LINE等的程序後,問題還是沒解決,可能的問題就是(大部分都是)被防毒軟體給封鎖了。

如果不想或沒有權限更改防毒軟體的設定,至少有兩個方法可以讓你在電腦上繼續使用LINE:

方法一是使用Microsoft Store(微軟提供的線上商店)所提供的LINE APP。

另一個方法是使用Chrome的擴充能所提供的LINE APP(同樣是上chrome 線上應用程式商店下載即可)。

以方法一為例(使用Microsoft Store所提供的LINE APP):

1. 因為此錯誤我們已無法使用既有的LINE,所以須將它移除,如下圖:


2. 進入以下網址,下載及新安裝LINE :









Read More »

[啟動]資料夾在哪裡? (讓Windows開機後自動執行你的程式)

某些有特定用途的電腦,例如傳真服務、檔案伺服器服務...,一開機後我們就要啟動這些服務的相關的程式和設定;或者我們希望電腦一開機就自動將常用的軟體或程式執行起來。如果有以上需求,我們可將這些程式或設定放在Windows的啟動資料匣,當Windows一啟動時,這些程式就會自動地被執行。

Windows 7 版本,在[程式集]下有一個[啟動]選項,我們很容易就可以找到它,只要將相關程式放到此資料夾就完成了,非常清楚簡單。

從Windows 10以後的版本,[啟動]選項就被隱藏起來了,偶爾要使用時還真不容易找到,以下就是尋找[啟動]資料夾的方法:

  • 系統的[啟動]資料夾(對所有的使用者都有效)
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
⊞ Win+R  > 輸入 shell:Common Startup


  • 個別使用者的[啟動]資料夾
C:\%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
⊞ Win+R  > 輸入 shell:startup
Read More »

如何使用MailKit發送電子郵件?

最近發現有一支程式就唯獨在某台電腦上該程式內的e-mail就發不出去了,所以重新檢視一下收發電子郵件的程式及說明,發現在微軟的smtpClient Class文件中提到 SmtpClient Class 因不支援一些新的協議(protocol),在某些平台上已過時,不推薦在其他平台上使用。並指明改用 MailKit [備註1]或其他 Liberary。但是,如果平台上包含有.NET Standard 2.0(或更高版本)、.NET Framework 4 到 .NET Framework 4.8、.NET Core 仍可使用。[備註3]

所以就試著使用MailKit來收發電子郵件而不使用smtpClient Class,如下:

1. 在 Microsoft Visual Studio上安裝 MailKit

2. 使用 MailKit 發送電子郵件--C#程式範例

3. 相關參考文件

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. 在 Microsoft Visual Studio上安裝 MaiKit

第一次使用MailKit前須先安裝此套件[備註5],安裝步驟如下:

1.1 工具 > NuGet 套件管理員(N) > 管理方案的NuGet套件(N)…

1.2 在[瀏覽]下方的格子輸入mailkit > 點選[MailKit…項下載] > 出現右側[專案]名稱及是否[已安裝]資訊 > 勾選[專案] > 點選[安裝]。

1.3 點選[確定]繼續進行安裝。

1.4 [已安裝]訊息變為版本編號,表示安裝完成。


2. 使用 MailKit 發送電子郵件--C#程式範例
internal static bool SendEmailByMailKit(
    string FromName,    string FromAddress,
    string ToName,      string ToAddress,
    string CcName,      string CcAddress,
    string BccName,     string BccAddress,
    string SubjectText, string BodyText,    string AttachedFile)
{
    bool success = false;
    var message = new MimeMessage();
    var bodybuilder = new BodyBuilder();    // Using BodyBuilder for email content            
    //
    try
    {
        message.From.Add(new MailboxAddress(FromName, FromAddress));
        message.To.Add(new MailboxAddress(ToName, ToAddress));
        if(!string.IsNullOrEmpty(CcAddress))
            message.Cc.Add(new MailboxAddress(CcName, CcAddress));
        if (!string.IsNullOrEmpty(BccAddress))
            message.Bcc.Add(new MailboxAddress(BccName, BccAddress));
        message.Subject = "[TEST]" + SubjectText;                

        bodybuilder.TextBody = "[This is a plain text]\n\n" + BodyText;
        //or
        //bodybuilder.HtmlBody = "<b>[This is a html text]</b>" +  BodyText;

        if (!string.IsNullOrEmpty(AttachedFile))
            bodybuilder.Attachments.Add(AttachedFile);
        
        message.Body = bodybuilder.ToMessageBody();

        if(!string.IsNullOrEmpty(FromAddress))
        {
            string[] subs = FromAddress.Split('@');
            string mailhost = subs[1];

            var client = new MailKit.Net.Smtp.SmtpClient();
            client.Connect(mailhost, 587, MailKit.Security.SecureSocketOptions.None);
            // or 
            //client.Connect(mailhost, 25, MailKit.Security.SecureSocketOptions.None);
            client.Send(message);
            client.Disconnect(true);
            success = true;
        }                
    }
    catch (Exception e)
    {
        string errormessage = e.ToString();
        success = false;
    }            
    return success;
}
Read More »

如何操作Windows的文字檔(使用C#來建立、讀取、刪除檔案...)?

  •  如何判斷資料夾是否存在 :

if (System.IO.Directory.Exists(mypath))
    return true;
  • 如何建立一個資料夾:

Directory.CreateDirectory(mypath);

  • 如何建立一個文字檔並寫入一串文字:

if (!File.Exists(myfile))
{
    StreamWriter sw = File.CreateText(myfile);    //建立一個文字檔
    sw.WriteLine("my message...");                //寫入一串文字                      
    sw.Close();
}

  • 如何寫入一串文字到既有的文字檔內:

if (!File.Exists(myfile))
{
    StreamWriter sw = new StreamWriter(myfile, true);    //已存在的文字檔
    sw.WriteLine("my message...");                       //寫入一串文字               
    sw.Close(); }

  • 如何搬移檔案(將檔案搬到另一個資料夾):

File.Move(mySourcePathFile, myTargetPathFile);

  • 如何刪除一個檔案:

File.Delete(myfile);  

  • 如何讀取某一資料夾下的所有檔案:

string[] myfiles = System.IO.Directory.GetFiles(mypath);
foreach (string myfile in myfiles)
    myfilename = Path.GetFileName(myfile);    //myfile contains path & file.

  • 如何讀取檔案的內容(一次讀一行):

foreach (string line in File.ReadLines(myfile))

    string[] substring = line.Split(' ');

  • 如何判斷檔案內容是否為空白?

if (new FileInfo(myfilen).Length == 0)      
  retur true;  

  • 如何合併檔案路徑(資料夾)和檔名 :

string mypath = "...";
string myfile = "...";
string mypathfile = Path.Combine(mypath, myfile);

參考網站 : 檔案系統和登錄-c # 程式設計指南 | Microsoft Docs https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/file-system/



Read More »

SQL語法--如何取得日期及計算日期?

SQL取得日期需要透過特別的table,例如ORACLE資料庫要訪問DUAL table;DB2資料庫要訪問SYSDUMMY1 table。

以下以DB2為例,說明SYSDUMMY1 table及日期取得及計算的方法及範例:

  • SYSDUMMY1說明:
    • SYSDUMMY1是屬於系統內建的table,位於SYSIBM下,提供給SQL語句需要時使用,它的內容並不重要(從以下的例子可以發現)。
    • 我們只要利用SQL指令 SELECT * FROM SYSIBM.SYSDUMMY1 就可以看到它的內容。我們可以發現它的內容只有一筆資料,一個欄位,欄位名稱為IBMREQD其值為Y。
  • 取得各種形式的時間(如DATE, TIME, YEAR...),以目前的時間為例:

SELECT
  -- DATE & TIME
  CURRENT TIMESTAMP AS TIMESTAMP,
  CURRENT date AS DATE,
  CURRENT time AS TIME,
  -- YEAR
  YEAR(CURRENT TIMESTAMP) AS YEAR,
  -- MONTH
  MONTH(CURRENT TIMESTAMP) AS MONTH,
  MONTHNAME(CURRENT TIMESTAMP) AS MONTHNAME,     -- 傳回January, Febuary,...
  -- DAY
  DAY(CURRENT TIMESTAMP) AS DAY,                 -- 傳回本月的第幾天
  DAYS(CURRENT TIMESTAMP) AS DAYS,               -- 傳回自西元0001-1-1至此日期的天數
  DAYOFYEAR(CURRENT TIMESTAMP) AS DAYOFYEAR,     -- 傳回本年度的第幾天
  -- HOUR
  HOUR(CURRENT TIMESTAMP) AS HOUR,
  -- MINUTE
  MINUTE(CURRENT TIMESTAMP) AS MINUTE,
  -- SECOND
  SECOND(CURRENT TIMESTAMP) AS SECOND,
  MIDNIGHT_SECONDS(CURRENT TIMESTAMP) AS MIDNIGHT_SECONDS,-- 傳回當天零時到此時間的總秒數
  MICROSECOND(CURRENT TIMESTAMP) AS MICROSECOND,
  -- WEEK
  DAYNAME(CURRENT TIMESTAMP) AS DAYNAME,               -- 傳回Sunday, Monday,...
  DAYOFWEEK_ISO(CURRENT TIMESTAMP) AS DAYOFWEEK_ISO,   -- 傳回1到7, 週一為1,依此類推.
  DAYOFWEEK(CURRENT TIMESTAMP) AS DAYOFWEEK,           -- 傳回1到7, 週日為1,依此類推.
  WEEK_ISO(CURRENT TIMESTAMP) AS WEEK_ISO,             -- 傳回本年度的第幾週(1~53)
  WEEK(CURRENT TIMESTAMP) AS WEEK                      -- 傳回本年度的第幾週(1~54)
FROM SYSIBM.SYSDUMMY1
    • 取得各種形式的時間,執行結果如下:




  • 將字串轉換為日期的各種形式:
SELECT 
  DATE ('2022-03-15') AS DATE1,
  DATE ('03/15/2022') AS DATE2,
  TIME ('12:15:10') AS TIME1,
  TIME ('12.15.10') AS TIME2, 
  TIMESTAMP ('2022-03-15-12.00.00.000000') AS TIMESTAMP1,
  TIMESTAMP ('2022-03-15 12:00:00') AS TIMESTAMP2
FROM SYSIBM.SYSDUMMY1
    • 將字串轉換為日期,執行結果如下:




  • 日期計算的各種方法:
SELECT
  DAYS (CURRENT DATE) - DAYS (DATE('2022-03-10')) AS DAYS1,
  DATE('2022-03-15') - date('2022-03-10') AS DAYS2,
  DATE('2022-03-15') + 2 YEAR AS ADD_YEAR,
  DATE('2022-03-15') + 2 YEAR + 2 MONTH + 2 DAY AS ADD_YEAR_MONTH_DAY,
  TIME('12:15:10') + 2 HOURS + 2 MINUTES + 2 SECONDS AS ADD_HOUR_MINUTE_SEC
FROM SYSIBM.SYSDUMMY1
    • 日期的計算的各種方法,執行結果如下:




Read More »

如何將Windows 11工作列上的項目靠左?就像Windows 10 一樣...

 Windows 10 和 Windows 11 最明顯的差別是工作列上的所有項目都排在中間,剛使用的人可能會很不習慣,如果您想要把它更改為像 Windows 10 一樣靠左排列也是可以的,請看以下更改方法...

- Windows 11 預設將工作列上的項目都置中 ,如下圖:





- 將工作列上的項目改為置左(像Windows 10 一樣),如下圖:


- 更改方法,只要改一個設定,步驟如下:

  1. 在工作列上按滑鼠右鍵 > 選擇[工作列設定]
  2. 往下找[工作列行為] > [工作列對齊] > 右側欄位將[置中]改為[左] 如下圖即可。

Read More »
>