Posted on 20-02-2014
Filed Under (技术) by waterlin

自从有了 Evernote 这个东西后,经常把网上看到的文章、图片以及一些自己的想法一股脑扔到 Evernote 里。Evernote 里的东西越来越多,也越来越有价值,变得越来越像一个数据仓库了。那么,如何使用这些数据、如何有效地找到这些数据,就成了一个迫切需要解决的问题。

我是 Emacs 的重度使用者,并且最喜欢使用 Org Mode 来写笔记,喜欢在合适的时候会把 org 文件全转为 html 以便阅读。那么,我自然非常希望能在 Org Mode 里直接链接 Evernote 里的文章。Evernote 支持 URL Protocol,可以在浏览器里直接通过 Evernote 打开内部链接,那 Emacs 是否也可以这样做呢?我们稍微试验一下就知道了。

比如说,有一个 Evernote 的内部链接:

我按照 Org Mode 的方式,写一个链接出来:

我希望这个链接,在 org 源代码(即你在 Emacs 编辑 org 文件时)里,可以直接用鼠标一点就通过 Evernote 打开该内部链接、跳转到相对应的文章;或是,在把 org 文件转成 html 文件时,同样保留这个链接的形式,以方便浏览器直接通过生成的链接、发送给 Evernote 来打开这篇文章。

现在来看看 Emacs 默认配置下的结果:

  1. 在 org 文件里用鼠标点击该 evernote:/// 链接,无效;
  2. 把 org 文件转成 html 文件后,该链接变成了如下奇怪的形式:

    evernote:///view 被 Org Mode 转义成了 evernote-view。

看来结果不尽如人意,我们需要解决两个问题。

对于第一个问题,我们可以让 Emacs 把 evernote:/// 链接直接发送给操作系统来处理:

对于第二个问题,我们可以让 org-add-link-type 不转义 evernote 的链接

这样,在把 org 转成 html 文件时, evernote:/// 这样的链接就会原封不动的保存起来。

就这样,我在 Evernote 里汇总别人的笔记,但是依然在 Emacs Org 里记录自己的笔记,并且在 Emacs Org Mode 里链接别人的笔记。对于一些特别有价值的文章,我会把这些信息收录到 Evernote 里,在必要的时候,通过 Emacs 链接 Evernote 的内部链接来作为检索的依据,这样一来,在上不了网或是网页被作者下线后资料无从检索的时候,就再也不用烦恼了。

这样,我就搭建了一个完美的笔记生态系统!工欲善其事,必行利其器,说的就是这个道理。

(0) Comments    Read More   
Posted on 20-02-2014
Filed Under (技术) by waterlin

Windows 有一个东西叫做 URL Protocol,即注册一个自定义的协议,使得可以使用某一个程序来自动打开某种格式的链接。

举个例子来讲,对于我们经常使用的 Evernote 来说,每一篇文章都有一个内部链接,形式如下:

在你正确安装了 Evernote 后,你可以在 Firefox 或是 IE 的地址栏里输入这个内部链接,则 Windows 系统会自动调用 Evernote 来打开这个链接。而 Evernote 被调用来打开这一链接的表现,恰恰是直接跳转到该篇文章,并显示出来。

对于不同的 URL Protocol 响应程序,这种表现是各自编程处理的,这取决于提供 URL Protocol 的程序员的想法。

但是不知道出于安全或是其它原因的考虑,Chrome 并不支持 URL Protocol 来打开第三方应用,我在 Chrome 的设置里找了很久,虽然提到在 Content settings 里有一个 Handlers,但是这个设置却永远是一个空白。

Chrome 虽然没有设置 URL Protocol 的入口,不过我们却可以直接编辑 Chrome 的配置文件来实现定义这一功能。这一配置文件是 Chrome 的 Local State 文件,这个文件的保存路径根据操作系统有所不同:

  • Windows7 上是 %LOCALAPPDATA%\Google\Chrome\User Data\Local State 这个文件;
  • Mac OS X 10.8 上是 ~/Library/Application Support/Google/Chrome/Local State 这个文件;
  • Ubuntu 12.04 上是 ~/.config/google-chrome/Local State 这个文件。

为了打开 Evernote 的 URL Protocol,找到这个文件后,我们就可以按如下步骤进行编辑:

  1. 关闭 Google Chrome;
  2. 打开文件 Local State 并找到 excluded_schemes 一节,在 protocol_handler 下;
  3. 添加一行内容:
  4. 重启 Chrome。

这样,我们再到 Chrome 里打开形如 evernote:/// 的链接,Evernote 就会自动跳出来并把相应的文章呈现在你眼前了。

如果需要打开其它自定义的 URL Protocol,则只需要把 evernote 关键词换成对应的关键词即可。

(0) Comments    Read More   
Posted on 20-02-2014
Filed Under (技术) by waterlin

有关 Linux 下 ulimit 和文件句柄数量的笔记。

