存档

‘编程’ 分类的存档

TotalCommander下一键创建临时文件夹

2012年4月20日 没有评论

需求:

有时候需要备份一些文件,一般是临时的代码,或者旧的开发环境。备份的目的是防止代码搞乱了或者环境设置乱套了至少可以恢复到某个时间点。一般备份在d:\temp目录下,但这个目录逐渐成了垃圾堆,想着每次备份应该有个单独的目录。目录名字应该就是当前日期,方便查找。这个过程最好是自动化,一键搞定。


最后使用TotalCommander配合Python搞定。设置成这样。

Image(71)

新建了一个自定义命令(存储在usercmd.ini中,这个文件貌似需要和tc的配置文件wincmd.ini放置在同一个目录下),然后给这个命令绑定了一个快捷键(我用了Ctrl+F7,F7是创建目录,ctrl+f7相当于加强版的创建目录,容易记住)。

具体设置直接点击上面的图片放大就可以看到。

参数设置为“? %P”,含义是将当前目录作为命令的第一个参数,放在对话框中让用户有机会修改。在“Change user command”对话框点Help按钮可以看到更多参数的帮助。

? as the first parameter causes a Dialog box to be displayed before starting the program, containing the following parameters. You can change the parameters before starting the program. You can even prevent the program’s execution.

%P causes the source path to be inserted into the command line, including a backslash (\) at the end.

快捷键设定为ctrl+f7(F7是创建目录,便于记忆,ctrl+f7相当于加强版的创建目录)

Python脚本如下:

# only apply to file, need add support for directory

import os

import time

import sys

import shutil

sourceDir = sys.argv[1]

dir_base_time = time.strftime(‘%Y%m%d_%H%M%S’)

os.mkdir(sourceDir + "\\" + dir_base_time)

print sourceDir + "\\" + dir_base_time

# os.system(‘pause’)

 

PS:命令如果修改为"pythonw ***.py"以后可以避免弹出Dos终端对话框。但是副作用是TotalCommander不再自动刷新目录了,手动刷新一下目录就出来了(如果可以自动进入这个目录就更好了,不知道行不行)。

(使用python.exe可以刷新是因为弹出终端窗口以后,TC会失去焦点又重获焦点,然后自动刷新)

Image(72)


下一个目标是自动压缩/解压ear/war/sar文件。因为J2EE调试的时候,特别是调试Web端的时候,使用Explod目录会省很多事,更新图片啥的不用重启J2EE服务器。但是解压这些包文件的过程很麻烦。如果自动化就好了。目前还不急。这个显然要比自动建目录复杂多了。

原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/11744;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程 标签:

iOS开发一周半

2011年6月2日 6 条评论

自从上周一心血来潮开始写iOS的代码,已经坚持了一周半了。

当然学习iOS的东西更早之前就开始了,因为是全新的语言,所以一开始就处于随时准备打退堂鼓的状态中,结果ObjC学起来还算顺利。虽然困难不少,但水滴石穿,居然也被我死皮赖脸地学下来了。

但学会了一门语言是一回事,做一个东西又是另外一回事。我Java都玩了这么多年了,自己做出来玩的东西,几乎没有。半途而废的项目有几个,真的要做也是可以的,但从我以往的经验看,费了那么多力气,死了那么多脑细胞,掉了那么多头发,花了那么多时间,总得有所交代,如果投入没有产出,不如不做。

倒不是功利,只是人生就得有所选择:打游戏喝茶吃饭就算是浪费时间吧,也未必比写一个无意义的软件更浪费时间。

就这样,不断拷问自己,要不要写点东西出来,怎么写,写什么,写出来有什么用。于是就踌躇了,犹豫了,彷徨了。

最后终于动手,是啥原因呢,是我犯贱又在胡说要写个程序去卖钱(这年头最容易把软件卖钱的平台只有一个,就是AppleAppStore),老大泼冷水,如果只是说卖代码卖不出钱(事实上十有八九的确也卖不到钱)我也就认了;问题是她说卖到了钱电子产品随便买。

