使用 Chrome 开发者工具校验 XPath

使用 XPath 提取页面内容时,如何快速校验规则有效性呢? 此前曾尝试找寻相关的插件,但是使用的体验很糟糕,于是便使用 PHP 调试校验。 最近发现原来 Chrome 开发者工具自带 XPath 校验功能。 方案一:元素面板的查询功能支持 XPath 规则 方案二:控制台中使用内置函数 $x(xpath[, startNode]) 来源:Stack Overflow

July 10, 2018

人生的意义-20160616

早上骑行上班的路上,听了「流行通信」的「#47 留学和世界眼光——四人醉聊」,其中有听到「人生的意义」这个词汇,四位主播中的「刘佳」是哥大天文系的博士生,也是困惑于这样的问题,在转到天文系前,尝试了很多的专业方向,《圣经》也无法提供寄托,最终觉得天文学对于宇宙的研究可能会帮助解答自己的困惑,以及对天文学感兴趣,进而转系。 端午节前,在上海逗留了几天,期间和刘白光、Larry Zhao 聊了聊,因缘际会翻看了刘白光在简书的文章,对于「意义」,他也在不停地思考。他的「关于意义」一文汇总了过去几年中,他对于意义的思考。 前段时间,看了《世界为何存在》前几章,该书对「为什么存在万物而非一无所有?」这个问题进行了探讨。第一章中介绍了不同领域的巨人对于这个问题的看法,并没有一个统一的解答。 综上,一个终极的准确的解答目前是不存在的。宇宙之谜、生物之谜、存在之谜、知识的边界等等,仍需人们进一步探索、发现和总结。 在此之前,我们不能因为没有找到答案,而陷入「虚无」(虚无用在这里是否准确不得而知),不要极端、不要轻生、不要颓废,以积极的心态面对生活。 Don’t Panic 在这样的背景下,对于意义的探讨将回归到个人,保持好奇心和开放的心态,去「跨过山和大海」,去「穿过人山人海」。 最后,以胡适在「人生有何意义」中的一句话结尾: 生命本没有意义,你要能给他什么意义,他就有什么意义。与其终日冥想人生有何意义,不如试用此生作点有意义的事…… -EOF-

June 16, 2016

Git – 合并冲突时,撤销合并

执行合并操作时,遇到冲突,暂时又不想解决冲突,可以通过以下命令撤销合并: 最新版本时: git merge --abort 版本早于 1.7.4 时: git reset --merge 版本早于 1.6.2 时: git reset --hard 注: git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present. 参考链接 StackOverflow – How to undo a git merge with conflicts Pro Git – Reset Demystified

March 30, 2016

Composer 版本号

我们在开发过程中使用到许多第三方库,需要在composer.json中指明依赖库版本规则来安装恰当的包。 Composer 推荐的版本规则是语义化版本,版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的 API 修改 次版本号:当你做了向下兼容的功能性新增 修订号:当你做了向下兼容的问题修正 基本约束 具体版本 安装指明的具体版本,如果其他依赖包需要不同的版本,安装或更新过程将失败。 1.2.3 范围 使用比较运算符指明有效版本范围。可用操作符如下:>、>=、<、<=、!=。 可以定义多个范围,使用空格( )或者逗号(,)分隔的范围当做逻辑与操作,使用双管道(||)分隔的范围当做逻辑或操作。 >=1.0 >=1.0 <2.0 >=1.0 <1.1 || >=1.2 带连字符的范围 非完整的版本号会用通配符补全,比如 2.0 补全为 2.0.*。 1.0 - 2.0 等价于 >=1.0 <2.1 1.0.0 - 2.1.0 等价于 >=1.0.0 <=2.1.0 通配符 可以在版本号中使用通配符(*)。 1.0.* 等价于 >=1.0 <1.1 下一个重要版本 对于遵循语义化版本的项目,波浪号和脱字符提供更加简介的表达。 波浪号(~) 波浪号常用于标记依赖包的最小版本。可以理解为波浪号标记依赖包的最低版本,并允许版本号最后一位数字增加(不适用于主版本号)。 ~1.2 等价于 >=1.2 <2.0.0 ~1.2.3 等价于 >=1.2.3 <1.3.0 脱字符(^) 脱字符的行为和波浪号类似,但更强调语义化版本,总是允许向后兼容的更新。 ^1.2.3 等价于 >=1.2.3 <2.0.0 不过,对于早于1.0的版本,脱字符处理逻辑如下: ^0.3 等价于 >=0.3 <0.4 注:为了最大化互操作性,对于库类型的项目,推荐使用脱字符声明依赖包的版本。...

February 28, 2016

Git Tagging

标签是什么? 标签通常用于标记历史上一些重要的时刻,通常用于记录发布新版本。 列出所有的标签 git tag 列出匹配模式的标签 使用 Shell 通配符模式 git tag -l 'v1.*' 标签的2种类型与创建 轻量级标签(lightweight) 含注解标签(annotated)推荐 创建轻量级标签 git tag v1.2 创建含注解标签 git tag -a v1.3 -m "commit message" 查看标签详情 git show v1.3 创建指向提交的标签 有时忘记打标签了,不要怕,还有补救的方法。 git tag -a v1.3.1 <commit> 推送标签至远程仓库 推送单个标签 git push origin v1.3.1 推送全部标签 git push origin --tags 删除本地标签 git tag -d v1.3.1 删除远程标签 git push origin --delete tag v1.3.1 git push origin :refs/tags/v1.3.1 重命名标签 将 old 标签重命名为 new...

