阳光烂灿的日子

--记录所有碎碎念

我为什么不选择Windows

| Comments

偶尔看到CSDN上一位技术人员发表的Blog文章:我们为什么不选择Linux?
本来是见惯世面了,这类文章在各大Linux论坛中是每个月都会出现的,大家都称
之为”月经贴“的啦!一般是一两个新人试用了Linux一两天,然后就以救世主的姿态
来说明是Linux需要普及还需要什么什么的!然后下面又有一大堆新近的Linux爱好者
说明楼主怎样怎样。颇有troll的嫌疑。
偶作为乡民(网络用语:看热闹的人)的身份,
浏览了一遍,本来是普通用户的话,就算了,可是一位技术人员,偶对他就有些求全责备
了。关于反对的话我也不说了,因为不需要我说。它的回贴者已经很好地回应了。
不过有好些回贴者又发起了人身攻击,这也是不太应该。不过这位技术人员得负些责任了。
本来这个选择window还是linux的问题,几乎可以比美宗教斗争了。一个派系攻击另一个派系
。在中国有一个特点,任何的争论,最后都只会剩下口舌之争,互相人身攻击。

下面是上面博客中一个留言内容。
================================

microrain 发表于2006-08-26 04:58:00 IP: 221.217.117.*
详细看了一下大家的回复,对于反对我的人,如果你是在windows+IE下回复你的反对言伦的,我鄙视你。自己就在做着否定自己的事情,怎么有资格说别人,特别是那些骂人的,请先看看你自己在用什么?你自己为什么不天天使用linux,想明白了再回复。 ================================ 偶现在已经可以算得上是纯正的Linux爱好者了,偶是天天用Linux的,因为偶硬盘上没有windows。
所以偶想偶还是有资格说说你们的吧!当然我不是要骂你 , 呵呵~

{也许偶也写一篇名叫偶为什么不选择Linux,或Linux在中国没前途之类的文章,偶博客的
点击率会立马上去哩~ :)}

偶作为有聊之就写一遍:我为什么不选择Window相对应吧。对于不了解Linux的初学者偶以前也写过一篇文章了,给Linux初学者说清的几个问题不再重复。偶不用我们,偶没有找到其他
人认同偶代表他的。所以只是行使偶自己的言论自由,决不以大众的名义去忽攸大家。

1.Windows要钱,太贵了。
装一个Windows XP,要三千多吧,再来个办公的office,又要三千多。
流行软件是很多。不过大部分要自己找注册码破解。不然就是广告,弹出栏。时间限制。
我跟你讲,这纯属道德问题。
– 引自《疯狂的石头》
盗版问题也不多说了。这里提一下,你是用得理直气壮的话我也无语。大家得了便宜还是
得卖点乖。别大声张扬。

2.病毒流行。
几乎每年都会爆发一次大规模的病毒风波吧。像那次什么冲激波,震荡波啊。为了防病毒,装
杀毒软件吧。内存本来就不多,还要分一部分给杀毒软件,防火墙。晕。杀毒软件也是要钱的
啊。找破解版,上网到处找注册码。

3.流氓软件很多,随时有被插的危险。
偶舍友用的是windows,因为他的电脑放在厅里,所以吃饭的时候偶们会看一下他电脑上的片子。
用realone打开一个电影。十秒钟内跳出十个页面,挡住了屏幕。严重影响观赏。因为偶不熟习
window,举不出更多的例子了。不过看看donew就知道了,最近老在谈论这个流氓软件哩。
更有甚者,还有一位博客提出流氓插的时候温柔点,别改主页,注册表就行。偶当时看了感觉就像
在请求强奸犯做案的时候带套,冷静地对待。已经达到见惯不怪的地步了,可谓之强。
偶没有这个习惯,所以别搞我!

4.重装率频繁
系统用得久了就一定会慢,磁盘就肯定乱。这几乎是定理。当时是很多熟知电脑(其实是Window)
的人告诉我的。用windows的几乎是每三个月重装一次。遇到问题的唯一解决方法就是重装,别
告诉我你是技术高手。当年在我认识的高手当中(如今不少是程序员),自己解决问题,帮别人解决
问题的方式就是重装。

linux出了问题,偶可以去google找答案,去irc,qq群里问人。耐心好一点都是可以解决的,并且还
可以学习到新的东西。无论怎样大的问题,都可以不用重装解决(除非你整个硬盘坏了)。

4样式单一。
永远是蓝天白云。千篇一律。没有个性化。定制个东西难于上青天。因为提供的都是二进制的东西。
虽然有改主题的软件,但是占用太大的资源了。并且还是用别人的东西,不能激活自己的创造性。
并且好像还要钱。

5.不利用于学习编程
默认装上的window,没有编程功能。还要自己去找个ide。一个ide几乎是一个系统那么大了。天啊
,我只想写个hello world而已啊。想找个源代码看看,学习下编程。买书吧,书中有例子。有没有
项目大一点的开源软件啊? 有啊,Linux下繁星那么多。window下的mfc的就好难找了。嗯,去找些
人一起讨论讨论吧。高手好像都不上QQ群的,irc上都是linux爱好者。
想学习下操作系统,只有理论,没有代码,window可没有代码公开啊。要学习操作系统,那还是看
Unix类。

就写这么多吧。写了许久突然发现无趣这样很无趣。
总之,谁解决了我上述问题。谁的Linux将小行其道。真正成为一小部分人的爱好。不过就算你解决
了,我也不会选择windows。 我不选择window并不是因为上面的原因。我不选择window的原因很
简单,因为我选择了Linux
我选择linux的原因也很简单,因为我喜欢这个系统。关你window什么事。

DoWhile(0)

| Comments

更详细参考Kernelnewbies

为啥内核里有这么多 do{ }while(0) 的宏啊?一开始我也好不明白。感觉不出用了会有什么效果。不过明白之后就知道它的好处了。好处就在于多语句的宏。

#define FOO(x)	print("arg is %sn",x);do_something(x);
在代码中使用:
if(2==blah)

FOO(blah); 预编译展开后:

if(2==blah)

print("arg is %sn",blah);

do_something(blah); 看到了吧,do_something函数已经脱离了if语句的控制了。这可不是我们想要的。使用do{}while(0);就万无一失了。

if (2== blah)

do {

printf("arg is %sn", blah);

do_something(blah);

} while (0);

当然你也可以使用下面这种形式:

#define exch(x,y) { int tmp; tmp=x; x=y; y=tmp; }

但是它在if-else语句中会出现问题。如:

if (x > y)

exch(x,y); // Branch 1

else

do_something(); // Branch 2 展开后:

if (x > y) {                // Single-branch if-statement!!! 

int tmp; // The one and only branch consists

tmp = x; // of the block.

x = y;

y = tmp;v}; // empty statementelse

// ERROR!!! "parse error before else"do_something(); 看到了吧,else成了语法错误了。使用do{}while(0)就不会有这个问题了。

if (x > y)

do {

int tmp;

tmp = x;

x = y;

y = tmp;

} while(0);

else

do_something(); 嗯,现在明白之后,自己的代码也记得用啊!

为博客打扮之添加url图标

| Comments

看见过许多网站URL前面都会有一个图标,一些个人的博客的URL上也有。
于是搞来玩玩。
问问了TG(偶一网友),得到方法。

===============================

<link rel=”icon” xhref=”/favicon.ico” mce_href=”/favicon.ico” type=”image/x-icon”>

<link rel=”shortcut icon” xhref=”http://static.flickr.com/90/222800378_c6f6a171b3_o.png” mce_href=”http://static.flickr.com/90/222800378_c6f6a171b3_o.png”

type=”image/x-icon”>

===============================

把png文件的url换成你想要的文件url,并把上面的代码拷贝到你侧栏编辑中的某一栏内容里。 代码啥意思偶也不清楚,反正能成。不求甚解! 有空的网友玩玩!

睡清华校园的家长不惨。

| Comments

咋一看这则新闻,第一印象真的是觉很惨。可怜天下父母心是不错。但回头想想,他们其实不惨啊。
也早有人分析过了。去得了北京的,家里还能算穷的嘛!真正惨的是你见不着的,在乡下砸锅卖铁凑
学费的父母。哪还有钱去北京啊!

偶发一感!

LikelyUnlikely

| Comments

更好的解释请看Kernelnewbies

在内核中常会见到下面这样的代码。

bvl = bvec_alloc(gfp_mask, nr_iovecs, &idx);

if (unlikely(!bvl)) {

mempool_free(bio, bio_pool);

bio = NULL;

goto out;

}

这个likely()和unlikely()其实是宏定义。原始定义在 include/linux/compiler.h中,如下:

#define likely(x)       __builtin_expect(!!(x), 1)

#define unlikely(x) __builtin_expect(!!(x), 0)

__builtin_expect是GCC内建的函数。下面引用linuxform中的一篇讲GCC扩展文章

的一部分(原我找到的也是引用的文章,此处给出链接),里面解释得很清楚。

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

* __builtin_expect(EXP, C)

内建函数 __builtin_expect 用于为编译器提供分支预测信息,其返回值是整数表达式 EXP

的值,C 的值必须是编译时常数。例如:

++++ include/linux/compiler.h

13: #define likely(x) __builtin_expect((x),1)

14: #define unlikely(x) __builtin_expect((x),0)

++++ kernel/sched.c

564: if (unlikely(in_interrupt())) {

565: printk("Scheduling in interruptn");

566: BUG();

567: }

这个内建函数的语义是 EXP 的预期值是 C,编译器可以根据这个信息适当地重排

语句块的顺序,使程序在预期的情况下有更高的执行效率。上面的例子表示处于中

断上下文是很少发生的,第 565-566 行的目标码可能会放在较远的位置,以保证

经常执行的目标码更紧凑。

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

总结,这个宏主要是优化的作用。如果英文好的话可以看文章一开始给出的

在kernelnewbies中的链接,那里有更详细的解说。

细心的人应该留意到有一点不同,likely()一开始偶给的定义为__builtin_expect(!!(x),1)。

后来的文章解说中成了__builtin_expect((x),1)。

这应该是后来的版本更改所至。就是新近版本的内核已经更改成__builtin_expect(!!(x),1).

加上个“!!”有什么好处哩。我想是因为使代码强壮与兼容的原因。因为不能保证x表达式的结果一定是1或0,有可能是非0数。加了“!!”,结果就一定是在1和0范围内了。

Blog工具-performancing

| Comments

一直以来我都使用Blogtk来作为我的博客写作工具。当然它并不是很好用。功能有限。华华曾经推荐一款博客工具logjam给我,这个是针对于livejournal系统的。当然也支持其它的博客系统。但我对于donews没设置成功。看过一下那个软件也再没用了。还是一直用Blogtk。用来写文字还凑合吧。最近贴一些代码的时候就有些愁了。才感到它的功能那么那么有限。
直到今天才发现firefox有一个写博客的扩展 Performancing。试用了一下,还是所见既所得的哩,还有颜色设置,很方便啊。才发觉有相逢恨晚的感觉。嗯,还是和Blogtk告别吧。另一个感叹:Firefox真是强大啊~
理所当然地从今日起,偶的博文都将由Performancing产生了!呵呵! 面给个图先!

博客工具performancing

什么是asmlinkage

| Comments

下面首先在kernelnewibes上的解释。

What is asmlinkage?  The asmlinkage tag is one other thing that we should observe aboutthis simple function. This is a #define for some gcc magic that tellsthe compiler that the function

should not expect to find any of itsarguments in registers (a common optimization),

but only on theCPU's stack. Recall our earlier assertion that system_call consumesits

first argument, the system call number, and allows up to four morearguments that are

passed along to the real system call. system_callachieves this feat simply by leaving its other

arguments (which werepassed to it in registers) on the stack. All system calls are markedwith

the asmlinkage tag, so they all look to the stack for arguments.Of course, in sys_ni_syscall's case,

this doesn't make any difference,because sys_ni_syscall doesn't take any arguments, but it's an

issuefor most other system calls. And, because you'll be seeingasmlinkage in front of many other

functions, I thought you shouldknow what it was about. 而我在 2.6.8的内核上的include/linux/linkage.h查到它的定义是:

 #ifndef asmlinkage
    

 #define asmlinkage CPP_ASMLINKAGE  #endif
    进一步,CPP_ASMLINKAGE的定义为:

 #ifdef __cplusplus 
    

#define CPP_ASMLINKAGE extern "C"

#else

#define CPP_ASMLINKAGE

#endif 而在include/asm-i386/linkage.h里则有更明确的定义:

#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))

__attribute__是GCC的C语言扩展语法。regparm(0)表示不从寄存器中传递参数。

另外,如果是__attribute__((regparm(3))),那么调用函数的时候参数不是通过栈传递,而是直接放到寄存器里,被调用函数直接从寄存器取参数。

此句引自了海中一浪的博客文章

asmlinkage确保它定义的函数从栈中读取参数而不是在寄存器中。

啥是__init __exit宏

| Comments

(学习内核笔记由此开始)

更详细内容请kernelnewibes 原始定义在include/linux/init.h

#define __init          __attribute__ ((__section__ (".init.text")))
#define __initdata      __attribute__ ((__section__ (".init.data")))

#define __exitdata __attribute__ ((__section__(“.exit.data”)))

#define __exit_call __attribute_used__ __attribute__ ((__section__ (“.exitcall.exit”)))

#ifdef MODULE

#define __exit __attribute__ ((__section__(“.exit.text”)))

#else

#define __exit __attribute_used__ __attribute__ ((__section__(“.exit.text”)))

#endif __init和__exit标记函数,__initdata和__exitdata标记数据。

此宏定义可知标记后的函数与数据其实是放到了特定的(代码或数据)段中。

标记为初始化的函数表明公在初始化期间使用。
在模块装载之后,模块装载就

会将初始化函数扔掉。这样可以将该函数占用的内存释放出来。

__exit修饰词标记函数只在模块卸载时使用。如果模块被直接编进内核

或内核不允许卸载模块。被此标记的函数将被简单地丢弃。

第一次工资

| Comments

终于发工资了。对于这一工资,高中时期就已经承诺了去处了。

记得那时总和某某人说,发了第一次工资就请你吃大餐。发了第一次工资就买什么什么东西给你。发了第一次工资就给妈妈爸爸买啥买啥的。而今真的发第一次工资了。那些好朋友却没有能聚在一起了。这第一次工资也没能实现它当年的承诺。用来交房租,水电费。还有还之前的欠款,以及这个月的生活费。第一次工资已经所剩无几了。生活逼迫得我们有时都喘不过气来。

一会回家,把第一次工资的三分之一给家里,爸妈,儿子终于赚钱了。

这第一次工资还交了个人所得税。TMD还成了纳税人了。偶觉得起征点应该是三千。三年再修定一次,调高不高低。因为太多的钱给虫子吃掉了。国家应该开源节流,不乱花纳税人的钱,这样国库就不会空虚了啊。我记得好像某个人大委员曾经说把个人所得税调得太高会剥夺公民纳税的权利。我当时听了这句话我就在想这个哪个狗娘养说的话,根本就不是人话。如果偶有了杀人的冲动,第一个就把这个人拿来练靶子。

既然偶现在也是纳税人了,那偶也有权说两句了吧,国内某些官员是狗娘养的。如果有人听了觉得这太愤青,不要紧。偶可以改口啊!偶改为:国内某些官员不是狗娘养的。这样总行了吧!

Copyright © 2017 - lerosua - Powered by Octopress