admin on 八月 26th, 2010

本来想做一个按任意键结束程序的,但是没有能够实现,只好变成按回车或者输入键了。

在perl当中,要获取键盘输入,通常状态下是这样写的:

1
2
my $getch = <STDIN>;
chomp($getch);

其中就是标准输入流,它以必须一个回车符来确认你输入完毕。这一点我试图使用其它的库来解决,但是没有找到类似C

当中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: , , ,

admin on 八月 26th, 2010

问题很简单,就是需要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();

Tags: , , ,

admin on 八月 1st, 2010

有人问我能不能把多显示分辨率设置软件修改成非交互式的,而是直接接受参数的那种,好用于无人干预条件下。我想这个建议不错。
于是基于之前《基于对话框的Window扩展显示器软件》及《
修改显示器分辨率的小软件 》基础上,稍加修改,写了这个可以工作于windows xp下的dos命令。

立即下载:ouMulScr

使用方法:

  1. 关闭扩展桌面:ouMulScr 0
  2. 开启扩展桌面: ouMulScr 1
  3. 修改某一扩展桌面的分辨率: 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

如果这个软件可以帮助您的话,请帮助本站点击广告以支持本站,谢谢。

Tags: , , , ,

admin on 七月 31st, 2010

首先声明,这里并不是我用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。于是在网上狂,也没有找到直接的答案。半夜两点,突然想起,为什么不自己想法来解决问题。于是开始用tcpdump抓包,对比从firefox发送出去的包和perl发送出去的包,具体看看有什么不同。 读取更多/Read the rest of this entry »

Tags: , , , , , ,

admin on 七月 22nd, 2010

当我们在使用statusnet当中的 map时,发现那个放大缩小的level条不见了。这样很不方便使用。加上它其实并不难。打开\plugins\Mapstraction\js\mxn..core.js文件,在原代码:

1
2
3
4
5
6
7
8
9
10
11
12
mxn.register('google', {	
 
Mapstraction: {
 
	init: function(element,api) {		
		var me = this;
		if (GMap2) {
			if (GBrowserIsCompatible()) {
				this.maps[api] = new GMap2(element);
 
				GEvent.addListener(this.maps[api], 'click', function(marker,location) {
...

改变为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mxn.register('google', {	
 
Mapstraction: {
 
	init: function(element,api) {		
		var me = this;
		if (GMap2) {
			if (GBrowserIsCompatible()) {
				this.maps[api] = new GMap2(element);
 
				this.maps[api].addControl(new GLargeMapControl());
 
				GEvent.addListener(this.maps[api], 'click', function(marker,location) {
...

Tags: , , , ,

BioJava和BioPerl, BioRuby, BioPython都是比较常见生物类使用的类库。使用BioJava,首先要去www.biojava.org上去下载最新的压缩包。现在最新的版本是1.7.1。下载完全压缩包(大约27兆),把它放在/Library/Java/Extensions/目录下,在terminal里解压缩。

jar xf biojava-1.7.1-all.jar

解压完毕,打开Eclipse,新建一个工程,名字为BioJavaTest。新建一个类,名为test。

点击Project>Properties修改工程属性。点击工程属性面板Java Build Path>Libraries>Add External JARs…增加BioJava的类库进来,路径是我们刚才解压的目录:/Library/Java/Extensions/Biojava-1.7.1。这几个类库他们分别是:
Biojava-1.7.1.jar;
bytecode.jar;
commons-cli.jar;
commons-collections-2.1.jar;
commons-dbcp-1.1.jar;
commons-pool-1.1.jar;
jgrapht-jdk1.5.jar;
junit-4.4.jar
虽然有些类库说是只有mysql或者demo程序才需要,但是我们为了方便,就不做区分而全部加进来。

设置java Build Path

设置java Build Path

接下来的工作就是在test类中书写测试代码,这段代码是网上找来的,因为我也刚起步。

 
import org.biojava.bio.symbol.*;
import org.biojava.bio.seq.*;
 
public class demotest {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			SymbolList symL = DNATools.createDNA("atgccggatcgtaa");
			symL = DNATools.toRNA(symL);
			System.out.println(symL.seqString());
		}
		catch(IllegalSymbolException ex){
			ex.printStackTrace();
		}
		catch(IllegalAlphabetException ex){
			ex.printStackTrace();
		}
	}
 
}

点击Run,如果看到运行结果:augccggaucguaa
那么恭喜您,您已经可以正常使用BioJava类库了。

Tags: , , ,

首先需要搞定的问题是在Mac OS X上安装一个java的代码工具,命令行虽然好,但是对于复杂的编程来讲,排错工作就太不方便。

当前最流行的而且免费的就属由apple公司提供的Eclipse了,但是它并不那么容易起步。这里就一步一步地先来实现一个hello world吧。

Eclipse下载页面下载适合你的机器的最新的eclipse的版本,我下载的是64位的eclipse IDE for Java Developers版本。下载完成解压缩之后,双击eclipse,它就会提示你以后编程文件都放在什么位置,这里可以设置到自己喜欢的目录。

然后就可新建一个工程文件了,File>New>Project。随着向导,一步一步填写好工程名:HellowWorld,点击Finish。

下一步是新建一个类,名称就叫Welcome,属性public static void main。 然后点击Finish。

系统会自动生成一些代码,

public class Welcome {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	}
}

在main函数里写上:System.out.println(“Hello, World”);

public class Welcome {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Hello, World");
	}
}

点击Run,就可以在结果框里看到hello world字样了.
至于如何写使用XSwing的hello world,可以参照Eclipse的教程,也很简单。
下一步的工作就是安装BioJava了。

Tags: , , ,

admin on 四月 29th, 2010

HTML5快速索引

HTML5 Visual Cheat Sheet (Reloaded)

HTML5口袋书

html5口袋书

html5口袋书

读取更多/Read the rest of this entry »

Tags: , , ,

admin on 四月 26th, 2010

上次介绍的荧光按钮其实是其于这一次的代码基础上加上了背景特效而已。那么一个漂亮的CSS3按钮应该如何实现呢?

其实很简单。首先确定按钮风格。CSS3的色彩模式为RGBA,RGB大家都很熟悉,A呢其实就是透明度。看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.button, .button:visited {
	background: #222 url(overlay.png) repeat-x;
	display: inline-block;
	padding: 5px 10px 6px;
	color: #fff;
	text-decoration: none;
	-moz-border-radius: 6px;
	-webkit-border-radius: 6px;
	-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.6);
	-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.6);
	text-shadow: 0 -1px 1px rgba(0,0,0,0.25);
	border-bottom: 1px solid rgba(0,0,0,0.25);
	position: relative;
	cursor: pointer
}

然后确定按钮的大小。分成small, medium 和 large。

16
17
18
19
20
21
22
23
24
25
26
27
28
      .small.button, .small.button:visited 			       { font-size: 11px}
.button, .button:visited,
.medium.button, .medium.button:visited 		{ font-size: 13px;
											  font-weight: bold;
											  line-height: 1;
											  text-shadow: 0 -1px 1px rgba(0,0,0,0.25);
											  }
 
.large.button, .large.button:visited 			        { font-size: 14px;
										  padding: 8px 14px 9px; }
 
.super.button, .super.button:visited 			{ font-size: 34px;
										  padding: 8px 14px 9px; }

最后我们来确定按钮的颜色。

20
21
22
23
24
25
26
27
28
29
30
31
	.pink.button, .magenta.button:visited	{ background-color: #e22092; }
	.pink.button:hover					{ background-color: #c81e82; }
	.green.button, .green.button:visited	{ background-color: #91bd09; }
	.green.button:hover				        { background-color: #749a02; }
	.red.button, .red.button:visited		{ background-color: #e62727; }
	.red.button:hover					{ background-color: #cf2525; }
	.orange.button, .orange.button:visited	{ background-color: #ff5c00; }
	.orange.button:hover				{ background-color: #d45500; }
	.blue.button, .blue.button:visited   	        { background-color: #2981e4; }
	.blue.button:hover					{ background-color: #2575cf; }
	.yellow.button, .yellow.button:visited	{ background-color: #ffb515; }
	.yellow.button:hover				{ background-color: #fc9200; }

下面是一个例子:

Tags: , , ,

admin on 四月 25th, 2010

日本的朋友们,你在上厕所的时候是否会觉着无聊却又无所消遣呢?你在等人的时候是否会觉着时间难耐呢?你在坐电车的时候是否不知道把目光留停在哪里好呢?
也许你也想学习日本人用手机上网的习惯。但是那样不是太累了,所有的都是日语。本来只是想消遣一下,变成了变相地强迫自己学习。又或者,那样的花费对你而言太多了,或者说你根本就不懂日语,那可怎么办呢?
这里提供了一个很小的工具,可以帮助你将txt文本的小说发送至自己的手机邮箱,排除乱码问题,让你在手机上轻松阅读全中文小说。
当然它也可以有其它的用途,比如说你觉着开通手机邮箱还是贵了,可以使用任意一个地址接收小说,然后再通过其它方式上传至自己的手机上。又或者你购买了日本的二手手机,可以通过这种方式来阅读中文小说,也不错呢。或者,你还可以使用这一工具为日本的朋友发送邮件,解决让人头疼的邮件乱码问题。
网址是:http://novel2email.qiuworld.com
下面是简单的视频教程:

很简单吧。希望您能喜欢。

Tags: