|
|
用户名:gzdlw 笔名:干煸四季豆 地区: 家乡-贵阳 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
给我一支烟,吞云吐雾间,让所有烦累疲劳能够过往如云烟~~~
我的能力是协助团队取得成功并尽快掌握新知识。
唉,一年了,终于得偿所愿呀。书终于出版了。
(作者置顶)
辛苦了一年,我的书终于出版了,现在网上已经开始宣传,http://www.cdbook.cn/book.asp?id=9272
3月下旬书店应该就有卖了,娃哈哈哈哈。得偿所愿呀~~~开心开心~~
| ||||||||||||||||||||||
已锁定
(作者置顶)
很久没有写BLOG了。太忙太忙~
今天接到出版商的电话,说出版社终于已经把稿子审查完毕(工作效率真快~靠),但是有几张图太小,需要改改。。。又说出版社认为每年的是十一月、十二月是销售淡季,因此印刷书的时间要退后到年底(真TMD靠)~~~唉
《Tapestry4.0深入浅出》电子工业出版社
这个星期内书稿就会提交给出版社印刷,《Tapestry4.0深入浅出》
一旦提交出版社,那么等到出版社排期结束,就基本知道什么时候能在书店买到书了,终于熬到头咯,娃哈哈哈~~~
和Howard交涉了两个星期了,想请他给写个序言。不过那家伙回信真的很慢,说来说去,稿子也发给他了,最后他来了句:“I was able to read the files but, as I don't read any version of chinese, so it's hard for me to really determine what's going on.”是呀,这也不怪他,咋办呢?我就只好建议他写点对Tapestry的看法,写点对中国程序员的鼓励。到现在已经两天了,还没有收到他的答复呢,不知道他愿不愿意写。反正现在稿子已经快提交出版社了,即便他愿意写,也只能在这个星期之内。不愿意也就算了,其实也无所谓。
最近忙了点,每天睡眠都不足6个小时,再加上今年天气特忽悠人,忽冷忽热的,搞得我一会发烧感冒一会又热伤风。不过嘛,即便遇上一小点点艰难坎坷,革命还是得继续地~~~嘿嘿。总体来看,一切都非常顺利,基本按照计划行事,所以心里也甚感安慰。
紫荆花路88号
杭州很漂亮,“上有天堂、下有苏杭”,记得找工作面试的时候,每次都要问我为什么要来杭州。其实我去杭州的理由非常非常之简单。原本和朋友商量去深圳、广州或者北京,但是朋友一直担心深圳和广州的治安实在太差,这方面的负面报道实在太多。至于北京,沙尘暴的名声并不好听。后来有一天,我在报纸上看到,杭州从人居环境、自然环境、经济环境什么什么综合排名上,位居全国第一。呵呵,于是乎,就这么选择了杭州。
去杭州的第二天,我就去 Spring嘟嘟 那里报到了。后来就在他的公司一直干到我离开杭州,算一算似乎正好100天。呵呵。。。Spring嘟嘟对于Hibernate和Spring确实有很深的造诣,当然了,还有他最看好的Ajax。
除了气候以外,其实我还满喜欢杭州的。城市的一半是喧嚣的人类,另外的一半则是寂静的大自然。常常下班之后,一趟公车半个小时,就可以和朋友坐在西湖边边上看月亮,仿佛已经脱离了凡尘俗世,实在是惬意非常呢~:)
离开杭州的时候,虽然传说中的梅雨季节未开始,但是已经下了两个多星期月,实在不爽,家里什么都生霉了。我和朋友甚至不敢在家做饭吃,因为我们没有冰箱,第二天肯定会霉变。杭州实在太热了,5月开始气温就在25~30度之间徘徊,而室外实际温度估计准上了30。。。呵呵,在贵阳,一年中也不过就只有一个星期的时间,气温会上30度而已。。。看来在杭州,离了空调准活不了(至少非常难熬),呵呵,我还记得第一次接到房东的电费单,自己心中那种惊愕的心情。两个月花了800元电费,而我们就只有一个空调、一个热水器、一台电脑以及常常在家用电磁炉做饭,原来杭州的电价高达8毛,是贵阳或成都电价的一倍。一问同事才知道,原来这还是房东人好,一般出租屋的电价都高达1元。。。呵呵。在贵阳家里做饭什么的,全部也用电,即便在冬天开电炉,也顶多一个月电费150多。刚去杭州,不适应那里冬天的寒冷,所以整天开着空调。。于是五一的时候,我赶快去买了台电扇以便开展夏日节电计划,这是我生平第一次注意节电。。。
杭州人还比较热情,可能是旅游城市,人们见惯了外地人,也肯定了外地人对当地经济发展所带来的贡献,所以杭州对外地人比较热情。如果拿个地图在外面走,有些大妈老太太级别的杭州人还会主动问你想去哪里,告诉你什么路什么路该坐几路车该怎么走。说起坐车,杭州公车真破,特别是发动机的声音,好比你正坐在一架战斗机中。杭州公车车费也很乱,从1元到5元,什么价格都有。呵呵,记得我刚到杭州的时候,还坐了趟霸王公车。那时候下了火车,看见K900路,正好到我想去的浙江大学附近,因为成都和贵阳的公车都是一元,所以想当然地投了一元。等过了几天逐渐熟悉杭州公车情况之后才知道,原来K900是三元一人。呵呵。。。。杭州公车好差哟~~~又贵,又吵。。不过说贵,还算不上杭州出租车贵,出租车10元起步三公里,然后每公里1元。。相比之下成都就好便宜,5元起步
杭州早餐比成都丰富,不过我惊讶杭州人吃早餐怎么像猪一样。两元钱的糯米饭有拳头那么大,里面居然还夹了根油条。早上9点吃这么多的东西,我感觉自己连午饭都可以省了。我有一次跟那个店家说,我只要一元钱的糯米饭,而且里面不要夹油条。那个店家居然跟我说,这么少的糯米饭,他包不起来,汗~~~所以我只在杭州吃过三次糯米饭,记得以前在贵阳,我最喜欢吃的早餐之一就是糯米饭。杭州买的蛋饼卷油条味道不错,店家在火炉上架个铁板,铁板烤的火热,店家舀一勺灰面汤,浇在铁板上,然后用一根前端扁平的棍子在铁板上拨弄一圈,一个面饼就OK了,然后店家在上面打个鸡蛋,刷点辣椒酱和甜酱,放点榨菜,放根油条一卷,OK,香喷喷的蛋饼卷油条就好了,我在杭州几乎天天早上吃这个。:)其实要说街边小吃,成都也好,杭州也罢,都比不上贵阳那么多那么丰富。
杭州生活成本比成都高些,不过要比贵阳低。如果能找到平民化的餐馆,虽然看起来赃一些,不过也很便宜。杭州吃鱼比成都贵阳便宜多了,但是蔬菜却很贵。特别是所谓的有机蔬菜,让我第一天去买菜的时候吓了一跳。那我的最爱四季豆来讲,成都一元一斤,最便宜的时候七八毛也买得到。贵阳大概也就是一元多吧。而杭州,三元多一斤刀豆(杭州称四季豆为刀豆,如果去买有机的所谓什么美国刀豆,7元多一斤。呵呵,所以,每次我去买刀豆,心里总忍不住要怀念成都和贵阳。
杭州软件行业比较发达,杭州有所谓的“程序员的天堂”之称。我的朋友做美工,是转行过来的,之前只跟我接了一个兼职自学了一个月美工。到了杭州,三个星期面试了3-40家公司,每次她去面试,就把面试时考官要求的东西在家做出来,这样面试下一家的时候就多了一些资本。就这样她几乎是边面试边学习如何做美工,最后才终于找到一家。提到这个我都忍不住感叹,杭州市场太大了,成都和贵阳简直不可能相比。成都顶多能面试10家,而贵阳一家面试的都找不到。杭州的程序员,两年工作经验的,大概在4000左右(税后),以杭州的生活水平,我觉得还是很不错的,杭州除了租房贵,如果能找到我说的平民饭店,吃方面消费并不会太多。如果一个人过日子,平常节约点,2K应该是随便可以存到的。两年工作经验在上海或深圳,顶多也就5K左右,但是那边的生活水平高了就只一截了。
说起来,我到是比较讨厌杭州有一点,就是只要你有钱,就可以随便放爆竹。在杭州,不论是新公司成立,还是旧公司搬家,甚至人们搬新家办丧事都喜欢放爆竹,那种很大很响的爆竹。危险就不说了,扰民呀,有两次晚上都睡觉了,社区有人搬家,平平砰砰就放起来了。还有一次,早上9点半在公司开会,淘宝网搬家搬到对面大楼,也是平平砰砰放了一刻钟,我们开会说话都听不清楚。杭州是比较发达一些,让我感觉只要有钱,干什么都可以。。。
说起发达,从人们开的车就看得出来,成都最大众化的车是奥托,成都人称为坨坨车,一般也就2W多一辆。杭州最普遍的是10W左右的车,3-40W的奥迪和奔驰随处可见。杭州的房价号称全国第一,其实是被有钱人炒起来的。记得我第一见包租婆(房东)的时候,她拿出一串钥匙,那串钥匙就如同学校宿舍管理拿的那串那么多,说:“你们应该相信我,我不会骗你们的。”。。呵呵,汗~~所以我们就给房东起了个外号叫包租婆。所以嘛,像我这样的草根阶级,除了每天悲愤房价为什么那么高以外,又能咋样呢?
前天飞了趟成都,修改了写书合同,即将获得解脱~
Object-relation mapping without the container
转自:http://www-128.ibm.com/developerworks/library/j-hibern/?ca=dnt-515
Develop a transactional persistence layer using Hibernate and Spring
Richard Hightower (rhightower@arc-mind.com), Developer, ArcMind Inc.
简化Spring配置文件
转自: http://www.blogjava.net/calvin/archive/2005/08/21/10530.html
作者:江南白衣
1.1.autowire="byName" /"byType"
假设Controller有一个属性名为customerDAO,Spring就会在配置文件里查找有没有名字为CustomerDAO的bean, 自动为Controller注入。
如果bean有两个属性,一个想默认注入,一个想自定义,只要设定了autowire,然后显式的声明那个想自定义的,就可以达到要求。这就应了需求,在需要特别配置的时候就提供配置,否则给我一个默认注入。
还有一个更懒的地方,在最最根部的<beans>节点写一句efault-autovwrie="byName",可以让文件里的所有bean 都默认autowrie。
不过Rod认为开发期可以这样,但Production Server上不应该使用Autowire。而我觉得那些自定义一次的地方比如TranscationManager应该详细定义,而Dao,Controller这种大量重复定义的bean就可以偷点懒了。
1.2.<bean>节点之间抽象公共定义和 Inner Bean
这太方便懒人了,想不到两个独立的XML节点都可以玩继承和派生,子节点拥有父节点的全部属性。
最好用的地方就是那个Transtion Proxy的定义。先定义一个又长又冗的父类,然后用子类去继承它。
另外,还有一个Inner Bean的机制,可以把DAO写成Proxy的内部类。为什么要写成内部类?为了让Proxy冒名顶替它去让Controller Autowire。(详见后面的示例)
1.3. 宽松的配置, To XML or Not to XML
据说Spring比Struts的配置宽松了很多,这就给人把东西从配置文件中撤回原码中的机会。
不赞成什么都往配置文件里晒,造成了Rich Information的配置文件,修改或者查看的时候,要同时打开配置文件和原码才能清楚一切。
而我希望配置文件就集中做一些整体的配置,还有框架必须的、无需管理的冗余代码。而一些细节的变化不大的配置和逻辑,就尽量别往里塞了。因此,Success/Fail View 的配置,不建议放在里面。
2.简化后的配置文件
1.Controller只剩下一句
2.DAO也只剩一句
3.Service类只剩下5行
3.Spring 1.2后xml语法简化
最主要的简化是把属性值和引用bean从子节点变回了属性值,对不喜欢autowire的兄弟比较有用。
当然,如果value要CDATA的时候还是要用子节点。另外,list的值可以用空格隔开也比较实用。
<value>fooValue</value>
<property name="foo">
<ref bean="fooBean">
</property>
简化为
<property name="foo" ref="fooBean"/>
<property name="myFriendList">
<list>
<value>gigix</value>
</list>
</property>
简化为
<property name="myFriendList" value="gigix wuyu"/>
MySQL服务维护笔记
转自:http://www.chedong.com/tech/mysql.html
作者: 车东 Email: chedongATbigfoot.com/chedongATchedong.com
内容摘要:使用MySQL服务的一些经验,主要从以下几个方面考虑的MySQL服务规划设计。对于高负载站点来说PHP和MySQL运行在一起(或者说任何应用和数据库运行在一起的规划)都是性能最大的瓶颈,这样的设计有如让人一手画圆一手画方,这样2个人的工作效率肯定不如让一个人专门画圆一个人专门画方效率高,让应用和数据库都跑在一台高性能服务器上说不定还不如跑在2台普通服务器上快。
以下就是针对MySQL作为专门的数据库服务器的优化建议:
MySQL服务器的规划
=================
为了以后维护,升级备份的方便和数据的安全性,最好将MySQL程序文件和数据分别安装在“不同的硬件”上。
/ /
| /usr <== 操作系统
| /home/mysql <== mysql主目录,为了方便升级,这只是一个最新版本目录的链接
硬盘1==>| /home/mysql-3.23.54/ <== 最新版本的mysql /home/mysql链接到这里
\ /home/mysql-old/ <== 以前运行的旧版本的mysql
/ /data/app_1/ <== 应用数据和启动脚本等硬盘2==>| /data/app_2/
\ /data/app_3/
MySQL服务的安装和服务的启动:
MySQL一般使用当前STABLE的版本:
尽量不使用--with-charset=选项,我感觉with-charset只在按字母排序的时候才有用,这些选项会对数据的迁移带来很多麻烦。
尽量不使用innodb,innodb主要用于需要外键,事务等企业级支持,代价是速度比MYISAM有数量级的下降。
./configure --prefix=/home/mysql --without-innodb
make
make install
服务的启动和停止
================
1 复制缺省的mysql/var/mysql到 /data/app_1/目录下,
2 MySQLD的启动脚本:start_mysql.sh
#!/bin/sh
rundir=`dirname "$0"`
echo "$rundir"
/home/mysql/bin/safe_mysqld --user=mysql --pid-file="$rundir"/mysql.pid --datadir="$rundir"/var "$@"\
-O max_connections=500 -O wait_timeout=600 -O key_buffer=32M --port=3402 --socket="$rundir"/mysql.sock &
注释:
--pid-file="$rundir"/mysql.pid --socket="$rundir"/mysql.sock --datadir="$rundir"/var
目的都是将相应数据和应用临时文件放在一起;
-O 后面一般是服务器启动全局变量优化参数,有时候需要根据具体应用调整;
--port: 不同的应用使用PORT参数分布到不同的服务上去,一个服务可以提供的连接数一般是MySQL服务的主要瓶颈;
修改不同的服务到不同的端口后,在rc.local文件中加入:
/data/app_1/start_mysql.sh
/data/app_2/start_mysql.sh
/data/app_3/start_mysql.sh
注意:必须写全路径
3 MySQLD的停止脚本:stop_mysql.sh
#!/bin/sh
rundir=`dirname "$0"`
echo "$rundir"
/home/mysql/bin/mysqladmin -u mysql -S"$rundir"/mysql.sock shutdown
使用这个脚本的好处在于:
1 多个服务启动:对于不同服务只需要修改脚本中的--port[=端口号]参数。单个目录下的数据和服务脚本都是可以独立打包的。
2 所有服务相应文件都位于/data/app_1/目录下:比如:mysql.pid mysql.sock,当一台服务器上启动多个服务时,多个服务不会互相影响。但都放到缺省的/tmp/下则有可能被其他应用误删。
3 当硬盘1出问题以后,直接将硬盘2放到一台装好MySQL的服务器上就可以立刻恢复服务(如果放到my.cnf里则还需要备份相应的配置文件)。
服务启动后/data/app_1/下相应的文件和目录分布如下:
/data/app_1/
start_mysql.sh 服务启动脚本
stop_mysql.sh 服务停止脚本
mysql.pid 服务的进程ID
mysql.sock 服务的SOCK
var/ 数据区
mysql/ 用户库
app_1_db_1/ 应用库
app_1_db_2/
...
/data/app_2/
...
查看所有的应用进程ID:
cat /data/*/mysql.pid
查看所有数据库的错误日志:
cat /data/*/var/*.err
个人建议:MySQL的主要瓶颈在PORT的连接数上,因此,将表结构优化好以后,相应单个MySQL服务的CPU占用仍然在10%以上,就要考虑将服务拆分到多个PORT上运行了。
服务的备份
==========
尽量使用MySQL DUMP而不是直接备份数据文件,以下是一个按weekday将数据轮循备份的脚本:备份的间隔和周期可以根据备份的需求确定
/home/mysql/bin/mysqldump -S/data/app_1/mysql.sock -umysql db_name | gzip -f>/path/to/backup/db_name.`data +%w`.dump.gz
因此写在CRONTAB中一般是:
15 4 * * * /home/mysql/bin/mysqldump -S/data/app_1/mysql.sock -umysql db_name | gzip -f>/path/to/backup/db_name.`data +\%w`.dump.gz
注意:
1 在crontab中'%'需要转义成'\%'
2 根据日志统计,应用负载最低的时候一般是在早上4-6点
先备份在本地然后传到远程的备份服务器上,或者直接建立一个数据库备份帐号,直接在远程的服务器上备份,远程备份只需要将以上脚本中的-S /path/to/msyql.sock改成-h IP.ADDRESS即可。
数据的恢复和系统的升级
======================
日常维护和数据迁移:在数据盘没有被破坏的情况下
硬盘一般是系统中寿命最低的硬件。而系统(包括操作系统和MySQL应用)的升级和硬件升级,都会遇到数据迁移的问题。
只要数据不变,先装好服务器,然后直接将数据盘(硬盘2)安装上,只需要将启动脚本重新加入到rc.local文件中,系统就算是很好的恢复了。
灾难恢复:数据库数据本身被破坏的情况下
确定破坏的时间点,然后从备份数据中恢复。
应用的设计要点
==============
如果MySQL应用占用的CPU超过10%就应该考虑优化了。
总之:对于任何数据库单表记录超过100万条优化都是比较困难的,关键是要把应用能够转化成数据库比较擅长的数据上限内。也就是把复杂需求简化成比较成熟的解决方案内。
一次优化实战
============
以下例子是对一个论坛应用进行的优化:
MSSQL到MySQL的数据迁移:ACCESS+MySQL ODBC Driver
在以前的几次数据迁移实践过程中,我发现最简便的数据迁移过程并不是通过专业的数据库迁移工具,也不是MSSQL自身的DTS进行数据迁移(迁移过程中间会有很多表出错误警告),但通过将MSSQL数据库通过ACCESS获取外部数据导入到数据库中,然后用ACCESS的表==>右键==>导出,制定ODBC,通过MySQL的DSN将数据导出。这样迁移大部分数据都会非常顺利,如果导出的表有索引问题,还会出添加索引提示(DTS就不行),然后剩余的工作就是在MySQL中设计字段对应的SQL脚本了。
一首动漫歌歌词
并非偶然,
两人的相遇,
是很久以前便已注定的命运,
每次闭上眼睛,
每次仰望天空,
都会想起那如梦似幻的每一天,
每次往前迈进,却又变的更远,
但只要一直向前走,
我就能看到那和你在一起的未来。
你也心中了然,
不管时光如何变迁,
依然会遵守这个约定,
在悲伤的时候,
想留在对方身边。
用xplanner管理项目
转自:http://www.zahui.com/html/6/40488.htm
1:下载xplanner(目前版本是0.6.2)
http://sourceforge.net/project/showfiles.php?group_id=49017
2: 配置ant
到http://www.apache.org下载ant,将这个解压如d:\ant,设定ant_home=d:\ant,然后就可以用了
3:新建数据库,如我在mysql中建立一个xplanner的数据库
4:用ant建表
将下载的xplanner解压缩,进入resources文件夹,修改xplanner.properties文件,将数据库和用户名修改为之前自己建立的名称。
hibernate.connection.url=jdbc:mysql://127.0.0.1/xplanner?autoReconnect=true
hibernate.connection.username=root
hibernate.connection.password=
找到build.xml
在DOS下进入build.xml所在目录,
执行ant install.db.schema
在这一步中将会在数据库中建表,以及假如一个用户名为“sysadmin“密码为“admin“的初始用户
5:运行ant create.db.schema.script
这个将会生成一个hibernate_schema.sql 文件
6:配置email
在xplanner.properties文件中找到
xplanner.mail.smtp.host=localhost # enter your SMTP host
xplanner.mail.from=xplanner@example.org # enter the email sender for XPlanner messages
将他改成你的配置
7 Build the xplanner.war 文件
到xplanner(有build.xml文件)的目录,运行
$ ant build.war
这样就会在xplanner.war 文件生成
8:copy xplanner.war 到tomcat下的webapp目录下,启动tomcat
在浏览器中输入http://localhost:8080/xplanner/ 就会看到如下界面
警示自己:java.util.Arrays的BUG - 二分搜索算法
这个问题告诉我们, 无论什么时候, 我们都不要想当然我们的程序是完美的. 我们需要细心的设计,测试再测试,符合规范的方法等等
原文:http://www.matrix.org.cn/resource/news/768_Joshua+Bloch+Bug.html
简单加密/解密方法(转)
转自:http://www.lihuasoft.net/article/show.php?id=2222
import java.security.*;
import javax.crypto.*;
public class Crypt {
private static String Algorithm="DES"; //定义 加密算法,可用 DES,DESede,Blowfish
static boolean debug = false;
static{
Security.addProvider(new com.sun.crypto.provider.SunJCE());
}
public static byte[] getKey() throws Exception{
KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
SecretKey deskey = keygen.generateKey();
if (debug)
System.out.println("生成密钥:"+byte2hex(deskey.getEncoded()));
return deskey.getEncoded();
}
//加密
public static byte[] encode(byte[] input,byte[] key) throws Exception{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key,Algorithm);
if (debug){
System.out.println("加密前的二进串:"+byte2hex(input));
System.out.println("加密前的字符串:"+new String(input));
}
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE,deskey);
byte[] cipherByte=c1.doFinal(input);
if (debug)
System.out.println("加密后的二进串:"+byte2hex(cipherByte));
return cipherByte;
}
//解密
public static byte[] decode(byte[] input,byte[] key) throws Exception{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key,Algorithm);
if (debug)
System.out.println("解密前的信息:"+byte2hex(input));
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE,deskey);
byte[] clearByte=c1.doFinal(input);
if (debug){
System.out.println("解密后的二进串:"+byte2hex(clearByte));
System.out.println("解密后的字符串:"+(new String(clearByte)));
}
return clearByte;
}
//md5()信息摘要, 不可逆
public static byte[] md5(byte[] input) throws Exception{
java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5"); //or "SHA-1"
if (debug){
System.out.println("摘要前的二进串:"+byte2hex(input));
System.out.println("摘要前的字符串:"+new String(input));
}
alg.update(input);
byte[] digest = alg.digest();
if (debug)
System.out.println("摘要后的二进串:"+byte2hex(digest));
return digest;
}
//字节码转换成16进制字符串
public static String byte2hex(byte[] b) {
String hs="";
String stmp="";
for (int n=0;n<b.length;n++){
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1)
hs=hs+"0"+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}
public static void main(String[] args) throws Exception{
debug = true;
// byte[] key = getKey();
byte[] key = "好好学习".getBytes();
decode(encode("测试加密".getBytes(),key),key);
md5("测试加密".getBytes());
}
}
说得非常好:所有漂亮的代码跑哪里去了?
Google公司软件架构师Hohpe认为:其中的首要原因就是拙劣的代码引起更多拙劣的代码。他的理论是,如果某个应用程序的最初的开发人员不将自己的代码规划清晰,让任何程序员都可以理解,那么潘多拉的盒子就会被打开。
摘自:http://www.matrix.org.cn/resource/article/44/44414_beauty+code.html
维护中山项目两个多月,深有体会呀~
互联网信息服务管理办法
总 理 朱镕基
二零零零年九月二十五日
《互联网信息服务管理办法》
第一条 为了规范互联网信息服务活动,促进互联网信息服务健康有序发展,制定本办法。
第二条 在中华人民共和国境内从事互联网信息服务活动,必须遵守本办法。
本办法所称互联网信息服务,是指通过互联网向上网用户提供信息的服务活动。
第三条 互联网信息服务分为经营性和非经营性两类。
经营性互联网信息服务,是指通过互联网向上网用户有偿提供信息或者网页制作等服务活动。
非经营性互联网信息服务,是指通过互联网向上网用户无偿提供具有公开性、共享性信息的服务活动。
第四条 国家对经营性互联网信息服务实行许可制度;对非经营性互联网信息服务实行备案制度。未取得许可或者未履行备案手续的,不得从事互联网信息服务。
第五条 从事新闻、出版、教育、医疗保健、药品和医疗器械等互联网信息服务,依照法律、行政法规以及国家有关规定须经有关主管部门审核同意的,在申请经营许可或者履行备案手续前,应当依法经有关主管部门审核同意。
第六条 从事经营性互联网信息服务,除应当符合《中华人民共和国电信条例》规定的要求外,还应当具备下列条件:
(一)有业务发展计划及相关技术方案;
(二)有健全的网络与信息安全保障措施,包括网站安全保障措施、信息安全保密管理制度、用户信息安全管理制度;
(三)服务项目属于本办法第五条规定范围的,已取得有关主管部门同意的文件。
第七条从事经营性互联网信息服务,应当向省、自治区、直辖市电信管理机构或者国务院信息产业主管部门申请办理互联网信息服务增值电信业务经营许可证(以下简称经营许可证)。省、自治区、直辖市电信管理机构或者国务院信息产业主管部门应当自收到申请之日起60日内审查完毕,作出批准或者不予批准的决定。予以批准的,颁发经营许可证;不予批准的,应当书面通知申请人并说明理由。申请人取得经营许可证后,应当持经营许可证向企业登记机关办理登记手续。
第八条 从事非经营性互联网信息服务,应当向省、自治区、直辖市电信管理机构或者国务院信息产业主管部门办理备案手续。办理备案时,应当提交下列材料:
(一)主办单位和网站负责人的基本情况;
(二)网站网址和服务项目;
(三)服务项目属于本办法第五条规定范围的,已取得有关主管部门的同意文件。
省、自治区、直辖市电信管理机构对备案材料齐全的,应当予以备案并编号。
第九条 从事互联网信息服务,拟开办电子公告服务的,应当在申请经营性互联网信息服务许可或者办理非经营性互联网信息服务备案时,按照国家有关规定提出专项申请或者专项备案。
第十条 省、自治区、直辖市电信管理机构和国务院信息产业主管部门应当公布取得经营许可证或者已履行备案手续的互联网信息服务提供者名单。
第十一条互联网信息服务提供者应当按照经许可或者备案的项目提供服务,不得超出经许可或者备案的项目提供服务。非经营性互联网信息服务提供者不得从事有偿服务。互联网信息服务提供者变更服务项目、网站网址等事项的,应当提前30日向原审核、发证或者备案机关办理变更手续。
第十二条 互联网信息服务提供者应当在其网站主页的显著位置标明其经营许可证编号或者备案编号。
第十三条 互联网信息服务提供者应当向上网用户提供良好的服务,并保证所提供的信息内容合法。
第十四条从事新闻、出版以及电子公告等服务项目的互联网信息服务提供者,应当记录提供的信息内容及其发布时间、互联网地址或者域名;互联网接入服务提供者应当记录上网用户的上网时间、用户帐号、互联网地址或者域名、主叫电话号码等信息。互联网信息服务提供者和互联网接入服务提供者的记录备份应当保存60日,并在国家有关机关依法查询时,予以提供。
第十五条 互联网信息服务提供者不得制作、复制、发布、传播含有下列内容的信息:
(一)反对宪法所确定的基本原则的;
(二)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;
(三)损害国家荣誉和利益的;
(四)煽动民族仇恨、民族歧视,破坏民族团结的;
(五)破坏国家宗教政策,宣扬邪教和封建迷信的;
(六)散布谣言,扰乱社会秩序,破坏社会稳定的;
(七)散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;
(八)侮辱或者诽谤他,侵害他人合法权益的;
(九)含有法律、行政法规禁止的其他内容的。
第十六条 互联网信息服务提供者发现其网站传输的信息明显属于本办法第十五条所列内容之一的,应当立即停止传输,保存有关记录,并向国家有关机关报告。
第十七条 经营性互联网信息服务提供者申请在境内境外上市或者同外商合资、合作,应当事先经国务院信息产业主管部门审查同意;其中,外商投资的比例应当符合有关法律、行政法规的规定。
第十八条国务院信息产业主管部门和省、自治区、直辖市电信管理机构,依法对互联网信息服务实施监督管理。新闻、出版、教育、卫生、药品监督管理、工商行政管理和公安、国家安全等有关主管部门,在各自职责范围内依法对互联网信息内容实施监督管理。
第十九条违反本办法的规定,未取得经营许可证,擅自从事经营性互联网信息服务,或者超出许可的项目提供服务的,由省、自治区、直辖市电信管理机构责令限期改正,有违法所得的,没收违法所得,处违法所得3倍以上5倍以下的罚款;没有违法所得或者违法所得不足5万元的,处10万元以上100万元以下的罚款;情节严重的,责令关闭网站。违反本办法的规定,未履行备案手续,擅自从事非经营性互联网信息服务,或者超出备案的项目提供服务的,由省、自治区、直辖市电信管理机构责令限期改正;拒不改正的,责令关闭网站。
第二十条制作、复制、发布、传播本办法第十五条所列内容之一的信息,构成犯罪的,依法追究刑事责任;尚不构成犯罪的,由公安机关、国家安全机关依照《中华人民共和国治安管理处罚条例》、《计算机信息网络国际联网安全保护管理办法》等有关法律、行政法规的规定予以处罚;对经营性互联网信息服务提供者,并由发证机关责令停业整顿直至吊销经营许可证,通知企业登记机关;对非经营性互联网信息服务提供者,并由备案机关责令暂时关闭网站直至关闭网站。
第二十一条 未履行本办法第十四条规定的义务的,由省、自治区、直辖市电信管理机构责令改正;情节严重的,责令停业整顿或者暂时关闭网站。
第二十二条 违反本办法的规定,未在其网站主页上标明其经营许可证编号或者备案编号的,由省、自治区、直辖市电信管理机构责令改正,处5000元以上5万元以下的罚款。
第二十三条违反本办法第十六条规定的义务的,由省、自治区、直辖市电信管理机构责令改正;情节严重的,对经营性互联网信息服务提供者,并由发证机关吊销经营许可证,对非经营性互联网信息服务提供者,并由备案机关责令关闭网站。
第二十四条 互联网信息服务提供者在其业务活动中,违反其他法律、法规的,由新闻、出版、教育、卫生、药品监督管理和工商行政管理等有关主管部门依照有关法律、法规的规定处罚。
第二十五条电信管理机构和其他有关主管部门及其工作人员,玩忽职守、滥用职权、徇私舞弊,疏于对互联网信息服务的监督管理,造成严重后果,构成犯罪的,依法追究刑事责任;尚不构成犯罪的,对直接负责的主管人员和其他直接责任人员依法给予降级、撤职直至开除的行政处分。
第二十六条 在本办法公布前从事互联网信息服务的,应当自本办法公布之日起60日内依照本办法的有关规定补办有关手续。
第二十七条 本办法自公布之日起施行。
转贴:服务器一些基础知识
转自:http://itbbs.pconline.com.cn/topic.jsp?tid=2525860&topicPage=1
一.技术篇:
(1)硬RAID与软RAID的区别
(2)服务器被访问的速度由哪些因素决定
(3)服务器配件及相关技术简介
Apache (4)服务器的安装教程
(5)服务器安全技巧七则
(6)注册表基础知识
(7)Linux下硬盘分区的最佳方案
(8)黑客是怎样攻击服务器的
(9)服务器入门知识
(10)服务器基础相关
(11)服务器基础架构工具
(12)认识典型邮件服务器
二.导购篇:
(1)为什么要做双机热备?
(2)服务器的分类和常用机箱类型
(3)小企业独立服务器架设
(4)服务器选购
(5)认识服务器机箱
(6)服务基础知识入门-了解服务器芯片组
(7)品牌机/服务器日常购机、使用心得专题
(8)“核”问题解读-双核服务器购买指南(1)
(9)“核”问题解读-双核服务器购买指南(2)
(10)“核”问题解读-双核服务器购买指南(3)
三.服务篇:
1.电脑日常保养注意事项
电脑日常保养注意事项
2.应该如何做好企业和个人的产品售后服务
应该如何做好企业和个人的产品售后服务
3.品牌电脑售后服务质量大调查
品牌电脑售后服务质量大调查
4.各类品牌机的售后服务内容、方式
各类品牌机的售后服务内容、方式
5.服务器的日常维护
服务器的日常维护
6.个人电脑日常维护指南
个人电脑日常维护指南
7.跟我学网吧维护究极技巧
跟我学网吧维护究极技巧
以下内容属于个人资料:
请问DP和MP各是什么意思?各有什么差别?(1)
Intel XEON MP处理器介绍
服务器之SMP技术服务器技术之热插拔技术
为什么选用Intel服务器及其主要特点细说高端服务器
解析IBM最新四路服务器中的新技术
为什么服务器硬盘都那么小,而且都是36G的整数倍!!??
PC 服务器选购
服务器是这样选型的。。(转)
常用端口简介
NAT———网络地址翻译
VPN详解
介绍磁带技术中的常用术语及常见磁带类型
存储&备份的基础(帮助失意的妖精整理上传)
可否为我介绍一下有关磁带机的知识
介绍几个最基本,最常用的,测试网络的命令
windows下ping命令详解
关于作标书拓扑图用的软件
HP常用工具网站(做方案有用)
书稿的烦恼
由于飞多多不能完成预期章节,我只好分担更多的章节
现在第2、3、12、13章也得我来写。。。。
其实多写点也没有什么,我只求飞多多能按时交稿,尽快了结这段本已经解决的事。
我这段时间写的书稿目录,总271页
第 4 章: Tapestry框架基础应用
4.1 快速上手
4.1.1 Tapestry水果商店项目介绍
4.1.2 Tapestry水果商店应用程序流程图
4.1.3 Tapestry水果商店应用程序项目配置
4.1.4 Tapestry页面组成结构
4.1.5 水果商店的业务逻辑类
4.1.6 登陆页面
4.1.7 水果列表页面
4.1.8 水果图示页面
4.1.9 购买水果页面
4.1.10 已购买水果列表页面
4.1.11 Border组件
4.2 Tapestry属性指定
4.3 Tapestry属性的生命周期
4.4 监听方法
4.5 Visit对象和Global对象
4.5.1 Visit对象
4.5.2 Global对象
4.6 页面类和页面事件
4.6.1 页面类
4.6.2 页面事件
4.7 Form组件原理
4.7.1 HTML forms与Tapestry Form
4.7.2 Form表单组件的基本应用
4.7.3 Form表单组件运行原理
4.7.4 表单效验
4.7.4.1. 效验对象
4.7.4.2. 效验代理
4.7.4.3. 自定义效验代理
4.7.4.4. 自定义效验对象
4.7.4.5. 客户端效验
4.7.5 表单输入转换
4.7.6 失效链接
4.8 Tapestry的service
4.8.1 Tapestry用于Servlet的底层对象
4.8.2 理解应用程序servlet
4.8.2.1. Servlet请求处理
4.8.2.2. 理解服务器端状态
4.8.2.3. 在一个集群中管理服务器端状态
4.8.3 理解Tapestry引擎
4.8.3.1. 传统应用程序的URL有什么问题?
4.8.3.2. Tapestry怎样操作应用程序的运作?
4.8.3.3. 理解home service
4.8.3.4. 理解page service
4.8.3.5. 理解direct service
4.8.3.6. 理解external service
4.8.3.7. 理解ResponseRender
第 5 章: Tapestry框架配置
5.1
5.1.1 Java实现国际化
5.1.2 Tapestry的本地化
5.2 应用程序规范文件的配置
5.2.1 应用程序规范文件的标签元素定义
5.2.2 应用程序配置
5.3 hivemodule配置
5.3.1 Hivemind配置文件
5.3.2 调用Hivemind的service
5.3.3 Friendly URL
5.4 重定义异常页面
5.5 子项目分包与页面分包
第 6 章: 创建自定义组件
6.1 创建自定义组件
6.1.1 组件的种类
6.2 组件的相关配置
6.2.1 组件结构
6.2.2 组件包
6.3 单一组件
6.3.1 最简单的自定义普通组件
6.3.2 最简单的自定义Form表单组件
6.3.3 带有表单效验的自定义表单组件
6.3.4 带有表单输入转换的自定义表单组件
6.4 Tapestry动态脚本
6.4.1 带有动态脚本的自定义组件
6.4.2 Tapestry动态脚本的语法
6.5 自定义service
6.6 创建自己的AJAX组件
6.6.1 AJAX简介
6.6.2 创建自己的AJAX组件
6.6.2.1. 在水果商店示例中创建演示页面
6.6.2.2. Tapestry官方的PropertySelection组件
6.6.2.3. 创建联动下拉菜单组件
第 7 章: Tapestry对JDK 5.0的支持
7.1 JDK 5.0的新特性Annotation
7.1.1 Annotation介绍
7.1.2 Annotation与Tapestry的property属性注入
7.2 Tapestry中Annotations的使用
7.2.1 Asset
7.2.2 Bean
7.2.3 Component
7.2.4 InitialValue
7.2.5 InjectObject
7.2.6 InjectPage
7.2.7 InjectState
7.2.8 InjectScript
7.2.9 Persist
7.2.10 Parameter
第 8 章: HiveMind框架
8.1 概述
8.1.1 HiveMind面向服务框架
8.1.2 IoC和DI的基本概念
8.2 HiveMind框架应用
8.2.1 HiveMind框架基础应用
8.2.1.1. HiveMind配置文件
8.2.1.2. 启动HiveMind框架
8.2.1.3. 声明service-id并注入service实例
8.2.1.4. HiveMind的BuildFactory详解
8.2.1.5. Configuration简介
8.2.2 HiveMind如何与Hibernate融合
8.2.3 HiveMind如何实现AOP编程
8.2.4 Tapestry如何通过HiveMind与Spring融合
第 9 章: Tapestry底层探密
9.1 Tapestry源代码结构
9.2 Tapestry如何实现页面之间对象传递
9.3 Tapestry属性的持久化策略
第 10 章: 为Tapestry添加一个翅膀――TWF
10.1 什么是TWF
10.2 如何设计并实现TWF
10.2.1 解析XML配置文件
10.2.2 与Tapestry融合
jasperReport的基础用法,忘性大,还是找个地方记下
虽然例子都是几个星期以前的了,很基础简单的东西,虽然当初摆弄出来也就几个小时。不过还是随便记记,忘性太大了,以后要用的话,几分钟就可以拣回来。
public class PdfCreate extends WebApplicationObjectSupport implements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) {
try {
OutputStream os = response.getOutputStream();
String handle = RequestUtils.getStringParameter(request, "handle", null);
if(handle.equals("pdf")) {
response.setContentType("application/pdf");
TestJasperReport.ganarateJasper(os, this.getServletContext(), handle);
}
if(handle.equals("excel")) {
response.setContentType("application/vnd.ms-excel");
TestJasperReport.ganarateJasper(os, this.getServletContext(), handle);
}
if(handle.equals("html")) {
response.setContentType("text/html");
TestJasperReport.ganarateJasper(os, this.getServletContext(), handle);
}
os.flush();
os.close();
} catch (JRException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
public class TestJasperReport {
public static void ganarateJasper(OutputStream os, ServletContext context, String handle) throws JRException {
File reportFile = new File(context
.getRealPath("/reports/HyperlinkReport.jasper"));
if (reportFile.exists()) {
System.out.println(reportFile.getPath());
}
Map parameters = new HashMap();
parameters.put("ReportTitle", "Address Report");
parameters.put("BaseDir", reportFile.getParentFile());
parameters.put("ImageFile", new File("C:/iText.pg"));
JasperReport jasperReport = (JasperReport) JRLoader
.loadObject(reportFile.getPath());
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, new JREmptyDataSource());
if(handle.equals("pdf")) {
JRPdfExporter pdf = new JRPdfExporter();
pdf.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GB2312");
pdf.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
pdf.setParameter(JRExporterParameter.OUTPUT_STREAM, os);
pdf.exportReport();
}
if(handle.equals("excel")) {
JExcelApiExporter excel = new JExcelApiExporter();
excel.setParameter(JExcelApiExporterParameter.CHARACTER_ENCODING, "GB2312");
excel.setParameter(JExcelApiExporterParameter.JASPER_PRINT, jasperPrint);
excel.setParameter(JExcelApiExporterParameter.OUTPUT_STREAM, os);
excel.exportReport();
}
if(handle.equals("html")) {
JRHtmlExporter html = new JRHtmlExporter();
html.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "GB2312");
html.setParameter(JRHtmlExporterParameter.JASPER_PRINT, jasperPrint);
html.setParameter(JRHtmlExporterParameter.OUTPUT_STREAM, os);
html.exportReport();
}
}
public static void main(String[] args) throws JRException {
//编译report.jrxml并在report.jrxml所在的目录中生成report.jasper文件
JasperCompileManager
.compileReportToFile("D:/workspace/test/WebRoot/reports/HyperlinkReport.jrxml");
System.out.println("~~~~~");
//填充数据,这里使用的是JREmptyDataSource
// JasperFillManager.fillReportToFile("D:/jasperTest/reports/WebappReport.jasper", null,
// new JREmptyDataSource());
// //预览报表,false代表不是使用xml文件。
// JasperViewer view = new JasperViewer("D:/jasperTest/reports/WebappReport.jrprint", false);
// view.pack();
// view.setVisible(true);
}
}
回家不用挖沙的日子,真是爽快呀~~~
这两天真是爽,回家都没有再挖沙,舒服呀~~~~轻松多了。。。不过这种日子可不能长久,不然要懈怠哟。嘿嘿。
早上hotmail上TSS订阅的最新邮件,恩,不错,一个挺有趣的话题。。。偷懒很久了,现在要跟进了哟。
今天晚上一定要记得把书稿的目录贴上来,放松不得的家伙。
下面是摘过来的:
During a more rigorous SOA assessment, the SOA team would harvest existing artifacts as well as create new ones. It is recommended that the following subjects be discussed and factored into appropriate tasks for the assessment. Artifacts collected or completed during an SOA assessment should be revisited during a full lifecycle SOA project.
Digital strategy - Within the organization strategic or technology plan, if it exists, site references to pursuing a SOA.
SOA business case - Identify the driving force behind the organizations interest in SOA and Web services.
Technology risk aversion - Assessing the style of the organization with respect to adopting new technology (that is, cutting edge vs. conservative) is important.
SOA analysis and prioritization - Based on corporate project planning and business strategy, prioritize SOA projects, with respect to project dependencies and business importance. Some analysts refer to this activity as options analysis and Gartner uses the famous Magic Quadrant to possible isolate, which projects are of strategic importance.
Non-functional requirements - Identify a set of SOA non-functional requirements such as, response times to be guaranteed (to internal or external customers), transactional integrity in long-running workflow scenarios, etc. Non-Functional Requirements or Quality Characteristics are often overlooked and are difficult to understand. As opposed to Functional Requirements, which can be expressed as Use Cases, Business Rules ("Shall" statements), and feature lists, that are more intuitive.
Constituency analysis - Model the users of the system and their roles to determine Web services privileges.
Current security infrastructure - Web services security model defines how authentication and RBAC (Role-based access control) is implemented with the service.
Architectural review board - Propose establishing an architectural review team that has a good grasp of the existing standards and technologies. Establish where the review board fits into the existing organizational "reports to" chart. If the review board does not have a certain amount of political capital in the organization, it is doomed to be ineffective.
Governance principles - Identify existing governance principles (i.e. loose coupling) and develop a set of best practices for SOA and Web services design and development. For example, governance principles regarding when to use coarse-grained vs. fine-grained services should be established.
(High-level) SOA specification phase - Based on corporate models or JAD sessions, begin to model the behavior of a candidate Web services.
Findings and recommendations - Based on the existing artifacts and artifacts that were created during the assessment, document the important findings and recommendations, such as, the need for technical expertise or the set of WS-* specs that will be embraced.
终于解脱了。
终于在五一赶稿完毕,好累~~~唉,
第4、5、6、7、9、10、11章总共大概230页,昨晚已经发给了飞多多。
飞多多是其它章节的作者,也是作者代表。剩下的只有靠飞多多费心了。
也许未来一段时间还需要和出版商就审稿问题进行交流,不过总算革命已经取得阶段性胜利。娃哈哈哈哈~~~~
晚上把我写的这几章目录贴上来。
心情大好,已经有几个月没有如此放松。现在终于可以在工作上投入更多的时间,也可以浪费更多的时间泡MM、研究新技术了。。。娃哈哈哈
很简单的iText使用,随便找个地方记下
启动Tomcat和Jetty的另外一种方式
从Alfred文章中扣出来的,以前到是没有用过这种方法,收录收录:):
package com.wisekernel;
import java.net.InetAddress;
import org.apache.catalina.Connector;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.startup.Embedded;
public class MyEmbededTomcat {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Embedded tomcat = new Embedded();
tomcat.setDebug(9);
Engine engine = tomcat.createEngine();
Host host = tomcat.createHost("localhost","");
engine.setDefaultHost("localhost");
engine.addChild(host);
Context context = tomcat.createContext("","D:/Program Files/eclipse311/workspace/tuition1/WeBRoot");
host.addChild(context);
tomcat.addEngine(engine);
Connector connector = tomcat.createConnector((InetAddress)null,8080,false);
tomcat.addConnector(connector);
tomcat.start();
}
}
package com.wisekernel;
import org.mortbay.http.SocketListener;
import org.mortbay.jetty.Server;
public class Jetty5 {
/**
&nsp; * @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Server server = new Server();
SocketListener listener = new SocketListener();
listener.setPort(8080);
server.addListener(listener);
server.addWebApplication("/", "./WebRoot");
server.start();
}
}
EmbededTomcat 的createContext()方法中写入的应该是Web App的绝对路径。这点不如Jetty来的方便,Jetty可以写相对路径。
EmbededTomcat 的项目classpath中不能有XerecsImpl.jar,否则会报错,这个bug不知道怎么fix。