Mac 開發環境設定

網路已經有很多大大寫很多的參考資料,這一篇純筆記,用過 Linux 再用 Mac 覺得
Linux 其實很不錯了,除了 User Interface 差一點,真的非常自由,自由無價

系統調教

mount with noatime on SSD.

http://blog.philippklaus.de/2011/04/ssd-optimizations-on-mac-os-x/


請參考這一個 gist 調整成您要的 ,如果不喜歡這麼麻煩,有一個軟體,有幫你做這些工作,Chameleon SSD optimizer

個人是比較偏好,自己調整

https://gist.github.com/pklaus/931579#file-movetemporaryfolderstoramdisk_macosx-sh

設定好後, /tmp 應該是 Ram Disk 了,可以加大一點,到 1 ~ 2 GB ,把 Chrome 的 Cache 資料夾連結到 tmp

下面小改的 RamFS,用 1G RAM 當 /tmp ,並且加 /tmp/Chrome 來放 Google Chrome 的 Cache
到自己的資料夾 ~/Library/Cache/Google ,把 Chrome 砍了,製作 soft link 到 /tmp/Chrome
另外,我用 pmset 把 hibernatemode 設成 0 後,也就是不再使用 suspend to disk 的方式休眠,我另外把 sleepimage 砍了,用指令另 touch 一個新的sleepimage
再 sudo chflags uchg sleepimage ,看起來會像是這樣,這樣你的 SSD 就可以多出和記憶體一樣的容量


terry@terrytekiMacBook-Air ~ $ ls -al /private/var/vm/sleepimage
-rw-r–r– 1 root wheel 0 9 9 22:19 /private/var/vm/sleepimage




#!/bin/sh
# Create a RAM disk with same perms as mountpoint

RAMDisk() {
mntpt=$1
rdsize=$(($210241024/512))
echo “Creating RamFS for $mntpt”
# Create the RAM disk.
dev=hdik -drivekey system-image=yes -nomount ram://$rdsize
# Successfull creation…
if [ $? -eq 0 ] ; then
# Create HFS on the RAM volume.
newfs_hfs $dev
# Store permissions from old mount point.
eval /usr/bin/stat -s $mntpt
# Mount the RAM disk to the target mount point.
mount -t hfs -o union -o nobrowse $dev $mntpt
# Restore permissions like they were on old volume.
chown $st_uid:$st_gid $mntpt
chmod $st_mode $mntpt
fi
}

# Test for arguments.
if [ -z $1 ]; then
echo “Usage: $0 [start|stop|restart] “
exit 1
fi

# Source the common setup functions for startup scripts
test -r /etc/rc.common || exit 1
. /etc/rc.common

StartService () {
ConsoleMessage “Starting RamFS disks…"
RAMDisk /private/tmp 1024
RAMDisk /var/run 64
mkdir -m 1777 /tmp/Chrome
#RAMDisk /var/db 1024
#mkdir -m 1777 /var/db/mds
}
StopService () {
ConsoleMessage “Stopping RamFS disks, nothing will be done here…"
# diskutil unmount /private/tmp /private/var/run
# diskutil unmount /private/var/run
}

RestartService () {
ConsoleMessage “Restarting RamFS disks, nothing will be done here…"
}



解決外接螢幕,字糊掉的問題

http://ireckon.net/2013/03/force-rgb-mode-in-mac-os-x-to-fix-the-picture-quality-of-an-external-monitor

Bash ~/.bash_profile 設定參考
http://natelandau.com/my-mac-osx-bash_profile/

開發所需軟體套件,先安裝 Xcode 後,及他的 Command Line tools 後,再裝 homebrew

工具軟體

http://www.freemacsoft.net/appcleaner/ Application 移除安裝的程式

http://osxfuse.github.io/ Mac Fuse file system ,在裝一下他們家的 sshfs ,可以直接 mount sftp,這一個軟體可以不裝,後面一樣可以用 homebrew 安裝 sshfs

https://github.com/rowanj/gitx git 的圖形化介面,都用 Mac 了,有時候可以離開一下 terminal 了

http://www.sourcetreeapp.com/ 這是另一個 git gui ,功能有點多,個人喜歡簡單的東西

https://github.com/eczarny/spectacle 分割視窗螢幕,看看 Linux 多幸福,預設就有了,不用另外裝

ThinkerTool 調整系統預設字體大小的問題,如果你跟我一樣龜毛,有堅持的字體及大小

