2021年4月1日 星期四

Golang 安裝 筆記

環境:

ubuntu 20.04.2.0 LTS

go 1.16.3

vscode


安裝指令:

先到官網下載壓縮檔

sudo tar -C /usr/local -xzf go1.16.3.linux-amd64.tar.gz


vim ~/.bashrc 

# golang

export GOROOT=/usr/local/go

export GOPATH=$HOME/go

export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

source ~/.bashrc

reboot


go env -w GO111MODULE=off


範例程式:

package main

import "fmt"

 

func main() {

     fmt.Println("Hello, World!")

}


2021年2月7日 星期日

CMLAB server 安裝 Anaconda 教學

df  -h  # 可以看目錄的掛載位置
cd /tmp2
mkdir khaos   # 改成你自己的使用者名稱
cd khaos

# 到anaconda官網 找最新版的script下載網址
curl -O https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
bash Anaconda3-2021.05-Linux-x86_64.sh
>>> [ENTER][ENTER][ENTER]
>>> yes
>>> /tmp2/khaos/anaconda3
>>> yes
source ~/.bashrc

Ref: https://www.digitalocean.com/community/tutorials/how-to-install-anaconda-on-ubuntu-18-04-quickstart



# 安裝 TensorFlow 2+cuda 的環境

conda create --name tf python=3.6 anaconda cudatoolkit cudnn tensorflow-gpu

conda env list
conda create --name py37withTF python=3.7 anaconda 
conda activate py37withTF 

nvidia-smi
conda install cudatoolkit=10.1
conda install cudnn=7.6
conda install tensorflow-gpu

測試:
python
import tensorflow as tf
tf.__version__
tf.config.list_physical_devices('GPU')
# tf.test.is_gpu_available()



# 安裝 pytorch+cuda 的環境

conda create --name th python=3.6 anaconda pytorch torchvision torchaudio cudatoolkit -c pytorch

conda env list
conda create --name py37withPyTorch python=3.7 anaconda 
conda activate py37withPyTorch

nvidia-smi
conda install pytorch torchvision torchaudio cudatoolkit=10.1 -c pytorch

測試:
python
import torch
torch.cuda.is_available()
torch.version.cuda
x = torch.rand(5, 3)
print(x)





2021年2月6日 星期六

Anaconda指令

建立虛擬環境

    conda create --name envName python=3.6 anaconda

    conda create -n 虛擬環境名稱 python=3.6

    conda create -n envName jupyter     虛擬環境內預載的套件



    conda create -p 虛擬環境放置路徑 python=3.7.1 anaconda

    conda create -p "C:\Users\Public\.conda\envs\py371" python=3.7.1 anaconda

    conda config --append envs_dirs "C:\Users\Public\.conda\envs"

    conda info --envs


啟動虛擬環境

    activate 虛擬環境名稱

    activate envName

 

關閉虛擬環境

    deactivate      

    deactivate envName

 

安裝套件

    conda install 套件名稱

    conda install python=3.5   #安裝特定版本的python

    pip install tensorflow

    pip install keras

    pip install django   #安裝 django web 框架套件

 

更新套件

    conda update 套件名稱

    conda update conda

    conda update anaconda

 

更新所有套件

    conda update --all

 

執行 python 檔案

    python hello.py

 

啟動 Jupyter Notebook

    cd \pythonwork

    jupyter notebook

 

查看內部的所有的package

    conda list

 

移除package

    conda remove packeName

 

看有哪些虛擬環境:

    conda env list

    conda info -e

 

刪除虛擬環境:

    conda env remove -n envName


清除安裝包的暫存檔:

    conda clean --tarballs



2020年12月10日 星期四

Windows 自動喚醒 設定

[關閉所有喚醒計時器]

step 1. 列出所有喚醒計時器
# powercfg /waketimers

step 2. 下載 PsTools 

step 3.
# psexec.exe -i -s %windir%\system32\mmc.exe /s taskschd.msc

step 4.
{找到該工作} > 雙擊 > 條件{頁籤} > {取消勾選}喚醒電腦已執行工作 > 確定


[查看喚醒發起的設備]

{開啟}事件檢視器 > {左邊欄}Windows 紀錄 > 系統 >
                   > {右邊欄}尋找 > "Power-Troubleshooter"


[可喚醒的裝置]

查詢指令
# powercfg /?

查詢所有可喚醒的裝置
# powercfg /devicequery wake_programmable

查詢目前作用中的可喚醒裝置
# powercfg /devicequery wake_armed

關閉可喚醒裝置
# powercfg /devicedisablewake "設備名"

開啟可喚醒裝置
# powercfg /deviceenablewake "設備名"


[網卡喚醒設定]

→ 只允許 Magic 封包喚醒電腦


[其他可能的方案]

在bios里設置usb關機斷電

在bios里設置禁止usb喚醒


[參考資料]

https://www.getit01.com/p20180108548154015/







2020年3月23日 星期一

How to Read a Paper

論文閱讀

Lv 1: 了解作者的idea
[5~10分鐘的鳥瞰]

