博文

目前显示的是 2006的博文

数学是学什么的?

Kurt Koffka在《格式塔心理学原理》一书中,对"心理学是为什么的?"做了这样一个回答:
"……凡是数学系学生不会在其学业完成之际,却不知道概括思维为何物,或不懂得概括思维能产生何种美妙而有力的结果……"
我总觉得,数学被太神化了

现在游戏的加壳技术越来越牛B了

拿雷曼4:疯狂的兔子来说。
主程序CheckApplication.exe只有308KB,无壳。而实际的东西都在Jade_enr.exe里面。这个有8.54M。采用的是SecuRom7.x的壳。(用peid什么都探测不出来)
据说WE9采用的也是SecuRom 7.x的壳。至今无人能破

连续性与聚类

连续性与聚类
在分析学中,对函数的连续性是这样定义的:
f是一个从X到Y的映射。x0属于X,
for any scalar a >0,exist scalar b>0,使得对于任意满足\(d(x,x_0) < a\)的x,有\(d(f(x),f(x_0))<b\)。则称f在\(x_0\)处连续。
即f把原象的一个小领域,映射到象中的一个小领域。
而对于R,C等数集而言,连续性则体现在紧性和处处稠密上。
连续性所带来的好处是,我们可以根据一点的值,估计其一个足够的小的小领域内的值。例如,f(x)如果在一点大于0,那么它在其一个足够小的领域内也一定是大于0的。一阶和二阶的Taylor展开则是建立在f的连续性和高阶可导的性质上的。而Taylor展开,则是非线性方程求解,以及非线性数值最优化的众方法的理论基础。
我的观点是,连续性降低了运算所需的数据量。它使得搜索更具有方向性。例如,假如我们的输入集是N个相互独立、毫无联系的个体,那么我们的算法一定至少是O(N)的。因为我至少要讲每个点都扫描一遍。而且往往,复杂度随着N的增大而高度增长的。
而经过排序的点,则在一定程度上体现了连续性。因此对于有序集的搜索算法,自然要比无序集效率高的多。
而聚类分析,所面临的两大难点就是,数据的规模很大,而且往往数据的维度也很大。我的观点是,对原始数据做适当的特征提取,然后数据就会在这些特征上呈现一定的连续性。
例如,假如数据集是各城市的降水量、温度、经纬度、人口数目、GDP增长率等等。
那么,经纬度相近的地方他们的降水量和温度就会很相似。
我们可以把降水量和温度合起来作为一个指标。
把经纬度作为X,Y坐标。
那么就可以绘得一张类似于二维灰度图的东西。
那么,我们就可以把二维灰度图的物体分割(边界线确定)技术用到聚类中来。
最后我们得到的将是一张气候带划分图。
然而往往,这种连续性不是一目了然的。原始数据的特征提取就成为一个难点中的难点。主成分分析(PCA)技术是一种比较常见而简易的方法。不过它只是对原始的特征集进行线性组合以企图得到新的特征。而我觉得实际的问题处理中可能用到的更多的是非线性的降维方式。
而另外一个问题,或者说,致命错误在于,我绘得的是一张点图。(一张白纸上很多个灰度不同的点),而不是一张完整的灰度图。例如,假如是一张完整的灰度图,我就可以根据一点,及其周围8个点的数据,来近似的求该点的…

毕业论文

毕业论文
毕业论文选题的时刻来了,并不是我以前所想的,可以自由的选择自己喜欢的方向。否则我就要去做类型论了。
目前选的是一个关于聚类分析、最优化的。明天我去找老师谈谈我的想法。
我现在为难的是呢,第一,要有理论性,否则别想毕业。第二,要有实用性,因为我是要找工作,要工作,总不能让老板认为他养了一个闲人吧?
我的计划是,把聚类分析用在图片分类上。
具体点,例如,blog上,有很多用户传上去的图片。我希望,能把他们的图片自动的归类,然后就可以放在一个统一的页面上显示了。(不用人工去对图片归类)
初步设想是,找块蓝布,然后拍摄几张水果图片,然后按品种分拣。
如果这一步能成功,就可以更广义的,把图片分类为风景、人物、漫画等,etc.
OMG~,这个难度太TMD的大了
再或者,根据用户的对不同新闻的点击情况,对用户的偏好进行分类。
(当然,这个,更难,因为需要NB的NLP的能力)

eyny上乱成一团

eyny上有太多大陆看来不合法的东西,于是就被伟大的防火墙给ban了
eyny上乱成一团,有人悬赏1000分求解。于是大家把各种各样的方法都列出来了。
哎……
若是我在国外有server,我会架一个vpn server,或者,至少,给自己开一个ssh,只要没有禁止X11
forward(一般而言禁止不了),那么就够了。这是最良好的终极解决方案,不过也是最昂贵的。
其次,便是tor了,最安全稳定,但是也最慢
最次,便是proxy了,最不稳定,但是偶尔比较快。
顺便说下我对gfw的猜测。它采用的是内容过滤,分词,然后抓关键字的方式,间歇性屏蔽IP。但是被屏蔽的IP会被记录在一张表中。一旦该IP出现的频率达到一定级别,就会被永久封禁。反之,如果一个IP被封禁了很久,那么它自然就不会在那张违规表中再出现了。那么可以视之为表现良好,可能会自动解除封禁。但是往往,会瞬间再度被封禁。
无论科技如何发展,只要国人对隐私真正的重视起来,内容过滤,毕竟是行不通的。

最大模原理

解析函数有保域性,它将开集映射到开集。利用这个定理证明最大模原理(非常值的解析函数在边界点上达到模的最大值),几乎是一目了然的。
否则,最大模定理的证明就需要从圆盘上的柯西积分公式导出中值定理,继而导出最大模原理。

明天考复变函数与积分变换

老天保佑
今天一个朋友过来玩,说计算机学院一个人(以前也是理学院的),天天不去上课但是还一直是年级第一(全年级大约11*30个人)。
我们宿舍的人笑笑,这种事情在我们专业是不可能发生的。因为即使你卷面成绩考100,依然未必能及格,更不要说考什么第一了。
为什么呢?
因为还有平时成绩。至少30%的比例。
举个例子,我们班主任,某天上课,结果教务处学风督导组的人来检查。那天,我们4个班(大约4*30个人),只来了70多个。而他对此居然不闻不问,继续上他的课,没有点名。对此,上面对他很气愤,扣了大约2000多的奖金,暂停转正(他刚毕业,还是试用期)
于是,你说,站在他的角度来讲,他会怎么对待这些逃课的学生?当然,无论你多聪明,逃课就是不滴。。。唉,可怜的大4,居然还按25%的比例挂人。
今天实变函数上课,老师说,"你看,这有些人,10多次不到了。"(他也是每节课都点名)。顿一顿,接着说,"考试之后,如果,你们在坐的,有人挂了,而我让这些10多次不到的人过了。挂了的人肯定觉得不公平,会来找我说:'老师,他天天不来上课你都让他过了,我每节课都来了,你还让我挂了...'。于是,我绝对会给大家一个公平的结果的"。言下之意,要么一个都不挂,要么,那些人就等着5月大补考吧。
唉……
一个人不去上课自学还能考全班第一,很正常。但是这样的事情如果出现在我周围,那就不正常了……

猜猜我现在在看什么?

《流星花园》
OMG~我真没想到,这片子。。真是让我看想吐。
首先,F4,怎么看也没记忆中那么帅。其次,对白实在是让人想吐。太……假了。
至于演员的演技那就不用说了,大家有目共睹哈!

狂野三人行

《狂野三人行》是部法国片。
拍于2004年,曾获柏林影展最佳同志電影。但是里面有很多镜头是限制级的,加以片中很多行为是有违伦理的。所以不推荐保守的女生观看。
影片开始的时候,是一首歌,
"Oh such a beautiful boy...
Oh such a beautiful boy...
I ask him,'Are you a boy or a girl?'
Are you boy...or you are a girl?"
影片的主角Stephanie是一个胸很大的美女。在路边靠出卖肉体为生。
(如果仔细看的话,在影片的前期就会发现她接客的时候,做爱的体位很奇怪)
在巴黎,她同时与两个双性恋的情人──法籍阿拉伯裔的迦米勒Jamel和苏联非法移民米克海 Mikhail同居一处。(Jamel和Mikhail都是男人)
Jamel也是靠卖淫为生,男女不拘,给钱就行。
Mikhail只会说俄语和英语(据说是偷渡来的),而Jamel、Stephanie等英语都很差。(Jamel把12读作"two and
ten"),所以Mikhail和其他人交流起来和困难。Mikhail有正当的职业,是在一家餐馆刷盘子。
Stephanie的母亲病危,Stephanie和Mikhail一起回到小镇照顾母亲。Jamel随后也来到了小镇。这是一个死气沉沉的小镇。Stephanie在这里回忆起小时候的事情。并去找到了她的初恋情人。遗憾的是...那个男子已经完全认不出她来。
Jamel和Mikhail经常睡在一起。这多少让Stephanie有些愤怒。
某天,Stephanie的母亲脱光了衣服,抚摸自己的身体。Jamel躲在门后看。Stephanie的母亲说,"你若是感兴趣,你就进来吧"。随后不久,Stephanie的母亲在绝望中死去。
Stephanie将小镇屋子里的一切能引起回忆的东西都撕毁,烧掉。
三个人一起回到了大城市,继续着以往的生活。
Stephanie其实是一个变性人。在影片的末尾,可以看到她下身还保留着……
这片子我很耐着性子看完,它场景切换的太快,很多简短的镜头一晃而过,我根本看不懂导演究竟想说什么。

改用左手操纵鼠标

最近课太少,于是就把电脑搬到了床上,由于我的床的方位,我就只能把鼠标放在左手的方位。
其实,渐渐的,也会习惯的。

可恶的江苏电信

可恶的江苏电信
我在江苏上学,学校用的是802.1x认证,南京某公司开发的客户端。但是只有win32版,于是我和一个朋友就分析协议做了Freebsd版。
但是有件事情很讨厌,我在winXP下上网的时候总是会莫名其妙的弹出广告。我起初以为我又中了什么恶意软件的招儿了(这种事情习以为常),可是后来,在freebsd下上网依然存在此问题。
昨天晚上,一个很偶然的机会,我进入到了一台负责认证的交换机,在它的配置文件里面看到了这样一句话
template notify 4
type advertisement "http://safety.86516.com/down/down.htm"
而这个网址,就是频频出现在我的电脑上的一个广告。
当然问题还没有这么简单。这个广告的插入是通过802.1x协议通过特有的客户端来投放的。
还有更绝的,就是在我打开spaces.msn.com这样的网站的时候,它会以一定概率弹出国内的某个IT网站。我起初以为这个IT网站和微软合作了。可是仔细一想,不大可能啊。微软从来不在页面上做弹出式广告。不过这个概率被设置的特别的小,以至于到现在我还是不明白它是怎么做到的。唯一可以肯定的是肯定是电信在交换机上又做的手脚。(我不相信我的Freebsd下的firefox会中adware)
换个角度想想,sina、sohu这些网站,可怜巴巴的靠页面上的广告盈利,是多么的不容易。页面稍微做的有一点不好,点击率就会下滑,广告收益下降,分析师降低股票评级。而电信呢?已经在很多城市开始上门安装他的新版的星空极速客户端。一方面是为了防止一条线路多台机器上网,而另一方面,试探性的投放一些广告,如果市场反应不强烈的话,那么正式出售这些广告业务后,一年的收益,将是一个天文数字。(显然,这样投放广告,效果要比去买什么baidu排名要实在的多。我可以通过中国电信直接买google的首页)
从此中国广告业,电信、网通一统天下。
p.s.当年微软要被分拆的时候,有个经济学家站出来反对,说,假如,我们现在有一个鞋厂效益很好,并占据了市场98%以上的份额,而现在,我们依据垄断法将之分拆,分成两个厂,一个造左脚的鞋子,一个造右脚的鞋子,结果会怎么样?显然,鞋子的价格只会上涨不会下降,消费者得不到任何好处。
纵观美国历史上历届分拆案,不都是依据不同业务(左脚鞋子、右脚鞋子)这样分的吗?
再看中国电信…

疑问:我的alt键不能用了

我刚从cvs下了最新的emacs23
把我一直在用的emacs23重新编译了一下
所用的参数是./configure --with-x --with-xft --with-gtk
--with-freetype -with-png --enable-font-backend --prefix=/home/snnn/sys/emacs/
但是呢,打开之后,习惯性的按Alt-x,它说,
"M-x is undefined"
但是Esc-x可以。
试了下22.0版的emacs,Alt-x也可以。Shell(csh)中用Alt+d也可以删除字符。说明我的键
盘配置没有更改过。
但是呢,最新版的emacs 23就不行了。
郁闷哦~~~~~~~~~~~~~~~

乱码的原因找到了

wxTextCtrl继承自wxTextCtrlBase,而wxTextCtrlBase继承自std::streambuf
std::streambuf是窄字节的
typedef basic_streambuf\ > streambuf;
于是在宽字符(wide char)版的wxWidget中,就出现了乱码问题。
示例代码wxTextCtrl* debugOutput; std::ostream *logStream; .... logStream=newstd::ostream(debugOutput); *logStream<<"你好"<<std::endl; 乱码的原因在于 streambuf 读取字符是一个字节(byte)、一个字节的读取的。
streambuf中的字符采用的是变长(multibyte)编码。
而wxTextCtrlBase中的实现int wxTextCtrlBase::overflow(int c){ AppendText((wxChar)c); // return something different from EOFreturn0; } 是把streambuf的每个单字节,当作一个unicode字符,插入到TextCtrl之中。
于是,以GB2312/GBK方式编码的"你好"这样两个汉字,就会被分割成4个unicode字符。
此外,wxTextCtrl的destructor不是虚的。如果我要从这里通过继承的方式修改overflow函数的行为,
需要承担一定的风险。
如果我一定要这么做,我必须在overflow函数中引入静态变量才能解决问题。如此一来,这个函数就不是线程安全的了

去哪里可以找教育网的可出国的代理啊

啊。。。啊。。。啊。。。。
我要出去

win下的802.1x客户端alpha版发布

版权:
本软件依照 GPLv2发布。Copyright (C) 2006 Charming Sun \me@sunchangming.com\This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.额外加上一条,禁止与中国电信有业务往来的任何商业公司使用本软件的源代码。我保留起诉的权利。
使用说明:
本软件尚属于Alpha内测版,BUG较多。
如果您使用中遇到了任何问题,请以邮件的方式联系我: me@sunchangming.com
1、如果更改了任何设置,建议重新应用程序以让它生效。
2、无论是点连接还是断开,无论是成功还是失败。你从界面上都无法得到任何回复的。(因为我还没有开发完)。
如果连接成功,你的IP会变的,此时你上网,如果成功,就成功了。
否则,打开帮助-〉NIC设备信息,先点释放IP,然后点重新分配IP。

世界为什么是平的?

如果世界是圆的,每个人都站在对等的位置上。
而实际不是,它是平的,很多人被抛向了角落,而另外一些人,站在中心上

累了,需要休息

混乱混乱混乱!!!!!!!!!、、、、、、、、、、、、、、、、
我悉心构造的Scheduler到了最后一步,需要实现最后一个command组件的时候,居然,居然,居然得到的答案是,无法在这样的接口上实现。
我真的很晕了!两天来写的东西需要大刀阔斧的重写。
我真的很晕了!!!!!!
我需要点时间休息,好好理理路子,重新审视下需求。
为什么?为什么?到一切都快要结束的时候,突然发现结构设计上有重大缺陷,要翻倒过来重写???
失败的架构,失败的架构
破脑袋
由她和他睡去吧。
晚安

一点想法

svg这样的矢量图相对于bmp这样的像素图而言
就好比连续函数之于离散函数我不妨,从处理svg图像入手??把我在学数值分析所用的那一套东西用上?

数学学了什么

刚才在床上证任何一个半正定矩阵都可以写成另一个半正定矩阵的k次方,不仅想到刚开始学数学分析的时候,证明任何一个非负实数都可以写成另一个非负实数的k次方(且这样的实数是唯一的),简单点说,就是要证任何非负实数的n次方根都是存在且唯一的。这种东西在初中生看来都是显然的问题。你让一个初中生计算4的正平方根是多少,它绝对会告诉你
"因为2*2=4,所以4的正平方根就是2"(你怎么知道3就不是?1就不是?你怎么知道这个问题你已经回答完了,这个问题没有其它的答案?)如果这个问题交给一个数学系的学生,则首先得证明4的正平方根是存在的,然后证明4的正平方根是唯一的,然后计算出来它等于2,然后告诉你,2是这个问题的唯一解。昨天上课的时候从抽屉里面拿了一本高等数学的考研题集来看,非常的无奈。非常的讲究技巧性。无论什么东西要求极限,先看能不能做同阶无穷大(无穷小)替换,然后就调洛必达法则上下求导,然后就告诉人,"看,我做出来了。"最可恨的是那作者在题目后面点评:
"易犯错误:考生对极限运算和同价无穷小不熟悉,导致得出结果为0或者说极限不存在"这就完全是一种逻辑上的颠倒,把前提当结论。那天,小蓓让我帮忙写一些东西,来举例说明一个中学生是多么多么的热爱数学。她所能想到的,就是模糊数学啊、统计学啊这些能在实际当中切实用到的数学分支,来激发中学生的兴趣。而我费了好大的劲想她解释,对于一个中学生水平的人而言,要想在数学方面继续走下去,那么必须先从"实数为什么是连续的"、"实数为什么比有理数多"这些问题问起。昨天我和阿勇出去吃饭,走在路上还在谈到了数学。他说他发现现在银行有自动存款机,他觉得好先进。于是我们就讨论怎么自己开发一个自动存款机。首先想到的是要对输入信息进行模糊聚类,这样才能分辨出10元、50元、100元的钞票。而我们刚刚在学模糊数学的时候学过模糊聚类,而我现在也正在和马老师做trust
region和聚类分析。然后感叹一下,数学真的是无处不在,我们学的东西都是很有用的。可惜……可惜……国内有实力开发自动取款机的公司太少。就算我们开一个这样的公司,2个山里来的穷孩子,也没有渠道可以卖出去。我后来才明白我之前走了不少弯路。例如先学MFC,后学怎么写C++控制台应用程序、CGI.
大一的时候就在学神经…

gatsby

刚刚囫囵吞枣的读完了《了不起的盖茨比》(The tireat Gatsby)第一遍。读完之后我一直在想一个问题,Gatsby了不起在哪里?这本书让我想起了大一时读过的《天堂向左,深圳向右》。并不是在一个地方生活过便可以了解一个地方,在北京、上海,我结交了不少和我年龄相仿的年轻人,都不满30岁,但是没有一个像Gatsby这样有钱,这样执著,更甭说死的这般莫名其妙。故事以我难以想象的方式结局了。《天堂向左,深圳向右》去描述主人公如何发家,如何离弃最初的恋人,又如何挥霍,又如何空虚、怀旧。而《了不起的盖茨比》将这一切结为一个个疑问,描述个大概,然后任读者去想象。唯一可以肯定的是,Gatsby是个暴发户,他的钱来的不光彩。Gatsby 出身不好,但是他是一个聪明而勤奋的人。但是这并不能说明他了不起。他再见戴西时的那拘谨和紧张,是整本书最令我感动的。他们俩之间的爱情故事是被分散成一个个小碎片写在书中,可是我越读越不觉得Gatsby
有什么了不起。我觉得他值得悲叹。就好比他的死。贝克是一个橄榄球运动员,我很难想象一个大头肥耳的运动员能这么敏锐觉察出妻子的变化,然后这么精巧的害死了Gatsby。与之相对的,他们是贵族,而
Gatsby 无论再有钱,也只是一介平民。贵族的一举一动都是高雅的,而 Gatsby 的高雅都是拘谨。Gatsby
为什么会死呢?为什么……Gatsby死后戴西有想过他吗?还是说,戴西最迷人之处就在于全身上下无处不显露着金钱的光辉?贝克·乔丹让我想起了《围城》里面那位高贵的留洋回来的苏小姐。《了不起的盖茨比》最适合我这样的傻孩子去读,因为我没有钱,我出身贫穷,而我将来会很有钱,我确信。不过大概不会有 Gatsby
那么有钱。哈哈p.s.最近几天在看Trust
Region算法,很有可能毕业设计要从这里选题了,而不是事先计划的类型论与机器证明。如果能从这两个风马牛不相及的论题之间找到一个接合就好了。烦路过者给一些指点。今天是张r老师的生日,我9号,她老公19号,她29号,所以我才记得如此清楚。
祝漂亮可爱张r老师生日快乐,生活美满,身体健康,薪水涨涨涨,早点买套大房子然后租给我,嘻嘻。

"通过手机观看奥运赛事直播"

"通过手机观看奥运赛事直播",刚在华尔街日报上看见这句话,用于对3G的展望。
我在想,这对于传统网站,该是多么大的一个冲击。
无论是sina还是sohu,都将目标聚焦在了2008。

难办

意外的发现我这个网段的交换机提供了一个23端口可以输入密码
想探测一下它的密码
于是就扫了一下端口,它竟然说我感染了病毒把我封了。害得我换了个mac才爬上来。
奇怪的是它开了pop3和smtp端口,但是又不像是运行的有这样的服务。
咋办?

特征向量的疑问

假如μ、λ是矩阵A的两个不同的特征值,x是A关于特征值μ的左特征向量,y是A关于特征值λ的右特征向量。那么x、y正交。这个很好证明。
但是,反过来。假如μ=λ,是A的单重特征值。那么x、y不正交,这个怎么证明?条件稍微放弱一点我会证。
假设A是n*n的矩阵。如果A的所有特征值都不相同,那么A有n个右特征向量,它们相互正交。
假如μ、λ是矩阵A的两个不同的特征值,x是A关于特征值μ的左特征向量,y是A关于特征值λ的右特征向量。那么x、y正交。而x是A的左特征向量,如果x与A的某个右特征向量正交,由上面可知,它与其它n-1个特征向量都正交。n维空间中不可能出现n+1个两两正交的非零向量。于是矛盾。

新发现

中越边境交易非常频繁,而且成功率很高。
不过不知道把人从那里运到华东华北,花费大不大

矩阵的2范数

今天做卷子,我以一个巧妙的方式从向量的2范数导出了矩阵的2范数。
采用的是构造一个函数,求导,它的极值点恰好是矩阵的特征向量在证明和范数有关的问题是,一定要牢记,有界闭。欧氏空间中的有界闭集是紧集,这样才能保证一致连续,才能确信最值、中值的存在单位圆,恰好是这样一种情形

Dungeon Siege 2的反调试做的真是厉害

用ollydbg直接运行,不行
附加到进程,得到
ERROR_MOD_NOT_FOUND (0000007E)
Dungeon Siege 2的mod是什么东西,我至今不甚清楚

unitary matrix

计算矩阵的特征值是一件困难的事情。由于相似的矩阵具有相同的特征值,所以我们能想到的最直接的方式就是通过一系列相似变换把矩阵变化到一个易于求解的形式。3个易于求解的形式:
1、对角阵。其对角线上的元素就是其特征值
2、上/下 三角阵。其对角线上的元素就是其特征值。对角阵其实也是特殊的对角阵。
3、三对角矩阵,可以方便的化为上面两种形式。三对角矩阵是特殊的Hessberg矩阵。而相似变换要求矩阵的逆,而矩阵的逆是难求的。特殊的矩阵的逆是容易求的,例如Unitary matrix,它的逆就是它的Hermite伴随。
Unitary matrix组成的相似变换也够成一个群,就是Unitary group,它是一个闭集并且有界,所以它是一个紧集。Unitary matrix中最重要的两类就是Givens Matrix和Househoulder Matrix,分别对应几何学上的相似变换和对称变换。一个重要的定理是,对于任何一个矩阵A,总是可以找到一个unitary matrix U,使得A通过U相似于一个上(下)三角阵。即
UA=RU,其中R是上(下)三角阵,U是unitary matrix.一个特殊的情形是,实对称阵可以通过一个实unitary
matrix相似到一个对角阵。但是对于一般的矩阵不行,因为它的特征值可能是复数。如果这样可以的话,那么那个对角阵上的对角线的元素就应该有复数,而实际上,实矩阵之间的相似变换是不可能出现复数的。但是它可以通过实unitary matrix 相似到一个Hessberg
matrix,更特别点说,相似到一个三对角矩阵,而这就是Givens变换求矩阵特征值的基本思想。而QR方法,就是通过一系列Householder变换把矩阵的列向量单位正交化,采用的就是传统的G-S单位正交化方法,在这里,就是QR方法,也就是很多个Householder变换。

顶级黑客

刚才借了移动硬盘来传文件然后去拉屎听着音箱兹拉兹拉的响,我就在策划开这么一家公司,开发一种很小的电磁感应器,偷偷的放在服务器的机箱内,然后装做普通服务器的样子,拉到电信机房去托管。电磁感应器外观起来看起来像硬盘,内部要设自毁装置,数据存储在服务器的硬盘中通过网线传回来。然后在家里解析数据。然后……被黑的服务器打死也猜不出他们的服务器是怎么被黑的,改管理员密码、换防火墙、换系统,做什么都没用。最后,乖乖的屈服,交上保护费来。

gcc最近让我很窝火

tests_conv in realloc(): error: pointer to wrong page
tests_conv in malloc(): error: recursive call
tests_conv in malloc(): error: recursive call
tests_conv in malloc(): error: recursive call
tests_conv in malloc(): error: recursive call
tests_conv in malloc(): error: recursive call
tests_conv in malloc(): error: recursive call
...
一运行,类似的错误狂出不止
仔细一查,原来是调用wcsnrtombs的时候越界了。

艰难的UTF-8之旅

在打完数个patch之后,FreeBSD的mount_ntfs命令终于可以正确把的把汉字从UCS-2转换到UTF-8了
My god!
为了让emacs能正确的处理utf-8文档,我从cvs checkout了unicode 分支的emacs.
阿门!
痛苦永无止境。

可怜的C++

哎,C++哦,懂它的语法就好了
它的标准库嘛……
等再过几年再说吧。
反正现在,不要轻易的用。尤其是locale之类的。
换个不支持的平台怎么办?
旧代码扔掉,重写。
要用就用C的库,流行!

正在从cvs down emacs23

http://www.m17n.org/mlarchive/mule/200601/msg00000.html
emacs \< 21.4 does support utf-8 chinese
emacs 22.x (CVS MAIN trunk) provide limited utf-8 chinese support
emacs 23.x (CVS emacs-unicode-2 brunch) have full utf-8 chinese support,
but it's not a very stable version, it's in alpha state
正在从cvs down emacs23
准确点说,是,emacs unicode 分支
目前还是alpha版
不明白,为什么vim从6.0开始就对utf8完美支持
emacs到今天了,无论是unicode还是xft,都需要大讨论一翻,然后在N年以后才会被加入。
OMG~
最新的喜讯是emacs23中在暑假的时候终于把xft的代码merge进去了

设置metacity的主题

gconftool-2 --type string --set /apps/metacity/general/theme Ana

flash

迫于flash的缘故我换了linux-firefox,结果发现不能在其内输入中文
无奈。
加装一个opera
发现情形也没有好多少

gcc 43编译成功

没有编译gcj
语法上的细节变化,有待再研究
反正,在FreeBSD下面,是无法用--clocale=gnu的。编译失败。
我强行加上了nls支持
现在,gcc的错误信息可以输出漂亮的汉字了

autotoolset 年久失修

用autotoolset的时候经常会卡在autoheader这一步,
autoheader: warning: missing template: CXX_HAS_BUGGY_FOR_LOOPS
autoheader: Use AC_DEFINE([CXX_HAS_BUGGY_FOR_LOOPS], [], [Description])
autoheader: warning: missing template: CXX_HAS_NO_BOOL
autoheader: warning: missing template: NDEBUG
autoheader: warning: missing template: YOUR_OS
为了查出原因何在,今天可费了好一翻功夫。
以YOUR_OS为例,它是在m4/lf_host_type.m4中定义的
AC_DEFUN(LF_HOST_TYPE, [
AC_CANONICAL_HOST
if test -z "$host"
then
host=unknown
fi
canonical_host_type=$host
if test "$host" = unknown
then
AC_MSG_WARN(configuring for unknown system type)
fi
AC_SUBST(canonical_host_type)
AC_DEFINE_UNQUOTED(YOUR_OS,"$canonical_host_type")
])
我仔细查了一下autoconf259的手册
-- Macro: AC_DEFINE_UNQUOTED (VARIABLE,
VALUE, [DESCRIPTION])
-- Macro: AC_DEFINE_UNQUOTED (VARIABLE)
没有一个宏接受两个参数。
故,把
AC_DEFINE_UNQUOTED(YOUR_OS,"$canonical_host_type")
修改为
AC_DEFINE_UNQUOTED(YOUR_OS,"$canonical_host_type",[canonical host type])
AC_DEFINE(CXX_HAS_NO_BOOL)修改为
AC_DEFINE(CXX_HAS_NO_BOOL,,[C…

搞定!!!

mp3可以用了。
p.s.xmms可以用手柄控制。FreeBSD下装了linux_js驱动即可
左右是切换歌曲
上下是增减音量

mp3插上去不认

朋友的老mp3不用了,就送给我了
可以插上去后不认
我的系统是FB6.0
他显示:
usbd_setup_pipe: failed to start endpoint, IOERROR
我打开调试后,详细的错误日志如下
Nov 6 13:00:03 localhost kernel: umass0: SigmaTel, Inc. USBMSC Audio Player, rev 1.10/0.01, addr 2
Nov 6 13:00:03 localhost kernel: umass0: SCSI over Bulk-Only; quirks = 0x0000
Nov 6 13:00:03 localhost kernel: usbd_setup_pipe: failed to start endpoint, IOERROR
Nov 6 13:00:03 localhost kernel: device_attach: umass0 attach returned 6
Nov 6 13:00:42 localhost login: ROOT LOGIN (root) ON ttyv1
Nov 6 13:01:16 localhost kernel: umass0: at uhub1 port 1 (addr 2) disconnected
Nov 6 13:01:23 localhost kernel: umass0: SigmaTel, Inc. USBMSC Audio Player, rev 1.10/0.01, addr 2
Nov 6 13:01:23 localhost kernel: umass0: SCSI over Bulk-Only; quirks = 0x0000
Nov 6 13:01:23 localhost kernel: usbd_setup_pipe: failed to start endpoint, IOERROR
Nov 6 13:01:23 localhost kernel: device_attach: umass0 attach returned 6
Nov 6 13:02:51 localhost kernel: umass0: at uhub1 port 1 (addr 2) disconnected
Nov 6 13:…

正在编译gcc4.3

用的是2006年11月4日的包
FreeBSD自带的gcc,对locale的支持太差。
只好自己编译
哎,郁闷!

一条命令,安装整个kde

pkg_add -r ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/i386/packages-6-stable/All/kde-3.5.4.tbz

给FreeBSD用户推荐一个插件

flashblock
禁止显示所有的flash
也不会提示你安装flash插件。
原因很简单,若是用firefox或者mozilla的话,每打开一个含有flash的页面,都会弹出来一个窗口提示你安装插件,就像当年的3712,
baidu工具条一样烦
“自从有了flashblock,我的一切烦恼都没有了!”

尴尬

最近一件事情弄的很尴尬。
某个人让我帮他的网站改版,而我磨磨蹭蹭了一个月,最后还是没有动手,只是帮他的服务器做了一些日常维护。
原因很简单,他用的是盗版的asp的程序写的后台,他面临的第一个问题是盗版的序列号到期了。那么好吧,把他的盗版后台升级到新的版本,然后换新的序列号(违法的事情交给别人来作)。
紧接着,我发现他的整个网站都是由这个后台生成的。因为这个网站没有专业人员来维护,所以没有人为这个网站写过一行代码。
而我,作为一个程序员,想法很简单,你要我改版,那么我修改源代码,把你需要的功能加上去就是了。(我没有这个网站的后台登录权限)
可是,面临的问题将是,我走之后,这个网站就无人可以维护了。而且,他新换的序列号也只有一年的期限,一年之后……
也许我大可不必考虑一年之后的事情,我只需要拿了钱就走人,因为我未必会在这个城市呆到07年。
可是,这样的工作让我很不爽。如果我继续拿着那套盗版系统给那个网站继续做下去,某些朋友和同事一定会表示反感。例如徐继哲,一定会跳出来大叫说他看错了人。
很简单,坚持自己的原则,我是对的!

splash_bmp要怎么设置video mode?

splash_bmp: No appropriate video mode found
奇怪!

Xpt出了很多warnings

Nov 1 18:41:47 localhost Xprt_33: No matching visual for __GLcontextMode with visual class = 3 (32772), nplanes = 12
Nov 1 18:41:47 localhost Xprt_33: No matching visual for __GLcontextMode with visual class = 3 (32772), nplanes = 12
Nov 1 18:41:47 localhost Xprt_33: No matching visual for __GLcontextMode with visual class = 1 (32774), nplanes = 12
Nov 1 18:41:47 localhost Xprt_33: No matching visual for __GLcontextMode with visual class = 0 (32775), nplanes = 12
Nov 1 18:41:47 localhost Xprt_33: No matching visual for __GLcontextMode with visual class = 0 (32775), nplanes = 12
Nov 1 18:41:48 localhost Xprt_33: Could not init font path element /usr/X11R6/lib/X11/fonts/, removing from list!
谁知道是为什么啊?
郁闷!

求助,声音的问题

我以前的windows manager是windows maker
最近换成了gnome2+sawfish
现在出现一个问题
gnome-terminal,emacs下,出错的时候是主板在响,而不是声卡
但是我的beep-media-player放歌是正常的
gnome2启动的时候也可以听见正常的启动音效

pkg-config用起来不错

CFLAGS+= `pkg-config --cflags ACE` -I. -DHAVE_CONFIG_H -Wall -pthread
LDFLAGS+=`pkg-config --libs ACE`
这样写就可以了,省去不不少麻烦。
不过还不是不懂uninstall.pc是做什么的。

重新编译cairo

今天在X启动的 logs里面看见这个
Warning: FreeTypeRasteriseGlyph() returns an error,
so the backend tries to set a white space.
FreeFontPath: FPE "/usr/X11R6/lib/X11/fonts/misc" refcount is 2, should be 1; fi
xing
且,gdm变成英文的
后来才发现需要重新编译cairo
重新编译后,一切问题都解决了

SML简介

SML是指Standard Meta-language
ML(Meta-Language)是一门较早的Functional Language,是当时Type
System理论发展到巅峰时期的作品。由于Type
System和定理的机器证明之间的强烈对应性质,ML从设计之初,就主要被广泛用于定理的机器证明领域,而Lisp,则是较为大众化的Functional
Programming language,活跃在AI的各个领域。
ML后来出现了很多方言,例如Caml。
为了结束混乱局面,于是人们开始着手制定ML的标准,标准化后的ML称为Standard ML(SML)
SML的第一个标准是在84-88年制定,90年颁布,《 Definition of Standard ML》, (Milner,
Tofte, Harper, MIT Press, 1990)。称为SML-90
第二个标准是SML 97。 《The Definition of Standard ML (Revised) 》(Milner,
Tofte, Harper, MacQueen, MIT Press, 1997)
SML 97的一个重要特点就是语言规范中加入了SML 基本标准库。
SML 97的三个主要亮点:
1。The elimination of imperative type variables. The role of imperative
type variables in constraining polymorphism in the presence of effects
is now played by the value restriction, which allows the type of a val
binding to be generalized only when the right hand side is an
expression in a restricted form called a value expression. A value
expression is either a constant, a variable, a function expression
(i.e. a lambda expression) or is built from these elements usin…

把gnome的默认的window manager换成sawfish

只需要三句命令
# portinstall sawfish
# killall metacity; sawfish &
# gnome-session-save --gui

xrandr,查看X的分辨率

用xrandr命令可以查看X的分辨率和刷新率
例如:
$ xrandr
SZ: Pixels Physical Refresh
*0 1024 x 768 ( 321mm x 241mm ) *85
1 800 x 600 ( 321mm x 241mm ) 85
Current rotation - normal
Current reflection - none
Rotations possible - normal
Reflections possible - none

让gnome别用utf-8

我的向来用惯了gb2312,GBK,但是gnome默认用的就是utf-8.而我的文件大多数都是以 GB2312的方式存储的,文件名也是,挂载windows下分区的时候用的也是GBK,于是乱码是免不了的。
我找啊找,原因在哪里呢?
后来发现是gdm的错。
解决方法是:打开/usr/local/etc/gdm/locale.alias
找到zh_CN.UTF-8,然后把zh_CN.GBK加在它前面即可。

gnome-terminal 2.16用起来不习惯

1。没有了工具栏
2。以前的快捷键都不能用了。我现在想复制一段文字都十分困难。
3。我习惯了用Ctrl+Shift+n开一个新terminal,现在也不行了。
4。它似乎改用了从*.glade文件动态载入 GUI,更慢了。

less的字符集设置与汉字编码范围

我们发现,有时候,用less打开一个文件显示的是乱码,而有时候,是正常的。
有两个关键性的环境变量与此有关
LESSCHARSET 和 LESSCHARDEF 。
先解释一下less是怎么解析字符的。
less把字符分为3类。
普通字符(normal characters):可以直接在屏幕上显示
控制字符(control characters):文本文件中的控制字符,不能直接在屏幕上显示,例如回车,换行
二进制字符 (binary characters):除以上之外其它的字符。
为了说明一个字节究竟是属于这三者的哪一类。我们需要用LESSCHARDEF 环境变量来说明。
例如
setenv LESSCHARDEF 8bcccbcc18b95.b
其中,"b"代表binary,"c"代表control,"."代表normal
8bcccbcc18b95.b的含义是:
0x0-0x7是binary characters
0x8 是control character
0x9 是control character
0xA 是control character
0xB 是binary character
0xC 是control character
0xD 是control character
然后下面18个是binary characters,0xE-0x1F
0x20-0x7F,一共95个字符是normal characters
后面的,其他的未知的,统统是binary characters.
我目前用的less的版本是less 381,Copyright (C) 2002 Mark Nudelman。
下面看一张表,是LESSCHARSET和LESSCHARDEF 。
ascii 8bcccbcc18b95.b
dos 8bcccbcc12bc5b95.b.
ebcdic 5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b
9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b.
IBM-1047 4cbcbc3b9cbccbccbb4c6bcc5b3cbb…

编译mplayer.Pre8的时候出错

demux_ogg.c:363 error: invalid
operands to binary &

又上不去QQ了

QQ: Using UDP without proxy
QQ: Connected.
QQ: ==> [09517] QQ_CMD_GET_LOGIN_TOKEN, from (QQ Server 0000)
QQ: ack [09517] QQ_CMD_GET_LOGIN_TOKEN, remove from sendqueue
QQ: ==> [09518] QQ_CMD_LOGIN, from (QQ unknown version)
QQ: ack [09518] QQ_CMD_LOGIN, remove from sendqueue
QQ: Decrypt login reply packet with inikey, 110 bytes data[0] is 6
QQ: Unknown reply code: 6

病毒带来的记忆

昨天,用xlock锁屏幕的时候突然看见一句很熟悉的文字。
“All work and no play make Jack a dull boy”
我诧异的看了好一半天,好熟悉的文字啊。
是什么呢?
我在unix的history中拼命搜索。
找不到什么。
后来意外的,在一篇介绍病毒的文章中发现。
这是,一个早期的,很出名的病毒!
“Today is Sunday ! Why do you work so hard ?
 All work and no play make you a dull boy !
Comeuon ! Let’ s go out and have some fun !”
当然,这句话本是是一句俗谚,出处不祥。有英语专业的路过,麻烦帮我查下。
Thanks!

指针的安全性

指针和引用几乎是每个语言的必要元素。即使是ocaml这样的函数式语言,也不得不提供这样的东西。
先考虑,一个语言中为什么要有引用。
假如该语言中的所有函数的参数都是按值传递,而且变量只有值类型,没有指针和引用。那么我们根本无法实现最、最基本的,swap这样的函数。
而对于函数式语言,引用,有2个作用
1。为变量添加别名
2。提供一种修改变量值的方式。
例如
# let x=10;;
val x : int = 10
# let y= ref x;;
val y : int ref = {contents = 10}
# y := 5;;
- : unit = ()
# !y;
;;
- : int = 5
# x;;
- : int = 10
y的值通过赋值运算符号被改变,而x的值不受影响。
下面演示 mutable的单元
# let r=ref 13;;
val r : int ref = {contents = 13}
# let s=r;;
val s : int ref = {contents = 13}
# s :=82;;
- : unit = ()
# !r;;
- : int = 82
可以看到,r的值,悄悄的通过s改变了。
我们简单的将其来看作一个指针,那么对于一个指针,它有最简单的2种运算,引用与解引用
比较 引用 解引用
C p=&x; *p;
ml p=ref x; !p;
先看引用。
首先,当一个指针被创建的时候。
1。根据所指向的类型,可以推导出该指针的类型。
2。它的类型就此确定,且不应该再改变。
如果我们不是在它被赋值的时候就把它的类型记录下来,而是到了后面根据它所出现的位置而动态推导它的类型。那么将会出现非常尴尬的,循环依赖的状况。例
如:
(l →
λx:Nat.(!m)x,
m → λx:Nat.(!l)x).
再看解引用。
首先,如果要对一个指针解引用,那么,我们必须要能确定该指针指向的是什么类型。否则我们就无法知道解引用返回的是什么类型。那么就无法对它所在的表达式
进行类型推导,这是违反基本的类型安全规则的。
大多数情况下,我们很容易得知一个指针的类型。
但是,如果我们对该指针进行了某种运算的话。
例如
char* p=&x;
p++;
现在p指向的是什么类型呢?
如果我们再写
*p;
那么它的执行状况将是未知的。
(回想STL,它将iterator明确的分为5种类型。其中最基础的三种是input iterato…

麻烦

升级linux_base到fc4后,运行dgen出现
"init SDL: No available video device"
而gens则是彻底一闪而过,什么都没有

为什么要引入类型?

如果每个变量都没有类型,那又如何? 类型信息,可被用来判断一个表达式是否是可求值的。 即,在不知道这个表达式的各变量的值的情况下,
之根据上下文类型信息,
静态判断该表达式是否是可求值的,且推导出该表达式的的结果类型。 什么样的表达式是合法,但是不适合作静态类型推导的?
例如这样的
x?3:true
我们无法得知该表达式究竟是会返回一个整数类型的值还是一个bool类型的值。
于是无论是C还是ocaml,都规定其两个分支必须返回相同类型的值。 再例如: struct Pair{ int first; int last }; int x; Pair p; ... if(x?3:p){ } 如果这样的代码也合法,那么我们无法静态的检查if条件语句的语法有效性。
再设想一下,C是完全没有动态类型信息的。C++本来也没有。
如果我们是在运行时才发现我们将错误的类型传递给了if的条件子句。那么……
1。程序只能异常的执行,或者突然终止而且我们不知道它为什么会终止
2。我们无法给出任何有价值的出错信息。只能告诉用户if语句执行失败。 于是我们为项引入类型信息。
但是,我们希望:
去处类型信息后再求值,与求值后再去除类型信息,应该得到相同的结果。 就好比一致连续性对于函数算子的可交换性一样,上面的限制,对于有类型项的求值运算,至关重要。 我希望能在图书馆找到martin-lof类型理论方面的书籍,尽管这已经是40年前的理论了。 再说序列点。
C/C++中的分号被称作一种senqence point,它标志着一个语句的结束。
那么,其语义是什么? 如果把每一行语句都抽象成一个函数。那么可以把其变量值的上下文理解为函数参数,把其返回值,作为下一个函数的参数。
只不过,下一个函数的执行过程中永远用不到这个参数。 从lambda演算的角度来讲。
m;t
可以被理解为
λx.t m
其中项t中不含有x.

nv的显卡驱动爆出严重的安全漏洞

http://www.vuxml.org/freebsd/a6d9da4a-5d5e-11db-8faf-000c6ec775d9.htmlThe NVIDIA Binary Graphics Driver for Linux is
vulnerable to a buffer overflow that allows an attacker to run
arbitrary code as root. This bug can be exploited both locally or
remotely (via a remote X client or an X client which visits a malicious
web page). A working proof-of-concept root exploit is included with
this advisory. The NVIDIA drivers for Solaris and FreeBSD are
also likely to be vulnerable. 4。 Solution Disable the binary blob driver and use the
open-source "nv" driver that is included by default with X. 如果你不希望你的电脑直接这么轻松被hacker操控的话,那么唯一的解决办法就是暂时不要使用nv的开
发的该显卡驱动。使用你的X server自带的驱动

使用 GNU CC 的预编译头文件加快编译速度

intron写的,很不错!

重回FreeBSD

经过几天几夜的奋斗,学校的上网客户端再次被破解。
于是,我又可以舒服的在FreeBSD下上网了。
于是,我暂时又不必担心硬盘不够用了。FreeBSD下一共80G的硬盘,现在还剩30G呢。
哎,开心!
说下这次的心得。
破解的时候,一定要静态代码分析与动态调试双管齐下,说简单点,就是IDA和ollydbg切换着来。
对于ASProtect的壳,恢复IAT后,即可用ollydbg调试了。不用再补区段再做一下步了。
另外,ethereal和ollydbg不能同时开,否则,系统一定僵死!

IAT表

IAT的全称是Import Address Table。
对于每一个引入的可执行文件(例如dll),有一个镜像引入描述符(IMAGE_IMPORT_DESCRIPTOR)。typedefstruct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null import descriptor DWORD OriginalFirstThunk; // RVA to original unbound IAT (PIMAGE_THUNK_DATA) }; DWORD TimeDateStamp; // 0 if not bound, // -1 if bound, and real date\time stamp // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND) // O.W. date/time stamp of DLL bound to (Old BIND) DWORD ForwarderChain; // -1 if no forwarders DWORD Name; //RVA,指向字符串,是这个可执行文件的名字。例如"ACE.dll" DWORD FirstThunk; // RVA to IAT (if bound this IAT has actual addresses) } IMAGE_IMPORT_DESCRIPTOR; dll的forward不好讲,因为很多都是undocumented的.我们着重关心两个指针,OriginalFirstThunk和FirstThunk。
Characteristics一词出于历史原因,故在此给它了一个别名,OriginalFirstThunk。
OriginalFirstThunk和FirstThunk是两个DWORD值,存贮着两个RVA数值,其实它们就是两个指针。
OriginalFirstThunk和FirstThunk实际上都是指向同一个数组。
前者,我们称之为INT,而后者,我们称之为IAT.IAT是一个IMAGE_THUNK_DATA类…

memcpy的效率

有些刚开始学C++的人误以为,有了std::copy就不需要memcpy这样的低级C函数了。
而事实上,memcpy的最大的好处,还是在于它的高效。我也是最近两天反编译C程序的时候才发现这一点。
众所周知,memcpy这样的函数一般都是用汇编语言写的。下面我给出C语言的实现。void* memcpy(void* dst,constvoid* src,size_t N){ size_t t=N; N>>=2; while(N--) *((int*)dst)=*((int*)src); while(t--) *((char*)dst)=*((char*)src); return dst; } 因为,在32bit的计算机上,4字节、4字节的copy,要比一字节一字节的快。而实际在x86等cpu上运行的时候,这些都是通过串移位指令完成的,尤其是对于支持SSE的CPU,可以以更高的效率完成串移位。
嗯,所以,在实现标准库的时候,应当利用模板特化,为类型为char、int这样的类型书写专门的std::copy的实现。

为自己留有余地

我们常常会遇到这样的情况,我们需要访问某个类的私有成员,而这个类是别人写的,我们不能改动它。
怎么办呢?看我下面的戏法。
假设我们有这样一个类#define ReadOnlyAttr(TYPE,NAME) \ private: \ TYPE NAME; \ public: \ TYPE get_ ## NAME (){ \ return NAME; \ } class Pos{ public: ReadOnlyAttr(int,x); ReadOnlyAttr(double,y); }; 它有两个成员,int型的x,和double型的y,但是我们只能读取该值,不能设置。这多少让人很郁闷,我们希望绕过这个限制。
于是我定义了这样一个宏。#define RESERVED_INTERFACE \ template <typename T,typename R> \ R& _unusedInterface(const T& t) { 佛说,圣波若波罗蜜多,你别编译我!} \ template <typename T,typename R> \ const R& _unusedInterface_const(const T& t) const{ 别编译我!!!} 它看起来很奇特,因为它有问题!它的函数体内根本就不是有效的代码。(如果这样的函数你也能编译过去,我代表火星起诉你!)
然后我们把这个宏插入到原来的类中。(在设计类的时候要为自己留有余地)class Pos{ public: RESERVED_INTERFACE ReadOnlyAttr(int,x); ReadOnlyAttr(double,y); }; 于是呢,这就相当于给我们留下了一个后门。以后我们就可以通过这个后门进来了。由于这段代码是绝对无法编译的,所以你不用担心太多。
然后,我们就要偷偷的进入这个后门了。#define name3(a,b,c) name3_hidden(a,b,c) #define name3_hidden(a,b,c) a ## b ## c #define name4(a,b,c,d) name4_hidden(a,b,c,d) #define name4_hid…