2011年2月10日 星期四

戒了 iPhone、iPod touch 和 iPad 產品

iPhone、iPad 甚至 iPod Touch 4,是這一年來大家的寵兒,最近差不多戒了。因為工作關係有接觸它們的機會,從一開始總會帶著,一個月後 iPad 開始被我關在櫃子裡,因為不想一直帶著這麼大台的東西,並且工作又遲遲沒有正式開始。整體上我喜歡 iPhone > iPod touch > iPad ,但工作上會反過來。


至於戒掉的主因很簡單,生活沒了它們也不會怎樣。像 App Store 有很酷炫的遊戲,但 PC 也有啊,另外也有一堆吸引人的照片軟體,但真正有價值的卻是那當下拍下照片的點滴,手裡拿著多有價值的程式,卻沒有回憶,這不是空虛可道盡的 XD 所以,開始放下這些設備,回歸樸實吧!最近還沒戒掉的,大概還是會去下載限時免費的程式或遊戲 XD


整體上手持設備最方便的地方是收信、看看即時社群訊息,偶爾出遊時使用 Map 服務,但大多都被前兩者"綁"住了 :P 就好像 SA 的壞習慣,永遠要把信箱清空!


自從享受過一星期不接觸 3C 的生活後,真正感受到資訊解放的樂趣啊!要好好規畫生活囉,用足跡代替打字的樂趣吧!!


2011年2月8日 星期二

驗證 GPX 格式

GPX 全名為 GPS eXchange Format。簡單來說是儲存 GPS 座標的一種標準格式,細節可以查看 wikipedia gpx


目前格式有 1.1 和 1.0,不過上次開會好像有聽到 2.0 ?! 總之,先用看得到的標準吧,官方網站:http://www.topografix.com/,上頭有一些範例:



而 GPX Schema:



驗證方式:



2011年2月7日 星期一

追求什麼?

sunny


年假去一趟國外,讓我回想起國高中的年代。記得那時沒什麼經濟或升學壓力,成天泡在 BBS 上頭,聽著深夜廣播、看些網路文學,也嘗試發表己見來獲得回應,那時還滿常跟好友閒聊人性層面得議題,回想起來也滿好玩的。只是升了大學,有了經濟壓力,我反而不再像過去那般灑脫,要擔心吃一頓飯花多少錢,有多少功課要做,斤斤計較,久而久之,不再思考一些未來規畫,倒是喜歡上走一步算一步的生活,這種體驗就像那字句:「見山是山,見水是水;見山不是山,見水不是水;見山仍是山,見水仍是水。」我也喜歡自然定律,動態平衡,最低能量、最大亂度。有時會很在意,抑或思索極深,但走到最後反而見山是山,也稱得上物極必反吧?


這次在國外得以放空,想了很多事,例如工作部分,看到傳統業以管人為主的生活,雖然薪資稱不上科技業,但裡頭用到得智慧絕不簡單於0與1得世界,並且沒有正解!我很佩服他們忠於公司的精神,碰到困難會努力克服,不像科技業三兩句就容易抱怨福利,哈,這種影響大概是資訊的互通有無,難怪各個公司都會把薪資納為保密項目,因為知道得越多,那心裡不平衡得越多。記得我碩班的時候,看到從事科技業的學長在一間公司待不久時,有感這不是代表不忠嗎?現在比較了解,那也很有可能是公司對你不義啊!隨著資訊擴散,越來越能了解跳槽的意義。只是我看不慣一些人總酸別人的薪資,要嘛說賣生命,不然又說拿去買藥,接著自是清高的說自己是為興趣工作,我卻也覺得賺錢也算是一種興趣啊,你為興趣拋熱血時能得到讚賞,結果為錢時卻只能被酸民酸幾句,這種反應何必呢,唔,不小心扯遠了 XD


出國晃了一下,其實是讓自己脫離習慣的生活圈,人是習慣性動物,在國外不帶電腦類 3C 產品,頂多數位相機,完全就不會想程式該怎樣寫,這樣的感覺很讚,可以完全得到放鬆,這大概是旅行的意義吧?我一直認為在台灣旅遊也有同樣的效果,但到國外的好處是透過不同的生活方式,比較有新鮮感,而台灣是熟悉的,感覺只要幾會兒就會被拉回工作事務,這也是為啥我下班不看公司信箱的選擇 :P 想要把上班跟下班切乾淨,至少現在的工作內容還可以這樣吧


