<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.8" -->
<rss version="0.92">
<channel>
	<title>战争与和平 思考能力</title>
	<link>http://keyvalue.net</link>
	<description></description>
	<lastBuildDate>Wed, 12 Aug 2009 14:19:50 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>scp 失败的原因</title>
		<description>当在 shell startup script （比如 profile , bashrc）自动执行过程中产生了任何内容输出时， scp / sftp 会把这些 echo 回来的东西认作协议包进行解析，结果自然是无法读懂这些内容，最终导致文件拷贝失败。

如果能够明确知道在自己的 /etc/bashrc 等文件里面哪些语句会产生 echo 的内容的话，可以通过条件判断进行 echo ：

if [ $(expr index "$-" i) -ne 0 ]; then
    echo "welcome to interactive shell , Current is"
    date +'%Y-%m-%d %T'
fi

这样只有在真正交互登录的时候才会 echo 信息， scp 的时候自动忽略。 </description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/scp-%e5%a4%b1%e8%b4%a5%e7%9a%84%e5%8e%9f%e5%9b%a0.html</link>
			</item>
	<item>
		<title>class的设计原则</title>
		<description>转自：http://c.chinaitlab.com/cc/basic/200806/753989.html
 　面向对象编程对于产出高质量，易维护的代码是非常有帮助的。面向对象编程的概念构建于三个基本特征之上：封装，继承，多态。在C++中，class是面向对象编程概念的核心和具体形式。class通过私有成员体现“封装”，通过直接继承或者组合体现“继承”，通过虚函数和动态绑定(dynamic binding)体现“多态”。class的设计质量直接决定了整个系统的质量。
    　　从整体功能层面谈class设计，有这么三条原则：
 
   　　·单一功能原则(Single Responsibility Principle)
    　　一个class就其整体应该只提供单一的服务。如果一个class提供多样的服务，那么就应该把它拆分，反之，如果一个在概念上单一的功能却由几个class负责，这几个class应该合并。
 
   　　·开放/封闭原则(Open/Close Principle)
    　　一个设计并实现好的class，应该对扩充的动作开放，而对修改的动作封闭。也就是说，这个class应该是允许扩充的，但不允许修改。如果需要功能上的扩充，一般来说应该通过添加新类实现，而不是修改原类的代码。添加新类不单可以通过直接继承，也可以通过组合。

    　　·最小惊讶原理(Least Surprise Principle)
    　　在重载函数，或者子类实现父类虚函数时，应该基本维持函数原来所期望的功能。比如：
    class Pet {
    　public:
    　　virtual ...</description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/class%e7%9a%84%e8%ae%be%e8%ae%a1%e5%8e%9f%e5%88%99.html</link>
			</item>
	<item>
		<title>书签类网站的数据库设计</title>
		<description>最近需要做一个有标签功能的web应用，需要考虑数据库的设计，搜集了一些资料，个人想法暂时按下不表。
http://www.pui.ch/phred/
http://icyleaf.com/2008/06/21/tags-database-schemas/
 </description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/%e4%b9%a6%e7%ad%be%e7%b1%bb%e7%bd%91%e7%ab%99%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93%e8%ae%be%e8%ae%a1.html</link>
			</item>
	<item>
		<title>mysql explain</title>
		<description>【转】
http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html

Mysql Explain 详解


一.语法

explain < table_name >

例如: explain select * from t3 where id=3952602;

二.explain输出解释

+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+
&#124; id &#124; select_type &#124; table &#124; type  &#124; possible_keys     &#124; key     &#124; key_len &#124; ref   &#124; rows &#124; Extra &#124;
+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

1.id
  我的理解是SQL执行的顺利的标识,SQL从大到小的执行.

例如:
mysql> explain select * from ...</description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/mysql-explain.html</link>
			</item>
	<item>
		<title>mysql的字符集和校验规则的概念</title>
		<description>【转】
作者：淘宝DBA team blog
URL：http://rdc.taobao.com/blog/dba/html/180_mysql_characterset_collation_concept.html
刚刚接触mysql的人（like me），可能对这2个概念不是太理解，这里小小解释一下，希望能说明清楚这个问题。
字符集，character set，就是一套表示字符的符号和这些的符号的底层编码；而校验规则，则是在字符集内用于比较字符的一套规则。字符集还是比较容易理解的，主要是校验规则，下面我简单举个例子来说明一下：
如在某个字符集“X”的A与a，他们的底层编码分别是A=0,a=100。这里符号“A”“a”和底层编码“0”“100”就是字符集的概念范围。假设我们要比较A与a的大小，我们得到a>A，因为我们是根据其底层编码进行比较的，这就是这个字符集“X”的一种校验规则“Z”（根据底层编码来比较）。假设，现在有另外一种校验规则，是先取其相反数，然后再比较大小，那么就很显然的得到a

关于字符集与校验规则，mysql能：

    1、使用字符集来存储字符串，支持多种字符集；
    2、使用校验规则来比较字符串，同种字符集还能使用多种校验规则来比较；
    3、在同一台服务器、同一个数据库或者甚至在同一个表中使用不同字符集或校对规则来混合组合字符串；
    4、可以在任何级别（服务器、数据库、表、字段、字符串），定义不同的字符集和校验规则。

查询你的mysql数据库所支持的字符集种类，可以如下：
mysql> show character set;
+----------+-----------------------------+---------------------+--------+
&#124; Charset  &#124; Description                 &#124; Default collation   &#124; ...</description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/mysql%e7%9a%84%e5%ad%97%e7%ac%a6%e9%9b%86%e5%92%8c%e6%a0%a1%e9%aa%8c%e8%a7%84%e5%88%99%e7%9a%84%e6%a6%82%e5%bf%b5.html</link>
			</item>
	<item>
		<title>无密码访问</title>
		<description>== Yahoo用户无密码ssh链接配置 ==
=== 配置步骤 ===
在雅虎内部特殊用户yahoo经常被用作批处理帐户进行一些后台远程操作，但要在ssh链接上无密码使用yahoo用户则需要配置一番。

假设有主机hostA和hostB，现需要从hostB以yahoo用户身份连接到hostA执行一些命令cmd，即：

hostB ---SSH登录---> hostA(运行命令cmd)

则可按以下步骤进行配置：

1. 在随意一台有yahoo用户的主机上以yahoo用户身份生成无passphrase的RSA公私钥对。这里我们以在hostB上生成为例：

xxx@hostB:~$ sudo -u yahoo ssh-keygen -f /tmp/id_rsa -t rsa -P ''

以上命令生成的公钥在/tmp/id_rsa.pub中，私钥在/tmp/id_rsa中；

2. 将生成的RSA私钥文件复制为hostB上的/home/yahoo/.ssh/id_rsa文件（或identity文件），并将生成的RSA公钥文件分发到hostA上的/home/yahoo/.ssh/authorized_keys文件里：

xxx@hostB:~$ sudo mv /tmp/id_rsa /home/yahoo/.ssh/id_rsa
xxx@hostB:~$ sudo scp /tmp/id_rsa.pub xxx@hostA:
# 在hostA上
xxx@hostA:~$ sudo sh -c "cat /home/xxx/id_rsa.pub >> /home/yahoo/.ssh/authorized_keys"

这里要确保公私钥文件以及yahoo用户目录的权限正确：

xxx@hostB:~$ sudo chown yahoo:users /home/yahoo/.ssh/id_rsa
xxx@hostB:~$ sudo chmod 700 /home/yahoo/.ssh/id_rsa
xxx@hostB:~$ sudo chmod 700 /home/yahoo
# 在hostA上
xxx@hostA:~$ sudo chown ...</description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/%e6%97%a0%e5%af%86%e7%a0%81%e8%ae%bf%e9%97%ae.html</link>
			</item>
	<item>
		<title>[转]pg集群配置</title>
		<description>= U.R.T PgSQL 集群 开发环境安装 =

== 1. Machine ==



PL/Proxy
hostname:h08-vm08.corp.cnb.yahoo.com
inet addr:10.62.245.152  
Bcast:10.62.245.255  
Mask:255.255.254.0
OS: Linux  2.6.9-42.ELsmp
CPU:Intel(R) Xeon(R) CPU  L5320  @ 1.86GHz
MemTotal: 254772 kB
Pg_Dir: /home/y/pgsql/data/
port = 5432

Node1:
hostname:h08-vm08.corp.cnb.yahoo.com
inet addr:10.62.245.152  
Bcast:10.62.245.255  
Mask:255.255.254.0
OS: Linux  2.6.9-42.ELsmp
CPU:Intel(R) Xeon(R) CPU  L5320  @ 1.86GHz
MemTotal: 254772 kB
Pg_Dir: /usr/local/pgsql/data/
port = 5433

Node2:
hostname:h07-vm08.corp.cnb.yahoo.com
inet addr:10.62.245.136 ...</description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/%e8%bd%acpg%e9%9b%86%e7%be%a4%e9%85%8d%e7%bd%ae.html</link>
			</item>
	<item>
		<title>[转]Locale 详解</title>
		<description>locale 是国际化与本土化过程中的一个非常重要的概念，个人认为，对于中文用户来说，通常会涉及到的国际化或者本土化，大致包含三个方面：看中文，写中文，与 window中文系统的兼容和通信。从实际经验上看来，locale的设定与看中文关系不大，但是与写中文，及window分区的挂载方式有很密切的关系。本人认为就像一个纯英文的Windows能够浏览中文，日文或者意大利文网页一样，你不需要设定locale就可以看中文。那么，为什么要设定 locale呢？什么时候会用到locale呢？  

Tags: locale 设定 原因 解释  

一、为什么要设定 locale 正如前面我所讲的，设定locale与你能否浏览中文的网页没有直接的关系，即便你把locale设置成en_US.ISO-8859-1这样一个标准的英文locale你照样可以浏览中文的网页，只要你的系统里面有相应的字符集（这个都不一定需要）和合适的字体（如simsun），浏览器就可以把网页翻译成中文给你看。具体的过程是网络把网页传送到你的机器上之后，浏览器会判断相应的编码的字符集，根据网页采用的字符集，去字体库里面找合适的字体，然后由文字渲染工具把相应的文字在屏幕上显示出来。  

在下文本人会偶尔把字符集比喻成密码本，个人觉得对于一些东西比较容易理解，假如你不习惯的话，把全文copy到任何文本编辑器，用字符集替换密码本即可。  

那有时候网页显示乱码或者都是方框是怎么回事呢？个人认为，显示乱码是因为设定的字符集不对(或者没有相应的字符集)，例如网页是用UTF-8编码的，你非要用GB2312去看，而系统根据GB2312去找字体，然后在屏幕上显示，当然是一堆的乱码，也就是说你用一个错误的密码本去翻译发给你的电报，当然内容那叫一个乱；至于有些时候浏览的网页能显示一部分汉字，但有很多的地方是方框，能够显示汉字说明浏览器已经正确的判断出了网页的编码，并在字体库里面找到了相应的文字，但是并不是每个字体库都包含某个字符集全部的字体的缘故，有些时候会显示不完全，找一个比较全的支持较多字符集的字体就可以了。  

既然我能够浏览中文网页，那为什么我还要设定locale呢？  

其实你有没有想过这么一个问题，为什么gentoo官方论坛上中文论坛的网页是用UTF-8编码的（虽然大家一直强烈建议用GB2312编码），但是新浪网就是用GB2312编码的呢？而Xorg的官方网页竟然是ISO-8859-15编码的，我没有设定这个locale怎么一样的能浏览呢？这个问题就像是你有所有的密码本，不论某个网站是用什么字符集编码的，你都可以用你手里的密码本把他们翻译过来，但问题是虽然你能浏览中文网页，但是在整个操作系统里面流动的还是英文字符。所以，就像你能听懂英语，也能听懂中文。 最根本的问题是：你不可以写中文。  

当你决定要写什么东西的时候，首先要决定的一件事情是用那种语言，对于计算机来说就是你要是用哪一种字符集，你就必须告诉你的linux系统，你想用那一本密码本去写你想要写的东西。知道为什么需要用GB2312字符集去浏览新浪了吧，因为新浪的网页是用GB2312写的。  

为了让你的Linux能够输入中文，就需要把系统的locale设定成中文的(严格说来是locale中的语言类别LC_CTYPE )，例如zh_CN.GB2312、zh_CN.GB18030或者zh_CN.UTF-8。很多人都不明白这些古里古怪的表达方式。这个外星表达式规定了什么东西呢？这个问题稍后详述，现在只需要知道，这是locale的表达方式就可以了。  

二、到底什么是locale？ locale这个单词中文翻译成地区或者地域，其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言，所在国家或者地区，以及当地的文化传统所定义的一个软件运行时的语言环境。  

这个用户环境可以按照所涉及到的文化传统的各个方面分成几个大类，通常包括用户所使用的语言符号及其分类(LC_CTYPE)，数字 (LC_NUMERIC)，比较和排序习惯(LC_COLLATE)，时间显示格式(LC_TIME)，货币单位(LC_MONETARY)，信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES)，姓名书写方式(LC_NAME)，地址书写方式(LC_ADDRESS)，电话号码书写方式 (LC_TELEPHONE)，度量衡表达方式(LC_MEASUREMENT)，默认纸张尺寸大小(LC_PAPER)和locale对自身包含信息的概述(LC_IDENTIFICATION)。  

