2016年12月26日 星期一

[電影] 火線掏寶 War Dogs




火線掏寶》(英語:War Dogs,前稱作Arms and the Dudes)是一部於2016年上映的美國傳記犯罪戰爭喜劇片,由陶德·菲利普斯執導,並和史考特·巴德尼克布萊德利·庫柏、布萊恩·祖里佛共同監製,而劇本則由菲利普斯、史蒂芬·欽、傑森·斯米洛維奇共同負責。電影改編自蓋·羅森在《滾石》上撰寫的文章《Arms and the Dudes》[3]。由麥爾斯·泰勒喬納·希爾分別飾演主角大衛·帕克歐茲伊弗倫·佛羅里,其他主演包括安娜·德哈瑪斯J·B·布蘭克
《火線掏寶》於2016年8月19日在美國上映。

故事改編自真人真事。主要敘述於07年冬天,兩個從未上過戰場的年輕軍火商人大衛和伊弗倫為了想要一夜致富而接受了美軍和阿富汗的軍火招標,但兩人很快察覺到自己將深陷於危機之中,這使得他們必須想辦法平安回家。


抓準機會跟把握時機,還有人面對一些誘惑的時候又會怎麼去應對。



2016年12月23日 星期五

Titan Gremlin Server start http rest server solve "not a WebSocket handshake request: missing upgrade”




Titan 1.0 配置好啟動後,如果出現
“not a WebSocket handshake request: missing upgrade”
其實預設是啟用 WebSocket 的

如果要啟用 Gremlin  server 的 http interface

可以在下面 file 註解到websocket channel 增加這行 啟動 HttpChannelizer

 conf/gremlin-server/gremlin-server.yaml file:


channelizer: org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer

三年的試驗 three years startup retrospective



上一篇文章促使我開始反思,
從 2013 年聖誕節前夕,上線了一個service
一路走到可以自動營運的程度。

以前前期來說,一直投入不少時間在摸索,不過到後來真的可以驗證,這樣的模式是有一定的成效的。

這些服務,主要就是在測試一些技術性的細節。

驗證一些,人數不需要太多,但是有一定經濟的規模的商業模式。

期望,在未來的一年內,能夠基於這樣的基礎來從事新的試驗。



2016 聖誕節前夕







2016年12月22日 星期四

Derek Sivers 回復 創業的堅持


Derek Sivers  一直是我很推崇的(前)創業家

2016的年尾聲,他整理了他回答的三萬多個問題給一萬多個人的內容摘要。

In 2016, I answered 30,904 emails from 11,971 people. It was practically a full-time job. These are the most common questions.

Frequently Asked Questions | Derek Sivers
https://sivers.org/faq


有一個問題,為何我的事業或讀者沒有快速的增長?
這是個很有趣的問題跟回答,回答他的過去與看法。

CD Baby 在 還沒起飛前,他連續四年每天都工作12 ~18 個小時。
他從1994 年起,也連續不停寫作了22年。

告訴我們, Keep pushing, but be patient.

Why isn’t my business or audience growing faster?

I worked on CD Baby for 12-18 hours per day, 7 days per week, for four years before it really took off.
As for an audience, I’ve been creating and posting things online for free non-stop since 1994. Yep, that’s 22 years now. And keeping in touch with everyone I met that whole time.
Keep pushing, but be patient.


2016年12月19日 星期一

[blog] 2016 年文章發文數回顧


最近每一年都又統計回顧一下blog 的發文數
2017 的發文數截至目前加上這篇應該是 78 篇
遠遠少於去年 155篇的一半阿

由於時間的抽空與多樣的改變,導致自己也越來越隱藏對自己的感情與對話了。


 



[linux] find 找出 檔案大小是0 且 檔名長度的文件 並且刪除



找出檔案大小為零 且 檔名長度是6 的檔案

find ./ -size 0 -name "??????"

接著再混搭 xargs

find ./ -size 0 -name "??????"  | xargs -p rm -rf

使用 -p 可以先看一下執行怎樣的 command

確認無誤後使用

find ./ -size 0 -name "??????"  | xargs rm -rf

2016年12月6日 星期二

[docker] how to install docker on Ubuntu 16.04 如何在 Ubuntu 16.04 安裝 Docker



