Basic Tmux Config

tmux scripts

Tmux is a server/client application, with a socket working in background and can support may sessions, windows and panes.

Tmux is to console as what a desktop to GUI

  • multiple task in the terminal, run many tasks in separate panes.
  • panes can be tiled in windows, and windows can be further grouped in sessions, just like current GUI support many virtual desktops
  • server
  • A unix socket server, on my macbook the default socket file is located in
    /private/tmp/tmux-502/default

    , or you can specify a different socket file with options:

    -L "socket-file-name"

    or

    -S "socket-file-path"
  • client
  • A client can attach to any tmux socket to operate on a certain session.
  • session
  • window
  • pane
  • target
  • tmuxp

 

server


tmux -L moo
#start a new tmux server + session if non-exists under the socket name “moo”. With this command we create a local socket file 'moo'

tmux -L moo attach
#try to re-attach to session if one exists

client and session are different, but closely related. client has one status line, and session have a attached state.


tmux list-client
/dev/ttys000: 0 [134x47 xterm-256color] (utf8)
/dev/ttys002: 0 [134x47 xterm-256color] (utf8)
tmux list-sessions
0: 1 windows (created Tue Jan 17 09:47:13 2017) [134x46] (attached)
1: 3 windows (created Tue Jan 17 10:03:40 2017) [134x46]

sessions


tmux
# is the same as 'tmux new-session
tmux new-session -s"my clojure project"
shortcut action
Prefix + ( previous session
Prefix + ) next session
Prefix + L Last session
Prefix + s select interactively to a new session
Prefix + $ rename session

tmux switch-client -t dev
# will switch to a sesison named 'dev', if it exits.

tmux rename-session -t1 "my session"
# rename a session from '1' to 'my session'

tmux has-session -t1
# test whether there is a session named '1'

if tmux has-session -t0 ; then
echo "has session 0"
fi
# can be used in script programming

clients

To attach a client to a session, run command

tmux attach -t'session-name'

, if no

session-name

specified, choose the first session from the session list. Command

tmux list-sessions

can be used to show the session list.

A session can be attached to [0 n] clients, and some clients can be readonly(ro)


MacBook:~ lizy$ tmux list-client
/dev/ttys002: main-pane-height [154x40 xterm-256color] (utf8)
/dev/ttys012: main-pane-height [154x40 xterm-256color] (utf8)
/dev/ttys013: main-pane-height [154x40 xterm-256color] (utf8) (ro)

windows

shutcut action
Prefix + number traversing windos
Prefix + ‘ prompt for a window index
Prefix + f window’s name for text match
Prefix + , rename a window

Panes

shutcut action
Prefix + [ scroll mode
use ‘enter’ and ‘space’ to copy copy
use ‘prefix + ]’ paste
In scroll mode, use vi viusal mode to select text visual mode

session persistency

tmuxp, can freeze sessions into a .json/.yaml(yet another markup language)

pip install tmuxp

tmuxp has lots of great layout examples to start with:examples

tmux config

Default config file is located in

~/.tmux.conf

# set scroll history to 10,000 lines
set -g history-limit 10000

# use vi key binding
setw -g mode-keys vi

# don't use a login shell
set -g default-command /bin/zsh

# select certain pane
bind j select-pane -D
bind k select-pane -U
bind h select-pane -L
bind l select-pane -R

# split window
bind | split-window -h
bind - split-window -v

# adjust pane
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r H resize-pane -L 5
bind -r L resize-pane -R 5

# baord color
set -g pane-border-fg white
set -g pane-active-border-fg cyan
set -g pane-active-border-bg cyan

# status bar
set -g status-left "session: #S || window: #I || pane: #P"

tmuxp


session_name: solarsystem
start_directory: '.'
windows:
- layout: main-horizontal
options:
main-pane-height: 30
panes:
- shell_command:
- atom .
- shell_command:
- rlwrap lein figwheel
- shell_command:
- tig
window_name: "coding"

Questions

vi mode and emacs mode, how to config, which one to use?

reference

https://leanpub.com/the-tao-of-tmux/read

http://perltricks.com/article/an-introduction-to-tmux/

在Ubuntu 16.04 LTS 安装 Cassandra

综述

Apache Cassandra 是一个免费开源的分布式NoSQL数据库,专门用来应对超大量数据分布于多节点多机房的场景,能够提供高可用性服务(HA),没有单一失败节点(SPF), 本文介绍了两种安装方式(后续会提供基于Haier 内部的Docker Image),安装于Ubuntu 16.04

  • 从Debian在线安装包的形式(apt-get)
  • 直接下载二进制安装文件安装

依赖

包管理器的方式安装

添加 Apache Cassandra Repository

为了能够安装Cassandra,我们需要吧Apache Cassandra Repository 作为我们的一个Package source,也就是创建cassandra.source.list放到Linux的相应目录/etc/apt/sources.list.d/cassandra.sources.list. 我们增加的是 Cassandra 3.9, 也就是当前最新版本的Cassandra.

echo "deb http://www.apache.org/dist/cassandra/debian 39x main" |sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list

添加Apache Cassandra Repository Keys

curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -

如果我们企业有自己的自签名的SSL证书的话,我们可以跳过验证证书的环节:

curl -k https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -

添加Public Key

sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-key A278B781FE4B2BDA

|

更新 Repositories

sudo apt-get update

安装 Cassandra

Issue the following command to install Cassandra and wait for a moment.

sudo apt-get install cassandra

管理Cassandra

自启动

sudo systemctl enable cassandra

启动服务

sudo systemctl start cassandra

停止服务

sudo systemctl stop cassandra

查看状态

nodetool status

或者

sudo systemctl status  cassandra

配置 Cassandra

安装以后,几个比较重要的目录:

  • Configuration files: /etc/cassandra
  • Logs: /var/log/cassandra/
  • Data: /var/lib/cassandra

Ubuntu 16.04 上以tar文件安装

下载

从Apache基金会网站下载 Apache Cassandra downloads website.

wget http://www-us.apache.org/dist/cassandra/3.9/apache-cassandra-3.9-bin.tar.gz

解压缩

sudo tar -xvf apache-cassandra-3.9-bin.tar.gz -C /opt/

解压缩的目录 /opt/apache-cassandra-3.9

修改权限

sudo chmod -R 777 /opt/apache-cassandra-3.9/

增加apache-cassandra-3.9/bin 到系统目录

Open the /etc/environment (you can use *nano *as below example):

sudo vi /etc/environment

最后增加一行

export export PATH="/opt/apache-cassandra-3.9/bin:$PATH"

保存退出,为了使修改生效:

source /etc/environment

管理Cassandra

手动前台启动Cassandra

/opt/apache-cassandra-3.9/bin/cassandra -f

或者:

cassandra -f

“Control-C” 停止 Cassandra

手工后台启动Cassandra

/opt/apache-cassandra-3.9/bin/cassandra

或者:

cassandra

停止 Cassandra

直接杀掉:

kill pid

pid 可以通过如下方式找到

pgrep -f cassandra

或者:

pkill -f cassandra

查看运行情况

We can verify whether Cassandra is running or not by invoking the below command:

nodetool status

Cassandra 配置

手动安装的话,配置,日志,数据的目录分别是:

  • Configuration files: /opt/apache-cassandra-3.9/conf
  • Logs: /opt/apache-cassandra-3.9/logs
  • Data: /opt/apache-cassandra-3.9/data

连接到Cassandra 集群

Cassandra 的 API是 CQL, Cassandra Query Language. 要使用CQL, 首先要登录到节点上

  • 直接使用 cqlsh,
  • 或者其他的 Cassandra 客户 driver.

使用自带的cqlsh :

cqlsh localhost
Connected to Test Cluster at localhost:9042.
[cqlsh 5.0.1 | Cassandra 3.9 | CQL spec 3.4.2 | Native protocol v4]
Use HELP for help.
cqlsh>

|

cqlsh的手册cqlsh section for full documentation.

结论

至此,我们已经成功的安装并且运行了Cassandra

P vs. NP

P vs. NP 其实是提出了这么一个问题:一个可以快速验证真伪的问题是否可以快速的求解?

P 问题指的的是可以快速求解的问题,NP问题是那些不容易求解的问题。但是NP问题有个特性,即如果你一旦找到一个解,这个解的真伪很容易验证.

P vs. NP问题的实质就是NP问题的‘不易求解’仅仅是因为我们还没有找到方法.还是有内在的复杂性.

具体说, 来个乘法:


7 * 13 = ?

如果你没算错的话,7×13=91,2年级那会你应该就会了,那下面这个呢?


? * ? = 91

是不是没那么简单了? 难度再加一点(100 位 十进制数),麻烦分解一下:


15226050279225333605356183781326374297180681149613
80688657908494580122963258952897654000350692006139

= ? * ?

如果你能算出来,而且结果下面一样的话:


15226050279225333605356183781326374297180681149613
80688657908494580122963258952897654000350692006139

=

37975227936943673922808872755445627854565536638199
×
40094690950920881030683735292761468389214899724061

恭喜你,你刚刚拿到了1000美元, 前提是你穿越到1991年以前,不过你也不要灰心,奖金额十万二十万美金的还有不少,瞅瞅悬赏榜单:

RSA整数分解悬赏

看看下面这个:


124620366781718784065835044608106590434820374651678805754818788883289666801188210855036039570272508747509864768438458621054865537970253930571891217684318286362846948405301614416430468066875699415246993185704183030512549594371372159029236099

=

?* ?

这个232位的整数分解奖金5万(美元),更妙的是这个还没有被抢答。最高2048位(二进制)617(十进制)的整数分解奖金高达20万美元,你是不是看到一套发财的金光大道?且慢,RSA不是作加密算法的公司吗,这里面一定有套路…

整数分解是个典型的NP问题,是现在密码学的基石,要不然怎么会这么难 (回忆一下去年丁凡的rsa培训…).

  • 可以挨个拿质数序列 2 3 5 7 11 …去除(查找)
  • 有啥其他更好的方法吗?

再看一下其他的NP问题

分图问题(Maximum Clique Problem)

来自于图算法,在一个图(graph)中找到一个最大的全联接(clique).

具体来说,你的朋友圈是一张图,如果我们尝试在你的朋友圈中,找到一个最大的所有的人都互相之间是朋友的子图。

找到一个最大clique,有上百个节点的图中需要几个世纪的计算机时间, 因为要找到最大的clique,必须查找所有可能组合。

这是一整类问题

  • 整数分解、质数判断(primer factorizations)
  • 分图问题 (Maximum Clique Problem)
  • 调度问题 (Scheduling Problem)
  • 地图着色 (Map Coloring Problem)
  • 蛋白质折叠 (Protein Folding)
  • 装箱问题 (Packing Problem)
  • 担货郎问题 (Travelling salesman problem)

P vs. NP 的数学定义

  • P 代表”polynomial time”
  • 可以快速解决的问题,多项式复杂度
  • NP “nondeterministic polynomial time”
  • 指数复杂度
  • 可以快速验证
  • 可以通过查找来暴力解决, 可以要遍历所有可能的项目实在太耗时了

P = NP or P != NP

所有的这些都是‘大海捞针’问题,遍历所有的可能性,才可能找到答案.

关键在于:是否需要去遍历这些所有的可能性,是否有‘捷径’?找到草垛里的一根针,传统的方式是遍历草垛里的每一根草,聪明的做法是用磁铁‘一下子’找出来,如果磁铁不存在,找针这个行为就是NP的,如果磁铁存在,则NP=P. 对于质数查找来说,有个质数的验证公式

一种验证质数的方式

对于所有的质数p,和a

B[transformer]
B –> C[Clique problem]
“`

NP-Hard问题

行文至此,还需指出一点:NP问题只是一类有共性的问题,并不是所有难以求解的问题都是NP问题。理论上所有的围棋策略都是一个决策树的分支,我们应该能够找到一个最优策略, 但我们无法快速的验证我们的最优策略确实是最优的。所以这个问题不是NP问题,而是个NP-Hard问题。

证明\(P \neq NP\)?

个人倾向于P不等于NP,但是数学上暂时没有得到证明。

关于P vs. NP的争议:

  • 理论和事实的差距
  • \(1.0000001^n\) 和 \(n^{1000}\)
  • P和NP的非此即彼的区分是否明智?
  • 如果有个问题求解的复杂度是\(n^{log^cn}\), 怎么界定它?
  • NP问题是不是现有的离散式计算机体系自身的问题,比如说:量子计算机、模拟计算机体系,可能在这些体系中,NP问题不存在.

参考资料
2016年的p vs. np 问题总结