这个叫打蛇打在七寸上。因为我的罩门之一就是过一阵子就想买电子产品,心里明白有些东西买回来搞不好又是一摆设,手里又痒得不行,为了克服自己这一个弱点,办法是码字,把想买的东西优点缺点全部写下来,这心也就冷了,但这办法是堵,俗话说堵不如疏。

所以老大的话,算是我给自己找了一个理由,开始再一次三分钟热度写一个无意义的软件。

这次也没有找朋友撺掇加盟一起发财,心里明白自己不过是三分钟热度,自娱自乐还行,把朋友拉进去那叫浪费别人的时间。

一开始有点担心自己有没有时间来做这个东西,下班以后再编程会不会太累,但尝试了一周半以后发现还行。主要是实际操作的东西比较多,东摸摸,西摸摸,各种尝试,遇到问题解决问题,乐趣还是不少,也不累。学习新东西本来就是我的爱好之一。感觉也充实。

也没啥压力,玩个一小时的编程以后就开始玩游戏或者看电影,反而要比原来吃过晚饭就打游戏要来得充实,感觉至少还做了点事。劳累的问题,本来是有点担心的,OnlyWorkNoPlay,JackBecomeDullBoy,但实践下来其实还行。加上我有做笔记的习惯,每次不在于多学多少东西多写多少代码,而是总有收获,这收获记录在笔记里,一个是不容易忘记技术细节,一个是自己看看也觉得舒坦,我记性不好,经常忘了昨天干了什么事情,写下来,也觉得日子每天都很充实。

这次选的题材,相当地简单,一个是第一个App不想搞太复杂的,不想一口气吞只牛,第二个是自从用上了iPad以后,明白了啥叫少就是多,关键是解决问题而不是堆砌功能。哪怕只有一个界面,只要是用户需要的东西,就够了。

希望这个App我能够坚持完成它,想来问题也不大。几个原因导致我有信心完成它:

1,没啥界面设计,美工是我弱项,但目前做的这玩意几乎不需要美工

2,需求我已经冻结了,为了防止每次都人心不足蛇吞象,我第一步就是冻结住需求

3,iOS开发的代码量很小,很多东西都已经傻瓜化,有现成的框架可以套。

但进度上,我不想逼自己,捞钱的时机早就过了,就我这种三脚猫,想要捞钱颇有点花痴的感觉。再说了,生活环境如此的宽松,自娱自乐最重要;发财发财发大财虽然是我的梦想,但反正我也没本事发大财,不如索性放松点别想太多。

因为我的博客很成功(因为我的成功的标准是自己经常写,而不是别人经常看),所以准备延续博客成功的经验:也就是不为别人写,不为钱写,不为流量写,只为自己写。

有乐趣的事情,才能坚持得下来。我也没啥事业,目前看来,我的博客就是我最成功的事业;如果App可以成为我第二个成功的事业,我觉得,也挺好。

前几天老大松口了,说,你要买啥就买吧。我说,你错了,我其实并不想买啥,我只是想找人聊聊这些电子产品而已,只有真正的那种能改变生活的东西,我才会去买;而iOS开发这事,其实和赚钱买硬盘啥关系没有,我只是需要个理由而已。

原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/11446;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程 标签:

XCode的替代品JetBrains AppCode

2011年4月10日 没有评论

嗯,这个是我最近在玩一个开发工具,本来没有打算写在博客上,是跑去CocoaChina论坛贴了一个帖子,写完以后,本着自己对论坛的不信任的原则,决定在自己的博客上备份一个帖子

JetBrains的AppCode是一个新的ObC的IDE,刚刚出了第一个版本,连Alpha测试版都不是,所以很多问题,不过依然值得一试。

官方网站:http://www.jetbrains.com/objc/

优点:

拥有JetBrains贯穿于多个产品线的强大的代码重构;如果你是JetBrains的老用户,比如Java的IntelliJ IDEA,Python的PyCharm,Ruby的RubyMine,你都可以发现以往的快捷键和大部分的代码重构都在。

对于不熟悉JetBrains的朋友,我举几个例子来说明,因为我对XCode不熟而且是Java程序员用词可能不符合ObjC的习惯,所以错漏之处请指教。另下文所述的快捷键是在AppCode中将KeyMap设置为“IntelliJ IDEA”而不是“Default”。