ulimit 的基本印象

反复用 Open 来打开文件,会提示出一个文件句柄错误:

这是因为 Linux 的 Open 函数会有一个句柄上限:包括软上限和硬上限。

注意细节

对于 ulimit 里做的限定,是指进程同时打开的句柄数量,而不是累加的。

所以,我们需要在程序里及时关闭不需要的句柄。

fopen 及 socket 通讯的 accept 等,都会增加 ulimit 里的文件句柄数量。

基本 ulimit 值

其实 ulimit 命令本身就有分软硬设置,加 -H 就是硬,加 -S 就是软。硬上限和软上限的区别是:硬限制是实际的限制,而软限制是 warnning 限制,只会做出 warning。

你可以用 ulimit 命令来对这些变量进行查询与修改。比如说,我如果要查询 open 文件句柄的软上限,可以用命令:

要查询 open 文件句柄的硬上限,可以用命令:

我们可以用 ulimit -a 来查看所有限制值:

在 Linux 下面部署应用的时候,有时候会遇上

的问题,其实就是 Linux 是有文件句柄限制的,而且默认不是很高,一般都是1024。作为一台生产服务器,其实很容易就达到这个数量,因此我们需要把这个值改大一些。

如果需要临时修改这个值,可以用下面的命令来使得 open 打开的文件句柄硬上限为 9999:

可以使用下面的设置来使得文件句柄的软上限为 2048:

开机启动设置 ulimit 值

如果你需要在开机的时候,就自动设置 ulimit 的值,可以使用下面的方法,在 Ubuntu 下的方法可以查看这里。简单来讲,是这样简单的几个步骤:

可以修改下面的配置:

修改下面两项:

(0) Comments    Read More   
Posted on 20-02-2014
Filed Under (技术) by waterlin

我的网页是用 jsp 写的,让用户插入了很多数据到数据库。我想写一个定时跑的东西,能够定时把数据库的内容生成一个报表发给我。这个定时器要怎么写?用什么方法?是写成 jsp 还是写成 java 的程序?

因为对 Java 不熟悉,仔细调研了一下,觉得有如下几种方法可以考虑:

  1. 如果是发邮件通知的话, 自己在后台 timer 一个 job 去做;如果是想用页面刷新来统计,那就 jsp 主动刷。
  2. 使用 Quartz 库。
  3. 还有一个方法,用系统的办法来解决,就是操作系统自带的定时器或是系统计划任务 cron,大不了里头搁一句批处理调 java 程序。
  4. 还有可以用 cron4j 这个东西,cron4j 挺好用的,又简单。

个人建议别用 Quartz 这玩意,建议写个可执行 jar,放到 server上用 crontab 或者 Window 计划任务跑。Quartz问题其实很多,不建议再增加web app的负担。

(1) Comment    Read More   
Posted on 17-02-2014
Filed Under (技术) by waterlin

当用 Org Mode 写的笔记一多,要寻找相关的内容花的时间也就越多,这个时候,很有必要建立一个索引或是导航条,这样才像全功能版本的 wiki 嘛。

要建立这样的索引有两种方法。

第一种,用站点地图的方法。

把下面的代码添加到你的 project 配置文件里:

然后每次发布这个工程的时候,就会生成一个 sitemap.org 的文件,这个文件会递归地遍历你工程里的所有文件并生成链接,并会生成一个名叫 sitemap.html 的文件。

然后,我们只要在我们的 index.org 里 include 这个文件即可:

这样我们就再也不用手动添加页面的索引链接了。

或者,我们可以在每个页面的页脚里把这个 sitemap.org 的链接给加上,方便随手访问这个索引。

第二种,生成导航条。

当然,我们或许更喜欢在各个单独页面阅读的时候,有一个导航条可以很方便地回到上级目录、主页目录或是其它的导航链接等。

通过 org-info.js 这个脚本,我们可以把一个页面拆分成好几个部分,有点像翻书一样了,不过这个功能需要借助 org-info.js 功能。

小结

如果对于自己的笔记,采用第一种方法更好,方便搜索、配置也简单。如果是给别人用,可以用第二种方法,免得一次性把太多的内容推给别人看,吓到别人。

(0) Comments    Read More   
Posted on 14-02-2014
Filed Under (技术) by waterlin

习惯了用 Org Mode 来写笔记,然后直接发布成网页,倒也是一件快事。用 Emacs 来写东西,爽手;用 Org Mode 来发布成网页,利索;再给这个网页配配色,美观。现在一些长一点的笔记或是经验总结,我倒是喜欢直接用 Org Mode 来发布到我的静态网站上。

如果 Org Mode 工程里,有一些文件,不希望发布成 html 页面;或者说,有一些是配置文件、网页的头文件或是页脚文件,只需要在 Org Mode 工程里使用(用 include 就可以把一些重复出现的内容写成单独的 org 文件),但是却没必要发布成网页。也就是说,你不想把它们上传到服务器或是根本不需要发布它们。

Org Mode 很好地考虑到了这个问题,在配置 Org Mode 工程时,就可以直接使用 :exclude 这个选项来指定哪些文件不用发布。

这里需要特别说明的是,:exclude 使用的是正则表达式,并且你在这里填写文件名称时,不需要指定路径,仅仅需要指定文件名即可。

比如,在我的工程里,有如下几个文件,是纯粹作为配置来使用的:

从这几个文件名,大概也能看出来它们的用处。对于这几个文件,我不需要发布它们,这时,我可以在我的 org-publish-project-alist 配置里,填上这么一行:

这样,我就可以在发布工程的时候,得到一个非常干净整洁的网页工程,不带一点不需要的文件!在把这些文件上传到服务器后,再也不用担心有人会误访问到这些对用户来说无用的文件了。

(0) Comments    Read More   
Posted on 13-02-2014
Filed Under (技术) by waterlin

Org Mode 里把条目标记成 DONE 时如果需要同时记录时间状态,可以有两种方法:

  1. 设置全局的变量,使得标记条目为 DONE 时把时间戳也记录上。

    用上述代码可以标记上时间,还可以写上备忘录。

  2. 第 1 种方法会对所有的 org 文件产生影响,所以我们也可以针对单独的文件进行设置,在文件开头写上这样一段声明:

    上述代码产生的效果和第 1 种方法里的代码一样,不过作用范围仅限本文件。

这两种方式个人觉得用后一种方式比较好。

(0) Comments    Read More   
Posted on 13-02-2014
Filed Under (技术) by waterlin

最近写了一些 HTML 的东西,有两个经验作为笔记记录一下,免得以后碰到了,又抓瞎了。

背景图片上再画一些图片元素

如果网页上已经有了一个背景图片,这时还希望在这个背景图片上加上网格点或是其它有一定透明度的背景图片,甚至于更复杂一点的情况,再平铺的背景图片可能只需要覆盖一部分网页,比如说除了页脚的部分。

需要做出这种效果,最好的办法,就是把你需要覆盖的部分网页再用一个 div 框架组合起来,然后设置这个 div 框架的背景图片为需要展示的网格或是其它内容。同时注意,关键的一步是,你需要设置这个 div 的 padding(上下左右或是其中的某个部分)值,使得 div 框架覆盖到你需要覆盖的部分。

至于这个尺寸的计算,基本上只能使用 Javascript 来根据浏览器和文档的高度、宽度,根据页面里已经有的 DOM 元素(比如说页脚)尺寸来计算。

让 div 紧贴底部还能自动拉伸

假设一个 div 内部有三个 div,自动从上到下排列。如果我们想让内部的三个 div 还是这个顺序排列,但让它靠在下面,让其上面留有空隙。或是反过来,让这三个 div 靠在上面,底下留一部分空隙出来。

这两种效果都可以用 padding 来解决,其实,大部分的 div 排版问题,都可以使用 padding 来解决。

(0) Comments    Read More   
Posted on 10-02-2014
Filed Under (软件) by waterlin

很多人都用 Evernote 来整理资料、记笔记,甚至于写写东西。可是,有谁尝试过直接在 Evernote 里发布文章到博客或是 WordPress 系统呢?

我推荐几种方法供大家开拓思路:

  1. Everblog

    使用 Evernote 来作为数据库,并且写一个前端,不能不说,这是一个很有创意的方案。

  2. EverPress

    WordPress 插件,不过好像很久没更新了。

  3. 通过 Email 发送来发布

    只要你的博客平台支持 Email 发布,应该就可以使用 Evernote 发送邮件这个功能来发布 WordPress 博客。

  4. 使用 ifttt 来中转

    详细参看这篇文章:WordPress 和 Evernote 的互通

  5. 强烈推荐使用 Zapier

    只需要在 Zapier 里设置一个从 Evernote 发布文章到 WordPress 的任务即可。

(0) Comments    Read More   
Posted on 08-02-2014
Filed Under (技术) by waterlin

最近发现,Emacs Org Mode 配置好的静态网页生成工程,已经没有办法自动生成 sitemap.html 文件了。众所周知,sitemap.html 文件是为了方便搜索引擎检索,并且对于 Org Mode 生成静态网页的工程来说也是十分重要的,保不准哪天文件一多你就记不得你的工程里都有一些啥文件了。

我原来的工程,是按照 Publishing Org-mode files to HTML 使用如下 elisp 配置来定义自动生成 sitemap.html 文件的:

根据最新的 Org Mode 文档 Generating a sitemap ,我应该使用如下 elisp 配置文件:

从旧版本的 Org Mode 升级的用户可能需要注意一点,有可能是 Publishing Org-mode files to HTML 的文档没有及时更新。

(0) Comments    Read More