2010年5月18日星期二

RPM Packager学习(3)

内容目录
1.Linux一般软件的安装 1
2.Linux包类型 1
3.RPM介绍 2
3.1.例子 2
3.2格式 2
3.3rpm支持的架构 2
4.RPM使用 3
4.1RPM的运用 3
4.2YUM的运用 4
5.RPM打包 4
5.1预备工作 4
5.1.1预装软件 4
5.1.2建立文件夹树 4
5.2.创建RPM Spec文件 5
5.2.1导言 5
5.2.2 %description区段 5
5.2.3 %prep 区段 5
5.2.4 %build区段 5
5.2.5 %install区段 6
5.2.6 %clean区段 6
5.2.7 %files区段 6
5.2.8 %changelog区段 6
5.3 调用rpmbuild命令编译rpm软件包 7
6. Fedora哦也,酷毙了~ 7

1.Linux一般软件的安装
./cofigure
make && make install

2.Linux包类型
软件包简单的说就是像Windows下.exe或者.msi的样子的安装包。可以将编译好的二进制文件,源代码,文档等以特定格式压缩。使用软件包管理工具可以直接安装。
RPM ——RPM(Redhat Packager Manager),最初是Redhat公司引进在Redhat Linux上的,是以自由软件许可证发布的软件。主要使用的发行版有:RHEL,Fedora,CentOS,Mandriva,openSUSE,国内的Redflag,Qomo,还有一个值得关注的是就快出现的Meego也是用RPM的。They say they like “yum”


Deb——也有不使用RPM管理的发行版,那就是所谓的Debian系,主要是Debian,Ubuntu,Knoppix。


Portage——是Gentoo引入的,类似与FreeBSD中的一个port的一个管理。使用下载.tarball的包在本地编译。能够产生跟高效的软件,但是相当费电,费时。


3.RPM介绍
3.1.例子
我们先来看RPM软件包的几个例子:
kernel-2.4.18-3.i586.rpm
rootfiles-7.2-1.noarch.rpm
firefox-3.6.3-1.i686.rpm

3.2格式
name-version-release.architecture.rpm
name —— 软件的名字;
version——软件的版本;
release——软件包的发行版本;
architecture——架构;
rpm——不用解释了吧。

3.3rpm支持的架构

平台
包上的架构名
Intel compatible 32-bit
i386, i486, i586, i686, athlon
Intel compatible 64-bit
ia64
HPAlpha (原Compaq)
alpha, alphaev5, alphaev56, alphapca56, alphaev6, alphaev67
Sparc/Ultra Sparc (Oracle原Sun)
sparc, sparcv9, sparc64
ARM
armv3l, armv4b, armv4l
MIPS
mips, mipsel
Power PC
ppc, ppciseries, ppcpseries, ppc64
Motorola 68000 series
m68k, m68kmint
SGI MIPS
Sgi
IBM RS6000
rs6000
IBM S/390
i370, s390x, s390
平台无关
noarch


4.RPM使用
4.1RPM的运用
rpm -i 安装
rpm -U 更新
rpm -q 查询
rpm -e 移除

4.2YUM的运用
特别强大,个人感觉比apt-get好用。根本不需要另外配合GUI。请使用man yum。

5.RPM打包
5.1预备工作
5.1.1预装软件
先確定是否安裝了必須的軟件 rpmdevtools yum-utils
如果你本身使用src.rpm构建rpm那么,只需要
yumdownloader --source 软件名
yum-builddep XXX.src.rpm解决依赖性
rpm -Uvh XXX.src.rpm之后就一样了,到SPECS的目录下
5.1.2建立文件夹树
建立打包环境 rpmdev-setuptree

文件夹
用处
BUILD
rpmbuild命令将在这个文件夹建立软件
RPMS
rpmbuild将编译完的rpm包放在此处
SOURCES
软件的源代码
SPECS
.spec文件放在此处
SRPMS
Rpmbuild建立的src.rpm文件放在此处

注:红旗以及Qomo Linux使用非常不安全的形式,将建立软件包的目录树放置于/usr/src/下。这种以root形式的打包方法根本就是错误的!(这是现存最好的打包中文活指南supercyper说的,我们fedora社区的牛牛)这种形式Packager必须以root形式构建软件包,make install的步骤将不知道装到什么地方去了,可能破坏系统。

5.2.创建RPM Spec文件
5.2.1导言
Name: 软件名
Version:软件版本号
Release:包的发行号
Packager:打包的人(一般喜欢写个人邮箱)
License:使用的证书如GPLv2,BSD
URL: 官方网站
Group:用于帮助图形化安装程序将Linux软件分类分开。
Summary: 软件摘要
Source0:软件tarball的名字 %{name}-%{version}.tar.gz
Requires:软件依赖的软件
Buildrequires:编译时所依赖的软件

注:Buildrequies && Requires可以以 ncurses-devel,或者ncurses-devel >= 版本号
%define version XXX的形式可以创建宏,引用时%{version}


5.2.2 %description区段
对于软件的描述,可以持续多行

5.2.3 %prep 区段
一般使用%setup -q,%setup是一个RPM的宏,进行对tarball解压缩的工作。-q表示静默。

5.2.4 %build区段
建立软件的工作,./configure以及make

5.2.5 %install区段
一般情况可以使用%makeinstall来安装程序,这个宏以一种非常聪明的方式直接调用makefile的install目标。
这里我们看一下手工安装所有的文件的例子:
mkdir -p $RPM_BUILD_ROOT%{_bindir} 建立一个可执行文件的目录
mkdir -p $RPM_BUILD_ROOT%{_mandir} 建立一个安装手册的目录
install -m755 myapp $RPM_BUILD_ROOT%{_bindir}/myapp
install -m755 myapp.1 $RPM_BUILD_ROOT%{_mandir}/myapp.1
将文件编译到固定的文件夹,并设置访问权限

5.2.6 %clean区段
清除其他区段产生的文件
rm -rf $RPM_BUILD_ROOT

5.2.7 %files区段
这个区段将列出所有需要包括进软件包的文件。
我们继续上面那个简单的例子:
%{_bindir}/myapp
%{_mandir}/myapp.1
使用%doc标志为文档,%post用于软件包是守护进程的情况,修改系统初始化脚本启动程序。
%files 定義了需要包括進軟件包的所有文件,要求非常嚴格
%defattr(-,root,root,-)
%doc
% {_bindir}被擴展為當前二進制目錄
%{_mandir}使用手冊
%{_datadir}數據(包括圖片等)

5.2.8 %changelog区段
写出对软件包更新的情况一般如下例所示:
* Wed Sep 16 2009 Tomas Mraz
- 8.14.3-8
- Use password-auth common PAM configuration instead of system-auth

5.3 调用rpmbuild命令编译rpm软件包
选项
作用
-ba
建立一个rpm以及一个.src.rpm
-bb
只建立二进制的rpm
-bc
编译但不构建软件包,停止在%build区段
-bp
只做到%prep区段
-bi
在%install后停止
-bl
列出rpm中的文件列表
-bs
只建立src.rpm文件

如:rpmbuild -ba ***.spec
确定平台使用 --target i686


6. Fedora哦也,酷毙了~
My Page: http://scienologies.blogspot.com
http://gnudam.webgarden.com
Fedora Project Contributor -- Ambassador
https://fedoraproject.org/wiki/User:Freakrobot
_______________________________________________
Chinese mailing list
Chinese at lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/chinese

2010年5月17日星期一

分区文件系统命令操作

1.烧制Live-USB镜像
dd if=/home/freakrobot/openSUSE-11.2-KDE4-LiveCD-i686.iso of=/dev/sdb

2.调整lvm的分区大小
lvdisplay可以查看逻辑卷
lvresize 可以修改,逻辑卷大小

3.调整文件系统大小
resize2fs命令调整

扩大分区的话,2.&&3.要连续使用,不然逻辑卷变大了,文件系统并没变大~

2010年5月12日星期三

RPM Packager 學習(2)

1.先總結一下rpmbuild的目錄:
BUILD rpmbuild命令在這個目錄中建立軟件
RPMS rpmbuild 命令把她創建的二進制包放在此處
SOURCES 應用程序源代碼
SPECS .spec文件
SRPMS .src.rpm

------------------------------------------------------------

2.spec文件

Emacs果然強大,自動生成了不少東西,一一做筆記
Name: 軟件名
Version: 版本號
Release: 軟件包的版本號
Summary: 軟件摘要
Packager: 打包員名號
Group: Linux應用軟件的分類
License: guess what
URL:
Source0: 包的名字
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
定義一個用於測試安裝的目錄,定義好Buildroot後,就可以通過使用變量$RPM_BUILD_ROOT將應用軟件安裝到Buildroot定義的目錄下,
BuildRequires:
Requires:
兩種依賴包,編譯依賴和運行的依賴
%description
對軟件描述,可以持續多行。
下面主要分為4部分,%prep,%build,%configure,%install
%prep
%setup -q
準備工作,一般用%setup就可以了。

%build
%configure 相當於./configure
make %{?_smp_mflags}
絕大多數情況用make就可以了,編譯libfetion時我先用了qmake-qt4。

%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
可以使用%makeinstall安裝程序,也可以根據所用軟件帶的install.sh腳本來自己寫。

%clean
rm -rf $RPM_BUILD_ROOT


%files 定義了需要包括進軟件包的所有文件,要求非常嚴格
%defattr(-,root,root,-)
%doc
%{_bindir}被擴展為當前二進制目錄
%{_mandir}使用手冊
%{_datadir}數據(包括圖片等)

%changelog 如名日誌
* Sat May 08 2010 freakrobot
-Initial libfetion package

------------------------------------------------------------

3.最後是rpmbuild的參數使用:
-ba 同時建立二進制軟件包和源代碼軟件包
-bb 只建立二進制軟件包
-bc 只編譯不製作rpm包
-bp 為建立rpm包做準備
-bi 創建二進制軟件包並安裝
-bl 檢查RPM包的文件列表
-bs 只建立源代碼包

2010年5月10日星期一

RPM packager學習(1)

今天吃壞了,拉肚子,課也沒去上,真是悲劇。還好學了一下framebuffer,最後再整理一下打包問題的就睡覺了。
西廂計劃不怎麼好用,副產品打rpm包倒是簡單的會了,呵呵~

先补充一下包的基本术语:
name-version-release.architecture.rpm
name -- 包名
version -- 版本号
release -- 包的更新号
architecture -- 架构

支持的架构包括:


Platform

Architectures

Intel compatible 32-bit

i386, i486, i586, i686, athlon


Intel compatible 64-bit

ia64

HPAlpha (formerly Digital, Compaq)

alpha, alphaev5, alphaev56, alphapca56, alphaev6,
alphaev67

Sparc/Ultra Sparc (Sun)

sparc, sparcv9, sparc64


ARM

armv3l, armv4b, armv4l

MIPS

mips, mipsel

Power PC

ppc, ppciseries, ppcpseries, ppc64

Motorola 68000 series

m68k, m68kmint

SGI MIPS

Sgi

IBM RS6000

rs6000


IBM S/390

i370, s390x, s390

Platform independent

noarch


1.安裝:先確定是否安裝了必須的軟件 rpmdevtools yum-utils,
2.建立打包的環境,$rpmdev-setuptree
3.打包
3.1打包*.src.rpm文件
3.1.1*.src.rpm文件可以通過yumdownloader –source *.src.rpm獲取
3.1.2檢查依賴性關係yum-builddep *.src.rpm
3.1.3安裝*.src.rpm包 rpm -Uvh *.src.rpm
3.1.4進入SPECS文件夾,rpmbuild -ba *.spec就可以了
3.2打包tarball文件
3.1.1將包放到SOURCE文件夾
3.1.2自己寫spec文件
3.1.3 rpmbuild同上

想睡了,spec文件寫法跟rpmbuild參數明天繼續總結。

一个kernel进阶者的赠言

hey all.
those who want to know..i did nothing big magical. just asked people who are already working ..like many of us ask on this list only
then followed what they said.

its like one thing i learnt is ...

"Better try it once then again then again before asking it once."
as asking fetches partial may be incorrect knowledge but asking after rehearsing things
will fetch you correct information.

it requires persistence no doubt after when it seems no use of it .
i did very normal things like
studying

1)Bach -- Design of Unix OS by Maurice J Bach
2)ALP -- Advance linux Programming
http://www.advancedlinuxprogramming.com/
3)UTLK -- Understanding The Linux Kernel
4)LDD -- Linux Device Drivers

then i was still stuck to get a project in resume.

then explore open source sourceforge community ...
its difficult i accept totally.... rather it was very very difficult to get a single project from thousands lying there .
but only hope was it wasnt impossible.

and i got a few ...

that's all is reqd for getting shortlisted.

after that you are on your own .good projects just mean getting shortlisted ...that's it ..
The Complete game is still left .... to successfully clear interview is with another effort in C data structures then kernel ofcourse.

that's was all.

Nidhi

framebuffer资料整理

为了要做图形学的作业,又不想用windows,研究了一下framebuffer。大牛们的文章都很棒,我就不献丑了,整理一下资料:
Framebuffer原理、使用、测试系列文章

此文作为讲原理的文章还是相当到位的,对内核中framebuffer的结构有了一定的了解,但是这上面的代码却非常令人费解,完全没有注释。

Examples(English)

代码入门(中文版)
这个链接里面的代码注释非常棒,而且由浅入深,一下子就看懂了。

有了上面两篇文章framebuffer基本上都会用了,其他的也还不错,可以参考一下:
Framebuffer 画点,画线,画多边形,画圆
Framebuffer HOWTO

2010年5月9日星期日

First time blinking LED

