
拯救自己的人就是自己!
掩上书卷,我忽然想起埃及神庙上的那句话:认识自己!所以写下上面那段话。
当手机上的书看完之后,无意之间在新浪的读书频道看到这本书,仿佛有这样的只言片语——心理励志。所以迅速找到电子版,开始阅读。记得大一的时候,看得最多的书就是心理学方面的书,这也许就是我为什么选择这本书的原因。毕老师的书看的不多,但是对她却有一番敬意(不知道为啥,感觉吧)。虽然这本书是电子版,虽然整个读书过程都是在wc时、临睡前的消遣,但是这一点也没有影响我对毕老师作品的欣赏。虽然之前曾经看过部分书评,说什么上半部很精彩,下半部太平淡之类。虽然我个人也觉得有些主人翁的言辞不够贴切实际,但这一切的一切都不在我的讨论范围内,我想这也不是毕老师所要表达的意思(个人理解)。
如今社会,心理学的发展随着社会同时在高速发展,为什么我们自己或多或少的有这样或那样的心理问题,最后总被归结成我们每一个人都有病,可我想绝大部分都不是什么大问题。只是缺少沟通、缺少交流、缺少倾述!我不了解现如今的心理学发展、不了解心理医师究竟如何去面对到访者,请允许我透过毕老师的作品做一番猜测(具体的涉及到的作品细节我就不详述了):
第一、心理医生大部分只需要倾听。他们不能把任何个人主观意见带入来访者的整个治疗过程,只是引导。引导什么?引导来访者自己去寻找答案。
第二、心理医生不能将自己置身于来访者的故事中,需要始终保持中立的态度。
第三、催眠确实存在,这个不容怀疑。记得毕业时在川师大培训时,川大的一个教授(格桑?洛桑?记不清楚了。也是搞心理学的)曾经就讲述过自己的催眠经历。我一直对此深信不疑。我相信催眠会将来访者尘封的记忆或者是伤口再次揭开。这也正是我这一点要说的——心理医师,不是保姆,不是慈善家,他们会利用各种手段,毫不留情的揭开来访者早已结痂的伤口,因为这些往往就是造成心理问题的根结。
写下这三点,可以归结的是——亲朋好友永远都无法代替心理医师的地位,这也就是心理医师如今蓬勃发展的原因之一。同样,很多时候,很多问题,我们需要引导、需要中立的看法、需要直面自己的老伤疤。但是有多少问题是真正需要心理医师的?往往自己就是最好的心理医师!也许因为我是双子座的原因,我常常喜欢自言自语,特别是一个人的时候,在写程序的时候往往会不断的跟自己说可不可以这样,可不可以那样。在玩游戏的时候,比如实况足球,我会上下半场用不同的阵容不同的套路。
当然这只是我的例子,我想是否可以推广开来。
委屈的时候,放一首伤感的情歌,将所有的委屈和悲伤写下来,读一读。
开心的时候,找一件自己最擅长的事做一做,或者拉上几个兄弟姐妹去搓一顿,说出来,让大家一起分享你的快乐。
迷茫的时候,找出每一种可能,想像每一种可能的发展。
也许这样,我们就会舒畅很多。也许明眼的朋友一下就注意到了,这就是心理学上所说的自我治疗。对!多数时候我想我需要的就是自我的治疗。
又是一年国庆,我要去书店,找到毕老师的这本书,付钱买下来,收藏也好,招摇也罢(充实自己的书柜,嘿嘿)。
一个Excel2007的文件,两个工作表,每个表都有135265条记录,两个工作表字段位置和类型相同。现在需要比较这两个工作表,将字段A、B、C相同的找出来。我写了一个VBA的程序,如下
Type str
A
As String B
As String C
As StringEnd Type
Option Base
1
Sub BJ()
Dim a(135265) As str
For i = 1 To 135265
a(i).A = Sheet2.Cells(i, 1)
a(i).B = Sheet2.Cells(i, 2)
a(i).C = Sheet2.Cells(i, 3)
Next
For i = 1 To 135265
For j = 1 To 135265
If Sheet1.Cells(i, 1) = a(j).A and Sheet1.Cells(i, 2) = a(j).B and Sheet1.Cells(i, 3) = a(j).C and Then
Sheet1.Cells(i, 4) = "相同"
Exit For
End If
Next
Next
End Sub
如果不加上Exit For,这个程序的循环次数接近196亿次,但是仍然不够优化。我曾经想一个2.4G的CPU每秒到底可以做多少次整数或者浮点运算?但是看来跟程序运行的次数还是没有关系。那么将精力集中在程序的优化上。我的想法是这样(暂时没有实现代码,如果写完这个blog还没有比较出来,我就再写这部分程序):
将其中一个Sheet2的A、B、C三列的值放入一个多维数组AA中,将这个数组以A列,或者B列,或者C列进行排序。然后写一个Sub,三个传入值,也就是Sheet1中A、B、C三列的任意一行的值。在这个Sub中要怎么处理呢?
首先拿出A的值,在数组AA中进行拆半查找。也就是说将这个值和数组AA的中间元素值进行比较(这就是之前为什么要排序的原因),如果大于中间值,则抛弃前半个数组形成一个新的数组。如果小于中间值就抛弃后半个数组形成新数组。然后将传入的A值和新数组比较,当然这样的折半查找还可以继续在新数组中进行。最后我们可能会得到一个新数组BB,这个数组中A列的值都是传入的值(因为我的数据中,A、B、C三列都不是唯一值)。
然后,将传入B的值再在这个新数组查找,如果这个输入仍然很大,那么就可以继续使用拆半查找的方式。最后,同样会得到一个新数组CC。
同理传入C列的值又在数组CC中查找,最后我们将会得到一条数据,包含了A、B、C三列的值。找到了,那么就该返回了,返回一个True/False,然后Sheet1中相应的列作出一个标记。
以上就是我的分析,虽然代码量肯定会增加2-3倍,但是想想应该是可行的,而且效率肯定比上面贴出来的代码要高!还有没有其他更好的方案?希望各位路过的,有兴趣的朋友指教一二!
两台v880服务器,原来都安装的Solaris8和Oracle8。后来其中一台升级到Solaris9、Oracle9。另外一台本想保持旧貌,可惜老天不长眼,再一次停电前正常关机之后,再也启动不起来。简单说就是无法引导,然后和Sun的工程师一起找原因,未果(其中遇到各种各样的稀奇古怪的问题,使用了能想到的各种各样的办法都不行,最主要就是超级块有问题,而且无法修复)。最后只能放弃。
由于该系统中数据没有做备份,又想保证数据。工程师提出类似Windows覆盖安装的概念,简单说来,就是装入Solaris8的光盘,从光盘启动安装系统,在进入安装后不久有个选择:Upgrade还是Install,选择Upgrade。我详细的询问了工程师,他说基本上只要不是损坏或者和源盘文件不同的,就会跳过,不会影响到整个系统,以及系统中的应用。这对我来说是一个全新的概念,从来没有想到Solaris也可以这么做。在整个Upgrade的过程中,所有的设置都和原设置相同,完成Upgrade之后系统可以引导了,不过问题又来了。提示输入用户名之后回车,继续让输入用户名,就没有提示输入密码,提示pam_authtok_get.so这个文件有问题(更多请参考PAM(Pluggable Authentication Modules ))。本来可以继续深入挖掘,但是由于时间关系,不得不停止继续修复的方案,而采用忍受丢失部分数据的方案,重装!
在确定硬件没有故障的前提下,工程师又让我吃惊了,他说可以克隆。因为两台880的配置一模一样,一般这样的克隆只是针对备份数据而言,但是为了节约重装系统和数据库,以及打补丁的时间克隆是最快的。本想自己又开始漫长的装系统的过程,结果听他这么说,我愿意看看怎么做。两台880我分别用A和B表示,B表示有问题的,A表示正常的。
- 首先卸载A某个数据盘,前提是该盘没有应用基本闲置的那种。输入:luxadm remove_device /dev/dsk/c*t*d*s2,*号表示目标磁盘号,最后的“2”是很重要的参数。
- 卸载完成后,装载上B的某个空闲磁盘。输入:luxadm insert_device。
- 输入:#dd if=/dev/dsk/c*t*d*s2 of=/dev/dsk/c*t*d*s2 bs=1024000。if后是源,of后是目标。这样先克隆A的系统,再克隆A的Oracle。当然如果系统和数据库都装在一个盘上,就只需要一步。整个克隆时间由两个因素决定,其一就是bs后跟的参数,建议不要超过10M;其二就是磁盘本身大小,36G的10万转SCSI硬盘大概克隆时间在20-25分钟。以此类推。
- 完成克隆后,将A原来的那块盘插回去。输入:luxadm insert_device。将B的其他磁盘先拔下,就插入刚才克隆的两个盘启动,输入A的root密码即可登陆。//如果是光线磁盘请先跳到下面加粗部分的操作。
- B服务器登陆后,输入:init 0
- B服务器在ok状态下。输入:boot -s
- B服务器,输入:# sys-unconfig
- B服务器,输入:# touch /reconfigure
- 然后重新提供系统参数,并进行配置。就是IP地址,主机名之类的。完成之后reboot。
- 编辑vsftab中,加载其他磁盘。
- Done!
这里比如注意。如果服务器不是光纤磁盘,以上操作足够。如果是光线磁盘,必须在插入两个克隆的磁盘后,先要按照下面的操作。
- 在ok状态下从光盘引导系统(用Solaris的安装盘):OK boot cdrom –s
- 安装根文件系统到/mnt:#mount /dev/dsk/c1t0d0s0 /mnt
- 使new disk /etc/path_to_inst中的设备名与实际/devices中的设备名一致:#drvconfig -r /mnt -p /mnt/etc/path_to_inst ;#cd /devices;#find . -print |cpio -pduVm /mnt/devices
- 创建new disk从逻辑设备到物理设备的正确的连接:#disks -r /mnt
- 设置new disk 的/dev/dsk/c1t0d0s0 为启动设备:#luxadm set_boot_dev /dev/dsk/c1t0d0s0
- # reboot

刚看完文雀(Sparrow),有一种说不出来的感觉。首先要申明的是,我不是来写影评的,我也没那文笔,只是看完电影后随便写写。
初识杜琪峰是他1999年拍的《枪火》,这部片子我至今一共看了三遍,非常经典、非常细腻。电影中几个主角保护老大走出百货大楼的场面历历在目。从那时候起,我就认为杜琪峰的黑帮片、警匪片那肯定是不容错过的。而且也正如我所希望的那样,《暗战》系列、《全职杀手》都是非常经典的片子,但是杜导也有其他电影,个人觉得就没有以上说的片子那么经典,比如《大块头有大智慧》、《呖咕呖咕新年财》、《瘦身男女》等,感觉都是娱乐片。有兴趣的朋友可以看看杜琪峰简介和杜琪峰电影列表。
而文雀(Sparrow)就完全的不同,虽然我看的国内的“阉割”版(国外、港台等过来的电影实在被剪得惨不忍睹),虽然开头曾被称道的90秒的长镜头被剪的不知所云,但是还好对于文雀(Sparrow)的整体来说影响不太大。纵观下来,我觉得文雀(Sparrow)可以说颠覆了杜导以前所有的作品的风格。
1、文雀(Sparrow)不是娱乐、不是黑帮警匪片,初看我还以为是文艺片,整个片子节奏缓慢,连故事情节也是快一个小时才大致体现。
2、整个电影的配乐很独特,有点音乐剧的样子,各个场景几乎都没有离开过音乐,特别是最后的雨中场景更是音乐将整个片子推向最高潮。
3、我没有仔细去考量,但是整部电影每个演员的台词都非常干练,点到即止。
4、细节、细节!不得不再次说到《枪火》,从那时起,杜琪峰在细节上我觉得就很独到,这部电影更是如此。有些慢镜头,不温不火,好像无关痛痒,但是细细体会来可以说导演做得很完满。
总的说来,也许导演是想让观众去想去体会,所以很多貌似应该交代清楚的地方,若隐若现。
这是一部需要去思考的片子,个人认为归结到剧情片更好一点。值得一看,但是一定要看完整版,阉割版实在有点倒胃口!
最后,顺祝我的老师们,节日快乐!虽然偶不是一个好学生,嘿嘿。
现在写blog的心态多为生活记录和感想,想写读书笔记,也仅源于睡前对自己所读书的回忆。技术类的书籍不在此类范围。
其实我读的书真的很少。但是一直自认为文学水平还不错,现在想来非常惭愧。虽然爬过格子,有点小成绩,可终究上不了台面。只是觉得文字这个东西,无他——唯有积累。这和学语言是一个道理。
虽然惭愧,还是拿出来献丑。中国四大名著:“红楼梦”连同小学、高中一起也就读了那么四分之一不到;“水浒传”,也就读了五分之一;“西游记”,我想可能就小学那会儿读了十分之一;“三国演义”,几页就拉倒,不过连续剧倒是一集不漏都看了,据说连续剧拍的比较符合原著,也算安慰自己。所谓西方红楼梦的“红与黑”,完全拜读。也正因为此高中又去看了看红楼梦,可实在耐不住性子,进入不了角色。“平凡的世界”倒是完整读下,不过现在看来很对不起路遥,因为是盗版。王小波那三部曲读得也是浅尝辄止。余秋雨的“文化苦旅”是高中时读完的。“围城”则是钱老先生去世第二天到书店买来拜读了。鲁迅先生的“呐喊”是宝贝,因为是我大舅搬家送给我的,解放前的版本,读了三遍,最后送给高中的一个同学了。现在绞尽脑汁也就想出了这些文学相关的,实在惭愧。而其他杂类的东西也就是在没多少印象,也许读了也许没有。
当然上不了台面的也大多没什么记忆。人物类传记仿佛看过几本和军事相关的人物的。看的第一本武侠小说至今都忘记了名字,金庸那些小说没一本完整看过,黄易的奇幻系列也一样。不是自己本家我想也不会去看《天意》。网络小说还能说上基本,还有痞子蔡的“第一次亲密接触”,云中君的“我一定要找到你”,“鬼吹灯”,“兽血沸腾”。好像就这些了。
其实,自己对语言的爱好来自小学。那会儿最喜欢上语文课,作文写得不咋地,不过不妨碍对高大帅气的语文老师的崇拜(可十六年后的同学聚会严重毁坏了那“高大帅气”的形象)。中学,除了输背三年六个课本儿后的古诗词外就没多大印象。而高中成了自我认为文学水平不错的开始,每次考试作文基本都有拿来全班念。所以高中读的书也最多,那会儿非常喜欢散文,所以每期的《散文》和《散文诗》那是精神食粮。为啥喜欢散文?因为散文可以让一个没多少文学修养和词汇的迅速发展。每期的两本杂志我多会做大量的笔记,生词、美句大量记录。也正因为此,初中没有学好的语法,全部一一重来,还特地买了“文心雕龙”逐字逐句拜读。
太久没有好好的、认认真真的看过书。当然现在和以后我想也不能好好的看,因为大部分都成了我Palm680中的电子版,成了wc时打法时间的东西(其他大块大块的时间,还是用来看技术类的文章和书了)。还真对不起作者啊。不过这样也不会妨碍我写读书笔记。以后我会没看完一本就写一点儿感受,算是重拾高中那么一点点好习惯吧。
从接触网络应用服务器配置开始,就知道什么是同时并发,什么是服务器压力,大概如何解决。但是当真正遇到的时候才知道自己的无能。以前都是接触的Windows的服务器,而且那会儿应用的同时并发量不可能会太大,虽然知道如何缓解服务器压力。但是当你真正亲身感受的时候,那种感受,我想也许无法用言语来形容(至少我形容不出来)。
学校现在接近3w人,新校区宿舍全部通网,加上各个机房和外面的网吧,选课时,同时登陆的客户端可想而知。在非Unix/Linux环境下,使用“netstat -an |grep ‘ESTABLISHED’ |wc -l”这样的命令就可以查看到在线的人数。先说现在的硬件配置:
1、数据库服务器SUN V880的服务器:2*900Mhz单核64bit CPU,内存4G;
2、应用服务器:曙光2*2GMhz四核64bit CPU,内存8G。
这个配置明眼的朋友一看就知道瓶颈就在数据库服务器。确实如此!但是应用服务器最高的同时连接数最高达到了1500多,而且应用服务器上是用免费的resin来构建的应用服务器,这个连接数绝对是resin本身无法承受的。结果就是resin会在非常短暂的时间被淹没,访问再也出不来任何静态页面,只有重启。重启也是好景不长,因为不停的有用户尝试登录。也就是说resin一重启基本上可以说马上就挂掉。
现在说应用服务器的优化方案:简单的说,使用apache+resin1+resin2实现软件的负载均衡。如何实现用google搜索就有很多结果这里就不重复了。这里的resin1和resin2是两个对立的resin,但是用户访问的端口都是由apache提供。实测结果,这样的方案,在上述硬件配置基础上,保证同时连接数在1k以内,两个resin都不会down掉。比采用一个resin直接提供服务好很多!
数据库服务器除了需要处理B/S结构那边的请求以外,还要处理C/S结构端的请求。原有的硬件配置经过实际验证,最多能支持250左右的同时连接数,基本达到或超过这个数可以说Oracle就属于假死状态,响应速度可想而知,而且随时可能down掉。
解决方案当然是更换更好的服务器硬件。这里必须要考虑到Oracle的内存占用!为了能同时保证1k同时在线,服务器还要有盈余,那么内存至少需要翻4倍。当然这仅仅是一个保守的估计。而CPU呢?由于32bit的CPU对超过4G内存的管理有会有一定问题,因此必须采用64bit的硬件构架,以及64bit的系统,才能更好的管理内存。而针对一个CPU,我们这样设想,一个CPU管理的内存最大应该是4G(这个现在在我看来没有任何依据,仅仅针对SUN的硬件猜测而来,因为SUN的CPU和内存是一块板子,如果是双核,这块板子上就搭载了8G内存),那么内存就很好算出来了。而至于CPU的频率倒不是一个大问题,采用普遍的1.6GMhz以上的就可以了(这个也没有绝对的实际数据指标可以支撑)。
现在我们采用4*2GMhz四核64bit的CPU,32G内存(当然如果按照我上面说的内存也许可以增加更多也行)。考虑到钱的问题,暂时使用曙光的服务器,可惜的是其整个构架采用的是x86的架构,这样就迫使我们必须放弃SPARC版本的Oracle,系统也只有上红帽子64bit 的vs 4/5。如果从Oracle的发展来说,x86架构的毕竟是后面发展起来的,不见得比SPARC版的成熟,但是硬件所限只能如此。扯远了,说效果!暂时看来数据查询能力提升了2倍,实际的数据我会接下来补充上。待续ing
最后,我想从.NET来说,现在所开发的应用程序,根本无法平行移植到64bit的平台,在64bit的Windows平台,如果要使用必须开启32bit的兼容模式,性能的牺牲在所难免。而就我所知64bit的Windows服务器可能应用非常少,多数会采用几台或者几十台32bit的Windows服务器做硬件的负载均衡,我想硬件的负载均衡绝对不是一个小数目的投资。最后的最后,欢迎各位达人,特别我那几个哥们儿:大鱼儿、火炬、tiny等来指正我这个井底之蛙在本文中不足和错误,在此,我先表示由衷的感谢了!是你们的慷慨让我成长!