Becomin' Charles

算法 | LNMP | Flutter | Mac

Becomin' Charles

工作有半年多了,一直顺风顺水,今天一下子接连犯了几个严重的错误。记录下来,时刻惊醒。

  1. **执行删除文件操作,一定要备份,应该让备份过程内化到自己的本质中去。**以前在自己的电脑上,想怎么折腾,怎么折腾,文件丢了也没什么大不了,现在到了工作岗位,所有的文件都很重要,其中有些甚至关乎客户,文件数据直接等同于金钱,不能随便删除。这次我犯的错误只是丢失了服务器的log,后果还不是特别严重,估计产品经理会帮我掩盖过去,如果捅到用户那里,不追究就好,追究的话,我就得背一个事故在身上了。

  2. *使用NIX的crontab运行定时任务的时候,一定要使用绝对路径。**这个错误实在是太低级了,我感觉自己就像个白痴。说明对Linux的理解,仍旧是一个小白级别的。正是因为填错了路径,造成我上面干的蠢事,把服务器log丢失了。**以后执行任何自动化脚本,应该尽量使用绝对路径。**这个也要内化到自己的本质中。本来自动化脚本就是写好了不用动的东西,为什么要偷懒少写一点路径呢??蠢死了,路径用变量存储,已经非常省事了,还要再偷那么一点懒干什么呢?相对路径害死人啊。

  3. **不能相信实习生。**以前,作为一名实习生,我要求自己要可靠。我想每个实习生也对自己有所要求。但是,说白了,责任不会让任何实习生承担的。不管他们多么负责,也轮不到他们来承担任何责任。所以,你分发出去的任务,本质上都是你的责任。出了问题也要你负责。别人可以帮你做事,但是不会帮你承担责任。所以,不要相信实习生。其实我对实习生没意见,只是想说,一定要对自己负责。要把所有从自己身上分出去的事情,都当成是自己的事情。

引以为戒,引以为戒!!

用了Macbook Pro已经有一周多了,很是惊叹于苹果的工业设计。另外,也对Mac OS X的设计理念深感敬佩。我想,如果我不是一个被Win荼毒了十几年的Win-er,基本上应该是非常习惯并且能轻松上手Mac的。

在MBP上,有几个我非常熟悉的键,我找不到了。那就是PageUp,PageDown和Home、End。失去了才觉得珍贵,以前键盘上有这几个键的时候,不觉的怎么好用了,但是一旦失去了,还真的挺不习惯的。

在网上查了一些资料,看到了替代的方法。在这里记录一下,主要应用场景,就是网页浏览的时候:

PageUp = Fn + UP
PageDown = Fn + DOWN
Ctrl+End = Fn + RIGHT
Ctrl+Home = Fn + LEFT

上面提到的上下左右,就是指方向键。这只是一个替代方案,还是有其缺陷的,比如我发现当文本框获得焦点的时候,就会失灵。

在编辑的时候:

Home = Command + LEFT
End = Command + RIGHT

以上的键组合,基本上可以满足基本的使用,不过组合键总归是不如直接键来得方便。只好慢慢习惯了。

上一篇介绍了Git的一些基本信息和安装方法,这一篇来介绍一下Git的基本使用。首先声明,我不是使用这个的专家,哪怕连熟手也说不上,我这里只是记录了我自己在学习使用Git的过程中的一些领悟。大家要抱着怀疑态度和试试看的态度来利用我的文章,千万不要我说啥信啥。

回忆我在SVN下的工作流程

我不知道一般人的思路是怎样的,我在了解Git的时候,我最迫切的愿望就是,首先能够让我像使用SVN一样来使用Git。我可以不关心Git的各种优秀特性,如果它不能像SVN一样地工作,那么对我来说,学习它的动力就会大打折扣。

先来看看我在SVN的帮助下,是如何工作的:

首先,我会找一个免费的项目托管服务,通常情况下,是Google Code或者是WordPress Plugins Directory,这是因为我大多数情况下开发的东西都是WordPress插件,而上述两个地方都提供以SVN为平台的项目托管;

创建一个名为my-foo-bar-project的项目,然后,我就已经在服务器上有了这个项目的根目录,一般我会这样设计我的项目根目录,根目录下会有三个子目录,一个叫trunk,一个叫tags,一个叫branches,第一个用来存放我大多数情况下在其上工作的版本,tags经常用来备份我项目的一个稳定并且已经发布的版本,branches通常情况下我并不使用;

事实上,这个时候my-foo-bar-project已经有了其基础的代码框架了,我并非一无所有。这时候,我会首先svn checkout http://svn.wp-plugins.com/my-foo-bar-project/trunk my-foo-bar-project,执行这个命令,我会在磁盘目录上得到一个叫做my-foo-bar-project的目录,并且,这个目录已经被纳入到了svn的管理之下,刚开始学习的时候,我用TortoiseSVN来做这部操作,要做的事情只是找到项目的url,然后在资源管理器里点点鼠标;