JDK

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Golang , brew install go

MySQL, mongodb 請用 brew 安裝

PostgreSQL 建議直接用 http://postgresapp.com/ 是 heroku 包好的 app,plv8 已經包進去了,不用再自己編譯,算是懶人法

ImageMagick 還是建議用 homebrew 安裝

brew install imagemagick

http://cactuslab.com/imagemagick/

另外像是 pdftotext 的小工具,可以安裝 poppler,這一些工具,都和 Linux 上面一樣

brew install poppler

VIM 環境

也是用 homebrew 安裝,可以先 brew info vim 一下,看一下可以下的 options,系統預設的 vim 不是很好

https://github.com/spf13/spf13-vim

iTerm , open source 在 Mac 上面的 terminal,使用起來,預設的熱鍵,及行為和 Linux 上面的比較接近,不錯用

http://www.iterm2.com/#/section/home


其他大多的開發套件用 homebrew 來安裝,python , mysql, mongodb, node.js , memcached , redis 等等

https://github.com/mxcl/homebrew

舉例,安裝完,homebrew 後,可以下指令,看看 node.js 有哪些版可以安裝,先 git checkout 後再安裝


terry@terrytekiMacBook-Air ~ $ brew versions node
0.10.17 git checkout d996e02 /usr/local/Library/Formula/node.rb
0.10.16 git checkout 1782834 /usr/local/Library/Formula/node.rb
0.10.15 git checkout 89e0a43 /usr/local/Library/Formula/node.rb





git checkout d996e02 /usr/local/Library/Formula/node.rb




brew install node


PS: 看起來,返樸歸真,只要有 Terminal 就可以了,感覺我不是在用 Mac,只是把 Mac 當 Linux 用,下指令用 brew 安裝套件的時候,有點回到許久前使用 FreeBSD 的年代,到 ports套件庫下面,打 make install 的感覺,只是現在電腦和網路都快了不少,這時候,還是覺得 Debian 的套件管理,強到一個不像話

Macbook Air 試用心得

衝著,Macbook Air 2013 版本不外接加電源,有長使用時間的誘惑下,我這一個老派的 Linux

使用者,也乖乖的把現金掏出來,搬一台回家

說真的沒有用過 Mac ,只有聽說過他底層是用 BSD 打造的,應該八九不離十,用了兩天,說一點點心得

優點

1. 漂亮,不管是外觀,或是使用介面

2. 作工精細,電源線設計,孔位工差,螢幕開合機構,軟體整合,系統穩定性,其他 PC 的 ultrabook 難與其比

3. 不外接電源,使用時間很長

4. 一版一版進步,不太會像是在 pc 廠商上面看到的,一版一版 cost down.


說完好的換說缺點

1. usb 接頭少,要帶 hub

2. 沒有 RJ45,人多的時候,wifi 很鳥的,尤其傳大檔時

3. 螢幕要外接線,而且支援不好

3. 對應其他外廠週邊,驅動程式支援不好,這一點,我好好誇一下 Linux 了,driver 支援包羅萬象,我的外接螢幕設定,在 Linux 上面簡單的輕鬆稿定,
Mac 上沒辦法,接轉接線,正確解析度,還出不來,換了條線,解析度還不一樣,連螢幕連結線也要挑

4. 軟體套件套件更新,這一點 Debian Linux 無敵,不管你要由 source 或是 binary 安裝,Debian 大贏

5. 開發環境建制,和 Linux 比較,因為沒有好的套件管理系統,所以有點耗時,homebrew 和 Debian 的套件管理比起來,還是蠻弱的

6.

Mac 不能調整預設系統字體大小,外接顯示器,判斷成電視,解析度正確,字體模糊 ,外接螢幕時,內建的顯示器,要闔蓋才可以關掉,會不會管太多,想打開幫助散熱也不行,只用電池,外接螢幕,闔蓋他就休眠,把外接螢幕也關了,這會不會也算是自作聰明


http://ireckon.net/2013/03/force-rgb-mode-in-mac-os-x-to-fix-the-picture-quality-of-an-external-monitor


說真要是有 PC 作 Notebook 的廠商,願意用 Air 的作工,加上差不多的使用時間,可以換 2.5 寸 SSD,筆電的
記憶體,價錢比 Air 便宜一點,出貨量也有一定的大量,我一定立馬敗一台,可是卻真的沒有一家廠商願意爭氣一點

