2015年12月31日 星期四

[python] Google Analytics oauth2client.client.CryptoUnavailableError: No crypto library available 解決方法


[python] Google Analytics oauth2client.client.CryptoUnavailableError: No crypto library available 解決方法


使用 Google Analytics 時遇到

    Traceback (most recent call last):
      File "GAFetcher/cron_ga_fetcher.py", line 31, in <module>
        credentials = SignedJwtAssertionCredentials(client_email, private_key,scope='https://www.googleapis.com/auth/analytics.readonly')
      File "/usr/lib/python2.6/site-packages/oauth2client/util.py", line 140, in positional_wrapper
        return wrapped(*args, **kwargs)
      File "/usr/lib/python2.6/site-packages/oauth2client/client.py", line 1630, in __init__
        _RequireCryptoOrDie()
      File "/usr/lib/python2.6/site-packages/oauth2client/client.py", line 1581, in _RequireCryptoOrDie
        raise CryptoUnavailableError('No crypto library available')
    oauth2client.client.CryptoUnavailableError: No crypto library available

已經 install 了 google-api-python-client
##install
pip install --upgrade google-api-python-client

使用 pip install  PyOpenSSL  可是不能安裝成功

# pip install PyOpenSSL

在centos 上 改採用  成功

# yum install pyOpenSSL

2015年12月30日 星期三

[Google Analytics] 出現 "User does not have any Google Analytics account." 解決 方案


"User does not have any Google Analytics account." 解決方法

使用Google Analytics 的 service account 方式,得到下面這個錯誤訊息。

<HttpError 403 when requesting https://www.googleapis.com/analytics/v3/data/realtime?metrics=rt%3AactiveUsers&alt=json&ids=ga%xx returned "User does not have any Google Analytics account.">

把 json 檔 的 client_email 加到 要使用的GA 的  profile 中的 使用者管理 即可



ref:
Analytics Google API Error 403: "User does not have any Google Analytics Account" - Stack Overflow
http://stackoverflow.com/questions/12837748/analytics-google-api-error-403-user-does-not-have-any-google-analytics-account
Add, modify, and delete users - Analytics Help
https://support.google.com/analytics/answer/1009702?hl=en#Add

[python] import uritemplate ImportError: No module named uritemplate 解決方法

    import uritemplate
ImportError: No module named uritemplate

使用  google api python client 的時候發現  google-api-python-client
安裝好了,但是執行程式時出現 ImportError: No module named uritemplate
$ pip install --upgrade google-api-python-client


後來採取這個方式  force reinstall  uritemplate

$ pip install --force-reinstall uritemplate.py

2015年12月29日 星期二

[docker] 使用 docker 安裝 phpmyadmin

[docker] 使用 docker 安裝 phpmyadmin 


自從有了docker 考試考了一百了(誤

phpmyadmin 是套 php 撰寫的 mysql 管理工具,
使用docker 安裝不用什麼太麻煩的設定。
PMA_HOSTS 指定一下你要連的server 。


$ docker run -d -e PMA_HOSTS=192.168.1.1,192.168.1.2 -p 8080:8080 phpmyadmin/phpmyadmin

ref:

2015年12月25日 星期五

如何將網域(domain) 從 Godaddy 移往 NameSilo Domain Transfer 2015

如何將網域(domain) 從 Godaddy 移往 NameSilo Domain Transfer 2015 

GoDaddy 取消了大部分的 renewal coupon ,基本上找的到的都只有在促銷新產品的 promo code 。

因為他們提供了另外一個方案,GoDaddy Discount Domain Club 原價一個月 $ 9.99 的入會費,最少是繳12個月,也就是一年的年費是$ 118.8 (日前的文章都是 7.5*12 每個月從7.5 漲到 9.99 )
提供的基本優惠就是 domain 的價格,像是 .com 的價格從 $ 14.99 給了 44 % off ,變成了 $ 8.29 (不過每個domain還要加收 $ 0.18/yr ICANN fee www.icann.org)

也就是說,當你domain不多,又找不到coupon code的情況下一年續約 .com $15.17 。

對於不想特別找 coupon code的人,確實是可以直接續約了,因為 renewal coupon 已經少見了。

而 NameSilo 則提供了 一年  .com $ 8.99 的價格 ,不必再加收 ICANN fee 。
而 GoDaddy 就算加入了 Discount Domain Club ,加上 ICANN fee 8.29+0.18 也要 $8.47。

當然,NameSilo 還提供了 免費的 whois privacy (也就是別人沒辦法直接用 whois 去查徐到你的登記資料),這個在 GoDaddy 是要付費購買DOMAIN PRIVACY 服務的,一年價格是 $7.99/yr

Private Registration | Protect Your Information - GoDaddy
https://www.godaddy.com/domainaddon/private-registration.aspx

GoDaddy 加入 Discount Domain Club (DDC) 以後的價格 (2015.12.25)


NameSilo 提供的比較表 (2015.12.25)


怎麼從將網域(domain) 從 GoDaddy 移往 NameSilo domain transfer 

domain transfer 整個過程大概一個小時內就完成了,主要是幾個步驟。

      0. 先取消 whois domain private
  1.  在 GoDaddy unlock domain ,購買或是剛轉換的服務商的60天內不能做轉移。
  2.  在 GoDaddy 取得 Authorization Code ,在 manage 頁面找 按下 Email my code ,他會把 Authorization Code 寄到你的 whois 登記資料的信箱中。
  3. 在信箱取得  Authorization Code 大概十分鐘左右
  4. 這個時間可以先註冊 NameSilo的帳號,並且看一下 $1 的NameSilo  discount code
  5. 到 NameSilo Transfer 頁面填入你的域名,他會提示你填入 Authorization Code。
    Cheapest Domain Transfers-Transfer Domain Registration Cheap: NameSilo https://www.namesilo.com/transfer.php

    成功以後就可以填入你的付費資訊, $ 8.39 使用 $1 的 優惠碼,變成 $7.39。
     

  6. 網域進入了 pending transfer 狀態,等待個十分鐘,收一下信箱點下namesilo 寄來的信。再來就是到GoDaddy確認轉出。
  7. 回 GoDaddy 的介面找 Domains -> Transfers 看一下有沒有 pending Transfers Out 的 domain ,找到你的網域按下 accept 。
  8. 等待個五到十分鐘,在到 NameSilo 的介面看狀態,看看是否成功轉出。
    雖然說這裡寫 5days,但是,很快就完成了。
  9. 完成後就可以在 NameSilo 看到 completed transfers 







ref:
域名从GoDaddy迁移至NameSilo – 方室网志
最新域名转移教程-Godaddy至Namesilo详细图文教程 | 日记男孩的博客 http://www.xujiahua.com/4432.html
GoDaddy域名转出攻略-月光博客 http://www.williamlong.info/archives/4413.html
从Godaddy转移域名到便宜好用的Namesilo - Slyar Home https://www.slyar.com/blog/godaddy-transfer-domain-namesilo.html
GoDaddy域名转移到NameSilo(2015版) - 生活志 http://louishan.com/articles/domain-transfer-godaddy-to-namesilo-2015.html

域名转移:从 Godaddy 到 Namecheap https://hinine.com/domain-transfer-from-godaddy-to-namecheap/
[教學]如何從Godaddy轉出網址到其它域名註冊商? – 香腸炒魷魚
https://sofree.cc/godaddy-transfer-domain-tech/



[cloudflare] Auto Minify and Polish eliminate space html 清除空白與壓縮


使用 cloudflare 當做 CDN 時,若是發現,有一些 html 空白消失了。你可能開啟了 Performance Auto Minify and Polish 的功能,可以到 speed 的地方(或是 rule page rule ) 去更改 Performance 的選項,選擇是否要使用 Auto Minify and Polish。


Polish

Improve image load time.
Polish automatically applies both “lossless” and “lossy” image optimization to remove unnecessary bytes from images. On average, image sizes are reduced by 35%.

Auto Minify

Reduce the file size of source code on your website.
Note: Purge cache to have your change take effect immediately.

ref:
An All New (and Improved) AutoMinify
https://blog.cloudflare.com/an-all-new-and-improved-autominify/

2015年12月22日 星期二

[openshift] 更換 openshift app 的 gear


openshift 是 redhat 所提供的一個SaaS 平台。

HOSTING WITH OPENSHIFT ONLINE OpenShift Online is Red Hat's next-generation application hosting platform that makes it easy to run your web applications in the cloud for free.
OpenShift by Red Hat
https://www.openshift.com/

每一個 free plan account 可以建立三個 gear,gear 就是在 openshift SaaS 中的一個單元。
目前,OpenShift 是建構部屬在 AWS 上,可是使用他你無需關心流量。

每個gear有1G的 ram,支援多種語言,甚至有提供 haproxy 來做分流使用。

有時候會遇到開啟的geer遇到不明原因loading很高或是很卡,你要怎麼更換目前使用的geer呢?

0. 已經 git clone 過原本 app 的 repo

1. delete 原本的 app


2. 在同一個 account 中 create 另外一個新的 app



3. 建立完後,在原本的 git repo 中的 .git/config 把 remote origin 的部份改成新的app

[remote "origin"]
    #old
    #url = ssh://ooooxxxxx@oldname.rhcloud.com/~/git/python.git/
    #new add
    url = ssh://xxxxooooo@newname.rhcloud.com/~/git/python.git/
    fetch = +refs/heads/*:refs/remotes/origin/*


4. 在repo 端

git push origin master -f

5.  連上 newname.rhcloud.com 確認一下是否完成

也可使用

$ rhc app show -a [appname] --gears -l account

確認目前使用的gear id 是不是原本的已經不同。


如此並可在 openshift 上,使用新的狀況良好的gear。


OpenShift Online Monthly Plan Comparison
https://www.openshift.com/pricing/plan-comparison.html



Free Plan Bronze Plan Silver Plan
Base Price Free Free $20C$20€15/month
Application Idling 24 hours Never Never
Included Gears 3 small gears 3 small gears 3 small gears
Max Gears 3 16 16+
Scaling Yes (3 min / 3 max) Yes (3 min / 16 max) Yes (3 min / 16 max)
Gear Sizes small small ($0.02C$0.02€0,02/hour)
small.highcpu ($0.025C$0.025€0,025/hour)
medium ($0.05C$0.05€0,04/hour)
large ($0.10C$0.10€0,08/hour)
small ($0.02C$0.02€0,02/hour)
small.highcpu ($0.025C$0.025€0,025/hour)
medium ($0.05C$0.05€0,04/hour)
large ($0.10C$0.10€0,08/hour)
Storage 1GB per gear 1GB per gear; $1.00C$1.00€1,00/month per additional GB 6GB per gear; $1.00C$1.00€1,00/month per additional GB
SSL Shared For custom domains For custom domains
Teams Not included Up to 15 Up to 15
JBoss EAP 6 Included 3 gears free; $0.03C$0.03€0.02/hr per additional gear 3 gears free; $0.03C$0.03€0.02/hr per additional gear
Support From Community Community Red Hat & Community
Sign up Upgrade Upgrade

a

[CloudFlare] 查看你所使用的 CloudFlare CDN 節點 區域 /cdn-cgi/trace


若是網站使用了 cloudflare 的 CDN ,可以在域名的後方加上 /cdn-cgi/trace
可以取的相關的訊息。

colo 就是,連線的clinet 使用的 Cloudflare 節點區域。
範例的 colo=HKG 就是使用 Cloudflare 的香港節點。


https://www.reddit.com/cdn-cgi/trace

fl=23f95
h=www.reddit.com
ip=
ts=1450773728.071
visit_scheme=https
uag=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25
colo=HKG
spdy=3.1
loc=TW

台灣現在使用 cloudflare的香港節點,之前有一陣子調整在NRT: Tokyo, JP 


CloudFlare加速最佳化設置 – HZSH Site
https://www.hzsh.us/173/cloudflare%E5%8A%A0%E9%80%9F%E6%9C%80%E4%BD%B3%E5%8C%96%E8%A8%AD%E7%BD%AE
Which CloudFlare data centre do I reach? – CloudFlare Support
https://support.cloudflare.com/hc/en-us/articles/200169986-Which-CloudFlare-data-centre-do-I-reach-

The CloudFlare global network | CloudFlare | The web performance & security company
https://www.cloudflare.com/network-map/

Here is a list of CloudFlare PoP location codes and the corresponding city that they're in. A map of our network locations can be found here: https://www.cloudflare.com/network-map
Location Code: City, (State,) Country
AKL: Auckland, NZ
AMS: Amsterdam, NL
ARN: Stockholm, SE
ATL: Atlanta, US
CDG: Paris, FR
DFW: Dallas, US
DOH: Doha, QA
DUB: Dublin, IE
DUS: Dusseldorf, DE
DXB: Dubai, AE
EWR: Newark, US
EZE: Buenos Aires, AR
FRA: Frankfurt, DE
GRU: São Paulo, BR
HKG: Hong Kong, HK
IAD: Ashburn, US
ICN: Seoul, KR
JNB: Johannesburg, ZA
KIX: Osaka, JP
KUL: Kuala Lumpur, MY
KWI: Kuwait City, KW
LAX: Los Angeles, US
LHR: London, GB
LIM: Lima, PE
MAD: Madrid, ES
MAN: Manchester, GB
MBA: Mombasa, KE
MCT, Muscat, OM
MDE: Medellín, CO
MIA: Miami, US
MLE: Melbourne, AU
MRS: Marseille, FR
MXP: Milan, IT
NRT: Tokyo, JP
ORD: Chicago, US
OTP: Bucharest, RO
PDX: Portland, US
PRG: Prague, CZ
SCL: Valparaíso, CL
SEA: Seattle, US
SFO: San Francisco, US
SIN: Singapore, SG
SJC: San Jose, US
SYD: Sydney, AU
TXL: Berlin, DE
VIE: Vienna, IT
WAW: Warsaw, PL
YYZ: Toronto, CA

2015年12月19日 星期六

[tech] 在 mac terminal 開啟 sublime text Launch Sublime Text 2 from the Mac OS X Terminal


安裝  Sublime Text 常常因為沒有加入 command line 指令,無法在 terminal 中使用 Sublime Text 。

透過簡單的 ln link, ln -- make links 去做一個soft link

 ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl

開始一個新的 terminal ,或是 source ~/.bash_profile 。
就可以直接在 terminal 使用  subl file  來開啟檔案了 (subl . 開啟整個資料夾)。

Launch Sublime Text 2 from the Mac OS X Terminal
https://gist.github.com/artero/1236170

2015年12月18日 星期五

[python] python 推薦 twitter sdk api lib


使用 twitter rest api 有許多的 client lib tools
在 python 上,推薦使用  Python Twitter Tools

就如同他自己的介紹,

The Minimalist Twitter API for Python is a Python API for Twitter, everyone's favorite Web 2.0 Facebook-style status updater for people on the go.

Python Twitter Tools (command-line client and IRC bot)
http://mike.verdone.ca/twitter/
sixohsix/twitter
https://github.com/sixohsix/twitter

安裝

pip install twitter


使用

操作上可以直接觀看 github 上 Readme 的例子,主要的核心就是 twitter 這個 class。
https://github.com/sixohsix/twitter

方便與直覺之處就是,你大概直接看官方的api docs,就可以了解有什麼參數可以直接使用。

這是一種滿直覺的封裝方式,沒有太多自己特製的封裝,wrap一層後可以直接看官方手冊。


The Twitter class

The minimalist yet fully featured Twitter API class.
Get RESTful data by accessing members of this class. The result is decoded python objects (lists and dicts).
The Twitter API is documented at:
Examples:
from twitter import *

t = Twitter(
    auth=OAuth(token, token_key, con_secret, con_secret_key))

# Get your "home" timeline
t.statuses.home_timeline()

# Get a particular friend's timeline
t.statuses.user_timeline(screen_name="billybob")

# to pass in GET/POST parameters, such as `count`
t.statuses.home_timeline(count=5)

# to pass in the GET/POST parameter `id` you need to use `_id`
t.statuses.oembed(_id=1234567890)

# Update your status
t.statuses.update(
    status="Using @sixohsix's sweet Python Twitter Tools.")

# Send a direct message
t.direct_messages.new(
    user="billybob",
    text="I think yer swell!")

# Get the members of tamtar's list "Things That Are Rad"
t.lists.members(owner_screen_name="tamtar", slug="things-that-are-rad")

# An *optional* `_timeout` parameter can also be used for API
# calls which take much more time than normal or twitter stops
# responding for some reason:
t.users.lookup(
    screen_name=','.join(A_LIST_OF_100_SCREEN_NAMES), _timeout=1)

# Overriding Method: GET/POST
# you should not need to use this method as this library properly
# detects whether GET or POST should be used, Nevertheless
# to force a particular method, use `_method`
t.statuses.oembed(_id=1234567890, _method='GET')

# Send images along with your tweets:
# - first just read images from the web or from files the regular way:
with open("example.png", "rb") as imagefile:
    imagedata = imagefile.read()
# - then upload medias one by one on Twitter's dedicated server
#   and collect each one's id:
t_up = Twitter(domain='upload.twitter.com',
    auth=OAuth(token, token_key, con_secret, con_secret_key))
id_img1 = t_up.media.upload(media=imagedata)["media_id_string"]
id_img2 = t_up.media.upload(media=imagedata)["media_id_string"]
# - finally send your tweet with the list of media ids:
t.statuses.update(status="PTT ★", media_ids=",".join([id_img1, id_img2]))

# Or send a tweet with an image (or set a logo/banner similarily)
# using the old deprecated method that will probably disappear some day
params = {"media[]": imagedata, "status": "PTT ★"}
# Or for an image encoded as base64:
params = {"media[]": base64_image, "status": "PTT ★", "_base64": True}
t.statuses.update_with_media(**params)
Searching Twitter:
# Search for the latest tweets about #pycon
t.search.tweets(q="#pycon")

[python] 2.6 AttributeError: 'datetime.timedelta' object has no attribute 'total_seconds'

[python] 2.6 AttributeError: 'datetime.timedelta' object has no attribute 'total_seconds'

python 2.6 timedelta 並沒有 total_secondes

8.1. datetime — Basic date and time types — Python 2.7.11 documentation
https://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds

查看 docs 後,可使用

 (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) /10**6


在看一個 parse twitter created_at 的例子

    created_at = datetime.strptime(s.get('created_at'), '%a %b %d %H:%M:%S +0000 %Y')
    #python 2.6
    #AttributeError: 'datetime.timedelta' object has no attribute 'total_seconds'

    #created_at_ts = (created_at - datetime(1970, 1, 1)).total_seconds()
    td = created_at - datetime(1970, 1, 1)
    created_at_ts=(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6

如此一來,在 python 2.6 也可以使用 total_seconds 的替代方法。

2015年12月17日 星期四

[吳式太極拳] 推手的力量 鬆沉虛實 151212 (六)


練完拳趟子,就跟師兄請教推手。
以吳式太極拳的推手訓練裡面,都是由四隅手,四正手開始訓練。

在推手的過程中,師兄就指出,我的左手的力量,很多時候都是自己先抬起來,這樣導致力量是不連貫的,也就是說,已經斷勁了。

有一個簡單的測試,我們一直做四正手的第一手,我使用左手,當我是使用抬的力量,而不是撐的力量的時候,師兄一看就知道,就會把推過來,告訴我說,我是使用抬的力量,而不是用撐的力量。

而是一開啟就是用撐的力量,要沉肩墜肘,用丹田撐起。

還有一個要點就是,體會放鬆,體會把力量放過去,把力量放掉。
接手的時候,如果沒辦法一開始就是撐,可以一開始提一點,然後,在接觸的時候,把力量放過去,放掉,放在對方的身上。

一觸用撐的力量,把力量放掉鬆沉,虛前腳。

體會了這個虛實,我豁然開朗,師兄再次講明,這就是虛實的力量。
一般的力量可能是明顯的對稱力量或是左右擰轉力量,但是這個力量,還沒有虛實的力量來的這麼巧妙。

當下聽到有如醍醐罐頂茅塞頓開,感覺好像貫通了很多以前看過,但是沒感覺的道理。




隨筆
放鬆 把力量放掉放過去
一點點左手的差別
不是自己舉著力量
一開啟就使用撐的力量
不用提
本來以為是轉 後來發現是虛實
不能偏掉

2015年12月15日 星期二

[elasticsearch] Kibana 與 Grafana 的關係

Kibana 與 Grafana 都是 open source 開源的 dashboard 與 分析的軟體。
Grafana 是從 Kibana 所 fork 出來的軟體。(ref 1)


  • Kibana 
    • an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch
    • elastic/kibana  https://github.com/elastic/kibana
    • power by elastic

  • Grafana
    • Gorgeous metric viz, dashboards & editors for Graphite, InfluxDB & OpenTSDB 
    • grafana/grafana  https://github.com/grafana/grafana
    • for Graphite, InfluxDB & OpenTSDB 
    • http://grafana.org
    • fork from Kibana


ref

1. Why We Built Marvel | Hacker News
https://news.ycombinator.com/item?id=7143370

grafana is a fork of Kibana. Kibana is a visualization tool of data in Elasticsearch, and Marvel is based on Kibana.

2015年12月14日 星期一

雲林高鐵站 新站開幕 12月 高鐵買一送一


從07 年高鐵通車以來,這個遲來的高鐵雲林站,終於在 2015 年12月 1號 通車了。
身為旅外的第一大縣,鄉親們引領期盼的高鐵車站,終於來了。










高鐵買一送一活動


旅客憑2015/12/01~2015/12/15起站或訖站為苗栗/彰化/雲林站,且已完成乘車之指定票種,可在2016/01/31前到高鐵各車站售票窗口,憑原車票兌換2016/01/31前相同乘車區間的標準車廂對號座免費車票乙張。
未享優惠之標準車廂對號座全票、商務車廂8折全票、標準車廂自由座全票(含持用悠遊聯名卡搭乘者),及平日離峰96折與一般團體95折全票適用之。原票如為已享有敬老/愛心/兒童票等法定優待,或本公司其他方案之優惠者,恕不適用。

專案內容

旅客憑2015/12/01~2015/12/15起站或訖站為苗栗/彰化/雲林站,且已完成乘車之指定票種,可在2016/01/31前到高鐵各車站售票窗口,憑原車票兌換2016/01/31前相同乘車區間的標準車廂對號座免費車票乙張。

指定票種

未享優惠之標準車廂對號座全票、商務車廂8折全票、標準車廂自由座全票(含持用悠遊聯名卡搭乘者),及平日離峰96折與一般團體95折全票適用之。原票如為已享有敬老/愛心/兒童票等法定優待,或本公司其他方案之優惠者,恕不適用。

活動期間

2015/12/01~2015/12/15

兌換期間

2015/12/01~2016/1/31

免費車票使用期間

2015/12/01~2016/01/31(2015/12/31~2016/01/04元旦疏運期間不適用)

兌換地點

高鐵各車站售票窗口

注意事項

  • 票種符合,但無苗栗/彰化/雲林站實際進出閘門紀錄者,不適用本優惠專案。
  • 本優惠專案兌換之免費車票為標準車廂對號座,且一經兌換恕不受理變更。
  • 每張符合本優惠條件之車票,限換領一張相同乘車區間之免費車票(如起、訖站皆屬新增三站,仍僅限換領一張免費車票)。
  • 凡已購買2015/12/01~2015/12/15期間,起訖站含苗栗/彰化/雲林站優惠車票之旅客,如欲改用本優惠專案者,可至高鐵各車站窗口退票重購,免收手續費。
  • 除本優惠專案之特別規定外,其餘悉依本公司旅客運送契約相關規定辦理。
  • 本優惠專案內容如有異動,將另行公告。台灣高鐵公司保有調整或終止本專案之權利。

台灣高鐵 Taiwan High Speed Rail
http://www.thsrc.com.tw/tw/Article/ArticleContent/b2d2c399-9fa2-4232-88e1-d61cea1826b2

蓋了 可是後悔了

實際搭乘後,發現整個站體跟公共設施略嫌有點小。
公共廁所居然只有四個小便斗。

早上坐車,本來車是空的,然後,一過雲林,整車就被雲林鄉親給塞滿了。
不過實際乘車狀況,可能要等到買一送一活動完再來看看。











2015年12月9日 星期三

[python] python 中的 @classmethod vs @staticmethod decorator


python 中有兩個在class中的 decorator , classmethod 與 staticmethod。
使用這兩個decorator在 method上,就可以不用特別去實體化class,就可以調用這些方法。


那這兩個 classmethod vs staticmethod 有什麼主要的區別呢?
  • @classmethod
    • 不需要帶self 參數,但是第一個參數需要是 自己類別的 cls 參數。
  • @staticmethod
    • 不需要self 參數與自身類別的cls 參數,就像使用函數一樣。

詳細的例子可以對照 給出的例子
装饰器@staticmethod和@classmethod有什么区别? | Stackoverflow about Python 





ref.
Descriptor HowTo Guide — Python 2.7.11 documentation 
飘逸的python - @staticmethod和@classmethod的作用与区别 - mattkang - 博客频道 - CSDN.NET
Python 中的 classmethod 和 staticmethod 有什么具体用途? - Python - 知乎
[翻译]Python中staticmethod和classmethod的差异
装饰器@staticmethod和@classmethod有什么区别? | Stackoverflow about Python

2015年12月7日 星期一

[武術]吳式太極拳 24式功法 鷹王覓食 談推手的放鬆 at 151205(六) 151206(日)

24式功法 鷹王覓食  談推手的放鬆 

這週老師教了,二十四式功法裡面的鷹王覓食。

呼吸 放鬆 張開手腳單腳站立 ,
腳出,
手出劃弧收回。

然後換邊。

這兩天都與師兄研習推手的功夫。

第二天師兄指出了我身體的一個問題點,
右手接手時,肩膀並不會自己抬起,是一個放鬆的狀態。

可是同樣的情況,換成了左手,一接手就開始把肩往上抬去支撐住。
當下,你可能覺得你並沒有抬著。可是,透過一個簡單的小測試,就可以知道。

師兄把手墊在我的手下面,然後他把手拿開,右手幾乎是馬上往下掉。
左手卻會自己支持著。

也就是說
你以為你放鬆了 其實你手還舉著
一接觸,就舉著
可以藉由一隻手墊著 看看手會往下掉嗎?

還沒接觸前舉著自己稍微維持著,
接觸後,往對方身上放,然後五張弓,虛前腳 ,重心往移動,這樣就形成了一個很強的力量。


2015年12月4日 星期五

[elasticsearch][how to] 怎麼增加新的node到 cluster

[elasticsearch][how to] 怎麼加入新的node到 cluster 

這是系列的elasticsearch how to


  1. 複製 /etc/elasticsearch/elasticsearch.yml 到新的node上
  2. 更改 config ,類似像 node.name 這種專門為了個別node的設定
  3.  確保新的node上的 cluster.name 與要加入的 cluster 相同
  4.  開啟node  /etc/init.d/elasticserch start
    1. 可以把 /etc/elasticsearch/logging.yml 第一行的 log level 從 INFO 改成 DEBUG
    2.  藉由 tail -f /var/log/elasticsearch/<cluster_name>.log  來看新 node 加入的情況

確認nodes有加入嗎

  • 在現有cluster 上的機器使用  http://localhost:9200/_cat/nodes?v api
看看新的node有被加入嗎?

使用 unicast

預設的zen discovery 使用 broadcast 去尋找有相同 cluster.name的 cluster下入,可以改用 unicast 來給定特定節點加入。
這個hosts list只要給定某一些node就可以被加入了。



discovery.zen.ping.multicast.enabled: false 
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]



Important Configuration Changes

How to Start a Startup CS183B Y Combinator (YC) 創業課

How to Start a Startup CS183B

Everything we know about how to start a startup, for free, from some of the world experts. How to Start a Startup is a series of video lectures, initially given at Stanford in Fall 2014. Videos

久聞 YC(Y Combinator) 與Stanford開的 How to Start a Startup 的課程。
看來該是時候花上時間把它看完了。


How to Start a Startup | StartupClass.co
https://startupclass.co/courses/how-to-start-a-startup
How to Start a Startup
http://startupclass.samaltman.com/
课程视频 - YC创业课中文社区
http://startupclass.club/
How to Start a Startup
https://www.facebook.com/groups/HTSAS/
成长 - YC创业课(CS183B)学习笔记 - 知笔墨
http://zhibimo.com/books/xiaolai/growth
How to Start a Startup - YouTube
https://www.youtube.com/channel/UCxIJaCMEptJjxmmQgGFsnCg/videos