如何在  Ubuntu 16.04  安裝 Docker
在 EC2 上啟用了一台新的 instance ,透過下面步驟安裝 docker 的環境


  • uname -r
    確認一下  kernel version 是在 3.10 以上,不過這個在 16.04  上預設是必然的
  • sudo apt-get update
  • sudo apt-get install apt-transport-https ca-certificates
  • sudo apt-key adv                --keyserver hkp://ha.pool.sks-keyservers.net:80                --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
  • echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
    增加 source list 並且 更新
  • sudo apt-get update
  • apt-cache policy docker-engine
    驗證一下 apt 來源是否是正確的
  • sudo apt-get update
  • sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
  • sudo apt-get update
  • sudo apt-get install docker-engine
  • sudo service docker start
  • sudo docker run hello-world
  • sudo docker ps

[influxdb] select MEASUREMENT ERR: error parsing query: found FROM, expected identifier at line 1, char 15





使用 influxdb  command line 要 select MEASUREMENT 時

ERR: error parsing query: found FROM, expected identifier at line 1, char 15
> select * from foo2.counter
ERR: error parsing query: found foo2.counter, expected identifier at line 1, char 14


原來是要加上 double quote

> select value from "foo2.counter"
name: foo2.counter
------------------
time value
1480992498000000000 2


select MEASUREMENT ERR: error parsing query: found FROM, expected identifier at line 1, char 15


[0.9.2] (regression) Error reading from measurement named "Measurement" · Issue #3467 · influxdata/influxdb
https://github.com/influxdata/influxdb/issues/3467

2016年11月21日 星期一

[mac][vim] error: There was a problem with the editor 'vi'. Please supply the message using either -m or -F option.


遇到

error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.


使用

$ git config --global core.editor

指定編輯器

2016年11月13日 星期日

[mac] mac 使用 android 的 usb 網路共用




除了使用 手機的無線基地台功能,也可以透過 usb網路共用的設定分享網路出來。



只要裝了

HoRNDIS: USB tethering driver for Mac OS X | Joshua Wise's domain
重開機後, android 手機插入電腦 開啟 usb網路共用 如果有讀取到就可以使用網路。




2016年11月11日 星期五

[哲學思想] 你為了什麼工作的呢 ? 重版出來



這幾張圖示最近在 看日劇 "重版出來" 所節錄下來的





今天整理了北京的照片,心理才想著

  • 好像時光回溯,之前回來的幾個心得
    • 他們只是比我們知道什麼時候該做什麼事情,並且好好去做
    • 很多事情要立即的去做



2016年11月9日 星期三

[python] datetime string with timezone to timestamp 轉換有時區的時間字串到時間戳



有個需求是把 時間字串轉成 epoch 的 timestamp

這個字串來說 "2016-11-07 15:47:33" UTC+8
轉換成 iso 8601 表示的話

2016-11-07T15:47:33+08:00

轉成 timestamp就是  1478504853


int((datetime.strptime(t, "%Y-%m-%d %H:%M:%S") - timedelta(hours=8)).strftime("%s")) - time.timezone

不使用其他lib的思路如下,先把 time string parse成 datetime object ,
但是因為UTC +8 跟 UTC 差了八個小時 ,所以減去 timedelta 八小時 ,就是UTC 的datetime string 。

是使用 strftime 轉成 timestamp 時,會因為環境的timezone設定有影響, 會以為這個 datetime object 是 目前的 timezone 所以,再減掉 time.timezone。
就得到最後的 timestamp。


>>> t
'2016-11-08 11:50:21'
>>> int((datetime.strptime(t, "%Y-%m-%d %H:%M:%S") - timedelta(hours=8)).strftime("%s")) - time.timezone
1478577021
>>> time.timezone
-28800



另外一個使用 pytz 的作法


import pytz
from datetime import datetime,timedelta

tp_timezone = pytz.timezone('Asia/Taipei')
tsd = datetime.strptime(t, "%Y-%m-%d %H:%M:%S").replace(tzinfo=tp_timezone)
timestamp = int(tsd.strftime("%s"))





2016年10月31日 星期一

[mac] 移除已經安裝的印表機驅動程式 remove mac printer driver



位置在 /Library/Printers/PPDs/Contents/Resources

看看要移除哪些

example

移除所有的  Fuji Xerox 驅動程式

rm -rf FX*

and

rm -rf Fuji\ Xerox\ *

[mac] install fx printer driver for mac os x 使用 fujixerox 印表機的驅動程式



