SSH作为Socks代理的简单方法

VPN在实际使用中也不一定方便,如果只是想简单上个网,恰好在国外又有可以ssh远程登录的服务器,那么可以很方便的将ssh作为隧道转化成Socks代理,具体方法如下:

Windows下操作:

在 putty 中设置好要登录的服务器 ip,并在“连接-SSH-通道”中设置:源端口6080 动态 自动,然后增加
保存后打开,使用账号和密码登录,这样就建立好 socks 5 代理.
在相关软件中设置好代理参数 socks5: 127.0.0.1:6080 后便可以使用.

Xshell 类似,在 SSH Tunnnel 里面设置,选择 Socks5.

Mac 和 Linux 中操作:

在终端中运行 ssh -D 6080 user@theserver ,然后在浏览器或者软件中设置好代理参数 socks5: 127.0.0.1:6080 后便可以使用.

推荐浏览器设置

推荐使用 Firefox 和 Chrome 等,然后安装相应的proxy一键切换工具,如 Chrome Falcon Proxy; Firefox Proxy Selector 等。 当然,如果自己写一个 pac文件来自动控制哪些网站使用proxy,那就不属于本文的范畴了。

Sublime Text 开启对NCL的支持-附Vim NCL

NCL是一门小众的语言,Sublime Text 是最近比较火的一款扩展能力非常强的跨平台编辑器,因此即便是小众的NCL 也有人(LASG的Dong Li 啦)为他开发了NCL支持功能,包括语法高亮、自动补全等。 具体使用方法如下:

安装 Sublime Text

自不赘言 http://www.sublimetext.com

开启Package 管理包

通过 ctrl+或者 theView > Show Console ` Menu 打开 控制台,然后输入:

如果是 Sublime 2:

1
import urllib2,os,hashlib; h = '2deb499853c4371624f5a07e27c334aa' + 'bf8c4e67d14fb0525ba4f89698a6d7e1'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')

如果是 3:

1
import urllib.request,os,hashlib; h = '2deb499853c4371624f5a07e27c334aa' + 'bf8c4e67d14fb0525ba4f89698a6d7e1'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

添加 NCL扩展包

  • Open command palette (click menu Tools > Command Palette … or press ctrl-shift-p in Linux/Windows or cmd-shift-p in Mac).
  • Type Install Package (you can just type some characters of Install Package such as inst).
    Wait the completion of the loading (patience).
  • Type NCL and click the NCL item showing up.

Here we go!

Vim NCL

git clone https://github.com/xiexinyls/vim ~/.vim

也可以到 https://github.com/xiexinyls/vim 下载,然后放到 ~/.vim 目录下面,
当然注意 ~/.vimrc 文件

SublimeText/TextMate remote editing with rmate

Preparation of Sublime Text 准备工作

ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl 就可以了

Run subl --help

subl as default EDITOR

export EDITOR='subl -w'

Specifying -w will cause the subl command to not exit until the file is closed.

Install

Install rmate on remote server where you would like to

You can install rmate via gem:

1
gem install rmate

or just:

1
2
curl -Lo /usr/local/bin/rmate https://raw.github.com/textmate/rmate/master/bin/rmate
chmod a+x /usr/local/bin/rmate

or, you cqn install ported version of

用法 Usage:

  • First open Sublime Text or TextMate on your machine.
  • Then, open a tunnel to your server on your local machine
1
2
ssh -R 52698:localhost:52698 user@yourserver.org
这样
  • Finally, run rmate yourfile on the openned ssh shell and edit your file on your local machine

su 出现 This account is currently not available

su 切换用户的时候出现 “This account is currently not available” 的提示,尤其是在 /etc/init.d/ 的文件里面,运行一些服务需要切换到特定的用户,如启动 tomcat 的脚本,需要切换到 www 用户,但是 www 用户在 /etc/passwd 里面的 shell 是 /sbin/nologin,那么在启动的脚本里面:

1
su www -c /opt/tomcat7/bin/startup.sh

这一句就会导致上述的报错。

解决的办法有几种,第一,运行 vipw 修改 passwd 文件,将其 shell 项改为 /bin/bash。第二种方法则是修改这条命令,改为:

1
su -s /bin/bash www -c /opt/tomcat7/bin/startup.sh

个人更喜欢第二种方案。第一种要修改系统的安全设置,不太建议。

使用 Sweave 给 R 写文档的模板

以前一直傻傻的 用 \begin{verbatim} 或者 listing 的方式在文章中加 R 代码
然后再手工 include 结果的方式,现在知道了 Sweave,终于可以结束这段傻
不楞登的过程直接自动化了。

\documentclass[a4paper, 12pt]{article}
\begin{document}
\title{emacs \& Sweave}
\author{Wang Jun}
\maketitle

\section{Now begins R Sweave test}

First Save this file as example.Rnw

Then run Sweave("example") in R

Compile the generated tex file example.tex with pdflatex or xelatex (I prefer XeLeTeX)

Here you got the Sweaved R script

%%%%%%%%%%%%% Here begins the Main Content

This is just a simple example

<<>>=
library(maps)
library(mapdata)
###map("china")
x=rnorm(100)
y=rnorm(100)
lm(y~x)
@

Now that you have tried Sweave, how does it perform?

\end{document}

PS: 当然,现在流行的 R 文档写作方式应该是 knitr + LyX的方式,将另文描述了。

我的VIM 控制文件: vimrc

每次新装一个系统总是要到处找 VIMRC 的配置,现保存于此也好有个备份

set mouse=a "启用鼠标
"双引号开始的行为注释行,下同
"去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set nocompatible
set backspace=indent,eol,start
set showcmd
"显示行号
set number
"检测文件的类型
filetype on
"记录历史的行数
set history=1000
"背景使用黑色
"set background=dark
"语法高亮度显示
syntax on
"下面两行在进行编写代码时,在格式对起上很有用;
"第一行,vim使用自动对齐,也就是把当前行的对起格式应用到下一行;
"第二行,依据上面的对起格式,智能的选择对齐方式,对于类似C语言编
"写上很有用
set autoindent
set smartindent
"第一行设置tab键为4个空格,第二行设置当行之间交错时使用2个空格
set expandtab ""# 使用space代替tab.
set tabstop=4 ""# 四个空格。
set shiftwidth=2 ""# 自动缩进的宽度。
"设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set showmatch
"去除vim的GUI版本中的toolbar
"set guioptions-=T
"当vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声
set vb t_vb=
"在编辑过程中,在右下角显示光标位置的状态行
set ruler
"默认情况下,寻找匹配是高亮度显示的,该设置关闭高亮显示
set nohls
"查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一
"个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依
"次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
"时,别忘记回车
set incsearch
"修改一个文件后,自动进行备份,备份的文件名为原文件名加“~“后缀

"NCL的语法高亮等
    au BufRead,BufNewFile *.ncl set filetype=ncl
    auSyntax newlang source $VIM/ncl.vim
"Show autocomplete menus.
set complete-=k complete+=k " Add dictionary search (as per dictionary option)
set wildmode=list:full
set wildmenu
au BufRead,BufNewFile *.ncl set dictionary=~/.vim/dictionary/ncl.dic

 " When editing a file, always jump to the last known cursor position.
 " Don't do it when the position is invalid or when inside an event handler
 " (happens when dropping a file on gvim).
 " 记住上次的编辑位置
 autocmd BufReadPost *
    \ if line("'\"") > 0 && line("'\"") <= line("$") |
    \   exe "normal g`\"" |
    \ endif

 " 打开文件时,按照 viminfo 保存的上次关闭时的光标位置重新设置光标
 au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif

"中文的猜测顺序
set fileencodings=utf-8,gb2312,gbk,gb18030 
set termencoding=utf-8
"set encoding=prc

一个Fortran 读文件并带参数的模板

Fortran 作为科学计算常用语言,自然免不了各种文件读写的操作,以下是一个简单的模板

参见 gist bdb32fffcd08b9ab21ea:

或者,直接参见下面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
program gaugeselect
implicit none
character(len=80):: filename
character(len=80):: arg1 ,arg2
character(len=80):: buff
logical:: flag=.false.
!================================================================!
call getarg(1,arg1)
call getarg(2,arg2)
if (len_trim(arg1)==0 )then
print *,"please specify the argument of running file!!"
print *,"usage: ./gaugeselect filename"
stop
else
filename=trim(arg1)
inquire(file=trim(filename),exist=flag)
if(flag)then
open(5,file=trim(filename))
do while(.true.)
read(5,*,end=100)buff
enddo
100 close(5)
print *,'file:',trim(filename), "processed"
else
print *,"oops........"
print *,'can NOT open file:',trim(filename)
print *," "
endif
endif
end program gaugeselect

Ubuntu UFW Firewall

用一下几条命令安装并开启 ufw:

1
2
3
sudo apt-get install ufw
sudo ufw enable
sudo ufw default reject

这样就安装开启了 UFW 防火墙,并默认拒绝一切外来连接请求(reject),显示为未连接,为安全起见,最好将 reject 改为deny

为开启 SSH 和 WWW 服务,运行:

1
2
sudo ufw allow ssh/tcp
sudo ufw allow www/tcp

同时使用以下命令查询状态:

1
sudo ufw status

轻松并发执行作业--GNU Parallel

有的时候要执行一些很快但是却很多重复的操作,例如修改所有普通文件的权限,修改一下权限本是很快的操作,但是文件很多的话操作起来就慢了。再比如要下载很多 http 下很小的文件,下载一个文件如果只需要三秒,但是每一个文件从建立连接、进行对话然后开始下载直到下载完成,中间会浪费很多时间,可能浪费的比实际下载所需的时间还多。

因此,如果能有一个方法并发进行,那么效率会高得多。以前在 Shell 里面也有一些 tricks 来进行这方面的操作,但是总是因为繁琐而容易出错。

现在 FSF 开发的 GNU parallel 一出,问题迎刃而解。例如修改所有子目录下面普通文件的权限:

1
find ./ -type f | parallel -m chmod mode

批量修改文件夹权限

1
find ./ -type d | parallel -m chmod mode

再如有一个顺序任务的脚本 batch.sh

1
2
3
4
5
6
wget url1
wget url2
wget url3
wget url4
wget url5
wget url6

那么你就可以并行运行如下:

1
2
3
4
parallel -j+0 < batch.txt
## This runs as many instance of the commands in batch.txt
## in parallel as you have cores (-j+0) and schedules the
## jobs in an efficient manner

当然,你也可以直接 使用一个 parallel 脚本(shebang)

1
2
#!/usr/bin/parallel
blahblah

要安装它很简单,比如:

  • Ubuntu: sudo apt-get install parallel
  • Fedora: yum install parallel
  • Mac OSX: brew install parallel
  • Others: 源码编译(下载, tar xjvf parallel....tar.bz2; ./configure; make install)

    至于详细功能,那就需要: man parallel