2014-07-31

centos6 下如何安裝 pyenv?

在 centos6 下要如何安裝 pyenv?
 
首先安裝程式開發需要用到的套件
#yum install -y gcc gcc-c++ make git patch openssl-devel zlib-devel readline-devel sqlite-devel bzip2-devel

2014-07-28

cx_Freeze 安裝到 python 3.1 以後版本遇到的問題解決辦法(無廢話)

如果你安裝 cx_Freeze 遇到類似以下訊息



In file included from source/bases/Console.c:41:0:

source/bases/Common.c: In function ‘ExecuteScript’:

source/bases/Common.c:307:5: warning: passing argument 1 of ‘PyEval_EvalCode’ from incompatible pointer type [enabled by default]

2014-07-21

svn 指令小記


* To check different file names between two revisions
$svn diff -r revision1:revision2 --summarize
note that parameter '--summarize' force svn lists file names only.

ex,
user@ub1204:~/MyAnt_422$ svn diff -r 4355:4211 --summarize
M       mkandroid.sh
M       kernel_imx/build.sh
M       kernel_imx/arch/arm/mach-mx6/board-mx6q_myant.c
M       kernel_imx/drivers/video/mxc/ldb.c
M       device/fsl/sabresd_6dq/BoardConfig.mk
M       configuration

Monitor resolution definitions


VESA(視訊電子標準協會)訂定的電腦解析度規格標準如下。

QVGA    320(橫) x 240(縱) 像素
VGA        640(橫) x 480(縱) 像素
SVGA    800(橫) x 600(縱) 像素
XGA        1,024(橫) x 768(縱) 像素
SXGA    1,280(橫) x 1,024(縱) 像素
UXGA    1,600(橫) x 1,200(縱) 像素

2014-07-20

「作為一粒沙華麗的存在」


你從不會去關心身邊任何的一粒沙
因為對你來說,它們是多麼卑微的存在
但是,
對於擁有兩千億顆恆星的銀河系來說,我們甚至連銀河塵埃都算不上
更別說我們活在三千億個星系的浩瀚宇宙裡,銀河系連宇宙光塵都不是

即使你是如此的卑微
你還是要被這世界的制度所摧殘
遵守大家認為你該做的、該學的、該說的
一旦不如眾意,就好像世界即將崩潰一樣的嚴重
我們可以沒有華麗的外表,但是我們卻要有堅強的內心
即使事事不見得如意

但在有限的時間裡,有限的空間裡
即使像沙粒一樣渺小...
我們還是可以選擇......「華麗的存在」

2014-07-18

git 指令小記

* git add
# git add . # add to index only files created or modified and not those deleted
# git add -u # add to index only files modified or deleted and not those created
# git add -A # do both operation at once, add to index all files

* undo delete
1. 用 git reflog 找出 sha1 碼
2. 使用指令
git branch branchName <SHA1>

* 重新命名 local branch
git branch  -m  <原來名>    <新名>

* 刪除遠端 branch
git push remote :遠端branch名

* 在 git repository 中切換 main branch
git symbolic-ref HEAD refs/heads/BRANCH_NAME
註: 等同 local 的 git checkout BRANCH_NAME

* 如果早已把 file 加入 track, 但現在不想讓改變一直被 track, 例如 config file. 則可以下以下命令
git update-index --assume-unchanged FILENAME
未來, 又想它被 track 可以用以下命令回復

git update-index --no-assume-unchanged FILENAME

* git push 後造成 objects 目錄下的權限問題
當有人上傳新版code, 則會在objects下產生其自有的目錄, 權限是user:group, 其中 group 只有 read 權限,
故必需要在建立 git repository 時先就要設 group share 或已經建立後, 可再下命令改 git config
a. 建立時
# git init --bare --shared=group my-repo.git
 

b. 建立後修補方法
$ git config core.sharedRepository group

 

c.建立步驟參考
# mkdir -p /usr/local/share/git/stuff.git
# cd /usr/local/share/git/stuff.git
# chgrp gitusers . # make sure all users that need access are in the group
# chmod 0660 .
# chmod g+s .     # setguid bit
# git init --bare --shared=0660 .

or
# git init --shared=0644

參考文件: http://chirp.syxyz.net/2012/02/sharing-a-git-repository-over-ssh/


* git 移除已加入 git repository 的檔案
git rm --cached FILE_NAME

use -r to recursively remove files from cache,
git rm --cached -r FILE_NAME

* git 放棄 merge
git reset --merge


===================================
[rebase]

f you are not sharing develop branch with anybody, then I would just rebase it every time master updated, that way you will not have merge commits all over your history once you will merge develop back into master. Workflow in this case would be as follows:

> git clone git://<remote_repo_path>/ <local_repo>
> cd <local_repo>
> git checkout -b develop
....do a lot of work on develop
....do all the commits
> git pull origin master
> git rebase master develop
Above steps will ensure that your develop branch will be always on top of the latest changes from the master branch. Once you are done with develop branch and it's rebased to the latest changes on master you can just merge it back:

> git checkout -b master
> git merge develop
> git branch -d develop

========================
檢查兩個 commit 的不同檔案
git diff --name-status 65813002de..9bafa9b3f9




* 當你在windows 及 linux 之間編輯檔案時, 可能會因 windows 換行符號與 linux 不同而讓 git 誤以為檔案有所改變. 這時候你需要一個聰明辨別 windows/linux 的 git.很巧的是 git 的確有提供這個功能, 指令如下:

$git config --global core.autocrlf true
這樣子, 當你再下 git status 時, 那些惱人的因錯辨換行符號而誤以為是檔案被更改過的問題就一掃而空了.
$git status


* 變更 git commit 時使用旳編輯器(editor) 
例如使用 nano  
$ git config --global core.editor nano 
例如使用 OSX 的文字編輯器(TextEdit)
$ git config --global core.editor 'open -a TextEdit' 

*將舊 log 裡的某個檔案拿出來儲存成其它名稱
git show 897be4c3902:api/old_file_name.py > new_file_name.py
 

========================
當你有兩個遠端 bare repository, 例如 repo  A 跟 repo B 
基本上你都 將 local push 到 repo B 再由 repo B push 到 repo A 
 
[repo A]  <-- [repo B] <-- [local] 
 
可是今天可能是同伴開發時 未經 B 直接就 push 到 A
也就是 repo A 比 repo B 新
[repo A](new)  <-- [someone]  ,      [repo B] (old)    
這時你從 repo B push 上 repo A 時會遇到這個訊息: 
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and merge the remote changes
hint: (e.g. 'git pull') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 
 
 
若你真的確定 A 比 B 新,你要從 A pull 到 B,你可以在 B 裡下以下指令 
$ git fetch origin +refs/heads/*:refs/heads/* --prune
 
這個動作會將 repo A 的所有 branch update "覆蓋" 你的 repo B
然後你就可以再重新在 local pull repo B, merge repo B
最後再經一般上傳方式上傳
 
 
 
======================== 
當你想產生版本差異的完整檔案(非 patch),且照既有目錄排好,這時你要如何產生?

假設你要取版本 71eba333 ~ 目前 HEAD 位置的所有差異檔案
git archive --format=zip HEAD `git diff 71eba333 HEAD --name-only` > a1.zip

解壓 a1.zip 就是你要的,而且會依照原目錄的結構存放
真的太好用了

延伸題
如上,但你 71eba333 ~ 目前 HEAD有刪除的檔案,這時怎麼辦?可以用 --diff-filter 來過濾掉 D(deleted) 的檔案
git archive --format=zip HEAD `git diff --diff-filter=ACMRTUXB 71eba333 HEAD --name-only` > a2.zip


這個好處是你可以給 patch 檔給不會程式的人,但有 sense 知道如何解壓覆蓋,例如客戶,叫他直接解壓覆蓋即可。什麼語言合適?類interpreter 語言均好用,php, python, perl, bash, ...


參數意義
A Added
C Copied
D Deleted
M Modified
R Renamed
T have their type (mode) changed
U Unmerged
X Unknown
B have had their pairing Broken
* All-or-none
========================
修改最後一個 commit message
git commit --amend
按enter後直接修改即可

修改之前 commit message
只能利用 rebase git rebase -i @˜4 然後利用交談式介面完成 註 @ 即 HEAD

===================================
中止 rebase
git rebase --abort回

回復到未 rebase 狀況
git reset --hard ORIG_HEAD
這不常用,會忘記 head 名稱(不常用是對的)

===================================
樹狀顯示 git log
git log --pretty=format:"%h %s" --graph
git log --graph


===================================


2014-07-12

Python 的 decorator (Part III)

問題
前面 decorator Part I & Part II 已經涵蓋了 decorator 困難部分8成
這裡我們再進階看一個 "參數問題"

Decorator 的下一個問題是, 如果我 decorator 要傳參數的話要怎麼辦呢?
個人覺得這個架構是 python 一個很醜很醜的敗筆

請看一下底下例子

2014-07-11

Python 的 decorator (Part II)


前篇 Python 的 decorator (Part I) 遺留了一個問題


如下程式碼, 那就是明明是 Star 為什麼 Star.__name__ 變成了 my_wrap ?

2014-07-10

Python 的 decorator (Part I)

緣起
當我第一次看到 python 的 @ 符號時,當場傻眼,這是什麼東咚? 這是 command line 的變數的控制符號嗎?
後來去 goo 了一下才發現這東西叫 decorator
花了五分鐘看了一下, 瞭解了
但再實際不同 source 去運作及比對, 才發現...好像怪怪的, 不懂
再去搜集研究比對一下, 好像又懂了
再遇到 wraper 名稱取代 ... 哇~ 又不懂了
一波三折~ 5分鐘的事搞成半小時

Pre-說明
我最討厭只是為了要瞭解一個東西的意義/作用, 就要看人家 blog 寫的落落長的教學文, 寫一堆無關緊要的東西, 但重點只有一個. 甚至還講不到重點(我想即使版主未來想自己參考, 我猜他自己還會看不懂, 真的~)
但 decorator 要說清楚真的需要落落長, 廢話少說開始吧...
我的理解是...

2014-07-09

Android 查 activity 指令 & 指令喚起執行 apk/app

Android 查 activity 指令

aapt dump xmltree PmCalib.apk AndroidManifest.xml  <== Android SDK提供的命令
user@ub1004:~/temp/penmount/calibration/android-4$ aapt dump xmltree PmCalib.apk AndroidManifest.xml
N: android=http://schemas.android.com/apk/res/android
  E: manifest (line=2)

Android Keyevent 大全

adb shell input keyevent 7    # for key '0'
adb shell input keyevent 8    # for key '1'
adb shell input keyevent 29    # for key 'A'
adb shell input keyevent 54    # for key 'B'

linux 指令小記

Linux 最大的缺點就是安裝程式一定是落落長(configure, make, make install), 第二大缺點就是指令一久不用就忘會, 以下小記常用到的指令

[journalctl 查看最後幾行 log]
journalctl --unit=my.service | tail -n 300
journalctl -f tail 


刪除指定名稱的程序(process)
刪除 dnsmasq
ps aux | grep "^dnsmasq" | awk '{print $2}' | xargs  kill -9
但以上會刪到 kill 本身, 若起頭的 "執行身份" 是 nobody, 用以下限制刪除
ps aux | grep "^nobody.*dnsmasq" | awk '{print $2}' | xargs  kill -9
ps aux | grep "^.*nginx:\ .*process.*" | awk '{print $2}' | xargs  kill -9

android logical display density

理論上, Android 的 display density 定義如下,
• 120 dpi, known as 'ldpi'
• 160 dpi, known as 'mdpi'
• 213 dpi, known as 'tvdpi'
• 240 dpi, known as 'hdpi'
• 320 dpi, known as 'xhdpi'
• 480 dpi, known as 'xxhdpi'

實際上請依照 Panel 顯示狀況調整, 但相差不遠

Launcher 的 navigator bar 若有問題, 可調整 device/fsl/sabresd_6dq/frameworks/base/core/res/res/values/dimens.xml 下的 “navigation_bar_height” and “navigation_bar_height_landscape”

理論上 Android 的 navigation bar 是 48dp@160dpi
所以若你調成 140dpi, 新的 navigation bar 應該調整成 = 48dp x 160 / 140.

王里 言侖 上 口拉
.


參考資料
http://developer.android.com/guide/practices/screens_support.html

2014-07-04

從 IP 查地理位置

從 IP 查地理位置

[Database]
http://lite.ip2location.com/main (內詳, 格式詳細, 分lite跟商業兩種版本)
http://db-ip.com/db/  (free + 收費版本)

DONATIONWARE
http://software77.net/geo-ip/
http://software77.net/geo-ip/?license

wget software77.net/geo-ip/?DL=1 -O /path/IpToCountry.csv.gz      IPV4 gzip
wget software77.net/geo-ip/?DL=2 -O /path/IpToCountry.csv.zip     IPV4 zip
wget software77.net/geo-ip/?DL=3 -O /path/IpToCountry.csv.MD5     IPV4 MD5 (CSV file)
wget software77.net/geo-ip/?DL=4 -O /path/IpToCountry.dat         IPV4 Geo::IPfree
wget software77.net/geo-ip/?DL=5 -O /path/IpToCountry.dat.MD5     IPV4 MD5 Geo::IPfree
wget software77.net/geo-ip/?DL=6 -O /path/country-codes.txt       Country Codes
wget software77.net/geo-ip/?DL=7 -O /path/IpToCountry.6R.csv.gz   IPV6 Ranges
wget software77.net/geo-ip/?DL=8 -O /path/IpToCountry.6R.csv.MD5  IPV6 Ranges MD5
wget software77.net/geo-ip/?DL=9 -O /path/IpToCountry.6C.csv.gz   IPV6 CIDR
wget software77.net/geo-ip/?DL=10 -O /path/IpToCountry.6C.csv.MD5 IPV6 CIDR MD5
Please NOTE the "/" before the "?"




2014-07-03

Django "Writing your first Django app" 的完整程式



Django "Writing your first Django app" 的完整程式
下載點點我




python, django 有用資源 & 相關網址

Python, Django 有用資源 & 相關網址

* Django snippets
https://djangosnippets.org/

* Django可參考部落格
http://www.weiguda.com/blog/categories/1/

*Social Authentication (OAuth) - Python Social Auth
你是否希望支援可以利用 facebook, twitter, gmail... 來登入你的網路呢? 不用再找了, 用 python-social-auth 就對了, 支援 python3 (#pip install python-social-auth)

#pip install python-social-auth