I try for several days, and successful killed pre-installed WinCE in my board and blinked my LED. This was really exciting. And it should be the beginning of happiness. So I want to make a memo to remember this great time.

To make jtag work on Linux your need nothing to do. But if you want to make it work under Windows you need to install the device driver by copying the jtag.sys into the system32 dir and install it under the control panel.

The next thing need to mention is to setup the arm-linux-gcc. Just copy the whole directory of arm-linux-gcc under the /usr/arm directory. And export the environment as:
$ export PATH = $PATH:/usr/arm/gcc-3.4.5-glibc-2.3.6/bin
And change the /etc/environment file into
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/arm/gcc-3.4.5-glibc-2.3.6/bin”

Then I just use the example the book gived me, and write a Makefile and make.

That was easy. However, I got some problems write the program to the NAND flash on my board. Later I figure out that. I got “K9F1G08” on my board which is not support by SJF2440. So I have to switch my work to Windows. With “H-JTAG” I use the config file “hfc”, it gives me as an example. Just have to change the “K9F1208” into “K9F1G08”. The most horrible thing is the “H-JTAG” call “program” when he referred burn or download to NAND FLASH. That mislead me, and waste me a lot of time. Download it and earse it immediately. SILLY.

However still did not understand how the initscript works, waiting for answers from my Mentor now.

MBR analysis

A master boot record (MBR), or partition sector, is the 512-byte boot sector that is the first sector ("LBA Sector 0") of a partitioned data storage device such as a hard disk.
----Wikipedia

00 ~ 1BD 446byte boot code area
1BE ~ 1CD 16 byte partition 1
1CE ~ 1DD 16 byte partition 2
1DE ~ 1ED 16 byte partiion 3
1EE ~ 1FD 16 byte partition 4
1FE ~ 1FF 2 byte sigatur(55AA)

1. That's why there is only 4 physical partition.
2. The sigatur must be 55AA, otherwise the MBR is not available.

In 1BE ~ 1CD,
00~00 0x80 -- bootable 0x00 -- otherwise
01~03 CHS start address
04~04 partition type (83--linux 82--linux swap)
05~07 CHS end address
08~0B LBA start
0C~0F sector number

That's why there is only

Daemonize

a daemon (pronounced /ˈdeɪmən/ or /ˈdiːmən/)[1] is a computer program that runs in the background, rather than under the direct control of a user; they are usually initiated as background processes.
In a Unix environment, the parent process of a daemon is often (but not always) the init process (PID=1). Processes usually become daemons by forking a child process and then having their parent process immediately exit, thus causing init to adopt the child process.

Example of Daemonize
http://www.itp.uzh.ch/~dpotter/howto/daemonize

Can't create hard links as you want

In Unix like system, it's not possible for your create a hard link everywhere you like. For example, hard links cannot be created between directories. Also, they cannot be created between files in different filesystems.

That means if there is a file "/home/xxx/hello", you can't just create a hard link in /boot or /tmp, if you separate /home as a solo tree.
because that confuse the OS,


[freakrobot@acm lisp]$ ln /home/freakrobot/Code/lisp/dbmanage.lisp /boot
ln: creating hard link `/boot/dbmanage.lisp' => `/home/freakrobot/Code/lisp/dbmanage.lisp': Invalid cross-device link


reference: http://www.cyberciti.biz/tips/why-isnt-it-possible-to-create-hard-links-across-file-system-boundaries.html

Lisp learning notes1

Although Lisp is a powerful programming language with a very simple syntax. However, the ads is always said in a tricky way. Lots of functions and marcos should be remembered if you want to use lisp. I just want to make a list of functions and marcos I have met in the book to keep me remember of all this.
Here it is:















































formatmost flexible way of output
ta shorthand for the stream *standard-output*
defunfunctions define
loadload a file of expression
compile-filecompile a lisp file
listmake a list
(list :a 1 :b 2 :c 3)property list
getfchoose element by property
defvardefine a variable
pushadd items 1st to 2nd
dolistlooping from 2nd param
~aoutput format consume one argument
~10temit spaces
~%emit one more newline to put blank line
~{ and ~}loops over that list
force-output=flush in c
read-lineread a single line of text
*query-io*global variable contain input stream
orlogical operation
y-or-n-pask for y/n
looprepeat until return called
returnend loop
ifjust "if"
notlogical operation
with-open-fileopens a file
with-standard-io-syntaxensures certain variables that affect
printoutput as a lisp readable format
setfassignment operator
readread from the stream in
evenpreturn T if argument is an even number
remove-if-nottakes a predicate and a list return list match predicate
lambdaanonymous function
equalcompare strings
mapcarmap over a list
defmarcodefine a macro
reversereverse a list
popinverse operation of push
-pcheck if the param is be passed
' or `stop evaluation expression
,start evaluated
#shorthand for get function by name
functionsyntactic sugar for #'
@splices the value
&key / &rest / &optionalvary params
funcall(funcall #'foo para1 para2)call functions
apply==funcall paras be a list

2010年3月23日星期二

Begin Linux OpenGL programming


  • Compiling an OpenGL/GLUT program requires you to use a number of libraries.

    • GLUT (library "glut" on Linux)
    • OpenGL (library "GL" on Linux)
    • GL Utilities (library "GLU" on Linux)
    • Windowing specific libraries needed by GLUT. For X-Windows, these include:

      • X11
      • Xmu
      • Xi

    • Often you'll also need the math library (library "m" on Linux)
    • You need to include (more) libraries if you encounter error messages such as:

      • /tmp/ccKfrBZc.o(.text+0x1a6): In function `main':

        : undefined reference to `glutInitDisplayMode'




  • Including libraries is easy with gcc or g++, just at "-l< lib-name >" to the command line.


  • So, a compilation including all these libraries would look like:

    • gcc -o myProg myProg.c -lglut -lGL -lGLU -lX11 -lXmu -lXi -lm
    • The "-o myProg" tells gcc to call the executable "myProg"
    • After compilation, you can run by typing "./myProg" or if "." is in your path just "myProg" will work.


  • On many machines, gcc doesn't know where to find the correct include
    files (those you added to your code using #include"...")

    • Adding "-I < include-path >" tells gcc where to find additional include files.
    • You'll need to add -I commands to eliminate errors such as:

      • myProg.c:1:17: Xm.h: No such file or directory




  • Often (including on the lab machines), the linker doesn't know where to find
    some of the libraries if they're stored in unusual locations (like outside of /usr/lib)

    • Adding "-L < library-path >" tells the linker where to find additional library files.
    • You'll need to add -L commands to eliminate errors such as:

      • /usr/bin/ld: cannot find -lX11




Suggested Command Line to Compile on Lab Machines:




gcc -o myProg myProg.c -I /usr/X11R6/include/ -L /usr/X11R6/lib64/ -lglut -lGL -lGLU -lX11 -lXmu -lXi -lm


You should just be able to copy/paste. The only changes you need to make are:


  • Change the filename "myProg.c" to the filename of your program

    • (If you have more than one C file, include more than one on the command line)

  • Change "gcc" to "g++" if you're using C++.




NOTE: If you are compiling at home, you may need to change /usr/X11R6/lib64 to
/usr/X11R6/lib. It turns out the lab machines in MLH 301 have both 32- and 64-bit versions
of OpenGL and GLU, but only a 64-bit version of GLUT.





Chris Wyman (cwyman@cs.uiowa.edu)

2010年3月2日星期二

Linux硬件信息查询汇总一览

注:以下实用工具大部分是GNU工具集,适用于GNU/Linux,其他Unix衍生发行版可能不自带(可能需要自己手动编译)。

--------------------------------------------------
1, 主板信息-查看主板的序列号
--------------------------------------------------
#使用命令
dmidecode | grep -i 'serial number'
#查看板卡信息
cat /proc/pci
--------------------------------------------------
2, cpu信息
--------------------------------------------------
#通过/proc文件系统
1) cat /proc/cpuinfo
#通过查看开机信息
2) dmesg | grep -i 'cpu'
#
3)dmidecode -t processor
--------------------------------------------------
3, 硬盘信息
--------------------------------------------------
#查看分区情况
fdisk -l
#查看大小情况
df -h
#查看使用情况
du -h
#
hdparm -I /dev/sda
#
dmesg | grep sda
查看IDE硬盘信息:sudo hdparm -i /dev/hda
查看SATA硬盘信息 :sudo hdparm -I /dev/sda 或 sudo blktool /dev/sda id
--------------------------------------------------
4, 内存信息
--------------------------------------------------
1) cat /proc/meminfo
2) dmesg | grep mem
3) free -m
4) vmstat #Report virtual memory statistics
5) dmidecode | grep -i mem
--------------------------------------------------
5, 网卡信息
--------------------------------------------------
1) dmesg | grep -i 'eth'
2) cat /etc/sysconfig/hwconf | grep -i eth
3) lspci | grep -i 'eth'
--------------------------------------------------
6, 鼠标键盘和USB信息
--------------------------------------------------
查看键盘和鼠标:cat /proc/bus/input/devices
查看USB设备:cat /proc/bus/usb/devices
查看各设备的中断请求(IRQ):cat /proc/interrupts
--------------------------------------------------
7, 显卡信息
--------------------------------------------------
1)lspci |grep -i 'VGA'
2)dmesg | grep -i 'VGA'
--------------------------------------------------
8, 声卡信息
--------------------------------------------------
1)lspci |grep -i 'VGA'
2)dmesg | grep -i 'VGA'
--------------------------------------------------
7, 其他命令
--------------------------------------------------
用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart)
dmesg (查看所有启动时检测到的硬件信息)
lspci (显示外设信息, 如usb,网卡等信息)
cat /etc/sysconfig/hwconf
mpstat
查看PCI设备:lspci
查看USB设备:lsusb -v
查看网卡状态:sudo ethtool eth0
查看CPU信息:cat /proc/cpuinfo
显示当前硬件信息:sudo lshw
--------------------------------------------------
8, 需要手动安装的工具
--------------------------------------------------
lshw,hwinfo,hal-device-manager

2010年2月25日星期四

两部Linux及自由软件纪录片



中文:代码
英文:The Code - Linux
原名:Koodi - Linuxin tarina (Finland)
发行:2001年
导演:HANNU PUTTONEN
主演:Linus Torvalds / Eric Raymond / Richard M. Stallman / David S. Miller / Alan Cox
语言:英语
内容介绍:1991 年,年仅 20岁的 Linus Torvalds,芬兰赫尔辛基大学的学生在网络新闻组里发布了一帖,要求大家给他既将要编写的操作系统一些建议,使他编写出更好的操作系统。他把这个项 目作为一个爱好,他说,它不会成为“专业的”。但是 10 年过去了,他与遍布世界的骇客们完成了一个叫做 Linux 的操作系统,其可与 Windows 2000 竞争服务器市场,现在正在进军桌面市场。Linux 为什么与众不同,是如何向传统软件企业发起挑战。




中文:操作系统革命
英文:Revolution OS
发行:2002年
地区:美国
语言:英语
导演: J.T.S. Moore
主演: Richard M. Stallman / Linus Torvalds
内容简介:在微软垄断下有一件东西永远它永远不会给你──真正的自由。也正是因为这个原因,不少先锋人物站出来反抗微软帝国,并努力建立一种新的操作系统──没有人为的限制,任何人都可以自由地使用。
为了记录这些人的艰苦历程,J.T.S. Moore 拍摄了全新的记录片──Revolution OS,向公众介绍这些建立Linux 操作系统,奋起反抗垄断的斗士的人生经历。
现在微软已经明显感到了来自Linux的压力。微软的首席执行官去年6月公开表示:”Linux 是一种癌症!”。但这丝毫不能影响 Linux 发展的步伐。

2010年2月24日星期三

PyQt4学习笔记二



第五章(Dialogs)


第五章主要讲了三种Dumb dialogs

  • Dumb dialogs

    1. 1.使用QLabel的方法setBuddy配置聚焦快捷键

      2.addLayout(self,QLayout,int(row),int(col),int(rowSpan),int(colSpan),Qt.Alignment);-1表示拓展到头


      3.buttonBox=QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)

         buttonBox.button(QDialogButtonBox.Ok).setDefault(True)

         layout.addWidget(buttonBox,3,0,1,3)

         self.connect(buttonBox,SIGNAL("accepted()"),self,SLOT("accept()"))

         self.connect(buttonBox,SIGNAL("rejected()"),self,SLOT("reject()"))


  • Standard dialogs


    1. 1.深拷贝浅拷贝复习


      • 浅拷贝:把列表里面的对象插入到新的列表对象里面,id不变(列表新,对象旧)

      • 深拷贝:建立新列表里面是新的对象(列表新,对象新)




      2.QMessageBox.warning(self,"标题栏","正文")

  • Smart Dialogs


    1. 1.Modeless模式

      • a.正则表达式punctuationRe=QRegExp(r"[,;:.]")
        QLineEdit.setValidator(QRegExpValidator(punctuationRe,self))

      • b.QLineEdit.setInputMask("X") 表示至少一个元素,有过滤器考虑到底内容是什么




      2.live模式

      • textEdited()信号/valueChanged()信号/toggled()信号






第六章(Main Windows)



  • 1.程序分块的方法

    1. 主窗口一个

      各个dlg开一个新文件

      qrc_resource.py资源统一变成模块定位

  • 2.import推荐顺序先标准库,后第三方库

  • 3.QPrinter将在chap13里面讲

  • 4.以action的方式创建menu

    1. QAction

      QActionGroup

      用QMainWindow的m.menuBar().addMenu()来创建菜单

  • 5.m.addToolBar(s)创建工具栏

  • 6.用QSetting()保存应用程序的状态,保存在当前用户的目录下,~/.configs/...

  • 7.QInputDialog.getInteger()/.getDouble()/.getItem()/.getText()/

  • 8.使用pyrcc4编译对象,将.qrc资源文件统一成py模块,然后引用只要/xxx.png就可以了

  • 9.使用pyuic4从designer产生的.ui文件编译为.py模块


