T400拆机更换内存

为了将笔记本升级到Windows 8(X64),也为了过段时间升级到X64的Ubuntu,所以买了根4G的内存打算加上去,这样2G(1066)+4G(1066)就差不多是这台机器寿终正寝的配置了。话说ThinkPad的内存真贵,于是买了根Kingston for Lenovo的内存,还是有点小贵,谁叫Elpida破产了呢,都没得卖。

下面就开始拆机第一步,拔掉电源适配器,卸下电池(简直就是两句废话,但是很重要哦)。
第二步,机器屏幕合上,底部朝上的平放到桌子上。
第三步,用专用螺丝刀拧下底部四颗螺丝,这样掌托才可以拿下来,因为T400的内存在触摸板下方。
说到这里就有要注意的了,最重要最有保障的拆机方法就是按照说明书来,比如随机配有的Service and Troubleshooting Guide(一个官方的小册子),它里面的Replacing Memory就会告诉你怎么拆,要拆哪几颗螺丝。另外T400的底部螺丝旁边都有个小图标标示这颗螺丝是干什么用的,这个太人性化了,而且也方便DIY,大爱这种机器。相比之下,网络上有些拆机的帖子的截图有点误导人,告诉别人拆的螺丝不对或者方式不对,所以最好是看官方的,参考网络上的可以,但要慎重。
第四步,把掌托抠下来,当然要先把机器翻过来,把屏幕打开。从靠近键盘的一边开始抠,另外一边也要抠下来,都是一些有弹力的卡扣(大概就和掰开一些手机后盖相似,有物体结构感的同学就比较会掰开这个),这个就要凭感觉了,有轻有重的就可以拿下来(当然还是要看看示意图,注意掌托下面有线路相连,不要扯断了)。
第五步,拆,加内存,这个比较简单,如果两个卡槽只使用一个来安装内存的话,请使用最底下的那个。
第六步,开机检测,都没有问题的话就可以安回掌托,拧好螺丝了。

俺使用Windows 7的时间加起来估计不超过1个小时,Windows Vista到是参加过当年的消费者测试,后来都知道太烂了。
Windows 8用起来还可以。但C盘一定要足够大哦,俺C盘只有20G,后来把hiberfil.sys删除,pagefile.sys移动到别的盘,才使得C盘只使用9个多G,但还是觉得大啊。另外显卡温度高多了,持续在40多度,看来老机器想升级使用华丽的系统也难啊。

T400维修手册和拆机截图
http://www.flickr.com/photos/46848122@N08/sets/72157629315183170/

Eclipse C/C++ JNI NDK

在Java JNI或者Android NDK中,C或者CPP源码中引入header files的时候会出现Unresolved inclusion:
虽然不影响整个源码的编译,但是对于追求干净完美的人来说看了总会觉得有不爽,怎样解决这个呢?
原因是在Eclipse的编辑环境当中没有找到相应的header files,那么解决办法也很简单,就是把header files引入进来
操作步骤如下:
1、右击工程 > New > Folder
2、点击Advanced
3、选择Link to alternate location (Linked Folder),目录自己选择(比如JNI C的话是/usr/include和$JAVA_HOME/include,Android NDK的话是$ANDROID_NDK_HOME/platforms/android-X/arch-arm/usr/include)
4、Finish后Refresh工程(或者Close再Open Project)。

JNI当中Could not find symbol ‘xx’ in index
我们在JNI当中想查看某个函数或者类或者编译单元的源码的时候也想像Java里头一样可以方便的跟踪进去,但是总会出现如上错误。
这个时候只要为这些源码在Eclipse当中增加索引就可以。
操作步骤如下:
1、Window > Preferences > C/C++ > Indexer
2、把其中增加索引的都选上
3、Refresh工程(或者Close再Open Project)。

IO,Network,Protocol等等标记帖

这里都是一些感觉写的好或着写的明白的经典内容

IO
IO – 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
http://blog.csdn.net/historyasamirror/article/details/5778378

HTTP
深入理解HTTP协议(转)
http://www.blogjava.net/zjusuyong/articles/304788.html

TCP
位码即TCP标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)

TCP状态表
CLOSED
LISTEN
SYN RCVD
SYN SENT
ESTABLISHED
FIN WAIT 1
FIN WAIT 2
TIME WAIT (双方均已断开)
CLOSING
CLOSE WAIT (被动关闭)收到对方关闭请求,并且已经确认
LAST ACK (被动关闭)等待最后一个关闭确认

建立连接过程
一般情况是服务端执行LISTEN原语进入LISTEN(被动打开)状态
客户端发出CONNECT命令,创建报文段(带SYN)并发送,进入SYN SENT状态
服务端收到一个SYN报文段,给客户端回应ACK同时发送一个SYN,进入SYN RCVD状态
客户端收到SYN+ACK报文段,并发送三次握手的最后一个ACK报文段,进入ESTABLISHED状态
服务端收到确认的ACK报文段,完成三次握手,进入ESTABLISHED状态

关闭连接过程
客户端执行CLOSE原语,创建报文段(带FIN)并发送,进入FIN WAIT 1状态
服务端收到一个FIN报文段,确认客户端的请求并回发一个ACK报文段,进入CLOSE WAIT状态
客户端收到服务端的确认ACK报文段,转移到FIN WAIT 2状态,此时从客户端到服务器方向的连接已经断开
服务端应用得到通告后,执行CLOSE原语,创建报文段(带FIN)并发送,进入LAST ACK状态
客户端收到FIN报文段并确认,进入TIME WAIT状态,此时双方连接均已经断开
但TCP要等待一个2倍报文最大生存时间(2MSL),确保。。。,到超时时间后,删除记录,进入CLOSED状态
服务端收到最后一个ACK报文段,释放连接,删除记录,进入CLOSED状态

http://www.cs.berkeley.edu/~kfall/EE122/lec23/sld001.htm
Three-way handshake
– A ——> Seq k, SYN ——> B
– A <--- Seq j, ACK k + 1, SYN + ACK <--- B - A ----> Seq k + 1, ACK j + 1, ACK —->

Four-way handshake
– A —- Seq k, ACK j + 1, FIN + ACK —-> B
– A <--- Seq j, ACK k + 1, ACK <--- B - ... sometime later ... - A <--- Seq j, ACK k + 1, FIN + ACK <--- B - A ---> Seq k, ACK j + 1, ACK —>

Wireshark真实抓包数据
三次握手

