2018年5月29日 星期二

github ssh 設定好了還是被要求輸入密碼

Github ssh 設定好了還是被要求輸入密碼

遇到的問題是明明都已經設定好了金鑰,打測試代碼
ssh -T git@github.com
也是顯示成功,怎麼還是需要打密碼?
整個重做步驟不是很多,我就重頭開始說當作一篇教學文章

生成金鑰

可以確定一下自己有沒有產生過
ls -l ~/.ssh/
看一下列表有沒有 id_rsa id_rsa.pub 這兩個文件有的話就有產生了
產生的指令是
ssh-keygen
然後就可以查看公鑰
cat ~/.ssh/id_rsa.pub
把顯示出來的部份複製然後貼到 github 上的
點自己頭像 -> 設定 -> SSH and GPGkey
然後整串看起來是亂碼的的輸入,不打名稱預設會填入這台電腦的電腦名稱
然後會看要鑰匙是黑色的因為還沒連成功過,我們測試一下
ssh -T git@github.com
跑出
Hi USERNAME! You’ve successfully authenticated, but GitHub does not provide shell access.
這樣就是成功了,鑰匙就會變成綠色的就是真的好了

更改 remote

然後就是問題所在了,明明測試都是成功依然要打密碼,網路上也沒搜到相關的說明。
關鍵在於第一次從 github 上創建 github 倉庫的時候預設都是 https 你得自己改選成 ssh才行,這時候上面的給的教學指令會變動成 ssh 用的。
[1] 如果你是建立新倉庫記得按成SSH然後照著說明打就好,以下不用看
[2] 這不是 github 網站上的設定,主要是倉庫的 gitconfig 要改
那麼已經再同步的倉庫怎麼辦呢~我們要手動到去修改,這裡假設倉庫名稱是 sshRepos
cd sshRepos
git remote -v
然後你會看到其中的一段是
(其中的 USERNAME 是使用者帳號記得改)
origin  https://github.com/USERNAME/sshRepos.git (fetch)
origin  https://github.com/USERNAME/sshRepos.git (push)
問題就出在這裡,正確的SSH連接應該為
( 從 https://github.com -> git@github.com )
把他刪除重建成正確的即可
git remote remove origin
git remote add origin git@github.com:/USERNAME/sshRepos.git

git remote -v
最後上傳一次確定是否還需要打密碼
git push origin master

其他

直接進 gitconfig 修改應該是比較快,指令如下
vi .git/config
然後你會看到
[remote "origin"]
        url = https://github.com/USERNAME/sshRepos.git
        fetch = +refs/heads/*:refs/remotes/origin/*
就從這裡改~
  1. https://git@
  2. USERNAME 前面的 /: (改成冒號)

Messenger 官方載點不能載,這裡有github載點

Messenger 官方載點不能載,這裡有github載點

不知道為什麼官方載點壞了很久都不修,自己傳一份github載點
https://github.com/aluxian/Messenger-for-Desktop/releases
這個載點我是從官方壞掉的連結連到的,所以不用擔心,確定是官方的,損壞連結如下,可以自己開進去看網址:
https://updates.messengerfordesktop.com/download/win32/latest

2018年5月28日 星期一

Visual Studio Code 如何配置 編譯 C++

Visual Studio Code 如何配置 編譯 C++

已經配置好的懶人包專案:
https://github.com/hunandy14/VScode_example

前置任務

自己要先裝好 g++ 才可以使用,在Windwos上套件的名字是 MinGW ,不過不只這一個拉,這個比較多人用建議可以從這個下手。
檔案沒有加殼是開源的,可以自己打開看我都寫了什麼放了什麼
直接點開安裝就好,剩下的麻煩事我都處理好了,教學上一堆設置等於你按一個安裝按鈕;建議安裝前先執行下面的命令,或許你電腦已經有裝了,就不用再裝了。
安裝完畢之後重新打開終端機,打上
g++ --version
看到這個就是成功了


功能介紹

主要功能有左邊這5個
分別是
  • 資料夾(專案工作區)
  • 搜尋
  • 原始檔控制(就當作git吧,比較多人用)
  • 除錯
  • 套件安裝

事前配置

需要安裝會自動變色以及補字的套件,方便我們編譯
點一下套件安裝,搜尋 C++ 應該就可以見到這個了,安裝他並且按重新載入
再來就可以開始編寫C++了

新增資料夾

VS code 工作區是以資料夾為一個單位,每一個資料夾都會有一個vs的設定檔,通常是隱藏資料夾,可以打開來看,vscode會讀取這個資料夾做他該做的事情
可以同時打開好幾個資料夾,不過非必要(如多專案需求之類的),建議一次開一個就好,比較不會搞混~
先建立一個空資料夾,然後從這裡加入
很多方式,拉進來也行~
我建立的資料夾名稱是work,然後我們新增檔案 test.cpp
雙擊打開他,寫入程式碼
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]){
    cout << "Hell" << endl;
    system("pause");
    return 0;
}

編譯按 ctrl+shift+b 編譯,找不到讓他自動建立範本
從範本建立
選擇 other
這是範本
然後我們在按一次編譯 ctrl+shift+b 一樣會找不到,再按一次
然後就會看到我們剛剛建立的範本了,再按一次完成配置
在按第三次就可以看到完成命令了,看圖中下方的 Hello
現在我們把命另,也就是第9行改成我們要執行的
g++ test.cpp
然後再按一次編譯即可產生執行檔
(後來發現 *.exe 好像不一定會顯示在左邊,建議開到資料夾去看)

然後直接按F5執行,會出現找不到,這時候選擇 C++(windwos) 自動建立一個範本
自動建立範本
預設就是執行 a.exe 不用動,記得將11行前面說明文字刪除,像下面這樣
"program": "${workspaceFolder}/a.exe",
直接在按一次F5,就可以執行了
左邊這裡就出現VS的設定檔了,如果你有做什麼設定他都會自己生出文件在這裡

按下F5的同時自動編譯

如果希望按下F5就可以完成所有事情,就在剛剛的 launch.json 中新增
如果新增在末尾記得對前一行結尾處補逗號,插在中間就在這行結尾補逗號
"preLaunchTask": "echo"
echo 是剛剛的標籤,如果你有改記得修改成對應的


其他

建議是配合 makefile 去實作,這樣才可以自動偵測那些檔案要重新編譯那些檔案不用,本文只是方便做說明直接打指令,實作中這不是很好的做法~

參考

2018年5月27日 星期日

Linux 修復 GRUB 與自訂開機選單

Linux 修復 GRUB 與自訂開機選單

修復BRUB

事前環境架設:
使用 USB 或 CD 燒入 Ubuntu 或 Mint 安裝檔開機進入系統,然後開始本篇教學
安裝自動修復軟件
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair
打開之後選擇1自動修復
照著選單走需要打上上面的指令,並依照圖片按Yes,然後按下Forward下一步
然後下一步一樣照著指令走
這裡需要注意的是照著圖片,按空白見選取第一個然後再按ok,然後回到程式按下一步
再來會自動繼續跑,會出現幾次選單,就直接按enter預設值就好,然後就完成了
再來移除 USB 重新開機即可~即可正常開機進入 linux


自訂開機選單

安裝軟體
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer
然後直接打開,畫面都是GUI+中文介面的,可以自行設定,也可以新增 Windows 10 或 Windows7 的開機選單。

2018年5月25日 星期五

OpenCV 3.4.1 在 Windows10 上編譯 MinGW 版本

OpenCV 3.4.1 在 Windows10 上編譯 MinGW 版本

首先要先安裝下面兩個軟體
cmake不知道為什麼跑超慢,我自己傳了一份 這裡
cmake 不能用舊版的,OpenCV 會跟著他的版本更新舊版會出奇怪的錯
安裝 cmake 的時候記得選擇安裝到環境變數到使用者
再來我們下載opencv從github上
cd C:\
mkdir opencv341_source
cd opencv341_source
git clone -b 3.4.1 https://github.com/opencv/opencv
git clone -b 3.4.1 https://github.com/opencv/opencv_contrib
再來我們產生編譯檔案
mkdir build
cd build
cmake -G "MinGW Makefiles" -DOPENCV_EXTRA_MODULES_PATH="C:\opencv341_source\opencv_contrib\modules" "C:\opencv341_source\opencv"
產生好之後編譯他
CPU不要開多,記憶體不夠多會爆ram,下場就是開始吃虛擬記憶體然後硬碟100%,硬碟一旦100%系統就會停機,超級頓超級卡;太超過還會出動清潔隊掃掉不重要的程式…
i7 4770K + 16G + SSD 大概跑10分鐘,舊電腦跑過幾小時的正常不要怕XDD
# j 是選擇幾顆核心
mingw32-make -j5

# 依據你裝的 MingGW 不同也可能是這樣(兩個擇一就好)
# make -j5
這邊我不知道為什麼出問題了,出問題的時候要用單顆核心編譯,才不會看不到訊息
mingw32-make
出問題的訊息是
modules\dnn\CMakeFiles\opencv_dnn.dir\build.make:1015: recipe for target ‘modules/dnn/CMakeFiles/opencv_dnn.dir/layers/layers_common.avx512_skx.cpp.obj’ failed
嘗試爬文找到這個
看起來是某個模組的支援性已經放棄MinGW32了,於是根據提示重下指令
處理方式就是把那個模組拿掉不要用了,因為我也沒用到所以很乾脆的就放了
cmake -G "MinGW Makefiles" -DBUILD_opencv_dnn=OFF -DOPENCV_EXTRA_MODULES_PATH="C:\opencv341_source\opencv_contrib\modules" "C:\opencv341_source\opencv"
mingw32-make -j5
這次很順利的結束了編譯成功,感動QuQ
最後一步安裝,不過在Windows下應該只是把編譯好的檔案複製到 install 這個資料夾而已,在 linux 底下會複製到系統內,並且幫你安裝環境變數
我們要的檔案都幫我們複製到這裡了

測試執行

萬年測試代碼再拿出來放一次
/**********************************************************
Name :
Date : 2016/05/29
By   : CharlotteHonG
Final: 2018/05/25
**********************************************************/
#include <iostream>
using namespace std;

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;

int main(int argc, char const *argv[]) {
    cout << "=!!===test run is ok===!!=" << endl;
    /* 畫布 */
    Mat img(270, 720, CV_8UC3, Scalar(56, 50, 38));
    /* 直線 */
    line(img, Point(20, 40), Point(120, 140), Scalar(255, 0, 0), 3);
    /* 實心方塊 */
    rectangle(img, Point(150, 40), Point(250, 140), Scalar(0, 0, 255), -1);
    /* 實心圓 */
    circle(img, Point(330, 90), 50, Scalar(0, 255, 0), -1);
    /* 空心橢圓 */
    ellipse(img, Point(460, 90), Size(60, 40), 45, 0, 360, Scalar(255, 255, 0), 2);
    /* 不規則圖形 */
    Point points[1][5];
    int x = 40, y = 540;
    points[0][0] = Point(0 + y, 50 + x);
    points[0][1] = Point(40 + y, 0 + x);
    points[0][2] = Point(110 + y, 35 + x);
    points[0][3] = Point(74 + y, 76 + x);
    points[0][4] = Point(28 + y, 96 + x);
    const Point* ppt[1] = { points[0] };
    int npt[] = { 5 };
    polylines(img, ppt, npt, 1, 1, Scalar(0, 255, 255), 3);
    /* 繪出文字 */
    putText(img, "Test Passed !!", Point(10, 230), 0, 3, Scalar(255, 170, 130), 3);
    /* 開啟畫布 */
    namedWindow("OpenCV Test By:Charlotte.HonG", WINDOW_AUTOSIZE);
    imshow("OpenCV Test By:Charlotte.HonG", img);
    waitKey(0);
    return 0;
}
把它存檔存成 opencv.cpp 然後我們手動編譯他,這裡沒有 pkg-config 會有點麻煩,我先不放全部先測試可執行就好(快速點三下選擇全部)
g++ opencv.cpp -o opencv -IC:\opencv341_source\build\install\include -LC:\opencv341_source\build\install\x64\mingw\lib -lopencv_core341  -lopencv_highgui341 -lopencv_imgproc341
說明這裡的的 -lopencv_core341 其實就是路徑
-LC:\opencv341_source\build\install\x64\mingw\lib
內所有的檔案的的名稱,可以使用原始檔名 -llibopencv_core341 一樣意思
因為這裡只有include三個所以就只需要這三個,通常都一次引入全部比較方便
然後執行,執行前要先加環境變數
# 當前CMD暫時加入環境變數
$Env:Path = $Env:Path + ";C:\opencv341_source\build\install\x64\mingw\bin;"

# 執行
./opencv
到這邊就結束瞜,已經可以正常使用了


那一長串的 dll.a 文件怎麼辦

OpenCV341 for MinGW 完整的 dll.a 清單在這裡
-lopencv_aruco341 -lopencv_bgsegm341 -lopencv_bioinspired341 -lopencv_calib3d341 -lopencv_ccalib341 -lopencv_core341 -lopencv_datasets341 -lopencv_dpm341 -lopencv_face341 -lopencv_features2d341 -lopencv_flann341 -lopencv_fuzzy341 -lopencv_hfs341 -lopencv_highgui341 -lopencv_img_hash341 -lopencv_imgcodecs341 -lopencv_imgproc341 -lopencv_line_descriptor341 -lopencv_ml341 -lopencv_objdetect341 -lopencv_optflow341 -lopencv_phase_unwrapping341 -lopencv_photo341 -lopencv_plot341 -lopencv_reg341 -lopencv_rgbd341 -lopencv_saliency341 -lopencv_shape341 -lopencv_stereo341 -lopencv_stitching341 -lopencv_structured_light341 -lopencv_superres341 -lopencv_surface_matching341 -lopencv_tracking341 -lopencv_video341 -lopencv_videoio341 -lopencv_videostab341 -lopencv_xfeatures2d341 -lopencv_ximgproc341 -lopencv_xobjdetect341 -lopencv_xphoto341
恩…又臭又長,可以參考這篇有處理的方法
http://charlottehong.blogspot.com/2018/05/windwos10-pkg-config.html
使用 pkg-config 來處理,跟 linux 一樣,只不過不知道為何 Windows 貌似不能直接用