2011年3月7日 星期一

[Python] 使用 Django 環境開發 commands/tools

在 Django framework 下開發許多功能,結果突然想要用到 tools 模式時,想到大部分都是在 python manager shell 下進行,一時之間沒想到好解法,例如想要定期跑某個程式時,只想到弄成 CGI 模式,用 wget 搭配 crontab 去啟動事件。


今天跑去問了前輩,前輩就跟我說有可以寫成 tools 的方式:Django | Writing custom django-admin commands | Django documentation,經測試也滿成功的。


筆記一下:


假設專案叫 myproj ,並且裡頭有個 myapp,目錄結構如下:


/path/myproj/myapp/
/path/myproj/settings.py
...


接著在 myapp 內建立 management/commands 結構:


$ mkdir -p /path/myproj/myapp/management/commands
$ touch /path/myproj/myapp/management/__init__.py
$ touch /path/myproj/myapp/management/commands/__init__.py
$ vim /path/myproj/myapp/management/commands/mycmd.py

from django.core.management.base import BaseCommand, CommandError
from myproj.myapp import views as v

class Command(BaseCommand):
args = '<poll_id poll_id ...>'
help = 'Closes the specified poll for voting'

def handle(self, *args, **options):
for poll_id in args:
if pool_id == 'test':
print 'test'


如此一來,就可以使用 tools 模式執行,而本身就只要去改上述 print 'test' 的部分,弄成想要跑的函數:


$ cd /path/myproj && python /path/myproj/manager.py mycmd test
test


還算滿簡單便利的,細節就請到官網查看囉。 


2011年3月5日 星期六

免費的虛擬機器服務 - Cloudshare Pro


Cloudshare 提供虛擬機器服務,申請免費帳號的過程需填寫手機號碼並做簡訊認證,不像其他家需要填寫到信用卡。這幾天試用了一下,免費帳號可以開啟 3 台虛擬機器,但不能調整機器內的硬體狀況,如記憶體、硬碟空間等,共有多種作業系統可挑選,如 Windows XP Pro(記憶體1GB, 硬碟12GB), Windows server 2003(記憶體1GB, 硬碟12GB)、Ubuntu 10.04 server(記憶體512MB, 硬碟16GB)、Ubuntu 10.04 desktop(記憶體1GB, 硬碟24GB) 等。


操作流成僅需在網站上點選幾步,就能自動啟動機器,接著透過瀏覽器與預設帳密進行 console 的瀏覽,也能從 [Edit Environment]->[Edit users & access] 新增或修改 console 登入的帳密,除此之外,也可以登入作業系統變更管理者的密碼,以便進行遠端連線。


整體上算是一個不錯的虛擬機器服務,目前我常用的方式:



  • 在 cloudshare 開一台 Ubuntu 10.04 server

  • 登入 Ubuntu 後稍作處理,記得要做系統更新

    • $ passwd

    • $ sudo apt-get update && sudo apt-get upgrade

    • $ sudo vim /etc/hosts.allow
      ALL: MyIP

    • $ sudo vim /etc/hosts.deny
      sshd: *

    • $ mkdir ~/.ssh



  • 在常用機器處理,如此以來提高便利行

    • $ ssh-keygen -t rsa -P ''

    • $ scp ~/.ssh/id_rsa.pub user@pub#-###.env.cloudshare.com:~/.ssh/authorized_keys

    • $ vim ~/.cshrc
      alias cloudshare        ssh user@pub#-###.env.cloudshare.com 




至於 cloudshare 提供的 External Address: pub#-###.env.cloudshare.com,就是用來遠端登入用的,可以透過 nslookup pub#-###.env.cloudshare.com 得知 public ip 囉!


目前我把它定位在個人的宅宅實驗平台,但對於一些機密類的帳戶或是敏感資料,暫時還會避開使用。現在我可以想到的是架 proxy 來翻牆 XDDD 這陣子太愛玩 proxy 囉!除此之外我還是比較常用 Virtualbox 啦,而 cloudshare 的最大缺點是...若一陣子沒在 cloudshare 網站上活動(console?!)就會被 suspend,這個訊息在網頁上也有訊息提示:


Environment will suspend after 30 minutes of inactivity


CloudShare provide its service for a fantastically low price because we suspend the environment when you are away. CloudShare will start counting away, or inactivity, time when you are not accessing the environment using our web pages. 


Sometimes, you need the environment to stay alive a little bit longer. To that effect, we have added, for ProPlus users, the ability to extend the environment inactivity timeout up to 60 minutes


至於機器從 suspend 起來後,會改變的有 External Address (pub#-###.env.cloudshare.com) 但 Internal IP (10.x.x.x) 則不會變,如果要架 Hadoop 或彼此會相連的應用,就還是盡量用 internal ip 囉。


iPhone 免費遊戲 - Baseball Superstar 2011 裝備攻略

iPhone Baseball '11 iPhone Baseball '11


這是一款 iPhone/iPod Touch 上頭的免費棒球遊戲,由於已經買到最好的裝備,有錢又不能買問號的裝備,就上網找了一下攻略找到這一篇:http://www.ptt.cc/bbs/iPhone/M.1297279972.A.983.html,只要花錢買完全部的裝備,就會有一項 ??? 可以買,買了能力就可以達到 999 囉。我主要是先玩打者,然後略有所成就去解 MISSION ,解完賺 G-POINT 又去買加能力的,就這樣很快就加到 800 囉,目前 MISSION 倒是卡在 11 關 - You have 3 chances at bat to hit an inside the park home run. 而打擊者的薪資,就是每次有超過目標時,就會去要求薪資,最高可以額外加 30% 囉


作者: j07242054 (ChuChu) 看板: iPhone
標題: Re: [iAPP] Baseball Superstar 2011!! 免費!
時間: Thu Feb 10 03:32:48 2011

...

投手帽子
Rabbit's Headband > 打贏 Rosie
Pirate's Cap > 買所有一般的頭盔
Deadly Bandana > 完成所有投手任務
Royal Crown > 解任務(Match play


投手手套
Sapphire Glove > 100 次三球三振
Pirate's Glove > 買所有一般手套
Deadly Glove > Match Play 裡面贏50次
Gold Glove > 解任務(Match Play)

投手Band
Sunglasses > 解任務(Match play)
Scout > 買所有的一般band
Deadeye > 打敗 Erocia
Opera Mask > 3 triple plays

投手鞋子
Rabbit Fur Footgear > 投手模式玩10個小時
Pirate's Footgear > 買所有一般的鞋子
Deadly Footgear > 拿到 99,999 G POINTS
Emperor's Footgear > 在打者模式拿到5次冠軍

------------------------------------------------------------------------------

打者頭盔
Biker's Skull > 打敗 Leoni
Spartan's Helmet > 買所有一般頭盔
Prime Helmet > 完成全部打者任務
Heaven's helm > 解任務(match play)

棒子
Brisk bat > 全壘打比賽裡面一場比賽超過7500ft
Gladius > 買所有一般棒子
Auto Bat > 在投手跟打者模式都贏過冠軍
Luminous bat > 解任務(Match play)

Band
Biker's band > 打敗 Medica
Spartan's band > 買所有一般band
Prime band > 賽季模式中100勝
Heaven's band > 3 back-to-back-to-back 全壘打

打者鞋子
Biker's boots > 打者模式玩10小時
Plate boots > 買所有一般鞋子
Transform boots > 寄 30000 G POINTS 給別的玩家
Icarus' shoes > 投手模式拿到5次冠軍

Leoni > 單場連16k三次(15 combo)
boomsta > 55次滿球數三振
Erocia > 3次完全比賽
Dragona > 是用解任務的(match play)

Joe > 55次盜壘
Rosie > 55 發陽春砲
Crizier > 3 次完全打擊
Tiger KO > 55支滿貫砲


最後,玩到 12 季就有點玩膩了,自行退休囉!以下資料留作回憶之用,主要是第五季之後比較有表現,開始每次都強硬要求加薪,大部分都有給 30%,表現沒有很好也有加 20% 囉


01 02 03 04 05 06 07 08


2011年3月4日 星期五

[Python] 判斷 function 是否為 thread-safe & 查看 bytecode

許青蛙問了我一個問題:「Python 的 list 是不是 thread-safe?」當下我先回顧一下 wiki 上的說法,因為很多東西我都忘了專業名詞 XD 我腦中頂多可以拼湊出 race condition,以及我總覺得 thread-safe 是要跟用法有關 XDD 看來我學習還真的很迷糊,還隨便找了個 deque 呼嚨一下 XDD 最後還是請教了隔壁 team 的 Python 高手。


得知重要訊息:


Python 底部用 bytecode 在執行的,因此可以去確認某個指令是不是一個 bytecode 指令。


而原先許青蛙的問題是在於 list extend 的用法,打算開多個 thread 去新增資料到一個 list 中,接著高手馬上就 demo 給我看:


>>> import dis
>>> dis.dis( "a=[] ; a.extend([])")
          0 STORE_GLOBAL    23357 (23357)
          3 FOR_ITER        15136 (to 15142)
          6 SLICE+2        
          7 STORE_GLOBAL    25902 (25902)
         10 SETUP_LOOP      25972 (to 25985)
         13 JUMP_FORWARD    10340 (to 10356)
         16 DELETE_NAME     10589 (10589)
>>> 


由此可得知 extend 被展開成數行 bytecode ,所以有 race condition 的機會。最後高手也點了我一下,在使用 threading 時可以多作一點設定,細節就請我去看這篇: Understanding Threading in Python


2011年3月3日 星期四

[電影] Every Child is Special 心中的小星星


上週末才看完 3 idiots,而我同事幾天前看完三個傻瓜後,就在網路上訂購了該導演前一部戲 - 心中的小星星。更多的電影資訊:Yahoo! 電影 - 心中的小星星。感謝同事的分享,這部片主要在講述著學生學習上碰到問題的故事,一樣令人感動。


原先看了前半段,因為看過 3 idiots 而感到拍攝的模是很相像冗長而感到有些小小的厭倦,但是到了後半段後,才讓我想起應該要多看看這部電影想表達的情感在哪邊,漸漸地越來越融入劇情。看了這部片也讓我回想起以前的事情,記得國中進入了一所競爭性高的學校,每次段考都可以看到大家的全校排名,當時全校約 650 人,我的成績約 450 左右,邁入國二後,因為物裡的上手,讓我的成績進到 150 名左右,也因為單科成績的進步才讓我想把其他科也學好,在這之前我大概只想回家玩 PC 或 TV Game 罷了。回想起來,自己的學習幸運很多,因為找到一個可以展現的科目,所以帶動了自己的學習。而這部電影也有從類似的角度著手,讓學生先享受單一科目的成功,進而激勵自己學習其他項目,不見得每科都要學好,但一定不要隨意放棄。


這部是印度電影,其中提到了許多學習上的競爭與目標,說穿了跟台灣很相近,印度人口跟密度都不低的!回想起過去唸書的經驗,國高中的學校大部分都只在意升學率,就連與學生最近的輔導室也是。我那年是新制度的聯考,我與一位同學分數很近,我因為新制度而可以進國立大學,另一位則是私立大學,當時一直被輔導老師說嘴,或許他的本意不是,但我還滿反感啦,另外,學測成績出爐後,一股腦兒地叫學生們趕緊申請或甄試上學校,這也覺得很不妥當,感覺都只是在拼升學率?殊不知甄試或申請上的人,沒有轉系的權利,又誰知道哪個科系是自己所喜歡的呢?就連畢業後幾年,回去跟導師閒聊,發現他們還是一直認為有竹科新貴,很容易發達等等的想法。也不能說他們完全錯誤,畢竟這就是生活經驗與價值觀吧。


呼,教育啊,真的很重要的,有時覺得照著前人腳步不見的是對的卻又別無選擇,但仔細經歷過後,就會想起那哲理:「見山是山,見水是水;見山不是山,見水不是水;見山仍是山,見水仍是水。」。有時也不必過於追求,生命自會找到出路,此刻的不完美也會增加這社會的亂度,成就社會容錯的能力呢,不也是種完美嗎!


希望大家都能碰到有緣人或是當別人的有緣人,無論多小的提攜也好,讓生活更加積極有活力!