Trade Off

supercalifragilisticexpialidocious

简单配置一下vi

看到vpsee上的vi打开网页啥的都能自动高亮,原本一直用着纯文本方式vi的我动心了,搜索了一点点配置,加入这些配置到~/vimrc这样的文件中后,打开vi就能自动加载配置。

下面的分别是:显示行号、自动缩进、开启语法高亮、编辑背景为暗色调、开启粘贴(传说复制过来的代码不会乱掉)

1
2
3
4
5
set number
set autoindent
syntax enable
set background=dark
set paste

vim是和emace同样重量级的编辑器,如果你是一个Linux控你肯定明白那句话,vi是vim的前身(允许我这样描述吧),所以配置都是这些编辑器的看家本领,这几条简单配置仅仅是个入门,还可以根据自己的需要添加修改

迁移到了新VPS上

前面几篇log中有提及,实在无法忍受yardvps的服务了,一开始真的不错,但现在越来越不行了,可能这就是标志着一个vps提供商由正规经营到超卖的转变。上次停机超过了24个小时,发了ticket过去问,结果是说我被ddos了,就自动把我从网络中断开了,真有意思的说法,反正已经无法考证其真实性了,我只好选择离开。

新的VPS比以前贵,大约是每月10刀(原来的512Mb的YardVPS是7.59刀),但新的vps性能很好,网络也很好很快,希望能一直用下去,贵点就贵点呗,比起神器Linode便宜了不少。

这个技术blog是最后迁移过来的了,原先有几个php写得东西光是把数据库保存下来了,就不再挂出来让大家访问了吧,我猜也没几个用得,留着数据库做个纪念

Svn的javahl库

今天基本完成了LoveSMS,想checkout一下jdrcom来看看,所以就安装上了svn for eclipse,然后在导入的时候提示缺少javahl库,去了官方查看了一下,说是对于Mac用户,只需要下载他们的bin文件就能解决,我一看才给到1.6.5的版本,而我自己用brew都装到了1.7.5,而且svn插件用的是1.8.x,需要1.7+的svn支持才行,所以就自己重新安装了svn:

1
brew install subversion --universal --java

这句是关键哦,当然你得先uninstall已经安装的svn才行。加了java开关就可以告诉svn需要java IDE的库,编译的完成后会继续编译javahl~

会有这样的提示哦:

1
2
3
4
5
6
7
8
9
10
11
To use Java bindings with various Java IDEs, you might need a universal build:
 brew install subversion --universal --java
==> ./configure --disable-debug --prefix=/usr/local/Cellar/subversion/1.7.5 --with-ssl --with-zlib=/usr --with-sqlite=/usr/local --disable-neon-version-chec
==> make
==> make install
==> make javahl
==> make install-javahl
==> Caveats
You may need to link the Java bindings into the Java Extensions folder:
 sudo mkdir -p /Library/Java/Extensions
 sudo ln -s /usr/local/lib/libsvnjavahl-1.dylib /Library/Java/Extensions/libsvnjavahl-1.dylib

自己加入后面的链接就ok了!

Sudo 出现unable to Resolve Host 解决方法

执行一句sudo xxx会发现:(HOSTNAME就是你的hostname了)

1
sudo :unable to resolve host HOSTNAME

这样修复:(编辑/etc/hosts,修改127.0.0.1那行,把你的hostname加入到那行的最后即可)

1
127.0.0.1               localhost.localdomain localhost HOSTNAME

希望vpsee的admin能在iso中修复这个问题

解决Cannot Set LC_CTYPE to Default Locale: No Such File or Directory问题

刚拿到vps,打算更新一些软件,发现有些warning挺讨厌的,于是就想根除他们!!他们一般是这样的:

1
2
3
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

我看到我的LANG被设定为zh_CN.utf8,虽然我们是国人,但这个语言习惯不能代表我们的爱国情怀吧,我就改为en_US.utf8了:

1
2
sudo touch /etc/default/locale
vi /etc/default/locale

加入:

1
2
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

再执行一下locale就发现问题不见了。

希望vpsee的admin能在iso中修正这个事儿~

Ssh的安全配置

今天刚刚换了vps,ssh的安全早就该配置好,没想到竟然是现在了……

首先这些基本需要做:http://www.deepvps.com/improve-ssh-security.html

再就是禁止root后需要创建一个马甲账号:

 

0.增加ubuntu的admin组,我的vps默认没有,所以就创建了,sudoer文件中写明了admin组可以用sudo,所以我省略了这一步

 

1
groupadd admin

1.增加马甲账号(-m表示创建home目录,-s表示后面跟着的是terminal,-G表示加入后面的那个组,最后的USERNAME各位自己发挥)

1
useradd -m -s /bin/bash -G admin USERNAME

2.修改刚刚马甲的密码:(输入两次新密码就ok了)

1
passwd USERNAME

###########禁止root登陆###########

下面禁止root登陆,直接修改/etc/ssh/sshd_config中的PermitRootLogin为no即可,然后重启ssh:

1
service ssh restart

不放心的可以断开ssh连接用root和刚刚的马甲账号登陆试试看,肯定root不能用了,而且用马甲登陆上去之后你可以“su -”一下,输入root的密码后就切换到了root的环境下了(不要忘记su后面的短横杠哦,那样才切换环境)。

mysql只允许127.0.0.1连接的解决方法

