2009年5月19日星期二

用Nero制作光盘镜像文件

大家都知道Nero是一款极为出色的光盘刻录软件,功能的强大和稳定一直是为人称道的。

有的时候我们不喜欢Nero直接刻盘,呵呵,比方说刻录盘用完了,而要保存一张光盘的内容留待以后再刻,或是刻一张启动光盘,但不知道是不是肯定成功,可以刻成镜像文件,然后用虚拟PC测试一下。

如果你愿意,还可以把Nero当成一个虚拟光驱来使用。

要使用Nero制作光盘镜像文件,首先要在Nero Burning ROM中Recorder菜单中choose Recorder选择Image Recorder(文件刻录这个虚拟设备),Image Recorder是程序提供的一个虚拟刻录机,专门用来制作镜像文件。如图选择Image Recorder就可以刻录iso文件了:
 

确定后使用Nero Express中就能看到目前Nero可以使用Image Recorder进行刻录了:



1.把光盘制作为NRG光盘镜像文件
选Copy entire disc(复制整个光盘) 程序界面变为"选择源及目的地"。在"来源光驱"一项中选择你已经放入母盘的光驱,点击"刻录"即可

 

在程序弹出的对话框中,指定镜像的保存路径及名称,点击"保存"开始刻录。刻录过程结束,后缀名为NRG的光盘镜像文件便制作成功了。

2.制作硬盘文件镜像,可以保存为NRG或ISO格式

2.a 制作数据光盘(Data Disc),这个大家应该都会的,复制一段文字就可以了
    Nero同样可以将硬盘上的文件制作为镜像文件,过程与刻录数据光盘类似。在"你要刻录什么"一项中选择"数据光盘→数据光盘"。程序界面变为"光盘内容",打开"资源管理器",直接将需要制作镜像的硬盘内容拖放至程序界面的空白处。分别点击"下一步"、"刻录",在程序弹出的对话框中,指定镜像的保存路径及名称。


注意,在这里镜像文件的扩展名既可以为NRG,也可以为ISO(ISO格式用的最多,能用ISO格式还是ISO格式好)。点击"保存"开始刻录。


2.b制作可启动光盘,这个要求的参数较多,Nero Express的选项较少,还是使用Nero Burning Rom为好,按new(新建)后探出以下界面。
选择CD-Rom(Boot),如图在Boot选项卡中选择镜像的来源,可以选择使用一张启动软盘或是使用软盘的镜像文件,用98的启动盘即可,网上也有各种各样的软盘镜像文件img下载,由于Win98的启动盘不支持NTFS格式,所以要处理NTFS格式的最好选用一张支持NTFS格式的启动盘。利用这个功能可以制作出自己喜欢的可启动的工具盘或安装盘。


在ISO选项卡中选择ISO Level 2对光盘中有中文和长文件名的一定要选择此项


卷标和其它参数都选定后,点new(新建)一张启动光盘的刻录任务就确定完了。


然后在Nero Burning Rom主界面中file(文件)菜单中选White(刻录)就可以开始刻录了,上图中的New现在变成Write了,点一下White后进入第5副图的界面,建议还是刻为ISO格式,然后利用虚拟PC对启动光盘的镜像文件进行一下测试,以免不能启动浪费刻录盘。

Nero本身也自带了一个虚拟光驱程序: Nero ImageDrive,可以对NRG和ISO格式的光盘镜像文件进行虚拟,
位于Nero的安装目录下,比方说C:\Program Files\Ahead\Nero\Misc\NeroImageDriveInst.exe,找到这个文件安装即可,安装后会提示重启计算机。
完成后,Nero在开始菜单中就多出了Nero ImageDrive这个程序,运行后出现以下界面:


Enable Drive(加载驱动器)后就能在多出来的Drive选项卡中选择光盘镜像文件了。
这个多出来的光驱可以自己选定加载与否,加载或卸载此设备不需要重启计算机。


--
snigoal,HUST,Wuhan,China

2009年5月8日星期五

索尼的53年产品线

索尼是一家拥有53年历史的电子产品公司,它发明了各种各样令人惊奇的小工具,其中一些改变了整个世界,例如随身听和特丽珑管,改变了我们理解电视和音乐的模式.
以上就是一张2800 x 1188像素的图像,展示了索尼的发展历程.


--
snigoal,HUST,Wuhan,China

2009年5月5日星期二

用MPI_Pack()打包C语言的结构以实现异构非连续数据的传递(MPI_Send())

http://docs.huihoo.com/npact/3.htm

C 结构

考虑一个图像的应用,它传送8位彩色象素的固定长度扫描线。与象素矩阵一起是扫描线数,一个整数。可以在C中将消息描述成一个结构:

    struct {         int             lineno;         char            pixels[1024];     } scanline; 

除了导出类型,对于发送不连续和/或者异构数据消息打包是一个有用的方法。下面列出包装和发送上面结构的代码段:

#include <mpi.h>  {     unsigned int        membersize, maxsize;     int                 position;     int                 dest, tag;     char                *buffer; /*  * Do this once.  */     MPI_Pack_size(1,            /* 一个元素 */             MPI_INT,            /* 数据类型是整数 */             MPI_COMM_WORLD,     /* 一致的 comm. */             &membersize);       /* 最大包装空间 req'd */      maxsize = membersize;     MPI_Pack_size(1024, MPI_CHAR, MPI_COMM_WORLD, &membersize);     maxsize += membersize;     buffer = malloc(maxsize); /*  * 为每一新消息做此。  */     position = 0;      MPI_Pack(&scanline.lineno,  /* 包装此元素 */             1,                  /* 一个元素 */             MPI_INT,            /* 数据类型 int */             buffer,             /* 打包缓冲区 */             maxsize,            /* 缓冲区大小 */             &position,          /* 下一可用字节的偏移 */             MPI_COMM_WORLD);    /* 一致的 comm. */      MPI_Pack(scanline.pixels, 1024, MPI_CHAR,             buffer, maxsize, &position, MPI_COMM_WORLD);      MPI_Send(buffer, position, MPI_PACKED,             dest, tag, MPI_COMM_WORLD); } 

缓冲区分配一次以包含所打包的结构的大小。由于在消息中依赖于实现的开销,必须计算大小。变长的消息可以通过分配能容纳最大可能的消息的缓冲区来处理。对于MPI_Pack( )的位置参数总是返回当前包装缓冲区的大小。

下面列出解包消息的代码段,假设已分配接受缓冲区。

{     int             src;     int             msgsize;     MPI_Status      status;      MPI_Recv(buffer, maxsize, MPI_PACKED,             src, tag, MPI_COMM_WORLD, &status);      position = 0;     MPI_Get_count(&status, MPI_PACKED, &msgsize);      MPI_Unpack(buffer,          /* 打包缓冲区 */             msgsize,            /* 缓冲区大小 */             &position,          /* 下一元素的字节偏移 */             &scanline.lineno,   /* 解包这个元素 */             1,                  /* 一个元素 */             MPI_INT,            /* 数据类型 int */             MPI_COMM_WORLD);    /* 一致的 comm. */      MPI_Unpack(buffer, msgsize, &position,             scanline.pixels, 1024, MPI_CHAR, MPI_COMM_WORLD); } 

你应该能修改上面的代码以适应任意的结构。完全可能改变要解包元素的个数,这基于同一消息中前面解包的应用信息。


--
snigoal,HUST,Wuhan,China

2009年5月4日星期一

Matlab的Distributed Computing Toolbox初探

Matlab的Distributed Computing Toolbox初探

我的实验室有五台双核Pentium D 925计算机,这正适合用来做分布式或并行式计算。我打算只调用那些计算机中的一个核参与计算,留下一个核可以让其他人正常地使用该计算机。我们在这里将会介绍Matlab中Distributed Computing Toolbox的基本使用方法,目标是实现简单的分布式计算。
Distributed Computing Toolbox就是分布式计算工具箱,简称DCT,其可以在多台计算机组成的Cluster中实现分布式或并行式计算。简单来说,我们是把一个很繁重的工作,分解成许多小任务,然后分给不同的计算机去处理,最后把计算结果汇总,以达到提高计算效率的目的。
Matlab的做法是这样的:在每台参与计算的计算机中启动一个叫Matlab Distributed Computing Engine的服务,该服务能启动参与计算的worker的Matlab session和管理各台计算机workers的job manager。Job manager对workers进行管理,给workers分配计算任务,接收workers计算后的结果。而你本人就是client,你要把你的工作分解为多个任务,然后把任务给job manager。job manager就会根据workers的多少和空闲情况,适当地把任务分配给workers去做。workers完成任务后,会把结果返回给job manager。当所有workers都完成任务后,你,即是client,便可以从job manager里取回结果。
具体的概念可以参考Matlab的帮助,我们也不能说得很准确。我们在这里只想给出使用Matlab实现分布式计算的简单步骤,以便初学者快速入门。
1、首先第一步要做的,就是令每台要参与计算的计算机组成局域网。比如我有三台计算机,其IP地址分别为192.168.1.101-192.168.1.103,以下简称计算机名为101,102和103。
2、在三台计算机中安装Matlab Distributed Computing Engine(mdce)服务。安装方法为:如Matlab的安装地址为C:\Program Files\MATLAB\R2006b,则Start->Run->cmd到命令行窗口,进入C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录,运行mdce install命令安装mdce服务。接着去控制台->管理工具->服务,查看Matlab Distributed Computing Engine的属性。进入登录页,选择"此帐户",输入NT AUTHORITY\NetworkService,删除下面的密码,让该服务以NetworkService的形式登入,以便该服务存取共享的映射网络驱动器中的原程序文件。接着便可以启动该服务了。注意以后重新开机,该服务都会启动,当然你可以设置让它手动启动。
3、启动job manager。任一台计算机都可以启动job manager,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:
复制内容到剪贴板
代码:
startjobmanager -name frenseljobm
该命令启动jobmanager,其名字叫frenseljobm,启动地点为计算机101。
4、启动workers。任一台计算机都可以启动workers,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:
复制内容到剪贴板
代码:
startworker -jobmanagerhost 192.168.1.101 -jobmanager frenseljobm -name worker1
此命令指明在计算机192.168.1.101中,启动名为worker1的worker,而该worker受名为frenseljobm的jobmanager管理。就是说来自乡下101的可怜工人worker1,成为万恶的监工frenseljobm的"马仔"了。接着,监工frenseljobm要在不同村102和103中雇用更多的工人worker2、worker3。运行如下的命令:
复制内容到剪贴板
代码:
startworker -jobmanagerhost 192.168.1.101 -jobmanager frenseljobm -name worker2 -remotehost 192.168.1.102
即可在102计算机中启动一个新的,名为worker2的worker,如此类推启动103计算机的worker3。使用nodestatus命令可以查看节点的状态,加上-remotehost可以查看其他节点的状态。
5、如令计算机101为client,即我们的程序在这里编写的。设程序文件位于D:\Matlab_code\testDCT中。共享出文件夹Matlab_code,在文件夹中按工具->映射网络驱动器->令盘符为Z:->文件夹里填\\192.168.1.101\Matlab_code。于是Z:\testDCT便成为放置你程序的地方了。以同样的方法,让计算机102和103都建立映射网络驱动器,令盘符为Z:,文件夹里填\\192.168.1.101\Matlab_code。这时三台机都可以通过Z:\testDCT访问原程序文件。
6、现在便可以进行计算了。这里给出测试的代码。首先写一个函数,模拟我们实际的工作。
复制内容到剪贴板
代码:
% hp.m
function f = hp(m, n)
H1 = zeros(n);
H2 = zeros(n);
for i = 1 : m
    H = H1 + H2;
end
f = H;
end
将此程序hp.m放在D:\Matlab_code\testDCT中。此函数计算n维随机矩阵的加法m次。接着建立另一个m文件,做具体的分布式计算。
复制内容到剪贴板
代码:
% runDCT.m
tic
% 寻找资源,比如jobmanager在什么地方,叫什么名字。
jm = findResource('scheduler', 'type', 'jobmanager', 'name',...
    'frenseljobm', 'LookupURL', '192.168.1.101');
% 使用刚才找到的资源建立一个工作
job = createJob(jm);
% 设置该工作的文件关联,让所有workers都可以找到原程序文件。
set(job, 'PathDependencies', {'Z:\testDCT'})
% 另一种方法,把用到的原程序文件传给所有workers。
% set(job, 'FileDependencies', {'hp.m'})
N = 100;
M = 1000000;
% 建立三个任务,每任务都是算hp(M, N)。
createTask(job, @hp, 1, {M, N});
createTask(job, @hp, 1, {M, N});
createTask(job, @hp, 1, {M, N});
% 提交工作给jobmanager。
submit(job)
% 等待所有workers都把任务做完。
waitForState(job, 'finished')
% 取出计算结果。
results = getAllOutputArguments(job);
toc
同样地,该程序runDCT.m也是放在D:\Matlab_code\testDCT中。该程序计算了三次100维矩阵的加法1000000次,即算了100维矩阵的加法3000000次。如果在单机上运行:
复制内容到剪贴板
代码:
>> tic, a = hp(3000000, 100); toc
Elapsed time is 63.096369 seconds.
而使用三台机作分布式计算时:
复制内容到剪贴板
代码:
>> runDCT
Elapsed time is 24.323556 seconds.
效率有明显的提升。但注意到,当第一次进行分布式计算时,其他几台机要从Z:\testDCT中读取原程序文件,会使得计算速度降低。
总结来说,Matlab的Distributed Computing Toolbox为我们提供了一种简便的分布式或并行式计算的实现方法。以上所写的是为了对DCT具体做法的整个过程做一次简单的介绍,我也是初学使用这个工具箱,文章可能很粗糙和存在许多谬误,敬请指正。

--
snigoal,HUST,Wuhan,China

5 个免费的 Web 视频及音频播放器

http://www.cnbeta.com/articles/83382.htm

在线视频,在线音频越来越流行,即使你的网站成不了 YouTube,也不妨在上面部署一些可以直接在线播放的视频,在 Web 上播放媒体,如今最可靠方案莫过于 Flash。本文介绍5个免费的,简单易用的,可以嵌入任意网页的 FLV 视频与 MP3 音频播放器,它们都基于 Flash 技术。

在线视频,在线音频越来越流行,即使你的网站成不了 YouTube,也不妨在上面部署一些可以直接在线播放的视频,在 Web 上播放媒体,如今最可靠方案莫过于 Flash。本文介绍5个免费的,简单易用的,可以嵌入任意网页的 FLV 视频与 MP3 音频播放器,它们都基于 Flash 技术。

1. Flowplayer 


Flowplayer 是一个开源(GPL3 许可)Web 视频播放器,可以将视频嵌入到你的网页。

2. JW FLV Player 



JW FLV Player 是最流行,最灵活的 Web 媒体播放器,它可以播放 Flash 所支持的所有格式,包括 FLV, MP4, MP3, AAC, JPG, PNG 以及 GIF。还支持 RTMP, HTTP 直播媒体流,支持多种播放列表格式。还提供 JavaScript API。
3. Flash Video Player Plugin for WordPress 


Flash Video Player 是一个 WordPress 插件,可以将视频快速嵌入你的 WordPress 博客,支持自定义皮肤,水印 Logo 等。将该播放器放到 WordPress 插件目录(wpcontent/plubins) 并在系统管理中激活该插件即可使用。详细资料... 
4. WP Audio Player 


WP Adudio Player 是一个 WordPress 插件,可以直接在 Web 上播放 MP3 文件。很容易使用和定制。在非 WordPress 站点,该播放器也可以使用,这里有一个教程
5. XSPF Web Music Player 


XSPF Web Music Player 是一个基于 Flash 的 Web 程序,使用 XSPF 播放列表格式播放 mp3 音频。XSPF 是一个 XML 格式的播放列表格式,该程序是用 Actionscript 2 设计的。

本文来源:http://woork.blogspot.com/2009/05/5-free-flash-video-and-audio-mp3.html


--
snigoal,HUST,Wuhan,China

VISIT COUNT