5/29/2015

ZENLET 開箱

幾個月前在FlyingV上贊助的ZENLET終於到貨了,包裝盒非常有質感。

打開之後馬上可以看到ZENLET標誌。
官方印製的Thank you note。
比Macbook的Touch panel稍微小一些。


放入卡片的狀態,卡片愈多會卡越緊,要稍微用力才能單手推開。推開的時候實際上是從背面推開,ZENLET的機構會讓卡片會依序展開來, 但是最下面那一張幾乎不會展開。
我注意到信用卡類的有浮出的字其實會干擾, 推開的時候造成一些摩擦力。
由於底部有一層金屬怕會干擾悠遊卡扣款, 所以我馬上跑到7-11測試一下, 感應完全沒問題。

感想:
如果單手推開可以再做滑順一點就好了。

同場加映:





5/27/2015

小朋友保險研究

/** 免責聲明
以下文章僅個人心得, 本網站之內容僅供參考之用,並未據此勸誘使用者採取任何行為,不構成對任何人在任何地區的投資建議、買賣之要約、勸誘買賣有價證券、金融產品或票券或參與任一特定的投資策略或任何其他意思表示,讀者不應視為專業意見而加以倚賴。任何人士或團體根據本網站所載任何資訊、意見或估計行事而直接或間接遭受的任何損失,概不作任何保證或承擔任何責任 */

開始:
最近二寶出生了之後又把以前研究保險的心得翻出來。

先說結論:
我會選擇10萬壽險主約+雙 * 定期實支實付醫療險附約+親子豁免條款
醫療險的額度至少家中次要經濟來源(父、母其中之一)的薪資, 相當於所得替代率的概念, 避免長期住院需要父母辭職照顧的情形。

社會環境&假設前提:
DRG實施後, 平均住院天數下降(因為醫生沒利潤, 會建議患者趕快出院, 自費住院不給付), 門診比例提高, 門診手術費較貴, 最好多投保一些。如果有能力負擔單人房也比較不會被趕著出院, 但是單人房價也是每年都在調高。

定期險vs終身險 (此處以醫療險為例):
終身險前期總投入保費較高, 對父母產生的壓力稍大
反之定期險在前面投入很小, 但小朋友長大以後保費每年增加一些, 約30歲與終身險追平, 但60歲以後保費往往倍增, 這是因為保險公司對於未來的不確定進行風險轉嫁。
但我認為30歲以後應由成年子女自行負擔老年醫療的規劃, 父母只需在年輕時替他們打好基礎即可。
定期險相較之下金流壓力較小,更可以給他們更好的童年環境。

定期險會根據金管會規定每年或數年更新條款, 一般而言從優認定, 隨著醫療手術技術的進步, 這點是最大的好處。
定期險通常只能續約保到75歲左右。
定期險要避免發生扣款中斷。

醫療險:
實支實付如果只保1家不要選 (日額、實支2擇1的)。如果保2家組合, 則盡量選2擇1的, 這樣每一家都可以自由搭配。
實支實付重點要看保不保證續保, 到幾歲?
理賠的項目有沒有全民健保以外的自費支出。(除看護外自費全部包括的概括式條款), 有概括式條款的較佳, 模糊解釋時從優解釋。

需留意超過30天有加倍理賠嗎? 拖過30天的病通常會花大錢了。
實支實付有沒有涵蓋高貴自費藥材?
如果你的保險有Cover, 醫生可能喜歡你這種病患, 可以放新的用利潤高的藥, 醫病關係良好, 也可以放心的升等單人病房。

壽險:
小孩14歲之前壽險額度都沒意義。任何時候小孩掛了我也不想領那種錢。14歲之後, 加公司團保定期壽險(為什麼這時候又要保? 因為實在便宜又大碗), 直到小朋友成年, 工作之後就要自己負擔, 因為這時候他的壽險額度是為了身後留下錢給另一半。

意外險:
所有保險賠率最高的高CP值險種, 完全是風險轉嫁的概念。
金管會有規定一個人最多保多少意外險, 避免殺人詐領,
經濟許可就盡量保滿。公司團保的意外險不計入, 也盡量保滿。

