Tricks

使用 ssh 反向隧道登录没有 IP 的服务器

假设我们家里的服务器叫做 homeserver,没有公网 IP。然后我们有一台服务器叫做 relayserver,拥有公网 IP。

在家里执行

homeserver~$ ssh -fN -R 10022:localhost:22 relayserver_user@1.1.1.1

在服务器上就可以登陆啦

relayserver~$ ssh -p 10022 homeserver_user@localhost

然而这样链接还是很不稳定的,我们还是需要一个稳定的链接,这时候就可以使用 autossh 了,它会保持链接的稳定,自动重新连接。

autossh -M 20000 -f -N your_public_server -R 1234:localhost:22 -C

参考

  1. http://xmodulo.com/access-linux-server-behind-nat-reverse-ssh-tunnel.html
  2. https://superuser.com/questions/37738/how-to-reliably-keep-an-ssh-tunnel-open

Sequel Pro cannot create a JSON value from a string with CHARACTER SET ‘binary’

I had this problem dealing with exports made by Sequel Pro. I unchecked the Output BLOB fields as hex option and the problem went away. Visually inspecting the export showed legible JSON instead of binary.

导出数据的时候把 “Output BLOB fields as hex” 这个选项取消就可以了。

参考:https://stackoverflow.com/questions/38078119/mysql-5-7-12-import-cannot-create-a-json-value-from-a-string-with-character-set

tmux cheatsheet

if you use set mouse off, then you could use system mark and copy, or if you are in Mac, you could use Option + Mouse Select

按键绑定

C-b         发送 Ctrl-b 按键
C-z         暂停(suspend) tmux 客户端

窗口创建与管理

!           把当前分区独立出来作为单独的窗口
"           横向分隔,变成上线两个分区
%           纵向分隔,变成左右两个分区
&           关闭当前窗口(window),也就是所有的分区                    
.           Prompt for an index to move the current window.
c           创建一个新窗口
x           关闭当前分区(pane)
{           Swap the current pane with the previous pane.
}           Swap the current pane with the next pane.
C-o         Rotate the panes in the current window forwards.
M-o         Rotate the panes in the current window backwards.
C-Up, C-Down
C-Left, C-Right
            Resize the current pane in steps of one cell.
M-Up, M-Down
M-Left, M-Right
            Resize the current pane in steps of five cells.
M-1 to M-5  Arrange panes in one of the five preset layouts: even-horizontal, even-vertical, main-horizontal, main-vertical, or tiled.
Space       Arrange the current window in the next preset layout.
M-n         Move to the next window with a bell or activity marker.
M-p         Move to the previous window with a bell or activity marker.

copy and paste

#           List all paste buffers.
-           Delete the most recently copied buffer of text.
=           Choose which buffer to paste interactively from a list.
[           Enter copy mode to copy text or view the history.
]           Paste the most recently copied buffer of text.
Page Up     Enter copy mode and scroll one page up.

rename

$           Rename the current session.
,           Rename the current window.

选择窗口

'           Prompt for a window index to select.
(           Switch the attached client to the previous session.
)           Switch the attached client to the next session.
0 to 9      Select windows 0 to 9.
l           Move to the previously selected window. remapped to \
n           Change to the next window.
o           Select the next pane in the current window.
p           Change to the previous window.
s           Select a new session for the attached client interactively.
w           Choose the current window interactively.
;           Move to the previously active pane.

其他

:           Enter the tmux command prompt.
?           List all key bindings.
D           Choose a client to detach.
L           Switch the attached client back to the last session.        
d           Detach the current client.
f           Prompt to search for text in open windows.
i           Display some information about the current window.
q           Briefly display pane indexes.
r           Force redraw of the attached client.
m           Mark the current pane (see select-pane -m).
M           Clear the marked pane.
t           Show the time
z           Toggle zoom state of the current pane.
           ~           Show previous messages from tmux, if any.

           Up, Down
           Left, Right
                       Change to the pane above, below, to the left, or to the right of the current pane.

dtach

还有一个类似 tmux 的命令 dtach,不过后来没怎么用了,笔记还是留在这里。

dtach is used to detach and attach to a session.

dtach works with a session file, and can detach and attach to a session, but it has no functionality of terminal multiplexing.

Formula
dtach [mode] [session_file] [options] [command]

dtach modes are -a attach, -A attach or create, -c creates a new session and attach, -n creates without attach.

使用 gitbook 创建一本书

Summary.md 这个文件相对于是一本书的目录结构。比如SUMMARY.md :

# Summary
* [Introduction](README.md)
* [基本安装](howtouse/README.md)
   * [Node.js安装](howtouse/nodejsinstall.md)
   * [Gitbook安装](howtouse/gitbookinstall.md)
   * [Gitbook命令行速览](howtouse/gitbookcli.md)
* [图书项目结构](book/README.md)
   * [README.md 与 SUMMARY编写](book/file.md)
   * [目录初始化](book/prjinit.md)
* [图书输出](output/README.md)
   * [输出为静态网站](output/outfile.md)
   * [输出PDF](output/pdfandebook.md)
* [发布](publish/README.md)
   * [发布到Github Pages](publish/gitpages.md)
* [结束](end/README.md)

SUMMARY.md基本上是列表加链接的语法。链接中可以使用目录,也可以使用。

Chrome Hotkeys

In Omnibar, press tab after a search-able website will search for the website
prefix ? will search forcefully