1. 細讀 title, abstract, and introduction
2. 稍微看一下每個 section 的前面
3. 閱讀 conclusions
4. 掃過 references,在腦子裡把你已經讀過的那些打勾

可以得知以下資訊:
1. 類型:這是什麼類型的論文?  (測量實驗?對現有系統的分析?一種prototype的探討?)
2. 背景:相關論文? 理論基礎?
3. 正確性:文中的假設看起來有效嗎?
4. 貢獻:論文的主要觀點是什麼?
5. 清晰度:論文寫得好嗎?

此時可以考慮要不要繼續讀這篇論文:
1. 這篇論文可能不吸引我
2. 我的先備知識不足以理解它
3. 作者的假設是錯的

Lv 2: 取得大致上的內容
[約 1 小時]

* 整篇讀過,可以寫一些註解
* 先略過 證明、實驗
* 注意 圖 / 表 (軸的標示?Error Bar?)
* 可標註未讀過的參考資料(等等可以去念)

此時我們已能對該篇論文做出有憑有據的簡介。

有時候,完成了 Lv 2 仍然滿頭問號。可能的原因如下:
1. 該主題對自己來說是新事物(不懂的 術語、縮寫)。
2. 作者使用了自己不了解的證明或實驗技術。
3. 這篇論文可能寫得很差,沒有充分的依據和大量的前瞻性參考。
4. 深夜了、你累了、該睡了......

現在,我們可以選擇:
1. 擱置論文,祈求未來不會用到它
2. 閱讀相關參考資料後,再回來讀
3. 堅持不懈,繼續 Lv 3

Lv 3: 完全理解論文(Reviewer必備)
[初學者 - 5~6小時]
[專家 - 約 1 小時]

◎ 嘗試(重新)實作這篇論文(可能只是在腦海或紙上比劃):
與作者做出相同的假設,然後重新創建該篇論文。
透過重新創建與實際論文比較,可以發覺論文的創新之處,並找出隱藏的缺陷和假設以及潛在的問題

◎ 深度思考:
1. 必須非常在意細節。
2. 在每個陳述中確定並挑戰每個假設。
3. 嘗試自己提出一個特定的想法,並進行比較;可以更深入地了解文中的證明和技術。
4. 思考過程中,記下將來的工作思路。


文獻調查(literature survey)
這可能需要在自己不熟悉的領域中閱讀數十篇論文。
重點:Related Work、Key Researchers、Top Conferences

Step 1:
使用學術搜索引擎(Google Scholar、CiteSeer...)找到 3~5 篇最​​新論文。

每篇論文做 Lv 1 的閱讀,然後閱讀其 Related Work 章節
如此一來,可以獲得近期研究的概要。
(您可能很幸運的,找到近期調查文件的鏈結,那就讀它吧~~   收工!!)

Step 2:
在參考資料(書目)中找到共通的citation重複的Researchers
這些是該領域的關鍵論文和研究人員,下載關鍵論文並先擱置

Step 3:
訪問 Key Researcher的網站,查看他們最近發表的論文。
(這項工作將使我們知道該領域的 Top Conferences 有哪些)

Step 4:
造訪這些 Top Conferences 的網站,並瀏覽它們最近的會議記錄
快速掃描通常會了解到最近的高質量相關工作。

Step 5:
這些論文以及您先前保留的論文構成了調查的第一版。
將這些文件進行 Lv 1 和 Lv 2 的閱讀。
如果他們都引用了您之前沒有找到的關鍵論文,請獲取並閱讀,必要時進行迭代


相關工作:

做Review

※ T. Roscoe, “Writing Reviews for Systems Conferences,”
https://people.inf.ethz.ch/troscoe/pubs/review-writing.pdf

寫 Paper

※ H. Schulzrinne, “Writing Technical Articles,”
https://www.cs.columbia.edu/~hgs/etc/writing-style.html

※ G.M. Whitesides, “Whitesides’ Group: Writing a Paper,”
https://www.tulane.edu/~lamp/whiteside.pdf


參考資料:
S. Keshav, “How to Read a Paper,” at ACM SIGCOMM Computer Communication Review, 2007.




2020年2月22日 星期六

Ubuntu 快速管理防火牆 (使用 ufw 指令)

# 啟用防火牆
    $ sudo ufw enable
# 停用防火牆
    $ sudo ufw disable


# 允取所有連入
    $ sudo ufw default allow
# 不允許任何的連入
    $ sudo ufw default deny


# 新增防火牆規則
    $ sudo ufw allow ssh  ( 允許服務連入 )
    $ sudo ufw allow 3306  (  )
    $ sudo ufw allow in 80   ( 允許Port連入 )
    $ sudo ufw deny out 60000  ( 拒絕Port連出 )
    $ sudo ufw deny in 60000/udp ( 拒絕Port之UDP連入 )


# 刪除防火牆規則
#先查詢
    $ sudo ufw status numbered
#再刪除
    $ sudo ufw delete <規則號碼>


# 查看狀態
    $ sudo ufw status
    $ sudo ufw status verbose

啟用 Docker Remote API 遠端呼叫

Docker Remote API 是以 Unix Socket 作連接
想要透過遠端請求的話,就必須設定監聽的 port

step 1


