Github 提交你的修改貢獻到開源專案

本篇紀錄一下怎麼在 Github 上提交你的修改貢獻到開源專案(發 pull request)。

  1. 在 Github 上 fork 別人的專案.
  2. git clone 下載剛剛 fork 的專案.
  3. 從主線建立一個分支 git checkout support-python3 ,分支名稱叫做 support-python3 用來添加 python3 的修改.
  4. 修改完成 commit 後推上自己的 github git push origin support-python3
    這時在自己的github上的專案頁面會顯示出有個 support-python3 的分支.
  5. 在自己的github專案頁面按 Compare & pull request 提交修改, 填好內容後按create pull request 之後就會在原作者的github專案頁面的 Pull requests 分頁出現你的 pull request,接下來就等原作者同意按 merge 進去吧!

參考
[1] GitHub 該如何發 PR(pull request) | Welcome.Web.World
https://hsiangfeng.github.io/git/20190615/4143994266/
這個是超詳細的圖文解說,已經作過一次的可以不用看這篇。
[2] Git - 參與一個專案
https://git-scm.com/book/zh-tw/v2/GitHub-%E5%8F%83%E8%88%87%E4%B8%80%E5%80%8B%E5%B0%88%E6%A1%88
[3] Creating a pull request - GitHub Docs
https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request
[4] 什麼是 Pull Request?. Github/Bitbucket… | by SC Tuan | Medium
https://medium.com/@shoujhengduan/%E4%BB%80%E9%BA%BC%E6%98%AF-pull-request-b476ee3e0217

其它相關文章推薦
Github 如何更新已經 fork 的專案與原專案紀錄同步
Github 如何更新 pull request

Python 計算 tuple 元組長度

本篇 ShengYu 介紹 Python 計算 tuple 元組長度,Python 計算元組長度的用法與範例如下,

len() 計算字元元組的元素個數,

1
2
t = ('hello', 'world')
print(len(t))

輸出結果如下,

1
2

len() 計算數字元組的元素個數,

1
2
t = (123, 456, 789)
print(len(t))

輸出結果如下,

1
3

len() 計算元組的元素個數,

1
2
t = (123, 456, 789, 'hello', 'world')
print(len(t))

輸出結果如下,

1
5

其它相關文章推薦
如果你想學習 Python 相關技術,可以參考看看下面的文章,
Python tuple 元組用法與範例
Python 計算 str 字串長度
Python 計算 list 串列長度
Python 計算 dict 字典長度
Python 計算 set 集合長度
Python 新手入門教學懶人包
Python 讀檔,讀取 txt 文字檔
Python 字串分割 split
Python 取代字元或取代字串 replace
Python 產生 random 隨機不重複的數字 list
Python print 格式化輸出與排版
Python PIL 讀取圖片並顯示
Python OpenCV resize 圖片縮放

Qt 新增多國語言.ts翻譯檔案

本篇要介紹如何使用 Qt 新增多國語言.ts翻譯檔案,Qt 有自己的工具對 GUI 的語言進行翻譯,對於開發多國語言的開發者來說是一個實用的功能。

下面開始介紹怎麼製作和使用Qt的翻譯檔案,

步驟1. 新增.ts翻譯檔案

Qt 的.ts翻譯檔案是文字格式的翻譯檔案(XML格式),而.qm檔案是.ts轉檔後的二進制檔案,
假設你現在沒有.ts翻譯檔案,那請看以下步驟產生一個.ts翻譯檔案,
如果已經有.ts翻譯檔案,要轉成.qm檔案請看步驟3,

使用文字編輯器打開Qt的.pro專案檔案,添加 TRANSLATIONS += myproject_zh-tw.ts,如果是要同時支援繁中與英文的話就

1
2
TRANSLATIONS += myproject_en.ts \
myproject_zh-tw.ts

等號右邊的名字可以自己取,中文的就用後綴_zh.ts, 繁體中文的就用後綴_zh-tw.ts, 簡體中文的就用後綴_zh-cn.ts, 英文的就用 _en.ts