說說我的過去 notebook 歷史

第1台 acer 的好像叫 351吧,螢幕底座支架斷裂

第2 台 IBM X31,滿意使用,當時的首選

第3 台 lenovo thinkpad x60 ,還 OK ,溫度有點熱,散熱不太行,真的會熱當

第4 台 lenovo thinkpad x200 ,滿意使用

第5 台 lenovo thinkpad x220 ,因為是最後一代的鍵盤,就買了一台

後來 thinkpad 也不 thinkpad 了,現在 pc notebook 價格不比 Air 便宜,作工用料都比較差,

使用時間短,有點像是 Android 和 iPhone 一樣,每個人有每個人要的,手機我要可以外插 SD卡,換電池,大銀幕,所以高階手機我不用 HTC 的也不用 iPhone ,


notebook 我要鍵盤好打,效能像話,使用時間長,做工牢靠,能有多輕薄,就有多輕薄,可以換 2.5 SSD ,記憶體,全球出貨量,有個基數,

未來保修備料是玩真的,市場還真的居然找不到半台,可以選最接近的,好像還真的剩下不多


現在廠商腦袋,不知道在想什麼,我要便宜,穩定,好用,不是觸控螢幕,或是新的作業系統,如果是硬體廠,你就乖乖的把每一個小細節做好
小事都做不好,連我這麼外行的使用都看的到,有很多小細節,真想不懂,為什麼這些做了十幾二十年的廠商看不到

拜託來一台

鍵盤好打,可以用 2.5 寸硬碟或 SSD,記憶體可以擴充(這就是難的地方,又要擴充,又要輕薄,拜託 RD 時間花這裡),螢幕底座不會裂,
螢幕轉軸,開和鬆緊剛好,不會開久了就鬆,或是太緊,接孔尺寸精準,散熱模組,用點心,都給你作十幾年了說明書還是寫不能放腿上,
輕薄長效,好的外型設計,就繼續用,節省模具成本,不要為了改變而改變,想想能給什麼更好的使用體驗
而不是這一次,要 cost down 什麼



我的比較邏輯
1. 現在所有的 notebok 鍵盤都蠻鳥的,就算了

2. 輕薄的 ultrabook 和 Air 都是裝 SSD ,部份是 2.5 寸 SSD,部份是客制 SSD.

3. 使用時間,ultrabook 的使用時間,大多是 3 ~ 6 小時,這一點 Air 就大勝了

4. Linux 支援度, 自由無價

5. 出貨量要大,就可以保證未來在掏寶或是 EBay 上什麼都買的到


喜歡 Linux ,要兼顧,開發和美觀,作業系統也可以用 Mint

expressjs conditional CSRF

現在一般基本的網路服務,為了安全性,會加上 CSRF 的保護,如果

用 ajax 的方式傳資料,一般可以跳過,或是,加在 ajax 的 header 裏面


在 Django 下面的話,如果不檢查的話,會加個 decorator @csrf_exempt

在 expressjs 下面,加 ajax header 是可行的,不過懶一點,目前 API 路徑的
請求,先跳過,以下筆記



/**
* Module dependencies.
*/

var express = require(’express’)
, csrf = express.csrf()
, fs = require(‘fs’)
, mongoStore = require(‘connect-mongo’)(express)
, flash = require(‘connect-flash’)
, helpers = require(‘view-helpers’)
, mongoose = require(‘mongoose’)
, http = require(‘http’)
, path = require(‘path’)
, i18n = require(‘i18n’);


// I olny cut the block of csrf setup

// adds CSRF support
if (process.env.NODE_ENV !== ’test’) {

// conditinal CSRF

var conditionalCSRF = function(req, res, next){

// bypass urlpath start with api and moreurl

if (! /^/(api|moreurl)/.test(req.path)){
csrf(req, res, next);
} else {
next();
}
}
//app.use(express.csrf());
app.use(conditionalCSRF);
}

// This could be moved to view-helpers :-)
app.use(function(req, res, next){
res.locals.csrf_token = req.session._csrf
next()
})


參考
http://stackoverflow.com/questions/13516898/disable-csrf-validation-for-some-requests-on-express

http://stackoverflow.com/questions/11200068/how-to-implement-csrf-protection-in-ajax-calls-using-express-js-looking-for-com

Full Stack

部落格,以當筆記,日記的好處來說,他是比較老派的東西

