Nevill’s Blog

blog my living stuff

  • July 2010
    M T W T F S S
    « May    
     1234
    567891011
    12131415161718
    19202122232425
    262728293031  

类别 'Computer' 下面的 Blog


Gentoo Linux 安装 xfce4 + scim + Xming

2008年6月28日, 23:04

最近自己DIY了一台mini pc,装上了 gentoo,可是中文输入法一直没搞掂。

基本安装步骤参见 gentoo 官方2008.0标准安装文档,之后参照官方 Xfce 安装配置文档,最后按照 Scim 官方说明文档安装。

成功启动 X,看到那个小老鼠启动画面,可是,ctrl+space 没反应?来来回回 merge/unmerge 几次,都没有结果,仔细看了几篇文章 1 2 3,似乎也没有解决的办法。困扰了我好几天。只好先玩玩 Xming,发现这个东东的最新版本居然要donation 以后才能下载,还号称 opensource ?果然很多人在 argue 这个东东。Anyway,这个东东用起来还是很简单的,安装好以后在putty设置 Enable X11 forwarding,并且设定 X display location 为 localhost:0 (这一步很重要)就可以在远程运行 GUI 程序,在本地桌面显示咯。

好了,继续来解决输入法问题。结果也很简单。这篇帖子描述的情况跟我遇见的一致。照做,重新 emerge 一下 scim,成功~

记录一下我最终使用的 USE 变量设置:USE=”-gnome -kde -qt3 -qt4 X dbus hal startup-notification xscreensaver cdr dvd opengl dri xv cjx nls unicode immqt-bc gtk”

Show 图一张

顺便说一句,要玩 Linux,最好用虚拟机或者两台电脑,一台装Linux一台用来上网找答案。

分类: Computer | 没有评论 »

Flash 9 中如何使用 Loader 加载

2008年2月12日, 17:24

源码下载

做一个 Flash 程序,要实现一个 loading 过程,当加载一个比较大的外部资源,要显示加载进度,当外部资源全部都加载到本地播放器(Flash Player)以后,就开始播放。

下面是装载的完整过程:(以源码中的文件为例)
1)Player 装载 LoaderTest.swf,并产生相应的 LoaderInfo (可以通过在 LoaderTest 中访问 this.loaderInfo 属性得到)
2)LoaderTest 中使用 flash.display.Loader 对象调用 load 方法进行装载,装载的过程中会产生 open / progress / init / complete 几个事件,如果发生读取错误,会产生 ioError 事件
3)loader 装载完成以后,可以使用 loader.content 来访问被加载的影片(SimpleMovie.swf),使用 loader.contentLoaderInfo 来访问 SimpleMovie.swf 的 LoaderInfo 类的实例对象(即:这个时候在 SimpleMovie 里面访问到的 loaderInfo 属性与 LoaderTest.loader.contentLoaderInfo 是同样一个对象)

装载完成以后整个关系图可以如下表示:(图片来自 Adobe Flex Laugnage Reference

在实际使用 loader 的过程中遇到了一个小小的问题:装载比较大的 swf 时,往往没有完全装载成功,影片剪辑就开始播放了。

要看到这个效果需要在 IDE 中编译执行 LoaderTest.fla,在 Test Movie(快捷键 Ctrl + Enter)打开的 Flash Player 中从 View 菜单选择 Download Settings,设置一个比较慢的下载速度,比如 56K(4.7KB/S),然后再从 View 菜单中选一次 Simulate Download(快捷键还是 Ctrl + Enter),这样,我们看到的效果是,进度条到了 100% 以后就立马跳出来的是 SimpleMovie 里面的 Over! 画面了。从 Flash IDE 的输出我们看到这样的执行顺序:Open -> Progress -> Init -> Complete (在我的机器上,Init 大概是发生在 Progress 到了 8% 左右的时候)。

既然原因找到了,要解决这个问题的办法也很简单,修改 movieInit 这个方法,将 movieHolder.stop(); 前面的注释去掉

  1. protected function movieInit(event:Event):void {
  2. trace("init");
  3. movieHolder = MovieClip(loader.content);
  4. //设定当前 fps 同被加载进来的 .swf 相同
  5. stage.frameRate = loader.contentLoaderInfo.frameRate;
  6.  
  7. //看看取消注释后有什么变化
  8. //movieHolder.stop();
  9. }

再重新编译执行一下,就可以看到正确的效果了。

仔细看了一下 Adobe 的参考文档,里面对 Loader 的 init 事件说明大概是这样的:(翻译自 LoaderInfo 参考手册)
当被加载对象的所有属性和方法都能被访问到的时候,就产生该事件。要产生这个事件必须同时满足下列两种情况:
1)被加载的 DisplayObject 对象(本代码中的 SimpleMovie.swf,对于 LoaderTest 来说就是 loader.content)的所有属性都能被访问
且这个 DisplayObject 关联的一个叫做 loaderInfo 对应的 LoaderInfo 对象能被访问到(我的理解,能被访问到就是不为空)
2)这个 DisplayObject 里面所有子对象都被构造好、准备就绪了

