2017年4月22日 星期六

[travel] 香港港簽辦理 台灣 電子簽證


台灣居民如果沒有申請台胞證,是可以直接上網路上申請香港電子免費電子簽證的。
這個簽證可以在兩個月內,進入香港兩次,每次停留最長時間是30天。

台 灣 居 民 預 辦 入 境 登 記 | 入 境 事 務 處 http://www.immd.gov.hk/hkt/services/visas/pre-arrival_registration_for_taiwan_residents.html#

只要準備好
你的身分證字號 護照 上網這個網頁填入相關資料,大概十分鐘內就可以搞定。

申請完,印出來帶著即可。



申 請 資 格

符 合 下 列 條 件 的 台 灣 華 籍 居 民 , 即 可 使 用 這 項 網 上 服 務 預 辦 入 境 登 記 來 港 旅 遊 :
(a)
(i)
在 台 灣 出 生 ; 或

(ii)
在 台 灣 以 外 地 區 出 生 但 曾 以 台 灣 居 民 身 份 來 港 ; 
(b)
並 無 持 有 由 台 灣 當 局 以 外 機 關 簽 發 的 任 何 旅 行 證 件 〔 《 台 灣 居 民 來 往 大 陸 通 行 證 》 ( 俗 稱 「 台 胞 證 」 ) 及 由 香 港 特 別 行 政 區 ( 香 港 特 區 ) 入 境 事 務 處 簽 發 的 入 境 許 可 證 除 外 〕 。
登 記 手 續
符 合 資 格 的 登 記 人 可 於 此 進 行 登 記 。
預 辦 入 境 登 記 是 免 費 的 。 登 記 時 , 登 記 人 須 提 供 下 列 個 人 資 料 ( 資 料 須 與 回 台 旅 行 證 件 上 的 資 料 相 符 ) :
  1. 中 、 英 文 姓 名
  2. 中 、 英 文 別 名 ( 如 有 )
  3. 性 別
  4. 出 生 日 期
  5. 出 生 地 點
  6. 台 灣 身 份 證 號 碼
  7. 回 台 旅 行 證 件 號 碼 及 有 效 日 期
