Linux中的本地化环境变量

在Linux中,本地化被称作locale,这是一个概念,同时也是一个命令,相关操作可以参考man page。

man locale

每台计算机上的locale可能不同,这取决于你安装时提供的语言和地理位置信息。

想要查看本地的locale设置,可以使用如下命令列出本地系统中所有可以使用的locale:

locale -a

在我使用的Ubuntu中列出了如下信息:

C
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_NG
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
POSIX
zh_CN.utf8
zh_HK.utf8
zh_SG.utf8
zh_TW.utf8

这些都可以作为环境变量的值。

所有的有关本地化的环境变量都是以LC_开头:

LC_COLLATE          排序规则
LC_CTYPE              字符集
LC_MESSAGES        响应与信息,仅POSIX适用
LC_MONETARY      货币格式
LC_NUMERIC          数字格式
LC_TIME                日期和时间格式

这些环境变量都可以被设置成locale列出的值。

如果想把所有不同的变量都统一成一个值,那么可以设置LC_ALL变量,则上述所有变量的值都被LC_ALL的值强制覆盖。

还有一个LANG变量,它作为当上述变量没有设置时的默认值使用。

例子:
我使用的Ubuntu默认是en_US.utf8的locale,当我执行如下命令时,帮助信息是英文显示的:

ls --help

如果我改变一下locale信息,那么帮助信息就会变为中文了:

export LC_ALL=zh_CN.utf8
ls --help

更简单的方法如下,不过每次想看中文的时候都要使用前面的设置:

LC_ALL=zh_CN.utf8 ls --help

但这两种方法都只在当前的console中可以使用,如果想变为开机默认设置,还需要修改.bashrc或者.profile等开机调用的Shell脚本。

参考文献:《Shell脚本学习指南》 Arnold Robbins & Nelson H. F. Beebe著 O'Reilly出版 当当网介绍

Posted in Linux | Tagged , , | Leave a comment

[解题报告]不高兴的津津

不高兴的津津

存盘路径和文件名 jinjin.bas
输入文件 jinjin.in
输出文件 jinjin.out

将要升入七年级的津津,希望按照每天8小时的学习时间,其他时间让他接触自己有兴趣的活动。对于家长为他安排的校外学习,超过了8小时他是不高兴的。对于给出的下一周(7天)每天上午、下午、晚上三个学习时间(正整数)安排,找出津津哪一天不高兴(周一用1表示、周二用2表示、周三用3表示.......周六用6表示,周日用7表示)。当"不高兴的一天"一样"时则输出最靠前的一天。当一周没有“不高兴”的一天则输出0。

输入样例:
4,3,1
4,2,1
4,3,2
4,3,1
4,3,2
3,3,1
2,2,1

输出样例:
3

解题报告

题意:

  1. 算出津津学习时间之和s
  2. 判断这天是否超过8小时( s>8 )
  3. 找出学习时间最长的一天,输出这一天的编号
  4. 如果有两天学习时间相同,输出靠前一天的编号

输入:共有7行,每行3个数字,代表津津每天上午,下午和晚上的学习时间。

输出:津津不高兴的一天的编号,如果有两天学习时间相同,则输出前一天的编号。

代码:
[code]
CLS

OPEN "jinjin.in" FOR INPUT AS #1

OPEN "jinjin.out" FOR OUTPUT AS #2

p = 0

FOR i = 1 TO 7

INPUT #1, x, y, z

s = x + y + z

IF s > 8 THEN

IF s > p THEN

ans = i

p = s

END IF

END IF

NEXT i

PRINT #2, LTRIM$(STR$(ans))

CLOSE #1

CLOSE #2

END

[/code]

Posted in 解题报告 | Tagged | Leave a comment

QBasic中的PRINT和WRITE

对顺序文件的输出(写文件)

1)  PRINT#语句和PRINT#USING语句

PRINT#语句的格式为:

PRINT#〈文件号〉,〈输出项表列〉

PRINT#USING语句的一般格式为:

PRINT#〈文件号〉,USING"〈输出格式字符串〉";〈输出项表列〉

  它的使用与PRINTUSING语句相似,只不过前者把数据写入外存,后者把数据输出在屏幕上。

2)  WRITE#语句

格式为:

WRITE#〈文件号〉,〈输出项表列〉

  用它写文件时能自动地在各数据项之间插入逗号,并给字符串加双引号,且不在正数前面设置空格。

Posted in 相关知识 | Tagged , , | Leave a comment

如何使用C语言产生随机数

C语言产生随机数需要调用stdlib.h头文件中的两个函数:
int rand(void): 产生一个0到RAND_MAX之间的随机整数。(RAND_MAX定义在stdlib.h, 其值为2147483647)
void srand(int seed): 用于初始化种子,便于每次产生不同的随机数。

最简单的一个例子:
[code=c]
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i;
for (i=0; i<10; i++) {
printf("%d\n", rand());
}

return 0;
}
[/code]

这样产生随机数每次不同,但每次运行时产生的顺序是相同的。原因是每次的种子都相同,所以会产生相同的随机数列。一般使用时间作为种子保证每次的种子都不同。简单的实现代码:

[code=c]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
int i;
srand((int)time(0));
for (i=0; i<10; i++) {
printf("%d\n", rand());
}

return 0;
}
[/code]

如果要产生其他范围内的整数,可以使用取余运算实现。以下代码为产生0~100之间的随机数:
[code=c]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
int i;
srand((int)time(0));
for (i=0; i<10; i++) {
printf("%d\n", rand()%100);
}

return 0;
}
[/code]

参考文献:http://www.hinn.cn/2008/03/cc_random.html

Posted in 相关知识 | Tagged , | Leave a comment

[解题报告]阿基米德特性

阿基米德特性

Time Limit:1000MS  Memory Limit:65536K
Total Submit:1003 Accepted:413

Description

所谓“阿基米德特性”是这样的一条性质:对任意两个整数a 、b ,保证 0 < a < b,总存在整数m,使得a*m>b 。请编写一个程序,对输入的a、b ,输出最小的m 。

Input

只有两个整数a 、b ,且有0 < a < b 。

Output

只有一个整数,表示使得a*m>b的最小的整数m。

Sample Input

2 9

Sample Output

5

Source

北京市2008年小学生邀请赛模拟题第一题

原题连接:http://judge.ybdevelop.cn/JudgeOnline/showproblem?problem_id=1001

解题报告

题意分析:找出最小的m,使得a*m > b满足。

输入:两个整数a、b,且0<a<b。

输出:一个整数m,m为最小的使a*m > b满足的整数。

算法分析:

  1. 穷举。由题意得知m必为自然数,故范围确定为自然数。判断条件在题目中已给出,即a*m>b。在发现m后,输出m即可。这里需要注意的是:在循环过程中,并不能使用for循环,因为终值就是结果,所以无法确定终值。使用do loop和exit do配合,或者使用c语言中的while(1)和break配合的方法实现穷举。当a、b相差很大的时候,穷举m的过程可能超时。
  2. 根据题意和不等式的性质,经过简单的移项,可以得出m>b/a。由此公式可以直接推得出m的值floor(m)。

程序代码:

穷举法(该方法可能超时):

[code=c]
#include <stdio.h>

int main(int argc, char *argv[])
{
int a, b, c;
scanf("%d %d", &a, &b);
c = 2;
while (1) {
if (a * c > b) {
break;
}
c++;
}
printf("%d\n", c);

return 0;
}
[/code]

根据m>b/a直接求解:

[code=c]
#include <stdio.h>

int main(int argc, char *argv[])
{
int a, b, c;
scanf("%d %d", &a, &b);
printf("%d\n", b/a+1);  //ceil(m)相除结果向上取整,最后应+1

return 0;
}
[/code]

Posted in 解题报告 | Tagged , | Leave a comment

Google Wave初体验

首先感谢校内好友,他无私地给了我一个邀请,联系上后又给了我同学一个邀请。

很多人听说过Google,但是Google Wave就不知道是什么东西了。其实Wave是Google提供的一个网络服务,像Gmail Reader iGoogle和各种自定义的搜索一样。

Wave到底是什么?

其实说到底,它就是一个在网页运行的群聊。如果你用过Web QQ你就知道了。如果你没用过,那你想象一下把QQ群聊搬到网页上使用就能明白了。

Wave有什么不同之处?

1.多人协作的电子白板

如 果你用过Windows的Net Meeting就会知道电子白板,Wave就能实现这个功能,你可以在对话时插入文件附件或者是Google Map地图。相对于Net Meeting,Wave的优势在于创建于网页上,本身就决定了任何地方都可以得到相同的服务。同时可以轻松整合网络的API,实现各种网络应用的无缝连 接。

2.发言实时传输

在用IM软件时,总是要按下发送键对方才能看到你的发言。而在Wave中,随着你输入,对方就可以看到 你写下的文字,领会你的意图。我在使用中,对方话没说完,我可以领会他的意思,进而快速回复,效率得到很大提高。以前认为这是作秀功能,今天一用,果然有 面对面交谈的感觉,我甚至可以看到对方光标的位置。

3.插件扩展机制

刚刚提到可以整合网络API,由于现在插件机制还没有开发完成。近期可能使用的只有Google Map插件,随着Wave的发展,相信终能自己开发插件使用。

4.任意人员组织方式

QQ群的人员是固定的,而我在和同学聊天时更喜欢使用QQ的多人聊天或者多人语音,原因是更有针对性,而且不打扰他人。Wave可以创建多个Wave,这里的Wave就像QQ的多人语音一样,谁想听就进来,不想听就退出,很灵活。

Wave的发展方向

1.隐私设置

现在的Wave里有了Option选项,但是还不可用,以后这里肯定有一些关于隐私的自定义选项。比如Wave对某些人可见,登录的隐身、离线的状态的设置等等。Wave都应该逐步开发完善。

2.提升代码效率

由于大面积使用AJAX技术,所以使用Wave对于客户端浏览器有一定要求。这样的实时交互,肯定产生大量的网络数据,加之HTTP协议的不足。优化JS代码是提高用户体验比做之事。

3.推进相关开发

由于Wave是网络应用,和诸多技术关系密切。例如浏览器的开发,网络协议的制定等。Chrome和HTML5首当其冲,提升了这些的效率,就是在提升Wave本身,加大自身的价值。
先唠叨这么多~~

Posted in 杂七杂八 | Tagged , | 1 Comment

二叉树(堆)的一些数据参数关系

二叉树结点从左至右由根向叶编号,当前结点为索引为i时,有如下关系:

父结点:floor(i/2)
左子女:2i
右子女:2i+1

当结点数为n时:

满二叉树深度:floor(log2(n))+1

PS:C语言中log2(n)的求法:

在C语言的标准函数库中,对数函数只有两个log和log10。

log:以e为底的对数;
log10:以10为底的对数;

但现在需要求以2为底的对数,就是log2。这里对于以其他数字为底的对数都可以用对数的换底公式求得:

loga(n) = logb(n)/logb(a)

参考文献:
http://in.answers.yahoo.com/question/index?qid=20081204061121AAXC91n (英文换底代码)
http://zh.wikipedia.org/wiki/%E5%AF%B9%E6%95%B0#.E5.AF.B9.E6.95.B0.E5.87.BD.E6.95.B0 (wiki中对数的概念)

Posted in NOIP | Tagged , | Leave a comment

Debian下mysql 5.0 镜像(双机热备)

本文环境

  1. IP: 主机:192.168.0.254 从机:192.168.0.253
  2. mysql版本:5.0.51a
  3. OS: Debian Lenny

目录

  1. 基本原理
  2. 概念介绍
  3. 主机配置
  4. 从机配置
  5. 同步陈旧数据
  6. 进行测试

基本原理

  mysql默认是直接将数据写入数据库中的,并未开启二进制日志功能。mysql通过在主机上开启二进制日志,然后让从机读取主机上的日志文件进而实现数据的同步。但是在开启同步之前的数据,需要管理员手动将数据复制过来。

