2018年2月25日 星期日

乙太網路區域網路設定與協定

理論的東西都比較不親民,看得都很累,但是學過理論之後不管遇到的問題是什麼就都會有方向去分析,處理。CCNA已經是好久以前看的東西了,不過到現在每當要設定網路、wifi分享器時還記得一些從CCNA學到的知識,設定時就很有感覺。

以下就從設定區域網路開始介紹(複習)吧。當初IPv6還是沒學好,所以就以IPv4為主吧
(雖說IPv6因為NAT緩解了IP不足的問題而發展得不好,一般家用網路也不太會用到就是了XD)

2018年2月2日 星期五

R 語言一學習



基本

查詢: 用'?' 或help。ex: "?list"

環境:

R 程式
IDE: R studio

命名:

可用字母,數字,'.',底線,因此'.' 非特殊字元,不可用'.', 底線開頭
ex:  a.b.c = 3

資料型態:

基本

數值(numeric):
  • integer
  • double
字串:
  • 用 '…' 或 "…"

組合型

  • list: 1-D,用list()宣告,用 [[…]] 取值
  • Array: 1-D,用 c() 宣告,用[]取值
  • factor: 用factor(..)宣告
  • data.frame:2-D,用
    • rownames(), colnames(),回傳資料
    • sapply(), vapply(),
    • 存取方式:
      1. 用 $, Objname$ColName,ex: x$Col.2
      2. 用[],index或ColName,ex: x[,'Col.2']
  • data.table: 2-D,比data.frame有更好的效能

    • 合併:join 
    • 格式 DT[i,j,by=...]
    • 重鑄資料:melt(), dcast()

常用函式:

  • str(),顯示物件結構
  • summary(),顯示物件概述
  • typeof(), 查詢物件資料型態
  • class()

流程控制

if{} else if{} else{}

for loop

Ex:
for (index in a) {
  print(index^2)
}

while loop

Ex:
while(index <= length(a) ){
  print(a[index]^2)
  index <- index + 1
}

array取值

x=[1:5]
x[x<3] := 1, 2
x[x!=3] := 1, 2, 4, 5

函數宣告

FunctionName <- function(parameter0, 1, 2 ...){ ...}
呼叫函式:FunctionName( parameter0 = ..., parameter1 = ...) 使用ParameterName傳參數。
return也是函式

檔案讀寫

readLine
read.csv
write.csv
fread
fwrite 


資料視覺化Library

1. 內鍵

2. Lattice

3. ggplot2










2017年12月1日 星期五

Make

Makefile 是一個歷史非常攸久的腳本程式,網路上的資源早就多到看都看不完,但每次要找相關的東西的時候還是常常找不到,所以用這篇來整理、筆記一下吧。

介紹

Makefile是一個在殼層環境(shell, ex: bash, tcsh,...)執行的程式,主要是被拿來做編譯程式碼使用,例如用Dev C++的開發環境來寫C語言,就可能會看到有個檔案叫"makefile" (介紹網址),用來幫你編譯出最終的程式。

運作概念

makefile運作(設計)的概念與一般程式、腳本程式(shell script, ex: tcsh, bash)不同,一般程式語言的執行流程多是從頭到尾,從上到下,從腳本的第一行執行到最後一行,而程式流程裡就會由流程控制的if, switch, while, for loop來控制程式碼如何執行,並透過函式(function)、任務(task)等功能來重複執行某些需要重複執行的工作。
例如流程是
==>  a產生b, a+b產生c,c*a產生d,而d是最終需要的東西。
簡單流程就會寫成:
#1 b = a
#2 c = a+b
#3 d = c*a
#4 output d

思考邏緝就是上述 ==>所寫的那樣。但makefile的邏輯是反過來看的,寫makefile注重的是"最終要的是什麼",也就是任務目標,知道任務目標後再來找尋"需要哪些東西"。
所以makefile流程會是
==> 最終要產生d,所以需要c和a,因為需要c,所以需要 a和b。所以會寫成
#1 d:   c   a
#2  target = depend1 * depend2
#3 c:   a   b
#4  target = depend1 + depend2

第一行指的是說要產生d,需要c和a,d就是目標(target);d的相依物(dependency),也就是指產生d所必要的材料,就是c和 a,然後透過第二行的步驟產生d。而第三、四行功能也類似,只是產生target所做的運算不同。
所以寫makefile基本上是以"目標"為出發點來寫的。這樣有個好處是,假如我要的最終目標是c而不是d,使用make file的話,腳本完全不用修改,只要告訴makefile說"我要的最終目標是c"那它就會去找a和b,來output c,而不像一般腳本語言的思考方式,要修改程式把最終要輸出的東西改成c。


功能整理

規則

target [target2 ... ]  : [dependency1 ... 2 ... 3 ...]   # ('#'為註解,中括號代表裡面的項目為選擇性)
(tab開頭代表指令)[@,-]command1