然後啟動Qt的lupdate命令行工具,Windows在 開始 -> 程序-> Qt5.12.2 -> Qt5.12.2 commond prompt
Ubuntu 的話直接在命令行輸入即可,
切換目錄到專案目錄,執行 lupdate 來產生相應的.ts 檔案,
它會看你在.pro專案檔案加了什麼在TRANSLATIONS裡就會產生對應的.ts

1
$ lupdate -verbose myproject.pro

步驟2. 編輯 .ts 檔案, 開始翻譯

.ts檔案後就可以接著翻譯的工作,啟動linguist語言翻譯工具,

1
$ linguist

選單中的File > Open...,打開所需的 .ts 檔案
翻譯界面中找到的翻譯欄的兩行,
第一行:Source Text
第二行:Translation
在第二行進行相應字串的翻譯即可,接著就把每一條 Source Text 慢慢翻譯,
翻譯完後存檔即可。

步驟3. 產生.qm檔案

.qm檔是經過.ts轉換而成的二進制機器語言的檔案,
接著我們透過 lrelease 指令來將翻譯好的.ts檔案產生.qm檔案

1
$ lrelease -verbose myproject.pro

修改或新加入界面部件時

只需執行 lupdate -verbose 即可,
然後把產生的.qm檔案放到正確的目錄中,即可實現翻譯的效果,

1
$ lupdate linguist

如果是安裝了插件的 visual studio ,也可以右擊解決方案,實現 lupdate 和 lrelease 命令同樣的功能。

參考
qt中制作添加 .ts 翻译文件 - 舟折不是周折 - 博客园
https://www.cnblogs.com/wangjz/p/4894545.html
qt中制作添加 .ts 翻译文件_linux-CSDN博客
https://blog.csdn.net/hpu11/article/details/79222657

其它相關文章推薦
[Qt] 讀檔,讀取 txt 文字檔
[Qt] 寫檔,寫入 txt 文字檔
安裝 Qt 在 Windows 7 (使用MSVC)
Qt產生的exe發布方式
Qt5的中文亂碼問題如何解決

Python numpy 計算標準差 standard deviation

本篇紀錄如何使用 python numpy 的 np.std 來計算陣列標準差 standard deviation 的方法。

以下例子為簡單的無偏標準差計算, 1/n,
[1, 2, 3] mean=2,std=1
[5,6,8,9] mean=7,std=1.58114
[0.8, 0.4, 1.2, 3.7, 2.6, 5.8] mean=2.4166666666666665,std=2.0634114147853952

範例. 用 numpy 計算標準差

以下範例使用 numpy 來計算標準差,使用 np.array 帶入 python list [5,6,8,9],
接著再使用 np.std 計算標準差。

使用 np.std() 可以指定 ddof 參數,全名為 Delta Degree of Freedom,np.std() 預設的 ddof 是 0

ddof=0,回傳 population standard deviation 母體標準差,分母(n),有偏估計
ddof=1,回傳 sample standard deviation 樣本標準差,分母(n-1),無偏估計

python-numpy-std.py
1
2
3
4
5
6
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np

arr = np.array([5, 6, 8, 9])
print(np.std(arr, ddof=1))

ddof=1 輸出如下:

1
1.8257418583505538

ddof=0 輸出如下:

1
1.5811388300841898

關於這兩種差異可以看參考[5],
簡單說,如果要由樣本去估計整體實際的標準差,就應該使用 ddof=1。

範例. Python 內建的 statistics.stdev 計算標準差

這個範例是使用 Python 內建的 statistics 來計算標準差 stdev。

python-std.py
1
2
3
4
5
6
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import statistics

arr = [5, 6, 8, 9]
print(statistics.stdev(arr))

輸出如下:

1
1.8257418583505538

