2017年8月25日 星期五

【AS400】Physical File 基本概念


  1. Physical File 與 Logical File 皆為 AS 400 的 Database File
  2. Physical File 的 Source File 描述檔案結構,與 Table Schema 相似
  3. PF 的 Source Compile 之後,會產生 Type 為 *FILE 的 Object,實際存放資料
    • Type is PF:Defining a PF using DDS
    • Type is *FILE:Saving Data
  4. 有資料的 PF 再次 Compile 之後,原先資料會遺失
  5. 若要變更 PF 的 Field Attribute ,可使用 CHGPF 指令,無論是否有資料。但有其限制
    • 成功:增加欄位長度、新增欄位、新增或刪除鍵值、變更欄位順序、更名 Column Heading、更名 Alias
    • 資料遺失:縮減欄位長度、移除欄位、更名 Field Name
    • 失敗:將欄位型態由文字轉數字或數字轉文字、資料為亂碼 (ex:++++)
    • * Change Physical File (CHGPF)
      CHGPF FILE(LIB/OBJ) SRCFILE(LIB/QDBFSRC) SRCMBR(OBJ_SRC)
      
  6. 若 DSPF 同時產生於 Data Lib 與 Program Lib 之下
    • 當程式於執行階段 OPEN 該 DSPF 時,會發生 File Status = 39 Exception
    • 執行 dspjoblog 查詢錯誤訊息,會顯示該 DSPF 發生 Level Check 之錯誤

2017年8月12日 星期六

【NetBeans】環境設定二三事


  1. 版本是否為最新版
  2. JRE 和 JDK 是否安裝
  3. 專案需要 Library 是否 import
  4. NetBeans 某一版更新會失敗,若無法成功開啟,請斷網

2016年12月15日 星期四

【Git】basic command

$ git checkout -b debug
Switched to a new branch 'debug'
$ git checkout master
Switched to branch 'master'
$ git merge debug
將 debug 分支合併回 master
$ git branch -d debug
Deleted branch debug. $ git commit -m "commit message" 改變指標 $ git reset 會移動分支 $ git log 秀出分支的頭到尾

2015年5月29日 星期五

【CentOS】rsync 異地備援

需求為有四台機器 ( OS:Linux CentOS )
Master A, Client B, Client C, Client D
Master A 為有版控的開發環境
希望 commit 到 Master A 後
能夠自動同步到三台 Client 機器上

Linux 有一個很好用的異地備援指令 rsync
rsync 第一次做完 Full Backup 後
日後備份檔案會是採取差異備份的策略
大幅降低備份檔案的傳輸時間
rsync 有兩種方法在 server / client 進行傳輸
1. 透過 ssh 的通道
2. 使用 rsync 提供的 daemon 服務
採用方法一透過 ssh 的通道來同步檔案
由於希望往後能靠自動排程(crontab)來進行同步
所以需要先製作出免密碼登入的 ssh 金鑰

ssh 遠端登入免密碼
  1. 在 Master 端建立 Public Key 與 Private Key
  2. Private Key 保存於 Master A
  3. Public Key 傳送給 Client B,C,D
#用 RSA 演算法產生 Key Pair
ssh-keygen -t rsa
#查看 keys
ll ~/.ssh
#Private Key 預設位置不用變更
#Public Key to Client B
scp id_rsa.pub root@clientB:~/.ssh
#Public Key to Client C
scp id_rsa.pub root@clientC:~/.ssh
#Public Key to Client D
scp ip_rsa.pub root@clientD:~/.ssh


接下來到三台 Client 端
將 Public Key 保存至 authorized_keys
完成後,ssh 登入 Client 就免密碼
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
chmod 644 authorized_keys


將備份流程寫入 backup.sh 檔案
#!/bin/bash
# Master A 檔案路徑
localdir="/local/path"
# Client 端備份路徑
backupdir="/backups"
# Client 端 ip 位址
remoteip="192.168.100.252 192.168.100.253 192.168.100.254"
for ip in ${remoteip}
do
    rsync -av ${localdir} -e ssh root@${ip}:${backupdir}
done
# 建立 crontab 工作,每十五分鐘差異備份一次
crontab -e
0-59/15 * * * * sh backup.sh

2015年2月5日 星期四

【Ubuntu】crontab 刪除過期備份檔案

之前有寫過 crontab 排程 postgreSQL 自動備份
若沒有自動清除老舊的備份檔案
就會累積不少備份檔案
因此修改一下之前寫的 backup.sh 檔案
假設備份檔案保留三個月
#設定刪除日期
deldate=$(date -d'3 months ago' +%Y%m%d)
#刪除三個月前備份檔案
rm -f postgres."$deldate".tar.gz
設定刪除日期的地方
若是要刪除五天前的檔案
可修改為 '5 days ago'
若有需要修改自動排程
cd /etc
vi crontab
若要手動刪除過期備份檔案
可以善用 find 指令
find /path/to -mtime +5 -exec rm {} \;
-mtime 表示最後修改時間
+5 表示五天以前
-exec 接要執行的指令
{} 表示 find 指令找到的檔案

2015年1月13日 星期二

【Javascript】匯出 csv

將 table 的內容匯出成 csv 檔案
利用 encodeURIComponent
將字串轉為 Data URI
但要注意轉出的 code 為 UTF-8 編碼
若直接用 Microsoft Office Excel 開啟 csv 檔案時
中文會變成亂碼
因為 Excel 無法預設讀取 UTF-8 編碼的 CSV 檔案
所以利用增加 UTF-8 BOM 的方式
讓 Excel 直接開啟 csv 不會出現亂碼
navigator.appVersion.indexOf("Win") 若回傳值不為 -1
表示 OS 為 Windows 系列
指定 charset 為 帶 BOM 的 UTF-8

產生 CSV 內容的資料處理部分
傳入的參數 _csvString
除了每列資料要加斷行符號
不同欄位之間的資料要加逗號之外
還要額外處理兩個地方
1.資料若含有特殊符號,例如逗號,資料需加上雙引號
2.資料內容若已有雙引號,建議用 replace 取代為兩個雙引號
這樣用 Excel 開啟時,瀏覽效果較佳
function exportToCSV( _csvString ) {
    var downloadLink = document.createElement("a");
    downloadLink.download = "dataTable.csv";
    downloadLink.innerHTML = "Download File";
    if (window.webkitURL != null) {
        var code = encodeURIComponent( _csvString );
        if ( navigator.appVersion.indexOf("Win")==-1 ) {
            downloadLink.href = "data:application/csv;charset=utf-8," + code;
        } else {
            downloadLink.href = "data:application/csv;charset=utf-8,%EF%BB%BF" + code;
        }
    }

    downloadLink.click();
}

2015年1月8日 星期四

【Javascript】匯出txt


因為有將 Log 直接寫進 html 裡面
所以就想說將網頁上的純文字內容輸出為一個 txt 檔案
saveTextAsFile function 內有兩個參數
第一個參數 _fileName 為預設在本地端存檔的檔名
第二個參數 _text 為輸出的純文字內容

function saveTextAsFile( _fileName, _text ) {
    var textFileAsBlob = new Blob([_text], {type:'text/plain'});

    var downloadLink = document.createElement("a");
    downloadLink.download = _fileName;
    downloadLink.innerHTML = "Download File";
    if (window.webkitURL != null) {
        // Chrome allows the link to be clicked
        // without actually adding it to the DOM.
        downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
    } else {
        // Firefox requires the link to be added to the DOM
        // before it can be clicked.
        downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
        downloadLink.onclick = destroyClickedElement;
        downloadLink.style.display = "none";
        document.body.appendChild(downloadLink);
    }

    downloadLink.click();
}

function destroyClickedElement(event) {
    document.body.removeChild(event.target);
}