2007-09
17

相信有很多人都想架设自己的DNS服务器。我们知道世界上最好用的DNS服务器软件就是BIND; 但是我辈使用Windows操作系统的人就无福享用这Unix下的顶级软件了。

或者可以用Windows Server自带的DNS服务器试试? 需要安装Server版的Windows不说,麻烦的配置和令人迷惑的图形界面就够受的了。

难道就没有一个解决方案了吗?

柳暗花明又一村,突然发现BIND居然有Windows版,这这这………… 赶快下载下来试一下,居然成功地配好了DNS。

阅读全文 »

2007-09
16

上一节我们介绍了 javax.servlet.Servlet接口和继承javax.servlet.GenericServlet抽象类生成Servlet的方法。 而实际上,直接继承GenericServlet并不方便也不实用, 更多的情况下是继承javax.servlet.http.HttpServlet来生成Servlet。

阅读全文 »

2007-09
16

昨天因为要将相机拍摄的视频刻录成VCD,于是上网找了好多MPEG的相关工具, 如切割、合并、格式转换等,大部分都是共享软件并且还有功能限制。 后来实在没办法了,想到了ffmpeg这个工具,抱着试试看的心情看了看帮助, 才发现原来真正的工具在这里!支持绝大多数常见的视频音频格式, 可以在各种格式之间随意转换,支持视频切割。所以说,真正好用的东西其实都是免费的。

ffmpeg的命令行格式如下:

ffmpeg [输入参数] -i 输入文件 [输出参数] 输出文件

这里仅举几个我用到的例子。

截取1分30秒到1分50秒的视频,格式不变。-ss指定起始时间,-t指定截取长度,-vcodec 和-acodec指定为copy表明不对源视频音频流做任何处理直接复制。

ffmpeg -ss 0:1:30 -t 0:0:20 -i input.mpg -vcodec copy -acodec copy output.mpg

mpg转换成vcd所用的视频格式。-ac 2表示将单声道音频转换成立体声。

ffmpeg -i input.mpg -target pal-vcd -ac 2 output.mpg

VCD要求视频大小为 352x240,而我们的视频大小为320x240,需要在两边加上黑边凑足352像素:

ffmpeg -i input.mpg -padleft 16 -padright 16 -padcolor 000000 -target pal-vcd -ac 2 output.mpg

将字幕合并到视频中,可以利用AviSynth,首先制作好srt格式字幕, 然后利用DIO's RelProducer GUI加载视频和字幕生成avs文件,再利用ffmpeg转换此avs文件:

ffmpeg -i input.avs output.mpg

合并视频流和音频流,可以先利用ffmpeg将mp3转换成wav:

ffmpeg -i input.mp3 output.wav

然后再利用VirtualDub合并之。



2007-09
14

Perl的XML::DOM功能很强大,利用它可以轻易地分析XML文档,也可以建立XML文档。

常用的类包括:

  • XML::DOM::Node:所有类的基类,表示一个XML节点。
  • XML::DOM::Parser:XML解析器,将XML字符串解析成XML::DOM::Document对象。
  • XML::DOM::Document:指向XML文档的根节点。
  • XML::DOM::Element:指向一个元素,通常由XML::DOM::Document->createElement元素生成。

其他的类可以查看CPAN上关于 XML::DOM 的说明。

建立XML文档的通常做法是:首先通过 XML::DOM::Parser生成一个Document对象, 再通过这个Document对象的 createElement、createTextNode 等方法生成各个节点, 最后通过 XML::DOM::Node->appendChild 方法将节点添加到Document对象中, 最后再通过 toString 方法将 Document 转换为字符串输出。

下面是建立XML文档的一个例子:

#!/usr/bin/perl

use XML::DOM;
use XML::Twig;

# 创建XML的最外层元素
my $xml = "<MyXML/>";

# 通过XML::DOM::Parser解析外层元素,创建基础XML文档
# XML::DOM::Parser::parse函数的返回值为 XML::DOM::Document 类
my $parser = new XML::DOM::Parser;
my $dom = $parser->parse($xml);

# 生成Book节点
# createElement的返回值为 XML::DOM::Element 类
# XML::DOM::Element 的父类是 XML::DOM::Node 类
my $book = $dom->createElement("Book");
# 设置节点属性
$book->setAttribute("title", "My First Book");
$book->setAttribute("author", "charlee");

# 生成Chapter节点
my $chapter = $dom->createElement("Chapter");
$chapter->setAttribute("id", "1");
# 生成一个文本节点
my $title = $dom->createTextNode("My First Chapter");
$chapter->appendChild($title);

# 添加Chapter到Book
$book->appendChild($chapter);

# 添加Book到XML文档
$dom->getDocumentElement->appendChild($book);

# 利用XML::Twig整理格式
my $twig = new XML::Twig;
$twig->set_indent(" "x4);
$twig->parse($dom->toString);
$twig->set_pretty_print("indented");

# 输出
print $twig->sprint;

最后一段使用XML::Twig的程序只是为了整理XML输出结果的格式, 如果不需要整理格式,不调用XML::Twig,直接使用$dom->toString也可以。



2007-09
14

介绍完工具和基本概念,现在终于开始介绍Servlet的编写方法了。 为了便于理解,我们将采用eclipse+Lomboz作为开发环境, 一切的操作都可以在eclipse中完成。 如果你还没有安装好Lomboz,请参考前几篇文章配置好环境。

我们将建立一个名为 com.idv2.learnjsp 的包,用于容纳所有的示例程序。 下面我们就看看最基本的Servlet的创建方法。

阅读全文 »

2007-09
13

Servlet/JSP学习笔记(1)-tomcat和eclipse的安装中, 我介绍了eclipse和tomcatPlugin的安装和配置方法。 但今天发现,使用tomcatPlugin创建项目时,不会自动生成web.xml,需要手工编辑,这多少有些不方便。 (关于web.xml的简单介绍参考这里。)

实际上,开发和调试Servlet/JSP程序时,一个叫做Lomboz的插件更为强大、更好用。 Lomboz其实是一个开发J2EE程序的强大插件,Servlet/JSP只是小菜一碟而已。

下面就来介绍一下Lomboz的安装方法。关于 eclipse 和 Tomcat 的安装请参考 前一篇文章

阅读全文 »

2007-09
12

关于BS结构(浏览器-服务器结构)、HTTP基本原理等基础知识相信大家比我清楚, 我就不废话了。不知道的同学去google一下。

什么是Servlet和JSP

用Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP。 Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是服务器) 负责执行Java程序。而JSP(Java Server Page)则是一个页面, 由JSP容器负责执行。

阅读全文 »

2007-09
12

由于项目需要,最近不得不开始学习JSP和Struts了。 三年前曾经学过JSP,而且还做过一个小程序,不过现在早已经扔到九霄云外去了。 为了不落后于时代,决定开始从今天学习JSP!

虽然我很喜欢用vim,但开发Java程序首选环境是eclipse,咱也不能太无知了啊。 所以安装eclipse是第一件事儿。另外Web服务器Tomcat也是必不可少的。 下面是各个软件的下载链接。

eclipse我没有使用最新版本的3.3,而是用了稍老些的3.2.2。这个旧版本的还真不好找, 你如果是从eclipse的主页上进入下载页的话, 应当选择右侧的Browse downloads中的By Project,然后选择Eclipse Platform, 才能到达上述的下载页面。

至于JDK,大家应该都知道怎么装我就省略了。

阅读全文 »

2007-09
11

Windows XP连接远程共享时,有一个“保存密码”的功能。保存之后当然可以免去每次输入密码的麻烦,但当你想以其它用户身份重新连接共享时却有了麻烦:Windows不会再让你输入用户名和密码,即使用net use 共享名 /delete 命令删除所有的共享也不行。用这个方法可以让Windows忘记密码。

打开命令行,输入

rundll32 netplwiz.dll, UsersRunDll

会出现“用户帐户”对话框,单击其中的“高级”选项卡,再单击“管理密码”按钮,接下来的事情就不用我说了吧。

另外,用上述方法弹出的用户账户跟控制面板中的是不一样的,从控制面板中启动的那个太傻瓜了。

加入域之后则可以通过控制面板直接启动那个不傻瓜的用户帐户对话框。



2007-09
08

最近在抓虾上看到一篇关于BlackBerry 7230的介绍。 无摄像头、无和弦,强大的短信管理、联系人管理,附带日历和任务列表, 能上网,手动背光,以及太阳下仍然很清晰的液晶屏。 这就是我一直想要的一款手机,而且价格才300多,于是立即到淘宝上买了一台。 到今天整整一个星期了,玩机也玩出一些体会来,在这里跟大家分享一下。

阅读全文 »