也就是说,当 LoaderTest 中的 loader.contentLoaderInfo 和 loader 的其它的一些属性能被访问了,这个 contentLoaderInfo 就迫不及待的发出了 init 的信号,而此时,装载的过程并没有真正完成,还有很大一部分内容都没有被加载呢。真正加载完成、一个字节都没有漏掉的时候应该是 complete 这个事件发生的时候,只有在这个时候,被 loader 装载的 swf 之中每个对象、每个属性才能被真正访问到。

如果,我们把 stage.addChild(movieHolder) 这句从 loadComplete 移到 movieInit 里面来,我们可以看到 Flash 的边装载边播放的特性。即在 init 发生以后, SimpleMovie 就开始从第一帧开始播放了,此时的 Progress 大概在 8% 左右。

不过,一般情况下不要利用这个特性这么做。因为,在项目实践中,Tiger 发现被事先装载的部分可能是音乐,这样会出现音乐先播放,而画面跟不上的情况。

写这篇之前当然进行了一些搜索工作,找到一些文章说明 Flash 9 以前版本的 Loader 搞反了 init 和 complete 这两个事件,有兴趣可以读一下。
参考阅读:
1)http://www.awflasher.com/blog/archives/468
2)http://whatdoiknow.org/archives/001982.shtml

分类: Computer | 没有评论 »

Tim O’reilly对Web2.0的定义

2006年12月11日, 12:16

O’reilly公司的创始人兼CEO Tim O’Reilly 的这段话试图对Web 2.0做出如下定义:
Web 2.0是发生在计算机行业里面的一次商业革命,它的产生主要由于计算机开始转向使用互联网作为基础平台,它是人们探寻如何在这个新的(互联网)平台获得(商业)成功的一次努力尝试。Web 2.0的核心规则在于:让更多的人受益于基于网络的应用。
另外,Tim还说了其它的几条规则,这些对Web 2.0应用的创建者来说具有很大的参考价值。
规则1、永远处于Beta阶段。不要把软件看作是一件工业产品,而是看作一个不断与你的客户/用户交流改进的过程。
规则2、松散结合。开放数据和服务以提供给其它应用,让这些数据和服务不论何时都能被其它人再次利用。
规则3、软件运行于不同设备之间。不要认为你的应用程序只运行在你的客户端或者只运行在服务器端,你创建的程序一定是运行在不同设备之间的,它们之间会发生通讯 / 交互的过程。
规则4、The law of conservation of attractive profits。(源自Clayton Christensen发表在<>上的文章)你要创建的应用是构建在基于网络环境中的,因此应该选择开放的API和标准的协议。但是,这并不表示你无需创新,应用需要有自己的核心竞争力,有与别不同的地方。
规则5、数据为王。未来有价值的应用的主要竞争点在于’数据’,不论你的数据来自于不断增加的用户所产生(如ebay, amazon reviews等),还是来自于自己创建的数据库(如Gracenote/CDDB等),或者来自具有知识产权的文件(如Microsoft Office,iTunes)

分类: Computer | 2评论 »

Tapestry with spring

2006年11月20日, 21:51

注意到appfuse-tapestry里面有一个tapestry-spring-0.1.2.jar

经过一番搜索知道,原来是tapestry的作者写的一个小玩意,专门用来使tapestry与spring集成的,

这样可以不用Spring in action之类的书里面提到的替换tapestry引擎的做法了,直接在web.xml中设置Spring的ContextLoaderListener,加上tapestry的设置就ok了,具体例子可以参见这里