Programming Is Like Sex


because…




  • One mistake and you have to support it for the rest of your life. (Michael Sinz)

  • Once you get started, you’ll only stop because you’re exhausted.

  • It takes another experienced person to really appreciate what you’re doing.

  • Conversely, there’s some odd people who pride themselves on their lack of experience.

  • You can do it for money or for fun.

  • If you spend more time doing it than watching TV, people think you’re some kind of freak.

  • It’s not really an appropriate topic for dinner conversation.

  • There’s not enough taught about it in public school.

  • It doesn’t make any sense at all if you try to explain it in strictly clinical terms.

  • Some people are just naturally good.

  • But some people will never realize how bad they are, and you’re wasting your time trying to tell them.

  • There are a few weirdos with bizarre practices nobody really is
    comfortable with.

  • One little thing going wrong can ruin everything.

  • It’s a great way to spend a lunch break.

  • Everyone acts like they’re the first person to come up with a new technique.

  • Everyone who’s done it pokes fun at those who haven’t.

  • Beginners do a lot of clumsy fumbling about.

  • You’ll miss it if it’s been a while.

  • There’s always someone willing to write about the only right way to do things.

  • It doesn’t go so well when you’re drunk, but you’re more likely to do it.

  • Sometimes it’s fun to use expensive toys.

  • Other people just get in the way.

开源运动及Linux介绍

自由软件运动及Linux的发展




〇、GNU计划的兴起



0.RMS其人




Richard Stallman是自由软件运动的精神领袖、GNU计划及自由软件基金会FSF(Free Software Foundation)的创立者。他为自由软件运动竖立了道德、政治及法律框架,被许多人誉为当今自由软件的斗士、伟大的理想主义者。


他是上个世纪60年代MIT AI Lab黑客文化的产物,是这种文化最严守教义的苦心僧。


  

Richard Stallman说:“Linux并不能代表整个操作系统。Linux只是内核,整个系统还包含数以百计的软件工具和实用程序,这些工具和程序大多是由GNU们完成的。”而且他认为,整个操作系统称为GNU/Linux比较合适。


  

1983年,Richard Stallman在net.unix-wizards新闻组上公开发起GNU计划,宣布它的目标是创建一套完全自由的操作系统,并附带一份《GNU宣言》。在该宣言中,Stallman声称发起该计划的一个重要理由是要“重现当年软件界合作互助的团结精神”。 GNU是“GNU's Not UNIX”的递归缩写,Stallman宣布GNU应当发音为Guh-NOO,以避免与new这个单词混淆(注Gnu在英文中原意为非洲牛羚,发音与new相同)。


  

GNU工程采用了部分当时已经可自由使用的软件,例如TeX排版系统和X-Window视窗系统等。工程启动后,Stallman听到有一个自由大学编译器套件。他去信询问能否用入GNU,答复是嘲弄式的,说对大学是自由的,但软件本身不行。于是,他决定为GUN编写的第一个软件就是能跨平台的编译器。由于C语言是使用最多的开发语言,而且是UNIX的开发语言,所以,他决定首先写一个C的编译器,并命名为GCC。


  

1984年9月,Richard Stallman开始写GUN Emacs。到1985年初,GUN Emacs已经可以工作了,通过它可以用UNIX系统进行编辑。此时,人们开始想,使用Emacs,但如何传播它?因此,他将其放到了MIT的匿名服务器上。但那时互联网还未普及,人们很难通过FTP获得拷贝,而失业的Stallman也需要收入。于是,他宣布任何人都可以用150美元的价格获得程序。自由软件的分销商业模式就此诞生。目前已有几百种Emacs的副程序,可用在50多种电脑上,从微电脑到Cray的超级电脑都可用Emacs。


  

为防止不法厂商利用自由软件,使其专有化,Richard Stallman还别出心裁,与一群律师起草了广为使用的GNU通用公共协议证书(GNU General Public License, GNU GPL),创造了Copyleft的授权办法。所有的GNU程序遵循一种“Copyleft”原则,即可以拷贝、可以修改、可以出售,但有一条就是源代码所有的改进和修改必须向每个用户公开,所有用户都可以获得改动后的源码。它保证了自由软件传播的延续性。


  

GNU激励了许许多多年轻的软件开发者,一些商业公司也开始介入开发和技术支持。其中最著名的就是之后被Red Hat兼并的Cygnus Solutions,他们编写了除操作系统内核Hurd以外的大量自由软件。尽管GNU的计划是建立一个完整的自由软件世界,但是作为其根基的操作系统(Hurd)的开发进展却相对缓慢。Linux的出现恰逢其时,它使得GNU有了一个坚实的根基。


  

有人说,Richard Stallman是地球上编写代码最多的程序员。他编写了大量优秀的程序,如Emacs 、GCC和GDB (程序调试器)。目前,尽管他对GNU的设想还没有完全实现,但是这个软件系统已经有1000多个应用程序,而且GNU自己的内核Hurd也已经发布了Beta版本。此外,GNU在工作站和微机市场也颇有成就,许多UNIX工作站和微机厂家都把GNU纳入他们的操作系统。





1.自由软件与开源软件



Richard Stallman:自由软件和开源是两个不同运动的口号,他们的哲学是不同的。在自由软件运动中,我们的目标是自由地共享与协作。我们认为非自由软件是反社会的,这是因为它完全无视用户的自由,我们开发自由软件就是要摆脱这个禁锢。


而开放源代码运动推广的是一种开发模式,他们认为这种模式在技术上是先进的,并能产生技术上先进的结果。他们的价值观同微软的价值观是相同的:狭隘的实用价值。


自由软件和开源软件都是软件授权的准则。设立这些准则的方式有极大的差异,但可接受的授权却几乎一样。最主要的差别是哲学的差别。


为什么我一直强调哲学?因为不重视自己自由的人总会失去自由。如果你给他人自由却不教会他们重视自由,他们拥有自由就不会太久。所以光是散布自由软件是不够的,我们必须教会人们去要求自由,并为之战斗。然后我们也许可以解决今天在我看来无法解决的问题。





2.GNU/Hurd新内核





GNU Hurd 是 GNU 工程中取代 Unix 的核心。 Hurd 是一组运行在 Mach 微内核上的服务器, 用来实现 Unix 或其他核心(如 Linux)实现了的文件系统、网络协议、 及文件访问控制等其他功能。


目前,Hurd 运行在 IA32 系统上。未来 Hurd 应该, 而且可能会被移植到其他硬件系统或微内核上。


Hurd 不是一个已知的最先进的内核,但它有一些诱人的特点:


  • 它是自由软件

    1. 任何人在遵守 GNU General Public License (GPL) 的条件下,都可以使用、修改或重新发布它。

  • 它的兼容性

    1. Hurd 提供了一个熟悉的编程和用户环境。 对於所有的意图和目的来说,Hurd 都是一个现代的类 Unix 的内核。 Hurd 使用了 GNU C 库, 而此库的开发紧紧追踪 ANSI/ISO、BSD、POSIX、Single Unix、SVID 及 X/Open 等标准。

  • 可持续发展的构造

    1. 与其他流行的内核软件不同,Hurd 拥有面向对象的结构, 这就使得它不断发展而不用改变当前的设计。 这种结构将有助於完成 Hurd 主要的重设计和修改而不必完全重写代码。

  • 它的规模很大

    1. Hurd 实现了强有力的多线程, 以便它在单处理器和对称多处理器上都可以高效运行。 Hurd 的接口设计成允许透明网络组的共有,但这个特性尚未实现。

  • 它是可扩展的

    1. 对於学习怎样成为一个内核黑客或者在内核技术中实现新想法来说, Hurd 是一个有吸引力的平台。 系统的每一个部分都设计成可修改和扩展的。

  • 它是稳定的

    1. 在开发和测试新的 Hurd 内核组件时, 可能不需重新启动机器(即使是意外的)。 运行自己的内核组件不会妨碍其他用户, 而且这并不需要特殊的系统权限。由於这种设计, 扩展内核的程序是安全的:除非他们认可这种改动或者你是系统管理员, 否则你的修改不可能影响到其他用户。

  • 它已经存在

    1. Hurd 是正在工作中的真实的软件。不是一个研究项目或提案。 你可以开始使用并开发它,而根本不必等待。




Debian GNU/Hurd 是GNU操作系统的Debian发行版(GNU Hurd作为内核).


Debian GNU/Hurd已开发了数年,但仍未正式发布。Debian GNU/Linux大约半数的软件包已经移植到GNU Hurd。 尽管如此,Hurd本身仍处在开发中,还未达到生产系统的要求。大部分Debian用户倾向使用Debian GNU/Linux,而不是Debian GNU/Hurd.
Debian GNU/Hurd的当前版本是K16(发布于2007年12月21日),可在x86与x86-64 PC上运行。
Debian GNU/Hurd 可以通过一个Live CD体验。






一、Linux的发布与发展



0.Linus vs Tanenbaum 唇舌大战



  • a.微内核与宏内核

    1. 当时的学院派力顶微内核,但是微内核还不太成熟,并且还没有真正成功的实践产物。微内核可以将内存管理,文件系统,进程管理等分离出基本内核之外,基本内核只关心中断处理,指令执行,底层进程管理和外面进程的消息通信。宏内核是传统的体系结构,整个系统运行在一个内核模式下,负责所有OS的工作。由于没有了消息处理的负载因此宏内核性能相对较高。但是微内核因为内核的精简而更具有可移植性。


      论战之内核模式:


      Tanenbaum老先生直接下定结论:微内核更好,并暗讽Linux是一种退步,因为她是使用的学院派认为会被淘汰的宏内核模式。老先生在第一轮论战中承认了微内核在性能上的劣势,但是仍然坚持微内核也可以达到宏内核的性能。


      Linus肯定了微内核在美学上更加优雅,但是他写Linux的时候Gnu内核还没有,所以他不可能使用微内核,但是Minix并没有完美的实现微内核,存在很多缺陷,比如多线程Hack,没有多线程Fs以及资源竞争等。


      Tanenbaum指出缺陷存在的原因是因为Minix的用户没有能力承受昂贵的硬件。同时认为性能受限的机器上只有一个job被激活,多线程FS不会有实际意义,反而会增加代码复杂性;高性能机器,可能有足够大的缓冲区来保证缓存命中率,在这种情况下多线程也没有意义。因此多线程FS只有面对磁盘I/O才会变得有意义。Tanenbaum根本否定了多线程FS。


      Linus认为OS可用性是很重要的。如果没有多线程,用户需要很昂贵的机器。否则就会经常处于等待状态。并且编程人员也会处理消息处理队列等复杂的事务。OS不能光说不练,理论模型只是教授们的玩具。


  • b.可移植性

    1. 有系统在未开始之前,脑海中首先就要考虑移植性的问题。这是一个业已被证明的软件工程真理。可移植性使得系统面对硬件的改变可以轻松的被重用。既可以减少移植的开销,也可以减少重新开发或者大量更改系统过多Bug的引入。Linux设计的时候是针对80386的,因此可移植性逊于Minix。Minix的初衷是作为一款教学产品,因此其设计堪称优美,甚至接近完美。由于使用微内核体系结构,所以其可移植性较好。并且已经被实践证明。


      论战之可移植性:


      Tanenbaum强调OS的可移植性的重要性,因为任何硬件体系结构都不会永远存在。如果软件可移植性差,面对改变的硬件架构将需要很多改变来使用已存的软件。他肯定了Minix是可移植的,并且非常容易。他认为Linux是针对80x86设计的,是与其绑定在一起的,因此是一个设计错误。


      Linux激进的认为"Portability is for people who cannot write new programs",同时也提到因为Linux的内核极小,且是开源的,在统一接口的情况下,任何人可以改变它,这就给linux带来了很好的可移植性。