February 25, 2016

日志分析时,如何获取匹配行和其后若干行的内容?

使用 grep 提供行上下文控制(Context Line Control)参数,可以轻松实现上述目标。 -A NUM, –after-context=NUM Print NUM lines of trailing context after matching lines. Places a line containing a group separator (–) between contiguous groups of matches. With the -o or –only-matching option, this has no effect and a warning is given. -B NUM, –before-context=NUM Print NUM lines of leading context before matching lines. Places a line containing a group separator (–) between contiguous groups of matches. With the -o or –only-matching option, this has no effect and a warning is given....

February 25, 2016

Quotes About Meaning Of Life

“You will never be happy if you continue to search for what happiness consists of. You will never live if you are looking for the meaning of life.” ― Albert Camus “Life has no meaning. Each of us has meaning and we bring it to life. It is a waste to be asking the question when you are the answer.” ― Joseph Campbell “I go to seek a Great Perhaps.” ― François Rabelais...

April 11, 2015

systemd

systemd 是专为 Linux 内核设计和开发的一组系统管理守护进程、类库和工具。systemd 的开发者们将其定位为操作系统的基础构造单元。 在使用它的操作系统中,守护进程 systemd 是 Linux 启动过程中用户态执行的第一个进程。因此 systemd 是用户态进程树的根进程。 命名上,systemd 延续了 Unix 惯例,以 d 结尾来标识守护进程。 References systemd /wikipedia

December 3, 2014

WordPress 再次初体验

最近,利用些许业余时间帮助朋友的创业网站搭建网站。在评估基于 Laravel 从零搭建、基于 WordPress、Drupal 等 CMS 进行搭建等多种方案后,最终选择 WordPress 这个平台。 虽然此前自己做过一段时间 Drupal 定制开发,但是我一直认为其主题开发方面比较坑,D8 在这方面有没有改进,也没有进行关注,即使改进了,也需要自己学习很多新东西。而基于 Laravel 从零搭建,管理后台的搭建就需要耗费太多的精力,如果想要实现较好的交互体验,还需要强力的前端支持,开发成本过高。鉴于朋友的网站是媒体性质的网站,WordPress 比较适合该类型的站点,其具有功能强大的管理后台、丰富的功能插件、够用内容发布流程和较为华丽的主题,最终决定选型 WordPress。 为了能够按时保质保量完成任务,这一次真心投入精力去学习去了解这个系统,阅读 Codex 文档[1],阅读 WordPress 英文电子书,编写实验代码了解插件、主题开发。也许是伴随着快速的版本迭代演进,WordPress 变得越来越强大了,底层的结构也变得比较优雅(也许是因为我以前就没有用心去看懂的缘故 -_-!!!)。 另外,伴随着对 WordPress 的一些概念的理解和实战,更正了自己此前的一些偏见,重新认识了该平台。 观念一:自己写不写东西,其实和自己使用的是 WordPress、Ghost 亦或者 Jekyll 等等完全没有关系,关键在于自己想不想写,愿不愿意写。 观念二:不是所有的代码都需要自己手动完成,适量投入一些金钱,购买一些优秀的插件,能够帮你节省更多的时间和金钱。 观念三:不要建立太复杂的分类结构,简单的组织一些,写下去就好。以前那些花里胡哨的分类我现在都不知道是为什么创建的了,囧。 最终决定写下这篇文章,并希望以后能够经常记录一些内容,比如学习笔记、生活感悟、WordPress 新认知等。 [1]: Dash 大赞

December 1, 2014

开启daemon模式:nohup vs. screen

通常我们的服务器上一些任务,如邮件发送服务,需要以daemon模式运行。使用nohup和screen都可以实现这个目的,但它们的实现机制是不一样的。 nohup通过让子进程忽略SIGHUP信号实现。screen通过开启一个新会话实现。因为screen的父进程是初始化进程init(pid=1),所以当我们断开服务器连接时,screen中开启的任务不会收到HUP信号,还会继续运行。 下面,我们通过一个具体的例子进行演示:首先,写一个死循环脚本(loop.sh);然后,分别使用nohup和screen实现daemon模式运行;最后,使用命令:ps xafo pid,ppid,command,查看进程的实际运行情况。 loop.sh代码如下: #!/bin/bash while true do echo `date` sleep 1 done nohup 启用命令: $ nohup bash loop.sh & 进程信息: 6458 678 \_ sshd: vagrant [priv] 6475 6458 | \_ sshd: vagrant@pts/1 6476 6475 | \_ -bash 11185 6476 | \_ bash loop.sh screen 启用命令: $ screen # <— 开启会话 $ bash loop.sh # <— 运行进程 使用 Ctrl+a d 退出会话。 进程信息: 9051 1 SCREEN 9052 9051 \_ /bin/bash 9110 9052 \_ bash loop....

April 12, 2014