1,代码自动生成。
比如声明一个@property,一般我们需要在.m文件中添加@synthesize,让光标停在propterty行,按一下ctrl+n,唤出菜单,即可秒添加相应的Synthesize代码。其他的还有overwrite父类方法,实现父类接口,都是同一个热键唤出菜单,在按两下上下键和回车键就搞定了,不需要鼠标。
2,代码跳转功能。
使用cmd+f12可以列出当前类的树结构,直接输入变量名或函数名快速定位(直接通配符),回车即可快速跳转到对应位置。ctrl+上下键,是在函数间快速跳转。cmd+n可以直接搜索类(支持通配符)
3,代码重构。
选择代码块,按opt+cmd+m,可以将代码块直接extract成一个方法。同样的操作对变量也适用。按代码块添加异常捕捉,也只需要一个热键,甚至连异常处理代码中连NSLog也已经自动生成(选中状态,也就是如果你不喜欢的话可以直接无视这个NSLog直接输入自己的代码)。

对于键盘流的爱好者,我需要指出一点:AppCode是一个真正的键盘流的IDE,可以让你摆脱鼠标的束缚。
我是从这个公司出品的Java IDE:IntelliJ IDEA得出这个结论的,目前AppCode版本连Alpha版本都算不上,所以可能有些地方还是会不够键盘流,但这个公司的设计灵魂会保证它第一个正式版一定是键盘流的。
XIB的界面设计功能摆脱不了鼠标,但界面代码其实是可以不用InterfaceBuilder而全部手写的(Java里面所有的界面代码我都是手写而不是借助任何界面设计工具,这个问题上我可能是特例)。

缺点:
严重依赖于XCode:XIB和PList文件都需要打开XCode编辑;在代码直接查看快速帮助时如果点帮助中的链接,会跳转到XCode中的Organiser中。更糟糕的是,切换过程中会造成XCode频繁提示Crash,虽然多按几次Continue,但也够烦心的。

最后一点,AppCode是个Java程序。。。用Java写一个ObjC的IDE,这一点蛮搞笑的。

最后贴一张官方的截图,这个截图中演示的是个自动纠错功能,AppCode发现一个没有被定义的变量,提出了4种解决方案,用户用上下键选一下然后回车即可更正。我试了一下,虽然XCode号称有自动纠错的功能,但我没有找到类似的功能(请指教)。XCode需要编译代码才能发现这个变量未声明的错误,而AppCode无需编译就能发现这个错误,并给出自动修复的办法。

 

AppCode的代码重构,有点像MacOS上著名的TextMate(我没用过这玩意,但仔细看过他们的ScreenCast),吧唧按一个快捷键会帮 你生成一堆的代码,自动把光标移动需要输入的位置,当第一个输入完成以后,按一下Tab键,会跳转到第二个需要输入的位置,如此循环直到全部完成。

举例而言,按一下Cmd+j(或者菜单里面选一下),输入alloc(或者在上下文菜单中选一下),回车,生成代码

[[ alloc] init]

光标会自动移到” alloc”前面,

然后输入类名(这里还有自动完成,输入头几个字符以后会把以这几个字符开头的类全部列出来给你选),输完按回车,就会跳转到”init]”后面,等待用户进一步输入。

如果你是TextMate用户,你应该很容易理解我在说什么。

原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/11424;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程 标签:

IntelliJ IDEA 推广 介绍 入门

2010年2月25日 14 条评论

注:这文章写得太水了。周日和ZY的一场不太和谐的争论以后,我决定尝试一下Eclipse,结果发现Eclipse其实也有不少技巧,我只是不知道它们而已。还发现了一篇Terse Systems : Why IntelliJ IDEA sucks,是一个Eclipse的重度用户攻击IDEA不好用的文章,请关注它的评论中有不少有趣的反击。总之IDEA现在看来,是个好工具,不过并没有到艳压群芳的地步,我只是井底之蛙,发现了一片天空,以为就是一个美丽新世界而已。文章依然保留,就当是蝴蝶拍了一下小翅膀。

IntelliJ IDEA似乎还不是一个很流行的Java IDE,因为最近两年来,一直在使用它,渐渐得有了一些心得。想,也许我应该写一点东西来推广一下它。