使用 Fuji Xerox 的 printer ,從  web console 看起來是 ApeosPort-V C3374 。
可是裝了 mac 的 Fuji Xerox 印表機驅動程式 v3.0 (OS X) 選了對應型號也是無法使用。
https://support.apple.com/kb/DL1776?locale=zh_TW



從 air printer 自己選擇的driver 來看確實是 Fuji Xeror 的機器沒錯 但是使用不同的 driver 。





a在加入新的 printer 時 ,輸入ip後他會幫你選擇使用的driver ,這時候自行選用 fx printer driver for mac os x (下方有下載網址)




Print Driver for Mac OS X : Description : Download : Fuji Xerox

使用了這個 driver 就可以在 mac 上 使用 fuji xerox 的印表機了。






2016年10月21日 星期五

[elasticsearch] elasticsearch indexing throughput 單機每秒索引超過四萬筆資料

先講結論, elasticsearch 單機每秒可以索引超過四萬筆資料。

以前我們架設完自己的 elasticsearch cluster 會自己做一下 benchmark ,但是遇到同樣使用 elasticsearch的朋友,在描述各自的 indexing throughput 或是 query performance ,就比較難真實的評比出來。

後來有了 Rally ,幫助我們怎麼做出一致的 benchmark參考值。
elastic/rally: Macrobenchmarking framework for Elasticsearch
https://github.com/elastic/rally

根據一樣的 setting file 各自可以做出屬於自己 cluster的對照數據。
rally-tracks/track.json at master · elastic/rally-tracks
https://github.com/elastic/rally-tracks/blob/master/geonames/track.json


目前 elastic 使用了 rally 做了
Elasticsearch Nightly Benchmarks
https://elasticsearch-benchmarks.elastic.co/geonames/index.html

Elasticsearch Nightly Benchmarks
https://elasticsearch-benchmarks.elastic.co/index.html


All benchmarks are run on a bare metal machine with the following specifications:

2016年10月17日 星期一

[hadoop][EMR][hive] 自動建立 hive 的 partition , automatically partition hive external table on amazon S3



使用 AWS 上有 Hadoop  Cluster service   Apache EMR  。

Hive 的 table 有兩種,一種是 把 data 放在 hive 資料夾下,另外一種稱作 external table,也就是說,把data  放在非 hive 預設的資料夾下。

舉例來說,如果 hive的 預設資料夾在 hdfs 上的 /user/hive/warehouse 下,create table 後可以使用 load data inpath 載入檔案,資料會搬到這個資料夾下面。

但是,如果使用了其他分析工具,如 mapreduce , spark ,pig ... 分析完後,有時候是放在另外的資料夾下。如果不直接搬移過來這個資料夾,可以使用 create external table ,來讓資料存放在其他資料夾下,但是只是在 hive metastore 設定說,有這個 table的資料放在哪個資料夾下。


在 Amazon EMR 上就提供了從 s3 :// 上 讀入檔案的方式,所以,大量分析需求的時候起了一些EMR  ,把資料算完後放在 S3 上。當下次有需要大量分析時,再使用 create external table  的方式讀取放在s3上的資料。


Hive 中有個加速資料處理的方式,稱作 partition ,簡單來說就是,可以透過 partition 的條件設定,讓 Hive 需要處理的資料便少。

像是有根據時間一直增加的這種資料類型,一般來說都是要分析某個區間的資料。
如果大部分情況都是以天來做分析,就可以把 日期拿來建立 partition 欄位,使用這個機制來減少要處理的資料。


資料從外部處理完後,按造日期每天放入 S3 上的資料夾,來供 hive 使用。