基本特殊變數



巨集指令


glob目標



網路資源:


2017年11月26日 星期日

2017年11月25日 星期六

密碼學技術

密碼學基本要素 (資安三要素)


  1. 機密性(confidentiality)
  2. 完整性(integrity)
  3. 可利用性(availability)

tcsh

在Linux上常用的Command Line Interface (CLI)的殼層(shell)多是bash, tcsh, tclsh…,因為工作上首次接觸就是tcsh,所以對tcsh認識得較深,雖然查查tcsh使用手冊(manual)就可以知道tcsh要怎麼用,但就在這邊記錄一下所學到的tcsh好用的地方吧!

啟動tcsh

基本上在mac OS上,Linux裡預設都已經有裝了某一版本的tcsh (通常執行檔會放在路徑:/bin/),所以只要打開terminal直接輸入 tcsh就可以執行了。而windows的話基本上是沒有的(畢竟shell script多是UNIX類的作業系統),需要自行下載,可以用軟體mobaxterms來安裝使用。

特點

  1. tcsh是shell script,也是shell env.既然稱為shell + script,就代表tcsh可以先被啟動成一個執行環境再一步一步輸入指令,也可以先寫成腳本再呼叫執行,基本上兩者的執行方式是一樣的。腳本檔的執行基本上是由目前的程序呼叫一個子程序(此子程序就是執行tcsh shell)由上到下一行一行執行腳本指令。
  2. 功能
    1.  流程控制 - 基本 if, while, foreach, goto,  (無for loop)
      1. if ( expression) then
        ...
        [else if then
         ... ]
        [else
         .... ]
        endif

        EX:if ( -e fileA) then  # 若檔案fileA存在,則執行…
          echo "fileA exist"
        endif
        上述這種簡單寫法,可以簡寫成一行,更精簡:
        test -e fileA && echo "fileA exist"
      2. while ( expression )
        …
        end

        EX:set a = 0
        while( $a < 5)  # a = 0,1,2...4
          echo "a = $a"
          @ a++ # a=a+1的意思
        end
        會印出
        a = 0
        a = 1
        a = 2
        a = 3
        a = 4
      3. foreach var1 ( list )
        ...
        end
        EX:
        foreach abc ( a b c )
        echo "name = $abc"
        end
        會印出
        name = a
        name = b
        name = c
      4. goto label
    2. 檔名泛名
      tcsh使用glob pattern而非Regular Expression來對檔名作匹配。
      glob pattern使用'?','*','[]','{}','^'作為特殊字元做匹配。
      '?' - 單一字元
      '*' - 0~多個字元
      '[abc]' - 匹配單一字元:a或b或c
      '{aa,bb,cc}' - 匹配aa或bb或cc
      '^' - 反向選擇:EX: ^ab*  -->匹配檔名開頭非ab的檔案。
    3. 變數與變數取代 (variable substitution)
      1. 種類:變數內容僅能是文字,
      2. 表示法
      3. 特殊變數
        1. $0, $1....
        2. $argv
        3. $#VarName
        4. $$
        5. $?

    4. 指令歷史記錄(command history)及指令取代 (command substitution)
      用。history可顯示之前打過的指令的歷史紀錄
      '!'用來指出在指令歷史記錄中出現過之指令文字。
      1. !!  --執行上個指令
    5. 別名(alias)及別名取代 (alias substitution)
      alias
    6. 路徑堆疊 (directory stack)
      改變當前路徑最常用cd, 而tcsh提供pushd來改變當前路徑並將當前路徑存入stack中,之後可簡單地使用popd來跳回最後存入的路徑。
    7. 排程
      sched指令可以達到排程的目的,例如:sched 
    8. 輸出重新導向與指令執行管線化(piping)




2017年8月28日 星期一

寫程式 - 感想

寫電腦語言跟寫文章一樣,只是讀者有二種,一個是人,另一個是編譯器,所以寫程式文章大概就是:
1.條列、註解很重要,不然接手看程式碼的人真的會有苦說不出,不過另一方面,幫別人看程式碼除錯(Debug)久了也會練出跳躍式思考的能力,聽別人敘述就能猜到大概會錯在哪。
2.精簡的寫法,有效率的寫法可以讓程式運作得更好。這部分其實就不容易做到,真的要寫得好,就要對編譯器有所了解才行,畢竟讓這位讀者看得懂你的寫的東西才能用它的邏輯把程式轉給電腦看。

2017年8月26日 星期六

第一章

把學到的東西盡量用中文寫出來……真的是種挑戰……程式碼不算XD


2020 Pi錢包三倍券加碼回饋機制決策分析

 Pi錢包說 “ 三倍券 ” 中的 2000 元每次消費的都會獲得 p 幣加碼回饋的抽獎機會 試問消費策略?消費越多次越佳或越少次越佳?