今年年節讓我回想起很多事物,雖然經濟壓力仍讓我朝著錢的方向工作,但在適當的平衡點上,我也該思索倒底要追求什麼,寫程式不該只想著錢了,也不該一直想著錢寫程式。工作就歸工作,剩餘時間要做些有意義的事情,啊,還有一提的,出國後真的會覺得英文很重要,在工作上總覺得英文還不會有多重要,隨手有電腦有網路就能查到,但出去手無3C產品,連字典都沒得用且多為靠聽跟說,這時候就會覺得英文應該要學好,並且絕對不要為工作學英文,而是要為生活、為溝通學英文。回國後和大四學弟閒聊,發現過幾天他正要去柬埔寨!還是看著 Lonely Planet 的書籍!前陣子 iPhone App 上的 Lonely Planet 系列旅遊軟體有免費,我有下載一大堆,雖然只翻了莫斯科,但整個感覺很不錯。自助旅行的花費其實沒有想像中的貴,但要夠勇敢,最重要的是飲食跟自身安全。


每個人都有各自旅遊的目的,我想,我的應該是讓自己抽離現狀,回顧一下生活以及享受一下當地的歷史文物,至於 shopping ?大概離我還很遠吧,畢竟 3C 買多了,有種體悟,當下總會覺得買了某款 3C 產品生活會因此躍進,然而事實證明,生活還是依舊 XD 只是適時享受 3C 產品得心態還是該有的,只需用娛樂的心態犒賞自己就好。


越南胡志明市之旅

map-Ho Chi Minh City - Taipei
圖:Google Maps 上,台灣桃園機場與越南胡志明市新山機場的的相對位置,飛機不會直接開直線啦,飛程約兩小時五十分鐘,但如果要計算相關等待時間,大概從搭上飛機到達目的地,總共約 4 小時吧


第二次出國,這次的目的地是越南。在親自到訪越南前,我對越南的觀感只停留在越南新娘以及很多傳統業都選擇到那邊設廠這幾件事上,啊,還有大學時期玩過模擬器遊戲,越南大作戰/合金弹头,如此而已。



相隔十年,沒想到再次踏上桃園國際機場,目的地是越南,巧的是出國前幾天看了"初戀那件小事 Crazy little thing called love"這部泰國電影,開始讓我對東南亞有不一樣的想法。這部片的劇情可能受韓劇影響不少,有點老梗,但對於青少年情感描述得還算細膩,對兩小無猜的有興趣可以看看。另外一提,如同 YouTuBe 上頭的留言,男生一開口就成了悲劇 XD 我對東南亞的口音還是不太適應。啊,扯遠了。我只想單純想提提,其實東南亞也有不少正妹帥哥的,他們的生活型態跟台灣不會差太多。


回憶上一次搭飛機的點滴,跟學校開的團到美西玩,當時就算到了美西、玩了幾天,結果還有人眷戀著空姐 XD 這次搭機留意一下空姐,不曉得是不是年紀已過了?就覺得她們是飛機上的服務員,頂多肚子餓會期待她們送上午餐,如此而已。如果有人服務周到或笑容可掬,那大概會多留意一點。另外,記得十年前搭飛機時,感覺降落都不太會有感覺,但這次搭飛機時,除了回程最後降落很平穩外,去程有一點點不舒服,技術的好壞是感覺得出來,而同機的小孩也有在起降時哭泣的,還滿多是越南人回娘家。


在越南得這幾天裡,盡管路上得穿著會讓你感到回到台灣的八零年代,但細看安全帽或幾件帽T,其實就跟在台灣沒啥兩樣,都是相似的圖騰,所以一開始看到會百感交集,不少人會想要用落後兩字形容,細想又覺得他們食衣也不到缺乏那樣,大概用復古風來稱呼會比較恰當吧。另外,機車很多,如果要比喻的話,大概就像新竹光復路上的上下班時段,那機車永遠會塞滿小縫隙。有特色的是,在市區開車三分鐘內聽不到喇叭聲是不可能的。