參考
[1] numpy.std() in Python - GeeksforGeeks
https://www.geeksforgeeks.org/numpy-std-in-python/
[2] python 标准差计算(std)_Python_Gooooa的博客-CSDN博客
https://blog.csdn.net/Gooooa/article/details/78923469
[3] 標準差 - 維基百科,自由的百科全書
https://zh.m.wikipedia.org/zh-tw/%E6%A8%99%E6%BA%96%E5%B7%AE
[4] python - Standard deviation in numpy - Stack Overflow
https://stackoverflow.com/questions/34050491/standard-deviation-in-numpy
[5] 為什麼統計的樣本標準差計算要除(n-1)而母體標準差則除n? | 電子製造,工作狂人(ResearchMFG)
https://www.researchmfg.com/2016/07/sigma-n-1/

其它相關文章推薦
如果你想學習 Python 相關技術,可以參考看看下面的文章,
Python numpy 計算平均值 mean/average
Python 新手入門教學懶人包
Python str 字串用法與範例
Python list 串列用法與範例
Python set 集合用法與範例
Python dict 字典用法與範例
Python tuple 元組用法與範例

開源專案-tetris俄羅斯方塊

今天介紹Github上開源專案的tetris俄羅斯方塊遊戲,

react-tetris

https://github.com/chvin/react-tetris
星星數:6.2kstars
技術:HTML5,CSS,JavaScript,Redux,Web Audio Api
網站:https://chvin.github.io/react-tetris/?lan=en
這是模擬 gameboy 的俄羅斯方塊,超強的畫面,專案首頁有完整的中文說明,可以從網站進去玩唷!
玩到一半關掉網站,還能儲存你的遊玩紀錄,實現方式是將state儲存在localStorage,詳情請看專案 README.md 介紹。

它網站介面語言支援英語法語法斯语簡中,我已經發一個PR改新增繁中, 看作者接不接受merge進主線囉~,
還沒進主線前可以先到我的網站玩繁中版本


ytiurin/tetris

https://github.com/ytiurin/tetris
星星數:104stars
技術:HTML5,CSS,JavaScript,Web Audio API
作者看到一個復古 DVK-2 電腦玩俄羅斯方塊的 youtube 影片就把它做出來了,
連背景音樂, 與按鍵聲都完美呈現呢!


jserv/tetris

https://github.com/jserv/tetris
星星數:119stars
技術:C,pthread,libncurses
ui 用 libncurses


kubowania/Tetris

https://github.com/kubowania/Tetris
星星數:83stars
技術:HTML5,CSS,JavaScript,Google Fonts
作者 Ania Kubów 她有個 youtube 頻道在教 JavaScript Games。

其它相關文章推薦
開源專案CursorJail-滑鼠鎖定工具
開源專案-2048
開源專案-數獨sudoku
開源專案-金庸群俠傳
開源專案-仙劍奇俠傳

Linux df 查看硬碟容量用法與範例

本篇 ShengYu 將介紹如何使用 Linux df 指令來查看硬碟容量。

假如我要看看現在的硬碟容量的話,可以透過 df 指令來查詢,

1
2
3
4
5
6
7
8
Filesystem      1K-blocks       Used Available Use% Mounted on
udev 7652244 0 7652244 0% /dev
tmpfs 1534924 67020 1467904 5% /run
/dev/sda1 115762636 107196272 2662852 98% /
tmpfs 7674612 66904 7607708 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 7674612 0 7674612 0% /sys/fs/cgroup
tmpfs 1534924 152 1534772 1% /run/user/1000

df 指令加上 -h 選項可以印出人類易讀的格式,會以幾G、幾M的形式印出,

1
2
3
4
5
6
7
8
9
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.3G 0 7.3G 0% /dev
tmpfs 1.5G 66M 1.4G 5% /run
/dev/sda1 111G 103G 2.6G 98% /
tmpfs 7.4G 69M 7.3G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.4G 0 7.4G 0% /sys/fs/cgroup
tmpfs 1.5G 148K 1.5G 1% /run/user/1000