概念介绍

  主机:可以进行数据更新的计算机。

  从机:存放备份数据的计算机,该计算机不可进行数据更新。

  同步:将主机的更新数据复制到从机上。同步是单向的,从机的修改不能在主机上反映出来。如果想双向同步,则可以相互为主从。

  提示符:#表示root身份 $表示普通用户身份 ->表示进入mysql client中进行配置

主机配置

1.停止主机mysql后台服务

sudo /etc/init.d/mysql stop

2.备份并修改/etc/mysql/my.cnf

备份:

sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak

使用编辑器编辑配置文件:

server-id = 1
log_bin = 填入log文件位置(我的是/var/log/mysql/mysql-bin.log)
#bind-address = 127.0.0.1(将这行注释掉,允许任何IP进行远程管理)

3.创建备份专用的mysql用户repl,这个用户专门用来同步数据,并不做管理工作。

->GRANT REPLICATION slave, reload, super on *.*

->TO 'repl"@"%" identified by "用户密码";

4.开启mysql服务,测试刚创建的用户

$sudo /etc/init.d/mysql start(开启服务)
$mysql -u repl -p -h 192.168.0.254(测试新创建的用户)

从机配置

1.修改配置文件并重启mysql

备份并编辑配置文件/etc/mysql/my.cnf:

$sudo cp /etc/mysql/mysql.cnf /etc/mysql/mysql.cnf.bak

编辑配置文件:

server-id = 2(id号码和主机不重复即可,如果有多台也是相互不重复即可)

重启mysql:

$sudo /etc/init.d/mysql restart

2.在从机上停从库

->STOP SLAVE;

3.获取主机的log文件名和log位置(这部分在主机上进行)

->FLUSH TABLES WITH READ LOCK;(锁住所有表格)
->SHOW MASTER STATUS;(结果中的File就是log文件名,Position就是log位置)

4.修改从机中的master设置

->CHANGE MASTER TO
->master_host='192.168.0.254',
->master_user='repl',
->master_password='用户密码',
->master_log_file='log文件名',
->master_log_pos=log位置;

同步陈旧数据

有人介绍说用如下命令可以直接同步:

->LOAD DATA FROM MASTER;

我用的mysqldump进行备份,然后到从机还原的做法:

1.备份主机数据

$mysqldump -u root -p --master-data --databases 要备份的数据库名称 > master_data.sql

2.利用scp将数据传送到从机上(如果你的从机没有安装openssh-server的话,你用其他方法也可以,比如U盘复制粘贴,此步骤根据实际情况而定。

$scp master_data.sql test@192.168.0.253:/home/test

3.在从机上导入备份数据

$mysql -u root -p < master_data.sql

4.在从机上开从库

->START SLAVE;

5.取消主机的数据锁

->UNLOCK TABLES;

进行测试

  在主机上创建一个数据库,然后到从机上看看,是不是已经同步过来了。

参考文献:

http://www.kklinux.com/bbs/thread-285-1-6.html

http://blog.chinaunix.net/u/33011/showart_281469.html

http://www.diybl.com/course/7_databases/sql/sqlServer/200921/154674.html

http://dev.mysql.com/doc/refman/5.0/en/

Posted in Linux | Tagged , , | Leave a comment

flash和rhythmbox 0.11.5声音冲突[已解决]

  重装系统后,发现flash和rhythmbox有声音上的冲突。先打开的声音正常,后打开的没有声音。google搜索后发现这是PulseAudio的问题,已经有人打好包解决这个问题,所以建议遇到同样问题的朋友使用源安装,命令如下:

sudo apt-get install libflashsupport

安装后即可正常,已测试,方法有效。

参考文献:http://forum.ubuntu.org.cn/viewtopic.php?f=50&t=164927&start=0

Posted in Ubuntu | Tagged , | Leave a comment

gnochm

与gnome继承的比较好的chm阅读器,但对中文支持不是很完善,有时会出现乱码的情况。

Posted in Ubuntu软件库 | Tagged , | Leave a comment