防癌、重大疾病:
(如果家族沒有遺傳病史)小朋友在防癌、重大疾病機率不高可以視自己經濟狀況投保, 用儲蓄準備金替代即可。小朋友成年之後請他自己投保防癌。

燒燙傷:
小朋友最難受的就是燒燙傷, 任何爸媽都會哭翻。
重點是家裡要減少可能發生燙傷的環境, 比買什麼保險都重要。
可加保意外險或是特別針對燒燙傷的險種。

親子豁免條款: 
如果爸媽掛了, 雖然保了很多醫療險, 但是遺眷繳不出來也是枉然, 這條不算便宜。

額度該保多少?
醫療險的額度至少>家中次要經濟來源(父、母其中之一)的薪資, 相當於所得替代率的概念, 避免萬一萬一需要長期住院, 父母一人辭職照顧的情形。
如果報稅時你是列舉申報, (通常有租一整層, 或是已貸款買房正在繳利息的家庭, 往往用列舉)
保險扣除額每個人24000, 因此小朋友的保險支出建議保超過24000, 這時候就相當於保費打折。


/** 免責聲明
以下文章僅個人心得, 本網站之內容僅供參考之用,並未據此勸誘使用者採取任何行為,不構成對任何人在任何地區的投資建議、買賣之要約、勸誘買賣有價證券、金融產品或票券或參與任一特定的投資策略或任何其他意思表示,讀者不應視為專業意見而加以倚賴。任何人士或團體根據本網站所載任何資訊、意見或估計行事而直接或間接遭受的任何損失,概不作任何保證或承擔任何責任 */

5/21/2015

磁浮鋼鐵人開箱


幾個月前訂購的鋼鐵人來了!

磁浮的效果不錯, 有感覺到鎖定在一個3度空間中, 可惜不能飛太高。
鋼鐵人的面罩可以打開, 底下有一個開關是打開全身的燈泡。

放置的時候需要一些技巧, 否則很容易被周圍磁力吸住, 小心撞壞。
當手上傳來磁力鎖定的感覺之後, 緩緩放開腳的部份, 就會保持浮空,
建議使用變壓器12V, 供電比較穩定。

關於底座過熱的問題, 只要保持在磁浮時不要旋轉就幾乎不會熱, 也比較省電。
如果一直放置失敗, 磁力重新鎖定會浪費電並且發熱,
經過不斷地練習, 現在只要5秒內就可以放好。

Mac OS X 安裝memcached for PHP



此處我的開發環境是Mac OS X with MAMP (PHP 5.6.2)
開發環境的安裝步驟

以下是安裝memcache 並且在PHP中啟用.

$brew install libmemcached

在console下
要用$which php
確保是使用/Application/MAMP下面的版本, 如果是用/usr/bin/php 表示需要設定export path 
export PATH=/Applications/MAMP/bin/php/php5.6.2/bin/php:$PATH

然後
$sudo pecl install memcache

如果沒有執行前面安裝libmemcached的步驟, pecl在安裝的時候會詢問libmemcached的路徑.
$vim /Applications/MAMP/bin/php/php5.6.2/conf/php.ini
extension=memcache.so

重新啟動MAMP
在mac os X上將memcached跑起來as a daemon and listen on default port 11211

$memcached -d

如果需要清除memcahed的時候,(例如程式反應不正確)
$telnet 127.0.0.1 11211
>flush_all
>quit


5/14/2015

AWS 2015 Developer Summit in Taipei




BIG BIG thumbs-up to Markku Lepisto for his wonderful speech.
Many interesting topics covered especially AWS Lambda, Container service and IOT live demo of building an earthquake sensor with AWS arduino SDK

Using AWS SDK in arduino IDE is easy, just include the library and headers. 
In the demo, Markku is using SDK from device to send sensing data to Kinesis for analysis.
If gravity changes more than 5g, send an alarm to phone through AWS SNS.
No EC2 instance is required in building such an application, that is powerful.