1.Linux的优点



  • a.免费

    1. 由於 Linux 是基於 GPL 的基礎下的產物,因此任何人皆可以自由取得 Linux ,至於一些『安裝套件』的發行者,他們發行的安裝光碟也僅需要些許費用即可獲得。即便是最昂貴的企業級版本 Linux ,其售價與授權人數約相等於同樣授權與人數的 Windows 版本的三分之一到二分之一。

      首先,Windows 98系列操作系统,一个就是100 多美元,每次升级又是几乎同样的价钱。 Windows NT 还要贵几倍,而且有用户数目限制,5个用户的,10个用户的…… 以后如果要增加用户数目还要按比例付钱。这个奇怪的现象被通用汽 车公司的总裁比喻为:“你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱,每开100英里要大修一次,每过一年要换一次引擎。”

      花了如此多钱买来的操作系统就能用了吗?它竟然连压缩程序都没有提供!你装上Windows 之后一般第一件事就是去下载一 个 WinZip 吧,“只要 29 美元”。Windows 会中病毒啊,马上花 70 美元买一个 Norton AntiVirus 吧。还有黑客 呢?再买一个 Norton Internet Security 好了,100 美元。系统需要优化,磁盘需要整理,买一 个 Norton System Works 是你最佳的解决方案,100美元。

      可是你现在还是不能干正事啊!你想要一个 Word, PowerPoint?那就买一套Office XP 吧,一起买便宜些,$459.90。

      那些程序不会用啊!那些菜单怎么设置,到底有什么功能啊?看“帮助”也学不会。买本书看看吧,我推荐 “Special Edition Using Microsoft Office XP”,不贵,$27.99。这本书里面大部分是屏幕抓图,还是买一 本旧的比较划算,$17.85。

      你如果只是当个秘书,上面的差不多还凑合了。可是你有更高的追求,你想成为Windows 程序员。首先买一个 Visual Studio.NET 吧,要不然怎么编译程序。$494.95。

      为了紧跟微软动向,世界潮流,不能不注册个 MSDN 什么的吧?这个贵一点,不过物有所值啊,$2,799。

  • b.安全

    1. 曾有人戏称“linux中毒的概率跟被雷劈的概率差不多”。

      Unix至少设立了三层内部边界来防范恶意用户或有缺陷的程序。一层是内存管 理:Unix用硬件自身的内存管理单元(MMU)来保证各自的进程不会侵入到其它进程的内存地址空间。第二层是为多用户设置的真正权限组——普通用户(非 root用户)的进程未经允许,就不能更改或者读取其他用户的文件。第三层是把涉及关键安全性的功能限制在尽可能小的可信代码块上。在Unix中,即使是 shell(系统命令解释器)也不是什么特权程序。

      Linux 由於支援者日眾,有相當多的熱心團體、個人參與其中的開發, 因此可以隨時獲得最新的安全資訊,並給予隨時的更新,亦即是具有相對的較安全。 Linux 所有的程式碼均公開可供任何人查閱,因此所有的設計理念與機制均可檢視,沒有後門程式的問題。 Windows 即採封閉式系統,即程式碼非公開。

  • c.稳定

    1. Linux 是基於 Unix 概念而發展出來的作業系統,因此, Linux 具有與 Unix 系統相似的的程式介面跟操作方式,當然也繼承了 Unix 穩定並且有效率的特點。常聽到安裝 Linux 的主機連續運做一年以上而不曾當機、不必關機是稀鬆平常的事。

      为什么Linux不需要硬盘整理:

      这段linux官方资料主要介绍了外部碎片(external fragmentation)、内部碎片(internal fragmentation)的概念及相关情况,说明了linux文件系统在磁盘还有5%空闲空间的情况下是不需要碎片整理的。(Linux native file systems do not need defragmentation under normal use and this includes any condition with at least 5% of free space on a disk.)。而在实际使用中,磁盘在还有8%左右未使用时就会有警告产生,所以碎片整理是不用考虑的。


  • d.灵活

    1. 大多数编程问题实际上都可以分成两部分:“需要提供什么功能”(机制)和“如何使用这些功能”(策略)。XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget,tin, ... 没有一个不是用配置文件来设置选项的。都有非常灵活的定制。

  • e.永恒

    1. 惟一一类从嵌入式芯片,手持设备到桌面机,从服务器到专门用于数值计算的怪兽型计算机数据库后端都挪腾有余的操作系统

      NT是逐步堆积而成的,缺乏对应于Unix“一切皆文件”或MacOS桌面的统一性理念。由于它的核心技术没有扎根于一小群稳固的中枢观念中,[14]因此每过几年就会过时。每一代技术——DOS(1981),Windows 3.1(1992),Windows 95(1995),Windows NT 4(1996),Windows 2000(2000),Windows XP(2002)和 Windows Server 2003(2003)——随着旧方式被宣告过时而不再有良好支持,开发者必须以不同的方式从头学起。



      下面是其它一些后果:



      GUI功能与继承自DOS和VMS的残留命令行界面不能稳定共存。



      套接字编程没有类似Unix那种“一切皆是文件句柄”的统一数据对象,因此在Unix中很简单的多道程序设计和网络应用到NT下则要牵涉更多基础性概念。



      NT的一些文件系统类型也有文件属性,但仅限用于为实现某些文件系统的访问控制列表,因此对开发风格不会产生太大影响。NT也有文本和二进制这两种记录类型区别,时不时地讨人嫌(NT和OS/2都从DOS那里继承了这个不良特性)。



      尽管支持抢先式多任务处理,但进程生成却很昂贵——虽然比不上VMS,但是(平均生成一个进程需要0.1秒左右)要比现在的Unix高出一个数量级。脚本功能薄弱,操作系统广泛使用二进制文件格式。除了此前我们总结过的,还有这些后果:



      大多数程序都不能用脚本调用。程序间依赖复杂脆弱的远程过程调用(RPC)来通信,这是滋生bug的温床。





2.Linux主要发行版及特点



  • Ubuntu

    1. 近年最受欢迎Linux,桌面市场占25%。气颇高的论坛提供优秀的资源和技术支持,固定的版本更新周期和技术支持。

  • openSUSE

    1. 最华丽的Linux版本。

  • Debian

    1. 最严谨的发行版。遵循GNU规范,100%免费,优秀的网络和社区资源,强大的apt-get。

  • Fedora

    1. 最激进的发行版。拥有数量庞大的用户,优秀的社区技术支持,许多创新。

  • Gentoo

    1. 最完美的Linux,疯子、变态、狂人的Linux。Gentoo的出名是因为其高度的自定制性。




3.国内外Linux发展情况



  • 詹姆斯·西姆斯(James Sims)是总部设在加州莫德斯托、年收入达数十亿美元的食品售企业Save Mart的IT副总裁兼首席信息官。西姆斯把该公司IT基础架构上的专有软件统统换成开源技术,部署了SuSE Linux操作系统和Ingres开源数据库,还部署了Hobbit开源监测工具,用于监测Save Mart的服务器、应用软件和网络运行状况。他还与Novell、红帽和Ingres等厂商建立联盟,支持使用开源软件。


      

    据西姆斯声称,开源软件不但与专有软件一样好用,在许多情况下,甚至比专有软件还好用。他表示,自从用开源解决方案取代甲骨文、微软和惠普的专有软件后,每年为公司节省50%以上的IT成本。




  • 美国Computer World网站今天撰文称,白宫网站已经完全采用了开源平台,就连一直固守专有软件的美国国防部也开始对开源软件敞开了大门.对开源的支持也使奥巴马被外界冠以“开源总统”之称.


    奥巴马及其团队今年2月便开始使用颇受欢迎的CMS(内容管理系统)Drupal以及 Linux来运营网站.首个采用Drupal的美国联邦政府网站是Recovery.com,该网站专门用来追踪《复苏法案》(Recovery Act)的开支.


    不过,除了Drupal用户以外,很少有人注意到这种转变.但现在,奥巴马及其团队也将白宫自己的网站转移到Linux 和Drupal平台.但这种转变并非出于外观考虑,白宫网站的页面布局并没有任何变化,其真正原因在于安全性,这也是多数用户使用Linux和开源软件的 初衷.


    虽然无法获知转换过程,但网络安全厂商NetCraft的资料显示,白宫网站已经完全采用了LAMP(Linux、Apache、MySQL和PHP)架构,并搭配Drupal.而网站基础设施的搭建工作则由美国著名的政府IT承包商GDIT负责.



  • 2009年12月8日,北京—— 今日,Novell 宣布国家气象局经过几个月的测试和评选,已从Novell公司购买近千套SUSE Linux Enterprise Server和2000多套SUSE Linux Enterprise Desktop,在全国气象灾害预警项目中使用,以实现更快速、更准确的应急减灾,这也是Linux桌面产品首次在中国大规模应用于关键企业。


    Novell 的SUSE Linux Enterprise 解决方案在各行各业的成功应用证明了它的成熟性和可靠性,这也是国家气象局最终选择Novell产品的原因之一。Novell 的产品大大提高了国家气象灾害预警系统的灵活性和应变能力,不仅提高效率和安全、优化管理,而且兼容性好,降低运营和管理成本,减少停机故障,减轻系统维护和预定管理的工作负担,大大满足了国家气象局的需求。同时,该产品还能高效的处理大量的气象数据,确保数据的可靠性、完整性、高性能性以及安全性,提高了气象部门的天气监测、预报和服务能力。



  • 江苏省政府将出资3.5亿元采购由龙芯梦兰公司出品的15万台龙芯电脑,主要用于该省农村5000所中小学多媒体教学。江苏15万台订单共3.5亿元,即每台电脑大约2300多元。目前龙芯只支持GNU/Linux操作系统,故这些电脑运行的肯定是GNU/Linux操作系统。



  • 加利福尼亚州州长阿诺·德施瓦辛格最近宣布了一系列预算削减案,但政策文件显示,这一方案却给开源发展创造了一个良好机会。开源软件已经被加州政府认为是一个可接受的节省开支的做法。



  • 法国人Fabrice Bellard最近使用一台普通的台式电脑,完成了冲击由超级计算机保持的圆周率运算记录的壮举,他使用台式机将圆周率计算到了小数点后2.7万亿位,超过了由目前排名世界第47位的T2K Open超级计算机于去年8月份创造的小数点后2.5万亿位的记录。
    Bellard使用的电脑是一台基于2.93GHz Core i7处理器的电脑,这部电脑的内存容量是6GB,硬盘则使用的是五块RAID-0配置的1.5TB容量的希捷7200.11,系统运行64位 Fedora 10操作系统,文件系统则使用Linux的ext4.


  •  Linux在电影业中的应用,早就已经不再是什么新闻。在《星球大战2》中,使用Linux的工作站造就了鲜活逼真的Yoda。而在《指环王2》中,拍摄兽人对要塞猛烈进攻的场面时,并没有使用成千上万的真人演员,而是使用 Linux创建的数字演员。在很多人眼里,Linux的影响力还无法与Windows和Macintosh相比,但在好莱坞的电影工作室中,Linux的地位却是Windows和Macintosh所无法匹敌的。到现在为止,使用Linux制作的好莱坞大片已经超过30,其中包括了《指环王》、《星球大战 2》、《哈利波特》、《史瑞克》和《泰坦尼克》《阿凡达》等耳熟能详的经典大片。

  • 古巴弃用微软Windows
    继政府部门之后,古巴的国营企业也开始将电脑中的美国微软公司的视窗操作系统更换为本土版Linux操作系统,并称此举是为了防止美国通过视窗操作系统危害古巴利益。


  • 挪威 
    挪威第二大城市卑尔根大规模迁移到Linux的计划已经进行到一半。已经将许多市政管理和教育服务器迁移到Linux上,并且正在将全市100所学校迁移到开 源桌面上。在该计划完成之后,打算将市政管理的所有桌面迁移到开源操作系统上。 挪威超过100所学校使用Skolelinux,这是Linux为学校定制的版本。挪威现代化部长Morten Andreas Meyer在Oslo的一次新闻发布会上说,“专利格式将不再适用于公民和政府间的通信,”。 


  • 巴西:
    巴西州政府中有许多大规模的迁移,例如,Parana州正在将10000政府员工从专利软件迁移到定制版的开源协作应用软件eGroupWare上,而且S?o Paulo在 全州的学校中配置了16000台PC和1000台服务器的Linux,根据Mandriva的说法。一些州政府机构也迁移到开源软件上,据报告说22个联邦部门中的七个在 使用开源。这包括许多开源桌面配置,例如,联邦政府中有4000台主机使用OpenOffice.org,根据Sun的产品行销经理Erwin Tenhumberg的说法。 巴西联邦政府已经起草法案要求公共部门使用开源软件。这项法令促使政府部门迁移到开源软件,除非他们可以证明继续使用专利软件是合理的。 “自由软件为熟练 程序员建立了一个社区,不久后成为国家总体科技发展的重要阵地。所以‘教育’的益处也是促使巴西政府采用自由和开源软件的重要因素。” 


  • 法国:
    2009年1月份,法国准军事警察部队表示,将逐步放弃使用微软Windows操作系统,而转向使用Linux操作系统。自2005年以来,法国国家宪兵部门已先后放弃使用微软Office办公套件和IE浏览器,转而使用OpenOffice和Firefox(火狐)浏览器等开源产品。 法国国家宪兵总队日前称,他们通过部署Ubuntu来代替微软的Windows,已经节约了数百万欧元。法国警方从2005年开始就向开源软件过渡,当时他们采用OpenOffice取代微软的Ofiice。之后逐渐采用其他开源软件,包括Firefox和Thunderbird。 在2006年微软发布Windows Vista之后,他们开始逐步淘汰Windows系统,采用Ubuntu系统。在近期的部署中,他们已经在5000个工作站中部署了Ubuntu。他们还计划在年底之前对1.5万个工作站部署Ubuntu。他们预计在2015年之前,对整个警察系统的9万个工作站全部部署Ubuntu。 


  • 德国 :
    德国外交部将它的11000台电脑全部换成GNU/Linux和其它开源软件。这一举措将使外交部相比其它部门大幅度的减少维护费用。


  • 俄罗斯:俄罗斯于2007年在全部学校使用基于Linux的Russian OS,大力推广开源软件。俄罗斯各地纷纷具办举办各种学习班、培训班学习Linux。现在这一部署已经实施一年,到今年9月,已有1,092所实验区学校部署完毕,其他非实验区的200多所学校也即将上马。 俄罗斯政府下大力气,投入大量资金在学校部署开源操作系统的用意很明显。当这一代人走出校门后,无论在家里还是在工作时,他们都会选用他们最熟悉的Linux开源软件。


  • 美国 :
    美国纽约州立法机构修改美国税法,对开源软件开发者进行个人所得税补贴(减免20%),最高补贴限额为200美元(每年). 