登 記 人 亦 須 從 系 統 預 設 的 個 人 識 別 問 題 中 選 擇 及 回 答 其 中 一 條 。 你 所 提 供 的 答 案 , 將 於 日 後 使 用 這 項 網 上 服 務 的 「 檢 視 / 列 印 登 記 通 知 書 」 功 能 查 看 或 重 新 列 印 該 登 記 的 通 知 書 時 , 作 身 份 確 認 之 用 。
登 記 人 在 預 辦 入 境 登 記 及 在 香 港 特 區 辦 理 入 境 檢 查 手 續 時 , 均 須 持 有 可 用 以 返 回 台 灣 的 旅 行 證 件 , 而 該 證 件 的 有 效 期 須 不 少 於 六 個 月 
警 吿
如 登 記 人 提 供 的 資 料 不 正 確 或 與 回 台 旅 行 證 件 上 的 資 料 不 相 符 , 可 導 致 登 記 無 效 及 / 或 被 拒 絕 進 入 香 港 特 區 。
如 登 記 人 作 出 明 知 為 虛 假 或 自 己 亦 不 信 為 真 確 的 陳 述 或 申 述 以 獲 准 進 入 香 港 特 區 , 或 任 何 人 協 助 或 教 唆 登 記 人 作 出 該 等 陳 述 或 申 述 , 即 屬 犯 罪 。
登 記 結 果
在 輸 入 所 需 資 料 後 , 電 腦 系 統 會 自 動 處 理 有 關 登 記 , 登 記 人 會 即 時 獲 悉 結 果 。
若 成 功 登 記 , 登 記 人 須 使 用 A4 尺 寸 的 白 色 空 白 紙 張 自 行 列 印 由 電 腦 系 統 編 制 的 「 台 灣 居 民 預 辦 入 境 登 記 通 知 書 」 ( 該 通 知 書 ) 。 登 記 人 須 核 對 該 通 知 書 上 所 載 的 資 料 , 以 確 定 所 輸 入 的 資 料 均 屬 真 實 及 正 確 , 並 與 回 台 旅 行 證 件 上 的 資 料 相 符 , 然 後 在 該 通 知 書 上 簽 署 。 如 登 記 人 為 十 六 歲 以 下 兒 童 , 則 須 由 該 兒 童 的 父 親 或 母 親 或 合 法 監 護 人 核 對 資 料 及 簽 署 。
若 登 記 人 未 能 完 成 預 辦 入 境 登 記 , 如 有 需 要 , 可 按 現 行 的 入 境 安 排 向 入 境 事 務 處 遞 交 入 境 許 可 證 的 申 請 。 登 記 人 可 於 此 瀏 覽 詳 情 。
登 記 的 有 效 期
預 辦 入 境 登 記 的 有 效 期 為 兩 個 月 , 如 申 請 人 符 合 下 述 的 一 般 入 境 規 定 , 可 獲 准 以 訪 客 身 份 進 入 香 港 特 區 兩 次 , 每 次 逗 留 最 多 30 天 。
當 登 記 已 過 期 或 申 請 人 已 使 用 該 項 登 記 入 境 兩 次 , 申 請 人 方 可 辦 理 新 的 登 記 。
查 詢 登 記
申 請 人 可 於 此 透 過 該 項 網 上 服 務 的 「 有 效 登 記 查 詢 」 功 能 , 查 詢 登 記 是 否 仍 然 有 效 及 仍 可 使 用 的 次 數 。
如 遺 失 該 通 知 書 , 或 該 通 知 書 被 塗 污 、 損 毀 或 不 符 合 所 定 規 格 等 , 申 請 人 須 透 過 這 項 網 上 服 務 的 「 檢 視 / 列 印 登 記 通 知 書 」 功 能 , 自 行 重 新 列 印 該 通 知 書 。 在 使 用 此 功 能 時 , 申 請 人 須 輸 入 於 登 記 時 選 定 的 個 人 識 別 問 題 的 答 案 作 確 認 身 份 之 用 , 否 則 將 無 法 檢 視 或 重 新 列 印 該 通 知 書 。
出 入 境 檢 查 及 逗 留 條 件
在 辦 理 香 港 特 區 出 入 境 檢 查 手 續 時 , 申 請 人 必 須 出 示 該 通 知 書 。 如 遺 失 該 通 知 書 , 或 該 通 知 書 被 塗 污 、 損 毀 或 不 符 合 所 定 規 格 等 , 申 請 人 須 自 行 重 新 列 印 該 通 知 書 , 才 可 辦 理 出 入 境 檢 查 。
獲 發 該 通 知 書 並 不 保 證 一 定 可 進 入 香 港 特 區 , 申 請 人 仍 須 受 《 入 境 條 例 》 ( 香 港 法 例 第 115 章 ) 的 出 入 境 管 制 規 定 所 規 限 。 在 辦 理 入 境 檢 查 手 續 時 , 申 請 人 須 符 合 一 般 的 入 境 規 定 , 例 如 須 持 有 可 用 以 返 回 台 灣 的 有 效 旅 行 證 件 、 續 程 或 回 程 安 排 的 證 明 、 足 夠 的 旅 費 , 以 及 來 港 的 真 正 目 的 並 無 可 疑 , 才 可 獲 准 入 境 。
若 獲 准 入 境 , 申 請 人 將 獲 發 一 張 載 有 姓 名 、 台 灣 身 份 證 號 碼 及 在 港 逗 留 條 件 的 入 境 標 籤 。 入 境 事 務 處 人 員 會 在 該 通 知 書 上 標 示 已 完 成 旅 程 的 次 數 。
當 完 成 首 次 旅 程 後 , 申 請 人 應 保 留 該 通 知 書 作 次 程 之 用 。 如 在 完 成 首 次 旅 程 後 遺 失 、 塗 污 或 損 毀 該 通 知 書 , 申 請 人 須 透 過 「 檢 視 / 列 印 登 記 通 知 書 」 功 能 自 行 重 新 列 印 該 通 知 書 。 電 腦 系 統 會 編 制 一 張 已 標 示 完 成 首 次 旅 程 的 通 知 書 , 以 供 列 印 作 次 程 之 用 。
在 港 期 間 , 申 請 人 須 攜 帶 該 通 知 書 、 入 境 標 籤 及 回 台 旅 行 證 件 , 以 作 為 獲 准 在 港 逗 留 的 憑 證 。 申 請 人 不 得 在 香 港 特 區 接 受 僱 傭 工 作 ( 不 論 有 薪 或 無 薪 ) ; 開 辦 或 參 與 任 何 業 務 ; 或 就 讀 於 學 校 、 大 學 或 其 他 教 育 機 構 。
於 離 港 時 , 申 請 人 須 出 示 該 通 知 書 、 入 境 標 籤 及 回 台 旅 行 證 件 以 辦 理 離 境 手 續 。

2017年4月21日 星期五

[python] 怎麼撰寫 slack bot


最重要的地方就是得到你的bot token


pip install slackclient

# coding=utf-8
import os
import subprocess
import shlex
import time
import socket

from subprocess import PIPE
from slackclient import SlackClient

def sent_msg(sc, channel='#general', msg=''):
    sc.api_call(
      "chat.postMessage",
      channel=channel,
      # text="Hello from Python! :tada:"
      text=msg
    )

# slack_token = os.environ["SLACK_API_TOKEN"]
slack_token = 'TOKEN'
cmd = 'df -h'
args = shlex.split(cmd)
p = subprocess.Popen(args, stdout=PIPE)
#print p
time.time()
hostname = socket.gethostname()
result = '\n=====\nGood Day Sir ~ ' + time.strftime("%y%m%d %H%M") + '\n'
result += hostname + ' disk usage\n'
result += p.communicate()[0]
sc = SlackClient(slack_token)
sent_msg(sc, channel='#general', msg=result)


How to Build Your First Slack Bot with Python - Full Stack Python
https://www.fullstackpython.com/blog/build-first-slack-bot-python.html

[elasticsearch] centos System call filter bootstrap.system_call_filter: false

在 centos 6 中 ,安裝  elasticsearch-5.3.1.時發現下面問題

# uname -a
Linux pa-01 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux


[2017-04-21T08:35:48,093][WARN ][o.e.b.JNANatives         ] unable to install syscall filter:
java.lang.UnsupportedOperationException: seccomp unavailable: CONFIG_SECCOMP not compiled into kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed
        at org.elasticsearch.bootstrap.SystemCallFilter.linuxImpl(SystemCallFilter.java:363) ~[elasticsearch-5.3.1.jar:5.3.1]
        at org.elasticsearch.bootstrap.SystemCallFilter.init(SystemCallFilter.java:638) ~[elasticsearch-5.3.1.jar:5.3.1]
        at org.elasticsearch.bootstrap.JNANatives.tryInstallSystemCallFilter(JNANatives.java:215) [elasticsearch-5.3.1.jar:5.3.1]
        at org.elasticsearch.bootstrap.Natives.tryInstallSystemCallFilter(Natives.java:99) [elasticsearch-5.3.1.jar:5.3.1]
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:111) [elasticsearch-5.3.1.jar:5.3.1]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:204) [elasticsearch-5.3.1.jar:5.3.1]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:360) [elasticsearch-5.3.1.jar:5.3.1]

因為遠端的機器並沒有辦法自行管理,
所以使用
在 /etc/elasticsarch/elasticsearch.yml
bootstrap.system_call_filter: false

System call filter check | Elasticsearch Reference [master] | Elastic


System call filter 

Elasticsearch installs system call filters of various flavors depending on the operating system (e.g., seccomp on Linux). These system call filters are installed to prevent the ability to execute system calls related to forking as a defense mechanism against arbitrary code execution attacks on Elasticsearch The system call filter check ensures that if system call filters are enabled, then they were successfully installed. To pass the system call filter check you must either fix any configuration errors on your system that prevented system call filters from installing (check your logs), or at your own risk disable system call filters by setting bootstrap.system_call_filter to false.


[life] 台北一景 101 遠眺


前幾天天氣正好,平常都往市政府方向遠眺,
這次往另外一面看。


101遠眺象山方向


P_20170419_151850-PANO

[solr] 使用 DataImportHandler 從 database 拉取資料並索引

sorl 的DataImportHandler 提供了batch 方式從database 拉取資料到 solr 裏面做索引

DataImportHandler - Solr Wiki


# cat data-config.xml
<dataConfig>
     <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://host/database_name" user="username" password="password" batchSize="-1"/>
   <document>
       <entity name="myname" query="select id, uid, cname,utime from myinfo ORDER BY id" deltaImportQuery="select id, uid, cname,utime from myinfo where id='${dih.delta.id}' ORDER BY id" deltaQuery="select id from myinfo where utime > '${dataimporter.last_index_time}' ORDER BY id">
           <field column="id" name="id" />
           <field column="uid" name="uid" />
           <field column="cname" name="cname" />
           <field column="utime" name="utime" />
       </entity>
   </document>
</dataConfig>


cat dataimport.properties
#Fri Apr 21 13:08:08 UTC 2017
myname.last_index_time=2017-04-21 13\:05\:01
last_index_time=2017-04-21 13\:05\:01


可以在cron 內使用 curl 呼叫
0 * * * * curl

'http://localhost:8983/solr/userinfo/dataimport?command=delta-import&clean=false&commit=true&optimize=true' > /dev/null 2>&1

[python] slackclient python 2.6 "python": "Python/{v.major}.{v.minor}.{v.micro}".format(v=sys.version_info), AttributeError: 'tuple' object has no attribute 'major'


slackclient  在 python 2.6 的的環境下使用會出現下列錯誤

root@hc2[/usr/lib/python2.6/site-packages/slackclient]{21:05}
# python ~/workspace/slackbot/disk_bot.py
Traceback (most recent call last):
 File "/root/workspace/slackbot/disk_bot.py", line 31, in <module>
   sc = SlackClient(slack_token)
 File "/usr/lib/python2.6/site-packages/slackclient/_client.py", line 28, in __init__
   self.server = Server(self.token, False)
 File "/usr/lib/python2.6/site-packages/slackclient/_server.py", line 27, in __init__
   self.api_requester = SlackRequest()
 File "/usr/lib/python2.6/site-packages/slackclient/_slackrequest.py", line 21, in __init__
   "python": "Python/{v.major}.{v.minor}.{v.micro}".format(v=sys.version_info),
AttributeError: 'tuple' object has no attribute 'major'

Error message 中指出, 是 sys.version_info 那些參數在 python 2.6 中沒有提供
修改如下

/usr/lib/python2.6/site-packages/slackclient/_slackrequest.py

import platform
from .version import __version__
            
            
class SlackRequest(object):
   def __init__(self):
            
       # __name__ returns 'slackclient._slackrequest', we only want 'slackclient'
       client_name = __name__.split('.')[0]
       client_version = __version__  # Version is returned from version.py
            
       # Construct the user-agent header with the package info, Python version and OS versi
       self.default_user_agent = {
           "client": "{0}/{1}".format(client_name, client_version),
           #"python": "Python/{v.major}.{v.minor}.{v.micro}".format(v=sys.version_info),   
           "python": "Python/{v[0]}.{v[1]}.{v[2]}".format(v=sys.version_info),
           "system": "{0}/{1}".format(platform.system(), platform.release())
       }    
            
       self.custom_user_agent = None

Usage of sys.version_info.major causes crash on python < 2.7 · Issue #79 · astraw/stdeb


2017年4月17日 星期一

[aws][sqs] get queue return None / SQS debug

SQS connection get_queue failed in China region · Issue #3440 · boto/boto
https://github.com/boto/boto/issues/3440

可以使用 debug = 2  看一下每一次的 requests
如果是 404 很大可能是這個 key 沒有 access 的權限

conn = boto.sqs.connect_to_region(
    "cn-north-1", aws_access_key_id=key_id, aws_secret_access_key=secret_key, debug=2)
q = conn.get_queue("my_queue_name")
send: 'GET /?Action=GetQueueUrl&QueueName=cloudtrail-bj&Version=2012-11-05 HTTP/1.1\r\nAccept-Encoding: identity\r\nContent-Length: 0\r\nHost: cn-north-1.queue.amazonaws.com.cn\r\nAuthorization: AWS4-HMAC-SHA256 Credential=yyyyyyyyy/20151222/cn-north-1/sqs/aws4_request,SignedHeaders=host;x-amz-date,Signature=xxxxxxxxxx\r\nX-Amz-Date: 20151222T140256Z\r\nUser-Agent: Boto/2.38.0 Python/2.7.10 Darwin/14.5.0\r\n\r\n'
reply: 'HTTP/1.1 400 Bad Request\r\n'
header: x-amzn-RequestId: c0b20366-324e-5054-be6c-4d95681e72c2
header: Content-Type: text/xml
header: Content-Length: 343


2017年3月15日 星期三

[startup]如何創造財富 How to make wealth Paul Graham


如何創造財富 How to make wealth – Ofa的手札
https://ofafa.wordpress.com/2015/08/10/%E5%A6%82%E4%BD%95%E5%89%B5%E9%80%A0%E8%B2%A1%E5%AF%8C-how-to-make-wealth/ 
How to Make Wealth http://paulgraham.com/wealth.html

n年後,再重閱 Paul Graham 駭客與畫家收錄的這篇 How to make wealth 感觸又更深一層

"如果你想要變得富有,你要如何做到呢?我想最好的賭法應該會是自己創業或是加入一家新創公司。這已經是數百年來持續被驗證相當有效的一個方式。Startup這個字大約是從1960年代開始,但它的內涵與中世紀開始的由資本家資助的航海探索其實是非常相似的。"

"你可以把新創公司視為是一種把工作時間壓縮到短短數年的方式,相較於用輕鬆的方式工作四十年,你在新創公司可以盡可能的在四年裡面努力工作。這個方式在科技業運作的特別好,而且你可以因為工作的很快獲得許多額外的好處。"


2017年3月8日 星期三

[startup]得到例會 談公司治理 談公司正式組織化的後延 羅振宇 羅胖


“我們盡可能拖,盡可能把這個公司正式組織化的那天往後拖,所以,直到這一天,我們公司依然是一家沒有層級,沒有部門,沒有考核,沒有一個字的管理規定,也沒有KPI,也沒有上下班時間的一家公司,到一百七十四人,我們仍然挺到了這個狀態。但是總有一天,你必須這些手段都得上,因為陌生人的協做。經濟學解決的就是這個問題,陌生人的大規模協做,如果不用管理手段,肯定將來是無法控制的,但是我們希望把那天拖的越久越好。 ” 

羅振宇

https://www.facebook.com/luogicshow/videos/1861588090779128/
32:30

2017年3月4日 星期六

2016 回顧 2017 展望


每一年都要寫下的展望與回顧,今年初,辦公室的妹妹問說,你今年有什麼想做的嗎?
我回答是,每一年都有回顧與展望,但是,可能要再次定義了。

今年的回顧與展望,特別的晚下筆,因為,這三個月就好像瞬息萬變的一直在流過,一直在變動,想不到一等再等就等到三月,這個心情也不一樣的時刻。

2016 一個充滿波折跟變動的一年,

  • 三四月又換了主管,又是一個新的挑戰跟生活,辦公環境也是瞬息萬變。
  • 升職了,可是有某些不如預期。
  • 五六月,因為知道爺爺的身體狀況。開刀後,進入了醫院。
  • 這段日子,實在是很煎熬,忙著工作上的事情,忙著心理的衝擊。
  • 8/29 轉換到新的 team去
  • 9/10 與爺的告別
前半年,再忙著自己的工作,後來,擔心的是家裡與工作上的轉換。
轉到新的地方,也度過了一個熟悉期,隨著11月公司的新成立,辦公室的遷移,到了另外一個高峰。不得不說,這邊的夥伴也真是一時之選。能有這樣的機會也是千載難逢。

途中也在重閱了不少經典 from zero to one, 或是 Derek Sivers Anything You Want ... 
也一直思考著,若是自己創業的同時,要有怎樣的作為。
當時的設定就是scale ,怎麼有了體系後的 scale 與 growth hack 的作法了。
下半年,也就是心靈探索的時間了。

這年來說side project的技術實驗算是已經成熟,期望的是找個主題。
三年的試驗 three years startup retrospective - peicheng note http://peichengnote.blogspot.tw/2016/12/three-years-startup-retrospective.html

16年一直設定的財富自由目標,
也就是當 side project 收入大於本業收入的時候,自己的思考模式也會變得不一樣。
那時候,很怕長得太快,因為,會賺錢太容易,撇除世俗的追求,在來的追求都是更高層次的。
趕在parse.com 結束的尾聲,把service的轉到新的kinvey 。
過年期間,因為被 kinvey suspend 一段時間,產生的新的廣告調整方式。
一度每日衝破 100$ ,不過,三月才知道其中有很多無效點擊。


武術上,只有一搭沒一搭的繼續練著,吳家太極拳的拳架。若是有機會,應該學齊吳家的拳劍刀槍,在拳的基礎上的撲跌技法。








2017年2月26日 星期日

[influxdb][statsd] auto create set count in influxdb db every 10 second set 會自己每十秒統計資訊


在使用 statsd 與 influxdb 的時候發現 statd.set 的值每隔 10秒 就會  新增一個count 統計。(下圖已經改成 5 秒 )


這個值可以在 statsd 的 config 內修改。

/opt/statsd# vim config.js

  graphiteHost: '',
  graphitePort: '',
  port: 8125,
  flushInterval: 5000,
  keyNameSanitize: false,
  backends: [ 'statsd-influxdb-backend' ],


/opt/statsd# bash -c cd /opt/statsd && /usr/bin/nodejs stats.js config.js 1>/var/log/statsd.log 2>&1 & echo $! > /var/run/statsd.pid

2017年2月21日 星期二

[linux][xenserver] 沒有 xencenter 狀況下怎麼連結 vm 的 console



[root@xenserver-hy03 ~]# list_domains
id |                                 uuid |  state
 0 | ab9c10e8-1ae3-4f47-8979-c030ae780398 |     R
 1 | 42577729-ffa9-2a21-cd23-aacb7e84de5c |    B H
 2 | e12978e9-1f71-da3b-d082-e81d6cc7918d |     RH
 3 | 25a65266-a501-6208-9ce5-2061393e7106 |     RH
 4 | d039f305-7a25-e900-baa5-14c288d272d4 |     RH
 5 | 8c682a7e-32ef-fa30-b6c4-620a3650d4d9 |     RH
 6 | eb8a92be-f59b-1a3c-fa9a-6d1a64cc296b |    B H

查到想要連的vm的 dom_id ,這裡的例子是 6 。取得 vnc port
[root@xenserver-hy03 ~]# xenstore-read /local/domain/6/console/vnc-port
5906

這樣就取得了 vnc port
因為機器放在內網,把port bind到,server上。
ssh -NR  :5906:localhost:5906 root@server_ip




2017年2月20日 星期一

[mac][python] mac 下 brew install gtk ,pygtk in virtaulenv


在 mac 中,想使用 gtk 的工具
知道要install gtk , pygtk

(mypython) peicheng@IronMan[~/workarea/openxenmanager]{10:48}
$ python openxenmanager
Traceback (most recent call last):
 File "openxenmanager", line 23, in <module>
   import gtk
ImportError: No module named gtk

直接使用 pip install 出現,

$ pip install pygtk
Collecting pygtk
  Using cached pygtk-2.24.0.tar.bz2
    Complete output from command python setup.py egg_info:
    ********************************************************************
    * Building PyGTK using distutils is only supported on windows. *
    * To build PyGTK in a supported way, read the INSTALL file.    *
    ********************************************************************

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/bn/73_b2959181dz267sk7x5y080000gp/T/pip-build-g0KAka/pygtk/

所以使用 brew install gtk pygtk

(mypython) peicheng@IronMan[~/workarea/openxenmanager]{10:49}
$ brew install gtk
(mypython) peicheng@IronMan[~/workarea/openxenmanager]{10:49}
$ brew install pygtk
(mypython) peicheng@IronMan[~/workarea/openxenmanager]{10:49}
$ python openxenmanager
Traceback (most recent call last):
 File "openxenmanager", line 23, in <module>
   import gtk
ImportError: No module named gtk

安裝好還是有這個訊息,環境下是有使用 virtaulenv的 brew install 的 packages 在另外一個目錄下,
切到 virtualenv  的 site-packages 的路徑下

cd /Users/peicheng/env/mypython/lib/python2.7/site-packages

ln -s /usr/local/lib/python2.7/site-packages/gtk-2.0 ./gtk-2.0
ln -s /usr/local/lib/python2.7/site-packages/pygtk.pth pygtk.pth


這樣就可以正常使用了

2017年2月16日 星期四

[linux] crontab using date as variable in command / crontab 中使用 date 當參數


有個需求是定期的 export ga 資料到 Amazon s3 上,在使用 Amazon EMR 做分析。

# export ga
0 0 * * * /bin/bash /home/ec2-user/ga_fetcher/put_data_to_s3.sh `date -d "yesterday" +"%Y%m%d"` > cron_export_ga.log
本來使用這樣的設定,在 bash 下跑過也可以正常執行。
看了 cron 的 log
$ sudo cat /var/log/cron | grep put_data

Feb 16 06:16:01 ip-10-0-3-153 CROND[19830]: (ec2-user) CMD (/bin/bash /home/ec2-user/ga_fetcher/put_data_to_s3.sh `date -d "yesterday" +")
發現 crond 的 command 只抓到 +

其實遇到 % 需要 escape ,在前面加上 \ 解決問題。

$ crontab -l
# export ga
0 0 * * * /bin/bash /home/ec2-user/ga_fetcher/put_data_to_s3.sh `date -d "yesterday" +"\%Y\%m\%d"` > cron_export_ga.log


Feb 16 06:19:01 ip-10-0-3-153 crond[2546]: (ec2-user) RELOAD (/var/spool/cron/ec2-user)
Feb 16 06:19:01 ip-10-0-3-153 CROND[19845]: (ec2-user) CMD (/bin/bash /home/ec2-user/ga_fetcher/put_data_to_s3.sh `date -d "yesterday" +"%Y%m%d"` > cron_export_ga.log)

2017年2月14日 星期二

[linux][shell script] 使用 date 來取得前一天的日期



因為有些機器的時區不同,在server 上又不想調整系統的時間設定。
如果想定期的作業一些事情,可以使用這樣的方式。

每天去處理昨天的產生的資料。


[ec2-user@ip-10-0-3-15 ga_fetcher]$ date
二  2月 14 03:23:36 UTC 2017

[ec2-user@ip-10-0-3-15 ga_fetcher]$ date -d 'yesterday' +%Y%m%d
20170213

如此一來,我們每天UTC time 00點,再處理昨天的資料。


2017年2月13日 星期一

[TED]紹恩.阿克爾 (Shawn Achor): 優質工作的快樂秘訣 | TED Talk



紹恩.阿克爾 (Shawn Achor): 優質工作的快樂秘訣 | TED Talk | TED.com
https://www.ted.com/talks/shawn_achor_the_happy_secret_to_better_work?language=zh-tw

我們相信工作會帶來幸福快樂,但是能不能反過來想呢?心理學家紹恩.阿克爾在TEDxBloomington,以緊湊又有趣的演說主張:其實是快樂激發生產力。

看過這個Talks幾次每次都有不同的收穫,
當你腦內分泌多巴胺時,你會覺得更快樂,更容夠適應世界。
這裡有提供一個簡單的訓練方式,
  1. 每天寫下3件感激的事
  2. 每天3件新事
  3. 連續21天
腦部開始記住這個模式。
先從正面掃描世界,而不是先看負面。


"但其實我們的腦子是以相反的方式在運作的 如果你可以提升一個人目前的積極程度 那麼他的腦子會經歷 我們稱之為"快樂優勢"的感覺 就是當你的腦部處於積極狀態 會比消極時、中立時或者處在壓力時 顯著表現更好 你的理解力提升,你的創造力增加,你的活動力也升高 事實上我們發現 每一種業務成效都進步了 你的創造力在你的腦部處於積極狀態時, 會比處於消極、中立,或者有壓力時,提高31% 銷售量提高37% 醫師如果感覺積極時, 會比處於消極、中立,或者有壓力時, 看診速度快19%,接下來的診斷也更精準 所以說我們要把公式反過來寫 如果我們可以找到讓當下就很積極的方法 那麼我們的腦子就會更靈活 我們就可以更努力、更快的工作,而且更明智。

我們需要想辦法把公式反過來寫 我們才能開始想像我們的腦子 到底能做到什麼地步 因為在你感覺積極時 多巴胺會大量湧入你的身體裡 而多巴胺有兩種功能 它不但讓你感覺更快樂 它還會把你腦內所有的學習中心打開 讓你能以不同的方法適應這個世界。

我們發現有方法可以訓練你的腦部 讓它能變的更積極 只要每天兩分鐘連續做21天 我們確實可以讓你的腦子重新連結 讓你的腦部運作 更樂觀更成功 目前我們在每一個與我合作的公司 以練習這件事做研究 讓他們的員工寫下3件他們感激的事 每天3件新事,連續21天 計劃終了時 他們的腦部開始記住這個模式 先從正面掃描世界,而不是先看負面。

回想一下過去24小時 你所經歷的一件正面的事 讓你的腦子重溫一次這種感覺 就像運動讓你的腦子知道你的行為很重要 我們發現沈思會讓你的腦部 克服我們創造的文化過動症 就是試著在同一時間內多工 沉思讓我們的腦子每次只專注一件工作 然後最後,偶行小善就變成隨時行善 有些人一打開電子信箱 就會寫一封充滿正面話語的電子信 讚美或是謝謝在他們社交群中的某人。

藉由做這些活動 藉由訓練你的腦子 就像我們訓練我們的身體 我們發現我們可以讓 幸福與成功關係的公式倒著寫 這麼做不但會激起正面的漣漪 還能創造真正的革命"


[哲學思想] 謝哲青:我欣賞的女孩子, 就是獨立, 然後善良; 但是要世故。


哲青在一個訪問中提到他的愛情觀,

"我欣賞的女孩子,就是獨立,然後善良;但是要世故。
很少人會把世故,
放在條件裡面對不對?
因為我認為,善良世故的人,
他才能夠保護家,也可以保護自己,
如果你是善良又天真的人,
沒有辦法,真的"

以前看過這個報導還沒有這麼深刻的體驗,
現在終於知道,原來這是多麼深刻的描繪。

"我欣賞的女孩子, 就是獨立, 然後善良; 但是要世故。"


Sophisticated Lady:世故正好,天真一點不剩 | 互動玩娛樂 | 圖表看時事 | 時事話題
http://theme.udn.com/theme/story/6776/2269132
謝哲青的世故 @ RainDog :: 痞客邦 PIXNET :: http://raindog.pixnet.net/blog/post/30097637-%E8%AC%9D%E5%93%B2%E9%9D%92%E7%9A%84%E4%B8%96%E6%95%85

[aws] 跨帳號取用 s3 資源 how to access s3 in the cross-account policy


想要存取跨越不同帳號的 s3 ,應該怎麼設定呢?

有個數據分析的需求是,資料定期的整理到 B 帳號的 s3 上。但是,一般分析是使用 A 帳號的 s3 。


0 .
使用 B 帳號建立好 s3 bucket



可以在 Edit bucket policy  設定

以下是是一個範例 可以代換 accountAid 跟 my-table


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "myconfig",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountAid:root"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-table/*"
},
{
"Sid": "myconfig",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountAid:root"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-table"
}
]
}

這樣便設定好讓 A 帳號也可以讀取 B 帳號建立的 s3 bucket


可以使用 s3 指令驗證


$ aws s3 ls s3://my-table --profile accountA
2017-02-13 15:31:50          6 mytest


$ aws s3 cp /tmp/mytest s3://my-table/zzz --profile accountA
upload: ../../../tmp/mytest to s3://my-table/zzz


awscli 多重 profile 可以加在 ~/.aws/credentials

[accountA]
aws_access_key_id = aaaaa
aws_secret_access_key = bbbb
region = us-west-1



詳細的文章資料可以參考 Amazon 上的文件
Example 2: Bucket Owner Granting Cross-Account Bucket Permissions - Amazon Simple Storage Service
http://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html



[git] how to revert the first commit 怎麼 revert 第一個 HEAD commit



一般在提交後,想要做 revert 上一個 commit
使用 git reset HEAD^

但是在只有 第一個commit 下,可能會遇到下面問題

* f1a6389 - (16 minutes ago) init - PC (HEAD -> master, origin/master)

$ git reset HEAD^
fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'


使用下面語法,藉由直接刪除 HEAD ,回復到還沒有 commit 的狀態。

git update-ref -d HEAD


修改後 強制推到遠端 (請小心並清楚知道現在在做什麼)

git add yourfiles
git commit -m 'init'
git push origin master -f


2017年1月19日 星期四

how to solve port is already in use 怎麼解決



連續啟動某個程式,發現之前的 port 還在使用沒有正常釋放。
port is already in use

可以使用

netstat -anp tcp | grep 5000

看一下 pid 在 kill -9 pid

如果沒有 p 這個 option

可以使用

lsof -i tcp:5000