Becomin' Charles

算法 | LNMP | Flutter | Mac

Becomin' Charles

  1. 当初我为什么要用360?

因为一开始我就知道,周鸿祎是所有流氓软件、恶意软件的始作俑者,我认为流氓老祖改行做警察,相当于反水,那么查杀能力应该比较出色。虽然我不知道所有其他流氓都死绝后,会怎么样,但是那是以后的事情。

  1. 现在我为什么不用360?

很简单,我是一个喜欢清净的人,当360开始越来越多的“善意提示”的时候,他已经被我列入了黑名单。开机速度,拦截了什么,什么有风险等等,各类消息层出不穷。我觉得一款真正贴心的杀毒软件,应该静默。杀掉该杀的,留下正直的,遇上可疑的,也要靠自己的能力“艰难的”去判断,而不是把这些见鬼的选择题留给用户,是杀掉?删掉?隔离?修复?四选一,不是那么好做的。而且我很烦这个套路,难道让杀软用户为自己的选择负责么??那要你干什么?

  1. QQ有没有扫描用户的隐私?

这个问题真的很好,腾讯对这个问题也一直回避。因为这个问题真的很难回答。我谈一点个人看法。

第一,怎么定义隐私。其实聊天记录是相当隐私的东西,腾讯已经完全掌握了所有人的聊天记录。我想这是没法子的事情。所以,隐私的定义就比较暧昧。其实,我来定义的话,就是我不想被别人随便知道的那些东西,就是真正的隐私了。

第二,关于扫描。QQ到底有没有扫描用户磁盘?我个人认为,QQ是扫描了的。主要扫描什么呢?盗号木马,系统环境,比如你用什么系统Win,还是别的,哪个版本,XP还是Win 7,浏览器是什么,IE?Firefox?还是别的。这些估计都要扫描的,不扫不知道。而且,也必须知道。360呢,它更加扫描了,所有的磁盘文件,它都要扫描,不过大家觉得好像360是正义的,因为它是杀软,当然可以扫描。

第三,有没有上传?关于这一点,我没有什么直接证据。但是我想说,腾讯没必要干这个事情。我先前已经说了,聊天记录就是最大的隐私了,里面什么都有可能有,很多人聊天的时候来回报卡号,密码,身份证,都有。有了聊天记录,QQ有了一切。那么为什么要上传用户文件呢?我百思不得其解。假设,我是说,假设上传了,那么腾讯必须解决这么几个问题,存放问题,3亿活跃用户的海量文件,存在哪里呢??难啊,做免费网络硬盘已经成本很高了。现在还要保存用户隐私文件,要消耗巨量的成本,腾讯是傻子么??好,如果不保存,那么传上来干什么呢?那势必要分析,分析完了丢弃。那么难题来了,怎么分析呢?学过一点点计算机的人可能都知道,写一个程序有多麻烦。更不要提写一个分析各种用户文档形成有用数据的程序了。大家骂腾讯是个没技术,没创新的山寨公司时候很起劲,那么这个时候为什么又认为腾讯有能力分析那么海量的数据了呢?有那个能力,不会把搜搜做好一点去抢google饭碗吗?何必跟用户的私人文件过不去?

我说这么多,无非想说,不管这个事情有还是没有,它本来就不符合逻辑。大家自己可以好好判断。

第四,关于监控。我估计,这不是谁都敢谈的话题。我也不想多谈。我只想说,在中国,不监控可能么?虽然我也没有什么直接证据说明QQ监控了,或者没监控。但是想想应该不难推理的。你们懂的。

最后,是一个很好的建议:

如果大家觉得聊天内容本就无关紧要,那么请继续使用网络聊天。否则,请放弃网络聊天,只打电话,或者面谈。

如果大家继续选择网络聊天,那么我觉得选择QQ是完全可以的,因为你本就不在乎被知道些什么。

如果大家非要觉得QQ是邪恶的,那么不选择QQ也是完全没问题的。不会伤害我的感情。不过,我希望大家不要选择使用MSN。那样才会让我痛心。基于几个理由:

1,MSN是个很烂的软件,登录困难,广告难缠,体验差劲,功能缺失。

2,MSN采用明文传输聊天内容,等同于你的聊天内容在互联网上裸奔,没任何安全可言。

3,MSN也不是一个开放架构,而且还是另一个超级流氓微软的产品,曾经做过捆绑到Windows里,视图抹杀一切IM软件的邪恶事情。

那么我来给大家推荐一款很好的QQ替代品,那就是GTalk。

  1. google出品,信誉保证。

  2. 开放协议,保证透明。

  3. 无穷多客户端,手机上至少10种客户端,pc上更是无穷多客户端,还有web版,那就是GMail。

  4. 聊天内容加密传输,保护隐私。

最后,希望大家在网上冲浪愉快。

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

  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 添加红绿两色,虽然不多,但是远好过了单调的黑白页面。