33	44.679312	192.168.1.102	58.215.40.94	TCP	53902 > smtp [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=3199582 TSER=0 WS=6
34	44.761376	58.215.40.94	192.168.1.102	TCP	smtp > 53902 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1440 TSV=1575891196 TSER=3199582 WS=7
35	44.761442	192.168.1.102	58.215.40.94	TCP	53902 > smtp [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=3199602 TSER=1575891196

四次分手

181	279.133008	192.168.1.102	58.215.40.94	TCP	59658 > smtp [ACK] Seq=7 Ack=93 Win=5888 Len=0 TSV=3258195 TSER=1576125611
182	279.133545	58.215.40.94	192.168.1.102	TCP	smtp > 59658 [FIN, ACK] Seq=93 Ack=7 Win=5888 Len=0 TSV=1576125611 TSER=3258186
183	279.133630	192.168.1.102	58.215.40.94	TCP	59658 > smtp [FIN, ACK] Seq=7 Ack=94 Win=5888 Len=0 TSV=3258195 TSER=1576125611
186	279.264675	58.215.40.94	192.168.1.102	TCP	smtp > 59658 [ACK] Seq=94 Ack=8 Win=5888 Len=0 TSV=1576125739 TSER=3258195

http://blog.chinaunix.net/space.php?uid=20587912&do=blog&cuid=2201855
http://wenku.baidu.com/view/2fd4a6d126fff705cc170af3.html
OSI 7层协议
物理层
数据链路层
网络层
传输层
会话层
表示层
应用层

TCP 4层协议
网络接口层(ARP,RARP…)
网间层(ICMP,IP)
传输层(TCP,UDP)
应用层(SMTP,HTTP,FTP,DNS)

也说说自主研发

废话文章一篇
不知道从什么时候开始,我听到“自主研发”这四个字心理就开始哆嗦,可能跟自己的经历和整个社会风气有关。
不是“自主研发”的都不好意思跟别人打招呼,有部分人过分吹嘘了这个词。
自主研发就是高技术,高质量吗,我觉得不一定是,至少从我在的软件行业来看。这个行业确实需要很多高手,需要很多高新技术,甚至可以说它推动了地球的发展,但是也不是样样都要自主研发,这样就是在浪费生命。
目前来说技术基本掌握在一些大公司中,它们有这庞大的业务,有着足够的资金,有着充足的人员,为了解决目前遇到的一些问题,他们对原有的东西进行改进,或者完全开发出新的东西,这是可以理解的,也是正确的一条路。
但是目前国内更多的是一些小公司,处理一般性的业务,很多东西都是别人“发明”过千百遍的,它们还要从头来做个,这就没有必要了。
我觉得碰到合适的东西,拿来就用是正确的(遵循相关协议),用的时候理解原理,特别现在软件方面很多开源(http://en.wikipedia.org/wiki/Open-source_software)的产品或者组件,当对它熟悉了,知道它的缺陷了,我们再来结合自己的实际情况进行修改或者开发,这样既简化了初期的开发成本,又可以给我们后期更进一步的开发打好基础。
而且更糟糕的是目前很多所谓“自主研发”的东西,BUG累累,让后面的人改都不知道怎么改,因为它前期就没有一个统一的思想,只是一直在补丁,能让它运行,这不论对公司还是对开发人员来说都是一个巨大的悲剧,因为这种做法或者说不可阻挡的趋势只能导致后面全盘放弃。
所以不要“自主研发”也是不错的事情,比如你能用别人给的积木搭成自己想要的城堡也是一件创新和骄傲的事情。
当然搭建城堡其中也有自主创新的地方,总之摆脱无意义和力不从心以及挣面子的“自主研发”才是正道。。。

也说说被面试吧(偏向技术线路的)

也许有些人跟我一样,在毫无规矩的小公司做着开发工作,并且也想着哪天也能成为技术牛人。
但一般情况下这种想法可能只有自己陪自己来进行,因为别人都忙着工作,没有时间来跟你讨论什么技术问题,也基本没有条件来研究相关东西。
你要做的就是快速的实现一个功能,快速的把BUG搞定,而且这样一来你每天都还挺忙。
所以基本技术东西都是平时业余学习或者一部份少有的工作积累,并且你可能一直都还在努力的找一份自己想做的工作或者觉得自豪的工作。

当然有一天会让你有些意外,比如你投过的一份简历忽然对方给你来电话了,而且给你电话的人还是你耳熟能详的牛人或者干脆就是你崇拜已久的人物。

这个时候我想你接到这个电话,你应该心跳加速了吧,压力瞬间就上来了吧,对你越是重要的人或者事你越会在意,但往往也越会紧张。
简单的寒暄几句之后就进入所谓的“电面”,聊些常规话题,聊聊你对哪些感兴趣或者对哪些擅长。
面试官基本会根据你的情况问问稍微具体但也很基本的细节,但是往往在这个时候你就有可能回答的不好,面试完毕之后你回想一下,会反问自己,刚才都瞎说了些什么啊,结果是可想而知的,机会即刻就消失了。如果你回答的都很好,说明你技术能力和心理素质都很好。

对于这种情况自己需要做到几点:
1、基础知识要经常回顾,可能你一看就懂,可能你再看的时候也懂,但是就是看不到的时候就忘记了,模糊了
一些常用的,重要的方法名,变量名,含义,基本算法都要记得,因为你如果都说个大概,别人很可能就认为你只是粗略的了解过
2、多思考,一件事情这样做了几遍了,一个方法这样写了几遍了,就需要想想为什么要这样
3、回答别人的问题的时候要严肃,要尽量都回答,实在不知道的就说不知道,如果你有能力说不定还可以和面试官讨论一番
因为别人和你基本都是第一次交流,如果你太随意或者让别人感觉很随意,那么你这次就不妙了,所以要认真,别人只听得到你说的,其他的基本对你都不知晓
4、自己对自己的目标要专一,比如你今后想从事什么方向的工作,太泛的话,别人也就不知道该不该要你了
这点特别是在小公司待着的人特别重要,因为你平时的工作可能很泛,什么都懂点,不清楚自己究竟想要做什么,能做什么
5、常规问题要一直在自己记忆里清晰,比如为什么要换工作,你已经经历过的工作对自己有什么启发,自己有什么感悟
6、面试官对你的建议要记住,虽然有可能这次失败了,但是他的建议会让你下次再遇到想要的工作机会时获得成功
7、要让面试官真诚的感觉到你想要这份工作,你适合这份工作,这个就是沟通交流技巧了

如果这几点都做的很好,第一步应该还是比较好跨出去的

Lyrics: Rox In The Box-The Decemberists

FROM http://www.songmeanings.net/songs/view/3530822107858854930/

Get the rocks in the box
Get the water right down to your socks
This bulkhead’s built of fallen brethren’s bones
We all do what we can
We endure our fellow man
And we sing our songs to the headframe’s creaks and moans

And it’s one, two, three
On the wrong side of the lea
What were you meant for?
What were you meant for?
And it’s seven, eight, nine
You get your shovel back in line
And if you ever make it to ten
You won’t make it again
And if you ever make it to ten
You won’t make it again

And you won’t make a dime
On this gray granite mountain mine
Of dirt you’re made, of dirt you will return
So while we’re living here
Let’s get this little one thing clear
There’s plenty of men to die, don’t jump your turn

And it’s one, two, three
On the wrong side of the lea
What were you meant for?
What were you meant for?
And it’s seven, eight, nine
You get your shovel back in line
And if you ever make it to ten
You won’t make it again
And if you ever make it to ten
You won’t make it again

And it’s one, two, three
On the wrong side of the lea
What were you meant for?
What were you meant for?
And it’s seven, eight, nine
You get your shovel back in line
And if you ever make it to ten
You won’t make it again
And if you ever make it to ten
You won’t make it again
And if you ever make it to ten
You won’t make it again

Milestone刷机神马的

这里是大杂烩,参考了
http://blog.milkpc.com/archives/32
http://and-developers.com/sbf:milestone221

最开始用官方升级软件刷了个2.2,结果重启,死机都来了,如今有下了个UK的底包(Milestone_2.2.1_UK_Package.sbf),据说是很稳定的
刷了之后发热量大,据说2.2都这样?
无法输入中文,如果你是root之后的话,有解决办法

刷SHOLS_U2_05.26.4_SIGNED_UCASHLSMR2EMEAB1B806E.0R_PDS003_USAMS1FRYORTSEA_P013_A009_HWp2a_WIG145030_Service1FF.sbf
完成之后一直在ANDROID那几个大字那里循环,无法开机,WIPE一次之后可以用了
真有人把Milestone刷成石头么?

软件开发中最让人伤脑筋的几种人

本文不针对具体的人,仅仅表述现象,正确与否请自行判断

1、为什么呢,为什么呢,没有道理的啊,明明在Firefox中可以正确运行的,到了IE下面就错了呢
可能有时候会碰到人问这种或类似这种问题,他还会很兴奋的叫你过去给他看
不过一般问这种问题的人基本都还是新手,他们还不了解他们自己的工作职责是什么,老板请他来是做什么的
所以如果自己还经常问别人这种问题,请好好思考下。
如果你发现的是一个很少遇见的Bug或者你对某种通常出现的Bug提出了一种很好的解决方式,你可以和其他人交流下
记住,各种浏览器之间的差异是存在的,不要想当然

2、这个问题没有考虑到,这样做不下去了,再换种方法去看看
有可能你已经是一个“设计师”,你的工作是定下一种可行的方案,然后分给手下的人去实现它,可能你还要负责关键代码的实现
如果让你自己来设计并实现一个不是很复杂的系统,你会比较快,因为所有的东西都在你的控制之中,发现问题的时候去解决问题,这样一步一步就解决了
但现在你有更大的责任是负责整个系统及手下的人员,你要让他们去实现一部分功能,首先你给他们讲解,告诉他们怎么去做,然后他们就去按着你给的方法去做了
但过了一段时间,有人过来跟你说,按这样的实现走不下去了,你听他给的理由,然后分析下也确实是这样(不是因为某个技术难点过不去,而是整个方式不对)。
然后你就告诉他让他换种方式去实现,当然他也会照着你的意思去做,当然这极有可能会浪费很多时间。
你的岗位是什么,你的职责是什么,决定要谨慎

3、开什么调试,直接看代码
有些人总是很牛,他们不用调试,不用测试,写好的代码只要编译通过,经过他们的大脑检测“通过”,他们就敢把这些更新提交到线上
如果是这类人员,没什么好说的,建议看看《Facebook是如何管理代码的》,原文《How Facebook Ships Code
可能我们不需要很严格的审查,但是基本的测试还是必要的
你这样做只会浪费更多人力物力,当然有可能是紧急Bug的修改,偶尔可以直接在线上改,然后测
做这行就要专业点,前人的经验还是有用的,测试是必须的

4、这些错误又没有什么关系咯,放在里面好了,不用管
上级领导给你分配了一个任务,让你改改正在运行项目的一个小Bug,你把整个项目Checkout下来,发现项目里面很多错误,虽然和目前系统无关
但是影响了你通过集成开发环境部署测试,你只能改一个Bug提交一点文件到服务器上,根本无法在线下完成一个完整的测试
然后你向领导反映这个问题,项目代码中有很多错误,有很多注释掉的代码,当然最终得到的结果是没有什么改善
保证项目源码的完整性和正确性,无关的代码都清理干净,真正觉得有用目前又用不到的就用公司wiki或bbs之类的记录下来,努力写有用的文档
有时候什么狗血的需求和设计文档都是瞎扯淡的,是给别人看的
代码是写给人看的,很难看懂的代码是利用价值最低维护费用最高的东西

5、这样做也行,那样也可以吧
成员开会讨论问题中,大家提出了很多种解决问题的方法,都具有可行性,都具有优点和缺点,一个小时过去了还是没有决定采用哪种方式,最后会议在没有结果中结束
会议在一句“这样做也行,那样也可以吧”话中结束就是最大的失败,身为核心人物的你总有过人的判断力和经验吧,结合实际情况做出正确的判断是很重要的
建议可以很多,决定应该就那么一个

6、哦,这个问题我改过了,现在不是这样的了
协同开发,你要调用某个功能接口,但这个接口是由其他的人员开发的
某天你发现这结果不对了,然后你开始测试自己的程序,一轮测下来,发现调用的接口有些规则已经变化了,当然之前你都不知道
然后你去询问相关人员,结果得到了这句话
协同工作一定要清楚自己的行为会不会影响到别人,不要以自我为中心

想一想这些人当中有没有自己,我们通常是眼高手低,想当然,飘飘然。

问题列表

生活的一半是遇到问题,另一半是解决问题

问题也许很简单,但问题毕竟是问题

1、xNix下Apache 2.2启动
guoh@KNIGHT:~/apps/volcano/apache/bin$ ./apachectl -k start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

只需要以$sudo ./apachectl -k start运行即可,没有别人写的那样复杂,httpd的own和group也不需要都为root用户

http://callaly.net/blog/archives/94.html

2、Perl的DateTime模块装不上
perl install-module.pl DateTime
CPAN.pm: Going to build D/DR/DROLSKY/DateTime-0.66.tar.gz
Can’t locate Module/Build.pm in @INC (@INC contains: /home/allcom/volcano/bugzilla-4.0/lib/i386-linux-thread-multi /home/allcom/volcano/bugzilla-4.0/lib /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at Build.PL line 5.
BEGIN failed–compilation aborted at Build.PL line 5.
Warning: No success on command[/usr/bin/perl Build.PL ]
DROLSKY/DateTime-0.66.tar.gz
/usr/bin/perl Build.PL — NOT OK
Skipping test because of notest pragma
Running Build install
Make had some problems, won’t install
Could not read metadata file. Falling back to other methods to determine prerequisites

我是在安装Bugzilla的时候碰上的,解决办法是先装perl install-module.pl DateTime::Locale这个

3、Undefined subroutine &Math::Random::Secure::irand called at Bugzilla/Util.pm line 577, line 522.
解决办法是rm -rf lib/Math/Random/Secure*,这个目录是Bugzilla下的目录,这个是从推特上看来的

4、64位Ubuntu安装Android SDK后执行adb emulator之类的命令时提示“No such a file or directory”,中文“没有那个文件或目录”
有可能是没有安装ia32-libs,所以只需要sudo apt-get install ia32-libs应该就可以

5、Can’t update table ‘tablek’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
触发器通过UPDATE语句更新本表刚刚插入或者修改的数据会造成循环引用
下面这样写就可以,相当于一个拦截器,AOP之类的思想吧

CREATE trigger insert_before_tablek
    before
        insert on tablek
    for each row
        begin
            set new.status = 25;
        end

6、/bin/bash: AR@:找不到命令
编译安装SysBench-0.4.12
sudo ./configure –prefix=SYSBENCH_INSTALLATION_HOME –with-mysql-includes=MYSQL_INSTALLATION_HOME/include –with-mysql-libs=MYSQL_INSTALLATION_HOME/lib

sudo make
前面遇到的几个小问题都解决了,但遇到个新的问题

Making all in mysql
make[3]: 正在进入目录 `/home/aristel/sysbench-0.4.12/sysbench/drivers/mysql’
rm -f libsbmysql.a
/bin/bash: AR@:找不到命令
make[3]: *** [libsbmysql.a] 错误 127
make[3]:正在离开目录 `/home/aristel/sysbench-0.4.12/sysbench/drivers/mysql’
make[2]: *** [all-recursive] 错误 1
make[2]:正在离开目录 `/home/aristel/sysbench-0.4.12/sysbench/drivers’
make[1]: *** [all-recursive] 错误 1
make[1]:正在离开目录 `/home/aristel/sysbench-0.4.12/sysbench’
make: *** [all-recursive] 错误 1

AR@找不到命令,这个感觉有可能是Make脚本中参数或什么没有替换对什么的,但不知道怎么改,看不懂Makefile
机器中目前ar命令是存在的
目前没有找到解决办法

7、MySQL类似这种语句写法SELECT value FROM paras WHERE pkey = ‘freeze’ AND domain = domain;

create table paras (value varchar(50), pkey varchar(50), domain varchar(50));

这个问题浪费了我很不少时间,因为在Linux下面,又是在存储过程中,并且是封装了异常的存储过程中,异常信息被吞掉了
调试工具也不给力,所以基本是人工看的

CREATE PROCEDURE tdemo(domain VARCHAR(50))
BEGIN
    DECLARE v_value VARCHAR(50);
    SELECT value FROM paras WHERE pkey = 'freeze' AND domain = domain INTO v_value;
END

这个过程编译通过,执行的时候报了下面的错误

ERROR 1172 (42000): Result consisted of more than one row

想想也知道是返回了多条数据到INTO,这是错误的
但为什么会返回多条数据呢?明明后面限制了
问题就处在存储过程的那个入参domain上,它和表的一个字段名一模一样的了
这时候MySQL就认为这两个始终相同,于是语句变成了下面这样子

SELECT value FROM paras WHERE pkey = 'freeze';

所以就错了

存储过程中变量命名也是值得考究的一个问题,当存储过程太长了时候是件很痛苦的事情
有人这么做
入参变量加IN_前缀
出参变量加OUT_前缀
零时变量加TMP_前缀
整形变量加I_前缀
字符串变量加S_前缀
时间日期变量加D_前缀

另外为了简单,避免出错,参数不要和字段一模一样

8、Java连接SQLServer,不说了,直接上最新驱动
时隔多年不碰SQLServer,突然要偶弄SQLServer存储过程,还给了偶三个最老的JAR包
连接池一上,错误警告百出,坑爹啊
直接下载新版驱动
http://msdn.microsoft.com/zh-cn/data/aa937724.aspx
然后设置,新驱动的连接串不一样
http://blogs.msdn.com/b/jdbcteam/archive/2007/06/15/java-lang-classnotfoundexception-com-microsoft-jdbc-sqlserver-sqlserverdriver.aspx
貌似驱动还有中英文的区分,我中文数据库随便用了个英文的好像也可以
如下列举的是可能出现的问题:
com.microsoft.jdbc.sqlserver.SQLServerConnection@9980d5 threw an Error when we tried to check its default holdability. This is probably due to a bug in your JDBC driver that c3p0 can harmlessly work around (reported for some DB2 drivers). Please verify that the error stack trace is consistentwith the getHoldability() method not being properly implemented, and is not due to some deeper problem. This message will not be repeated for Connections of type com.microsoft.jdbc.sqlserver.SQLServerConnection that provoke errors of type java.lang.AbstractMethodError when getHoldability() is called.
和C3P0一起用的时候

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).

还有诸如什么切换语言之类的警告

9、在Ubuntu使用Wireshark时,Interface为空的,什么都没有
dumpcap: There are no interfaces on which a capture can be done
需要用root权限开启这个软件就好,即sudo
其他Linux应该也如此