2006年8月31日星期四
kubuntu
找时间到图书馆上个网,升级一下系统。但问题是我连网线都没有了,郁闷。
上次硬盘摔坏了,不过还好居然还可以用。有时候太小心保护的结果是适得其反,唉。还有两天就报到了,现在成天在宿舍睡觉看电视,完全与世隔绝了,惨啊。开学后尽快得弄点money把网络办起来,虽然学校的网比较烂,但是有总比没有好。
2006年8月28日星期一
2006年8月26日星期六
流水账
[数据处理脚本升级]
今天改写了一下实验数据自动处理脚本。脚本版本号升级到0.1.1,主要是增加了另外两个作图模块。
因为这个脚本异常处理、交互性和数据输出格式方面的性能都比较差,所以要在实验室里面推广还是比较困难的。
ChangeLog:
0.1.1 增加另外两种作图方法
TODO:
8. 增加选择作图方法的模块,以便于在3种图形输出之间选择
9. 为了实现8,必须将作图模块作为单独的函数独立出来
放弃了将初始化模块添加到表格加载事件的努力。主要是因为 (1) Excel的安全级别默认比较高,不信任外来宏;(2) 如果每次加载表格都进行工作表的初始化,那么在处理完数据后,每次查阅时会引起很多问题,所以这个过程还是交给用户手工完成。
TODO部分增加了选择作图方法的需要。因为平时并不一定完全要用到3种方法,也许只需要一种。所以决定增加一个变量:表格选择。通过让用户给这个变量赋值,得到用户想要的结果。默认使用作图方法2,即最广泛使用的,精确度/线性最平衡的一种方法。
为了避免代码冗长,所以,要大量修改源代码,将作图模块独立出来,使用独立的过程完成作图和作图选择。
这个版本的源代码就不贴上来了,也就是增加了两个作图模块,结构完全和0.1.0的作图模块相同,只是修改了一下选择区域而已。
另外,我也在心理上放弃了对美化表格格式的修改尝试:即,单元格适合数据宽度,图表位置排列…… 这些工作不但麻烦,而且不具有可移植性,所以还是留给用户自己美化数据格式比较恰当。
[翻译]
翻译的进度老是上不去,每翻译半页就开始觉得没劲了。计划翻两篇,还剩3页半没有翻译,文章实在是又臭又长。老外的论文看多了也让人心烦,同样意思的一句话,在文章中重复,重复,再重复的说,都看得眼睛发花了。
[CSI]
我要看CSI啊!
[QQ]
还是不敢在网吧用QQ,开个Gmail和MSN都胆战心惊的。
[编程]
我应该学什么语言?想去买一本书,系统地学一种新的语言。C++, Java, Perl, Python, FORTRAN……只想选其中的一种。迷茫中……(也许Perl最合适些)
[Bioinformatics]
Bioinformatics = Perl, Perl, Perl……可惜一窍不通。
[cygwin]
cygwin的中文也真要命。一句话:乱码啊。
[热]
最近天气又热了。
[报到]
离报到还有整整一周。
[破解]
啥时候能把学校的上网客户端的反代理破解了……
[完]
2006年8月24日星期四
讨厌到处找教室
在住处躺在床上翻译?听起来好像很不错,但是累的要命。暑假期间,教室没有全部开放,还有人在上课,仅有的几个教室都是人满为患,好不容易看到了一个插座旁边空着一个位置,兴冲冲的跑过去,插上一看——没有通电,立刻吐血。无奈,只好用电池扛着。总不能让我在宿舍充半天电,然后用半天吧?
回宿舍的时候,路经网吧一个,所以立刻闪进去,吹吹空调,惬意无比。10月份之前估计不能正常地上网,又是在鸟不拉屎的北区,人生地不熟,先悲哀一个……
印象中,研究生是不熄灯的,但是心里还是有点忐忑,好像很多好事一轮到我就取消了……呸呸呸,乌鸦嘴。
已经完全不习惯用网吧的机器了,要不是买移动硬盘超支,我就去买一个1GB的U盘,在里面放上一些绿色软件,到网吧时就有自己的软件可以用了。虽然网吧的电脑都用Maxthon了,但是我还是喜欢Firefox,开机第一件事就是下载Firefox——提高火狐下载量啊,哇哈哈。
最近Gmail的垃圾邮件特别多,因为没有网,所以新闻看得少了。QQ已经超过一个星期没有登陆了。现在用用webmessenger,gmail talk,已经心满意足了。
算了,不鬼扯了。用满一个小时立刻闪人。
2006年8月22日星期二
怪异事件
难道是我在浏览的文章里带了“封杀”一词?
文章讲的是,中国部分驴子用户因为使用不道德的家伙改写的电骡程序,而导致donkeyserver 封杀全部中国用户的事件。
那家伙使用了emule源代码,绝口不提原作者,还把改写的代码闭源,严重违反了GPL,太不道德了。
那个骡子客户端叫做Vagaa,如果你在使用的话,请不要再使用了,坚决抵制危害国内所有P2P用户利益的垃圾客户端。
移动硬盘
移动硬盘的盒子坏了,为了换盒子,珠江路跑了5趟,才搞定我的移动硬盘。
这次换的盒子据称是日立硬盘盒,据说用的是传说中最强悍的塞普拉斯芯片。不过,¥80呢,贵了些,我老疑心自己被狠狠地宰了一下。
也不知道怎么回事,一开始给我的红板,他们那里的那台破神舟电脑倒是认的,不过我的本本死活不认,怎么弄都说高速设备插上了低速接口。就是插上电源线也是如此,唉。在Linux下则啥都没有,系统根本就不认我插上的设备。把本子带过去之后,一开始他们说是我的USB接口挂了,后来我要求使用USB 2.0 U盘测试,结果显示速度绝对是2.0没错。他们也就没话说了,只能给我换板子。
给我换的板子是一块蓝色的板子(感觉他们在柜台下面低声细语,挤眉弄眼的),换板子之后,插上硬盘,那个硬盘指示灯的反应明显和一开始的红板不同,一下子就认了,而且居然连电源线都不要了,省了我一个USB接口。
现在电子产品的猫腻实在太多,到处是奸商啊……
2006年8月20日星期日
CSI, All night!
2006年8月18日星期五
2006年8月17日星期四
Google Picasa,Windows下的iPhoto
很早就开始使用Picasa了,那时Picasa还不支持中文,不过Picasa在不断的升级,不断地改进。它已经完全可以被称为Windows平台上的iPhoto了。(我用的是英文版的Picasa,主要是为了兼容Picasa Web在线相册。中文版的Picasa也有的。)
1. Picasa的普通试图
2. Picasa的简单图片编辑功能,效果很不错的。One Click解决图片问题。
3. Picasa的幻灯片方式播放图片,和iPhoto很像吧。
4. Picasa 的TimeLine,可以让你根据时间顺序浏览你的照片。
5. 和Picasa Web紧密结合,可以直接上传图片。
6. Picasa做图片效果,很棒的效果,可以用来做壁纸。