其它相關文章推薦
Linux 常用指令教學懶人包
Linux find 尋找檔案/尋找資料夾用法與範例
Linux sed 字串取代用法與範例
Linux cut 字串處理用法與範例
Linux tail 持續監看檔案輸出用法與範例
Linux ag 搜尋字串用法與範例(比 grep 還快)
Linux kill 指令砍掉指定的 process name

Python 計算 dict 字典長度

本篇 ShengYu 介紹 Python 計算 dict 字典長度,Python 計算字典長度的用法與範例如下,

len() 計算字典的元素個數,

1
2
d = {1:'tom', 2:'john'}
print(len(d))

輸出結果如下,

1
2

其它相關文章推薦
如果你想學習 Python 相關技術,可以參考看看下面的文章,
Python dict 字典用法與範例
Python 計算 str 字串長度
Python 計算 list 串列長度
Python 計算 tuple 元組長度
Python 計算 set 集合長度
Python 新手入門教學懶人包
Python 讀檔,讀取 txt 文字檔
Python 字串分割 split
Python 取代字元或取代字串 replace
Python 產生 random 隨機不重複的數字 list
Python print 格式化輸出與排版
Python PIL 讀取圖片並顯示
Python OpenCV resize 圖片縮放

Linux grep 搜尋字串用法與範例

本篇 ShengYu 介紹 Linux grep 搜尋字串用法與範例,grep 通常用來搭配其它指令來搜尋字串,例如 grep 搭配 cat 來搜尋檔案裡的特定字串,grep 算是 Linux 必學指令,學會這招讓工作更快速輕鬆。

以下的 Linux grep 用法與範例將分為這幾部分,

  • 將 cat 的輸出導向 grep 搜尋字串
  • 使用 grep 指令排除一個字串或多個字串
  • grep 忽略大小寫
  • grep 搜尋子資料夾
  • grep 顯示彩色輸出
  • grep 顯示行數
  • grep 顯示匹配結果的前後內容
  • grep 搜尋內容符合的檔案 pipe 給 sed 取代文字
  • grep 搭配正規表達式

那我們開始吧!

將 cat 的輸出導向 grep 搜尋字串

以下示範用 cat 將 nginx.log 檔案內容輸出並導向 grep 搜尋字串

1
cat nginx.log | grep "GET"

使用 grep 指令排除一個字串或多個字串

grep 排除字串的話要使用 -v 這個選項,例如在 nginx.log 檔案裡排除 GET 這個字串的結果

1
grep -v 'GET' nginx.log

grep 忽略大小寫

grep 忽略大小寫要使用 -i 這個選項,例如 Hello 跟 hello 都要能被找到的話就可以這樣寫,

1
grep -i "Hello" nginx.log

這樣不管是 Hello 或 hello 還是 HELLO 各種大小寫變化都能找得到。

grep 搜尋子資料夾

grep 要搜尋子資料夾可以加入 -r 遞迴這個選項跟一個 *,這樣就不會只搜尋當層資料夾,連子資料夾都會去搜尋,

1
grep -r "Hello" *

grep 顯示彩色輸出

grep 顯示彩色輸出要用 --color 這個參數

1
grep "http" log.txt --color

有顏色輸出能幫助你的眼球更快的找到目標文字。

grep 顯示行數

grep 顯示行數要用 -n 這個參數

1
grep -n "http" log.txt

如果要用 find 指令找檔案後將結果 pipe 給 grep 搜尋的話,用法範例如下,

1
find ./ -iname "*.txt" -type f | xargs grep -n "http"

grep 顯示匹配結果的前後內容

grep 顯示匹配結果的後5行內容,要用 -A 參數,after 的意思,

1
grep "http" log.txt -A 5

grep 顯示匹配結果的前5行內容,要用 -B 參數,before 的意思,

1
grep "http" log.txt -B 5

grep 搜尋內容符合的檔案 pipe 給 sed 取代文字