map-Ho Chi Minh City - Phan Thiet


提提旅程,這次跟家人到越南聚聚,在搭車上花的時間不少,大概就類似從桃園機場回到新竹或苗栗,塞車的話,甚至是到台中的距離。首先是到親友的住處休息,第一晚大家一起煮晚餐,我大概只幫忙顧一下烤香腸這種小事,雖然東西不像常見年菜的大魚大肉,但在海外大家煮煮分享一些東西,吃飯聚聚,很讚。隔天到靠近南海的飯店住一晚,可以想成從越南胡志明市往海邊走去,但切確的位置我不太清楚,只知道從親友住處過去要花 2~3 小時。由於下午兩點才能 check in,時間所餘,先到去附近的渡假村(民宿?)吃個中餐,距離飯店車程約 10~15 分鐘。


00 01 02 03 04 05


從 Google Maps 上查看一些別人拍的照片,核對自己拍照的場景,座標大概是 (10.921705,108.111782) 附近吧!看到上圖,應該就比較能體會當下的感覺,有陽光、綿雲、海和沙灘。特別的,一條長長的海岸線,美麗的海灘啊,竟然是私人領域,也就是說靠海的民宿,他們各自切出自己的海灘,雖然對遊客來說沒有明確的界線,但還是可以看到距離民宿較遠的海灘比較多人,那個區塊就比較算是公共區域。在這些渡假村海灘上,看到的就是大批大批的外國人。享受著,差點就忘了要回飯店!在這邊看到的大多是銀髮族,但還是有二三十歲的年輕人在玩帆船、曬太陽、衝浪等。



檢視較大的地圖


這次住的飯店,前方就是全球第五百大的高爾夫球場 Ocean Dunes Golf Club。沒想到事隔多年,此次旅遊第一次跟外國人交談竟然是球童,被問了英文名字跟年紀。不過我跟高爾夫球沒啥緣份及興趣,上一次有印象的大概是書中巴菲特在講老虎伍茲精湛的球技吧!因此只是搭著順風車在球場晃晃。這飯店還滿不錯的,前方有高級高爾夫球場,後方有游泳池以及私人海灘,上頭標記是四星級飯店,殊不知台灣一堆五星級飯店該排到哪邊 XD 在飯店裡看到一些電視節目,才發現台灣的偶像劇也有在頻道上面,以及有人翻譯成越南話,但這真的只是翻譯,不是配音,完全由一個人詮釋所有角色,平淡地把各個演員說的話翻成越南話,對我而言也算是新奇啊。在飯店裡享受晚餐以及隔一天的早餐,這邊的花費不便宜,住的一間有兩單人床,一間約 80 美金,晚餐一人20美金,在飯店的大庭院舉行,有當地人得駐唱,而年節期間,隔天早餐也需額外付錢,一人需要 18 美金,當然,打高爾夫球也是額外的花費。與飯店相關的,吃早餐時,會要你報房號跟名字簽單,只是這次都讓親友招待,不太確定是先繳費還是退房時才結清。另外,外頭的街道上,花費並不會跟台灣差很多,一杯果汁飲料,換算起台幣也差不多要 30 ~ 40 元。



圖:Wikipedia 越南國旗


經過了渡假村洗禮,接下的行程比較偏向於文化部分,旅程的範圍也就在胡志明市了。在胡志明市的街道旁很容易看到兩種旗幟,一個國旗,另一個是黨旗。黨旗是由鐮刀跟榔頭構成的,共產主義。爾後則到南越之前的總統府附近閒晃,前南越總統府現在改成觀光地了,因為在 1975年,南越投降(解放?),南越北越已經統一,並都稱作越南。在前南越總統府裡,可以看到以前的文物及照片,例如地下室裡,排滿了越南的歷史照片,從法國人殖民政府到這幾年迎接外賓的照片等。後來在那邊碰到一位香港或大陸團,導遊很細膩地把每一張照片故事講了一遍,算是另類的撿到便宜吧。越南的文化滿豐富的,據親友的解說,其實就跟華人文化差不多,只是當年被法國佔領了,被創了其他文字,另外,也可能是容易損失自我意識,這大概是被殖民的後遺症吧。



圖:Wikipedia 紅教堂


除了前南越總統府外,附近還有百年郵局和紅教堂。另外,在胡志明市附近,有台灣投資開發地,接續著日韓和中國也依序到來,因此也有台灣、美國、日本、韓國學校等,醫療上也有法國醫院 FV Hospital 等,由於這邊是以各國開發經驗做為規畫,所以道路會比較大條,週遭的餐廳也會有美式風格的披薩店等,但另外一提的,倒是沒看到麥當勞。



檢視較大的地圖


最後,晚上在胡志明市美麗的燈景走走,瞧著這些美麗的燈景,期許著觀光業能夠讓越南更加的炫麗,也希望人民有朝一日能夠都有合適的工作機會。如果要到越南走走,以享受海灘、越南文化為主的行程也還不賴囉!


00 01 02 03 04 05 06 07


聊聊其他部分:



  1. 在越南是連不到 Facebook 的,為此我還特地找了台機器架了 Proxy Server,在這之前我測試了一下,利用 nslookup 查詢 www.facebook.com 是沒有回應的,所以也有人改設定 Google 提供的 DNS 8.8.8.8 因此就能上 facebook ,但我當下還是連不到,倒是架一下 proxy 就順利翻牆了 XD

  2. 台幣與越南幣值比大約 1:700,在渡假村或是胡志明市的餐館裡,容易看到一個冰品要 20,000 ~ 38,000 越盾,大概就就是台幣 30 ~ 55 元,渡假村那邊有的直接用美金,那邊可就不怎便宜,一個人在那邊吃個早中餐很容易就 5 ~ 8 美金了,至於為何總挑比較高級的地方吃喝,主要是因為太偏僻的商街,會擔心衛生問題,大部分台商也都不太敢亂吃,而生病醫療問題也會很棘手的

  3. 越南人的一個月工作收入,大概台幣 1000~3000 左右,而一台新的機車大概台幣 8000~9000 左右,以台灣目前超夯的月薪 17k ~22k 、機車 55k 來說,大概也是要花 3 個月的薪資,可以物質跟收入比,感受一下。錢幣照片可以到 Wikipedia 越南盾rasshia blog - 越南錢幣介紹(上) 查看

  4. 越南貧富差距很大,胡志明市到處有外國人,比台北更加國際化,算是說英文也通,可以在新穎的咖啡店裡看到穿著跟台灣差不多少的越南人,但是,路邊很容易看到穿著簡便的甚至要錢的,據親友閒聊,越南人有的之前戰爭時逃去國外,現在返國的就大部分比較有錢、視野也比較廣闊,也是看得到富家子弟的,然而,也有再遠一點,看到的卻是整家子住在河水旁的小茅屋裡

  5. 前南越是比較溫和的族群也可能因此拼不過兇悍的北越(誤),我比較想提的是關於旅遊安全的問題,據親友說,越南胡志明市這邊還算溫和,不太會有搶劫得事情,但還是多少留意點吧


2011年1月24日 星期一

Django 與 Ubuntu 10.04 server 使用筆記

記得 2009 年年底,我也曾接觸 Django 一陣子,但久而沒碰,等於砍掉重練。最近被派去管一台機器,順手筆記一下到底安裝了啥東西。大學時期,每個人都搶著管機器,想說要有個經驗,碩班後,大概越來不想管機器,而工作之後呢?管機器根本就是個吃力不討好的事,做得好沒人稱讚也不會列入考績,做差會被抱怨啊 XD 所以啊,工作後能不管機器還是不要管,甚至一些案子都忘了規劃管機器的人力費用,也有可能沒規畫架設機器的時間。說完題外話 XD 來回顧一下以前的筆記:



以前我比較熟 FreeBSD,現在?大概沒有一項熟,工作上大概都用 Ubuntu ,目前是用 Ubuntu 10.04 64-bit server 。


光碟安裝完系統後,系統更新:


$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
$ sudo vim /etc/apt/source
:%s/us.archive/tw.archive
$ sudo apt-get update


安裝 denyhosts ,可用來阻擋惡意 try 帳密的 IP