“`
⌘T Open a new tab
⇧⌘T Reopen tab just closed
⌘W colse a tab
⌘⌥→ Go to left tab
⌘[ / Delete Go back in history
⌘] / Delete Go forward in history
⌘M minimize
⇧⌘B show/hide bookmark bar
⇧⌘J Open Downloads
⌘Y Open History
⌘L omni bar
⌘R reload page
⌘F find
⌘G / ⏎ find next
⌘⌥I Inspect element
⌘⌥J JavaScript Console
⌘+Shift+D Save all tabs in one folder
^⌘F Full screen(Mac style)
⌘-Shift-F  Real Full Screen
“`

Macbook tricks

用起来的确爽,视网膜屏幕绝对打开新的世界

4k屏幕打开另一个世界,一个屏幕可以开4个窗口,哈哈

PYTHONPATH 变量会干扰brew安装的python3

Dock放在左边,设置F1,设置轻触,设置全局控制 使用tab键切换

You can make movie with quick time

Option + Command +Esc 强制退出程序

Homebrew + iterm2 真乃神器
Brew cask is a good thing

Hold option+command and mouse to do a block selection

Weird, mac echo not working with \e but \033

给pycharm添加PYTHONPATH,也不知道是哪个弄对了

# 快速设置一台新的 Mac

0. Install iterm2,
a. set the color scheme to solarized and
b. change alt key to esc+
c. Set font to monaco for powerline
1. install Homebrew from http://brew.sh
2. Generate a new ssh key by:
a. `ssh-keygen`
b. `ssh-add ~/.ssh/id_rsa`
3. install zsh:
4. install go and python: `brew install go python python3`
5. install tmux: `brew install tmux`
6. install dotfiles: `git clone git@github.com:yifeikong/dotfiles .dotfiles`

# 快捷键

Command-H 隐藏最前端应用的窗口。要查看最前端的应用但隐藏所有其他应用,请按 Command-Option-H。

Option-Command-= 最大化窗口

Command-M 将最前端的窗口最小化至 Dock。要最小化最前端应用的所有窗口,请按 Command-Option-M。

Command-W 关闭最前端的窗口。要关闭该应用的所有窗口,请按 Command-Option-W。

Option-Command-Esc 强制退出:选择要强制退出的应用。或者,按住 Command-Shift-Option-Esc 3 秒钟可仅强制最前端的应用退出。

Shift-Command-3 屏幕快照:拍摄整个屏幕的屏幕快照。了解更多屏幕快照快捷键。

Command-逗号 (,) 偏好设置:打开最前端应用的偏好设置。

Control–Command–电源按钮 强制 Mac 重新启动。

Control–Shift–(电源按钮或介质推出键)将显示器置于睡眠状态。

Command-D 从“打开”对话框或“存储”对话框中选择“桌面”文件夹。

Option-Delete 删除插入点左边的字词。

Fn-Delete在没有向前删除键的键盘上向前删除。也可以使用 Control-D。

Command-Delete 在包含“删除”或“不存储”按钮的对话框中选择“删除”或“不存储”。

Fn–上箭头 向上翻页:向上滚动一页。 

Command–上箭头 将插入点移至文稿开头。

Command–左箭头 将插入点移至当前行的行首。

Option–左箭头 将插入点移至上一字词的词首。

Option–左箭头 将插入点移至上一字词的词首。

Control-L 将光标或所选内容置于可见区域中央。

笔记生涯

写笔记也有几年时间了,最开始自然用的是开山鼻祖 Evernote,当时并没有什么独立思考的能力,大概是看到有什么好的文章,一时消化不了或者想着会回头来看,便用 Evernote Webclipper 剪辑下来,到最后这些『笔记』自然是没有看过多少,翻了翻,仅剩下几篇还算是自己写的其余便都删了。

后来开始读研,国内的笔记软件也多了起来,听说 wiz 对 markdown 的支持是最好的,又是一个小团队出品,甚和我心,用了一年有余,记笔记也不多,然而总是感觉有些不顺手,遂弃之

虽然从大三开始便用 ubuntu 做主力系统,然而竟直到研二才算是习惯 vi 的操作方式,甚至用熟悉 shell 竟是第一份工作之后的事,当然这是后话了。用熟了 vi,直接用一个命令(vilog)写 markdown 文件好了,半年有余,算是日志,也是笔记吧,唯一的不满就是表格太不方便表达了。

再后来用半年挣来的外快终于有闲钱够得一天 mac,甚喜,第一次有一种愉快的图形界面的体验,偶尔会在手机上看看笔记,又觉得只在电脑上写几个文件的方式不甚移动化,有一番考察,发现 OneNote 甚合我意,最贴心的功能是能够在一个笔记的任何地方点上一点便可以在此处开始一个新的文本框,实在方便。

从研二开始,用 OneNote 两年有余,大部分都是自己的笔记,感悟,然而 OneNote 似乎渐渐也满足不了我的用途,主要有下列几点:

1. 只能同时查看一个笔记页面,也就是不能多窗口
2. 不能自动生成目录
3. 分享很不友好
4. 不安全,毕竟是在微软的服务器上,一个是数据泄密,一个是数据丢失
5. 同一片笔记只能在一个目录下
6. Mac 版功能不全
7. 不能设置默认字体,字体变来变去
8. 不支持 markdown
9. 经常需要登录
10. 添加附件不能支持预览

OneNote 有两点好处希望也能够保留

1. 自由的插入表格和图片
2. 能够在一篇笔记中加入多个文本框,点到哪里写哪里

尝试着自己写笔记软件, 却又发现前端什么的实在太庞杂, 遂放弃.

后来买了 iPad Pro 2, 发现用Apple Pencil 和 Good Note 才是绝配. 当然还是无法发表分享

恰好在这两日在学习 django,不如自己发布一下,所以就有了 ynote.