Cody Blog

Vagrant 筆記

安裝 Vagrant (以 VritualBox 為例)

  1. VirtualBox
  2. VirtualBox Extension Pack (Oracle_VM_VirtualBox_Extension_Pack-4.3.26-98988.vbox-extpack)
  3. Vagrant (vagrant_1.7.2.dmg)

新增一個 VM

官方 Box 列表要知道有那些 Vagrant box 的話,可以到此瀏覽

新增一個 VM

$ mkdir <project_name>
$ cd <project_name>
$ vagrant init [box-name]

例子: $ vagrant init ubuntu/vivid64

Vagrant Box

列出已下載的 vagrant box list:

$ vagrant box list

新增 box 到 Vagrant,以 ubuntu 15.04 為例:

$ vagrant box add ubuntu/vivid64

手機修改 Vagrantfile 指定使用那一個 VM Box

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/vivid64"
end

啟動

啟動指定名稱

$ vagrant up <NAME>

也可以全部啟動:

$ vagrant up

登入

$ vagrant ssh

若有多個 VM,就要指定名稱

$ vagrant ssh <NAME>

Guest …

Java verify Error(unchecked exception)

前幾天,在 Google Play Console 收到了二個從使用者回報的 Crash Log,分別是從 Android 5.1 和 4.4 版本所回報的,Android 5.1 的 Traceback:

...
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/adobe/xmp/XMPMetaFactory;
...

Android 4.4 的 Traceback

...
Caused by: java.lang.VerifyError: com/drew/metadata/xmp/XmpReader 
...

我花了一些時間把 tracecode 希望可以找到是那邊發生的,但是一直找不到。最後發現,這邊丟出來的 Error 是 unchecked exceptions 也就是預期是程式有 Bug,所以不會由 Try-catch 來 handle 這種 error。這種 Error 需要丟出來讓外界來把這個 bug 修掉。這個問題是因為我們有用到一個 thirdparty 的 Library 叫 metadata-extractor 其中包含了兩個 jar 檔: metadata-extractor-x.x.x.jar 和 xmpcore-x.x.x.jar。我們因故漏放了xmpcore-x.x.x.jar,導致在處理 xmp 相關的圖檔出現這個錯誤。最後緊急把xmpcore-x.x …

AWS IAM 修改使用者帳號密碼

在 User Group 加上以下的 Inline Policy :

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": [
        "iam:ChangePassword",
        "iam:GetAccountPasswordPolicy"
        ],
        "Resource": "*"
    }
}

inline policy

Reference: http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_passwords_enable-user-change.html

實現免密碼 ssh 登入遠端主機

建立 RSA 的 Key

如果之前沒有建立過 RSA 的 key,就可以先建一把:

$ ssh-keygen

過程直接一直按 enter 即可

Copy ssh public to remote

RSA 由一組 public key 跟 private 組成,為了要能實現免密碼登入 remote machine 必須安裝 public key (id_rsa.pub) 到 remote machine:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub cody@172.24.22.63

執行免密碼登入

$ ssh cody@172.24.22.63

Note: 當發生 /usr/bin/ssh-copy-id: ERROR: No identities found 的錯誤時,記得加上 -i 參數指定 public key 的位置,例如:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub mitra@172.24.22.63

Reference:

怦然心動的人生整理魔法 2

book-cover

先做好整理的基本功

以「能否讓自己心動」為前題,把讓自己不心動的東西丟掉。這也是本書第一集的重點。要先做好這一步,後續的整理才有意義,成功率也可以大幅增加。

區分整理

  • 不要把整理跟打掃混為一談,整理是面對物品,而打掃則是面對污垢。
  • 整理可以長久做一次,並減少打掃的困難度。
  • 而整理收納就是要決定物品的家。

私人能量景點

  • 擁有自己的私人空間做,放置讓自己心動的小物做為能量景點

收納技巧

  • 收納四原則: 折疊、直立、集中、隔成四方形
  • 直立的目的是為了可以看清楚每一件物品的位置

整理的順序

  1. 衣服
  2. 書籍
  3. 文件
  4. 小東西
  5. 紀念品

廚房收納

  • 只要做飯的人認為家裡的廚房是一個可以開心做菜的空間,就是最好的狀態
  • 廚房收納要以容易清理為前提而不是容易拿取。

製作一本回憶相簿

  • 對面大量的數位照片,挑出自己心動的照片會比刪掉拍不好的照片來得有效率的多

把靜態網站架設在 Amazon S3 上

以下是把 S3 的 Bucket 設定成 Static Website 的關鍵步驟:

  1. 在 Bucket 設定中,把 "Enable website hosting" 功能啟動

    enable static web

  2. Edit Bucket Policy Editor

    permission

    img

    輸入以下內容

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "PublicReadGetObject",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::<YOUR_BUCKET_NAME>/*"
            }
        ]
    }
    

    最後即可在 Endpoint 看到該 bucket 所對應的網址

    endpint

2014 日本東京馬拉松

至今在台灣參加了十幾場的路跑賽事。但是讓自己衝擊最深刻的還是今年二月到日本參加的東京馬拉松,參加馬拉松的心態其實也不是想跟誰拼個輸贏,大多是想感受現場的氣氛。而在東京街頭,你會很懷疑是從那邊冒出那麼多的民眾。全線42公里,真的不跨張,全線都站滿了應援團的民眾,就算只是剛從起點出發,都會有種似乎快到終點,接受英雄式的歡呼的感覺。所以即使是只有6度左右的寒冷天氣,還是讓人一開始起跑就熱血沸騰!

起跑

沿線民眾

沿線民眾2

東京鐵塔

總結整個東京馬的三大重點就是: Cosplay,補給,日本人對於賽事的態度

Cosplay

東京馬的一大亮點就是超超超多有趣的Cosplay。日本真的是Cosplay大國,除了跑者會打扮成各種人物之外,路邊的應援團也有很多人都精心打扮。即使是穿著簡單的蕃茄,也都會受到民眾熱情的加油 「Tomedo 頑張って」。發現日本正在流行一款吉祥物船梨精(ふなっしー),是個讓很多小朋友政太,蘿莉為之瘋狂的水果。Cosplay台灣人也沒有缺席,三太子也一整個超吸晴的。熱情的民眾,讓人敞開心胸,這輩子也從來沒跟那麼多人自拍過,整個玩開了。

三太子

ふなっしー

茄子

Banana

Sumo

水手服

小偷

老外

馬力歐

耶穌

米尼

LEGO

Mario Family

Rangers

飯團

皮卡丘

鬼

日本武士

吹Tuba大叔

ET

補給

東京馬的補給非常齊全,即使跑在後段班也完全不用擔心會有吃不到東西的問題。

官方-紅豆麵包

官方-巧克力

香蕉

{% youtube MPaRrcQ3Ld4 %}

白酒

跑馬還有白酒可以喝 ~

熱咖啡

熱咖啡

蛋糕卷

Amino Value 在國內跑馬界評價很高的運動飲料,大家都叫他橘水。

草莓

民眾提供的橘粉

在比賽的中後段,沿路開始出現很多民眾提供冷凍、酸痛噴劑。讓我的關節肌肉舒緩很多

噴劑

母女

巧克力棒

態度

日本對於舉大型馬拉松賽事的態度真的很讓人佩服,東京馬的賽道就是在東京市區跑一條十字:

賽道

整個市區可以封道,也代表東京市民可以容忍交通的不便,沿路的各個補給站都配置了大量的志工:

水站

終點寄物

地鐵配置了大量的廣告宣傳,讓民眾知道這個活動,以及可能造成的交通不便

地鐵廣告

地鐵廣告2

最後進入終點之後,工作人員親手披上毛巾跟獎牌:

終點

獎牌

在前一天的 Expo,大會有提供很有用的小冊子,可以讓親友團知道如果預計幾小時完賽的話,幾公里會在那個地鐵站出現,要在那個地鐵站等侯

手冊

後記

最後195公尺,果真是最慢長的,因為跟本捨不得進入終點阿

最後195公尺

捨不得進終點

Alvin 跟推抗的T社同事合照

如同跑馬界常流傳的一句話,「跑馬拉松沒有奇蹟,只有累積。」東京馬是我第二個全馬,成績為5小時56分,速度大致上用7分半速來跑,我每個水站/運動飲料站都會停下來,看到有趣的補給也會停下來吃吃喝喝,跟民眾擊掌等等。

距離     大會時間   晶片時間   分段時間  日本時間
5km     00:52:10 (0:36:11)  0:36:11 10:02:10 …

使用 south 來做 Django database migration

一般在 Django 底下更動 model 的時侯,必須使用 syncdb 這個指令,把修改的 model 同步到 database 之中,但是有個限制,就是只有新的 model 才會被更新,已經存在的 model 就不會更動,此時就需要south的幫忙。在 django 1.7 之後,這個 library 正式被整進到 django 之中。不過目前我手頭上的專案還是以 1.6 為主,所以還是要筆記一下。

初始化 south

安裝完 south 之後,第一次先執行 syncdb 把 south 相關的south_migrationhistory 新增到資料庫中。

$ ./manage.py syncdb

開始 migration

首先要介紹的是 schemamigration <APP_NAME> --initial,這個指令會在 app 資料夾下面產生一個 migrations 資料夾。如果是第一次執行的話,裡面的檔名會是 0001_initial.py 開頭,裡面會記錄如何從無到有,把資料表建立起來。

def forwards(self, orm):
    # Adding model 'UserModel'
    db.create_table(u'dusers_dmodel', (
        (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),

此時可以執行 syncdb 做一下確認

$ python manage.py syncdb …

使用 Pyenv 管理多個 Python 版本

pyenv 是一個 Python 版本管理器,也可以安裝 pyenv-virtualenv 達來支援 virtualenv 的功能。

安裝 pyenv 和 pyenv-virtualenv

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ sudo pip install virtualenv

In Ubuntu:

$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm

Or, 使用yyuu/pyenv-installer

把下列加到 ~/.bashrc

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

安裝其它版本的 Python

查看可供安裝的 python 版本

$ pyenv install -l
...
3.4.0
3.4.1
3.4-dev
...

如果想要裝 3.4.1 的話,就使用pyenv install

$ pyenv install 3.4.1 …

Install Juniper on Ubuntu 14.04

On Ubuntu 14.04, install Juniper VPN

$ update-alternatives --display java

Requirement

64 bit Mozilla Firefox browser is installed

First, install the 64bit jre/jdk and icedtea

$ sudo apt-get install openjdk-7-jre icedtea-7-plugin

Second, install the 32bit jre

$ sudo apt-get install openjdk-7-jre:i386

link update-alternatives to /usr/sbin/

juniper use it in that folder.

$ sudo ln -s /usr/bin/update-alternatives /usr/sbin/