$ sudo apt-get install denyhosts
$ sudo touch /etc/hosts.deny
$ sudo touch /etc/hosts.allow
$ sudo /etc/init.d/denyhosts restart


也可以把自己常用的 IP 寫在 /etc/hosts.allow 以防止不小心擋掉自己


sshd: MyIP1, MyIP2, MyIP3


在新增網卡後的設定,此為 VirtualBox 上安裝 eth1 網卡的例子


查看網卡有沒安裝好


$ dmesg | grep eth


若看不到可以移掉下述檔案並重開機偵測


$ sudo mv /etc/udev/rules.d/70-persistent-et.rules /etc/udev/rules.d/70-persistent-et.rules.old 


若 ifconfig 看不到但 dmesg 可以查看到,那就要設定  /etc/network/interfaces ,此例為設定 DHCP 方式


$ sudo vim /etc/network/interfaces
auto eth1
iface eth1 inet dhcp


$ sudo /etc/init.d/networking restart


安裝 MySQL、Apache Web Server、PHP


$ sudo apt-get install mysql-server
$ sudo apt-get install apache2
$ sudo apt-get install php5


設定 Apache 相關


啟用 https 其及 ssl 模組


$ sudo a2enmod ssl
$ sudo a2ensite default-ssl


啟用某些設定檔,如 /etc/apache2/site-available/default_setting


$ sudo a2ensite default_setting


設定完重新啟動


$ sudo /etc/init.d/apache restart


安裝 X-Window,有些環境一開始只可以本機端登入,有些 Web service 測試就需要先安裝一下 X-Window 啦,不然只能用 telnet localhost port 跟 GET / 測試,還滿辛苦的,也可以安裝 lynx 這種工具來使用


$ sudo apt-get ubuntu-desktop


設定開機預設不要進 X-Window (目前還待測試,有點怪,機器跑起來還必須透過 ALT+ F1, ... 切換到其他的來使用)


$ vim /etc/init/gdm.conf 
stop on runlevel [0216]
$ sudo service gdm stop


簡易 MySQL 語法,建立帳號、設定資料庫權限


$ mysql -u root -p
mysql> CREATE DATABASES mydb;
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL ON mydb.* TO 'user'@'localhost';
mysql> FLUSH PRIVILEGES;


$ mysql -u user -p
mysql> USE mydb;
mysql> CREATE TABLE my_table ( int x , int y );
mysql> INSERT INTO my_table (x,y) values( 1, 2 );
mysql> DESC my_table;
mysql> SELECT * FROM my_table;
mysql> DELETE FROM my_table WHERE x=1;
mysql> DROP TABLE my_table;


設定 utf8 相關


$ vim /etc/mysql/my.cnf

[client]
default-character-set = utf8

[mysqld]
default-character-set=utf8
init_connect='SET NAMES utf8'


如果一開始不是 UTF-8 的話,又跑了服務一陣子,那大概就親自去改


$ mysql -u user -p 
mysql> status
--------------
mysql  Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (x86_64) using readline 6.1

Connection id:          252
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.1.41-3ubuntu12.9 (Ubuntu)
Protocol version:       10
Connection:             Localhost via UNIX socket
Client characterset:    utf8
Server characterset:    utf8
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 21 hours 38 min 58 sec


Threads: 3  Questions: 5376  Slow queries: 0  Opens: 267  Flush tables: 1  Open tables: 63  Queries per second avg: 0.68
--------------
mysql> ALTER DATABASE mydb CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> USE mydb;
mysql> SHOW CREATE TABLE my_table;
可查看最後的編碼是否為 DEFAULT CHARSET=utf8
mysql> ALTER TABLE my_table CHARACTER SET utf8 COLLATE utf8_general_ci ;


安裝 Django 相關


$ sudo apt-get install libapache2-mod-wsgi python-mysqldb python-setuptool python-django


建立一個 Project


$ cd ~/
$ django-admin startproject myproj
$ cd ~/myproj
$ django-admin startapp myapp



設定 myproj 的 settings.py


DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'mydb' # Or path to database file if using sqlite3.
DATABASE_USER = 'user' # Not used with sqlite3.
DATABASE_PASSWORD = 'password' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''  # Set to empty string for default. Not used with sqlite3.

