2014年10月17日 星期五

Django 佈署在ubuntu上 (EC2)

這篇記錄使用apache server 和 mod_wsgi 將django部署在ubuntu ec2 instance上的過程.

基本上不是在ec2上機器也可以使用,不過這篇我是開一個新的ec2 instance邊做邊寫的,理論上照著步驟走可以順裡跑起來.

當然通常這種事情不會跟著理論走就是了^.<

ubuntu使用aws ec2提供的的ubuntu image


目標:


在乾淨的機器上快速架設django網站的環境.

儘量簡化過程建立最基本的環境.


前置準備:


  1. 弄出一個ubuntu ec2 instance (記得security group要開port給tcp, 這裡我開80)
  2. 一團djnago的code ( 要已經可用python manage.py runserver 跑debug)
  3. 把那團django的code丟到 ec2 上的/home/ubuntu  (或是另外開一個專屬django得user更好)

步驟:



一. ssh 連線到ec2上並且使用下列指令安裝套件們:


  1. sudo apt-get update           //怒更新一下apt-get
  2. sudo apt-get install python-pip python-dev build-essential   //怒裝一發python相關套件
  3. sudo pip install virtualenv   //這雖然非必要但是很好用 怒用一發

二.使用virtualenv並且安裝django跟其他python套件


  1. virtualenv  venv           //建立virtual environment
  2. . venv/bin/activate    //使用這個env
  3. pip install django   
  4. pip install $你需要的套件們
     截至此刻, 已經可以使用 

     python manage.py runserver 0.0.0.0:8080 


三. 安裝與設定apache


  1. sudo apt-get install apache2 apache2-mpm-prefork apache2-utils libexpat1 ssl-cert
  2. sudo apt-get install libapache2-mod-wsgi
  3. sudo adduser www-data ubuntu    #將apache所使用的www-data user加入ubuntu group(source code資料夾group為ubuntu的情況)

四.建立apache與django project 所使用的wsgi.py的連接


     1.在/etc/apache2/sites-available 下面建立一個新的設定檔, 注意新版apache在這邊            的設定檔案一定要是.conf 附檔名. 這先就先取 kerker.conf
         檔案內容如下:
   
     2. sudo a2ensite kerker.conf
          
     3.記得如果kerker.conf裡面使用的port是80的話要把用 a2dissite 把site-enable下其他port也是80的conf關掉不然會衝到, 如sudo a2dissite 000-default.conf



五. 大功告成打開瀏覽器連到這個ec2 instance的ip就可以看到網頁


















2014年4月3日 星期四

iOS: 製作 static library

把project包成static library有方便散播和隱藏source code等好處,

iOS系統現在有各種架構,包含device上的armv7, armv7s, arm64 和模擬器的x86,x86_64

直接建立library project所build出來的 .a檔案並不會包含所有架構的binary, 需要分別把各種架構的.a編出來以後用指令將它們包成一個fat library

以下為製作library的步驟:

1.建立一個project時選擇 Cocoa Touch Static Library

2. 編寫library

3. 在Build Phases中的 Copy Files 加入需要一同release的header檔案

如此在編譯的時候這些header檔案會被放入編譯出來資料夾下的include資料夾中

這些即為使用此library時所需include的header


4.在Build Setting -> Architectures -> Build Active Architecture Only 都設為NO


這一步很重要,如果不這樣設定編譯出來的 .a檔案只會有當下選擇的target




5.分別選擇device 跟simulator 為target各build一次 (按下run button也可,因為是library project所以只會build不會run)

這樣會分別編譯出device 跟simulator的.a檔案

6.對Products資料夾下的.a檔案按右鍵選擇show in finder,

在finder中往上找幾層會發現有兩個資料夾 Debug-iphoneos跟 Debug-iphonesimulator

兩個資料夾下都各有一個.a檔案


7. 使用以下指令將兩個.a 變成一個大.a  (此工具不用安裝mac本來就有)



lipo -create "Debug-iphoneos/xxxxx.a" "Debug-iphonesimulator/xxxxx.a" -output "xxxxx.a"


8.大功告成,將這個產生的.a檔案與Debug-iphoneos/include 資料夾中的檔案加入欲使用此lib的project即可使用!







2014年3月29日 星期六

Andorid animation: animator set 製作button閃爍效果

以下實作一組重複發生的  淡出-移動-淡入 動畫,


套用在半透明gradient drawable上面可以製造出原件閃亮亮的效果

2013年12月4日 星期三

grep + less with color


grep -R --color=always "search string" * | less -R


若只有--color的話預設為--color=auto,pipe with less使用的話不會有顏色

less -R才會翻譯顏色escape charactor


2013年11月26日 星期二

linux 使用swap memory

最近嘗試在aws ec2 上deploy 一個ror的project

但因為使用的是free trail instace所以memory很小,deploy的時候會噴cannot allocate memory

要切一塊disk空間作為swap memory以解決這個問題


首先先確認是否已經存在swap memory:

sudo swapon -s


如果沒有會顯示如下
Filename    Type  Size Used Priority


在確認沒有swap memory後檢查我們是否有足夠的硬碟空間,我們要做一塊512mb的swap memory所以要至少這麼多

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  3.5G  4.1G  47% /
udev            288M   12K  288M   1% /dev
tmpfs           119M  176K  118M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            296M     0  296M   0% /run/shm


開始建立swap memory

sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k
sudo mkswap /swapfile
執行完會顯示
Setting up swapspace version 1, size = 262140 KiB
no label, UUID=xxxxxxxxxxxxxxxxxxxxxxxxxxx

接著使用這個空間
sudo swapon /swapfile

不過只是這樣重開機的話會失去效用,所以要把這塊swap memory加入fstab(file system table)中
sudo vim /etc/fstab

加入這行
 /swapfile       none    swap    sw      0       0 

記得把Swappiness設定為0, 這樣可以確保os只有在緊急的時候(例如不swap就噴out of memory)才做swap動作,增加效能

sudo su -
echo 0 > /proc/sys/vm/swappiness
exit



2013年11月11日 星期一

Android: 使用LightingColorFilter 來做使用image background的button的onClick特效

以往我在做用其他image為background的button的onClick特效時,都要準備好兩張image,

一張為按下去前,一張為按下去後,實為麻煩.

後來發現只要使用Android sdk內建的LightingColorFilter就可以用一張圖達到不錯的類似效果:


mTestBtn.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub if(event.getAction() ==MotionEvent.ACTION_DOWN) v.getBackground().setColorFilter(new LightingColorFilter(0xFF999999, 0xFF000000)); else if(event.getAction() ==MotionEvent.ACTION_UP) v.getBackground().clearColorFilter(); return false; } });

Android:setting text size in pixel


textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, valueInPixel);