ssh 公钥方式认证攻略
前面介绍cygwin下安装sshd时简单地提到了ssh的公钥认证。 下面将这种认证方式详细地解释一下。
查看myprog(二进制文件)依赖的库文件
ldd myprog
查看myprog的符号表
nm myprog
删除myprog中的符号,减小文件大小
strip myprog
myprog的详细信息
readelf -a myprog
另外这篇文章可以在调试时作为参考。
wp-cache 这个插件能够将 WordPress 的页面输出内容进行缓存, 这样第二次访问该页面时就不必访问数据库,从而加快页面生成速度,并降低服务器负载。 但很可惜这个插件是为 Unix/Linux 系统设计的,如果服务器是 Windows,该插件将会出现错误。 在Windows下使用该插件需要做些修改。
这样在插件面板中激活wp-cache,并在选项面板中 Enable Cache 即可。
另一个常见的问题就是 cache 不起作用,浏览任何页面 wp-content/cache 下也不会生成 cache 文件。 很可能因为当前的主题末尾忘记使用 </html> 标记。修改主题的 footer.php 文件并在最后添上 </html> 即可。
sshd服务是一种安全连接,它能让你访问服务器上的命令行界面。Windows本身没有提供该服务,所以我们可以通过 cygwin 来进行安装。
PrimoPDF是个免费的PDF转换工具,安装之后它模拟一台打印机,只要把想转换的内容打印到 PrimoPDF 上即可生成 PDF 文档。最新版本为 3.0,但是我安装之后发现打印速度非常慢,从Windows打印结束到PrimoPDF的保存对话框出现需要几分钟的时间,不得已只好卸载之重新安装了 1.0 版。但是1.0版试图保存PDF文件时出现了DLL invalid的错误。Google了一下原来是 v2.0、v3.0 卸载时会在注册表中留下垃圾,影响了 1.0 的工作。只要删除注册表的 HKLM\SOFTWARE\AFPL Ghostscript\8.50 键 1.0 即可正常使用。
调试 Perl 程序时使用最频繁的就是 print 语句了,不过它只能输出普通变量的内容, 而不能输出数组和哈希。使用 Data::Dumper 模块则可以输出数组和哈希等复杂变量。
#!/usr/bin/perl
use Data::Dumper;
my $hashref = { name=>'charlee', age=>25, gender=>'male', interest=>[ 'computer', 'movie', 'cooking' ] };
print Data::Dumper::Dumper($hashref);
注意Dumper函数的参数为引用。输出结果为:
$VAR1 = {
'name' => 'charlee',
'interest' => [
'computer',
'movie',
'cooking'
],
'age' => 25,
'gender' => 'male'
};
Devel::SmallProf 是个很好用的模块,可以方便地测量出代码每一行的执行时间,以便进一步优化。
例如以下程序,文件名为 prof_sample.pl。
#!/usr/bin/perl
my $str = "0";
for (my $i = 0; $i < 100; $i++) {
$str =~ s/\d+/($&+1)/e;
print $str."\n";
}
该程序的功能是输出整数 1 到 100。当然实际写程序时可不要用这么低效率的方法。 安装 Devel::SmallProf 之后我们来测量一下它每一行代码的执行时间。
perl -d:SmallProf prof_sample.pl
执行之后会在当前目录下生成一个 smallprof.out 文件,其内容如下:
================ SmallProf version 1.15 ================
Profile of prof_sample.pl Page 1
=================================================================
count wall tm cpu time line
0 0.000000 0.000000 1:#!/usr/bin/perl
0 0.000000 0.000000 2:
1 0.000006 0.000000 3:my $str = "0";
101 0.006418 0.010000 4:for (my $i = 0; $i < 100; $i++) {
200 0.002581 0.000000 5: $str =~ s/\d+/($&+1)/e;
100 0.001509 0.000000 6: print $str."\n";
1 0.000003 0.000000 7:}
前三列的数字分别为执行次数、消耗时间、消耗CPU时间。
如果你的程序使用 use 语句引用了其他模块,那么所有被引用的程序都将被分析,生成一个长长的报告。这时可以使用下面的命令来迅速找到耗时最长的命令。
sort -k 2nr,2 smallprof.out | less
Weighted Categories 这个插件经过修改之后可以用来显示 TagCloud。 但是这个插件显示出的 TagCloud 总觉得有点别扭。一般人都是擅长某几个方面,很少样样精通的, 因此一般的博客总是会出现几个文章数非常多的标签,以及大量仅有一两篇文章的标签。 而 Weighted Categories 插件使用四则运算来计算标签的大小(附图公式(1)),结果就造成几个巨大标签混杂在大量的小标签中的 “众星捧月”的现象。
例如,假设有四个标签,文章数分别为 tagA=100、tagB=10、tagC=5、tagD=1,标签级别为 1~10,则各个标签的级别如下:
标签 | 文章数 | 计算式 | 级别 |
tagA | 100 | 100 / 99 * 9 + 1 | 10 |
tagB | 10 | 10 / 99 * 9 + 1 | 1 |
tagC | 5 | 5 / 99 * 9 + 1 | 1 |
tagD | 1 | 1 / 99 * 9 + 1 | 1 |
显然,由于tagA的存在,其他标签都被挤到了最底层。
解决这个问题的方法就是利用对数函数。(对数函数的效果可见本文。) 计算公式见附图公式(2)。
公式(2)的结果与对数的底是无关的,见公式(3)。
用公式(2)计算上例得到下面的结果:
标签 | 文章数 | 计算式 | 级别 |
tagA | 100 | log(100) / (log(100)-log(1)) * 9 + 1 | 10 |
tagB | 10 | log(10) / (log(100)-log(1)) * 9 + 1 | 5 |
tagC | 5 | log(5) / (log(100)-log(1)) * 9 + 1 | 4 |
tagD | 1 | log(1) / (log(100)-log(1)) * 9 + 1 | 1 |
显然这个结果要比原来的结果漂亮多了。