創建 /etc/systemd/system/docker-tcp.socket 檔案,內容如下:

[Unit]
Description=Docker Socket for the API  
[Socket]
ListenStream=8888  
Service=docker.service  
[Install]
WantedBy=sockets.target 


step 2


執行以下指令,(重新)啟動服務:

systemctl stop docker

systemctl enable docker-tcp.socket
systemctl enable docker.socket

systemctl start docker-tcp.socket
systemctl start docker


step 3


測試與驗證:

curl -X GET http://localhost:8888/info




參考資料:


在運行systemd的Linux上啟用對Docker API的遠程訪問

Docker开启Remote API 访问 2375端口




2019年12月5日 星期四

Windows 解除非預期的喚醒

1. 關閉 網路喚醒


2. 關閉 USB喚醒


3. 設定電源選項


將電源計劃設為預設值

停用喚醒計時器
禁用喚醒定時器

參考資料:


4. 關閉 排程 的 喚醒


指令powercfg /waketimers

確認有哪些排程喚醒

使用PSTools,可以在微軟網站上下載。
https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools

指令
psexec -i -s -d mmc.exe /s taskschd.msc

參考資料:
https://zhuanlan.zhihu.com/p/67930133


※ 註:

powercfg -lastwake 可以查看最近喚醒電腦的原因






2019年12月1日 星期日

Visual C++/CLR 之 Json.NET 範例

安裝教學


Visual C++/CLR 使用 NuGet 套件 - 以Json.Net 為例
https://youtu.be/WujKlfNyL8I


 序列化 


#include <string>
using namespace std;

using namespace System;

using namespace Newtonsoft::Json;

public ref class Account : Object
{
public:
bool Active;
String^ Email;
};

int main()
{
Account^ account = gcnew Account();
account->Email = "kaihao@example.com";
account->Active = true;

String^ json = JsonConvert::SerializeObject(account, Formatting::Indented);

Console::WriteLine(json);
Console::ReadKey();

return 0;
}


 反序列化 


#include <string>
using namespace std;

using namespace System;
using namespace System::IO;
using namespace System::Collections::Generic;

using namespace Newtonsoft::Json;

public ref class PeopleData : Object
{
public:
String^ Part;
List<List<float>^>^ Points;
};

int main()
{
String^ jsonFile = File::ReadAllText(R"(C:\Users\KaiHao\Desktop\1GM318J6\size.txt)");

List<PeopleData^>^ peopleDatas = JsonConvert::DeserializeObject<List<PeopleData^>^>(jsonFile, (JsonSerializerSettings ^)nullptr);

Console::ReadKey();

return 0;
}



2019年11月19日 星期二

linux 新增使用者 bash script




#!/bin/bash

for i in {1..100};
do
num=$( printf '%03d' $i )

echo -e '1234\n1234\nstu$num\n\n\n\n\ny\n' | adduser "stu$num"
done





2019年11月12日 星期二

visual studio 2017 建置 openpose 專案 (GPU版)

版本:

OpenPose v1.5.1
visual studio 2017

Python 3.7.4

CMake 3.15.4

cuda 10.0
cudnn 7.5


step1 下載專案


https://github.com/CMU-Perceptual-Computing-Lab/openpose



step2 下載並安裝CMake




step3 下載並安裝CUDA與CUDNN

注意版本!!


CUDA就是一般程式的安裝方式 (下一步 下一步 ... 確定 ... 完成)


CUDNN解壓縮後,將bin、include、lib三個資料夾
複製到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0下
覆蓋原有的bin、include、lib


step4 執行相關批次檔

不用以系統管理員身分執行全選 按 Enter 即輕鬆搞定~~
C:\openpose\3rdparty\windowsgetCaffe.batgetCaffe3rdparty.batgetFreeglut.batgetOpenCV.batC:\openpose\modelsgetModels.bat

step5 開啟CMake 產生 vs2017專案







等等等.............




沒裝過 git ,要裝一下

然後

cd "C:\openpose\3rdparty"
git clone https://github.com/pybind/pybind11.git




step6 開啟、編譯與執行







綠色箭頭就可以執行了


其他執行指令(點我)


若沒有webcam
則到 OpenPoseDemo的專案 屬性中
組態屬性 > 偵錯 > 命令引數
輸入 --image_dir examples\media\


step7 執行python範例

 注意:不保證成功 注意路徑問題 與python版本問題


python -m pip install --upgrade pip
pip install opencv-python
conda create --name py374 python=3.7.4 anaconda
y
activate py374
conda install -c conda-forge opencv
y

cd "C:\openpose\build_GPU\examples\tutorial_api_python"
python 01_body_from_image.py


2019年11月9日 星期六

VC++啟用CLR支援

屬性頁  >  組態屬性  >  一般  >  Common Language Runtime 支援 (/clr)  >  打開!!

然後

//#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
//#using <System.Drawing.Common.dll>

using namespace std;
using namespace System;
using namespace System::Collections;
//using namespace System::Windows::Forms;
//using namespace System::ComponentModel;
//using namespace System::Data;
using namespace System::Drawing;
using namespace System::Drawing::Imaging;