Sincere suggestions for developers:

  • A/B Testing with the same code but disable several features from flags.
  • Store everything from Day 1 & understand your customers better by analyzing logs. Then you can drop some log.
  • key = faster iteration cycle
    • Build, Test, Fix cycles faster and faster
  • Use TrustedAdvisor to lower your costs.
  • Use 1,000 Spot instances to simulate client workloads. ($3 for 1 hour)
  • Understanding Continuous integration (CI) related new features from AWS last year:
    • CodeCommit = Source control (private GitHub)
    • CodePipeline = Continuous Delivery
    • CodeDeploy = Deployment
  • Container is good, but when container grows, how to manage them? AWS Container service or ECS in short (i personally think it easily confused with EC2)
  • Container service manages status, batch and schedules.
    • Some containers shall be in the same server (for super fast dat exchange)
    • Some containers shall be placed in different AZ for HA
  • Decompose your service to smaller micro service running in containers and put simple functions to Lambda.
Sadly i cannot split myself in half to attend both tracks in the afternoon. I think most people attend the IOT session, which also indicates how hot the topic is in recent years.

5/12/2015

快速搭建本地私有儲存雲, 使用Raspberry Pi 2安裝OpenStack DevStack



0. 我的環境是Mac OS X 10.10
1.
- 使用Ubuntu 14.04 LTS image for Raspberry Pi 2 https://wiki.ubuntu.com/ARM/RaspberryPi
- Download image and unzip to Mac desktop
- use diskutil list 找到你的SD card 例如是/dev/disk1
- sudo diskutil umountDisk /dev/disk1
- sudo dd bs=1m if=~/Desktop/Pi\ 2\ image/2015-04-06-ubuntu-trusty/2015-04-06-ubuntu-trusty.img of=/dev/disk1
- 用這張SD card 幫Raspberry Pi 2開機

2.
- 登入Raspberry pi, 預設是沒有openssh server, 請先外接HDMI螢幕和USB鍵盤登入.
- sudo apt-get install openssh-server

3. 開始安裝Openstack
- sudo apt-get -y update
- sudo apt-get -y install git vim
- git clone https://github.com/openstack-dev/devstack.git -b stable/icehouse devstack/
- sudo devstack/tools/create-stack-user.sh
- sudo su stack
- cd
- git clone https://github.com/openstack-dev/devstack.git -b stable/icehouse devstack/
- sudo chown -R stack:stack /opt/stack
- cd devstack/
- vim local.conf # copy in the contents of the one below. 私有儲存雲只需要帳號(keystone)與儲存(swift)部分, 因此簡化local.conf如下:

[[local|localrc]]

# Credentials
DATABASE_PASSWORD=devstack
ADMIN_PASSWORD=devstack
SERVICE_PASSWORD=devstack
SERVICE_TOKEN=devstack
RABBIT_PASSWORD=devstack

# Services
ENABLED_SERVICES=mysql,key
ENABLED_SERVICES+=,s-proxy,s-object,s-container,s-account

# Branches
KEYSTONE_BRANCH=stable/icehouse
NOVA_BRANCH=stable/icehouse
NEUTRON_BRANCH=stable/icehouse
SWIFT_BRANCH=stable/icehouse
GLANCE_BRANCH=stable/icehouse
CINDER_BRANCH=stable/icehouse
HEAT_BRANCH=stable/icehouse
TROVE_BRANCH=stable/icehouse
HORIZON_BRANCH=stable/icehouse

# Swift Configuration
SWIFT_REPLICAS=1
SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5

# Enable Logging
LOGFILE=/opt/stack/logs/stack.sh.log
VERBOSE=True
LOG_COLOR=True
SCREEN_LOGDIR=/opt/stack/logs


# 啟動OpenStack相關服務, 使用./stack
# 如果需要將OpenStack服務停止,使用./unstack

Test the Authentication from Keystone, 請注意單雙引號要正確.
$curl -d '{"auth":{"passwordCredentials":{"username":"demo","password":"devstack"},"tenantName":"demo"}}' -H "Content-type: application/json" http://localhost:5000/v2.0/tokens

可以得到關於整個服務的相關資訊, 例如是, 最重要的就是swift的publicURL以及Region (預設Region名稱是RegionOne):
之後在使用Openstack SDK的時候就需要這些資訊.