資料永遠找的到,再來就是因為是舊東西,官方不會一直改介面,或是功能

算算先前自己做玩具時,都沒有好好紀錄,最後結束剩的就真的只有

回憶,這一次,先不管,是好,是壞,會成功,會失敗,都要來紀錄,這就是對軟體的愛吧

今天是颱風假,就說說這一次用的 Stack 好了

白天的工作職務,算是硬派的系統分析,及 Python 程式撰寫

身為熱血工程師 (雖然年紀不小了,不過好歹,血還是熱的),晚上寫的東西

想試試和白天不同的,所以 backend 就先這樣吧

Backend


nginx

node.js

Golang

mongodb


Front End

這一部份有些還沒有想好,大概就是會有


Web (html5,很想直接放生 IE 舊版的,不過會做嵌入的 js 或是 iframe ,不知道,這樣會不會讓人覺得太大牌)

Mobile Web ,基本上和 Web 一樣

Android App (就自己先刻)

iPhone App (沒有 Mac book Air 先放棄,其他先做 已敗家)

Real Time


就 nginx push stream module 先頂一下吧

collaboration


https://bitbucket.org/ 的免費方案加減用了

原型

要做新玩具,當然就是用新技術來做才叫潮

所以馬上就用最新版的 bootstrap 3 還有

最新的 angular.js 1.2.0rc1 AngularJS

不由的抱怨下,bootstrap 一下子把 icon 移出去,一下子又把 svg icon 移回來,還蠻機車的,最

白痴的就是, namespace 改來改去,但是我還是很不爭氣的繼續用了 ( 加入他們),前端的 icon fonts 部份,真的

推荐一下 http://fontello.com/ 真是有潔癖的前端工程師救星

可以把你需要的 svg icon 選起來,客製成自己專屬的 icon font,還蠻乾淨的

Angular.js 1.2.0rc1 部份,也是向更大一包邁進,和原本 1.1.5 系列不同的是,模組切更多,有用到

$routeProvider, $locationProvider 的把 angular-route.min.js 加入頁面,app 記得要 module inject

像是我開始做的 dashboard 原型這樣


var app = angular.module(‘homeApp’, [’ngRoute’]);


PS: 用新技術不是為了潮啦,現在誰不做 mobile app,server side 的部份搞 API 大融合,client 部份,就可以 Web App , Desktop App, App (iOS, Android) 3P,4P 皆宜

發想筆記

最近有不自量力的投了一份高薪 SA 的職缺,不過被打槍了,也看到了自己不足的地方,就算你可以很快的學會

機會還是會保留給已經會,且有經驗的人


我想該是為自己努力的時候了,尤其是身為一個軟體開發相關的人員,相信這還是最終要走的道路,你可以熱愛

創造有用,有趣的軟體,可是在台灣的職場上,要找尋,可以把軟體開發,當成終身樂趣的工作,少之又少

應該可以說沒有,沒有的東西,除了自己創造,應該沒有其他辦法

先前,自己有做過一些玩具,網路名片,房地產,股市網站,這一次,想當個 copy cat 好了,就來做類似

http://registrano.com/ 的東西,我想解決的問題點,除了報名,想要處理報到,還有排隊

的問題,相信一個報名的工具,應該很多地方都可以用,只用在活動報名有點可惜

目前,進行第一步,就先買個地點便宜,可以做商業登記的點,作為辦公室好了,既然是網路業,公司登記先省了

主機,網域,應該都是美國的,買好的辦公室,就先當永久住址就好,辦公室還是先租人 :-)

Install nginx-push-stream-module

要在 Debian 上面安裝,標準官方的 nginx 加上 https://github.com/wandenberg/nginx-push-stream-module 模組

做個筆記,這裡的 nginx 並不是 Debian 官方的 deb,是由 nginx 官方釋出的 deb

裝 官方 nginx ,加個 sources.list 先


# nginx
# wget http://nginx.org/keys/nginx_signing.key
# sudo apt-key add nginx_signing.key
#
deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx



#裝 build depend package

apt-get build-dep nginx

#下載 source
apt-get source nginx

#git clone nginx module ,照官方文件設定環境

git clone https://github.com/wandenberg/nginx-push-stream-module
NGINX_PUSH_STREAM_MODULE_PATH=$PWD/nginx-push-stream-module

# 這時候資料夾,應該有 nginx-1.4.2 的資料夾,看現在新的套件版本