grep 搜尋內容符合的檔案 pipe 給 sed 取代文字的方式如下,範例內容是假設我要搜尋檔案內容有 http 的字串找出來後將這些檔案名稱 pipe 給 sed 取代文字,將這些檔案裡的 http 全部取代成 https,

1
2
3
4
# Linux
grep -ri "http" * -l | xargs sed -i 's/http/https/g'
# macOS
grep -ri "http" * -l | xargs sed -i "" 's/http/https/g'

grep 搭配正規表達式

grep 顯示 abc 開頭,

1
grep ^abc log.txt

grep 顯示 abc 結尾,

1
grep abc$ log.txt

grep 顯示數字,例如 abc0 ~ abc9 開頭,

1
grep abc[0-9] log.txt

其它相關文章推薦
Linux 常用指令教學懶人包
Linux grep/ack/ag 搜尋字串用法與範例
Linux ag 搜尋字串用法與範例(比 grep 還快)
Linux cut 字串處理用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux kill 指令砍掉指定的 process name

LeetCode C++ two sum 兩數之和

今天要練習的 LeetCode 題目是 two sum 兩數之和,並且以 C++ 實作出來。

LeetCode 題目

https://leetcode.com/problems/two-sum/
難度:Easy

two sum 是 LeetCode 題目的第 1 題,
題目是給一個 nums 序列,而且由 nums 序列中的任兩個數字加起來會是 target 這個數字,
題目要求你找出這兩組數字的索引值。

答案

以下為 C++ two sum 的 solution

cpp-two-sum.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// g++ cpp-two-sum.cpp -o a.out -std=c++11
#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i = 0; i < nums.size(); i++) {
for(int j = i+1; j < nums.size(); j++) {
if(nums[i]+nums[j] == target)
return vector<int>({i,j});
}
}
return vector<int>();
}
};

int main() {
vector<int> nums = {2,7,11,15}; int target = 9; // [0,1]
//vector<int> nums = {3,2,4}; int target = 6; // [1,2]
//vector<int> nums = {3,3}; int target = 6; // [0,1]
Solution s;
vector<int> ret = s.twoSum(nums, target);
cout << "[" << ret[0] << "," << ret[1] << "]\n";

return 0;
}

參考
Two Sum - LeetCode
https://leetcode.com/problems/two-sum/
兩數之和 (Two Sum) - 力扣 (LeetCode)
https://leetcode-cn.com/classic/problems/two-sum/description/

其它相關文章推薦
C/C++ 新手入門教學懶人包
LeetCode C++ String to Integer (atoi) 字串轉整數
LeetCode C++ Range Sum Query - Immutable 區域和檢索

開源專案-2048

今天介紹Github上開源專案的2048遊戲,

gabrielecirulli/2048

https://github.com/gabrielecirulli/2048
星星數:10.6kstars
技術:JavaScript,HTML
最強的2048網頁版,還可以開始線上玩play2048

200行Python代码实现2048
http://imsparta.com/200%e8%a1%8cpython%e4%bb%a3%e7%a0%81%e5%ae%9e%e7%8e%b02048/
另外一位網友講述它怎麼實做的, 有參考上篇, 但未必是相似的實做。


plibither8/2048.cpp

https://github.com/plibither8/2048.cpp
星星數:1.5kstars
技術:C++
在 console 上玩 2048。


bfontaine/term2048

https://github.com/bfontaine/term2048
星星數:774stars
技術:Python
在 console 上玩 2048。


yangshun/2048-python

https://github.com/yangshun/2048-python
星星數:162stars
技術:Python,TKinter


nneonneo/2048-ai

https://github.com/nneonneo/2048-ai
星星數:856stars
技術:Python,C++
2048 的 AI。

其它相關文章推薦
開源專案CursorJail-滑鼠鎖定工具
開源專案-tetris俄羅斯方塊
開源專案-數獨sudoku
開源專案-金庸群俠傳
開源專案-仙劍奇俠傳