{
"access": {
"token": {
"issued_at": "2015-05-12T02:07:24.183444",
"expires": "2015-05-12T03:07:24Z",
"id": "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-mu9NtkFebV79HD61Zhnq5+jX+cUxLgcfRfm-GqdkVcqPRPuzniVh3K+5KYYsmsdaLn0dIJdhRkqq9wTYwTyLQaXECnsVzxX0UQWmrSIBW8p9xvqRwzSGRwGr8l5xbn6gJXyQ==",
"tenant": {
"description": null,
"enabled": true,
"id": "9fa3258c21744af99682681f636ea831",
"name": "demo"
}
},
"serviceCatalog": [
{
"endpoints": [
{
"adminURL": "http://192.168.10.170:8080",
"region": "RegionOne",
"internalURL": "http://192.168.10.170:8080/v1/AUTH_9fa3258c21744af99682681f636ea831",
"id": "6cd7ad2e6b4840efbdd63bbac25ec15c",
"publicURL": "http://192.168.10.170:8080/v1/AUTH_9fa3258c21744af99682681f636ea831"
}
],
"endpoints_links": [],
"type": "object-store",
"name": "swift"
},
{
"endpoints": [
{
"adminURL": "http://192.168.10.170:35357/v2.0",
"region": "RegionOne",
"internalURL": "http://192.168.10.170:5000/v2.0",
"id": "93bc8ca17c9843d9b0a32241211d1700",
"publicURL": "http://192.168.10.170:5000/v2.0"
}
],
"endpoints_links": [],
"type": "identity",
"name": "keystone"
}
],
"user": {
"username": "demo",
"roles_links": [],
"id": "0db2610757ba43368dbd6e32d34462e0",
"roles": [
{
"name": "Member"
},
{
"name": "_member_"
},
{
"name": "anotherrole"
}
],
"name": "demo"
},
"metadata": {
"is_admin": 0,
"roles": [
"bc0f9b54c3b44086a793189da701a7f4",
"9fe2ff9ee4384b1894a90878d3e92bab",
"7ed8a5c783004c39abb8bd3eac10629b"
]
}
}
}

到這裡我們已經完成一個利用OpenStack快速搭建一個本地私有儲存雲的過程, Swift服務網址如下:
http://192.168.10.170:8080/v1/AUTH_9fa3258c21744af99682681f636ea831
username:demo
password:devstack
region:RegionOne
tenantName:demo
這些參數都是使用OpenStack SDK需要的部份.

你可以安裝python-swiftclient來進行簡單操作
>sudo pip install python-swiftclient
使用swift cli之前, 需要export一些環境變數
export OS_AUTH_URL=http://192.168.10.170:35357/v2.0
export OS_USERNAME=demo
export OS_TENANT_NAME=demo
export OS_PASSWORD=devstack

>swift stat
>swift list #列出目前有的container
>swift post abc #產生一個container named abc

參考資料:
https://wiki.ubuntu.com/ARM/RaspberryPi

5/09/2015

AWS certified solutions architect - associate level 準備筆記






最近剛考過AWS認證架構師, 分享一些準備心得:

 
架構
架構師的題目其中60%是如何達到Fault-tolerant, high availability, cost-effective. 這裡是重點中的重點, 詳細各領域的比重請看Blueprint.

AWS的題目會一直進化, 有Beta test機制讓志願者測試新題目, 之後再放入正式題庫中.
有些實作題有遇過的人一定知道答案並且會心一笑, 沒有經驗的只能抓抓頭.
出題目的人非常有實務經驗, 不是考死背, 是當你的公司要推出新服務、全球化實際會面臨的困難與挑戰, 這也正是架構師的目標.

考試之前閱讀大量的FAQ和whitepapers. 我會建議有空就盡量讀, 安排好考試時間之後下班就盡量唸whitepaper, 只有好處沒壞處. 同時可以檢討自己在工作實務面上的缺失,非常有幫助.

請務必要放下工程師的牛脾氣, 明明XXX服務比較好用我們公司也這樣用, white paper怎麼建議要改架構?
Sorry 請不要跟自己過不去, AWS的考試當然都希望盡量偏向使用AWS的服務當作Best practice. 請放下執念, 先清空自己再來吸收white papers比較讀得下書.

