本来想做一个按任意键结束程序的,但是没有能够实现,只好变成按回车或者输入键了。
在perl当中,要获取键盘输入,通常状态下是这样写的:
1 2 | my $getch = <STDIN>; chomp($getch); |
其中
当中getch()这类的接受一个字符的。所以就只好换按任意键结束为按回车键结束了。
我们假设需要实现的情况是这样子的,一个程序它需要反复运行,或者长时间运行,你需要一个类似于按Ctrl+C这样的,可以让它
随时终止的程序,这样以保证你的数据会正常的存盘。当然我知道你按Ctrl+C也会让程序flush内存,但是有些时候数据只处理到
一半,还需要再处理一下才输出到文件当中时,就需要你自己控制一下了。
大约的思路是,另开一个线程,让它一直处于等待状态,直到接受到回车为止,终结整个程序。我设计的程序本身是一个每隔15分
钟执行一次的,直到接受到回车为止。技巧有:
1. 使用单独的线程接受回车;
2. 使用线程间共享的控制变量;
3. 把主线程休眠的时间化整为零,这样才能让它每隔较短的时间就检查共享的控制变量有没有变化从而结束整个程序,否则它会等
待过长的时间来结束程序,这会引起使用者的误会。
原代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #!/usr/bin/perl use strict; use warnings; use Thread;#使用线程库 my $remark : shared;#要使线程间共享数据,需要在定义变量时加入shared标识。 my $in = threads->new (sub { #响应结束线程 $SIG{KILL} = sub { threads->exit(); }; # 等待输入 chomp ($remark = <STDIN>); }); print "press Enter to stop.\n"; while(not defined $remark) { #执行主程序 print "waiting for Enter to stop\n"; #化整为零,每隔1秒检查一次控制变量$remark是否有变化。 #没有就继续,有则退出; for(my $i=0; $i<900;$i++){ if(not defined $remark){ sleep 1; }else{$in->kill('KILL')->detach;#终止分线程 $i=900;#终止休眠 } } } |
啥也不说了,感觉这段视频真的是啥都可以配啊~~
Tags: 网络视频
问题很简单,就是需要perl控制喇叭发出di的一声,就象c中的beep一样。首先,我试了print “\a”;的方式,结果表明,这个在
linux下可以很方便的实现翁鸣的东西,在windows下并不那么容易起作用。又试了下面的程序:
1 2 3 4 5 | #!/usr/bin/perl -T use strict; $|=1; print "\a"; exit 0; |
把它保存为beep.pl后,在cmd当中执行:
perl -T beep.pl
可以在windows下实现翁鸣,但是它一用于程序当中让喇叭响一下就会让整个程序终止在那里,无法完成整个程序。
发现在windows下,使用Win32::Sound库可以很好的实现让喇叭出声。我们这么简单的一个要求,就有点杀鸡用牛刀的感觉了。
原代码如下:
1 2 3 4 5 6 | #!/usr/bin/perl use Win32::Sound; Win32::Sound::Volume('100%'); Win32::Sound::Play("notify.wav");#notify.wav可以换成任意wav文件 Win32::Sound::Stop(); |
中国在世界啤酒市场所占份额正在快速成长。在过去十二年里,中国从几乎不怎么消费啤酒到现在成为世界上最大的啤酒消费国。所消费的啤酒数量已经远远超过美国及欧洲。依据Credit Suisse’s World Map of Beer的数据统计显示,中国每年的啤酒消费以每年10%的速度增长。这于世界的啤酒制造商来说,是一个非常好的事情。ABI, SABMiller, Carlsberg 和 Heineken享有世界近一半的市场份额,但有数据表明,它们在美国市场销售正逐年下降。而恰恰是中国市场给了它们很大的转机。而且中国正在成长的市场也让啤酒商们很受鼓舞。
来源:http://economist.com/node/16839104
一般的,当我们使用BLAST(是一种用于在数据库当寻找任何蛋白质或者基因序列与你的目标序列一致的程序)时,我们会注意到这里有一个E值。那么这个E value是什么呢?怎么来理解这个值呢?
下面是一个平常的blast结果,
| Sequences producing significant alignments: | Score (S) | E |
| gi|83574104|Moth_2374|sporulation – prote… | 202 | 2e-53 |
| gi|83573446|Moth_1696|Sporulation – prote… | 112 | 1e-26 |
| gi|83571874|Moth_0087|sporulation – prote… | 95 | 3e-21 |
| gi|83573435|Moth_1685|Substrate-binding -… | 27 | 1.0 |
后面有两个值,一个是S值,一个E值。可以发现,结果是依据S值的高低来显示的。
S值表示两序列的同源性,分值越高表明它们之间相似的程度越大。
E值就是S值可靠性的评价。它表明在随机的情况下,其它序列与目标序列相似度要大于这条显示的序列的可能性。所以它的分值越低越好。
E值的计算:
E=Kmn(e-lambda*S)
其中,K和lambda与数据库和算法有关,是个常量;m代表目标序列的长度,n代表数据库的大小,S就是前面提到的S值。
通常来讲,我们认为E值小于10-5就是比较可性的S值结果。我们可以想象,相同的数据库,E=0.001时如果有1000条都有机会S值比现在这个要高的话,那么不E设置为10-6时可能就会只得到一条结果,就是S值最可靠的那个。
但是E值也不是万能的。它在以下几个情况下有局限性:
1. 当目标序列过小时,E值会偏大,因为无法得到较高的S值。
2. 当两序列同源性虽然高,但有较大的gap(空隙)时,S值会下降。这个时候gap scores就非常有用。
3. 有些序列的非功能区有较低的随机性时,可能会造成两序列较高的同源性。
BLAST试图去避免这些问题,但是还是应该自己有个清晰的概念。
E值总结:
E值适合于有一定长度,而且复杂度不能太低的序列。
当E值小于10-5时,表明两序列有较高的同源性,而不是因为计算错误。
当E值小于10-6时,表时两序列的同源性非常高,几乎没有必要再做确认。
有人问我能不能把多显示分辨率设置软件修改成非交互式的,而是直接接受参数的那种,好用于无人干预条件下。我想这个建议不错。
于是基于之前《基于对话框的Window扩展显示器软件》及《
修改显示器分辨率的小软件 》基础上,稍加修改,写了这个可以工作于windows xp下的dos命令。
立即下载:ouMulScr
使用方法:
- 关闭扩展桌面:ouMulScr 0
- 开启扩展桌面: ouMulScr 1
- 修改某一扩展桌面的分辨率: ouMulScr 1 x.xxxx.xxxx x.xxx.xxx …
其中x.xxxx.xxxx中的.为分隔符,分隔符可以是,或.或;或:。x为数字。第一个数字为扩展桌面的序号,主桌面为0,第一个扩展桌面为1,依次类推。第二数字及第三个数字为扩展桌面水平分辨率及垂直分辨率。例:我想修改第一个扩展桌面的分辨率为1024X768, 就写成:
ouMulScr 1 1.1024.768
或者是:
ouMulScr 1 1,1024,768
或者是:
ouMulScr 1 1:1024:768
或者是:
ouMulScr 1 1;1024;768
如果想同时修改多个桌面的分辨率(最多为10个),把想修改的桌面分辨率以上面的格式加在后面就可以了。比如修改为主桌面1024X768,扩展桌面为1280X1024,命令为:
ouMulScr 1 0.1024.768 1.1280.1024
如果这个软件可以帮助您的话,请帮助本站点击广告以支持本站,谢谢。
首先声明,这里并不是我用perl来写个算法。如果需要算法相关的东西,得去看文献。
这里,其实只是借对格兰氏阳性细菌蛋白质定位的预测为例,来说明如何利用他人提供的在线查询功能来实现批处理。
假设现在有一个完整的基因组需要您去预测它当中的每一个开放阅读框翻译出来的蛋白质可能的细胞内定位,怎么办呢?手工一个一个提交到网站上去?一共会有四五千个蛋白,等你提交完,你的手和大脑都会不工作了吧?要不自己下载个软件来本地预测吧?我试过去安装那些要求的软件环境,也许是我的系统过新吧,一个c语言库的版本,一个g77让我就头大得不知道该怎么继续下去。于是我还是下定决心,用perl的lwp来伪装成浏览器提交申请,自动批处理吧。也许一觉醒来,全部都做完了。
我们要用到的网站是http://www.psort.org/psortb/。据网站上宣传,Based on a study last performed in 2010, PSORTb v3.0.2 is the most precise bacterial localization prediction tool available. 第二个原因就是can currently submit one or more Gram-positive or Gram-negative bacterial sequences or archaeal sequences in FASTA format。这对于研究格兰氏阳性菌的我来说的确很不错的网站。
最基本的,用lwp来虚拟提交一份表单上去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/usr/bin/perl use LWP::UserAgent; $ua = LWP::UserAgent->new; $ua->agent("Mozilla 8.0 beta"); use HTTP::Request::Common qw(POST); my $req = (POST 'http://www.psort.org/psortb/results.pl', ["seq" => ">$genes{name}\n$genes{translation}", "organism" => "bacteria", "gram"=>"positive", "advancedgram"=>"none", "format"=>"long", "sendresults"=>"display"); $request = $ua->request($req); print $request->as_string; |
结果得到的,怎么都是500 Internal Server Error。于是在网上狂google,也没有找到直接的答案。半夜两点,突然想起,为什么不自己想法来解决问题。于是开始用tcpdump抓包,对比从firefox发送出去的包和perl发送出去的包,具体看看有什么不同。 读取更多/Read the rest of this entry »
![taxes[1] 美国的税务](http://www.qiuworld.com/blog/wp-content/uploads/2010/08/taxes1-332x2480.jpg)
![MNT-US-DEBT-R3[1] 美国国债持有者构成图](http://www.qiuworld.com/blog/wp-content/uploads/2010/08/MNT-US-DEBT-R31-560x609.jpg)
![201034NAM468[1] 世界啤酒市场份额分布图](http://www.qiuworld.com/blog/wp-content/uploads/2010/08/201034NAM4681-560x390.gif)
![ChgkC[1] 图解咖啡](http://www.qiuworld.com/blog/wp-content/uploads/2010/08/ChgkC1-560x535.jpg)