TIME_ZONE = 'Etc/GMT-8'

INSTALLED_APPS = (
    'myproj.myapp',
)

SYS_TEMP_DIR = '/tmp'


設定 myproj 的 urls.py


from django.conf.urls.defaults import *

urlpatterns = patterns('',
    # Example:
    (r'^myapp', include('myproj.myapp.urls')),
)


設定 myapp 的 model.py


from django.db import models

import datetime

# Create your models here.
class MyTable(models.Model):
        mypath = models.CharField(max_length=255,primary_key=True)
        mydate = models.DateTimeField(default=datetime.date.today,auto_now_add = True)
        myscore = models.IntegerField()


設定 myapp 的 views.py


# -*- coding:utf-8 -*-
from django.shortcuts import render_to_response
from django.template import RequestContext
from django import http

from myproj.myapp.models import MyTable

import simplejson
import sys, os, os.path
from time import gmtime, strftime, localtime

from myproj.settings import SYS_TEMP_DIR

def MyTest(request):
        _result = {}

        _name = request.POST.get('name','anonymous') or request.GET.get('name','anonymous')

        #my_time = gmtime()
        my_time = localtime()
        my_date = strftime( "%Y-%m-%d" , my_time )

        save_dir = SYS_TEMP_DIR
        save_file = ''

        if save_dir is None:
                _result['status']='1'
                _result['message']='Internal Error'
                result=simplejson.dumps(_result)
                return http.HttpResponse(str(result))

        if request.FILES and request.FILES['my_file'] :
                upload_file = request.FILES['my_file']
                save_file = str( _name  ) + str( strftime( "_%y_%m_%d_%H_%M_%S" , my_date ) )
                save_path = os.path.join( save_dir , save_file )

                try:   
                        destination = open( save_path , 'wb+' )
                        for chunk in upload_file.chunks():
                                destination.write(chunk)
                        destination.close()
                except:
                      _result['status']='1'
                      _result['message']='Internal Error'
                      result=simplejson.dumps(_result)
                      return http.HttpResponse(str(result))
        else:  
                return render_to_response('my_upload.html' , { 'test':'hello world' } )

        try:   
                db_object = MyTable(mypath=save_file)
                db_object.mydate = my_time
                db_object.save()
        except:
                _result['status']='1'
                _result['message']='Internal Error'
                result=simplejson.dumps(_result)
                return http.HttpResponse(str(result))

        _result['status']='0'
        result=simplejson.dumps(_result)
        return http.HttpResponse(str(result))


設定 myapp 的 urls.py


from django.conf.urls.defaults import *
urlpatterns = patterns('',
        (r'^upload/', 'myproj.myapp.views.MyTest'),
)


建立 templates


$ cd ~/myproj/myapp
$ mkdir templates
$ vim my_upload.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
        <head>
                <meta http-equiv="content-type" content="text/html; charset=utf-8" />
                <title>GPX Upload</title>
        </head>
        <body>
{% if test %}
                <h1>{{ test }}</h1>
{% end if %}
                <form action="." enctype="multipart/form-data" method="post">
                        <input type="file" name="my_file" />
                        <button type="submit">Upload</button>
                </form>
        </body>
</html>



建立 myproj 之 myapp 相關的 db table


$ cd ~/myproj
$ python manage.py syncdb



測試,用瀏覽器連 http://MyIP:8000/myapp/upload/


$ cd ~/myproj
$ python manage.py runserver MyIP:8000



重置 myapp 的 db table


$ cd ~/myproj
$ python manage.py reset myapp


最後,也可以使用 apache 的 mod-wsgi 模組


$ cd ~/myproj
$ mkdir apache
$ vim django.wsgi

import os, sys
sys.path.append('/home/user/myproj')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproj.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()


設定 apache 檔


$ vim /etc/apache2/site-available/default

WSGIScriptAlias /
/home/user/myproj/apache/django.wsgi
# WSGIDaemonProcess demo_com user=www-data group=www-data processes=1 threads=10
# WSGIProcessGroup demo_com


$ sudo /etc/init.d/apache restart