我的筆記
AWS Instance store
AWS Security
AWS VPC
AWS IAM Role

進入考場
考試地點在台北的資策會考試中心,

考試時間總長80分鐘, 開始前15分鐘要報到並且清空口袋, 一旦入場可以直接開始.
題目目前有英文/簡體版(是的目前只有簡體), 建議辛苦一點選英文版, 因為考前在準備資料幾乎都是英文版, 考試要再轉換很累.

參加認證的人都必須要同意NDA (Non-disclosure agreement)不得公開考試內容.
可以確定的是只上3天輔導課一定不夠的, 一定要有實作經驗.

應答
題目分成單選題(multiple choice)和複選題(multiple response) 因為按鈕樣式不同有防呆,
不用擔心是否複選題你卻只選一個答案的情形發生.

因為英文題目加上情境題, 所以要整個閱讀完就蠻吃力的, 時間不太夠.
尤其複選題通常至少浪費1分鐘, 最好要配速100%確定的單選先答, 不確定的就標記起來之後回來答.

結束之後填寫問卷, 然後馬上知道結果(相當殘酷阿).

AWS Instance store

Instance store 速度超強 

測試數據:
https://gist.github.com/ktheory/3c3616fca42a3716346b

Instance-store is over 5x faster than EBS-SSD for uncached reads.Instance-store and EBS-SSD are equivalent for cached reads.Instance-store is over 10x faster than EBS-SSD for writes.

不是每種機器等級都有支援:

Some instance families, such as T2 and T1, do not support instance store volumes at all.

資料揮發時機:

重開機沒事兒, 不用自己嚇自己, 只有stop, crash會讓資料消失.

Ephemeral storage or instance-store DOES persist across reboots of an instance! It does not persist across a stop/start, nor a termination, nor some instance hardware failures. 

AWS Security

超詳細的解說AWS各個服務用到的安全技術,
如果沒有時間一一試驗AWS的服務, 
可以從這份white paper當中快速了解各服務的目的以及底層仰賴的技術。


AWS VPC

Security group是作用在instance 等級 (只管理允許)
Security group 與 instance 是多對1, 一台instance可以同時屬於多個security group方便套用規則, 讓每個security group規則盡量簡單.
     Security Group of EC2-Classic只能管進, VPC內可管進出.
Network ACL是作用在subnet等級的虛擬防火牆 (可以管理進出), 按照順序, 第一個符合即決斷.

Security Group Network ACL
Operates at the instance level (first layer of defense)
Operates at the subnet level (second layer of defense)
Supports allow rules only
Supports allow rules and deny rules
Is stateful: Return traffic is auwtomatically allowed, regardless of any rules
Is stateless: Return traffic must be explicitly allowed by rules
We evaluate all rules before deciding whether to allow traffic
We process rules in number order when deciding whether to allow traffic
Applies to an instance only if someone specifies the security group when launching the instance, or associates the security group with the instance later on
Automatically applies to all instances in the subnets it's associated with (backup layer of defense, so you don't have to rely on someone specifying the security group)


非常清楚的示意圖:


可以開一個IAM Role用來管理 VPC, 根據Policy最小可以鎖到Resource level,
幾乎VPC相關的所有action都能夠鎖, 例如只允許開機器在某一個subnet.

切割出一個dev/test subnet並且提供dev account和 test account不同的權限.

AWS IAM Role

IAM是root account可以管理User和Group和權限關係, 接近原來Linux的管理概念.

Role是在AWS背端整合好的特殊User, 一樣可設定權限, 
access key 和 secret key不需要被揭露, 
開新的instance可以用IAM Role來啟動, 就不需要設定access key.
提高自動化以及降低了機密外洩的風險.

IAM roles. A role is an entity that has its own set of permissions, but that isn't a user or group. Roles also don't have their own permanent set of credentials the way IAM users do.
IAM Role讓AWS在背端替你餵Access key給 instances.

IAM Best practice:

影片:

Docker 123

介紹如何在Mac上安裝與使用Docker, 以及一些基本觀念。