作者归档: Hessian

Arch Linux 哲学

Arch Linux 哲学

摘自:http://www.archlinux.org.cn/main/node/79?q=node/57#philosophy

Arch Linux背后的哲学,也是开发者遵循的原则就是“简单”。事实上,也就是“保持简单”。开发者们希望由于用复杂的方式做简单的事情浪费大量时间。 这就是为什么Arch的所有配置都是通过修改配置文件来完成的原因,也是为什么只有最新的系统被提供支持的原因。这也是下面将要提到的一些问题的最终决定的理由。

这个哲学给用户们做更多的是“能力”。你的系统是你自己的。这个Linux发行版不会帮你做什么事情,它会给你做事情的“能力”。

作为一个发行版,Arch Linux没有必要作许多事情,但是她将她需要做的事情做得很好。一个发行版的作用并不是提供软件包--发行版所必须要提供的是一个软件包管理系统。Arch 再这方面是优秀的。她给你提供了二进包的管理工具 pacman ,也提供了源码创建软件包的 ABS。Arch提供了简单而强大的启动例程和初始化脚本。除了这些,许多的配置工作都留给了软件开发者。如果开发者开发的软件是独立运行于一个单独的目录下的话,这个软件就被放在/opt下面。如果这个软件是要被其它软件共享的,它就被放置在/usr下。这就是Arch软件包打包的方式。这样无论是对开发者还是对用户都可以保持一切简单化。如此,那些你要配置或使用到的文件被放置在程序文档中说明的地方,而不是发行版说的他们“应该”在的地方。

使用Arch的典型方法是使用pacman安装所有的软件包,除非没有这个软件包,你可以自己制作自己的软件包。我们希望你用pacman -Syu保持你的系统是最新的,而不是选择性的升级软件包。甚至在/etc/pacman.conf使用IgnorePkg也是不被推荐的。

你可能会按照你自己的方式对这种典型方式进行发挥,需要注意的是这样你的系统工作不正常的几率会高一些,也许会破坏你的系统。大部分问题都是来自选择性升级或进行了不正常的编译。

———————————————美丽的分隔线———————————————

The Arch Way

From ArchWiki

Jump to: navigation, search

i18n
Dansk
English
Español
Lietuviškai
Polski
Português de Portugal
Русский
Česky
Italiano
Français
Deutsch
繁體中文
简体中文

The following four principles comprise what is commonly referred to as the Arch Way, or the Arch Philosophy, best summarized by the acronym KISS for Keep It Simple, Stupid.

Contents

[hide]

Simple

Many GNU/Linux distributions define themselves as “simple”. However, simplicity itself has many definitions.

Arch Linux defines simplicity as a lightweight base structure without unnecessary additions, modifications, or complications, that allows an individual user to shape the system according to their own needs. In short; an elegant, minimalist approach.

A lightweight base structure does not mean that the base system is small. Rather, the base system is devoid of all clutter that may obscure important parts of the system, or make access to them difficult or convoluted. It has a streamlined set of configuration files that are arranged for quick access and editing, with no cumbersome graphical configuration tools that tend to hide possibilities from the user. An Arch Linux system is therefore readily configurable to the very last detail.

On the other hand, Arch Linux keeps the inherent complexities of a GNU/Linux system intact, while exposing them to the user at the same time. Arch Linux developers and users believe that trying to hide the complexities of a system actually results in an even more complex system, and is therefore to be avoided.

Code-correctness over convenience

The Arch Linux system places precedence upon elegance of design, rather than unnecessary automation or "user-friendliness".

Simplicity, elegance, code-correctness and minimalism shall always remain the reigning priorities of Arch development.

Concepts, designs and features are generated and implemented by using the Arch Way principles as a guide, rather than bowing to external influences. The development team are resolute in their commitment to the Arch Way philosophy.

Open

Openness goes hand in hand with simplicity, and is also one of the guiding principles of Arch Linux development.

Arch Linux uses simple tools, that are selected or built with openness of the sources and their output in mind.

While openness may be overwhelming to many new GNU/Linux users, experienced Arch Linux users find it welcoming and practical. It removes all boundaries between the user and the system, giving users more control over the system, while simultaneously simplifying system maintenance.

The open nature of Arch Linux also implies a fairly steep learning curve, but experienced Arch Linux users tend to find the other more closed systems much more difficult to control.

The Openness principle extends to its community members as well. Arch Linux users are known to be very open with help and advice, as well as with package contributions to the community maintained Arch User Repository.

User-centric

Whereas many GNU/Linux distributions attempt to be more ‘user-friendly’, Arch Linux has always been, and will always remain ‘user-centric’.

Arch Linux targets and accommodates competent GNU/Linux users by giving them full, and only full, control over the system.

Arch Linux users fully manage the system on their own. The system itself will offer little assistance, except for a simple set of maintenance tools that are designed to perfectly relay the user’s commands to the system.

The user-centric design also implies a certain “do it yourself” approach. Rather than requesting a new feature be implemented by developers, Arch Linux users have a tendency to solve problems themselves and share the results with the community and development team — a "Do first, then ask" philosophy. This is especially true for user-contributed packages found in the Arch User Repository — the official Arch Linux repository for community-maintained packages.

Free

Another guiding principle of Arch Linux development is freedom of choice. The users are not only permitted to make all decisions concerning system configuration, but also get to choose what their system will *be*.

By keeping the system simple, Arch Linux provides the freedom to make any choice about the system.

A freshly installed Arch Linux system contains only basic core components with no automatic configuration performed. Users are able to configure the system as they wish, from the CLI. Right from the start of the installation procedure, every component of the system is 100% transparent and accessible for instant removal or replacement by alternative components.

The large number of packages in the various Arch Linux repositories also support freedom of choice. Further, in comparison to other GNU/Linux distributions, the process of creating a new package is itself a simple, open, user-centric, and free process. New packages can be created easily with a little knowhow using the Arch Build System (ABS).

As Judd Vinet, the founder of the Arch Linux project said: "[Arch Linux] is what you make it."

Read: 886

[转]ArchLinux

src:http://wiki.archlinux.org/index.php/ArchLinux_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#Arch_Linux_.E6.98.AF.E4.BB.80.E4.B9.88.3F

Arch Linux 是什么?

Arch Linux 是个 针对 i686 优化的 linux 发行版。最初灵感源于 Per Lidén 开发的一个非常不错的 CRUX 发行版。

优势

Arch 基本理念是快速、轻巧、弹性与简单。这并非华而不实的行话,他们都是事实。Arch 是为 i686 处理器优化的, 所以可以为你取得更多的cpu cycle(快速)。他相较于 RedHat 或是其他的 Linux 而言是轻巧的, 而且简单的设计使他富有弹性并且可以成为任何你想建立的系统的模型。

特有的包管理

通过可以轻松使用的二进制包系统 – pacman – 一个命令就让您升级整个系统。Arch 同时也拥有一个类似 ports 的包构建系统(Arch Build System),通过它可以轻松构建软件包。它也是一个命令就可完成同步。哦,是的,您也可以用一个命令重新构建(rebuild)整个系统。所有事情都 是在一个非常简单、明了的情况下完成的。

只要最好的

Arch Linux 的使用者和发展者也很有效率的支持维护 current 与 extra 集,让Arch Linux的软件维持在最新的稳定版。

简单是关键

Arch 要达到的目标是简单和轻巧,我已经省去于 linux 系统无用的相关部分,比如 /usr/doc 和 info pages。按我个人经验,这些都是没多大用处的,而且真的需要时,可以从网络上获取等价的信息。Man pages 就足够了…

时髦的工具

Arch Linux 努力采用用户可以使用的更新的特性,比如 Ext3/ReiserFS 和 udev 等。Arch Linux 0.7 (Wombat) 缺省使用 2.6 的 linux 内核,而且支持 XFS/JFS。

进一步了解

Arch 的主页在 http://www.archlinux.org/ ,在那里您可以找到 用户论坛的链接,官方文档,和所有其他 Arch 相关的东西。也可以通过阅读 Arch之道

