本来想做一个按任意键结束程序的,但是没有能够实现,只好变成按回车或者输入键了。
在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;#终止休眠 } } } |
什么是Facebook呢?
按照Facebook的官方说法,Facebook就是一个人际网络的辅助平台。你可以在上面展示和了解你的同事,学友,邻居以及好朋友的信息,大多数人用Facebook来与朋友保持联系。支持无上限在线影集,也可以从合作网址或者第三方网站上转载录相的链接,了解更多友人的信息。
”
About Facebook
Facebook is a social utility that connects people with friends and others who work, study and live around them. People use Facebook to keep up with friends, upload an unlimited number of photos, share links and videos, and learn more about the people they meet.
”
从历史的角度来讲,最开始Facebook由Mark Zuckerberg于2004年2月4日开布,最开始只是提供给Mark Zuckerberg所在的哈佛大学的学生们一个交流的平台。在之后的两个月内,注册扩展到波士顿地区的其他高校(波士顿学院 Boston College、波士顿大学 Boston University、麻省理工学院 MIT、特福茨大学 Tufts)以及罗切斯特大学 Rochester、斯坦福 Stanford、纽约大学 NYU、西北大学和所有的长春藤名校。第二年,很多其他学校也被加入进来。最终,在全球范围内有一个大学后缀电子邮箱的人(如 .edu, .ac.uk等)都可以注册。之后,在Facebook中也可以建立起高中和公司的社会化网络。而从2006年9月11日起,任何用户输入有效电子邮件地址和自己的年龄段,即可加入。用户可以选择加入一个或多个网络,比如中学的、公司的、或地区的。
”
Anyone can join Facebook
All that’s needed to join Facebook is a valid email address. To connect with coworkers or classmates, use your school or work email address to register. Once you register, join a regional network to connect with the people in your area.
”
Facebook的成长速度无疑是相当惊人的,仅用了四年的时间就已经成为全美是为流行的交友网站,远远地把MySpace等传统的基于Blog的交友网站甩在了身后。
于是很多人会奇怪,为什么Facebook可以如此快速的壮大起来?分析起来主要有两个原因,
1,良好的概念。
Facebook是基于公司,地区,学校的人际网络。加入这个网络,你可以从中了解到很多自己所认识的人的信息。
每个人都有一面属于自己的Wall,类似一个博客的发布地,但是概念稍有不同,Wall的本身脱胎于公告栏,你可以在上面贴贴子,当然别人也能,在公告栏上贴的东西可以设定只让加了自己的朋友看见,也可以让所有人都看见。其中Wall上除了有贴贴子之外,还可以什么链条,叫Wall-to-Wall,就好象Wall-to-Wall的参与者把自己的公告板拉到一起来,互相在对方的Wall上留言,彼此都能看到。
但是只是如此,并不能体现出Facebook与传统的博客有什么太大的区别,甚至可以说与BBS系统没什么区别。Facebook有一个很有趣的点子,充分为自己做到的宣传,那就是在Wall上所有与自己有关的留言都会以EMAIL的形式提醒用户,这样,用户就不会错过朋友的公告与留言了。这也直接地提高了Facebook的访问率。
你想接收某个朋友的Wall更新,在Facebook里有一个概念,叫做poke。这个词很容易让人有不好的联想,有点下流。但是它的本意是你捅一下你的朋友,以引起他的注意。如果你想接收朋友的更新,就使用poke,其实就是开放一种许可,当朋友确认之后,每当他的设定的你可看到信息有任何变化,都会有 EMAIL提醒你。于是你就可以跟踪到朋友的所有想展示给你的消息。当然,反过来,你也就多了一种方式让自己的朋友去了解自己想展示的东西。
既然是人际网络,那么自然会有礼物,有活动,有状态,有IM(这个这两天才开通),有社区,有群。这些东西都不是什么太新鲜的东西,但概念与包装不同,效应就不同。
除些之外,Facebook也体现出了一定的开放性,提供了一个开放的平台。利用这个框架,第三方软件开发者可以开发与Facebook核心功能集成的应用程序。
总结起来,Facebook利用了一个良好的概念,那就是keep in touch.不向传统的论坛与博客,你要自己上网站才能了解到自己所关注的东西有没有更新,Facebook十刻不忘用EMAIL提醒你,你的公告板上有人写东西了,你写在别人的公告上有回复了,你的朋友有新东西让你看了……
当然,这都是基于权限保护的,所以,放心地使用Facebook,并在上面了解你所遇到的人吧。
”
Discover the people around you
Facebook is made up of many networks, each based around a company, region, or school. Join the networks that reflect your real-life communities to learn more about the people who work, live, or study around you.
Do more
Facebook’s Platform enables anyone, anywhere, to build complete applications that you can choose to use. The possibilities are endless. Define your experience on Facebook by choosing applications that are useful and relevant to your world.
Keep it private
At Facebook, we believe that people should have control over how they share their information and who can see it. People can only see the profiles of confirmed friends and the people in their networks. You can use our privacy settings at any time to control who can see what on Facebook.
”
2,精英模仿效应。
因为Facebook一开始推出使用的人群在美国来说当然是思想最活跃的人群之一,他们喜欢接受新鲜事物,并会很好的开发出有趣的用法。而之后,就形成了一种模仿使用的潮流。这与当初GEMAIL的推广方式如出一撤。
当然,它的风格,它的设计,处处都体现着设计者的用心。在上个月,Facebook一口气增加了十几种语言的界面,所以从现在起,语言已经不再是障碍了。不过,在编码上还是有许多问题,许多第三方开发的应用都统一采用UTF8的编码方式,有时候会造成乱码。
”
Learn more
To learn more about Facebook before joining, take the Site Tour.
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)