CREATE EXTERNAL TABLE IF NOT EXISTS posts (
`id` int ,
`date` string ,
`pid` int ,
`country` string ,
`placement` string ,
`type` string ,
`count` double ,
`updated` timestamp
)
PARTITIONED BY (day string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 's3://mys3-table/posts';


而我在 s3上 的資料夾 naming 規則就是如此, partition 欄位其實就是個 資料夾命名規則,
"day="

s3://mys3-table/posts/day=20161016/posts_ 20161016
s3://mys3-table/posts/day=20161017/posts_ 20161017

當資料放好後,
使用 hive -e "msck repair table posts;"
就可以在 hive 內看到隸屬該 partition 的資料了。








2016年9月29日 星期四

[python] requests/utils.py", line 800, in check_header_validity "not %s" % (value, type(value)))


[python] requests/utils.py", line 800, in check_header_validity "not %s" % (value, type(value)))


$ pip freeze | grep requests
requests==2.11.1

requests 的 header 如果帶有 int 的 type 現在會出現這樣的 error

原因是

 this is the intention of this check. All header values must be passed as strings in Requests.

RFC states that headers are char strings

Is there a cross-reference link to the specification or RFC for prohibiting non-string values? According to RFC7230 §3.2, the BNF for header field values is:

 RFC 7230 其實是不接受 non-string 的 values 的


Utils.check_header_validity fails on integer values · Issue #3559 · kennethreitz/requests
https://github.com/kennethreitz/requests/issues/3559
check for headers containing return characters by nateprewitt · Pull Request #3366 · kennethreitz/requests
https://github.com/kennethreitz/requests/pull/3366


2016年8月31日 星期三

[docker] docker: Error response from daemon: Conflict. The name "" is already in use by container



docker run --name test -e MYSQL_ROOT_PASSWORD=hello -d mysql:5.6

docker: Error response from daemon: Conflict. The name "/test" is already in use by container

使用 docker run 出現 這樣的訊息,因為上次的異常結束 docker ps 可能看到空的

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES


使用 docker ps -a

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
e60e7335dbb6        mysql               "docker-entrypoint.sh"   34 hours ago        Exited (1) 2 minutes ago   3306/tcp            test
d7de7777925f        ubuntu              "/bin/bash"              35 hours ago        Exited (0) 34 hours ago                        angry_bohr


$ docker start e60e7335dbb6
e60e7335dbb6

$ docker exec -it e60e7335dbb6 /bin/bash

或是使用 docker rm 去移除 container

$docker rm e60e7335dbb6

or

$docker rm -f e60e7335dbb6

2016年8月17日 星期三

[elasticsearch] high performance elasticsearch configuration 設計配置


底下列出一份經過tuning 過的 elasticsearch configuration

/etc/elasticsearch/elasticsearch.yml

  • cluster.name: estic12
    • which is used to discover and auto-join other nodes
  • node.name: "pcnode1"
    • You may also want to change the default node name for each node to something like the display hostname. By default Elasticsearch will randomly pick a Marvel character name from a list of around 3000 names when your node starts up
  • node.master: true
  • node.data: false
    • dedicated master nodes
  • path.data: /spare3
    • The location of the data files of each index / shard allocated on the node. Can hold multiple locations.
    • Note, there are no multiple copies of the same data, in that, its similar to RAID 0. Though simple, it should provide a good solution for people that don’t want to mess with RAID. Here is how it is configured:
      • path.data: /mnt/first,/mnt/second
      • Or the in an array format:
        • path.data: ["/mnt/first", "/mnt/second"]
  • discovery.zen.ping.multicast.enabled: false
  • discovery.zen.ping.unicast.hosts: ["tic12-a42.trendmicro.com", "tic12.trendmicro.com", "tic12-a45.trendmicro.com"]
    • The zen discovery is the built in discovery module for elasticsearch and the default. It provides both multicast and unicast discovery as well being easily extended to support cloud environments.

  • threadpool.bulk.type: fixed
  • threadpool.bulk.size: 100
  • threadpool.bulk.queue_size: 320
    • For bulk operations, defaults to fixed size # of available processors. queue_size 50.
    • The fixed thread pool holds a fixed size of threads to handle the requests with a queue (optionally bounded) for pending requests that have no threads to service them.

  • discovery.zen.minimum_master_nodes: 2 #(es_node_num)/2 +1
    • sets the minimum number of master eligible nodes that need to join a newly elected master in order for an election to complete and for the elected node to accept its mastership.
  • indices.memory.index_buffer_size: 30%
    • The indexing buffer setting allows to control how much memory will be allocated for the indexing process.
    • accepts either a percentage or a byte size value. It defaults to 10%, meaning that 10% of the total memory allocated to a node will be used as the indexing buffer size.
  • index.translog.flush_threshold_ops: 50000
    • Each shard has a transaction log or write ahead log associated with it. It allows to guarantee that when an index/delete operation occurs, it is applied atomically, while not "committing" the internal Lucene index for each request.
    • After how many operations to flush.
  • index.refresh_interval: 30s
    • The async refresh interval of a shard.
    • How often to perform a refresh operation, which makes recent changes to the index visible to search.