利用 IDEA IDE 的轻量编辑模式快速查看和编辑工程外的文本文件

介绍了 Intellij IDEA 的轻量编辑模式, 可以用其取代诸如记事本或 Notepad++ 之类的轻量级编辑器.

作为程序员, 我们都知道 IDE 的很好用的, 它的文本编辑器功能也非常的强大, 用起来非常便捷. 在长年累月的使用中, 我们也变得对其非常熟悉, 以致于使用起其它简单地轻量级的文本编辑器来, 比如什么记事本, Notepad++, UltraEdit 等等呀, 觉得既不方便又不熟悉.

关键是很多的操作习惯或者快捷键之类的也不尽相同, 比如什么导航定位呀, 查找替换呀, 等等往往都是各有各的一套.

但有时我们又不得不用这些轻量级的编辑器, 因为有时我们仅仅是想简单查看一下一些文本文件的内容, IDE 的功能虽然强大, 但常常也是要你打开整个工程, 或者说对于工程以外的文本文件的查看或编辑就不支持了.

这种情况随着 Intellij IDEA 新版本的发布, 已经有所改变了, 这就是一个新的特性, 所谓的轻量编辑模式(lightEdit mode), 有了它, 基本可以告别其它的轻量级文本编辑器, 而全程使用 IDE 的编辑器了.

继续阅读“利用 IDEA IDE 的轻量编辑模式快速查看和编辑工程外的文本文件”

数学上的闭包概念及与编程的关系

简要介绍了数学上闭包的概念及其性质在编程领域的应用.

首先, 需要强调一点, 这里谈论的 闭包(closure) 概念是指数学上的, 不是我们编程界一般谈论的那个闭包.

在编程实践中, 闭包另有定义, 是一种为表示带有自由变量的过程而用的实现技术.

但另一方面, 这个数学上的闭包概念在编程实践中依然是有体现, 虽然不同于编程界一般谈论的那个闭包, 后面会举一些例子加以说明.

闭包到底是什么?

闭包在数学上是一个比较抽象的概念, 来自于抽象代数, 因此这里不打算直接给出它的定义, 否则大家看了估计还是一头雾水, 为便于理解, 还是先从具体的例子出发, 最后才给出它的定义.

继续阅读“数学上的闭包概念及与编程的关系”

使用 tail 结合 grep 查找日志关键字并高亮及显示所在行上下文

介绍了如何使用 tail 结合 grep 查找日志关键字并高亮及显示所在行上下文, 最后还附带介绍了如何使用脚本文件对整个过程进行抽象化.

对于一个开发或运维人员而言, 当系统出现故障时, 第一步常常就是查看日志. 查看日志经常碰到的一个需求就是按关键字去搜索, 在日常开发机子上的 IDE 上, 都集成了强大的搜索功能, 但因为系统通常部署在 Linux 系统上, 一般只有命令行界面, 在其上应该怎么去搜索呢? 恐怕有些同学就不是那么清楚了.

有些人会用 ftp 之类的把日志下载下来本地再搜索, 如果是小一点的文件还好, 但日志文件往往都比较大, 因此这样的方式无疑是极为低效的.

下面就介绍一种相对快捷的方式, 也不需要用到特别高级的命令, 仅需要 tail 和 grep 两个命令结合起来即可, 能达到这样一个效果:

  1. 能按关键字搜索;
  2. 在显示关键字所在行时还能高亮关键字;
  3. 能把关键字所在行的上下文, 比如上下 10 行的内容也一起显示出来.

下面是一个效果示意图:

tail grep log

在这里, 我用我云主机的 nginx access log 做了个示范, 我搜索一篇文章 url 的关键字 "a-port", 然后显示出搜索的结果及上下文, 可以看到关键字被标红显示, 上下文也有显示, 多个搜索结果间以蓝色的短横间隔开来.

下面具体说说怎么实现这样的搜索, 先具体讲讲各个命令及参数, 再说说怎么结合起来, 最后还给出一个脚本化的高级用法.

继续阅读“使用 tail 结合 grep 查找日志关键字并高亮及显示所在行上下文”

用番茄工作法对付拖延症

介绍了如何通过”番茄工作法(pomodoro)”去解决拖延症(procrastination)的问题.

现代人似乎饱受 拖延症(procrastination) 的困扰, 自然, 你我大概都不例外.

我之前就曾经写过一篇关于拖延症的悖论的文章里就曾提到一个笑话:

几个月前,在书店看了一本关于战胜拖延症的书,觉得挺好的就买下了,到现在还没怎么看......

那么怎么去对付它呢? 有一种方式你也许也听过了, 叫所谓的"番茄工作法(Pomodoro)".

这个方式叫 Pomodoro, 为啥不是 Tomato 呢? 因为这是一个意大利人 Francesco Cirillo(弗朗切斯科 西里洛)在 1980 年代发明的, pomodoro 在意大利语(Italian)中就是番茄的意思.

番茄工作法 pomodoro

所谓的 Pomodoro, 就是一个简单的倒计时器, 你定一个 XX 分钟的倒计时, 然后它就滴答作响, 到了设定的时间, 它就响铃提示你时间到了, 就这么一个玩意.

继续阅读“用番茄工作法对付拖延症”

理解 http 反向代理

介绍了什么是反向代理, 并与直接访问及(正向)代理进行了对比, 为便于理解, 还举了现实中购物的例子作为比喻

要理解什么是 反向代理(reverse proxy) , 自然你得先知道什么是 正向代理(forward proxy).

另外需要说的是, 一般提到反向代理, 通常是指 http 反向代理, 但反向代理的范围可以更大, 比如 tcp 反向代理, 在这里, 不打算讨论 tcp 之类的反向代理, 当文中说到反向代理时, 指的就是 http 反向代理.

正向代理通常直接称为 代理(proxy), 无需强调它是正向的, 在 http 协议中, 代理即指正向代理.

继续阅读“理解 http 反向代理”