7. 我做的另一些Collage,这是kagaya的艺术画。
不贴更多图片了,想了解Picasa,装上一个试试,你不会失望的。
12颗大行星
太阳系有多少大行星的问题,就像论坛里面的吵架帖一样,谁都不服谁。柯伊柏带天体、小行星(astroids),到底能不能算是大行星呢?
这次的结论比较怪异,先看了图再说(看不清楚的话,点击图片放大,在看不清楚的话,找一块布擦擦显示器,把灰尘擦掉,免得和小大行星混起来了

这几个英文认识不?不认识的话,我就简单说一下。图上的太阳没有标注英文,后面依次是水星、金星、地球、火星、谷神星(第一次听说?一会告诉你是啥。)、木星、土星、天王星、海王星、冥王星和查龙(也不知道吧)、2003UB313(这个奇怪的名字……)
好了,传统的8大行星大家基本都没啥争议:水、金、地、火、木、土、天王、海王。冥王星算不算大行星,这个争论自从上世纪30年代以来争论过不少。有一段时间,这种争论算是平息了,所以冥王星以大行星的身份被写入教材。然而,随着望远镜日趋强悍,一些和冥王星个头差不多的天体不断的被发现。甚至在冥王星轨道外还发现了比冥王星体积更大的天体。于是,太阳系的大行星的争论再次热闹起来。
也不知道这个12行星新定义是怎么产生的,反正是一团浆糊。冥王星保级成功,另外有三个天体升级了。他们是很多人都不熟悉的,下面一个一个说明:
谷神星(Ceres):如果你地理学的比较好的话,你一定知道在火星和木星之间有一个小行星带,这个小行星带上面,上面有n多石头共同运行在几乎同样的轨道上面。把astroid翻译成小行星我一直觉得不是很妥当,但是约定熟成了,也没办法改了。老外的名词则很容易区分大小行星:Planet(大行星),Astroid(小行星)。因为名词翻译的问题对我们理解大小行星的分类产生了一定的误导。大小行星之间的差距并不仅仅在于一个大/小的关系。扯远了,言归正传,谷神星是小行星带上,最早发现(1801年意大利人皮亚其发现),也是最大的一个(直径~952KM),但是它却不是最亮的。小行星带上最大的四个天体分别是谷神星、智神星(直径~585km)、灶神星(直径~549km),婚神星(直径~248km)。(最亮的是那个我忘了

查龙(Charon):Charon是谁?知道在希腊神话中通往冥界的边缘有一条河,名叫“沉羽河”,顾名思义,沉羽河里连羽毛都浮不起来,人死后要到冥界,只有通过在河上摆渡的“Charon”的船才能过去。而要让Charon帮灵魂摆渡,必须要付很多钱。那些没有钱付给查龙的灵魂只能在沉羽河边哭泣,嚎叫,或者被推入沉羽河,永远的在河底做冤鬼,永世不得超生。所以殡葬上回给死者烧很多纸钱,以支付高额的过渡费。


2003UB313:这个行星我也不太了解。去年的时候好像还把它叫做第十大行星。因为它个头比冥王星大,既然冥王星也是大行星,它也就理所当然地成为大行星了。这个行星才发现了不久,应该是柯伊柏带天体,所以暂时还没有正式的名字,所以用编号代名字。它可以算是半路上杀出的一匹黑马了。
下面的图是MIT的首页。我一直很喜欢MIT首页上面展示的文化。我上面的图片就是从里面弄下来的。多关注MIT的首页变化,你会了解科学界的一些前沿信息。
明天回南京了
把没有下载完的电影下完,看掉,删除。升级一下ubuntu——马上就没得网络用了,估计我那ubuntu早晚会灭掉的。AS4就不升级了——也不能升级的,装了一个巨大的软件,一点活动空间都没有了。不知道老板是不是会对Linux和Sybyl感兴趣。
在考虑买一块无线网卡,这样,在开学前还可以在教室里上上网,还要买一块硬盘盒,我的移动硬盘才用几天,盒子就挂了,计划中还要买一个1GB的U盘,但是预算不够,看来得暂时搁置了。
东西好像整理的差不多了,也没什么东西可以整理的。现在就差本本还在用。
明早6点不到就要到出去等车了,今晚得早睡了。
blogspot.com
近期blogger的再次可以访问不知道是出于什么原因。估计很快就又会被封,所以不敢在blogger里面写东西了。不过为了测试,还是写了一个帖子进去。有兴趣的看看。
以下是截图。注意,我没有打开tor哦。
Google官方博客
2006年8月16日星期三
猫王
以下介绍是摘自维基百科的猫王介绍(图片也来源于维基百科)。我就不找英语的了,肯定是长长的一堆。猫王在美国的影响力一直持续到现在,他依然是很多美国人心中伟大偶像。
埃尔维斯·普雷斯利(Elvis Presley),昵称猫王(The Hillbilly Cat and King of the Western Bop,1935年1月8日—1977年8月16日) ,知名美国摇滚乐歌手与演员。普雷斯利出生于密西西比州图珀洛(Tupelo, MI),虽然生平曾与不少知名女性相恋,但却只曾与普莉西拉·普雷斯利(Priscilla Beaulieu Presley)结缡,生有一女丽莎·普雷斯利(Lisa Marie Presley)。普雷斯利经常被认为是摇滚乐历史上影响力最大的歌手,因此又有摇滚乐之王(The King of Rock 'n' Roll)的誉称。

我听过一些猫王的音乐,但是说实话,没什么共鸣的。文化差异太大了。但是说到这首歌大家应该很熟悉:Can't help falling in love。有很多人翻唱过这首歌。我听到的是女声版翻唱的这首歌,而且把这首歌改成了节奏比较活泼的风格。我在四年前才知道,原唱居然是猫王。那时还在浦口那里,某天下午无聊,听南京体育台的音乐节目,那天正好播放猫王特辑,然后听了一些猫王的介绍和几首歌。其中一首就是上面提到的那首歌,另一首歌叫作 Love me tender,同样是一首非常著名的歌曲。
OK,我就把这里的背景音乐换成 Can't help falling in love with you ,你听听,是不是很熟悉啊。(之所以不用Love me tender 是因为如果没什么感觉时听这首歌实在是太催眠了……)
易中天,新一代说书人
百家讲坛,乃堂堂央视的著名节目,也没被别人少批。里面讲的东西低级错误百出,真让人怀疑那些所谓“专家”的水平。百家讲坛,还不如直接改成说书节目算了。
易中天讲三国存心要颠覆三国人物在人们心中的形象,然后有人开始讲深楚汉之争的,什么什么的……都来了,不一而足。易中天着实成了新一代说书人的代表,他也因此算是赚了不少钱,成了红人。
什么还历史以本来面目啦之类的话全是放屁。颠覆了别人心中的英雄形象就这么让人愉快吗?鄙视一个。
我只是觉得易中天的东西实在没有任何学术价值,居然还摆在中央台大摇大摆的播出,如果说是娱乐群众,那还可以理解。如果真是出于这样的理由,那倒好了。或者把百家讲坛改为“时尚评书”倒是不错的主意。
Reflexive新注册机用法
Reflaxive出了很多很好玩的小游戏,很受大家欢迎。但是这些游戏都只能试玩,正式版都需要好多美金的,实在是太不爽了。就算是测试也应该全功能,不限时的测试啊。

OK,我们也只能靠注册机试玩完整版的游戏了。
不久前刚改过的Reflexive的注册算法居然又改了,以前的注册机有不能用了。还好,又找到了新的方法破解这些游戏。我随机选了两个游戏测试,发现注册机可以使用,所以立刻在此公布方法。
首先,到这里下载注册机(那个Reflexive_keygen.rar文件)。到http://www.reflexive.com/下载中意的游戏。安装过程我就不说了,这种软件都不会捆绑任何流氓软件的。装玩后选择运行游戏。你将看到如下画面:
选择“Already Paid”,你会看到下面的画面:
选择Pay by Web标签。在地址栏的"pid="后面单击鼠标左键,按住shift不放,按向右的光标箭头键(-->),直到"&did="前面,也就是把"pid="后面的那一串字符选中。复制。(不用鼠标选中的原因是拖不过去。)
启动注册机:keygen.exe,把那串字符粘贴到Product Code栏,点击“Gen”按钮。在Unlock Code栏里面会生成激活号码,选中,复制下来。

回到游戏注册窗口,选择“Already Paied”标签,在“Enter Activation Code Here”处粘贴注册机生成的激活号码。点击“Activate”按钮。
好了,你已经注册完成了。点击Return To Virtual Villagers,回到游戏。(这个游戏叫做Virtual Villagers)
发现已经是完整版了吧。呵呵,点击“Play Game”,就进入游戏了,enjoy!
2006年8月15日星期二
Windows Live Writer试用报告
OK,在经过对Windows Live Writer简单的试用之后,决定写这个试用报告。基本上,Windows Live Writer功能实在有限。对Windows Live Spaces的支持也就是写写日志而已。编辑器功能差强人意,不过基本上和web-base的编辑器没什么区别。没有日志备份、统计、Live Space管理等功能,设置里面好像还有什么Plug-in的选项,但是现在没有任何插件。
我的测试主要针对两方面,1. 对Live Space的支持;2. 对非微软blog的支持。幻灭的网站上已经对WordPress和Blogger进行过测试了,我就不重复了,我这里测试的对象是我的Livejournal,我很喜欢的一个Blog程序。以下是测试的一些结论:
- 界面仿Office 2003,有人喜欢有人讨厌——我属于后者;
- 编辑功能过弱,几乎和web-base的编辑器没有任何区别——可能有的人比较喜欢,因为使用习惯的问题,不过虽然编辑界面的相似性很大,但是生成的代码风格差别还是挺大的;
- 和输入法(至少是和微软拼音输入法)有致命的不兼容现象!Shift键切换中英文输入,在输入一个英文字母之后立刻变回中文输入法,切换编辑视图后,无法调出输入法。
- 不支持Tag,微软思维定势倒是挺厉害的,或者说他是故意的?
- 不支持Blog备份、统计、管理,只有那个烂相册可以用。那个500MB的空间塞100年都塞不满。
- 其他的bug等待继续发现——不知道什么时候可以经历Live Writer的第一次崩溃,我得提防着点。
OK,下面贴图了。
实际效果(左Firefox,右IE,Firefox的IETag)
LiveSpace(网页视图) LiveSpace(预览视图)
安装过程我就不详细说明了,相信大家都已经熟悉的不能再熟悉了。唯一要注意的是安装时不要选择安装“Windows Live Toolbar”。在设置帐号之后,在“我的文档”里面会自动生成一个名为 My Weblog Posts 的目录,用于保存草稿之类的。
Ready to try? It's your turn, now. :)
update 1
有一点很要命,就是不支持对过去日志的修改……
测试Windows Live Writer
为了测试对LJ的支持,所以在Windows Live Writer里面添加了LJ的帐号,并且发帖子确认。
虽然Windows Live Writer比较简陋,也没有日志备份等相关功能,不过因为可以直接用它来编辑Live Space,就不怕那个web-base的编辑器的频繁崩溃了。
突然发现,Live Writer里面的英文字体挺漂亮的,不知道是什么字体,一会儿查一下。
突然发现这个东西不支持Tag... 微软的思维定势,遗憾,遗憾。
Live Spaces的Blog写作工具。 :D
有了本地的编辑工具就好多了,这样就省了我好多的时间:打开blog,登陆,等待网页加载,新建,等待编辑器加载,写日志,发布,等待发布……一个永远也没有尽头的过程。
微软终于良心发现了,推出了本地化的博客写作工具——Windows Live Writer。谁叫微软恶心,不开放API的,要不然早就有这些很handy的工具了。
刚才发现的,还没有来得及测试,明天写一个试用报告。尽请期待。

update 1
安装包里面居然有一个什么“Windows Live Toolbar”,大家小心哦,不要把这种垃圾也装上了哦。
Inclusion Constant数据处理脚本0.1.0
这个脚本比起昨天的脚本来,已经不可同日而语了。这个脚本已经是全功能的自动处理脚本了,解决了如下几个大问题:
1. 解决处理的数据组数8组的限制问题,现在这个组数可以由你来决定;
2. 完全重写数据处理部分内容,虽然限制了处理数据的组数在5-10组之间,但是可以随时进行扩充;
3. 重新调整数据输出格式,增加了一定的可扩展性;
4. 增加了多个变量和多个数据输入区域,这样你可以定制更多的参数,增加了灵活性;
5. 已经解决了曲线拟合只能在sheet1中的限制;
TODO:
1. 增加另外两种作图方法(即求CD的包合常数的方法);
2. 将初始化表格的那个宏添加到表格加载的事件中
3. 对脚本进行优化
4. 将半自动计算IC的Sub自动化
5. 在表格输出结果的格式上作一些小改动
6. 开始着手用其他语言改写这个脚本
7. 增加异常处理模块
虽然写脚本的时候是一边看资料,一边写的,不过写了这么长长的一堆还是挺有成就感的。


VB已经是忘记的一干二净了,不过,因为现在学到了很多以前不懂的东西,重新接触VB感觉已经和当初不大一样了。我编程的速度一向比较慢,但是因为这不是什么考试,所以也不需要很快,就当是一种娱乐了,哈哈。
OK,献上脚本。
授权吗?嗨,这种脚本就放在公有域了。(Public Domain,反正你也不知道我的名字,而且这个脚本对你一点用都没有。

Attribute VB_Name = "模块1"
'
' 作者: 我
' 日期: 2006年8月14日
' 版本: 0.1.0
'
' 用途: 环糊精包合常数自动计算脚本
'
' ChangeLog:
' 0.0.1 完成计算脚本的大体框架
' 0.1.0 重新格式化输出结果表格格式,完全重写数值计算部分代码,增加多个变量
'
'
'
' TODO:
' 1. 增加另外两种作图方法(即求CD的包合常数的方法);
' 2. 将初始化表格的那个宏添加到表格加载的事件中
' 3. 对脚本进行优化
' 4. 将半自动计算IC的Sub自动化
' 5. 在表格输出结果的格式上作一些小改动
' 6. 开始着手用其他语言改写这个脚本
' 7. 增加异常处理模块
'
'
'
' 生成格式固定的表格
'
Sub Init_Tbl()
'
' 这个过程将被添加到空白表格的加载事件中
' Init_Input Macro
' 初始化表格,等待用户输入吸光值(A0-An)、环糊精质量(mCD)和环糊精平均分子量(MCD)
' 以及其他的额外数据
'
'
' 用户输入区。包括部分数据输出区。
'
Range("B2").Select
ActiveCell.FormulaR1C1 = "波长(nm)"
Range("D2").Select
ActiveCell.FormulaR1C1 = "CD类型"
Range("F2").Select
ActiveCell.FormulaR1C1 = "pH"
Range("H2").Select
ActiveCell.FormulaR1C1 = "定容体积(mL)"
Range("I2").Select
ActiveCell.FormulaR1C1 = "10" ' 如果用户不修改这个数,将不作修改,大多数情况下,这个数值是正确的
Range("B3").Select
ActiveCell.FormulaR1C1 = "注射针数"
Range("D3").Select
ActiveCell.FormulaR1C1 = "每针剂量(μL)"
Range("F3").Select
ActiveCell.FormulaR1C1 = "原始剂量(mL)"
Range("G3").Select
ActiveCell.FormulaR1C1 = "2.5" ' 如果用户不修改这个数,将不作修改,大多数情况下,这个数值是正确的
Range("B4").Select
ActiveCell.FormulaR1C1 = "A0 -> An"
Range("B5").Select
ActiveCell.FormulaR1C1 = "CD质量(g)"
Range("B6").Select
ActiveCell.FormulaR1C1 = "CD摩尔质量(g/mol)"
Range("B7").Select
ActiveCell.FormulaR1C1 = "CD物质的量(mol)"
Range("B11").Select
ActiveCell.FormulaR1C1 = "包合常数(1/mol)"
Range("F7").Select
ActiveCell.FormulaR1C1 = "溶剂"
Range("G7").Select
ActiveCell.FormulaR1C1 = "水"
Range("H7").Select
ActiveCell.FormulaR1C1 = "药物名"
Range("I7").Select
ActiveCell.FormulaR1C1 = "某药"
'
' 生成表格主体格式 (不包括组号)
'
Range("C13").Select
ActiveCell.FormulaR1C1 = "A"
Range("D13").Select
ActiveCell.FormulaR1C1 = "[CD](mol/L)"
Range("E13").Select
ActiveCell.FormulaR1C1 = "1/[CD]"
Range("F13").Select
ActiveCell.FormulaR1C1 = "1/(A-A0)"
Range("G13").Select
ActiveCell.FormulaR1C1 = "A-A0"
Range("H13").Select
ActiveCell.FormulaR1C1 = "[CD]/(A-A0)"
End Sub
Sub Data_Proc_All()
'
' 变量定义部分
'
Dim m_cd As String '定义CD物质的质量,即称量质量
Dim mw_cd As String '定义CD的分子量,即摩尔质量
Dim n_cd As Double '定义CD物质的量,即质量/分子量
Dim wl As String '定义波长,即选取数据的波长,一般为波峰处
Dim t_cd As String '定义CD名称。以后使用固定CD名,添加根据CD名称确定CD分子量的代码块
Dim ph As String '定义pH,用途暂时未明确
Dim n_inj As String '定义注射次数
Dim a_inj As String '定义每针剂量
Dim a_ori As String '定义原始剂量,即,打针前注入比色皿的液体体积,一般为2.5mL
Dim v_cst As String '定义定容体积,即,实验使用的容量瓶体积(药品溶液定容CD的定容体积)
Dim tmp_msg As Integer '定义消息框临时变量
'
' 变量赋值部分
'
' 用户输入部分变量赋值,除吸光值外。吸光值输入将在表格填充,即数据处理部分完成。
'
Range("C5").Select
m_cd = ActiveCell.Value
Range("C6").Select
mw_cd = ActiveCell.Value
n_cd = (m_cd / mw_cd)
Range("C2").Select
wl = ActiveCell.Value
Range("E2").Select
t_cd = ActiveCell.Value
Range("G2").Select
ph = ActiveCell.Value
Range("I2").Select
v_cst = ActiveCell.Value
Range("C3").Select
n_inj = ActiveCell.Value
Range("E3").Select
a_inj = ActiveCell.Value
Range("G3").Select
a_ori = ActiveCell.Value
'
' 数据处理部分
'
' 填充数据:组号和吸光值
'
'
' 定义变量
'
Dim rng_no As String '定义组号单元格位置
Dim rng_cntr As Integer '计数器临时变量
Dim rng_a_ori As String '复制源吸光值的单元格位置
Dim rng_a_dst As String '复制到吸光值的单元格位置
Dim tmp_a As String '吸光值值传递中介
Dim rng_cd As String '体系的环糊精浓度
Dim tmp_cd As String '在[CD]到1/[CD]之间传递数值
Dim rng_cd_re As String '定义1/[CD]的单元格位置
Dim a_blnk As String '定义A0的值,也算是临时变量吧。
Dim rng_dlt_a As String '定义A-A0的单元格位置
Dim rng_dlt_a_re As String '定义1/(A-A0)的单元格位置
Dim rng_cd_dlt_a As String '定义[CD]/(A-A0)的单元格位置
rng_cntr = 0 '计数器初始化
'
' 填充CD的物质的量的值
'
Range("C7").Select
ActiveCell.Value = n_cd
'
' 为a_blnk赋A0的值
'
Range("C4").Select
a_blnk = ActiveCell.Value
'
' 计算表格中各种数据的循环
' 已经完全替换自动填充代码
'
For rng_cntr = 0 To n_inj
'
'各组运算值的单元格位置赋值
'
rng_no = "B" & (14 + rng_cntr)
rng_a_ori = Chr(Asc("C") + rng_cntr) & "4"
rng_a_dst = "C" & (14 + rng_cntr)
rng_cd = "D" & (14 + rng_cntr)
rng_cd_re = "E" & (14 + rng_cntr)
rng_dlt_a = "G" & (14 + rng_cntr)
rng_dlt_a_re = "F" & (14 + rng_cntr)
rng_cd_dlt_a = "H" & (14 + rng_cntr)
'
' 填充组号
'
Range(rng_no).Select
ActiveCell.Value = rng_cntr
'
' 复制吸光值到目标单元格
'
Range(rng_a_ori).Select
tmp_a = ActiveCell.Value
Range(rng_a_dst).Select
ActiveCell.Value = tmp_a
'
' 主算法部分[CD],1/[CD]
'
'
' [CD]的值
'
Range(rng_cd).Select
ActiveCell.Value = ((n_cd / (v_cst * 1e-3)) * a_inj * 1e-6 * rng_cntr) / ((a_ori + (a_inj * 1e-3 * rng_cntr)) * 1e-3)
tmp_cd = ActiveCell.Value
If ActiveCell.Value = "0" Then
'
' 表格结果区处A0外的第一行留空
'
ActiveCell.Value = ""
Range(rng_cd_re).Select
ActiveCell.Value = ""
Range(rng_dlt_a).Select
ActiveCell.Value = ""
Range(rng_dlt_a_re).Select
ActiveCell.Value = ""
Range(rng_cd_dlt_a).Select
ActiveCell.Value = ""
Else
'
' 1/[CD]的值
'
Range(rng_cd_re).Select
ActiveCell.Value = 1 / tmp_cd
'
' A-A0,1/(A-A0),[CD]/A-A0的值
'
Range(rng_dlt_a).Select
ActiveCell.Value = tmp_a - a_blnk ' A-A0的值
Range(rng_dlt_a_re).Select
ActiveCell.Value = 1 / (tmp_a - a_blnk) ' 1/(A-A0)的值
Range(rng_cd_dlt_a).Select
ActiveCell.Value = tmp_cd / (tmp_a - a_blnk) ' [CD]/(A-A0)的值
End If
Next
'
'
' 生成结果表格的名称
'
'
Dim slv_nm As String '定义溶剂名,默认是"水"
Dim drg_nm As String '定义药物名,默认是"某药"
Range("G7").Select
slv_nm = ActiveCell.Value
Range("I7").Select
drg_nm = ActiveCell.Value
Range("D1:I1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Range("D1:I1").Select
ActiveCell.Value = t_cd & "在pH" & ph & "的" & slv_nm & "溶液体系中对" & drg_nm & "的包合常数 (" & wl & "nm)"
'
'
' 数据拟合部分
' 即:作图
'
'
'
' 为了使作图功能在不同工作表中都可以使用,现在将常量:工作表名替换为变量
'
'
Dim sht_nm As String
sht_nm = ActiveSheet.Name
'
'
' 对不同的注射次数选择不同的数据区域。
'
' 我汗,居然一定要3行一起放在选择结构里面
' 而且好像作图还是有时成功,有时失败的,晕死!
'
Select Case n_inj
Case "5"
Range("E15:F19").Select
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets(sht_nm).Range("E15:F19")
Case "6"
Range("E15:F20").Select
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets(sht_nm).Range("E15:F20")
Case "7"
Range("E15:F21").Select
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSou
rceData Source:=Sheets(sht_nm).Range("E15:F21")
Case "8"
Range("E15:F22").Select
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets(sht_nm).Range("E15:F22")
Case "9"
Range("E15:F23").Select
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets(sht_nm).Range("E15:F23")
Case "10"
Range("E15:F24").Select
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets(sht_nm).Range("E15:F24")
Case Else
tmp_msg = MsgBox("你注射的针数超过了10针,请联系作者修改脚本!",vbOKOnly,"警告!")
End Select
ActiveChart.Location Where:=xlLocationAsObject, Name:=sht_nm
ActiveChart.PlotArea.Select
Selection.ClearFormats
ActiveChart.Axes(xlValue).MajorGridlines.Select
Selection.Delete
ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).Trendlines.Add(Type:=xlLinear, Forward:=0, _
Backward:=0, DisplayEquation:=True, DisplayRSquared:=True).Select
ActiveChart.ChartArea.Select
'
' 假设线性回归方程的形式是:y = a*x + b
' 在输入a, b的值的时候,请务必带上"+/-"号
'
' 生成方程a, b值的输入区域
'
Range("B9").Select
ActiveCell.Value = "a"
Range("D9").Select
ActiveCell.Value = "b"
End Sub
'
' 半自动化计算Inclusion Constant
'
'
Sub Calc_IC
Dim a, b As String
Range("C9").Select
a = ActiveCell.Value
Range("E9").Select
b = ActiveCell.Value
Range("C11").Select
ActiveCell.Value = b / a
End Sub
2006年8月14日星期一
Inclusion Constant数据处理脚本0.01
这个脚本包含了两个宏过程,后面的将把两个过程合并,所有的数据录入均采用输入框形式。目前,数据处理需要先执行初始化宏,然后把数据手工输入或者粘贴工作表指定区域,然后执行数据处理宏,才能完成。最后因为目前还不了解如何获得回归方程的值,所以还需要手工计算IC(Inclusion Constant)。
后面的目标有:
1. 解决处理的数据组数,目前的脚本仅仅是针对处理8组吸光值数据而写的,后面将把这个8变成一个变量;
2. 完全重写数据处理部分内容,增加灵活性,目前使用了自动填充功能,后面将使用循环结构代替自动填充;//计划明天完成。
3. 重新调整数据输出格式,目前的数据输出格式的可扩展性太差;//计划明天完成。
4. 增加两种数据处理方法,计算IC有3种方法,目前的这种方法是很折中的方法,性价比耶最高,还有两种方法,其中一种更宽松,另一种更苛刻;
5. 增加错误处理,目前的脚本中没有任何处理异常错误的代码,后面将增加错误处理代码,改善用户体验;
6. 自动计算IC;
7. 让曲线拟合部分支持在任意工作表中执行,目前只支持sheet1;//计划明天完成。
8. (这个目标比较远)用Perl + gnuplot 改写所有数据处理脚本。(也许用Matlab写可能更简单些,完成了上面的7个目标之后再作打算。)
Attribute VB_Name = "模块1"
Sub Init_Input()
'
' Init_Input Macro
' 初始化表格,等待用户输入吸光值(A0-An)、环糊精质量(mCD)和环糊精平均分子量(MCD)
'
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "A0->An"
Range("A2").Select
ActiveCell.FormulaR1C1 = "mCD"
Range("A3").Select
ActiveCell.FormulaR1C1 = "MCD"
Range("A4").Select
End Sub
Sub Data_Proc_All()
Dim m_cd As String '定义CD物质的质量,即称量质量
Dim mw_cd As String '定义CD的分子量,即摩尔质量
Dim n As Double '定义CD物质的量,即质量/分子量
m_cd = InputBox("请输入环糊精质量:", "环糊精质量")
mw_cd = InputBox("请输入环糊精平均分子量:", "环糊精平均分子量")
n = (m_cd / mw_cd)
Range("B2").Select
ActiveCell.FormulaR1C1 = m_cd
Range("B3").Select
ActiveCell.FormulaR1C1 = mw_cd
Range("A4").Select
ActiveCell.FormulaR1C1 = "CD物质的量"
Range("B4").Select
ActiveCell.FormulaR1C1 = n
'
' Init_format Macro
' 初始化表格格式,创建样式一致的数据区域。
'
'
Range("B5").Select
ActiveCell.FormulaR1C1 = "A"
Range("C5").Select
ActiveCell.FormulaR1C1 = "cd(mol/l)"
Range("D5").Select
ActiveCell.FormulaR1C1 = "1/cd"
Range("E5").Select
ActiveCell.FormulaR1C1 = "1/A-A0"
Range("F5").Select
ActiveCell.FormulaR1C1 = "A-A0"
Range("G5").Select
ActiveCell.FormulaR1C1 = "cd/A-A0"
Range("A6").Select
ActiveCell.FormulaR1C1 = "0"
Selection.AutoFill Destination:=Range("A6:A14"), Type:=xlFillSeries
Range("B1:J1").Select
Selection.Copy
Range("B6").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("B15").Select
'
' data process Macro
' 数据处理部分。暂时不能推广。
' 比色皿初始注入体积2.5mL,每针100uL,打8针
' 这一段代码将完全被我的自己的代码所替换,以支持变量的使用
'
'
Range("C7").Select
ActiveCell.FormulaR1C1 = _
"=(0.1551/1135) /(10*10^-3)*(100*10^-6)*RC[-2]/((2.5+(100*10^-3)*RC[-2])*10^-3)"
'暂时还不能在这个公式中插入变量。
Range("D7").Select
ActiveCell.FormulaR1C1 = "=1/RC[-1]"
Range("F7").Select
ActiveCell.FormulaR1C1 = "=RC[-4]-0.053"
Range("E7").Select
ActiveCell.FormulaR1C1 = "=1/RC[1]"
Range("G7").Select
ActiveCell.FormulaR1C1 = "=RC[-4]*RC[-2]"
Range("C7").Select
Selection.AutoFill Destination:=Range("C7:C14"), Type:=xlFillDefault
Range("C7:C14").Select
Range("D7").Select
Selection.AutoFill Destination:=Range("D7:D14"), Type:=xlFillDefault
Range("D7:D14").Select
Range("E7").Select
Selection.AutoFill Destination:=Range("E7:E14"), Type:=xlFillDefault
Range("E7:E14").Select
Range("F7").Select
Selection.AutoFill Destination:=Range("F7:F14"), Type:=xlFillDefault
Range("F7:F14").Select
Range("G7").Select
Selection.AutoFill Destination:=Range("G7:G14"), Type:=xlFillDefault
Range("G7:G14").Select
Range("G15").Select
'
' 曲线拟合 Macro
' 曲线拟合。线性回归。
'
'
Range("D7:E14").Select
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("D7:E14")
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
ActiveChart.PlotArea.Select
Selection.ClearFormats
ActiveChart.Axes(xlValue).MajorGridlines.Select
Selection.Delete
ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).Trendlines.Add(Type:=xlLinear, Forward:=0, _
Backward:=0, DisplayEquation:=False, DisplayRSquared:=False).Select
'
' 显示回归方程(截距为0)
' 显示 r^2 的值。
'
'
ActiveChart.SeriesCollection(1).Trendlines(1).Select
ActiveChart.SeriesCollection(1).Trendlines(1).Select
With Selection
.Type = xlLinear
.Forward = 0
.Backward = 0
' .Intercept = 0.1
.DisplayEquation = True
.DisplayRSquared = True
.NameIsAuto = True
End With
'
' 显示包合常数的表格
' 暂时还没有想到好办法让包合常数也自己计算出来。
'
'
Range("I4").Select
ActiveCell.FormulaR1C1 = "包合常数"
Range("J4").Select
End Sub
Stellarium,免费的天文馆软件
虽然很早就听说Stellarium了,但是一直没有机会装一下。最近因为实在是太闲了,所以把Stellarium小小的玩了一下。
Stellarium是GPL协议下发布的免费软件,并且在多平台下有对应的版本,包括Windows,Linux,和MacOS X。你可以到Stellarium的官方网站免费下载最新版,Stellarium 0.81。
下面就用贴图来对这款软件进行简单的了解吧。
文字显示解决方案(For Windows):
Stellarium默认安装完,会根据你的区域自动设置软件的显示语言。如果你不进行调整,打开软件后你就会发现所有中文字都是框框。我现在还没有研究出显示中文的方法,暂时把所有的提示语言变成英文吧。方法如下:
开始菜单 -> 程序 -> Stellarium -> config.ini
按照如下方法修改[localization]部分:
[localization]
sky_culture = western
sky_locale = en
app_locale = en
time_zone = system_default
time_display_format = system_default
date_display_format = system_default
保存后再打开Stellrium就可以了。
好了,看图。