分类: Computer | 1条评论 »

收到Google Analytics邀请了

2006年6月7日, 21:45

赶快更新了我的网站,加入统计脚本,同时还继续使用AWStats来分析日志。

分类: Computer | 2评论 »

Proftpd+mod_sql模块+mysql的配置

2006年4月10日, 2:39

Proftpd+mod_sql模块+mysql的配置

前段时间为了学院的ftp管理,进行了一番尝试,下面是整理出来的完整文档。

一、mod_sql能做什么?

mod_sql是能使用数据库记录信息对Proftpd用户进行登录认证的一个module,
它由一个前端模块(front module)和后端模块(end modules)组成,后端模块是跟数据库相关的特别定制的,比如mod_sql_mysql就是用来连接mysql数据库, mod_sql_postgres用来连接postgres数据库。

现在最新的版本稳定版本proftpd 1.2.10中已经自带有这个module。

二、安装配置过程

1、安装 mysql

因为mod_sql_mysql需要调用libmysqlclient库函数,所以你最好从源代码编译安装mysql,如果你之前已经安装了已编译好的的mysql server可以使用下面参数编译,注意使用的源代码的版本需要跟你已安装的mysql的版本一致


./configure –with-named-curses-libs=/lib/libncurses.so.5
–without-server –prefix=/usr/local/mysql
make && make install

具体安装过程可以参考mysql的使用说明

2、安装proftpd

./configure –prefix=/usr/local/proftpd –with-modules=mod_sql:mod_sql_mysql
:mod_quotatab:mod_quotatab_sql
–with-includes=/usr/local/mysql/include/mysql
–with-libraries=/usr/local/mysql/lib/mysql
make && make install

创建ftp用户和组

groupadd -g 5500 ftpgroup
adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

建立ftp的主目录

mkdir /var/ftproot

给予权限

chown ftpuser:ftpgroup /var/ftproot

3、创建数据库表

–创建数据库

CREATE TABLE FtpUser (
userid VARCHAR(30) NOT NULL UNIQUE,
passwd VARCHAR(80) NOT NULL,
uid INTEGER NOT NULL,
gid INTEGER NOT NULL,
homedir VARCHAR(255) NOT NULL,
shell VARCHAR(255),
);

CREATE TABLE FtpGroup (
groupname VARCHAR(30) NOT NULL,
gid INTEGER NOT NULL PRIMARY KEY,
members TEXT
);