Read: 928

[推荐]C代码优化方案

地址:http://blog.csdn.net/quanming1119/archive/2005/08/10/450545.aspx

华中科技大学计算机学院

姓名:    王全明

QQ       375288012

Email     quanming1119@163.com

目录__ 2

C代码优化方案__ 4

1、选择合适的算法和数据结构__ 4

2、使用尽量小的数据类型__ 5

3、减少运算的强度__ 5

(1)、查表(游戏程序员必修课)_ 5

(2)、求余运算__ 6

(3)、平方运算__ 6

(4)、用移位实现乘除法运算__ 6

(5)、避免不必要的整数除法__ 8

(6)、使用增量和减量操作符__ 8

(7)、使用复合赋值表达式__ 8

(8)、提取公共的子表达式__ 9

4、结构体成员的布局__ 9

(1)按数据类型的长度排序__ 10

(2)把结构体填充成最长类型长度的整倍数__ 10

(3)按数据类型的长度排序本地变量__ 10

(4)把频繁使用的指针型参数拷贝到本地变量__ 11

5、循环优化__ 12

(1)、充分分解小的循环__ 12

(2)、提取公共部分__ 13

(3)、延时函数__ 13

(4)、while循环和do…while循环__ 14

(6)、循环展开__ 14

(6)、循环嵌套__ 15

(7)、Switch语句中根据发生频率来进行case排序__ 16

(8)、将大的switch语句转为嵌套switch语句__ 17

(9)、循环转置__ 18

(10)、公用代码块__ 19

(11)提升循环的性能__ 19

(12)、选择好的无限循环__ 20

6、提高CPU的并行性__ 21

(1)使用并行代码__ 21

(2)避免没有必要的读写依赖__ 22

7、循环不变计算__ 23

8、函数__ 24

(1)Inline函数__ 24

(2)不定义不使用的返回值__ 24

(3)减少函数调用参数__ 24

(4)所有函数都应该有原型定义__ 24

(5)尽可能使用常量(const)_ 25

(6)把本地函数声明为静态的(static)_ 25

9、采用递归__ 25

10、变量__ 25

(1)register变量__ 25

(2)、同时声明多个变量优于单独声明变量__ 26

(3)、短变量名优于长变量名,应尽量使变量名短一点__ 26

(4)、在循环开始前声明变量__ 26

11、使用嵌套的if结构__ 26

Read: 2070

[转]LZW数据压缩算法的原理分析

src:http://www.cnblogs.com/jillzhang/archive/2006/11/06/551298.html

   我希望通过本文的介绍,能给那些目前不太了解lzw算法和该算法在gif图像中应用,但渴望了解它的人一些启发和帮助。抛砖引玉而已,更希望园子里面兄弟提出宝贵的意见。
1.LZW的全称是什么?
   Lempel-Ziv-Welch (LZW).
2. LZW的简介和压缩原理是什么?
   LZW压缩算法是一种新颖的压缩方法,由Lemple-Ziv-Welch 三人共同创造,用他们的名字命名。它采用了一种先进的串表压缩,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮 串,从而使图象文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确的建立这个串表,压缩或解压缩完成后,这个串表又被丢 弃。
   LZW算法中,首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字 存入压缩文件中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。压缩完成后将串表丢弃。如"print" 字符串,如果在压缩时用266表示,只要再次出现,均用266表示,并将"print"字符串存入串表中,在图象解码时遇到数字266,即可从串表中查出 266所代表的字符串"print",在解压缩时,串表可以根据压缩数据重新生成。
3.在详细介绍算法之前,先列出一些与该算法相关的概念和词汇
   1)’Character’: 字符,一种基础数据元素,在普通文本文件中,它占用1个单独的byte,而在图像中,它却是 一种代表给定像素颜色的索引值。
   2)’CharStream’:数据文件中的字符流。
   3)’Prefix’:前缀。如这个单词的含义一样,代表着在一个字符最直接的前一个字符。一个前缀字符长度可以为0,一个prefix和一个character可以组成一个字符串(string),
   4)’Suffix’: 后缀,是一个字符,一个字符串可以由(A,B)来组成,A是前缀,B是后缀,当A长度为0的时候,代表Root,根
   5)’Code:码,用于代表一个字符串的位置编码
   6)’Entry’,一个Code和它所代表的字符串(string)
4.压缩算法的简单示例,不是完全实现LZW算法,只是从最直观的角度看lzw算法的思想
    对原始数据ABCCAABCDDAACCDB进行LZW压缩
    原始数据中,只包括4个字符(Character),A,B,C,D,四个字符可以用一个2bit的数表示,0-A,1-B,2-C,3-D,从最直观的角度看,原始字符串存在重复字符:ABCCAABCDDAACCDB,用4代表AB,5代表CC,上面的字符串可以替代表示为:45A4CDDAA5DB,这样是不是就比原数据短了一些呢!
5.LZW算法的适用范围
   为了区别代表串的值(Code)和原来的单个的数据值(String),需要使它们的数值域不重合,上面用0-3来代表A-D,那么AB就必须用大于3的 数值来代替,再举另外一个例子,原来的数值范围可以用8bit来表示,那么就认为原始的数的范围是0~255,压缩程序生成的标号的范围就不能为 0~255(如果是0-255,就重复了)。只能从256开始,但是这样一来就超过了8位的表示范围了,所以必须要扩展数据的位数,至少扩展一位,但是这样不是增加了1个字符占用的空间了么?但是却可以用一个字符代表几个字符,比如原来255是8bit,但是现在用256来表示254,255两个数,还是划得来的。从这个原理可以看出LZW算法的适用范围是原始数据串最好是有大量的子串多次重复出现,重复的越多,压缩效果越好。反之则越差,可能真的不减反增了
6.LZW算法中特殊标记
   随着新的串(string)不断被发现,标号也会不断地增长,如果原数据过大,生成的标号集(string table)会越来越大,这时候操作这个集合就会产生效率问题。如何避免这个问题呢?Gif在采用lzw算法的做法是当标号集足够大的时候,就不能增大 了,干脆从头开始再来,在这个位置要插入一个标号,就是清除标志CLEAR,表示从这里我重新开始构造字典,以前的所有标记作废,开始使用新的标记
这时候又有一个问题出现,足够大是多大?这个标号集的大小为比较合适呢?理论上是标号集大小越大,则压缩比率就越高,但开销也越高。 一般根据处理速度和内存空间连个因素来选定。GIF规范规定的是12位,超过12位的表达范围就推倒重来,并且GIF为了提高压缩率,采用的是变长的字 长。比如说原始数据是8位,那么一开始,先加上一位再说,开始的字长就成了9位,然后开始加标号,当标号加到512时,也就是超过9为所能表达的最大数据 时,也就意味着后面的标号要用10位字长才能表示了,那么从这里开始,后面的字长就是10位了。依此类推,到了2^12也就是4096时,在这里插一个清 除标志,从后面开始,从9位再来。
GIF规定的清除标志CLEAR的数值是原始数据字长表示的最大值加1,如果原始数据字长是8,那么清除标志就是256,如果原始数据字长为4那么就是16。另外GIF还规定了一个结束标志END,它的值是清除标志CLEAR再加1。由于GIF规定的位数有1位(单色图),4位(16色)和8位(256色),而1位的情况下如果只扩展1位,只能表示4种状态,那么加上一个清除标志和结束标志就用完了,所以1位的情况下就必须扩充到3位。其它两种情况初始的字长就为5位和9位。此处参照了http://blog.csdn.net/whycadi/
7.用lzw算法压缩原始数据的示例分析
   输入流,也就是原始的数据为:255,24,54,255,24,255,255,24,5,123,45,255,24,5,24,54………………
   这个正好可以看到是gif文件中像素数组的一部分,如何对它进行压缩
   因为原始数据可以用8bit来表示,故清除标志Clear=255+1 =256,结束标志为End=256+1=257,目前标号集为
   0 1 2 3 ………………………………………………………………………255 CLEAR END
   第一步,读取第一个字符为255,在标记表里面查找,255已经存在,我们已经认识255了,不做处理
   第二步,取第二个字符,此时前缀为A,形成当前的Entry为(255,24),在标记集合不存在,我们并不认识255,24好,这次你小子来了,我就记住你,把它在标记集合中标记为258,然后输出前缀A,保留后缀24,并作为下一次的前缀(后缀变前缀)
第三步,取第三个字符为54,当前Entry(24,54),不认识,记录(24,54)为标号259,并输出24,后缀变前缀
    第四部:取第四个字符255,Entry=(54,255),不认识,记录(54,255)为标号260,输出54,后缀变前缀
   第五步   取第5个字符24,entry=(255,24),啊,认识你,这不是老258么,于是把字符串规约为258,并作为前缀
   第六步 取第六个字符255,entry=(258,255),不认识,记录(258,255)为261,输出258,后缀变前缀
   …….
一直处理到最后一个字符,
用一个表记录处理过程
   CLEAR=256,END=257

第几步 前缀 后缀 Entry 认识(Y/N) 输出 标号
1 255 (,255)
2 255 24 (255,24)       N 255 258
3 24 54 (24,54)       N 24 259
4 54 255    (54,255)       N 54 260
5 255 24 (255,24)       Y
6 258 255 (258,255)       N 258 261
7 255 255 (255,255)       N 255 262

…..
上面这个示例有些不能完整体现,另外一个例子是
原输入数据为:A B A B A B A B B B A B A B A A C D A C D A D C A B A A A B A B …..
采用LZW算法对其进行压缩,压缩过程用一个表来表述为:
注意原数据中只包含4个character,A,B,C,D
用两bit即可表述,根据lzw算法,首先扩展一位变为3为,Clear=2的2次方+1=4; End=4+1=5;
初始标号集因该为

0 1 2 3 4 5
A B C D Clear End

而压缩过程为:

第几步 前缀 后缀 Entry 认识(Y/N) 输出 标号
1 A (,A)
2 A B (A,B)       N A 6
3 B A (B,A)       N B 7
4 A B    (A,B)       Y
5 6 A (6,A)       N 6 8
6 A B (A,B)       Y
7 6 A (6,A)      Y
8 8 B (8,B)        N 8 9
9 B B (B,B)        N B 10
10 B B (B,B)        Y
11 10 A (10,A)        N 10 11
12 A B (A,B)        Y

…..
当进行到第12步的时候,标号集应该为

0 1 2 3 4 5 6 7 8 9 10 11
A B C D Clear End AB BA 6A 8B BB 10A

8.LZW算法的伪代码实现

1STRING = get input character
2WHILE there are still input characters DO
3     CHARACTER = get input character
4     IF STRING+CHARACTER is in the string table then
5         STRING = STRING+character
6     ELSE
7         output the code for STRING
8         add STRING+CHARACTER to the string table
9         STRING = CHARACTER
10     END of IF
11END of WHILE
12output the code for STRING
13

9.LZW算法的流程图
没有安visio,画了一个,比较难看,

Read: 1064

[原创]Fedora8 + Nginx 0.6.3 + PHP 5.2.5

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。

对于高负载web服务器强烈推荐

uname -a
Linux gk 2.6.24.4-64.fc8 #1 SMP Sat Mar 29 09:54:46 EDT 2008 i686 athlon i386 GNU/Linux

一、先编译安装PCRE, 我用的是当时最新的版本 7.7
nginx的rewrite需要pcre库的支持,如果你不用rewrite也可以不装这个
CFLAGS=’-O2 -Wall’ ./configure –prefix=/usr/local/pcre
make -j 4 (此项根据个人机器而定 一般来说cpu * 2是没有问题的,多任务编译,机器扛得住就越多越快)
make install

(其实貌似不装也可以,nginx配置的时候设定的路径是源码包。。。。)

二、编译安装nginx 0.6.3

  • gzip 模块需要 zlib

  • rewrite 模块需要 pcre

  • ssl 功能需要 openssl

这里的用户(www)应该有对document_root完全操作权限(777)
md5和sha1系统应该是都有带了的,但是不指定的话它会找不到,还是得给个路径
openssl根据个人需要装吧 yum install openssl 就行,不知道是什么就别装了, 用来支持https的
./configure
        –prefix=/usr/local/nginx
        –user=www
        –group=www
        –with-http_ssl_module
        –with-http_stub_status_module
        –with-pcre=/workspace/software/pcre-7.7
        –with-md5=/usr
        –with-sha1=/usr
make -j 4
make install

三、编译安装PHP
PHP的配置是比较复杂的,不过网上的资料太多了,我就不多说了
注意两点:必须添加
–enable-fastcgi
–enable-force-cgi-redirect
不能保留(sapi / cli|cgi 貌似不能共存还是同时编译?如果有需要就弄到两个目录去好了)
–with-apxs2
下面是我的配置,仅供参考
./configure
        –prefix=/usr/local/php
        –with-config-file-path=/usr/local/php
        –with-mysql=/usr/local/mysql
        –with-iconv-dir=/usr/local
        –with-xsl –disable-rpath
        –enable-discard-path
        –enable-safe-mode
        –enable-bcmath
        –enable-shmop
        –enable-sysvsem
        –enable-inline-optimization
        –with-libexpat-dir=/usr/lib
        –with-gmp
        –with-curl
        –with-curlwrappers
        –enable-mbregex
        –enable-ftp
        –with-gd=/usr/local/gd2035
        –enable-zip
        –enable-sockets
        –enable-soap
        –enable-mbstring=all
        –enable-gd-native-ttf
        –with-freetype-dir
        –with-jpeg-dir
        –with-png-dir
        –with-zlib
        –with-pdo-mysql=/usr/local/mysql
        –without-pdo-sqlite
        –enable-fastcgi
        –enable-force-cgi-redirect

make -j 4
make install

复制 php.ini-(dis|recommended) 到 –with-config-file-path 设定的目录下
修改,去处其注释
cgi.fix_pathinfo=1
保持doc_root的值为空或者注释掉

其他根据需要设定即可,这里只提有别与普通设置的地方

四、我们需要ligthttpd 的 spawn-fcgi来启动php-cgi。。。
先down下来ligthttpd源码 。。
然后编译(对,就是编译,咱不装他)
configure && make -j 4 (省事的做法。。)

编译完成后 进入src目录
复制 spawn-fcgi 到 /usr/local/php/bin 目录下

然后可以先启动我们的fastcgi喽,用下面这个命令
/usr/local/php/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 20 -u www -g www -f /usr/local/php/bin/php-cgi

-f cgi程序路径
-a 绑定到的IP
-p 端口
-C 启动进程数, 内存大的话(3G以上推荐250,如果服务器内存小于3GB,可以只开启25个进程,性能损失不到一倍)
(作为root 启动才能用的参数)
-u <user>    使用指定的用户启动
-g <group>   指定组群。。。

千万要记住,这里的 用户和组都要有php文件目录(你的document_root)的读写权限噢…最好跟nginx设定的一样
血的教训阿…
如果出现什么 "No input file specified" 可能就是这个问题了

然后编辑
/usr/local/nginx/conf/fastcgi_params

如果你下的版本跟我一样呢,只要加上
fastcgi_param SCRIPT_FILENAME    $document_root$fastcgi_script_name;
这一句就好了, 就加在
fastcgi_param SCRIPT_NAME        $fastcgi_script_name;
的上面就可以了(顺序不重要..主要是要好看嘛…)

关于nginx.conf的设置我就懒得多说了(关键是我还没怎么弄明白呢)

有问题的跟帖说吧….(估计也没人问..哈…写给自己看的…人老了..就怕忘东西)

附上两篇我参考的文章地址:
Nginx 0.5.31 + PHP 5.2.4(FastCGI)搭建可承受3万以上并发连接数,胜过Apache 10倍的Web服务器[原创]
http://blog.s135.com/read.php/297.htm

利用Nginx替代apache实现高性能的Web环境
http://www.linuxpk.com/391/viewspace-7616.html

Read: 969