二、Windows七宗罪



  • 毒害教育:微软通过游说腐化教育部门,让儿童使用的计算机采用Windows操作系统,而真正的教育用计算机应该使用自由软件和开放操作系统。

  •   
  • 侵犯隐私:微软使用Windows Genuine Advantage去检查用户硬盘上的内容。

  •   
  • 垄断:大多数品牌机预装的系统都是Windows,用户别无选择。

  •   
  • 封锁:微软通过不支持旧操作系统和旧文件格式强迫用户升级新版Windows和新i版Office。

  •   
  • 滥用标准:微软试图封杀自由文件格式ODF,因为这项格式不是微软提出的,它将威胁到微软的垄断。

  •   
  • DRM:微软在Windows Media Player中限制拷贝某些媒体内容,从而保证某些大公司的利益。

  •   
  • 威胁用户安全:Windows长期以来存在大量的安全漏洞,导致病毒蔓延,让攻击者把受害者的电脑变成僵尸网络中的一部分。用户只能依赖微软去解决安全问题,而微软基于自己的目的考虑,并不以用户需求为基准。




三、Linux书籍汇总



  • 0 unix/linux哲学思想 > > > 《UNIX编程艺术》

  • 1 熟悉linux基本环境 > > > 《鸟哥的私访菜》《unix初级教程》 《linux in a nutshell》(市面上无,图书馆有), 等等。

  • 2 熟悉操作系统的基础知识 > > > 《现代操作系统》 《操作系统概念》

  • 3 熟悉系统编程 > > > 《unix环境高级编程 第二版》《unix操作系统设计与实现》

  • 4 内核 按先后顺序: > > > 《 linux内核设计与实现》 《linux设备驱动程序》 《深入理解 linux内核》 《linux内核源代码情景分析》 《深入理解linux虚拟内存系统》

  • 5 其他一些书籍: > > > 《freebsd操作系统设计与实现》 《solaris内核结构》 《unix高级教程:系统技术内幕》 《现代体系结构的unix系统:内核程序员的smp与cache技术》 《保护方式下的80386及其编程》 (后3本市面上没了,大学图书馆里一般都有》 《Intel64 and IA-32 Arichitectures Software Developer's Manual》

  • 6 其实内核玩深了,体系和编译也要学好 > > > 《计算机体系结构:量化研究方法》 《编译原理》(龙书)



2010年2月21日星期日

gentoo再次把我弄郁闷了

嗨~第二次装gentoo还是失败了,gentoo真的比较郁闷啊。上一次弄一个礼拜每天只睡3-4小时,一天就吃了一顿饭,还折腾便秘了~这回又是腰酸背疼,窝了一肚子的火,相当不爽~
上一次是在虚拟机下折腾的,虚拟机的显卡用vbox-video-driver和vesa驱动都不能顺利启动Xwindows,对着个log文件到现在也没找到原因。
这回gentoo的livecd也是个相当有问题的东东,pata_qdi,wd3000,raid456这几个模块这里直接就傻掉了,虚拟机下到是好用的,我的两台电脑都不行。还是用"system rescue os"做母系统装的。
自己分区,自己建文件系统,自己挂载,自己下内核配置编译,自己配置grub~一路狂费时间的弄~
好不容易装好了,发现这回主板是捡来的,果然不是什么好东西~不知道是主板电池没电了,还是别的,反正时间没法设置,ext4这样的日志文件系统不停报时间错误,就挂都挂不上去了~比上次还不如~
做穷人正是痛苦~下次有台正常一点的电脑直接弄LFS了。
时间设置以前没注意,对于日志文件系统还真是比较重要,开始没设置时间也是直接报no space left,跟handbook上说的一样出现相当奇妙的错误~
gentoo really sucks!!!

还是有空先玩玩fvwm吧。

顺便说句,我的文章怎么越来越像小学生作文了~

2010年1月25日星期一

In memory of last email from my mentor

Thank you. It was very nice being your mentor. If you ever happen to
come to the US, you are also free to visit me. I live in the Southwest
NM, which I find very beautiful (although it is a desert -- which some
people don't like).

I think you have a tremendous amount of potential to do amazing things
in Computer Science. Here are my top 5 things to remember for success
in life:

-- You are capable of far more then you realize.

-- Everyone has something to teach you. Listen to all those around you,
but make your own judgments on if they are right or not.

-- Challenge yourself. If you are having an easy semester, you haven't
signed up for the right classes

-- Don't be afraid to fail spectacularly. One of the reasons why I
think all students should write a kernel module is because a
poorly-behaved kernel module can take your whole system down, destroy
data, etc....but once that has happened a couple of times, you are no
longer intimidated by the prospect of failure, and you can start really
learning.

-- Have fun. Get outside. Exercise. Enjoy nature. Life shouldn't be
all computer science. Pick at least one hobby that has nothing to do
with computers and go out and do it at least once a week.

Feel free to email me anytime. Just because I am no longer officially
your mentor does not mean we cannot communicate :)

Sonja Tideman

双启动Linux&XP时间不对等

RH系列的修改/etc/sysconfig/clock即可。将里面的UTC=true改为UTC=false。似乎环境都是自动对时的。那么重启机器,稍微耐心点即可。

2010年1月22日星期五

Fedora-Tor 安装指南

万里长城万里空,有Tor穿墙不是梦~

fedora上基本步骤是:
yum -y install tor privoxy

然后配置privoxy
gedit /etc/privoxy/config

复制粘帖下面那段配置:


# Tor listens as a SOCKS4a proxy here:
forward-socks4a / 127.0.0.1:9050 . #.不要漏掉
confdir /etc/privoxy
logdir /var/log/privoxy

logfile logfile

#actionsfile standard # Internal purpose, recommended 在3.0.3-beta里面没了
actionsfile default # Main actions file 这里的default.action要看文件啊
actionsfile user # User customizations
filterfile default.filter

# Don't log interesting things, only startup messages, warnings and
errors
#logfile logfile
#jarfile jarfile
#debug 0 # show each GET/POST/CONNECT request
debug 4096 # Startup banner and warnings
debug 8192 # Errors - *we highly recommended enabling this*

user-manual /usr/share/doc/privoxy/user-manual
listen-address 127.0.0.1:8118
toggle 1
enable-remote-toggle 0
enable-edit-actions 0
enable-remote-http-toggle 0
buffer-limit 4096


然后装vidalia

yum -y install vidalia vidalia-doc

然后装火狐torbutton插件

装完配置完成以后要给bridges@torproject.org发一封邮件

>

> 邮件可以不需要标题,邮件的内容为get bridges

>
收到以后把给你的网桥按说明添加上去~

>

>填在settings -> network -> My ISP blocks the connections to the Tor netowork

>
把火狐那个torbutton激活就可以了~

>

>同学向我反应torbutton发生.js错误,那么其实一点关系都没有。

>按一下操作一样可以使用:

>preferences -> general -> network -> settings

>选择手动配置代理:在 http&ssl&socks的地方填127.0.0.1;端口前两个是8118端口,后面

>一个是9050端口。socks选v4 | v5的没关系的。

>

>windows用的软件也是这几个,但偶没有windows,大家自己试试吧~好像有一个套件的

>Vidalia Bundle已经3合一套装了~

>Have fun!

>

2010年1月18日星期一

秒杀vim



完全用GNU/Linux工作

完全用GNU/Linux工作
清华大学 王珢

# 理解 GNU/Linux


"UNIX 是简单的,你不需要成为天才也能理解这种简单"

由于GNU/Linux这个词太长,下面如果没有特别指明,“Linux”就是指“GNU/Linux”。

在这个年代,恐怕没有人需要我来介绍 Linux 是什么了吧?如果你觉得“Linux只不过是跟 DOS 差不多的东西”,那你恐怕很久在山洞里没见天日了吧?请问问你旁边的 Linux 用户,Linux 到底是个什么地位?

那为什么我还要写一篇这样的文章?因为,我发现还有很多人不不理解 Linux 和UNIX,虽然他们也在用它,但是他们有时会问:“为什 么 Linux 不能像 Windows那样 ……?”,“怎么Redhat Linux不能 mount NTFS 分区!”,“Linux 下用什么整理硬盘?”,“什么时候OpenOffice才能完全兼容Word文件啊?”,“现在还有什么Windows能干的事情Linux干不了的?”……

他们有40G的硬盘,却只为 Linux 分配了2G空间,有时还抱怨“这个东西怎么占这么多硬盘!” 似乎 Windows 该占用大部分硬盘。他们把重要的数据装在Windows的分区,似乎信不过Linux。他们总是到处寻找新奇的,好看的GUI程序,对命令行的东西一概不屑一顾。他们对 Drag&Drop,菜单配置,自动升级非常感兴趣。他们如果找到一个很像 Windows 程序的 Linux 程序,一定会很高兴的说:“哈 哈!Linux 也能……了!” 如果Linux在某种测试中胜过Windows,他们会高兴得跳起来。他们没有办法用Linux解决问题的时候,甚至用 Wine来运行Windows程序。有时实在没办法,只好重起到 Windows,或者干脆省得麻烦,在 Windows 下装一个VMWare 虚拟一 个 Linux 玩。

你支持 Linux,你喜欢 Linux,你能从中感觉到快乐,这非常好。你现在只需要明白的是:Linux 从来就不是一个玩具,它是天才 UNIX的后代。UNIX 是自晶体管发明以来最伟大的发明,它从诞生那一天开始就比 Windows 的设计出色。Linux 并不需要追 赶 Windows,不需要打垮微软,它的最终目标是改变整个计算机世界,还人们自由,给人们乐趣和方便。其它UNIX很多都已经败在Linux脚下,更何况Windows!

你如果出现了以上的情况,说明你的思想受到了 Windows 的某种潜移默化的影响和误导。你没有能够从本质上理解存在于 Linux 身上 的 UNIX 思想。UNIX的设计 者 Dennis Ritchie 说:“Unix is simple. It just takes a genius tounderstand its simplicity.” 但 是我不这么认为,因为我不是一个天才,但是我却勇敢的把Windows完全删除掉,半年之后我体会到了 UNIX 的思想和好处。因为我相信这样的信 念:“Windows 能办到的事 Linux 一定能办到,而且办的更好。”

这小节开头的话应该改成:“Unix 是简单的,但是在这个冲斥着 Windows 错误观念的世界,你需要信念和勇气才能理解它的简单!” 我下面就告诉你一些我理解到的东西。

# 微软的地位


微软的名声在欧洲和美国的大学里,特别是在计算机系里之坏,大家可能有所耳闻。我认识的 MIT,Stanford 的教授,贝尔实验室的专家,甚至一个欧洲小国的高中计算机老师都绝口不提微软的名字。在他们眼里,微软只是一个没有真技术,专靠在落后国家商业宣传和垄断经营的小公司。这个“小”并不是说它人少,钱少,而是说它先进技术少。

我上次和王益合作写了一个算法演示程序,那个算法是贝尔实验室一位科学家Steven Fortune很天才的发明,为了程序能够被身边大多数人使用,我们选择了VC+MFC 作为平台。我在分析算法时还得到 Fortune 很热情的鼓励,寄给我一份资料,还多次回信耐心的给我讲解了很多细节。但是程序完成之后,我把样品发给Fortune,他回信说:“对不起。我机器上没有 MFC。” 话说的很客气,但是我已经感觉到了他 对 Windows 的不屑。然后我把 MFC 静态编译进程序再发给他,他就没有再回信了。他显然不是瞧不起我,而是确实有难处。

你能感觉到这位科学家对微软和 Windows 是什么态度了吧?不是反感,而是他心里根本没有 Windows 这个东西!微软在高科技领域没有发展,那么它怎么生存呢?到发展中国家去发展一下,他们的人民还对电脑一无所知,我说不定甚至可以打入大学的计算机系呢。我送他们软件,我捐钱盖大楼,我找图灵奖获得者来演讲!

好了,现在全国的大学包括清华,几乎所有人机器必装盗版 Win2000, Office XP,学校的选课系统是非IE不能正确浏览,论文 用 Word 编辑,演示用ppt做,连863 项目都用 VC 写程序了。我很久以前就看到一份报纸说,“微软为什么不严厉打击盗版?” 这篇文章说,微软非但不打击中国的盗版行为,而且有放任之趋势。放长线吊大鱼,“以后我要你们加倍的来还我!” 确实如此,它的目的快实现了。

# Windows 笼罩下的中国计算机教育


说句丢脸的话,比尔盖茨很久以前是我的偶像…… //blush

在中国,比尔盖茨被很多人奉为神圣,“少年电脑天才”,甚至有的人提到他的名字就做出“抱拳对天”的姿势。很多人谈到微软的“新技术”,“高科 技” 都是眉飞色舞。各种“VC编程圣经”,“深入了解 Visual C++”之类的书,在开头几页都会出现非常肉麻的字眼,“在那团团的混沌中,一个开天辟地的精灵,Windows 1.0,诞生了……”

微软的软件被这么多人盗用,那么人们是怎样使用这些盗版程序的呢?先看看电脑培训班,教的都是一些 DOS 命令,打字,Windows 基本操作,Word 文档处理,PowerPoint,高级班可能有 Excel,Access…… 参加各种微软认证考试,MCSE,MSDE 的人络绎不绝,考试辅导班都贴出了“280元。考过为止”之类的字样,考试参考资料更是昂贵,有些电脑书店整整两书架都是“Microsoft Press”的东西。我有个同学参加认证考试,每门考试都要200多元,而且你一次考不过再考,又要交钱。他后来还津津乐道跟我说,看我,花了XXXX(一个四位数)元考过了微软认证,得到一张比尔盖茨亲笔签名的证书和价值6000元的 Windows XP 内部发行版。

“电脑要从娃娃抓起”,我们再来看看娃娃们学的是什么。大部分家长给孩子买了电脑之后,他们首先就会装一个盗版的 Windows,然后买来盗版的游戏开始玩。如果哪个孩子会用 Delphi 编程序,那可不得了。报社记者,电视台争相报导,说,某某学校的初中生某某,在别人都还在玩电脑游戏这种 “初级阶段”的时候就已经用 Delphi 写程序了。镜头还瞄准了他显示器上面的像框中的比尔盖茨头像!

我刚进入大学计算机系时还不懂得什么是操作系统,因为我以前只用过“中华学习机”。看到新入学的同学们各个谈论的都 是 “Windows 95”,“VC”…… 我简直觉得我落后了好几十年一样,整个一土人,根本跟他们答不上话。好不容易找到一个比较熟的同学问了一下:“你们天天谈论的瘟95是什么啊?”答:“win95就是一个操作系统,跟DOS是一类。”“朵死是什么?” “你连DOS都不知道是什么?别在计算 机系混了。” 学校上课当然不讲VC编程之类的东西,但是上 Pascal 的老师有一次就说:“嗨,我们学校真是落后。现在别人都用 C, C++,甚 至 VC 了,我们还在讲 Pascal。不知道什么时候才能有VC课啊。你们出去也是要用VC的,只好自学了。” 有些同学很多时候上课都捧着一本很重 的“Windows 编程大全”之类的书,根本没有听课,吃饭时就念念有词的跟我说,“代码的优化是无止境的”,“匈牙利命名法真是伟大的发 明” …… 这就是中国很多大学计算机系的情况。

感觉到无知了?这不是偶然的,而是微软长久以来的如意算盘。它要让无知的大家都把它奉为神圣,它要让支持UNIX, Xwindow的人一旦 说 UNIX 好,Xwindow 好的时候,都被一群人围着说教:“这个 Windows 也能做到”,“你对 Windows 有偏见”,“微软才是主流啊”,“你敢瞧不起 win2k?”,“.NET 就是世界潮流”,“微软的毕竟是新技术”,“有钱就是有技术”…… 甚至在一番论战比较后败下来还 是要说:“Windows 性能差点,但是易用性强”,“Windows 是老百姓用的,要求别那么高”,“微软那么有钱,以后想超过 UNIX 还不容 易吗?”……

# 发达国家的计算机教育


我前段时间在 USENET 发文问有关 Scheme 语言的问题时,认识了一位丹麦人。他解决了我所有的问题,并且建议我阅读一些很“深奥” 的有关程序语言语法,文法的书,他告诉我很多网站可以学习 LISP,Scheme,人工智能,算法。他叫我看Jonathan Rees 的论文。他还 打包给我寄过来一份 MIT 的 "How to DesignPrograms"。他说他在自己的 PC 机上装的是 Linux,他用 Emacs 编辑,运行Scheme 程序。他对 Emacs 的了解和爱好真是使人惊讶。他大学本科毕业时做的毕业设计是一个 Scheme 解释 器。这对于我来说是望尘莫及了。

他是那么的不厌其烦,我的每一个问题他都详细的回答。我有时都觉得过于详细了,怎么这么耐心啊?我觉得他似乎是我的高中老师。他是什么样的人呢?我好奇的打听了他的情况。原来,她是丹麦一所普通高中的计算机老师!注意我换了人称代词!

她说她在高中里讲授程序设计和算法,计算机语言文法分析。她说用 Scheme,她的学生不用再为指针越界,内存泄漏等程序语言本身的问题而烦恼,而专注于问题和算法本身。有利于培养学生解决问题的能力,特别是用计算机解决数学问题的能力。

天哪!为什么欧洲出现那么多数学家,几何学家?你看看别人重视的是什么!我们的计算机教育如果继续这样下去,只会沿着弯路越走越远!

# 微软和它的朋友们的如意算盘


下面来看看微软的收入是怎么来的。首先,Windows 98系列操作系统,一个就是100 多美元,每次升级又是几乎同样的价钱。 Windows NT 还要贵几倍,而且有用户数目限制,5个用户的,10个用户的…… 以后如果要增加用户数目还要按比例付钱。这个奇怪的现象被通用汽车公司的总裁比喻为:“你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱,每开100英里要大修一次,每过一年要换一次引擎。”

花了如此多钱买来的操作系统就能用了吗?它竟然连压缩程序都没有提供!你装上Windows 之后一般第一件事就是去下载一 个 WinZip 吧,“只要 29 美元”。Windows 会中病毒啊,马上花 70 美元买一个 Norton AntiVirus 吧。还有黑客 呢?再买一个 Norton Internet Security 好了,100 美元。系统需要优化,磁盘需要整理,买一 个 Norton System Works 是你最佳的解决方案,100美元。

可是你现在还是不能干正事啊!你想要一个 Word, PowerPoint?那就买一套Office XP 吧,一起买便宜些,$459.90。

那些程序不会用啊!那些菜单怎么设置,到底有什么功能啊?看“帮助”也学不会。买本书看看吧,我推荐 “Special Edition Using Microsoft Office XP”,不贵,$27.99。这本书里面大部分是屏幕抓图,还是买一 本旧的比较划算,$17.85。

你如果只是当个秘书,上面的差不多还凑合了。可是你有更高的追求,你想成为Windows 程序员。首先买一个 Visual Studio.NET 吧,要不然怎么编译程序。$494.95。

为了紧跟微软动向,世界潮流,不能不注册个 MSDN 什么的吧?这个贵一点,不过物有所值啊,$2,799。

嗯,你现在已经是上层阶级,白领人士了。你现在可以像这样“自由”的,“安全”的生活了:

# 什么是 Windows 能干而 Linux 干不了的事情?


“Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。”

有个朋友看我半年没有用 Windows,有时就会问我:“你只用 Linux,有没有发现有些 Windows 能处理的事情 Linux 干不了?”

我回答说:“Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。”

# Windows 能做的有益的事情 Linux 都能做


Windows 下的某些功能确实是我们需要的,那么 Linux 的开发者们和用户也需要这种功能,他们就会去实现这种功能,而且 比 Windows 的方式好得多。由于大多数科学家,工程师用的都是 Linux 或者某种商业 UNIX, 所以几乎所有商业的科学工程程序,比 如 Matlab, Mathematica, AutoCAD, Candence的,Synopsys的,Avant! 的……全都是先 有 UNIX 的版本(包括Linux),然后再考虑移植给Windows,甚至根本不移植给 Windows,因为 Windows 的机器一般没有足够的能力运行这样的程序。你不要以为只有 Windows 才有 PSpice, UNIX 的 HSpice 要好得多,而且可以运行在大型主机上。当 然它们不是免费的,但是它们值那个价钱。

但是 Windows 下有些东西在 Linux 下没有很相似的,或者你找到很多类似的,但是它们每一个比起 Windows 的那个程序都要差很多,那么原因有两种可能性:

有一个完全类似的程序,但是由于它乍一看不漂亮,被你忽略了。而其它程序虽然看起来很漂亮,但是它们是一些初学编程的人写的。现在由于 Gtk+, Qt 的诞生,Linux 下开发图形界面程序极其简单,很多初中生甚至小学生都可以随手编出一些漂亮不中用的程序。如果你整天寻找这样的程序挑来挑去,永远也找不到你满意的。

我曾经也犯过这样的错误,优秀的 FVWM, lftp, Mutt, wget 都被我忽略过!当我找回它们的时候,我是那么的羞愧不已,它们 现在都是我的朋友 :) 用这些程序你可以改变它们的一切,我第一次看到 FVWM 觉得它只不过是一个有很厚很难看边框的东西。可是现在,我的同学看 到 FVWM 都说:“哇!真漂亮。”

有另一种完全不同的方式可以达到相同的目的,甚至更好。

很多人很关心 Open Office, Star Office, AbiWord, ... 他们多么盼望有一天某一个 Linux 程序能够完全兼容的打开一个复杂的 doc 文档。但是你永远也不可能有那一天。为什么呢?因为微软为了占有市场,必定不会让其它系统的程序能够完全兼容它的文 档格式!它一定会不断变化 doc 文档的内部结构,隐藏一些秘密,让其它公司的程序打开 doc 文档时总是有某种问题,从而你必需购买 Microsoft Office 和 Windows。

你应该想一下,那么多的高智商的大学教授,科学家,学生,他们用的都是 Linux或者其它类型的 UNIX,他们没有 Word 可用,怎么处理文档呢?这么多年没有一个像 Open Office 的程序出现,难道大家没有办法写文档吗?

显然不是这样。你看看那些高水平的学术杂志,论文,那些大学教授的网页,那些漂亮的PDF幻灯片,它们是什么做的?原来 UNIX 用户早就有非常方便的 troff,LaTeX, SGML 等东西可以处理文档,而且它们比起 Word 都要高明的多。Word 显然被这些大拿忽略了,以至于很 久以来没有人想在 Linux 下开发一个类似 Word的程序,除非某些公司想抢微软的饭碗。

很多人留着 Windows 在硬盘上的原因无非是为了用 Word 和 PowerPoint。你待会儿可以看看我的TeX网页,你就会知道为什么我可以完全离开 Windows.

# Windows 能做的那些没用的事情 Linux 永远做不好


电脑游戏

有些人说 Linux 下不能玩 Windows 下所能得到的所有游戏。的确,Linux 下虽然也有少量的游戏,比如 Quake。但是它没有 Counter Strike, 没有 Star Craft,……

并不是说电脑游戏不该玩,但是应该适可而止。电脑是用来处理事务,帮助你学习,解决问题的工具,而不是一个玩具!整天沉迷于电脑游戏中,而不出去感觉外面的世界,你会变得越来越冷酷,越来越缺乏人情味。你与真实的世界越来越远。

你可以在 CS 里杀人,你可以在 Tomb Raider 里探险,你甚至可以在 TonyHawk's Pro Skaters 里滑 板…… 但是 It's not real!你虽然有很高的“反恐技巧”,但是遇到歹徒的时候,你是那么的怯懦;你虽然控制 Laura 伸手敏捷,但是你打篮球的时候怎么总是被人断球?你虽然可以轻易的在 THPS 里作出一 个"360 kickflip to hangten grind to fakie",但是你踩在自己的滑板上的时候还不会 ollie!

说回来,如果你偶尔玩一下电脑游戏未尝不可。但是世界上有远比 Windows +PC 更好的游戏方式。 Sony 的 PlayStation2, SEGA 的 DreamCast, Nintendo 的N64,Namco 的街机……每一个都 比 Windows 游戏精彩,每一个都有如此高的3D性能,以至于 Pentium4, Itanium + GForce4 都无法与它们比美!

Linux 的用户们都是关心解决世界的关键问题的份子,他们哪里有时间用自己的机器来玩游戏啊?他们每天用Linux高效的做完自己的工作就到阳光下享受自然去了。要玩游戏也是玩一些类似推箱子,贪吃蛇之类的智力小游戏。所以,你知道为什么 Linux 几乎没有游戏了吧?:)

“整理硬盘,优化系统”

这是一个非常有意思的话题,仅次于有关“病毒”的话题。相信很多 Windows 用户都有整理硬盘的经历。在很多 Windows 用户眼里, “硬盘用久了,会出现碎片,速度会减慢,需要一个程序来整理,整理硬盘的时候不要做其它工作”,这好像是天经地义的事情。

我也曾经津津有味的看着 Norton Defrag 一点一点的把我的硬盘排序,调整,用图形的方式显示出来,然后报告:“100% 没有碎片。你的硬盘现在已经达到最佳状态。” 我现在才发觉我那时是多么的幼稚。

Linux 和 UNIX 用户似乎从来没有“整理硬盘”这种说法呢?你觉得很奇怪吗?如果你觉得很奇怪,那说明你的思想在某种程度上被微软的垃圾程序禁锢了。你需要明白,UNIX 的大型主机很多必须是一天24小时,一年365又1/4天不停运转的,要是每个星期都要整理一次硬盘,在整理的时候几乎不能干任何事情,那是绝对行不通的!

Linux 机器根本不用整理硬盘,这就是为什么没有看到过 Linux 用户整理硬盘。Linux 的文件系统是 比 Windows 的 FAT, FAT32, NTFS 高明得多的文件系统,它们不但可以对文件设置权限,实施完全的保护,而且可以“越用越整 齐”,“越用碎片越少”!你应该把文件大部分放在 Linux 的分区,而不是 Windows 分区,因为它比 Windows 分区可靠得多。

还有更滑稽的事情就是有很多“Norton System Doctor”,“Windows 优化大师”,“超级兔仔注册表魔法” 之类的程序存在,而且价格昂贵。似乎一个操作系统本来应该有很多问题,需要别的厂商做程序来“优化”它,而且为了得到优化,你需要付钱!这些问题 Linux 根本 就没有,所以不需要什么优化。Linux 内核本身就是高度优化的。

IDE

有些人在抱怨为什么 Linux 没有一个良好的 IDE 开发环境。Linux 现在已经有一些 IDE 了,但是总是有很多问题。你是不是正 在寻找,正在期望 Linux 某一天可以有一个VC那样的开发环境?你有没有发现你正在进入微软给你设下的怪圈?你为什么一定要用 IDE?你 说:“IDE 开发迅速,调试方便,适合大型程序……” 那说明微软的程序在你脑子里已经比较根深蒂固,你需要好好清醒一下了,看看我来告诉你。

高明的 UNIX 程序员不用 IDE,IDE 从来就是给初级 Windows 程序员用的。

你看看大型的 UNIX 程序,包括 Linux 内核,各种网络服务程序,Xwindow 程序在内,哪一个是 IDE 搞出来的?我们实验室 的 EDA 程序也没有一个是 IDE 弄的,我还知道 Candence, Synopsys,Mentor 的高性能的图形界面 EDA 程序也都不是 IDE 写的。你信不信,微软的人在写 Windows 本身的时候也根本不用 IDE!

有一次某杂志采访一些出名的 Linux 内核程序员,包括 Linus 在内,没有一个人用 IDE,有的人用 VIM,有的用 Emacs, 只有 Linus 说“GNU Emacs is evil”,但是其实他用的是一种跟 Emacs 有同样键绑定功能的 MicroEmacs。大家都是用编辑器编辑了程序文件,然后用 make 这样的自动工具调用 gcc 编译器完成编译工作的。

我以前也编过 Windows 程序:应用程序,驱动程序。但是我没有用 VC 的 IDE。Linux 教育了我,我会在命令行调用 CL,我 知道 CL 才是 VC 的编译器。我可以在 cygwin 的 Makefile 里使用 CL。我还知道 CL 的参数都有什么用处。但是这些不是一 个从一开头就用 IDE 的人能很快理解到的。

我相信: IDE is evil。我有一些用 Windows 的 IDE 写程序的朋友,他们对那套东西已经很精通了。但是我却惊奇的发现,他们竟然把编译器和汇编器的概念都分不清楚,甚至有的人连“编辑器”和“编译器”都搞混淆了!他们只知道在一个窗口里输入了代码,点击一个按钮就可以编译程序,但是这里面到底是怎么工作的,他们不知道!他们被盖在上面的窗口挡住了视线,甚至会以为那个按钮就是编译器!

他们对那些 IDE 的热键背的滚瓜烂熟,但是我却看到他们在一个函数一个函数的把别人的 ANSI 风格的代码变成 VC 的风格。想想这件事在 VIM 里有多么简单,一瞬间就可以搞定。

为什么 UNIX 程序员不用 IDE?明白了这个道理你就能体会到 UNIX 的设计思想了。首先,一个 IDE 集成了编辑器,编译器,汇编器,调试器,跟踪器…… 这个编辑器功能肯定比不上 VIM 或 Emacs,编译器比不上 GCC,汇编器比不上 as,调试器比不 上 gdb, ddd, 跟踪器比不上 strace, ltrace, truss。你得到的是一套整合的很好的低能的程序。如果你对调试器的功能不满意,你只好换用另外一套IDE,但是这套 IDE 的热键,菜单,编辑器功能,按钮…… 跟原来那个有很大不同。你不得不花很多时间来熟悉新的环境,而不 能保持原来的某些东西。

而在 UNIX 下就不一样了。你可以用你最喜欢的 VIM 编辑程序,你在 VIM 里可以调用 GNU make,make 可以调 用 gcc, ld, ... 实际上 make 能帮你很多忙。make的出错信息可以被 VIM 捕获,VIM 能帮你在源程序里定位。你如果喜 欢 icc, 你可以让 make 用 icc 而不是 gcc。你如果觉得 gdb 跟踪变量时比较麻烦,你可以用 ddd 来显示各种数据结构之间的 关系。你还可以在 Emacs 里调用 gdb,那样就可以同步显示源代码了。而且 VIM 和 Emacs 还可以编辑很多其它东西,比如信 件,LaTeX 文档,HTML,配置文件…… 你不用另外找一个什么编辑器来干这些杂活了。很多程序比如 Mutt, tin 都可以在内部使 用 VIM,这样就更方便了。

释放内存

我在 Windows 下做过的一件最傻的事情莫过于“释放内存”了。有一天我看到一个 Windows 程序说:“这个程序可以帮你把大量内存释放出来给一个很大的程序用。”我试了一下,居然一下把我的 64M 内存释放出来 48M!我高兴极了。现在想一想,那是多么傻的事情,那么多的内存留着干什么?不用白不用啊!一操作系统,居然还需要别人写的程序来释放内存,那是什么样的操作系统?

在 Linux 下用 free 命令,你会发现你的内存几乎每时每刻都快要被用完。那是因为 Linux 把大部分内存用来作为磁盘缓冲了。 Linux 有比 Windows 先进的磁盘缓冲技术。你有没有发现你往硬盘写数据的时候,很快就完成了?那是因为 Linux在内存里有很多磁盘缓冲区,你要写到硬盘上的数据先被写到了这些内存里,然后 Linux 就告诉你“拷贝完成”,当你马上又想删除刚才写入的某些数据时,Linux 只是把数 据从内存里移除,然后报告“删除完成”。在一定的间隔时间后,Linux 才把数据写回硬盘,这样不但高效,避免了多次硬盘操作,而且减少了文件的不连 续,也就是减少了“碎片”。Windows 当然也有磁盘缓冲,但是由于它内存管理的低效率,它不敢把大量内存都用来作为磁盘缓冲,因为它没有能力在用的 时候随时把内存收回来。

# Linux 能干的高级的事情 Windows 都干不了


当然有很多事情是Linux/UNIX的专利了。因为 Windows 只能装在 PC 机上,好像以前也有 Alpha 可以使 用 Windows NT,但是就是没见到有人用。PC 机的能力是很低的,像我们编程序处理 NP-Hard 问题的人,用 Windows 的机器显然速度不够,而且有时一个问题算上几天甚至几个星期,Windows 机器是以“死机”著称的,我们怎么能放心?

所以几乎所有科学计算程序,EDA 程序,高性能图像处理程序都不是 Windows 的。他们有时也会移植一些给 Windows,但是常常降低那些程序的能力。你比较过Windows 版本的 Mathematica 和 Linux 的有什么区别吗?

IBM 制造的最大的并行计算机有 8000 多个处理器,Windows 不可能有能力管理这么多处理器,它用的是什么操作系统?答案是 Linux。

《泰坦尼克号》电影里的三维动画,那么细腻逼真,Windows机器能做出来吗?不行。那也是 Linux 机器做的。

民航总局用来训练地情人员的虚拟现实训练设备,Windows 当然无能为力。那都是商业的 IRIX 机器。

UNIX 是最早支持 TCP/IP 网络协议的系统。它上面有很多可以互相协作的网络服务程序,它们经过多年的使用和修订,已经达到比较完善的程度。而就在1997年,微软的比尔盖茨还在扬言:“Internet 是没有前途的。” 微软的这个“远见卓识”大家应该都已见识,它后来加上的网络服 务程序IIS漏洞之多,让公安部都频频发出警报,大家也是见识了的。

其实你知道了,Windows 没有一样有用的事情能比 UNIX 干的更好。

# Linux 干不了的有用的事情 Windows 照样干不了


当然 Linux 不是万能的。它也有不能干的事情,电脑也有干不了的事情。但是Linux 干不了的事情,Windows 肯定也干不了。这些事情就是我们需要探索,需要努力的事情了。在你探索的过程中,Linux 必定是你的好伙伴。

# UNIX 的真谛何在?


让聪明人干任何他们想干的事情

UNIX 的一个特点就是非常高的灵活性,Xwindow 也具有这种灵活性。这种灵活性体现在哪里呢?

UNIX 的程序一般都有很多参数,不管你现在用的着用不着,总有人需要某些参数。它们的行为很多都可以用配置文件来改变。比 如 GNU bash, 通常缺省的命令行输入方式是 Emacs 方式,但是只要我编辑一个 .inputrc 文件,就可以把它变成vi 的输入方式,而且我还可以自己绑定键序列到某些操作。我可以用 shopt 来设置它的很多特点,比如是否进行通配符扩展,是否可以把一个变量当作一个目录来 cd,是否可以自动纠正某些明显的目录名打字错误 ……

UNIX 程序设计的思想是提供给用户“机制”,而不限制用户制定“政策”。这是一个重要的尊重用户的作法。

我们再来看看 Xwindow。Xwindow 是一个出色的设计,它把显示服务器和客户程序分开。一个显示上既可以显示本机上的程序,也可以显示别的机器上的 X 程序,而它们都遵守你的窗口管理器的统一指挥,它们之间可以方便的传送剪贴版数据,各种事件 …… 比如有时我 的 XFree86 上会出现四个不同机器上的 XTerm,两个不同机器上的 GVIM,…… 它们统一受本机上的 FVWM 指挥。

Xwindow 程序都具有很多很多命令行参数和 resource 参数。你可以随意的在命令行或者 .Xdefaults 文件设置所有的颜色,字体,尺寸…… 而且如果你用 xrdb把 .Xdefaults 导入到根窗口,那么其它机器上没有经过配置的同样的程序,显示到你的机器上的时候 也会遵守同样的外观规定。

Xwindow 的窗口具有 Property, 也就是一些可以自己定义的共享数据(原子)。正是因为这些 Property 的存在,使 得 Xwindow 具有无比强大的生命力。X 的窗口管理器和其它客户程序之间并没有统一的协议,但是后来出现了 ICCCM(客户程序间通信规范), 这个规范就是通过 property 定义的。现在又有人定义了一套“扩展的窗口协议(EWM Hints)”,使得 Xwindow 可以具有某 些 Windows 的特征,比如一个工具条程序可以告诉窗口管理器:“这个屏幕下面被我占据了24个像素的空间,你最大化程序的时候不要越过这个界 线。”

一个强大的窗口管理程序比如 FVWM,它收到这样的提示时,可以答应工具条程序的这个要求,也可以不答应。一切选择的权力在于谁?当然是用户了!一切窗口乖乖听话,FVWM 给予用户最大的尊重。

你想想,是不是有些 Windows 程序常常弹出一个窗口要你选择 "Yes or No"?你不点击它它就不下去。你觉不觉得你的程序在侵犯你的尊严?你是一个人!还有就是很多 Windows 程序把人当成傻瓜,而它是“智能程序”。比如,有一个程序就是喜欢把你的每句话第一个字母都变成大写,我不说它是谁了,你遇到的时候就知道了。如果连“一句话开头一个字母要大写”这么明显的问题都需要程序帮你纠正的话,人脑还用来干什么?况且如果你故意想要不大写的话,那就更麻烦了,我楞是没有从它那一大堆菜单里找到怎么关闭这个愚蠢的选项。

# 只有符号才能完全操纵计算机


我们来说说很多初学 Linux 的用户。虽然他们在用 Linux,但是他们打心眼儿里是觉得 Windows 的工作方式好,他们希 望 Linux 有一天能“像Windows那样”。你说:“我鼠标一点,我菜单一拉,…… 就可以完成我的操作。” 但是我要告诉你:“Linux 从来没有摹仿 Windows,将来也不会。Linux 从诞生之日起,它的工作方式就比 Windows 的先进。Linux 属于能勇敢面对符号的人。 只有符号才能完全操纵计算机。”

看看优秀的 UNIX 程 序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget,tin, ... 没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置?难道它们的设计者就那么低能,连个图形配置界面也写不出来?

当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件和程序语言的表达能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文件的效果,你需要成百上千的菜单,checkbox, radio button, ... 到时候你根本没办法找到你需要修改的地方了!而各个程序的 配置文件的语法都有很多相似之处,一般就是一些命令,设置一些变量,参数,…… 一旦用会了一个,其它的也就容易理解了。如果你用惯 了 awk, sed, Perl,你会觉得那才是真正的自动化啊。

鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。

# 各个小程序的完美配合


这就是UNIX最重要的特点了,它就是UNIX设计的思想。让每个程序只具有一项专门的能力,然后让它们合作。Xwindow也继承了这种好传统。

这恐怕就是Windows和其它操作系统望尘莫及的地方了。UNIX 程序设计之统一,配合之完美,真使我难以置 信!shell, grep, find, awk, sed, make, Perl,Emacs, vi, tin, Mutt, ... 它们是那么的具有一致性!你一旦学会了 sed 的正则表达式,其它程序基本上都能用了。你一旦学会了 vi 和 VIM, 你会发现它的操作是那么的有规律性, 似乎vi的设计者在几十年前就已经设计好了 VIM 在今天的完美而统一的操作方式!而且vi的操作还体现在 Mutt, tin 等很多程序中。你甚至 可以把 bash 设置为 vi 的输入方式来输入命令行,我就是这么做的。一个程序可以调用另外一个程序来得到数据,可以把数据交给它处理后返回来,可以在自己的窗口里“嵌入”另外一个程序。

在 Windows 和其它非 UNIX 操作系统中,这种合作是非常困难的。我曾经在Windows 下使用 Perl来进行一些自动工作。但 是 Windows 的文件操作,管道是如此的不稳定,程序之间基本不能合作。你别想在 Visual Studio 窗口里面嵌入 UltraEdit 编辑器,你别想用一个 expect 脚本来控制 telnet 到水木清华BBS,这就是为什么 helloooo 诞生 在 Linux 而不是 Windows。我曾经试图从Windows + Exceed + SecureCRT ssh 登录到 Sun 机器,然后 通过 ssh 的隧道(X11 tunnel)把 X 程序传到 Exceed 上运行,但是搞了两天都没有成功!而在Linux 下这个事情根本就是不用怎么配置的,OpenSSH 和 XFree86 本来就是完美结合,只要打开 ssh 的 "forward X11" 选项就什么都搞定了。

Windows 的程序都是大而全,大而杂,所有的电子邮件程序都需要自己提供编辑器,自己发送和收取邮件,自己显示邮件的附件。每一个BBS程序都提供自己的Virtual Terminal, 自己的通讯代码。每一个 IDE 都自己提供编辑器,编译器,汇编器,调试器。人们为了使用一种新的程序,需要适应所有这些它提供的界面,而不能使用自己喜欢的编辑器的键绑定,菜单组织…… 不能 DIY!

你要知道,最高级的电脑是定做的,自己想要什么什么CPU,什么主板,多少内存,什么硬盘,键盘,鼠标,显示器都是自己选择的。最高级的滑板,自己想要什么牌子的版面,什么牌子的沙,什么桥,什么轮子,什么轴承,也都是自己选的。最高级的乒乓球拍,木板,胶皮,海绵,胶水都是可以自己选择…… 而 用Windows 程序,你得到的是大杂烩,就像你去买“品牌机”,只有那么几种配置,而且附带很多你不需要的软件和服务;就像你去买组装好的滑板,你想要大一点的轮子和窄一点的板子,但是你没有这种选择余地!Windows 程序就相当于最廉价,最次的滑板。但是它却会花你更多的钱,因为一旦一个部件坏了,或者你不喜欢了,你不能另外找一个好的换掉它,你必需重新买全套配件!