接着我会把我以后的项目代码拷贝到这个目录中,然后执行svn add . 命令,将所有的文件都加入到svn的监管之中,然后执行svn commit –m “Init commit.” ,如果我有乌龟SVN的话,我不需要add,只需要直接commit,然后用鼠标勾选新加入的文件,就可以完成任务;

到这里为止,我的项目的主要代码已经纳入到了SVN管理中,我可以放心地不断提交我的工作副本(working copy),因为我知道我可以随时回滚到旧的版本;

当我发布好一个稳定版本之后,我会用svn cp命令或者乌龟SVN的tags/branches命令来备份一个版本;

以上就是我在SVN管理下的全部日常工作了,注意,里面没有提到怎么回滚文件,因为事实上,我真的很少做文件回滚操作,我不喜欢回滚,我提交代码相当谨慎。或许以后,我会研究一下,到底怎么回滚,为了回滚而回滚。

Git的入门级用法

我花了很多的篇幅来介绍我在SVN下如何工作,就是为了要说明我下面的一些举动以及尝试的指导思想,我只是想要一个更好的,更安全的SVN,然后,我才想要一个Git。

最早的版本控制就是将文件拷贝一下,放到用不同时间戳命名的文件夹中。在此基础上出现了本地版本控制系统,基本原理就是用数据库等存储,将文件的每一个版本的保存下来,实现了本地的自动化版本控制系统(VCS=Version Control System)。

后来,人们产生了与别人协作,共同编辑文档的需求。由此,衍生了一种架构,使用一台单独的计算机作为服务器,专门管理文件的所有版本,这种结构,就叫做中央版本控制系统(CVCS = Centralized VCS)。这种架构一度成为了版本控制系统的事实标准。典型的有CVS,Subversion等等优秀地工具。

中央版本控制系统有诸多优势:

  1. 及时了解他人进度;
  2. 控制每个人对特定文件目录的读写权限;
  3. 更容易管理项目的代码文档;

事物总是具有其两面性,缺点也不可避免:

  1. 如果中央版本控制服务器荡机,则所有人无法提交文件;
  2. 如果中央服务器硬盘损坏,将丢失全部版本信息,本地版本控制系统也有这个问题;

为了能够规避上述的风险,那么我们需要把鸡蛋放在多个篮子里,于是,就要有冗余,于是就产生了分布式版本控制系统(DVCS = Distributed VCS)。代表产品有Git,Mercurial,Bazaar,Darcs等。在这种结构中,也有一台中央服务器,保存所有的文件及版本,不同的地方在于,每个客户端在从服务器检出版本的时候,都会将全部版本库拷贝一遍,每一台机器上包含的都是一个完整的版本库。在这种情况下,如果服务器发生问题,那么每一个客户端,都可以轻易恢复整个版本库,杜绝了CVCS带来的风险。

Git的由来

Linux内核是一个大型项目,有无数的开发者工作在其中,从2002年开始,Linux内核项目使用了分布式版本控制系统BitKeeper,但是从2005年开始起,Linux内核开发社区和提供BitKeeper的商业公司关系恶化,Linux对BitKeeper的使用不再免费。于是这种状况激励了开发者(主要是Linus Torvalds)去研发属于自己的分布式版本控制系统。从2005年开始起,Git诞生了。

  1. 速度快;
  2. 设计简单;
  3. 对非线性开发的强大支持(数千分支并行开发);
  4. 完全分布式;
  5. 能管理大型项目,像Linux内核这样的(对数据占用空间和同步速度有较高要求);

Git与普通CVCS最大的不同在于,Git存储的不是文件的差异,而是存储文件本身。Git分布式特性决定了在Git中的绝大多数操作都是本地动作,就好像是在文件系统中读取一个文件那样简单,所以,也就有了近乎极限的速度。同时,这种特性还给用户提供了在断网情况下继续工作的可能性。

Git的安装

可能Git还有很多的好处,但是我估计看到此文的您跟我一样没有耐心去了解那些东西,赶快装上体验一下才比较实惠。不得不说,在Windows下安装*nix世界的软件是痛苦的,尤其是像Git这样年轻的软件,那过程真的是相当痛苦。

以前用过SVN,在Windows下的SVN有好多版本,最著名的就是TortoiseSVN,那真是无敌好用,基本上不要你对SVN的命令有什么详细的了解,你就可以非常愉快地使用了。真对Git,同样有一个TortoiseGit,但是,千万要小心了,这个可并非那么好用的。

首先,就算你想使用TortoiseGit,你也必须安装“原版”的Git。所以,不要抱有侥幸,请直接去http://git-scm.com/download下载for Windows的版本,我选择的是msysgit,这个东西很有特色,是在你系统上安装了一个MINGW32(Windows下的Linux命令环境),然后在这个环境下,用gcc现编译了一个git出来,所以官网特别强调了“这不是一个为Windows设计的第三方版本,而是git本身”。

装完这个的第二步才能轮到TortoiseGit等GUI扩展,这篇文章里暂时先不介绍了,因为我装完了以后,发现根本不能用。还是直接用git命令行比较好。

下载msysgit的时候,有好多版本可以选择,第一个原则是选择最新的,如果安装包表明是网络的,那么是通过安装过程中从网上下载源码的,否则就是带有源码拷贝的,我选了完整安装包,就是不需要网络下载的。双击安装,首先解压缩到磁盘上,自动启动MINGW32环境,开始编译,安装,都是自动的,全部结束后,会提示运行 /share/msysGit/initialize.sh,在msysgit目录下运行msys.bat,你会得到一个命令行,然后执行:

cd /share/msysGit/

./initialize.sh

以上两行命令执行后,会开始联网下载若干命令,把整个msysgit目录都纳入到了git的管理之下,现在刚开始学,我想这个东西不用管了,执行了命令成功后,就算是有了一个可以开始实践的平台了。

在插件管理页面,每个插件下面有2-3个Action link,包含了用户可以对该插件进行的几种操作。在插件为禁用状态时,可用的操作有:Activate(启用),Edit(编辑),Delete(删除);在插件为已经启用的状态下,默认有两个可用的操作:Deactivate(禁用)和Edit(编辑)。如果我们在这个列表里仔细观察,就会发现,有些插件会多出一个Settings(设置)操作。本文记录了,为插件添加Settings link的方法。没有什么过多的描述,直接放代码了。在插件主要文件中(包含了插件信息注释语句的那个文件),使用下面的代码,就可以为这个插件添加一个Settings link了。

1
2
3
4
5
6
7
8
9

function fmp_add_setting_link( $links ) {
$links[] = 'Settings'; //怎样构造这个link呢?大家可以自己想想
return $links;
}
if(is_admin()){
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'fmp_add_setting_link' );
}

Apache的虚拟主机是一种允许在同一台机器上,运行超过一个网站的解决方案。虚拟主机有两种,一种叫基于IP的(IP-based),另一种叫基于名字的(name-based)。虚拟主机的存在,对用户来说是透明的。

阅读全文 »

WP的插件在开发完成后,会在用户的服务器上运行,而用户的服务器环境基本上可以用千奇百怪来形容。开发过程中,在本地运行得好好的插件的,一旦安装到用户的服务器上,也有可能变得无法运行。

所以,作为WP插件的开发者,最好不要对插件最终的运行环境做任何假设。而且,最好能够在插件被启用的时候,进行必要的检查,给用户以提示,对于自己没法兼容的问题,应该明确指出,避免用户遭遇不必要的麻烦。

在我个人的WP插件开发过程中,我主要遇到的问题,基本上都是PHP相关的问题。

阅读全文 »

插件的后台管理页面的主要功能是协助用户设定插件运行时参数,一般都需要用户进行交互,这就少不了需要客户端脚本的参与(主要是js脚本,当然还有配套的css样式表)。

WP的后台本身就已经加载了许多的脚本,包括各类类库和基础功能的脚本。过多的脚本文件引入,会增加HTTP请求,增加流量,拖慢速度。好在,WP的后台已经采取了相当多的措施,来管理后台加载的脚本。首先是用wp-dependency管理依赖关系,用load-scripts来压缩、并加载脚本,使得各种类库被合并到同一个文件中进行加载,节省了HTTP请求数量和流量。

阅读全文 »

man是 Linux 下最最常用的命令之一,用来显示某个命令的手册。

一般在命令行下,manpages 通过粗体和下划线来标记关键信息,有多种方法来使man命令显示彩色的 manpages。

man是调用less来显示 manpages 的,可以更换这个程序,使用most来显示,这是一个方法。但是长期以来使用less,已经习惯,most又有一套操作方法,后来我又发现了一种方案,非常简单,只要通过在.bashrc中设定环境变量,就可以高亮彩显 manpages,非常方便。

设定方法如下,在.bashrc 末尾添加如下几行:

1
2
3
4
5
6
7
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

如此,即可以为 manpages 添加红绿两色,虽然不多,但是远好过了单调的黑白页面。

从 Word97 开始就用上 MS Word 了,直到 Word2007,一晃眼也用了 10 多年了,可惜嘛,依旧是那个烂水平。排版个学位论文啥的,就是我水平的极限了。Word 是一款强悍的编辑排版软件,可惜,我实在钻研精神有限,实在惭愧。现在又到一年学位论文时啊,想着今后漫长的日子里,要憋好几十页的文章,一种孤独寂寥的感觉就涌上心头,实在是不甘心,这就又想起来,有一款排版效果堪比 Word,搞不好还略有小胜的软件,我还完全没有涉足过,这就是 LaTex 了。学习新东西给人的那种新鲜喜悦,可以好好中和一下憋论文的悲苦,于是我踏上了 LaTeX 之旅。

LaTex 一般指的就是 LaTeX 2e,是一个在 TeX 基础之上编写的宏包。关于 TeX 的起源,还有一段佳话,我就不赘述了。乍一接触 LaTeX,无论是由于任何原因,也免不了要把这个软件和 Word 相比较,我同样不能免俗。要说二者的差异,最大的地方还是理念上的差异了,关于这种差异,我同样不想赘述。我只谈体验。LaTeX 无论是学习,还是编写文档,初上手给人的感觉就两个字,痛苦。

阅读全文 »