Blog domain & host migration

这个博客本来是淘宝上租的小空间。最近几个月每个月底都会超过bandwidth的quota。我想搬server已经想了很久了。目前这个server已经租了一年了,我除了拿来小玩玩也没怎么用(主要是不太会玩)。今天趁放假无事先把blog搬过来。(以后还想装wiki用。)简要记录一下我做了什么(参考了网上很多东西,什么都不知道的时候先看了这个视频):

装好LAMP stack,设置apache弄个subdomain(blog.kate1138.com)。

登陆原来的cpanel,用备份向导把mysql DB和home目录都打包备份下来。然后scp到新server上,把wordpress目录放到对应的domain路径下。在mysql里创建博客的DB和用户,把原来的数据库备份导入。立刻,blog.kate1138.com就可以访问了。

然而并没有这么简单。页面上所有的链接(单篇博客、登陆入口等等)都是老的博客。于是搜了wordpress官方指导,在老博客的设置里把URL改了(本来是www.kate1138.com,改成blog.kate1138.com)。然后重新从cpanel下载数据库和文件备份,再把文件放回新server、数据库重新导入。

然而wordpress有个设置是可以让URL是blog.kate1138.com,但把文件都放在blog.kate1138.com/wordpress下。我的文件在wordpress/下的时候,把网站指向wordpress/后,能访问博客首页。但是后台登陆页面指向blog.kate1138.com/wordpress/wp-login.php,对应server上文件路径应该是wordpress/wordpress/,所以访问不到。

我就把网站重新指向没有wordpress的路径,把wordpress/下的文件都搬到上一层来,再重启apache。能够访问博客首页,但是登录的页面还是指向blog.kate1138.com/wordpress/wp-login.php,我仍然没有这个目录。

我把网站仍然指向没有wordpress的路径,但把文件都放在wordpress/目录下,访问blog.kate1138.com/wordpress/wp-login.php进入后台,把站点地址和wordpress地址改成一样的(不带wordpress/)。再回去把文件都搬出来。这个功能的官方说明。我不知道我为什么不能设置成和原来一样的。

接下来还有一个问题,就是每个post里的媒体链接和引用本博客的链接,都还是老的博客链接。官方帮助里提供的解决方案是插件。我用了其中一个插件成功了。看起来现在搬博客这件事终于完成了。我搞了大概四小时。。。现在我可以继续在博客上唠叨了。

我觉得我老是没有捣鼓的动力的一个原因是我从来记不住tar命令的用法。。(?

argparse

读完Python官方教程modules一章之后,我以为我可以开始写script了。然而我不知道怎么给script传参数。同事写的例子里面,是拿了一个config module把参数从另一个文件里读出来。可是我想何必呢,处理命令行参数的技能总是要的,我很惊讶基本教程里没有。搜索了一下才知道,argparse是后来进入canon的module。

argparse的官方教程的时候我很糊涂。介绍了positional argment之后介绍了optional argument,然后就没了。难道positional argument对应的不是named argument吗?我搜了一会儿才发现,官方虽然把optional argument都当作named argument来操作,甚至可以加一个required=true的限制,但是在打印帮助的时候required=true的参数还是打印在了optional argument里

我们到底有没有理解错Python设计者的原意啊。。。(大概不是为在命令行调用设计的,我经验太少不知道script语言除了命令行调用还可以怎么用。Python号称可以和别的程序语言结合用很灵活的。

随想

今天终于有点空继续写powershell工具。最初接触powershell的时候,我以为就是Windows模仿Unix的一个东西。实际上powershell里目前感受到最大的不同是数据类型比较规范,shell里面变量都可以是字符串,因此比较低层。powershell比较高层一些,也意味着要多理解一些它的内部逻辑才行。

下午花了不少时间把上次写到一半的东西拾起来。上次终于写出了正则表达式表示的分隔符。因为分隔符有可能用到在数据里,所以我希望能有个escape character。在股沟里键入”powershell regular expression”,不能给我官方手册。这也是MSDN讨厌的地方。(实际上,我应该用PS自己的help,不过还不会用。)千转百回终于找到了上次参考的文档,赶紧存下来。看了这个文档,终于重新弄明白了自己上次写的代码。发现了一个漏洞——补上。漏洞本身的逻辑也很简单。但是容易漏掉。所以这些都不靠聪明,而是靠强迫症。

实际上,数据用到分隔符的可能性是非常非常小的。不过我还是纵容了一下自己的强迫症。

学一个新的东西真是不容易。我一直觉得,只要给我官方文档,和一个可以尝试的环境,那么什么都能学会。MSDN是我见过的最难懂的官方文档了。

写代码的能力,除了一般的计算机sense,其它的我觉得有这么几点:

1)要会尝试、很快地尝试。尝试是迭代知识的必要手段。特别是对我这样的强迫症,如果不尝试,我总是要怀疑之前的想法中有没有靠不住的地方。要很快地尝试,这样思路就不会打断

2)要善于meta化,来理解程序语言的设计思想,或者来理解机器的执行。

1)和2)要很快地交替,meta化了之后,往往会萌生新的问题、怀疑、理论,这就要继续尝试、根据尝试结果来修正或者reinforce理解。

另外,必不可缺的是股沟。有股沟、维基,有官方文档、可以尝试的环境。好了,我可以撬动地球。

当然,我一直觉得我很不够聪明的。前一阵读到网上关注的一个人的说法

好像发现一个通用的评估标准:事情复杂到什么程度你开始自我欺骗,就决定了你是什么层次的人。心理比智商还重要。有人知道我在说什么鬼话吗?

这个人有歧视女性的倾向(但人是开明的,我相信如果他遇到真正智慧的女人他会识别的),然而除此之外他的很多观点我很同意,也很独到。

强迫症永远不允许我自我欺骗。但是有时候我有逃避困难的倾向。

用新学的语言写小程序,一开始总觉得困难重重。跟着一个好的tutorial来学是客服最初困难的好方法。但是学一点点就要自己尝试。即使试会了教程里面的例子,实际要用的时候,还是有很多困难:设计的时候:这几个并到一个function里可以吗?用的时候会不会有问题?实施的时候又要被各种实际抛错影响。好在到达一定程度之后,一切会变得简单、效率百倍。以至于舍不得停下来。今天太晚了就回家了,但是到家后我还在写日记想这些。。。