而 UNIX 和 Xwindow 就是高档的“组装货”。比如我用 Mutt 的时候,我可以用VIM 也可以用 pico 来编辑邮件,我可 以用 ImageMagick 也可以用 xv 来显示附件里的图片,我可以用 lynx 把 HTML 附件转成文本嵌入窗口中,我也可以把 HTML 附件交给 Mozilla 图形显示。我可以让 GnuPG 帮我把邮件进行数字签名和加密,我也可以用其它 PGP 程序。我想 让 Postfix 而不是 sendmail 帮我发出邮件,我想让 fetchmail 帮我收邮件,转发给 postfix,然后被我自己写的 Perl过滤器处理…… 这一切我都可以办到!我可以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以分别得到它们的好处。

# 结论


我写这么多的目的是什么?我希望喜欢 Linux 的朋友,完全清除微软和Windows 灌输在你脑子里的谬论,别再相信它们所谓的“新技术”,别再追赶Windows,因为追赶 Windows =倒退。马克思有一个思想很重要,“新生事物并不一定是在最近出现 的。” UNIX,Xwindow, TeX 虽然都比 Windows 先出现,但是它们才是先进生产力的代表。我们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。

勇敢的拿起像 bash, FVWM, VIM, Emacs, Mutt, lftp …… 这样强大的程序,不要再埋怨“Linux 为什么 不能像 Windows 那样”,不要再浪费时间试用这样那样的程序,不要再忙着升级。是你需要改变而不是 Linux 和 UNIX,Linux 现在就可以成为你的好朋友。你需要认识它,了解它,信任它,才能完全的靠它来高效的工作,省出时间来处理世界上更加值得处理的事情。

2010年1月17日星期日

深入Tor

背景

TOR(The Onion Router) 通过一系列的网络节点让你的建立匿名的安全数据链路。他是免费的,是一个开源项目,任何人都能够使用他。

TOR网络有两大类组成,TOR服务器和TOR用户。任何TOR用户都可以成为TOR服务器,但是没有人可以“拥有”所有的服务。

TOR每条链路由3个节点建立起来,并且每几分钟就改变链路。链路是由一些主要节点管理节点列表随机产生的。TOR建立一个客户端到第一个节点的链接(通常称作入口节点),然后它向第二个节点发送一个打开信号,最后是第三个节点(通常称为出口节点)。

因此,当你在浏览网页的时候,你通过了3个世界上的任意节点。

You -> Node1 -> Node2 -> Node3 -> www.google.com

TOR依赖于层层加密,这就意味着每个节点都只能只能看到他需要看到的内容。而不能里解密所有数据。

一、安全性和隐私性

Node1

节点1的所有者只能知道谁是那个想要匿名上网的人,但不知道他的数据,因为数据是加密的。所以节点1所有者不知道我想干什么,但知道我是谁。

Node2

节点2的所有者,事实上什么也不知道。他不知道谁在请求数据,因为所有数据都被Node1加密了,数据内容当然就更加不知道了。

Node3

节点3的拥有者不知道谁请求了这个内容,但他知道内容,因为节点3能够解密数据。节点3是有有解密的密钥的,因为我们要依赖他去访问我们要访问的网站(网站一般是不加密的)。

进一步讨论

Node1 + Node2

如果我拥有1,2两个节点,这个也没什么好处,因为我还是只能看见这个人是谁,而不知到他想要什么。

Node2 + Node3

同样拥有2,3两个节点也不怎么理想。我还是只知道对方想要访问的数据,而不知道他是谁。

Node1 + Node3

如果拥有1,3节点,对于想了解谁在用TOR的黑客我将更加有帮助。节点1知道用户的身份,节点3能够解密。但要知道所有的数据内容还是有一点困难的。

让我们假设A建立了一下链接

Node1 -> Node2 -> Node3

现在A想要匿名浏览google。那么,节点1就得到了A发出的请求,但是我们并不知道A想要什么。然后,我们知道有个人在节点3请求google主页,链接那个节点,我们就说A就是请求google的那个人那几乎是不可能的,因为同时会有成百上千个用户。攻击者不能确定通过节点1的A就是通过节点3访问某个特定页面的同一个人。

要知道用户身份和请求数据的唯一方法就是计算从节点1到一个不知道的节点,到节点3需要的平均时间。然后假设符合平均时间的就是同一个用户。

Node1+Node2+Node3

毫无疑问,如果拥有所有的三个节点,你就能知道是谁发了这条信息以及信息的内容。但这个基本上是不可能的。因为链路是在节点列表里面任意选择的,而TOR节点列表有着相当客观的机诶但数量(接近1800)。

现在让我们进一步假设,如果有人黑了你的电脑并且用数据包嗅探来监视你离开你电脑的每一个数据包。感谢加密机制,攻击者知道的只有第一个节点的身份而已,没有任何的数据,连出口是谁都没法知道。


二、特别优点

TOR同样解决了一个别的匿名访问程序没有解决的问题,那就是DNS服务器能够得知

任何请求域名解析的用户身份。那就是说如果我想匿名访问google.com,使用任何匿名工具,google查了日志也不会知道我是谁,但他们可以通过查询通过查询DNS服务器知道我的身份,因为每次你在地址栏输入一个域名,后台就会发送一个DNS解析请求(使用我的非匿名身份)。

TOR通过Privoxy这个程序使得DNS请求变为匿名。

你可以看到,想要窃听TOR用户是非常困难的。


三、缺陷

易破坏性问题:

据我所知道的,TOR只有连点比较容易受损:

1. 通过一个特殊的Java applet程序发送ICMP数据包(TOR不支持ICMP的加密),网站就可以推断出用户的真实身份。

2.另一种方法就是攻击者拥有出口节点Node3。然后攻击者可以向将会送回最初节点的访问页注入Javascript代码或者Java applet程序,从而推断用户身份。

速度问题:

不像其他的匿名访问程序,TOR是非常缓慢的,因为他的所有内容都要加密,而且还要满世界的向三个节点传递数据。

一般情况,TOR用户可以获得速度在20-35kbps左右,当然还跟你的地理位置和带宽有关。


P.S.

torproject.org (被墙)提供了一个叫做Vidalia Bundle工具,包括了Tor + Privoxy + Vidalia (Tor的图形化控制) + Torbutton (firefox插件).


原文:http://www.anonwatch.com/?p=3

DKMS简介

源代码是一个非常好的东西,合并模块源代码到内核树中就更好了。但最重要的是对该源代码的支持。在今天,Linux爆炸的企业中,如果能够拿起电话寻求帮助是至关重要的。比以往任何时候,公司们正在推动Linux的发展和要求。通常,这会引起社会各界对自由软件的怀疑和焦虑,但如果做得正确每个人都看到和感受到好处。

动态内核模块支持(DKMS)框架应就是一个很好的例子。 DKMS,旨在以控制方式帮助戴尔电脑公司的客户打补丁,同时也加快了整个社会的驱动程序开发,测试和验证。

该DKMS框架基本上就是一棵在内核树外保存着模块代码和编译好的二进制文件的复制树。他允许这些重复的模块从内核中脱离出来,是Linux解决方案供应和部署商的一个功能强大工具。他的强大就体现在允许驱动程序以一种有序的受支持的方式加载到存在的内核树上。相应的这就方便提供商和用户解决内核中的问题。当驱动补丁被释放,DKMS作为一个短期的解决方案将补丁分发到代码中直到有机会将代码合并到内核中。

再从用户角度看,DKMS还提供其他好处。源代码编译、安装或者焦躁不安的重新建立RPM包让人心生畏惧。现实情况是更多的Linux用户经验较少,因此需要简单的解决方案。 DKMS通过创建一个可执行文件为建立、安装或卸载模块这些问题架起了桥梁。此外,利用其匹配功能,配置新的内核模块就变得不能再简单的事情了,因为安装的模块可以完全基于一些以前运行的内核配置。在生产环境中,这是一个巨大的进步,IT管理者需要在一些预定义的解决方案堆或新内核的安全增强功能两者之间做出选择。

DKMS还可以为提供开发商和资深Linux用户提供很多。从上述想法,是通过重复内核(不完整的分离)创建一个可行的驱动程序开发测试平台,而不是强行将补丁推入内核,这些修补程序,均可在现场大规模测试。这个对测试速度上的提高导致了整个开发过程的提速。通过消除通过发布内核来传播驱动模块这种方式,从而使更好地被测试代码能够以更快的速度加入到内核中——这是一个开发者和用户双赢的发明。

多进程浏览器优点

多进程浏览技术好处多多,它能使每一个打开的页面都可以运行在各自独立的进程中,为浏览器的安全性和稳定性增色不少,即使其中的一个页面因故出错,也不会影响到其它页面和整个浏览器的运行状况。

1.稳定性增强:

  如果某款插件试图占用全部处理器时间和内存空间,并容易造成崩溃,那么多进程式浏览可以把它于浏览器的其它部分分割开来;

  2.性能:

  多进程式浏览技术可以充分利用现代多核处理器的优势,同时用户接口界面的响应速度也将有所提高;

  3.安全:

  由于各个网页相对独立,因此多进程式浏览将能更有效地防御通过网页发起的攻击。

2010年1月9日星期六

万里长城万里空

清朝康熙年间,有个新科进士叫张廷玉,在长城城墙上“涂鸦”,留下了“万里长城万里空,百世英雄百世梦”的诗句,碰巧被前来巡视的康熙看见了。康熙没有将其定性为“不稳定因素”,反而当众宣布大清朝从此永不筑长城,并对张廷玉委以重任。

这件事被史学家传为美谈,不可否认,满人康熙比汉人皇帝有足够的自信,不会因为一句诗句而搞文字狱(读者注:满清文字狱还是比较严重的哦),更重要的是满族统治者从汉人统治的失败中悟出一个道理:长城再坚固也保护不了一个精神懦弱和愚钝的民族。

秦始皇修筑长城,一方面防止墙外的"野狼"入侵,另一方面,把人民当作牛羊圈养起来。中国统治者从来就是把土地和人民作为自己的财产,没有给他治下的国民以做人的尊严,所以秦始皇才会想到焚书坑儒,消灭人民的思想,他以为这样就可以保住秦氏江山“万代红”,没想到一个无法构筑精神长城的民族注定是不堪一击的。果然没几年功夫,秦氏天下就改姓了。

秦始皇失败了,后来的中国统治者仍没有吸取前车之鉴,失败多于成功。到了蒙元时代,汉人的子孙几乎被蒙古人灭族。到了热衷续修长城的明王朝,长城还是没有保护好他们的子孙,最终让一个小小的关外民族捡了个大便宜,中华大地一夜之间成了满人的大牧场。

与西方的封建君主相比,中国君主不如西方君主明智。例如英国女王伊丽莎白,她可以让她的人民自由思考,懂得引领她的人民去开拓疆域。所以,英国人有牛顿、亚当密斯(《国富论》的作者),而中国没有,即使有早也被埋到土坑里去了;所以英国人的后裔注定要在这个星球最为丰饶和广阔的土地上幸福生活,上帝也会把创世的奥秘告诉他们。
中国统治者很可怜,引领一群软弱如牛羊的愚民,在世界面前炫耀自己的富有和强大,被人耻笑和蔑视还不自知。一个民族的创造能力和他们拥有的思想自由度成正比,没有强大的精神长城,再坚固的石砌长城其结果也逃脱不了“万里长城万里空”的结局。

转自:http://blog.66wz.com/?uid-215007-action-viewspace-itemid-171034

2010年1月8日星期五

Linux多鼠标MPX

Fedora 12 中的新特性之一就是能够支持多鼠标指针独立操作。






闲话少说我们来配置一下:

1.依赖关系:

   xorg-X11-server-1.7

   libXi-2

   libX11-1.3

2.安装:

 安装xorg-X11-apps

 输入xinput --list 查看输入设备

 装入两个鼠标或以上,也可以加入键盘

 输入xinput --create-master "<NAME>" NAME可以是任何字符串

 将物理设备与逻辑设备关联 xinput --reattach "USB Mouse" "<name> pointer"

 现在就可以让两个鼠标同时独立移动了

3.删除设备:

 xinput --remove-master "<name> pointer"



P.S.双鼠标在一般的桌面程序上并不稳定,一般需要有特殊软件,做特殊用处。

2010年1月4日星期一

Linux版本选择器

刚发现一个比较有用的东西,Linux版本众多难以选择,有个版本选择器提供一套问卷(10几道题目)为你选择最合适的Linux发行版~

http://www.zegeniestudios.net/ldc/

2010年1月3日星期日

PyQt4学习笔记1

1. 几种控件的使用
(1) QSpinBox / QDoubleSpinBox
QSpinBox 操作内容为int
QDoubleSpinBox的操作数为double||float
使用setRange(0, 100.00)设置范围
使用setSingleStep(0.01)设置步进
setValue(5.25) 设置初始值
setPrefix("$ ") / setSuffix(" %")前缀后缀
value()获取其值
(2) QComboBox
addItem("XXX") 增加内容。
currentText()获取当前选中项
(3) 布局控制器
QGridLayout
QHBoxLayout
QVBoxLayout
2. signal && slot
s.connect(w,SIGNAL("signalSignature"),functionName)
s.connect(w,SIGNAL("signalSignature"),instance.methodName)
s.connect(w,SIGNAL("signalSignature"),instance,SLOT("slotSignature"))