2016年12月28日 星期三

高等遊民的意思



高等遊民,是日本明治時代至昭和初期大學畢業後沒就業學生的稱呼,他們以閱讀為主要活動,政府認為他們無所事事,容易接觸自然主義社會主義無政府主義等危險思想。
高等遊民以讀有興趣的書為主要活動,很多人最後成為作家,如夏目漱石石川啄木川端康成
最終在昭和初期,因對中戰爭和一系列對外戰爭帶來的戰爭景氣和國家總動員法實行,就職困難開始解決。


2016年12月27日 星期二

[tech_note] firebase push id Unique Identifiers method guid 產生方法


The Firebase Blog: The 2^120 Ways to Ensure Unique Identifiers https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html

昨天剛好看到一篇 firebase 提到,怎麼產生不重複的 guid的方式。


What's in a Push ID?

A push ID contains 120 bits of information. The first 48 bits are a timestamp, which both reduces the chance of collision and allows consecutively created push IDs to sort chronologically. The timestamp is followed by 72 bits of randomness, which ensures that even two people creating push IDs at the exact same millisecond are extremely unlikely to generate identical IDs. One caveat to the randomness is that in order to preserve chronological ordering if a client creates multiple push IDs in the same millisecond, we just 'increment' the random bits by one.
To turn our 120 bits of information (timestamp + randomness) into an ID that can be used as a Firebase key, we basically base64 encode it into ASCII characters, but we use a modified base64 alphabet that ensures the IDs will still sort correctly when ordered lexicographically (since Firebase keys are ordered lexicographically).

使用 timestamp + randomness 在使用 base64 encode 而成,實作上,只要是產生的時候, timestamp 還沒改變,就把最後一個 bit +1 。 
這些gits 是個版本的實作方式。
JavaScript code for generating Firebase Push IDs https://gist.github.com/mikelehen/3596a30bd69384624c11
Firebase push algorithm in Python (ref: https://www.firebase.com/blog/2015-02-11-firebase-unique-identifiers.html) https://gist.github.com/risent/4cab3878d995bec7d1c2


ref
[tech_note] hackpad 的 unique padid 產生方式 / etherpad 與 appjet - peicheng note
http://peichengnote.blogspot.tw/2015/10/technote-hackpad-unique-padid-etherpad.html
Parse.com ObjectId 產生方法 unique id - peicheng note http://peichengnote.blogspot.tw/2016/01/parsecom-objectid-unique-id.html

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.

2016年7月26日 星期二

[git] 開發中 rebase 拉取新的程式碼



開發中不想把修改的部份 commit ,怎麼使用 rebase 抓取新的程式碼


  • 把修改的檔案加到 stage

    git add . 

          git commit -m 'add to stash'


  • 使用 pull --rebase 拉取新的程式碼

    git pull --rebase origin master 


途中可能要解決一些 conflict 問題


  • 最後

    git reset HEAD~1 
把自己的最後一次 commit reset 掉,並保留更新的內容。






2016年7月13日 星期三

[docker] run s3 on Ceph in docker containers 在 docker 來執行 s3 ceph



怎麼使用 docker 來執行 ceph 呢?

ceph 官方有提供一個可以很快搭建開發環境的 docker container

ceph-docker/ceph-releases/jewel/ubuntu/14.04/demo at master · ceph/ceph-docker
https://github.com/ceph/ceph-docker/tree/master/ceph-releases/jewel/ubuntu/14.04/demo


先 ifconfig 看一下目前自己ip

docker run -d --net=host -v /etc/ceph:/etc/ceph -e MON_IP=10.1.193.59 -e CEPH_PUBLIC_NETWORK=10.1.193.0/24 ceph/demo

# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
662e2c899f4c        ceph/demo           "/entrypoint.sh"    35 minutes ago      Up 35 minutes                           tender_carson

為了執行 s3 ceph 所以使用  radosgw 來建立user 取得 access_key 與 secret_key

 # radosgw-admin user create --uid="pc" --display-name="pc"          
2016-07-13 12:08:14.244392 7f1bb4069900  0 RGWZoneParams::create(): error creating default zone params: (17) File exists
{
    "user_id": "pc",
    "display_name": "pc",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "auid": 0,
    "subusers": [],
    "keys": [
        {
            "user": "pc",
            "access_key": "F47DG9NWH4HNMZ06EAYD",
            "secret_key": "9FdywQQltiJHrHuOwfRtDE0HVc6exIAJZ1PHjLDa"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    },
    "temp_url_keys": []
}


可以撰寫一個簡單的s3 程式

Python S3 Examples — Ceph Documentation 

import boto
import boto.s3.connection
access_key = 'put your access key here!'
secret_key = 'put your secret key here!'

conn = boto.connect_s3(
        aws_access_key_id = access_key,
        aws_secret_access_key = secret_key,
        host = 'objects.dreamhost.com',
        #is_secure=False,               # uncomment if you are not using ssl
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )

conn.create_bucket('my-new-bucket')

for bucket in conn.get_all_buckets():
    print bucket
這樣就可以看到有create bucket了

2016年7月1日 星期五

[elasticsearch]Rollover API and Shrink API 更好的管理 time-based event data Elastic Stack Release - 5.0.0-alpha4


Elastic Stack Release - 5.0.0-alpha4 令人振奮的提供了兩個對於 time-based index 更友善的API 。

New Rollover API and Shrink API makes managing indices for time-based event data much easier



Rollover Index


Rollover Index | Elasticsearch Reference [master] | Elastic
https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-rollover-index.html

The rollover index API rolls an alias over to a new index when the existing index is considered to be too large or too old.

可以使用這個 rollover api 定義時間(max_age)或者是  資料的筆數 (max_docs) ,當條件符合時,就會根據規則自己建立新的 index 。



PUT /logs-0001 
{
  "aliases": {
    "logs_write": {}
  }
}

POST logs_write/_rollover 
{
  "conditions": {
    "max_age":   "7d",
    "max_docs":  1000
  }
}

 1.  建立一個新的 index 並指定 alias 為 logs_write
 2.  設定 當 index 被建立了七天,或是文件數超過 1000 就會建立新的 index 。並且命名為 logs-0002

這裡是 POST 的 response 
{
  "old_index": "logs-0001",
  "new_index": "logs-0002",
  "rolled_over": true, 
  "dry_run": false, 
  "conditions": { 
    "[max_age: 7d]": false,
    "[max_docs: 1000]": true
  }
}


index naming 的規格就是 使用 - 分隔 ,後面的數字會自行遞增。


Shrink index API

Shrink Index | Elasticsearch Reference [master] | Elastic
https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-shrink-index.html
另外一個 api 就是 shrink api
The shrink index API allows you to shrink an existing index into a new index with fewer primary shards.

如果你想變更 primary shard 的設定,可以去自動的去幫你建立一個新的 index 。


Shrinking works as follows:
  • First, it creates a new target index with the same definition as the source index, but with a smaller number of primary shards.
  • Then it hard-links segments from the source index into the target index. (If the file system doesn’t support hard-linking, then all segments are copied into the new index, which is a much more time consuming process.)
  • Finally, it recovers the target index as though it were a closed index which had just been re-opened.

這邊有個值得注意的地方就是shrink 過的index 每個shard 不能超過 2,147,483,519 documents  。


  • The index must not contain more than 2,147,483,519 documents in total across all shards that will be shrunk into a single shard on the target index as this is the maximum number of docs that can fit into a single shard.

首先,要先確定cluster 的 health 是 green , index 要被改成 read only ,且要把index的所有shard 搬到同一台node 上才能進行。
這兩個要求可以透過下面的 request 達到。
index.blocks.write 設成 true 是還是允許 delete 的這種改變metadata的操作。

PUT /my_source_index/_settings
{
  "settings": {
    "index.routing.allocation.require._name": "shrink_node_name", 
    "index.blocks.write": true 
  }
}


當 shard 搬移完成後,可以就可以使用 shrink api

POST my_source_index/_shrink/my_target_index


要觀察這些狀態,可以使用   > curl -XGET 'localhost:9200/_cat/recovery?v'

elasticsearch 加上了這兩個 api ,
對於 index time base 的資料的使用者,方便性又更加的提升了。


2016年6月27日 星期一

[武術] 160627 (一) 太極拳能養生但要練得正確


今天晚上參加了永和社大的一場演講,
是由 鄭子太極拳名家 吳嘯老師的課。

吳老師有講解他的習拳心得,跟示範一些勁法與拳架的配合。

印象很深的點,在於 他放了葉問的圖,來講落跨。
甚至示範說,跨往前推自然就發勁。

重心轉移發勁的概念,跟溫師兄所說的方式相同,不過這次沒有機會體驗一下吳老師的勁法。

以前在練拳時,老師不讓他們當場做筆記,就是要聽課時能夠集中注意力。

方法掌握,就能在拳架上面配合。

特別強調鳥伸

很多原理講明了,其實都很容易做出來。

還有提到怎麼解析,鄭子的雙按,與打拳的形式。
怎麼形成一個立圓。

前手不動,後手動,甚至整個腰跨作用。

開胸 就像是水壩一樣 u 才能擋住力量
肘如果開一點,別人來力,往後一點,也不會受到影響。但是你外表也涵胸,而不是先開胸,在往內涵胸,就會被發出去。

值得注意的是,吳老師發勁的身形與站姿,開胸與重心鳥伸前移,前手不動後手發。



練對太極才能養生2016-06-27 ,其他運動類, 免費課程/活動, - BeClass 線上報名系統 Online Registration Form
http://www.beclass.com/rid=193a05f5756e28c4dabc
永和社大: 開放的一堂課
主題: 太極拳能養生但要練得正確
時間 : 6月27日(星期一)晚上7時30分
地點 : 福和國中 大韻律教室
鄭子太極拳是台灣流傳最普遍的太極拳,其鬆柔舒展更有助養生。但若僅由學習外顯的「拳架」,而未能掌握鄭子太極拳精華的「內涵」。不僅事倍功半,也對養生效益大打折扣。講座將揭開鄭曼青太極拳的奧秘,並配合解說與動作示範,效果立能體驗。內容不是一般習見的拳架解說,有心拳友絕不能錯過。
【參加者贈送:鄭曼青大師拳劍勁法光碟】
新北市永和區永利路71號


虛實分清 根本基礎
重心與圓
體用合一

不失重心 勁源
丹田是核心 主宰於腰
節節貫穿 筋張是賴

落跨
如何步隨身換

迷時師渡 悟時自渡
拆開練



2016年6月20日 星期一

[電影] 奮鬥 被人嘲笑的夢想 就越有實踐的價值


很難想像我在多年後,再重拾 奮鬥 這個系列。

《奮鬥》是導演馬偉豪執導的一部電影,該片根據同名小說《奮鬥》改編而成,由李晨,董璇等主演,該片定於2011年4月2日全國上映。 該片描述了一群善良、勇敢與堅持的年輕人勇於奮鬥,並最終在生活中找到自己位置的故事。

奋斗(2011年马伟豪导演电影)_百度百科
http://baike.baidu.com/subview/54021/5450252.htm
到現在還很有印象的 , hua 當年在北京,跟我說的趙寶剛執導的《奮鬥》《我的青春誰做主》《北京青年》被稱為“青春三部曲”。 

奮鬥的電視劇我應該也還沒補齊,這次就從我的青春誰作主開始回味一下。

看到奮鬥的場景與對白,最一直與最近在內心深處的問題相互回應。
當年,說下的那些夢想,今日,我要實踐下了幾分。

說真的,挺還念之前在北京的日子。



奋斗 - 在线观看 - 电影 - 乐视视频

  • 奮鬥
    • 被人嘲笑的夢想 就越有實踐的價值
    • 來日方長 海闊天空
出现在电影《奋斗》中的咖啡馆——苏州魔方LOFT_视频在线观看 - 56.com
乐视直播-乐视轮播台在线观看-乐视直播频道_轮播台-乐视网
《奋斗》外景地、拍摄地点汇总,非常全,有空实地考察看看 – 【人人分享-人人网】
魔方LOFT | MOFUN, your lounge LOFT!
http://www.loftmofun.com/fendou.htm