CREATE TABLE FtpQuotalimits (
name varchar(30) NOT NULL UNIQUE,
quota_type enum(’user’,'group’,'class’,'all’) NOT NULL default ‘user’,
per_session enum(’false’,'true’) NOT NULL default ‘false’,
limit_type enum(’soft’,'hard’) NOT NULL default ’soft’,
bytes_in_avail float NOT NULL default ‘0′,
bytes_out_avail float NOT NULL default ‘0′,
bytes_xfer_avail float NOT NULL default ‘0′,
files_in_avail int(10) unsigned NOT NULL default ‘0′,
files_out_avail int(10) unsigned NOT NULL default ‘0′,
files_xfer_avail int(10) unsigned NOT NULL default ‘0′
);

CREATE TABLE FtpQuotatallies (
name varchar(30) NOT NULL default ”,
quota_type enum(’user’,'group’,'class’,'all’) NOT NULL default ‘user’,
bytes_in_used float NOT NULL default ‘0′,
bytes_out_used float NOT NULL default ‘0′,
bytes_xfer_used float NOT NULL default ‘0′,
files_in_used int(10) unsigned NOT NULL default ‘0′,
files_out_used int(10) unsigned NOT NULL default ‘0′,
files_xfer_used int(10) unsigned NOT NULL default ‘0′
);

–创建供mod_sql使用的数据库登录用户 - proftpd

grant select, insert, update on YourDBName.* to ‘proftpd’@'localhost’ identified by ‘proftpd’;

–在数据库中新增一条用户记录,帐号密码都是test, 5500 是前面给ftpuser的uid, ftpgroup的gid, home为 /var/ftproot/test

INSERT INTO FtpUser VALUES (’test’,'test’,5500,5500,’/var/ftproot/test’,”);

–在数据库中新增一条组记录

INSERT INTO FtpGroup VALUES (’ftpgroup’,5500,’ftpuser’);

–在数据库中新增一条数据库配额记录, test用户的磁盘上限为 1MB
INSERT INTO FtpQuotalimits VALUES (’test’,'user’,'true’,’soft’,1048580,0,0,0,0,0);

4、然后配置 /usr/local/proftpd/etc/proftpd.conf

主要加上下面的部分

<Global>
# ftpgroup 组用户只显示自己的相对路径
DefaultRoot ~ ftpgroup

#——–打开mod_sql,使用mysql验证——–#
# Backend 表示用户认证方式为 MySql 数据库认证
# Plaintext 表示明文认证
SQLAuthTypes Backend Plaintext
SQLAuthenticate on

# 数据库连接信息 数据库名@主机地址:端口 用户名 密码
SQLConnectInfo YourDBName@localhost:3306 proftpd proftpd

# 指定用户信息表
SQLUserInfo FtpUser userid passwd uid gid homedir shell

# 指定用户组信息表
SQLGroupInfo FtpGroup groupname gid members
SQLDefaultHomedir “/var/ftproot”
# 如果用户主目录不存在则根据 homedir 字段自动创建一个
SQLHomedirOnDemand on
SQLNegativeCache on
RequireValidShell off
#————#
#——–磁盘限额——–#
# 打开磁盘限额功能
QuotaEngine on
# 统计目录操作
QuotaDirectoryTally on
# 使用 MB 为单位给用户显示磁盘配额信息
QuotaDisplayUnits Mb
# 显示磁盘配额信息给用户
QuotaShowQuotas on
# 磁盘配额使用的日志文件
QuotaLog “/var/log/proftpd.quota.log”
# 磁盘配额模块要使用的数据库查询语句
SQLNamedQuery get-quota-limit SELECT “name, quota_type, per_session, limit_type, bytes_in_avail, \
bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM FtpQuotalimits \
WHERE name = ‘%{0}’ AND quota_type = ‘%{1}’”
SQLNamedQuery get-quota-tally SELECT “name, quota_type, bytes_in_used, bytes_out_used, \
bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM FtpQuotatallies \
WHERE name = ‘%{0}’ AND quota_type = ‘%{1}’”
SQLNamedQuery update-quota-tally UPDATE “bytes_in_used = bytes_in_used + %{0}, \
bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, \
files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, \
files_xfer_used = files_xfer_used + %{5} \
WHERE name = ‘%{6}’ AND quota_type = ‘%{7}’” FtpQuotatallies
SQLNamedQuery insert-quota-tally INSERT “%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}” FtpQuotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
#—————–#

参考资料

中文:
http://www.chinaunix.net/jh/15/693798.html
http://www.linuxmine.com/2769.html
http://www.5ilinux.com/blog/archives/000082.html

英文:
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-SQL.html
http://www.castaglia.org/proftpd/modules/mod_sql.html
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Quotas.html
http://www.castaglia.org/proftpd/modules/mod_quotatab.html

分类: Computer | 4评论 »

装了分页和表情插件

2006年4月9日, 2:41

都来自www.coolcode.cn,这个站点上的好东东还真不少呢。

分页插件:下载

表情插件:下载

分页的效果可以看这篇http://www.nevillblog.net/?p=9

表情的效果可以发表一下评论就好了,嗯

分类: Computer | Comments Off

使用 Coolcode 插件

2006年4月8日, 22:26

www.coolcode.cn 下载了这个插件,用来给代码加亮显示的,下面测试一下

  1. class ClassA
  2. {
  3.  public static void main(String[] args)
  4.  {
  5.   System.out.println("Hello World!");
  6.  }
  7. }

效果还不错,不过觉得wordpress的可视化编辑器功能还是太弱了点,不知道为什么不用fckeditor,期待以后的版本能改进一些。

分类: Computer | 2评论 »

Debin下整合Apache与Tomcat

2006年3月31日, 0:04

每次配置这个总要上网搜索一番,今天又做了一遍,在此记录下来

1、下载以下软件:
1)apache 2.0.54
2)java sdk 1.5.0_06
3)tomcat v5.5.15
4)tomcat-connectors v1.2.15,注意,jk2 已经是官方不支持的了,现在更新的都是 jk

2、安装 apache
我的装在了 /usr/local/apache2