所以说，locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的，这些locale定义文件放在/usr/share/i18n/locales目录下面，例如 en_US, zh_CN and de_DE@euro都是locale的定义文件，这些文件都是用文本格式书写的，你可以用写字板打开，看看里边的内容，当然出了有限的注释以外，大部分东西可能你都看不懂，因为是用的Unicode的字符索引方式。  

对于de_DE@euro的一点说明，@后边是修正项，也就是说你可以看到两个德国的locale： /usr/share/i18n/locales/de_DE@euro /usr/share/i18n/locales/de_DE 打开这两个locale定义，你就会知道它们的差别在于de_DE@euro使用的是欧洲的排序、比较和缩进习惯，而de_DE用的是德国的标准习惯。 ...</description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/%e8%bd%aclocale-%e8%af%a6%e8%a7%a3.html</link>
			</item>
	<item>
		<title>做项目的麻烦事</title>
		<description>1、相册项目，老人没有做好用户信息统计工作，现在我们无法拿到确切的用户id列表，活跃度等信息，现在想做点工作，无法操作。
2、新相册的统计工作也没有，但是我们有数据库 哈哈 记录了时间戳，勉强通过。
3、新相册的管理工具的开发，应该是产品提需求，我们来讨论可行性，然后再实施。 </description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/%e5%81%9a%e9%a1%b9%e7%9b%ae%e7%9a%84%e9%ba%bb%e7%83%a6%e4%ba%8b.html</link>
			</item>
	<item>
		<title>深入Mysql字符集设置</title>
		<description>作者:laruence(http://www.laruence.com/)
· 本文地址: http://www.laruence.com/2008/01/05/12.html
· 转载请注明出处

基本概念

• 字符(Character)是指人类语言中最小的表义符号。例如’A'、’B'等；

• 给定一系列字符，对每个字符赋予一个数值，用数值来代表对应的字符，这一数值就是字符的编码(Encoding)。例如，我们给字符’A'赋予数值0，给字符’B'赋予数值1，则0就是字符’A'的编码；

• 给定一系列字符并赋予对应的编码后，所有这些字符和编码对组成的集合就是字符集(Character Set)。例如，给定字符列表为{’A',’B'}时，{’A'=>0, ‘B’=>1}就是一个字符集；

• 字符序(Collation)是指在同一字符集内字符之间的比较规则；

• 确定字符序后，才能在一个字符集上定义什么是等价的字符，以及字符之间的大小关系；

• 每个字符序唯一对应一种字符集，但一个字符集可以对应多种字符序，其中有一个是默认字符序(Default Collation)；

• MySQL中的字符序名称遵从命名惯例：以字符序对应的字符集名称开头；以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如：在字符序“utf8_general_ci”下，字符“a”和“A”是等价的；
MySQL字符集设置

• 系统变量：

– character_set_server：默认的内部操作字符集

– character_set_client：客户端来源数据使用的字符集

– character_set_connection：连接层字符集

– character_set_results：查询结果字符集

– character_set_database：当前选中数据库的默认字符集

– character_set_system：系统元数据(字段名等)字符集

– 还有以collation_开头的同上面对应的变量，用来描述字符序。

• 用introducer指定文本字符串的字符集：

– 格式为：[_charset] ’string’ [COLLATE collation]

– 例如：

• SELECT _latin1 ’string’;

• SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;

– 由introducer修饰的文本字符串在请求过程中不经过多余的转码，直接转换为内部字符集处理。
MySQL中的字符集转换过程

1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection；

2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集，其确定方法如下：

• 使用每个数据字段的CHARACTER SET设定值；

• 若上述值不存在，则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展，非SQL标准)；

• 若上述值不存在，则使用对应数据库的DEFAULT CHARACTER SET设定值；

• 若上述值不存在，则使用character_set_server设定值。

3. 将操作结果从内部操作字符集转换为character_set_results。

图片1
常见问题解析

• ...</description>
		<link>http://keyvalue.net/linux%e5%b9%b3%e5%8f%b0%e6%8a%80%e6%9c%af/%e6%b7%b1%e5%85%a5mysql%e5%ad%97%e7%ac%a6%e9%9b%86%e8%ae%be%e7%bd%ae.html</link>
			</item>
</channel>
</rss>