我上次记录过一次这样的情况,突然间所有的php应用无法连接数据库了,但可惜我忘记是为何导致了这样的结果,总是有很多奇怪的地方在这个vps上发生,比如有次突然在某个app中出现了嵌入的广告,这个app可是我写的呀,怎么会有广告?!还有就是那次mysql突然无法连接了,最后用127.0.0.1代替了localhost。

昨晚国庆安装了织梦的后台,但提示无法使用数据库,由于昨天太晚了没有深入研究,早晨起来看了一下,有人说去查看data/common.inc.php文件中的信息,我去看了一下,突然想起来localhost不能用了,于是改为127.0.0.1就可以了,但这也只是缓兵之计,于是想办法解决!

解决方法也不尽相同,就是在php.ini中的三处添加“/tmp/mysql.sock”,那三处就是:mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket,看名字就是php连接mysql的三种方法的默认socket路径,原来我就修改了两处,漏掉了mysqli这种,结果现在不少程序都是用这种方式连接,比如phpmyadmin和织梦,所以呢,修改了这三处就ok了(当然你得确定你用socket这种方式连接)

至此我的phpmyadmin也可以用socket登录了,织梦也能访问数据库了,再也不用127.0.0.1啦~

swing中的Timer还是用在GUI中的好

刚刚翻了翻《Java核心技术》这本书,里面提到了swing中的Timer的用法,我就实践一下,结果发现根本没有反映,于是网上搜索答案,在stackoverflow中找到。

我写的测试是每秒输出现在的时间而已。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;


public class TimePrint implements ActionListener
{

   @Override
   public void actionPerformed(ActionEvent e)
   {
       // TODO Auto-generated method stub
       System.out.println("date is: " + (new Date()));
       Toolkit.getDefaultToolkit().beep();
   }
}

在调用的时候如果忘记写Thread.sleep(xxx)这行就不会看到效果,具体原因不太清楚,可能这个swing中的Timer只是用来在GUI中做些什么工作的,而我用终端输出内容就不太合适了,于是就牵扯出来很多线程的问题。

这是main方法中的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.awt.event.ActionListener;

import javax.swing.Timer;


public class TimerPrintTest
{
   public static void main(String[] argStrings) throws InterruptedException
   {
       System.out.println("Running...");
       ActionListener listener = new TimePrint();
       Timer timer = new Timer(1000, listener);
       timer.start();
       Thread.sleep(4000);
   }
}

一个简单的C程序

嗯,我是一直喜欢C的,不过没勇气说我从事C方面的开发,因为C是需要很多技巧和底层技术的,我自知这方面的能力不足:(

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void strcp(char*, char*);
int main()
{
char* s = "test string...";
char* t = malloc(strlen(s));
strcp(t, s);
printf("%s\n", t);
free(t);

return 0;
}

void strcp(char *s,char *t)
{
while(*s++ = *t++);

最漂亮的就是那句strcp的函数了,非常简洁好用:)

用UnixBench测试VPS性能

本来就想测试一下性能的,不过中途遇到点问题。

UnixBench用了perl,但不知道为何我的VPS对perl似乎不太友好,提示有几个关键的moudle找不到,于是无法测试了,根据提示我需要安装Time::HiRes这个module。

听说perl5之后有了一个module管理器,叫CPAN(C盘?),就和yum这样的工具一样可以随意安装module,确实方便,可以和python的pip啊easy_install这样的工具媲美。

但我在使用CPAN的时候发现连这个module都没有…………于是去CPAN.org这里搜索下载这个基础module,但在makefile的时候(用perl做makefile),发现又缺少一个module,看来这个更加底层。从网上找到方法说用yum进行安装,于是用yum -y install perl-CPAN,这样就能用了:)

在安装Time::HiRes的时候发现找不到install工具………………天啊,又去了CPAN.org下载了这个module的源码,自己编译安装上了,这样就没问题了:)

VPS的得分稍后更新:)

UPDATE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Benchmark Run: 三  5月 30 2012 11:38:34 - 12:06:53
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       12579232.4 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2268.2 MWIPS (10.3 s, 7 samples)
Execl Throughput                               1140.1 lps   (29.6 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        270525.4 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           77911.8 KBps  (30.1 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        709368.9 KBps  (30.0 s, 2 samples)
Pipe Throughput                              394585.6 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  40293.3 lps   (10.0 s, 7 samples)
Process Creation                               1908.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1539.5 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    204.1 lpm   (60.1 s, 2 samples)
System Call Overhead                         525047.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   12579232.4   1077.9
Double-Precision Whetstone                       55.0       2268.2    412.4
Execl Throughput                                 43.0       1140.1    265.1
File Copy 1024 bufsize 2000 maxblocks          3960.0     270525.4    683.1
File Copy 256 bufsize 500 maxblocks            1655.0      77911.8    470.8
File Copy 4096 bufsize 8000 maxblocks          5800.0     709368.9   1223.0
Pipe Throughput                               12440.0     394585.6    317.2
Pipe-based Context Switching                   4000.0      40293.3    100.7
Process Creation                                126.0       1908.7    151.5
Shell Scripts (1 concurrent)                     42.4       1539.5    363.1
Shell Scripts (8 concurrent)                      6.0        204.1    340.2
System Call Overhead                          15000.0     525047.2    350.0
                                                                  ========
System Benchmarks Index Score                                         382.2