Archive for the 'works' Category

清理了机器上的软件

清理了一下机器上久未使用的软件.
有些一年未用, 有些都快两年了.
说起来自从到上海前一段时间, 连清理软件的力气都没了.
杀掉了一批总觉得什么时候会用到但是很久没有真的去用的软件
例如InkScape, Gimp, FontLab, RO Chrome, MicroAngelo Toolset 6, 和一些诡异的算法库.
还是按照那个诡异的原则, 3个月用不到的一概杀掉, 以后需要就下来装, 你有文件我有硬盘, 谁怕谁

忽然想到的: ECM, DevCo, Lazarus

得到ECM离开的消息是在数月前,看KOL 2.37发布的news时候.
当时我下意识地看了下系统时钟栏,希望那里是4月1日…
因为前一段在论坛还看到ECM在关注新的想法和回复, 对于这个消息简直是夏娜告诉悠二你已经死了一样.

All the KOL community is shocked and sore knowing about an untimely death of our most active member, ECM (Michalichenko Eugeny) this month. Rip in peace, friend, we all shell remember You in our hearts.

最后一次和ECM君交谈是在05年末了,当时KOL的addon分离出来时候, 由于Vladimir Kladov 放出的补丁是和基本发布版不同版本上合并的, 导致编译通不过, ECM迅速的提供了workaround, 当然是俄文. 照着弄了数次而失败的某, 就无耻找到其ICQ号码去问. 可惜当时直接登的ICQanywhere, 也没能留下留念的记录.
就在2.37的发布新闻有很多ECM做的代码维护和增强, 如今名字已经框起来了. 不禁想有朝一日我过劳后, 名字会不会带上框, 出现在hanzify或者星迷圈的论坛呢….

然后就是错过的DevCo的消息, 有人欢喜有人悲, 李维最后没有被borland fire, 据说borland某元老级人物给了建议后, borland下决定放弃出售, 将IDE部门分拆为DevCo, 继而是Turbo系列的回归.
当初的Borland已经不在了, 或者说当初的borland灯塔形象从一开始就不存在, 至少从andres跑路那一刻起.
至少我们可以看出Borland出去的很多牛人, 对其保有的一种敬意, 也被关于.net和java的鼓噪所淹没了.
Turbo所目指的带给编程爱好者往日回忆再现的目标, 估计在国内是属于小圈子了, 大环境下的代码工人, 多半是不需要什么单纯的而纯粹的乐趣的.
随着MS自废Win32, 如果有朝一日bista2009突然宣称Fx4.0将作为用户层能够接触到的最基础框架, 估计会是有老外痛哭流涕, 我们的代码工人依然麻木的欢欣雀舞罢…

昨夜抓了Lazazus的0.9.18下来, 写了一个HelloLinux, 点击提示”moemoeonanoko”, 然后显示一个onanoko的图片.
只能编译为GTK1的程序, 然后去重新编译IDE, 官方说这功能0.9.18有问题, 以后的CVS可能修正, 然后就又拿了一个daily snapshot,
make了一下, 无事通过了, 不过当前貌似没有修正, 倒是发现IDE左侧加了code folder功能.
也是有这样异类的, 很早前用过这个可以自己编译自己的IDE, 这么多年他还是一点一点的, 不问世间白云苍狗, 默默地发展着.

附加一个编辑的言论:
不过接触的Java开发者多了,才发现,如Scott一般激情着不乏其人。如Hibernate的主创者在被Sun招安之后,每天都在Blog上大骂这人不好,那人不良之类的东西,惹的其他人直冒火。不知道哪位先者说过,语言是可以影响一个人的性格的,说她“特别讨厌搞Java的人,每个人都牛气轰轰的,好像自己有多厉害似的,其实什么都不是,但很喜欢搞Delphi的人,因为他们都是那么实在而儒雅,而Windows技术的人最好接触,因为他们多如农民一般实在”。对这句话,我深有同感。但可不是说Java界里面没有能人,我认识的朋友里面就很多技术不错的Java高手,也许他们是例外~~~

当然作为一个打混战的, 经常如果遇到以前在某语言做过的封装和函数现在另一个语言下面没有, 通常都是懒得去找大而全的库, 而是飞快地再移植一编, 在其中也会感觉到心情的微妙变化, 越是表层化的, 每个人都很难有资料去研究具体实现, 建立在我不知道的你也不知道的一种莫名其妙的自信中, 飞快地写着华丽地代码, 沉醉于我是李清照fans所以其他歌手都是狗屎的自我洗脑中.
结合到最近所表现的不理性, 我觉得很有必要保持我贫下中农说书人本色的时候提前来到鸟, 或许我会考虑给程序加上足量的注释, 当然还要去采购一套蓝马褂+竹板的cosply套装, 用心去做一个土土的, 让高手一看发出这丫代码写的太清晰, 一看就是没经验的评论的那种说书人

Ben Collins rocks time n time again

上次提到的JMicron的IDE识别不能问题,
此后内核有了2次关于此问题的更新
第一次更新后,JMicron的IDE可以识别了,不过ICH8自己的SATA却改到识别不出了,用SATA的人基本进不去系统了
我到lauchpad上发了报告并提供了workaroud, 因为自己有额外的扩展卡可以识别主硬盘而进系统,
某Ben Collins要求我给他提供个SSH账号以便测试
我还在犹豫要不要让这种猛人直接对着内核上下其手,
下面一堆老外回帖要贡献自己的box来做试验
偶的冒险精神还是不如以前了….
第二次更新貌似是在12/13号晚上的DailyCD,ICH8和JMicron终于都完美了

When Core2Duo Meets Kernel 2.6.15

现在已经发现并影响到我的2个相关的bug分别是对JMicron JMB363和Marvell 88E8056的驱动.
大部分Core2Duo的主板或多或少都用了其中一种.
88E8056是一个千兆网卡芯片,许多集成千兆网卡的965主板都用了这个芯片,Asus,Gigabyte,Abit等等.
可以从marvell网站下载install-8_36.tar.bz2(反而较install-8_40.tar.bz2新)编译后可用.
需要安装linux kernel headers包和build环境.
Jmicron JMB363则是因为965芯片组抛弃了IDE,主板厂选用的额外芯片来支持IDE(貌似还可以提供2个SATA节点),
这个是内核的bug,在edgy 2.6.17分支已经fix,2.6.15正在修改.
可以直接下载编译内核,也可以顺便升到edgy的.

Delphi6和Conroe的诡异冲突

26号,换了CPU和主板显卡等后,启动系统,居然直接圆满进入.
原是P4+845,现为E6300+965,没有传说中的蓝屏,剧烈怀疑是不是此系统认错了我的RP.
然后29号下午说要写一个客户端&服务端的小游戏来当作投职的作品,打开Delphi却报dclite60.bpl加载出错.
然后使用了几分钟,发现工程属性无法设置,点击Options后没有反应.
马上新建一个空工程,点击属性,报告12F9DB,12FB27执行错误.
搜索一下dclite60 access violation未果,马上着手重装D6.
D6重装后,没有任何插件的情况下和去掉所有Package情况下,也还是报同样错误.
六点左右做了备份,开始打算重装系统.
不过系统是在扩展卡上的硬盘,升级还是和往常一样停滞在安装设备的进度上,就跟对面的兄弟去讨论他的表结构若干小时.
然后回来全新安装了系统,安装了驱动,可谓是一步一备份,然后安装D6后,同样的报错嗷嗷叫的打击了我….
这下操作系统问题暂时不考虑了,开始一个一个卸载驱动,结果还是报错,然后使用OllyDbg调试时候,发现12C000属于主程序的线程,怀疑是不是传说中的超线程设置,又顺带进入BIOS,当然扣肉是木有超线程的设置项的,暂且关闭了VT,无效,然后顺着VT往下找时候,一个诡异的No-Execute Memory Protect选项刺眼的Enabled着.这个不就是传说中的DEP状物体么?
怒而关掉后,风平浪静,D6不再嗷嗷叫.
遂恢复昨天系统,打开IE,写下此文,以祭奠我被扣肉吃掉的十个小时….

应用连接Oracle失败报80004005的原因之一

近来看统计的Reference,总有搜oracle/oci等误入此窝的.
为了假装此窝,顺便再贴一个和老旧服务器相关的故事.
使用ODAC9/10来代替Oracle客户端部署应用,相对于使用Instant Client的要啥没啥(没有OLEDB,而且居然没Home)的不便,同时相对于Oracle Client牵葫芦带瓢的不爽,是个很好的均衡方案.
ODAC里面附带的OLE Provider是OraOLEDB.Oracle.1,相对于微软的MSDAORA来说,前者的性能较优,而且后者在BLOB等存取中还存在已知问题,使用OLEDB连接Oracle的程序员很多使用此Provider,但总有写程序的人通过其他类库用OLEDB,或者在程序内使用立即字符串MSDAORA来合成连接字串,而不是在配置中指定Provider.
那么问题来了,通常这类程序喜欢华丽地扔出一个80004005的错误,05年我遇见这个时候(某次自定义安装客户端,只选了OLEDB和配置程序),因为看到出错信息里面是提到没有从Oracle返回具体错误类型,就想当然认为不是Provider初始化失败,而以为那几个程序不使用OLEDB,重新将客户端典型安装了事.
等我发现除了原装的Oracle OLEDB Privider,系统中居然还有一个MSDAORA,已经是一年以后的事情了,这个Privider是基于MSDTC的配置,依赖于oracle 8的dll模块,要么是给他提供8的dll(客户端好像有DTC项),要么是让其使用当前Oracle版本的dll,参考的数据是M$的文档,头条就是此问题.

http://msdn2.microsoft.com/en-us/library/ms152516.aspx

做如下修改:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI
OracleOciLib = oci.dll
OracleSqlLib = orasql9.dll
OracleXaLib = oraclient9.dll

我的数据库服务器只能装9,所以网站和应用服务器上装的是ODAC 92070,这样修改后,不用安装9201客户端,MSDAORA就可以使用了.

此类问题特征: 在Microsoft OLE Provider for Oracle里面,测试连接失败,此为充分条件
使用LordPE或者PETools等查看模块的工具,查看其中加载了oledb32.dll,此为使用了OLEDB的程序,此为必要条件;如果又有msado15.dll,则为通过ado使用OLEDB的程序.
然后使用UltraEdit打开程序查找MSDAORA,为不充分条件.
至此启动此程序,会光荣的报错,可服上剂.

PHP5的oci8不兼容oracle8 oci的解决

近来尝试将服务器迁移到PHP 5+MySQL5,
发现PHP 5.1.4里面的php_oci8.dll无法加载.
打开display_startup_errors选项后提示无法加载php_oci8,找不到指定模块.
 
在另一台安装了10g客户端的机器上是可以的.
后来用老办法,对比导入表和导出表,发现是php_oci8使用了9i和8i的oci不支持的OCILobRead2函数.
 
因为5.1.2的oci8是正常的,马上冲去php的bug tracker网站报告问题,结果被告知这设计就是依赖于10,原因是他们认为在工作于8i兼容模式和让用户下载10的InstantClient两种取舍之间,选择了后者.
于是我很郁闷,我就回复说我服务器本身有Oracle 9i服务端,服务端自身带的有oci,安上InstantClient后混用的问题一堆,(05年就郁闷了我大量的时间),不可能为了你PHP而崩掉其他用OLE/ODBC/Client的程序或者升级oracle服务端(服务器烂,升过10g跑不动),同时因为这个只是php_oci8用到的66个函数里面(9i OCI有六百多个函数),只用了1个依赖于10的函数,要说是为了工作于大于4G的2模式,为何别的函数都没动,然后怀疑他们先搞坏了再建议用户用10,结果被鄙视了,月我们已经解释完了你可以走了.
在报告bug前,尝试编译php_oci8出错,我用了一个Q&D的方法,用LordPE修改了导入表,当然这个LobRead和LobRead2中间的回调函数的参数个数不一样的,这样做只是让Windows成功载入oci8,报告bug后我很郁闷打算自己来解决,重新看了下514的代码,原来是514的dsp工程里面遗留了php4ts作为库导入,改为php5ts后,用9的include编译通过.
我认为这个问题发生的原因就是PHP的php_oci8.dll是使用导入表来使用oci.dll,因为php_oci8.dll不是独立的进程,那么他也就依赖PELoader用宿主w3wp/inetinfo调用oci.dll,也就是一切看当前的环境变量了.
经过分析,10g的oci.dll不再加载其他oracle的dll文件,那么按照宿主进程当前目录优先的规律,将其放置入windows\system32\inetsrv文件夹,然后用进程查看工具,dllhost,msdtc和其他程序调用的oci是系统里的9i目录中的,而w3wp/inetinfo使用的是其目录下的10g的oci.dll,这个dll因为不在系统path中,也不会被IIS以外的程序使用.
这个解决应该是既不用用9来编译,而且不会引起系统的版本冲突的办法了.
进一步,使用LoadLibrary来处理用到的每个函数地址,取代使用导入表硬性引用方式,应该可以起到相等于oci.so的作用.
更进一步,在PE级别对2个dll进行合并(以前成功进行过这种疯狂操作),或者说从dll得到静态lib,编译出不需oci.dll的php_oci8.dll,好像会更加的解恨.

打算跑路

入不敷出多时,正式准备跑路.
从没料到自己没跑路前,公司会难以继日了.
一晃眼已经是二年多过去了
如果不是工资欠的太多,不好说偶还会继续在这里呆个几年…
 
老板打听的消息,上海的公司招人,如果不是熟悉你的,每月也就2k
这样的话,岂不是铁定入不敷出了?
租房都是交3押1,加上配半台机器,吃喝交通,约莫估计了下,以最小单位三个月来算,得花费9k~1w2.
 
这样的话,必须找首月能到3k~4k的工资(税后),而且还不知道是否会再次忙得昏天黑地.
不过估计上海不会有公司需要单个员工去完成万能的任务吧,是否有点担忧过多了.
到上海找工作主要考虑是据说治安好一些.如果俺到广东,以俺的大条神经,估计不被抢就是稀里糊涂被吸收入抢包帮去抢人.

Oracle诡异地迁移成功

安装时候使用的是Oracle建议的轻量目录模型,
先是测试把/u01和/u02里面相关的目录分别压了2个bz2包,
然后直接复制到ubuntu里面,添加相应的用户,
设置目录权限,
和设置内核参数,用户环境后
手抖抖的输入lsnrctl start
居然启动了
然后是startup
也没有问题.
 
Oracle居然算绿色软件,简直非洲老爷子跳高
 
接下来,昨天晚上就半夜把业务机彻底备份后,
停机迁移到了ubuntu了.
有不少需要编译的ubuntu或者是一些和发行版相关的安装程序,
也在之前尝试过添加RHEL特定的脚本来解决.
机器确实是慢,压缩,备份,和安装都花了很多时间.
 
最后做完已经是凌晨6点,体力不支去睡了.
 
今天在测试环境测试了9206到9207的升级
也测试了不替换gcc(也就是使用GCC 4.2)relink
发现lsnrctl和sqlplus输出提示信息的速度倒是咸鱼翻身变得很快了
 
就是不知道数据库部分做relink后会不会有什么性能增益
估计不会有什么改变的,外围工具依赖的模块较少,内核估计有一些是编译过的库,无法类似工具一样从源码级的编译得益.

准备把rhel+oracle9迁移到ubuntu

还是只能用9.
服务器太慢,P3 933,括到了1G内存,达不到10的推荐需求(10g大概是推荐2~8G)
cpu不能换,主板不支持更高频率,貌似也不支持更大内存.
 
结果还是要选需要打一堆补丁的9i了.
上次在服务器上试验9和10,同样的网站后台,刷出第一页时间差了1秒多.
之所以选ubuntu,大概是纯粹因为他是单CD的安装,而且算较为保守的发布版本.
之前打算使用CentOS,后来还是算了.
CentOS的Grub和启动的Logo都比较审美疲劳,ubuntu的human还算不错.
 
从alternate装的,装完拷个宋体,去掉openoffice,去掉gimp/games等,再删掉一些服务.
一想起来一年前恶梦般的9i安装,我就郁闷,改完一堆系统参数,系统不崩,人也离死不远了,更郁闷等安装完还有好多要记得改回去,不禁痛苦的狂啸着奔特了.