cd nginx-1.4.2

# 編輯一下 vim debian/rules


override_dh_auto_build:
dh_auto_build
mv objs/nginx objs/nginx.debug
./configure <br />–prefix=/etc/nginx <br />–sbin-path=/usr/sbin/nginx <br />–conf-path=/etc/nginx/nginx.conf <br />–error-log-path=/var/log/nginx/error.log <br />–http-log-path=/var/log/nginx/access.log <br />–pid-path=/var/run/nginx.pid <br />–lock-path=/var/run/nginx.lock <br />–http-client-body-temp-path=/var/cache/nginx/client_temp <br />–http-proxy-temp-path=/var/cache/nginx/proxy_temp <br />–http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp <br />–http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp <br />–http-scgi-temp-path=/var/cache/nginx/scgi_temp <br />–user=nginx <br />–group=nginx <br />–with-http_ssl_module <br />–with-http_realip_module <br />–with-http_addition_module <br />–with-http_sub_module <br />–with-http_dav_module <br />–with-http_flv_module <br />–with-http_mp4_module <br />–with-http_gunzip_module <br />–with-http_gzip_static_module <br />–with-http_random_index_module <br />–with-http_secure_link_module <br />–with-http_stub_status_module <br />–with-mail <br />–with-mail_ssl_module <br />–with-file-aio <br />$(WITH_SPDY) <br />–with-cc-opt="$(CFLAGS)" <br />–with-ld-opt="$(LDFLAGS)" <br />–add-module=../nginx-push-stream-module \ # 就加這一行而已
–with-ipv6
dh_auto_build


#執行

dpkg-buildpackage -b

這樣就包好,可以安裝測試了,不想要更新的話,就把他版本 hold 住


最近試了, socket.iosockjs 還是都沒有讓人覺得很滿意

看看國外 disqus 推荐的 https://github.com/wandenberg/nginx-push-stream-module

還蠻簡單用的,而且複雜性低,不用多加掛一個 socket server ,就交給 nginx 負責 pub 及 sub 的部份,架構算乾淨,自己的下一個玩具,就用他了

spdy with nginx

這是一個加強版的協定,一開始由 Google 提出 https://zh.wikipedia.org/wiki/SPDY

用 Apache 的朋友可以參考 https://code.google.com/p/mod-spdy/

以下筆記,是以 Debian 用 nginx 官方的 deb 套件由為底的紀錄

nginx 官方的套件 http://wiki.nginx.org/Install

Debian 用 wheezy, source.list 可以加


deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx



再來就是您的 nginx site 的設定了,下面是要加的部份,
也只有 listen 443 ssl spdy 那一行


server {
listen 443 ssl spdy;
#listen 443;

server_name yourcoolhostname;



}


最後可以開 chrome 瀏覽器檢查連到網站的有沒有 SPDY 的連結
在瀏覽器的網址列打 chrome://net-internals/#spdy 就可以看到了

或是可以用 http://spdycheck.org/ 來檢查


目前 nginx 的 spdy 模組,只支援 spdy/2

支持颱風假百業皆休

支持颱風假應該百業皆休,應該除了警消,醫務人員,都要休吧

在媒體上,你永遠,指會看到,不休的時候,新聞報人民抱怨怎麼不休,休的時候,報百貨公司,電影院人滿為患

媒體也不會去檢討,為什麼百貨公司,或是服務業的從業人員不需休颱風假,上下班都不會危險,他們只是喜歡挑弄是非

是非愈多,才有新聞報,如果服務業也都要休息,自然就不會有這種新聞了

很悲哀的事實

退伍前一周,被送禁閉室,有點常識的也知道是要弄死你

尤其帶手機,這一種理由,更可笑,要弄死你,什麼理由都可以

現在是什麼世道,做軍人的,謀殺罪,只要記個過,記個申誡就好

這是謀殺無誤

要你死,就得死,這就是軍中黑的地方

http://disp.cc/m/tread.php?id=163-66Ah


以下省略 5000 字,因為不想說髒話

ps: 當義務役的慣例,就是快退伍了,就把沒休的假,休完,和長官感情不錯的,或是
有遇到好人長官(也是有好人的,只是比例不高),也會多給你公假,出去洽公,或是給你
一些時間,找工作

要在身體上折磨你,意志上,堅定你的訓練,在最後一周,已經沒有意義