自由學習的風

幽夢影 張潮 少年讀書,如隙中窺月;中年讀書,如庭中望月;老年讀書,如臺上玩月。皆以閱歷之淺深,為所得之淺深耳。
顯示具有 Programming 標籤的文章。 顯示所有文章
顯示具有 Programming 標籤的文章。 顯示所有文章

VS Code 直接透過 sftp 同步到遠端伺服器

2024年9月29日 星期日

環境介紹:

  • 正式機:10.x.y.aaa,  Linux Ubuntu + Docker(Nginx + PHP + MySQL)
  • 開發機:10.x.y.bbb, Windows 11 + Laragon + VS Code

之前利用 VS Code 開發之前,總是利用 SSHFS-Win 掛載至本機後,再用比對軟體檢查哪些檔案有修改,是否需要上傳(註:freecommander 很好用)。

不過,有時只是一、二支程式需要上傳,總覺得這樣做的話有點繁瑣,最近發現有支 vscode 的 extension(擴充套件):sftp

可以 ssh 連到遠端伺服器,直接上傳,也支援多個網站,所以可以先上傳到測試伺服器,沒問題後再上傳到正式機。

安裝後要先設定遠端伺器資訊,按【F1】,選擇「SFTP: Config」,會在 .vscode 目錄中產生 sftp.json 設定範本檔,直接依個人需求填入設定值即可。


預設是只會有一組伺服器設定,若有多組伺服器的話,例如有測試機、正式機…等,那就要設定 profiles,把設定檔改成下列即可,連線時,按按【F1】,選擇「SFTP: Set Profile」,選擇要連線的伺服器即可。


這支擴充套件還提供其它蠻方便的功能,也可以去發掘喔!

利用 Docker 快速建立 Sql Server 環境

2023年2月16日 星期四

環境:

  1. Ubuntu Linux 2022
  2. Docker CE 23.0.1

Docker 映像檔:

  • mcr.microsoft.com/mssql/server:2022-latest

操作:

  1. 下載 SQL Server 2022 Image
    $ docker pull mcr.microsoft.com/mssql/server:2022-latest
  2. 執行容器(指定參數)
    $ docker run \
    -e "ACCEPT_EULA=Y" \
    -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
    -p 1433:1433 --name sql1 --hostname sql1 \
    -d \
    mcr.microsoft.com/mssql/server:2022-latest

  3. 檢查容器執行狀態
    $ docker ps  
  4. 安裝成功後,可下載或利用 chocolatey 來安裝 Sql Studio Management Studio
    c:\> choco install sql-server-management-studio
  5. 連線至 SQL Server 容器

容器執行參數說明:

  1. -e ACCEPT_EULA= 同意使用者授權合約
  2. -e MSSQL_SA_PASSWORD=<YourStrong@Passw0rd> 設定 SQL Server 最高管理員 sa 的密碼
  3. --name sql1 設定容器名稱
  4. --hostname sql1 設定容器主機名稱
  5. -p 1433: 1433 設定 port 的對應
  6. -d 設定容器以背景模式執行
  7. mcr.microsoft.com/mssql/server:2022-latest  SQL Server 映像檔來源與名稱

進階:

1. 掛載 volume 保存資料庫內容

  1. host 建立掛載的目錄
    $ mkdir data_mssql
  2. 【必須】設定該目錄擁有者, 預設owner id 為 10001
    $ sudo chown -R 10001 data_mssql
  3. 停止、刪除容器後,加上掛載 volume 參數後重新啟動容器
    $ docker run \
    -e "ACCEPT_EULA=Y" \
    -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
    -p 1433:1433 --name sql1 --hostname sql1 \
    -v ./data_mssql:/var/opt/mssql
    -d \
    mcr.microsoft.com/mssql/server:2022-latest

2. 利用 docker-compose 執行容器

1. 建立 docker-compose.yml 檔案,內容如下:
version: '3.5'

services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2022-latest
    restart: always
    ports:
      - 1433:1433
    volumes:
      - ./data_mssql:/var/opt/mssql
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=PutYourPassword
      - MSSQL_PID=Express
2. 執行

$ docker-compose up -d 


讀取 空氣品質指標(AQI) 的OpenData 資料

2022年10月15日 星期六

一、前由

前2天有位夥伴反應一個問題,之前讀取線上的 空氣品質指標(AQI) 資料時可以秒開,可是現在已經換成新的網址,結果讀取時間變得得慢,想請教大家有沒有解法。

 1. 空氣品質指標(AQI) 舊網址:http://opendata2.epa.gov.tw/AQI.json

 2. 空氣品質指標(AQI) 新網址:ttps://data.epa.gov.tw/api/v2/aqx_p_432?api_key=e8dd42e6-9b8b-43f8-991e-b3dee723a52d&limit=1000&sort=ImportDate desc&format=JSON

二、測試、找原因

直接用瀏覽器開AQI 舊網址,果然秒開;接著瀏覽器再開新 AQI 網址,心裡默數,回應時間不一定,從6秒~11秒都有,換成 Windows PowerShell終端機,利用 curl 指令來抓取新網址,也是一樣的回應時間。

查了資料,發現新網址是環保署的服務,也有提供 API 的操作手冊,  裡面有提供 filter 來過濾回傳的內容資料,參考操作手冊,直接在網址上加上 filter 的條件,情況還是一樣,而且 filter 條件並沒有作用

不死心,又查了一下資料,有篇文章「MicroPython 空氣品質 AQI 獲取之方式」有提到抓取資料改成要申請 API_KEY、換成 HTTPS 協定,以及利用 filters 的 API 語法來指定查詢的項目。所以我就去申請了一組 API_KEY 準備看看是否正常,唉!無效,還是一樣慢,API 語法也沒有作用……

總覺得不太可能提供給全國查詢的服務會這麼慢,所以直接利用 php 去抓網頁資料,Guess What ?

秒回啊!

三、實作

利用簡單的語法寫了簡單抓不同城市的 AQI 資料,回應速度快,滿意,結案!

<h2>空氣品質指標(AQI)查詢</h2>
<form action="" method="POST">

  <select name="county" id="">
    <option value="新北市">新北市</option>
    <option value="高雄市">高雄市</option>
    <option value="臺北市">臺北市</option>
    <option value="臺中市">臺中市</option>
    <option value="臺南市">臺南市</option>
  </select>

  <input type="submit" value="查詢">

</form>

<?php
if (isset($_POST["county"]) &&  $_POST["county"] != "") {
  $county = $_POST["county"] ?? '新北市';
  $key = 'e8dd42e6-9b8b-43f8-991e-b3dee723a52d';
  $filter = 'county,EQ,' . $county;
  $url = sprintf('https://data.epa.gov.tw/api/v2/aqx_p_432?filters=%s&api_key=%s&format=json', $filter, $key);
  $data =  file_get_contents($url);

  $jsondata = json_decode($data);

  echo ('<h2>' . $county . '</h2>');
  var_dump($jsondata->records);
}


四、後記

後來發現 Windows 底下的 curl  指令有點"不好操控",利用 Linux 環境直接下 curl 指令,回應速度也是秒開。



sr-only 是做什麼用的?

常常在網頁中看到這個屬性,檢視網頁發現不會顯示,好奇查了一下資料,原因它是指「screen reader only」,也就是設計給螢幕閱讀器讀取的屬性,一般的瀏覽器不會顯示,長知識了!


[php] 學生作業系統 - 評分便利篇

2021年1月11日 星期一

目標:

  1. 作品圖片可以一列多個作品。
  2. 作品存取日期在一周內會顯示顯目底色。

[C#] 有趣的截圖方式

2021年1月10日 星期日

 截圖的方式有好幾種,這一篇文章是我看到的有趣又簡潔的一種方式 - 模擬使用者按[print screen] 按鈕的方式來做截圖,Interesting!!!

      this.Hide();            

            System.Threading.Thread.Sleep(1000);

            SendKeys.Send("{PRTSC}");

            Image myImage = Clipboard.GetImage();

            pictureBox1.Image = myImage;

            

            myImage.Save("E:\\abc.jpg");

            this.Show();

        }

[C# ] 指令參數解析套件 CommandLine

2020年10月7日 星期三

用來判斷指令後的參數,查到的資料有 NDesk.Options 和 這套 CommandLine,這套用起來還不錯,開源。

參考資料:


[C#] 利用 .NET core 3.x 存取 Windows Registry

2020年9月11日 星期五

 前幾天用 Jetbrains Rider 寫了一支 C# 的小程式,裡面需要對 Windows Registry 做讀取、刪除的動作,一開始建新專案時選擇 .NET Core 的 framework,結果編譯不成功。

後來改成用 .Net Framework 4.8之後,程式未修改,編譯就 pass 了,後來發現有些 API ,在 .NET Core 預設是不支援的,得自己手動增加才行,用 nuget 這個工具可以做這個動作。

下列的項目是只有 Windows 才有的 API :

  • Code Pages
  • CodeDom
  • Configuration
  • Directory Services
  • Drawing
  • ODBC
  • Permissions
  • Ports
  • Windows Access Control Lists (ACL)
  • Windows Communication Foundation (WCF)
  • Windows Cryptography
  • Windows EventLog
  • Windows Management Instrumentation (WMI)
  • Windows Performance Counters
  • Windows Registry
  • Windows Runtime Caching
  • Windows Services
微軟出一個相容性的整合包(Windows Compatibility Pack),可以一次支援上列的項目,不過,我個人是覺得整合包用在開發環境上比較理想,正式環境的話,我比較傾向用到的項目才安裝。

[程式] 點一下圖片,黑白瞬間變彩色

2020年8月24日 星期一

夥伴傳來一個連結,打開後,裡面的多張黑白(灰階)圖片,按一下圖片後,就會慢慢轉成彩色,所以覺得很療癒。

不過,我想了一下,想試著把它的動作還原,整理以下思路:

  1. 一開始把頁面中的圖片都設成灰階
  2. 設定每個圖片監聽 click 事件
  3. 圖片被點擊後,取消灰階
  4. (opt)取消灰階後,用 fadeIn 讓圖片浮現
試了一下,果然可行,其中的關鍵字:
  • css
  • filter
  • grayscale
以下是我簡單做的範例程式,提供參考囉!

[PHP]虛擬資料產生器

2020年7月13日 星期一

暑假研習,剛好需好一些資料來測試,有些沒有權限下載自己學校的學生資料,只好動手刻個虛擬資料產生器…,不得不說,巨人的肩膀夠硬啊!直接引用套件(專案)節省很多時間。

  1. 中文姓名
  2. 出生年月日
  3. 學號
  4. 住址
  5. 郵遞區號
  6. 身分證字號(這有點敏感,就不列出來了)




[DB] Foxpro 資料型態

2020年6月17日 星期三


DBF DataTypes:
From the VFP help topic Data and Field Types
Data typeDescriptionSize (bytes)Range
CharacterAny text1 to 254Any characters
 VarcharAny text1 to 254Any characters
 VarbinaryBinary data1 to 254Binary data
DateChronological data consisting of month, year, and day8When using strict date formats, {^0001-01-01}, January 1st, 1 A.D to {^9999-12-31}, December 31st, 9999 A.D.
Date TimeChronological data consisting of month, year, day, and time8{^0001-01-01}, January 1st, 1 A.D to {^9999-12-31}, December 31st, 9999 A.D., plus 00:00:00 a.m. to 11:59:59 p.m.
NumericIntegers or fractions1 to 20- .9999999999E+19 to .9999999999E+20
FloatIntegers or fractions1 to 20- .9999999999E+19 to .9999999999E+20
IntegerIntegers4-2,147,483,647 to 2,147,483,647
Double1 to 20- .9999999999E+19 to .9999999999E+20
CurrencyMonetary amounts8 bytes- 922337203685477.5807 to 922337203685477.5807
LogicalBoolean value of true or false1 byteTrue (.T.) or False (.F.)
MemoAny textIn the DBF 4 bytes/memo
In the FPT allocated in chuncks based on SET BLOCKSIZE
Any characters
Generaldata and host programIn the DBF 4 bytes/memo
In the FPT allocated in chuncks based on SET BLOCKSIZE
OLE Documents
BlobBinary dataIn the DBF 4 bytes/memo
In the FPT allocated in chuncks based on SET BLOCKSIZE
Binary data

[轉貼] YAML -- 想要愛你很容易

2019年10月6日 星期日

yaml 文件格式似乎也逐漸走入我的日常工作裡,還是需要瞭解一下好讓工作更順利!
-----------------------------------------------------------

轉貼連結: YAML -- 想要愛你很容易

重點截錄:

YAML 的定義是:“YAML Ain ’ t a Markup Language”,即:YAML 不是一種標記語言的遞歸縮寫。
YAML 的數據組織主要依靠的是空白,縮進,分行等結構。











[編輯器] sublimetext 無法安裝 plugin 的解決辦法

2019年9月7日 星期六

程式人總會有自己習慣的文字編輯器,sublimetext,這一陣子在我的 deepin linux 上執行後都無法安裝 plugin,今天終於有時間來找找問題。
原因在於連線時的 ssl 已經過時,導致每次連線都會被拒絕,解決辦法就是開啟
Preferences / Package Settings / Package Control / Settings - User
並加入下列的設定,關掉再重新執行 sublimetext,就可以正常安裝了。
"downloader_precedence":
{
"linux":
[
"curl",
"urllib",
"wget"
],
"osx":
[
"curl",
"urllib"
],
"windows":
[
"wininet"
]
},

有趣的 0 byte 字元

2019年8月8日 星期四

自 ascii 編碼開始,就有很多 unreadable 字元,例如:\n、\r、 \t  \b…用來表示不同的作用;不過,unicode 編碼有一個字元編碼範圍更有趣,它是 「不存在」的存在 -- zero byte (0 byte),有網友分享了一個短網址的服務,看起來一模一樣的短網址,卻會連線至不同的網頁,還蠻有趣的應用,不過,對大部分的人來說,短網址是為了減少網址太長造成輸入錯誤時減少字元的記憶,如果完全看不到也無法輸入的短網址,似乎更適合一些特殊場合或用途。
因為覺得有趣,就順便記錄下來,免得只剩下「一個轉身」的記憶把它遺忘了。
https://zws.im/​​​‌​‌​​​​​‌‌​/ 
https://zws.im/​​​‌​‌​​​​​‌​‌/

參考文章及網址:


網友文章出處:

[Git] 在命令提示字元視窗下,中文亂碼的解決方式

2019年6月7日 星期五

解決當前使用的視窗中文亂碼的設定方式:
git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
set LESSCHARSET=utf-8

永久正常顯示中文的方式,只要把最後一列的環境變數加到Windows 的系統環境變數即可。

[網路教學]Vue教學文章或影片

2019年5月11日 星期六



[轉][程式] Postman - 測試Web Service的工具

2019年5月6日 星期一

原文: Postman - 測試Web Service的工具

 Postman 是用來測試 Web Service 方便的工具,在法蘭克還不認識它之前,要測試自己撰寫的 Web Service 都要用 HTML 刻一個表單,然後放上許多 input 的元件並且一個一個填入參數去 Call API,過程可說是相當麻煩,但是自從知道 Postman 後,就再也沒有自己刻過表單了。Postman 是 Chrome 的應用程式並可在 Chrome Web 商店找到它。今天就來介紹利用 Postman(Client端) 呼叫 TOS - ESB (Server端) 的一些基本功能並找兩個範例來實作,當然 Server 並非一定要跟法蘭克一樣是使用 TOS - ESB,也可是政府開放平台或公司後台的 API。

轉:建立安全的登入模組

2019年5月5日 星期日

原文:https://en.wikibooks.org/wiki/PHP_Programming/Building_a_secure_user_login_system

關鍵點:
$timeout = 60 * 30; // In seconds, i.e. 30 minutes.
$fingerprint = hash_hmac('sha256', $_SERVER['HTTP_USER_AGENT'], hash('sha256', $_SERVER['REMOTE_ADDR'], true));
session_start();
if (    (isset($_SESSION['last_active']) && $_SESSION['last_active']<(time()-$timeout))
     || (isset($_SESSION['fingerprint']) && $_SESSION['fingerprint']!=$fingerprint)
     || isset($_GET['logout'])
    )
{
    setcookie(session_name(), '', time()-3600, '/');
    session_destroy();
}
session_regenerate_id(); 
$_SESSION['last_active'] = time();
$_SESSION['fingerprint'] = $fingerprint;
// User authenticated at this point (i.e. $_SESSION['email_address'] can be trusted).

轉:乾貨!這才是學習Python的正確打開方式!

2019年4月28日 星期日

寫程式似乎愈來愈受到重視,而所有的程式語言之中,相對容易學習的語言,Python可謂當之無愧。但是,在開始學習之前,你有想過,究竟程式到底能做什麼?為什麼一定要寫程式嗎?
讀讀這篇文章,也許能有些收穫!!

原文:乾貨!這才是學習Python的正確打開方式!

內文節錄:
Python可謂是世界上最通用、最強大的編程語言之一。人們使用Python可以編寫自己的應用程序,創建遊戲以及設計算法,甚至還可以為機器人編程。不僅如此,學習Python還可以讓你在軟件工程、web開發、移動開發或數據科學等領域謀一份好差事,在職業提升的道路上助你一臂之力。就目前而言,無論是創建一個網站,還是申請Google公司的崗位,掌握Python是必備條件。那麼,學習Python正確的打開方法是什麼呢?
對於想學習Python的人來說,他們的幸運之處在於,現在比以前擁有更多的資源。但這也會增加篩選相關書籍、課程和其他資源的難度。而且,人們的學習方式都大相逕庭——對一個人有用的課程未必就適合另一個人。為了找到一個量身定製的學習方法,我們在蒐集各種學習資源前,先討論一下需要注意的關鍵問題。
如果以下三個問題回答不上來,那麼,先不要花錢參加在線課程或購買書籍來學習Python。
1.你為什麼想學Python?
2.你的學習風格怎麼樣?
3.你的編碼水平有多高?


首先,從你的學習目的開始。
你為什麼想學Python?你想瞭解學習Python的最佳方法,是因為想換工作嗎?還是因為你有一個很棒的應用程序的想法,你想自己設計?你是否想在簡歷中添加編碼這一項技能,好讓你有資格在編程行業中獲得一份工作?明晰動機不僅能讓你集中注意力,還可以幫助你縮小查找學習資源的範圍。舉個例子,如果你的興趣主要在於web開發,那麼,使用Python進行數據分析的課程對你的幫助就沒有那麼大。
確定好目的之後,再來思考自己學習風格是怎樣的。
你在類似學校的結構化環境中活躍嗎?你喜歡通過閱讀來自學技能嗎?當你與其他學生互動或獨自學習時,你表現得好嗎?另外,可以想一下,你是喜歡循序漸進的教學方法,還是喜歡更有挑戰性的途徑?瞭解自己的學習風格可以幫你找到最適合你的Python學習方法。
最後,對自己的編碼水平做一個正確的認知。
你瞭解其他編程語言嗎?還是說你對編程是完全陌生的呢?學習Python的最佳方法與你的技能水平有關。如果你完全是新手,你就需要從入門課程或初學者讀物開始鑽研。如果你已經對Java或c++有所瞭解,並且希望再學習一下Python,那麼可以從一個更高級的選項開始。與在線課程的學習途徑相比,你可能會更喜歡教程或結構化項目。
謹記:從頭開始並不丟人!誠實坦然地對待你的編程水平,這樣才能找到最適合自己的學習方法。
既然目的、學習風格和編碼水平都已確定好,那麼就可以開始著手尋找適合自己的學習方法了。我們先談一下學習Python的主要途徑,包括書籍、在線課程、教程和結構化項目。