2015年3月18日 星期三

[Linux] 透過 sed 將 MySQL Table 資料轉成 csv 格式 @ Ubuntu 14.04

印象中之前找資料時,有發現 MySQL Server 可以輸出 CSV 格式到本地端。但是,對於無法存取到 DB Server 的檔案系統的環境時(AWS RDS),只好手動處理一下 :P

用法:

$ mysql -h rds-server -u root -p -e "SELECT field1, field2 FROM db_name.table_name" | grep "^Keyword" | sed 's/\t/","/g' | sed 's/^/"/g' | sed 's/$/"/g' > db-table-export.csv

其中 grep 那段只是為了mysql 輸出時,略過第一行 XD

[Linux] 透過 dpkg 指令,完整移除軟體 @ Ubuntu 14.04

有時為了製作乾淨的測試環境,多安裝的軟體會透過 apt-get remove package 來移除,並用 apt-get autoremove 清掉相依軟體。例如原本想安裝 php,偷懶用:

$ sudo apt-get install php5

結果系統就幫你裝了一卡車 apache2 相關東西,但你其實是想用 nginx 而已。

這時若只透過 apt-get remove 反安裝 apache2 後,系統還會遺留 /etc/apache2 的設定檔,為了避免後續維護誤導其他人,最佳的方式還是把這些東西都清光,此時就可透過 dpkg -P package 的方式清一清。

$ sudo dpkg -P apache2

如果有一卡車的東西,可以用 dpkg --get-selections 來查詢。連續動作(強烈建議先看過 dpkg --get-selections | grep deinstall 結果再使用):

$ dpkg --get-selections | grep deinstall | xargs sudo dpkg -P

2015年3月16日 星期一

AWS 筆記 - 使用 Amazon Cloudfront (CDN) 服務



切換到 AWS Cloudfront 頁面,可以看到支援 Web 跟 RTMP ,其中後者是 streaming media files。這次只使用 Web 方面。



整體設定上還滿簡單的,以 service.changyy.org 為例,後面是一台 server (node.changyy.org):
  • 先決定使用者最後會連結的服務的 domain name,此例是 service.changyy.org
  • 設定 cloudfront 的資訊,例如 Origin Domain name 填寫實際服務的機器位置 node.changyy.org
如此,cloudfront 會建立一筆 xxxxxxxxx.cloudfront.net 是提供 CDN 服務了。


可以用 nslookup xxxxxxxxx.cloudfront.net 可以看到有一批機器在服務了。如果,想要用自己的 domain name 的話,需要再 cloudfront 多設定 Alternate Domain Names(CNAMEs) 的資訊,未設定則會出現:


這主因是使用 cloudfront 是要計費的,若別人亂設定個 CNAME 導到你的 Amazon Cloudfront 的話,就默默地一直被扣錢 XD 至於費用的部分:
  • HTTP requests 費用: 在美國每 10000 則要價 0.0075 美金
  • 資料傳輸費用:在美國每 1GB 要價 0.02 美金
若一天要服務 10000 個 reqeusts,每則 100kb,那 30 天的費用:
30 天 * [10000 * 0.0075/10000 (HTTP) + 10000 * 100kb * 0.02/GB (DATA) ] = 30 * (0.075 + 0.01907) 美金附近 = 2.82 美金
對於費用部分,建議連上官網觀看,例如各地費用皆不同等:http://aws.amazon.com/tw/cloudfront/pricing/

2015年3月11日 星期三

AWS 筆記 - 使用 Amazon Simple Email Service (Amazon SES) 服務


原先在開發電子報服務時就有要用,嘗試到一半就被其他事件 Orz 所以還是花點時間筆記一下這塊。首先,使用上需要 Amazon 帳號,打通後則是要用 AWS SES 服務的流程而已,其中 AWS 許多流程仍是依據 IAM 權限管理的,其實也是個挺漂亮的架構,粗略流程:
  1. 透過 AWS 最高權限,在 Amazon SES -> SMTP Settings -> Create My SMTP Credentials,將得到一組 SMTP Username 和 Password 可使用。過程中會建立一個 AWS user,我印象中早期是要自己去處理的
  2. 預設是 sandbox 環境,只能寄給已驗證的收信者,在 Amzaon SES Verified Sender 可以新增幾個試試。
  3. 透過 SMTP protocol 寄信看看
此次使用 PHPMailer 來測試:

$ git clone https://github.com/Synchro/PHPMailer.git
$ vim PHPMailer/AWS-SES-test.php
<?php
require 'PHPMailerAutoload.php';

$mail = new PHPMailer;
$mail->SMTPDebug = 3;
$mail->isSMTP();
$mail->Host = 'email-smtp.us-west-2.amazonaws.com';
$mail->SMTPAuth = true;
$mail->Username = 'YourSMTPUsername';
$mail->Password = 'YourSMTPPassword';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

$mail->From = 'YourSenderEmail';
$mail->FromName = 'Mailer';

$mail->addAddress('YourTargetEmail');

$mail->isHTML(true);
$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

$ php PHPMailer/AWS-SES-test.php


在 sandbox 中,如果 $mail->addAddress 或是 $mail->From 使用的不是驗證過的,會出現 554 Message rejected: Email address is not verified.


最後,測試都差不多了,想要正式使用時,在申請一下  Requesting Production Access to Amazon SES 即可。理由可以很簡單,例如寄信給註冊的使用者們,不到20個英文字就搞定啦,但各個 region 必須分開申請。

Facebook 開發筆記 - Facebook app 無法取得真實的 account id

最近在開發 Facebook app 時,發現 Facebook API 已經有更新不少東西,其中有一項還滿不錯的,第三方 Facebook app 無法取得 Facebook user 的真實 ID 資訊,每個 app 會各別拿到一個,例如在 A app 跟 B app 詢問 graph api: /me 時,拿到的 id 會不一樣。然而,不一樣的 ID 卻仍可以一樣定位到同一個使用者。

這個最大的缺點是各個 Facebook app 沒有互通的資訊,但對於各個 facebook app 取得到的資訊卻還是一樣夠用。此外,可以用 www.facebook.com/id 去測試,可以發現仍可以定位到同一個 user,算是滿貼心的隱私設計。

https://developers.facebook.com/docs/graph-api/reference/v2.2/user
The id of this person's user account. This ID is unique to each app and cannot be used across different apps. Our upgrade guide provides more info about this.