3、安装JDK
首先安装下面的 package
apt-get install java-package
接着
fakeroot make-jpkg jdk-1_5_0_06-linux-i586.bin
会有一些问题,都用默认就可以了
dpkg -i sun-j2sdk1.5_1.5.0+update06_i386.deb
设置环境变量
在 ~/.bachrc 中加入环境变量:
JAVA_HOME="/usr/lib/j2sdk1.5-sun"
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH 这样 JDK 就装好了

4、安装 tomcat
直接把下载的 tomcat 解压就可以了
我的装在了 /usr/local/tomcat

5、安裿tomcat-connectors
首先解压
tar -zxvf jakarta-tomcat-connectors-1.2.15-src.tar.gz
cd jakarta-tomcat-connectors-1.2.15-src/jk/native

注意:如果你是从cvs中获取的tomcat-connector的源代码,那么你需要安装autoconf,
接着执行 ./buildconf.sh 用来构建 configure 文件,
如果是和我一样下载官方 release 出来的源码包就可以跳过这一步

然后执行
./configure -with-apxs=/home2/local/apache/bin/apxs
编译
make && make install
把编译好的文件 copy 到 apache 的 modules 目录
cd apache-2.0
cp mod_jk.so /usr/local/apache2/modules/

6、把写好的 JSP  程序放到 /var/www/jsp 下并修改 tomcat 的配置文件 server.xml
在标签 <Host> 后面加上
<Context path="/jsp" docBase="/var/www/jsp" debug="0" reloadable="true"
crossContext="true" />
 
这个时候你在浏览器中输入 http://lcoalhost:8080/jsp/index.jsp 就应该能看到你写的 jsp 程序的执行结果了

7、编写配置文件
1)新建文件 /usr/local/apache2/conf/workers.properties,内容如下:

# 定义 worker 列表,每个 worker 的名称用逗号 "," 分隔开
worker.list=myworker
# myworker的具体设罿
# worker的类型
worker.myworker.type=ajp13
# worker的主机地址
worker.myworker.host=localhost
# worker的主机端口
worker.myworker.port=8009
# load-banlance 系数
worker.myworker.lbfactor=50
# worker 的ajp 连接池中的连接数
worker.myworker.cachesize=10
# worker 的 ajp 连接的超时时间,单位:秒
worker.worker1.cache_timeout=600
# 当你的 web server 与 tomcat 之间有防火墙时需要设置此参数
# 使系统不断发送 KEEP_ALIVE 消息以免防火墙切断连掿
# 该值大于0时为 True,等于0为 false
worker.myworker.socket_keepalive=1
# web server 自动切断 ajp13 连接的超时时间,单位:秒
worker.myworker.recycle_timeout=300

2)在文件 /usr/local/apache2/conf/httpd.conf 中加入如下内宿

# 加载 mod_jk
LoadModule jk_module modules/mod_jk.so
# 设定 workers.properties 的路径
JkWorkersFile "conf/workers.properties"
# jk 的日志文件的位置
JkLogFile logs/mod_jk.log
# jk 日志记录的级别[debug/error/info]
JkLogLevel info
# 设定日志记录的时间格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# 设定 jk 处理请求的日志记录格式
JkRequestLogFormat "%w %V %T"
# 设定一些转发选项
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

<VirtualHost *:80>
    DocumentRoot /var/www/
    DirectoryIndex index.html index.htm index.jsp
    ErrorLog logs/apache-localhost-error_log
    CustomLog logs/apache-localhost-access_log combined
# 转发 jsp 文件的请求到 myworker
    JkMount /*.jsp myworker
# 转发 Servlet 请求到 myworker
    JkMount /*.do myworker
    <Location ~ "/WEB-INF/">
        Order deny,allow
        Deny from all
    </Location>
<VirtualHost>

这样就配置完成了,在浏览器中输入 http://localhost/jsp/index.jsp 看看能否正常显示结果吧

参考资料:
1)apache 的配置文档
http://httpd.apache.org/docs/2.0/sections.html
2)tomcat 的配置文档
http://tomcat.apache.org/tomcat-5.5-doc/config/index.html
3)tomcat-connector 的安装说明文档
http://tomcat.apache.org/connectors-doc/howto/apache.html

分类: Computer | 没有评论 »