pretty code

2019年1月28日 星期一

google-auth-library:DEP007 解決方式

使用 nodemailer 只要幾行 code 就可以發送 email

不過如果是使用 gmail 當寄件者
你只有 2 個選擇

1. 降低 gmail security policy (有風險)
2. 使用 OAuth2

為了安全起見
我這裡是使用第 2 種方式

可參考 Nick Noarch 的 Sending Emails with Node.js Using SMTP, Gmail, and OAuth2

雖然照他的方式可以順利的寄發 email

但 googleapis 這個 module 在 refresh token 時會有以下警告

google-auth-library:DEP007
The `refreshAccessToken` method has been deprecated, and will be removed
in the 3.0 release of google-auth-library. Please use the `getRequestHeaders`
method instead.


試了一下應該這樣可以解決了

const oauth2Client = new OAuth2(clientID, clientSecret, redirectURL);
oauth2Client.setCredentials({refresh_token: refresh_token});

// old way
oauth2Client.refreshAccessToken().then((tokens) => {
    var token1 = tokens.credentials.access_token;  
});

// new way
oauth2Client.getRequestHeaders().then(header => {
    var patten = 'Bearer ';
    var token2 = header.Authorization.substring(patten.length);
});

自動發送電子書 email 到亞馬遜

亞馬遜有一個很棒的功能,你可以透過 email 將有支援的檔案寄到亞馬遜帳號﹝個人設置﹞,便可以在個人文檔中看到此電子書,理論上是跟 Amazon Drive 共用容量﹝5 GB﹞,但大陸亞馬遜似乎沒有連動?

底下是有支援的檔案格式:
Kindle格式(.MOBI、.AZW)
Microsoft Word(.DOC、.DOCX)
HTML(.HTML、.HTM)
RTF (.RTF)
文本(.TXT)
JPEG(.JPEG、.JPG)
GIF (.GIF)
PNG (.PNG)
BMP (.BMP)
PDF (.PDF)

既然身為一個程式設計師,寫程式自動發 email 應該是一件很合理的事。

個人用的是 Node.js﹝nodemailer﹞,這幾天在傳送時都一直遇到下列錯誤,"您发送至Kindle的邮件未附任何文件附件"。

原本以為是類似編碼等設定沒有設定好,但在下載了郵件原始檔後也看不出任何異狀。

後來靈機一動,想說會不會是沒有郵件本文的原因,就隨便插了一段空白區塊,果然就成功了。注意不能是空字串,之前就是用空字串才有問題。

底下是我目前的設定,提供給有需要的人參考。

var user = config.gmail.user;
var clientID = config.gmail.clientID;
var clientSecret = config.gmail.clientSecret;
var redirectURL = config.gmail.redirectURL;
var refresh_token = config.gmail.refresh_token;

var amazonEmail = config.amazonEmail;

const smtpTransport = nodemailer.createTransport({
    service: "gmail",
    auth: {
        type: "OAuth2",
        user: user,
        clientId: clientID,
        clientSecret: clientSecret,
        refreshToken: refresh_token,
        accessToken: accessToken
    }
});

const mailOptions = {
    from: user,
    to: amazonEmail,
    subject: "Convert",
    attachments: attachments,
    generateTextFromHTML: true,
    html: "<div></div>"
};

smtpTransport.sendMail(mailOptions, (error, response) => {
    if (error) return reject(error);
    smtpTransport.close();

    resolve(response);
});

2019年1月25日 星期五

grep 小技巧

目前因為測試
故手上有好幾千筆的開機資料

正常情況下只要 parse 一次即可
故時間還可以接受

但是如果要測試 Server 的功能時
這幾千筆的資料便會拖慢測試速度

grep 有一個參數可以方便我們擷取前幾筆的資料
這樣一來就可以產生出可供人工使用的測試資料了
輸出控制:
  -m, --max-count=NUM       在達到 NUM 符合項目後停止

Usage:
grep ".*" --text -m 30000 Reboot.log > test.log

2019年1月22日 星期二

樂天電子書使用 kindlegen 轉檔

有些直排的電子書經過 calibre 轉換後會變成橫排,網路上說是因為 calibre 會去修改 css 樣式,故較好的方式是使用 Kindle 的 kindlegen command line tool 轉換。

據實測的結果,真的可以順利呈現直排中文。

不過樂天的電子書似乎在 XHTML 檔有些問題﹝只試過一本﹞,可以使用以下步驟修正。

1. 取得 DRM-Free 後的 epub 檔案,請參考其他網路文章。
2. 改副檔名為 zip 並解壓縮。
3. 修改 OEBPS\*.xhtml ,手動在檔案前面加上下列文字。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html>

2019/05/30 更新
有些書轉完後在 Kindle 看會變亂碼,經實測也是加入上面 2 行就可以恢復正常。

2019年1月18日 星期五

AI 3 要素

大數據,演算法,計算力

相關運用
大數據:資料收集,資料庫 (SQL, NoSQL)
演算法:現成框架、模型 (Tensorflow, Caffe, CNTK, PaddlePaddle)
計算力:CPU, GPU, TPU, FPGA


2019年1月11日 星期五

八陣圖

功蓋三分國,名成八陣圖
江流石不轉,遺恨失吞吳



2019年1月10日 星期四

電子書比價

今天心血來潮想要比較一下之前買的書在 3 家的售價
居然 Google 是最便宜的
果然是家大業大

之前是為了測試讀墨才在讀墨購買
故還需要另外申請帳號
(理論上應該也可以用 Google 但是他沒放在註冊頁面)

看來以後直接以 Google 為主好了

樂天可以用 Google 帳號綁定,不用申請帳號
其他網站也有使用類似的技術

真心覺得 Google 應該要針對帳號收月費
不然哪天 Google 倒了就不能用了
拜託再撐個 20 年就好

反正等我老了我應該也不想用電腦
但是 Kindle 看書還是一定要的呀

人生只需要 2 個帳號
Google and Amazon