为什么我会这么推崇IntelliJ呢?原因是,它能够做到超高效率的编码。

IntelliJ IDEA的宣传单上有一句话:“我们与其他软件不一样,我们的默认快捷键是精心设置过,如果您以前使用的其他IDE和我们的快捷键不同,请尝试一下我们的。”我想说的是,这句话并没有任何言过其实。

IntelliJ的快捷键,是一种容易上瘾的东西,花10分钟到半小时学习一下,你会发现自己从此就不需要鼠标了。

首先举一个搜索的例子:

您忘了工程里一个类位于哪个包下,很简单,ctrl + n,输入类名,IntelliJ会帮你搜索。不仅如此,它还支持星号和问号通配符。更简单的,对于ImportDataNodesQuickAction这样的类,您可以输入IDNQA(所有的大写字母),或者ImportDNQA(相当于省略了星号的通配符)。超强。

如果您想找的是个资源文件比如图片,而不是一个Java类,很简单,ctrl+shift+n,输入关键字。

如果您想找的既不是类又不是文件,而是Java类里面的一个函数名或一个全局变量,很简单ctrl +alt +shift +n,输入关键字。

JBuilder下有个强大的功能就是模板。输入数个字符就可以生成一大段代码。IntelliJ IDEA更是把这个做到极致。请让我介绍一下它的Live Template功能。

当您第一次尝试IntelliJ,第一个程序当然是HelloWorld。

那么main函数您怎么写,挨个敲入public static void main(String[] args) ?太长了太长了,在IntelliJ下您这样做:

首先按ctrl+j,出现一个下拉框,别理他,接着输入psvm,回车。怎么样,所有的代码都有了。光标还自动停在了你准备编码的位置上!

然后您一定是准备输入:System.out.println(“Hello World”); 然后再添加import java.lang.System申明 ?在IntelliJ下面您这样做:

依旧按ctrl+j,接着输入sout,回车。自动生成了代码不说,连Import都帮您自动完成了!光标还停在println(“的位置上,就等着您直接输入Hello World。

如果您坚持看到这里,毫无疑问,您是一位Java程序员,这点小伎俩当然无法让您留下哈喇子,那么我接着来点猛料。

好了,下一步,我们建一个类,让它实现Runnable接口。首先建立一个新类ThreadTest (这个貌似没有快捷键,我们不应该这么懒对不对)

第一步,当然是在类名后加上implements Runnable, 请只输入前两个字符im,然后按ctrl+空格,(唔,中文输入法出来了是不是?请您把中文输入法的快捷键改成别的或者去掉,您依然可以用ctrl+shift来切换输入法),您看自动完成了implements ,然后输入Ru,按ctrl+空格您看Runnable也自动完成了。

先别急着换行什么的去实现方法,听我号令。您看到public class ThreadTest implements Runnable下面有一道红线是不是?这时候按alt+回车,出现一个下拉框,有两个选项“Implement Methods”和“Make ThreadTest abstract”,直接回车,再回车。。。

您看到了,这工程就是全自动贵宾式服务。以上其实介绍了两个快捷键,ctrl+空格Alt+回车。。。一个是自动完成:一个是自动纠错(它不只是帮您实现方法,它还可以帮您添加异常检测,帮您Import工程库,一键式服务,搞定多种难题:难言之隐,一键了之),。总之有了这两个利器,您变成超级大懒虫指日可待。。。IntelliJ IDEA的口号是Develop with pleasure!什么意思,就是出门有人帮开车,进门有人帮拎包,开房有人帮您叫小姐。。。前面这些只是冰山一角,还有很多快捷键充当皮条客为您服务。而这些皮条客的名字绝对不会像VIM那样难记(不知道VIM是什么东东请无视这一句)。

IntelliJ IDEA,乃是杀人放火打家劫舍之利器。

当然了,对高级用户而言,特别是Eclipse用户而言,能够支持各种奇怪的需求才是王道,比如Ant,比如Maven,比如JAXB,比如UML。。。这些也没有任何问题,且听下回分解(有没有下回,就看有没有回帖了;当然不排除自己犯贱的可能性)。

最后说一句,这玩意有商业版和开源社区版。在这里下载。


IntelliJ的缺点:

1,内存占用大大的。。。在我的3G的内存的办公机上,有时候也会慢得我受不了重启IntelliJ。。。当然这个也取决你的工程有多大(公司的工程有8400多个文件,81万行代码)。我的IBM T43跑只有几个文件的小工程就从来没有慢到要重启。

2,界面设计器和JBuilder的思路不同,采用一种特有的XML方式存取界面,总之不推荐使用。因此我练就了手写GridBagLayout参数的基本功。

3,IntelliJ启动的时候会扫描工程中所有Java类的结构,然后用在它超强的搜索里面。因此如果您的工程有百万行代码的话,启动时间就至少有30秒之多。当然启动完了以后,一切都会好起来的。


关于为什么不使用EMACS

楼下回复提到EMACS,作为一个连VIM我都没能摸熟的菜鸟,我当然没用过EMACS。。。shame。。。

但是我有了一些想法,决定写下来。我有个朋友跟我说,写代码,NotePad就够了。还有一个朋友跟我说,不能依赖编译器,你得在编译器帮你检查出错误之前自己用眼睛挑出来,更进一步,你必须一边写代码一边就在查错,这样才能保证代码的正确性。我得说,这些话都是对的。但是IDE这种东西之所以存在,就是因为我这样的菜鸟程序员太多。如果程序员也有末尾淘汰制,每年一定会有一群IDE爱好者被赶出程序员队伍,并强制转行为皮条客。(只有更左没有更左,IDE爱好者被赶尽杀绝的一天,下一步就应该轮到VIM爱好者,哈哈哈。)

您看,我如果有练过EMACS,当然不屑于IntelliJ了,问题就在于EMACS至少要闭关数年,方能神功炼成天下无敌。天下无敌是爽,但是IntelliJ只要练30分钟可以出去试试能不能把比武招亲的姑娘搞定了,所以我爽在前面您爽在后面。

IntelliJ有个有趣的地方就是:它的门槛低,快捷键虽然有上百个,但是一个不会都没关系,照用。。。我就在没用快捷键的日子里度过了好长一段日子,慢慢地,发现了一些有趣的键,然后是发现另外一些,然后,你永远不知道什么时候能够发现一些你不知道的好姑娘。。。我之所以在用AutoHotKey绑定系统热键的时候专挑Win键,一个非常重要的原因就是我的IntelliJ热键知识还在不断增长中;我不喜欢某一天我在IntelliJ里面按ctrl + p试图查看函数参数时,却跳出个截图软件出来。

对EMACS,我想说的,尺有所短寸有所长,您牛人配置出ctrl + 空格这样懒人自动完成键一定是超级容易的(或者从上千个命令中秒检出一个适用命令),我的小小的不成的。这里有一篇:10个用EMACS蹬掉Java IDE的理由 ,写得真是太好了,太牛了,可是对我不管用:小子我刚刚学会开小轿车,就让我控制洲际导弹,我玩死自己是铁板钉钉。

其实我拼死抵赖,也无法改变我强词夺理的本质。人类之所以能进步,就在于能够学习。正如楼下向我推销EMACS,就如我向JBuilder用户推销IDEA一样。从这一点来说,我在狠狠地抽自己的嘴巴。


我用过的Java的IDE有这么几种:JBuilder用的时间最长,用了6年。Eclipse和NetBeans都用的时间不算太多,一共加起来可能只用了1年不到,还是为了在澳洲找工作准备的,NetBeans没啥印象,Eclipse强大的插件功能让我五体投地,有一阵子我甚至有可能成为它的忠实用户,直到IntelliJ IDEA的出现。

我用IntelliJ IDEA,最开始是被迫的,因为公司要求用,而且是花钱买的正版(公司也有人在用正版的JBuilder,但是很快这家伙也迁移到IntelliJ IDEA上来了)。一开始我并不喜欢它,慢慢得就离不开它。

作为一个JBuilder的用户,我最喜欢的几个功能是:强大的界面设计器;快速查找类的位置。其他功能我用得很少很少。

迁移到IntelliJ以后,我遇到两个问题:

1,界面设计器没了,这个很让我失望。(也不是完全没有,IntelliJ提供了一个New GUI Form/ GUI Dialog设计器,但我研究一下表明,这设计最后是保存为xml文件,也就是不通用。因此我直接忽略了这个功能。值得一提的是,IntelliJ IDEA提供了一个Ant任务包,让你可以脱离IntelliJ IDEA独立编译这些XML格式的界面文件)

2,另一个困难是:IDEA引入了模块的概念。这个在JBuilder貌似是没有的。模块的用途是让代码更清晰,模块的依赖性更明显,比如强制不允许服务器端模块去引用客户端代码否则就编译错误。这个理念对刚接触IntelliJ IDEA的我而言有点超前,过了挺长时间才明白模块的作用。

虽然不是大问题,但是实实在在地打击了我。。。但风雨过后就会有彩虹,现在的我,腰也直了,腿也不抖了,吃饭蛮香,睡觉倍棒,您瞅准了,IntelliJ牌IDE,值得一试。

原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/11047;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程 标签:

开始使用VIM

2010年1月13日 2 条评论

开始使用VIM写日记。

首先要感谢一下zhang sen朋友,此人在7月份的留言中,严肃地批评了我自甘堕落的思想,触动了我的灵魂,虽然我的传导神经太慢,但终于在5个月以后开花结果了。这个算不算蝴蝶效应?

今年,喔,应该说去年,其实是跨年度的,我体会到了键盘流的牛B之处。

虽然开始的时候感觉还是蛮痛苦的。因为需要学习的快捷键太多。

但是一旦开始体会到其中的好处以后,就再也回不去了。这个过程类似于你小车开惯了不可能再忍受挤公交一样,虽然考驾照的确痛苦。

一个简单的例子是在IntelliJ里切换光标的位置。原来我都是鼠标点来点去,或者通过上下左右键来移动光标。现在由一系列复杂的命令替换掉了,再配合搜索的热键,搜索跳转就和玩儿似的。

刚进公司的时候,看Duc调试程序的时候,手很少碰鼠标的,噼啪噼啪就跳到某函数的位置上了,崇拜不已,又不好意思问他怎么弄的,以为自己至少短时间内没这个本事。直到09年中,我终于也认识到IntelliJ的键盘流。现在我也可以冒充高手了。这玩意很容易产生一种优越感,让人恨不得把IntelliJ的口号“Develop with Pleasure”印在T恤上招摇过市,大喊我也是键盘流。

想到以前我还留恋JBuilder留恋得不行,挺可笑的。

另外,昨天发现IntelliJ IDEA 9的开源社区版已经出来了。

Eclipse没能有机会学习一下,还是有点遗憾的。现在Intellij开源,我更没理由去碰Eclipse了。

这几天又把VIM给学了一把。这玩意更复杂,而且很多命令没啥道理。完全死记硬背。因为IntelliJ给我打了底,我知道投入时间学习绝对值得。所以这次学得分外投入。

入门是通过善用佳软的这个文章入门的。标准的傻瓜式的入门指南。一步一步来就好。

做完教程的内容以后,决定通过使用过程来学习。遇到不知道的功能再查,平时看到也顺便记忆一下,不打算背诵一大堆的命令把自己搞晕。常用命令汇总到了GoogleDocs,只要是方便自己查询。

所谓的常用命令对别人的参考作用有效,因为这玩意和每个人的学习进度有关系。

一天下来,解决了好几个VIM使用上的小问题;虽然是小问题,不解决就是大麻烦,解决了就是大动力。这过程在切换到FireFox的时候体会最深了。一点点小小的好处就足够让我坚持下去,一点又一点,从此就会一条路走到黑。

中文上用起来还是不如英文爽快,英文无论是按单词前进后退或者搜索,都比重要要好用许多。

下一步是TotalCommander。这玩意配置起来据说也是超级麻烦。

一转眼已经超过30岁直奔40岁,却为了点雕虫小技兴奋,想了一下,这种情况算什么呢,大器晚成?活到老学到老?或者是驽马十驾功在不舍?

原创的话痨如需转载请注明来源:http://blog.chenyi.me/blog/10990;转载的文章我会力所能及地注明来源如有疏漏请留言指正。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分类: 编程 标签: