利用内网穿透 frp 工具实现外网链接(ssh)内网树莓派设备

内网穿透原理内网穿透(Net穿透)也即端口映射,笔者粗暴理解是一种能够将外网机器与内网机器(外网无法直接访问的设备)建立通信的一种技术解决方案。百度百科尽管有许多穿越NAT的技术,但没有一项是完美的,这是因为NAT的行为是非标准化的。这些技术中的大多数都要求有一个公共服务器,而且这个服务器使用的是一个众所周知的、从全球任何地方都能访问得到的IP地址。一些方法仅在建立连接时需要使用这个服务器,而其它的方法则通过这个服务器中继所有的数据——这就引入了带宽开销的问题。具体原理详见百度百科=> https://baike.baidu.com/item/NAT%E7%A9%BF%E8%B6%8需要资源一台公网服务器(可以通过IP直接访问树莓派(也可以是电脑,以树莓派为例安装本文以frp v 0.13.0为例(具体版本可以自己定,但不保证其他版本能够成功)。笔者在go 1.7.4版本下编译frp... Read More

禁止 tmux 窗口自动命名

关于tmux的多窗口,用起来可谓非常方便。但,也许在默认的tmux配置下,一样和我被一个小问题困扰。那就是,tmux的窗口名称总是会随着执行的命令不同而变动。关于这一点,可用如下的方式来解决更改tmux配置文件打开~/tmux.conf文件,增加(或修改)如下内容[code lang="shell"set allow-rename of[/code更改oh-my-zsh配置文件当然,如果你在用oh-my-zsh的话。那么,还需要进行如下修改打开~/.zshrc文件,增加(或修改)如下内容[code lang="shell"DISABLE_AUTO_TITLE="[/code参考文章:https://stackoverflow.com/questions/38543763/tmux-will-not-stop-auto-renaming-window Read More

修正 Vim(Mac) 有时无法正确提交 Git Commit Message 的问题

和 Subversion 一样,Git 也可以为 Commit Message 设置一个默认的编辑器,命令如下git config --global core.editor vi不过我在 Mac OS X 系统使用 Git 的过程中,偶尔会遇到如下的情况*** Commands **1: status 2: update 3: revert 4: add untracke5: patch 6: diff 7: quit 8: helWhat now>Bye.error: There was a problem with the editor 'vim'.Please supply the message using either -m or -F option.这种情况基本上都是出现在我打错字的时候,开始以为是输入法引起的 Vim 状态异常,不过出现... Read More

TDD(测试驱动开发)的好处

你会更加站在用户的角度去看你将要完成的产品,你要尽可能想到用户所有进行的操作。而不是从程序员的角度想用户应该会如何去使用我们的产品。测试用例是在对功能进行测试。在写代码之前先写测试用例,可以对我们编写代码提供指导性的参考。防止我们漏掉一些功能。它使我们对自己代码有了信心,因为我们事先设计好的所有测试用例都Pass了。如果在更改代码后测试用例不能通过,我们可以根据不能通过的测试用例精确的定位问题,并轻而易举的解决的这个bug。哈!我们的一整套完备的测试用例在这里替我们把关(把的什么关?),我们就可以十分安全的使用极限编程的另一个最重要的工具——重构。重构改变的是代码的内部结构,而不会改变外部接口功能。知道在做重构时测试用例是把的什么关了吧!很明显,测试用例是保证我们在进行重构时,不会影响到代码的外部接口功能。所以我刚刚说,我们进行的重构是十分安全的。基于第5点,我们找到了重构的信心,必要时候... Read More

工作效率之 SSH 自动登陆篇

前言公司开发使用docker,每次登陆自己开发机总要输入 ssh user_name@ip_string,然后再确认输入password,手快了还经常会输错。作为一个懒人,肯定要找一个取巧的方式,查看了下ssh命令,由于它要进行一次跟服务器的加密交互,所以没有直接附带密码登陆的选项,只好作罢。前些天在同事进行技术分享时,看到他竟然只输入了一行命令./test.sh就成功登陆了开发机,甚是惊异,于是回来搜索研究了一下,遂成此文。shell脚本基础在编写ssh自动登陆脚本之前,先说一下shell脚本的基础,此基础不是一些语法什么的,网上到处都是,这里总结了一下shell脚本的运行机制shell脚本的运行方式首先要说一下shell的几种启动方式,正是踩了脚本启动的坑,才使用原来十分钟就搞定的脚本,花了两个小时才搞定。同时也使得我们运行shell,知其所以然。通过文件名执行shell脚本可以直接... Read More

工作效率之动态 IP 域名化篇

在公司里,RD们不免会使用一些代理服务来进行抓包操作。那么就需要获取代理服务器(一般为自己的电脑)的内网IP。然而,这个内网IP并不是固定不变的。所以,每次配置代理IP时就略显麻烦。那么,下面就来聊聊如何解决这个尴尬,提升效率。方案将非固定IP实时解析到域名中。利用阿里云的域名解析开发者API进行定时的更新。其中的定时用本机(Mac)的Launchd实现(类似Linux下的Crontab)。原材料Mac(或者Windows 但本文仅谈及Mac配置方法域名(如 ihuxu.com如果没有域名可以到freenom.com中注册一个免费域名,然后将其DNS切到阿里云免费的DNS云解析服务中即可。阿里云账号利用阿里云提供开发者的DNS管理相关的AP步骤下载阿里云SDK & 编写代码库:https://github.com/aliyun/aliyun-openapi-php-sdk.g... Read More

作为 10 个月的 Vim 使用者心得总结

隐约记得对于Vim的使用,起始于2015年12月份底。当时,是处于Eclipse到Vim的过渡时期。所以,对于Vim的使用基本上是“婴幼儿”级别。偶然间,我看到了一位同事正在编码的屏幕。不需要触摸板或鼠标的操作,看起来是那么的自然,更是让我看得有些“眼花缭乱”。从那时起,才知道原来Vim可以这么cool(是不是很无知的赶脚?)。这十个月,经历了从小白到能够把Vim作为主“IDE”的过程。故在此和大家分享下本人在Vim的心得。从最基本的概念、快捷键到一些实用的插件的管理与使用。在此之前,曾在部门的例会上有做过分享(分享了一个多小时,估计大家都困了),PPT托管在了github.com/genialx/vimer 上,本文的内容也将基本按照着PPT的顺序。Vim的指令集之丰富、功能之强大真,以至于我这种“小白”来在会议上分享Vim可谓多么忐忑,: 为什么要分享Vim?这个问题很简单,但更重要。对于Vim,会有两种态度... Read More

深入IDE利器VIM:tab键的配置

VIM,一款自定义程度超乎你想象的IDE利器。在平时开发中,得心应手,无所不可比及。没有你想不到,只有你做不到。。。不对,没有你做不到,只有你想不到的。然而,为了代码看起来更优雅,通常也是编程的规范,基本上在编写代码时,是不允许有tab字符存在的。所以,在VIM如何配置tab键,将tab键统一替换成空格?区别空格的ACSii码:0x2tab的ACSii码:0x0这使得在混用两种字符的时候,不同的场景下(比如:vim、浏览器)会呈现不同的长度,看起来很混乱。配置打开vim配置文件.vimr[code lang="shell"vim ~/.vimr[/code写入如下内容并保存[code lang="shell"set expandtaset tabstop=set shiftwidth=[/code这样一来,试试在vim中敲击tab键的效果,是不是已经替换成4个空格了?那之前的tab键怎么办... Read More

Github装(zao)逼(jia)指(da)南(fa)

Github之于工程师,类似于微博相册之于嫩模,像是个门面。 无论是晋升答辩,还是求职面试,有一个丰富的代码仓库不敢说好处有多大,但总归是有的。并且好处不局限于此,代码开源才会暴露问题才会改正,并且会收到一些很有价值的改动PR。我是受益其中也是乐于其中, 但是可能很多人会因为没有时间写(这不是理由)或是望着干干净净的github不知道如何开始,因而没有写码的兴趣。 本文主要是针对第二点原因对症下药。写一篇这么low的文章 主要是基于一个契机, 我媳妇(iOS程序媛)有时有很多想法,但是她就懒得写。我建议她在github上慢慢敲,她的理由是:我的github太空荡了,就算写了也没脸往外贴,有点杯水车薪的感觉。说的貌似挺有道理的?! 我们男人也都是比较讲道理的,于是我就把她的github“改”成了这样。这张图是改之前这张图是改之后好,接下来就是本文的重点,具体怎么“改”? 在此分享给大家。Gi... Read More

What’s the difference between `Commit hash`, `Parent Hash` and `Tree hash` in git?

Parent hashes$ git log --grap* commit c06c4c912dbd9ee377d14ec8ebe2847cf1a3ec7|\ Merge: 79e6924 311376| | Author: linjie <linjielig@gmail.com>| | Date: Mon Mar 14 16:02:09 2016 +080| | | commit| | | Merge branch 'dev| | * commit 31137606f85d8960fa1640d0881682a081ffa9d| | Author: linjie <linjielig@gmail.com>| | Date: Mon Mar 14 16:01:26 2016 +080| | | commit| * | comm... Read More

powerline 插件安装之 vim 篇(Mac)

powerline是vim的状态栏插件,同时也提供状态栏和提示窗口功能给其他一些应用,包括zsh,bash,tmux,IPython,Awesome,i3 和 Qtile。这篇文字只谈vim上的安装。环境与工具系统:OS X EI Capitan version 10.11.终端:terminavim :v7.4.191xcode: 7.3.1(xcode的版本过低会影响一些依赖库的安装,我在6.5的情况下安装一些软件会出些问题,避免麻烦升级下。python:3.5.源码python: https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tar.xvim: https://github.com/vim/vim/archive/v7.4.1949.tar.g安装pytho./configure  --prefix=/us... Read More

tmux 安装、操作与配置

tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机;当然其功能远不止于此。安装可以使用Ports安装tmux,位置在/usr/ports/sysutils/tmux/;tmux仅有一个依赖包libevent,位于/usr/ports/devel/libevent/。安装完成后输入命令tmux即可打开软件,界面十分简单,类似一个下方带有状态栏的终端控制台;但根据tmux的定义,在开启了tmux服务器后,会首先创建一个会话,而这个会话则会首先创建一个窗口,其中仅包含一个面板;也就是说,这里看到的所谓终端控制台应该称作tmux的一个面板,虽然其使用方法与终端控制台完全相同。tmux使用C/S模型构建,主要包括以下单元模块... Read More

Vim 使用技巧之只有用了才会懂“最好的 IDE 是 Vim”

半年前,我还在诸如Eclipse、ZendStudio等IDE里徘徊。然而,这半年对于Vim的使用,我不得不说,Vim的效率是更高的。代价是需要时间来配置属于你自己的Vim。此篇文字,不会人云亦云。当然,很抱歉也不是个教程(水平不够)。只写下迄今为止对于Vim+tmux的使用感受,以及展示vim的使用技巧(至于如何入门vim请自行google)。为什么要用VIm?随时随地,摆脱环境的束缚,你只需要一个终端。你不必在键盘和鼠标之前来回切换(我压根就觉得鼠标是不服务于“编码工作”的产品),所有的操作都在指尖下的按键。高程度的自定义,所以不要来拷贝他人的配置文件,很伤。其他IDE中的功能在Vim里基本能找到替代品,幸福指数飙升耳听十遍,不如亲眼一见winmanager, ftaglist, neardtree, bufexplorer和tmux等的应用ctrlp的应用Vim使用技巧看到好多人,... Read More

关于 rsync 工具的安装、配置与进行文件同步与备份的使用流程

安装linux yum install rsyn配置编辑文件vim /etc/xinetd.d/rsyn内容如下# default: of# description: The rsync server is a good addition to an ftp server, as it # allows crc checksumming etc.service rsyndisable = nflags = IPvsocket_type = streawait = nuser = rooserver = /usr/bin/rsynserver_args = --daemolog_on_failure += USERI创建配置文件touch /etc/rsyncd.con... Read More

更改 Git 之前的 commit 信息

You could dgit rebase -i -p <some HEAD before all of your bad commits>Then mark all of your bad commits as "edit" in the rebase file. If you also want to change your first commit, you have to manually add it as first line in the rebase file (follow the format of the other lines). Then, when git asks you to amend each commit, dgit commit --amend --author "New Author Name <email@address.com>"edit or... Read More