PHP开源框架
国外的开源技术也影响和推动了国内开源程序的发展,上文我介绍的《国外优秀开源PHP建站程序一览》中,很多国外开源程序并不太符合中国人的使用习惯,而 国内有一些厂家或个人也做了一些不错的产品,不少程序是提供源代码下载的,虽然有些在许可协议上和开源许可证有些出入,但其在使用上还是挺符合中国人的使 用习惯,今天我就介绍一些国内的PHP“开源”建站程序。
论坛: Discuz
Discuz非常流行,也是中国地区最多用户使用的论坛程序,论坛搭建非常简单易用,使用风格符合中国人的口味。另一个流行的论坛程序是 PHPWind。
SNS: Ucenter Home
UCenter Home是采用PHP+MySQL构建的社会化网络软件(Social Network Software,简称SNS)。 通过 UCenter Home,建站者可以轻松构建一个以好友关系为核心的交流网络,用户可以使用迷你博客记录;方便快捷地发布日志、上传图片;与其好友们一起分享信息、讨论 话题;了解好友最新动态。
E-Commerce: ECSHOP
ECSHOP是一款开源免费的网上商店系统,用户可以根据自己的商务特征对ECSHOP进行定制,增加自己商城的特色功能。另一个流行的网上商 城系统是shopex。
点评: Modoer
Modoer一款PHP点评系统,可针对多种行业进行点评,可以自由调控点评项目,类型,采用Web 2.0的建站方式,网站会员能让快速上手。
Digg: PBDigg
PBDigg是基于PHP+MYSQL的开源Digg社区资讯系统,融合了社会性标签、主题评论、Rss订阅等多种WEB2.0元素,是一个高 效、快速的网站解决方案。
Wiki: HDWiki
HDWiki是专为中文用户设计和开发的开源、高效的中文百科建站解决方案,免费、易用、功能强大,和UCenter可无缝整合。
RSS: IXNA
IXNA是国内开源PHP新闻聚合程序,支持RSS多核心切换,默认支持lastrss、simplepie、magpierss,支持 RDF、RSS、ATOM,支持智能识别。
CMS: 关于CMS的PHP产品很多,这里主要介绍下面三个。
SupeSite
SupeSite 是一套独立的内容管理系统(CMS),并且拥有对Discuz!论坛信息和UCenter Home个人空间信息聚合的功能,是一个不错的社区门户解决方案。
DedeCMS
DedeCMS是一个比较老的PHP CMS系统,很多早期的用户都是使用这个建立网站的。
KingCMS
KingCMS是一套简单易学,操作简单的开源内容管理系统(CMS),KingCMS分为PHP+MySQL和 ASP+MSSQL/ACCESS两种语言版本的系统。
最短CN域名在干啥?
总共二十六个英语字母,由这二十六个字母组成的最短 CN域名都只想哪些网站,我在浏览器里一次输入,得到如下结果。
a.cn 没有任何网页,经查询该域名已被列入限制注册名单
b.cn 中,北京澳美新投资顾问有限公司所有
c.cn 中,北京澳美新投资顾问有限公司
d.cn 当乐网,手机游戏下载网站
e.cn 没有任何网页,经查询该域名已被列入限制注册名单
f.cn 没有任何网页,2003年被深圳市世强电脑科技有限公司注册
g.cn 大家都知道,谷歌花了不少银子买的,指向谷歌中国
h.cn 指向shanghai.114.cc(上海房地产网),没有作主域名,估计在待价而沽
i.cn 没有任何网页,经查询该域名已被列入限制注册名单
j.cn 指向简单生活网,一在线生活服务网站,还有点名气
k.cn 没有任何网页,2003年被北京保联网科技有限公司注册
l.cn 乐活网,也是一在线生活服务网站,不过我好像今天才听说。
m.cn 出现错误,打不开,经查询2003年被济南鑫达印刷包装有限公司注册
n.cn 没有任何网页,经查询2003年被北京计算机与网络研究中心注册
o.cn 网站叫都市圈,一分类信息网站
p.cn 不明白是个什么类型的网站
q.cn 网站叫摘吧,号称“中国文摘基地”
r.cn 指向dg.114.cc(东莞人才网),看来跟h.cn有着一样的命运
s.cn 2003年被北京智慧东方信息技术有限公司注册
t.cn 没有任何网页,2003年被Hangzhou 365 Internet Co.,Ltd注册
u.cn 网站叫看天下,是个图书阅读网站
v.cn 2003年被沈阳五星设计有限公司注册
w.cn 指向msn.ename.cn,看来是被易名中国给注册去了
x.cn 竟然指向的是陕西联通,注册者却不是,我晕!
y.cn 哇!竟然是2005年注册的,之前就没有人注册?
z.cn 指向rc.114.cc,与h.cn和r.cn命运一样。这家公司就厉害了,拥有三个这样 的域名 。
在查询的过程中,我发现这些域名大多是在2003年3月10日被人注册的 ,哪一天是什么日子?
从上面可以看出,只有8个 被真正投入使用中,其他要嘛没有,要嘛正中,还有的则没有被用作主域名。
y.cn让我好意外,2005年才被注册。2003年到2005年这段时间,玉米们在干啥?不会认为这样的域名 根本不可能 被自己注册到而懒得去查吧?
各大浏览器 CSS3 和 HTML5 兼容速查表
支持 CSS3 和 HTML5 的浏览器越来越多,甚至包括最新版的 IE,当然,所谓支持仅仅是部分支持,因为 CSS3 和 Html5 的W3C 规范都尚未形成。如果你现在就希望使用 CSS3 和 HTML5 创建你的站点,至少要对各个浏览器对这两种新技术的支持情况有一个全面了解。
需要指出的是,即使同一个浏览器的同一个版本,在 Mac 和 Windows 两个平台,它们对 CSS3 和 HTML5 的支持也并不一致。本文是一份 Chrome, Safari, Firefox, Opera, IE 5 大浏览器,在 Mac 和 Windows 两个平台,对 CSS3 和 HTML5 各种功能的详细支持情况清单。
CSS3 属性
可以看出,全盘支持 CSS3 属性的浏览器有 Chrome 和 Safari,而且不管是 Mac 平台还是 Windows 平台全支持。

CSS3 选择器
除了 IE 家族和 Firefox 3,其它几乎全部支持。Chrome,Safari,Firefox 3.6,Opera 10.5 成绩最好 。

HTML5 Web 应用
Safari 对 HTML5 Web 应用的支持最好,除了地理定位功能,其它都支持。

HTML5 网页内嵌对象
这应该是 HTML5 最令人期待的东西,内置的画布,视频,音频等对象。全部支持的有 Chrome,Safari,Firefox 3.6,Opera 10.5。IE家族则全军覆没。

HTML5 音频编码
Opera 10.5 支持的最全面,IE 家族又是颗粒无收。

HTML5 视频编码
H.264 任重道远。

HTML5 各种表单对象
Mac 平台下的 Chrome 成绩最佳。这些表单对象让人想起了桌面程序。

HTML5 表单对象属性与行为
又一次想到了桌面程序。

结论
目前,对 CSS3 和 HTML5 支持最好的是 Safari,Chrome 次之,Firefox 3.6 和 Opera 10.5 旗鼓相当,IE家族最差。鉴于这种情况,假如你想使用这两项新技术创建一个先锋体验式站点,现在的 CSS3 和 HTML5 可以让你实现,假如你希望这个站点能被绝大多数人正常访问,现在还为时过早,折中的方案是,为不支持 CSS3 和 HTML5 某些功能的浏览器提供降级方案,当然,其中要涉及到很多问题,包括浏览器,版本,平台的探测,CSS Hack 等等大量工作,相信是得不偿失的。
离职员工的期权处理
前一段时间,有不少朋友问到:假如有员工从公司离职,员工手中的期权应当如何处理?近期,越来越多的创业公司也都面临着类似的问题,有的离职员工甚至要把公司告上法庭,看来非常有必要向公司和员工来分享一下关于离职员工的期权问题了。
公司与员工终止劳动关系时,除了终止理由和程序的合法性之外,还涉及到工资、奖金、社保、公积金、经济补偿、保密、知识产权、不竞争义务等等一系列法律问题。如果说这些问题都是惯常的法律问题,那么,随着股权激励在创业公司中越来越广泛的使用,期权已经成为一个越来越普遍的员工离职新问题,因为期权涉及的权益潜在价值较大,再加上缺少成熟的法律规范,公司和员工双方往往都容易被期权问题所困扰。
1、期权是什么?
期权,就是公司赋予员工在满足约定条件后按照特定价格购买公司股权(份)的期待权利,目的在于通过股权来招募、激励和留存优秀人才,这已经成为越来越多创业公司甚至上市公司采用的人才激励方式。这里的特定价格往往比其他投资人购买公司股权(份)的价格要低很多,体现了公司提供给员工的奖励和优惠。
是否行使手中的期权,是员工的权利,而不是义务。员工行使期权,应当按期权文件规定的条件和程序支付行权价格,取得公司股权(份),成为公司股东;员工不行使或放弃期权,则期权到期作废。
简法帮提示:
如果离职员工手中持有公司的期权,员工在离职时就需要权衡公司前景、行权的成本(包括行权价格和税负),是否愿意行使期权从而在离开公司后继续持有公司的股权?而公司方面则需要考虑:是否愿意让离职员工继续持有公司股权?是否有权通过回购等方式收回离职员工手中的期权或股权?能收回多少?需要多大成本?
2、离职员工有多少期权?
创业公司的期权方案中,行使期权的条件通常体现为服务期限。例如,市场主流为约定激励对象四年服务期,每满一年,员工可行使1/4的期权总额;当然,也有不少公司约定为四年服务期,第一年期满可行使1/4的期权总额,剩余3/4期权在三年(36个月)内按月到位,每月到位1/36。当然,也有公司将服务期约定为五年,每年1/5,与四年的道理相同。
这种分期到位(Vesting)的机制是从国外引入,已经成为国内创业公司员工激励的主流方式。但是,这些机制是体现在公司的期权激励文件中,包括激励方案和期权授予协议等文件,而不是在任何法律规章之中,所以公司和员工都需要查阅双方签署的激励文件,以文件的约定为准。
通常情况下,员工必须满一年才能取得相应的期权,员工未满一年离开公司的,按照期权方案规定通常不能行使期权。同样,这也是市场主流实践做法,但是最终都需要以双方签署的激励文件为准。
简法帮提示:
当离职员工涉及期权问题时,公司和员工双方要做的第一件事情,就是找出双方签署的期权授予协议以及相关激励方案等文件。这也是为什么创业者发给我们几个截图想要寻求帮助时,我们通常会给出的建议就是:要全面地查看激励文件。对于公司也是一样。
我们在实践中也注意到,有些创业公司自作聪明,不让员工持有或保存激励方案甚至授予协议。且不论这样的股权激励到底给员工什么样的印象(员工自己都不知道有什么权利义务),股权激励能否达到吸引、激励和留存优秀员工的效果,更重要的是,进入诉讼争议程序后,公司最后还是要提交相关文件,在公开案件中则有可能产生更大范围的负面声誉影响。
3、期权行使的时限
期权行使期限可以说是创业公司股权激励的一个“杀手锏”,基本意思就是,员工在离开公司时或之后的一个30-90天窗口期内必须选择行使期权或者放弃期权,30天和60天都比较常见。未在规定行权窗口期间内行权,期权由公司收回。此外,期权通常都有一个最长10年的行权期限,主要是基于美国税法对激励型期权(见下文第4部分)的限制条件。
现实的情况是,让一个离职的员工(譬如二十几岁的工程师)在离职时或离职后的一两个月内找到行使期权所需要的资金,其实并不容易,尤其是还要考虑行使期权的税负。一方面,收益是纸面财富,这些期权(和行使后拿到的股权)没有市场没有流动性(创业公司的期权计划通常也限制交易),未来能否套现没人知道;但另一方面,公司和税务局却都要现金形式的行权价格和税款。所以,很多创业公司的员工在“另谋高就”时都不得不扔掉了期权这个“鸡肋”。
为了更好吸引人才,硅谷的一些创业公司已经开始采取补救措施。据外媒报道,2015年3月,独角兽Pinterest调整了期权计划,开始允许在公司工作两年以上的员工在离开公司后继续持有已经到位的股票期权,将行权时间窗口拉长了7年时间,这样到时候大部分人都有能力行权了,而且公司也可能已经上市了,行权就能立即套现,支付税费也不再是问题。
简法帮提示:
如果离职员工手中持有公司的期权,员工需要在期权文件规定的行权窗口期内决定是否行使期权,中国法院在判例中也认可了这种行权窗口期的有效性。公司方除了行权价格、手续,还需要考虑期权有关的员工税负和代扣代缴义务,因为在美国法律环境下的期权激励在引入中国后,还有一些水土不服的问题。
从中国境内的法律实践情况来看,创业公司引入更长的时间窗口则面临更多不确定性,不仅税务处理上不够明确(或者说不够优惠,见下文第4部分),而且期权会在公司治理和上市等各个方面带来困扰,所以,创业公司实践中的做法往往是在离职时一揽子解决(收回)期权和其他离职补偿问题(见下文第5部分),因此简法帮在线生成的期权文件中就针对境内架构的公司放弃了这种窗口期的约定,鼓励公司和员工在离职时达成包括期权在内的一揽子整体解决方案。
4、期权的税负
我们引入的期权激励借鉴自美国,美国的股票期权通常包括两种类型:(1)激励型期权(Incentive Stock Option, ISO)。这种期权面向员工,在满足持股期限(期权授予后满两年且行权后满一年)等限制性条件时,员工可以延迟纳税,行权时不缴纳个税(高收入员工存在一个替代性最低税问题,这里不深入讨论),转让股权时的收益按更优惠的资本利得纳税,而不是普通收入纳税,公司也不得扣除期权管理费用;(2)非法定期权(Nonqualified Stock Option, NSO)。这种期权在行权时需要按照差额个人收益(股权取得价与当时的市场价之间的差额)缴纳个人所得税,尽管这时候股票可能还没出售套现,而且作为普通收入计税,但没有法定的持股期限等限制条件,公司则可以扣除期权管理费用。前文提及的硅谷公司调整期权计划,基于上述分类就需要将激励型期权(ISO)转化为非法定期权(NSO),离职员工和公司两个方面分别面临者税负和管理费用扣除的问题。
而在中国现在的法律框架下,包括期权在内的员工股权激励税务制度跟期权的来源地国家——美国差异很大。周鸿祎等创业者曾高调呼吁国家对创新创业要放弃“惯性思维”,尤其是“期权按照个税征税不合理”的呼吁引起了无数创业公司和创业公司员工的共鸣,因为“国家是把期权收入和员工月工资收入加在一起,征收可能高达45%的个人所得税……(忽略了创业企业员工)或许在前五年甚至十年内一直拿着低工资。”
国家也在不断试验和推广改革措施,例如引入分期缴纳的规定:自2016年1月1日起,全国范围内的高新技术企业转化科技成果,给予本企业相关技术人员的股权奖励,个人一次缴纳税款有困难的,可根据实际情况自行制定分期缴税计划,在不超过5个公历年度内(含)分期缴纳,并将有关资料报主管税务机关备案。这里股权奖励是指企业无偿授予相关技术人员一定份额的股权或一定数量的股份。
该规定的局限性在于适用范围过窄,因为该文仅仅适用于高新技术企业转化科技成果给予本企业相关技术人员的股权奖励。且不论高新技术企业的认定要求,仅将该优惠限定在转化科技成果,给予本企业相关技术人员的股权奖励,就已把非技术人员排除在外了。况且规定里的股权奖励是指无偿授予的股权,那么期权算吗?看起来不算。实际上,对于无偿授予股权,这是员工激励里非常忌讳的做法,也面临着无偿授予股权对应的注册资本如何实缴的中国特色法律问题!
简法帮提示:
根据中国现有的税法规定,员工个人获得股权奖励时,按照“工资薪金所得”项目计算确定应纳税额,虽然有可能享受年底奖金类似的处理方式,仍然可能导致员工按累进税率适用最高达45%的个人所得税。但是,按照现有的个人所得税法,如果持有期权的个人不是公司员工,反倒可能根据所得税法适用于更低的20%的个税税率,公司员工作为期权的主要激励对象反而受到更高税率的“惩罚”,这岂不荒唐?!
简法帮基于现有法律框架,之前在36Kr发表过系列文章,在《关于创业公司股权激励的那些“税事儿”(之一)》中谈了创业公司应该了解的基本税收制度,在《关于创业公司股权激励的那些“税事儿”(之二) ——税收规划的秘诀》中进一步聊过有关股权激励制度设计中的税收规划问题,有兴趣的读者可以前往查看。
5、一揽子解决方案
无论是中国还是美国,实施期权而不是限制性股权来激励员工的一个重要作用就是延迟纳税。因为员工取得期权时是否产生所得仍未确定(员工不行权就不产生收入),所以一般在授予期权时不产生纳税义务。比较起来,限制性股权直接授予员工时就可能立即面临纳税义务。在实践中,大部分创业公司通过创始股东低价转让或者公司低价增发的方式,让员工像投资人一样直接或间接取得公司股权,尽管理论上可能构成“工资薪金所得”,但很少听说有创业公司按照股权取得价与当时的市场价之间的差额代扣代缴“工资薪金”个人所得税,公司可以理解为法律不完善,税务局也可能理解为偷税漏税。
鉴于中国目前针对包括期权在内的员工股权激励税务制度尚处在早期阶段,员工行权就会面临繁重的税务负担和现金压力,所以在大部分情况下,在职员工都推迟行使期权,以此观察公司发展状况来决定待(市场)价而入再待(上)市而沽。
但离职员工的期权应该如何处理呢?放弃到位的期权,员工肯定觉得不公平;行权又面临高昂的税负和现金压力。市场实践中常见的做法是在员工离职时通过一揽子协议解决,将员工资、奖金、不竞争补偿金、经济补偿金以及期权等综合考虑,谈判形成一揽子的解决方案,专业的律师还可以利用经济补偿金的税收优惠待遇为公司和个人促成双方都能够接受的合规方案。
简法帮提示:
援引一个官司最终打到最高人民法院的案例来诠释前文内容,信息来源于2013年6月21日最高院《搜房控股有限公司与被申请人孙宝云合同纠纷再审民事裁定书》。
(1)30日行权窗口:“关于孙宝云的股票期权是否失效的问题。《股票期权协议》是双方当事人真实意思表示,内容不违反我国法律、行政法规的强制性规定,合法有效。搜房公司共授予孙宝云55000股的股票期权,孙宝云在期权有效期内享有依据协议选择购买搜房公司上述股票的权利。搜房北京公司与孙宝云于2009年7月1日解除劳动关系,依据《股票期权协议》第二部分总则第3条的约定,孙宝云的股票期权于2009年7月31日失效。但孙宝云早在2009年6月23日就以电子邮件的方式向莫天全提出了行使股票期权即购买股票的要求,并于7月9日和15日分别以电话及快递方式再次提出行使股票期权的要求。而莫天全在签署《股票期权协议》时表明其身份为搜房公司的董事会主席,在本案中亦以搜房公司代表人身份出现,故其有权代表搜房公司作出意思表示。对于孙宝云在股票期权有效期内提出的购买股票请求,依据《股票期权协议》,搜房公司应当向孙宝云出售股票。”
(2)一揽子解决方案——关于《离职协议书》是否终止《股票期权协议》的问题:“《离职协议书》虽然加盖了搜房北京公司的公章和搜房公司人力资源部的印章,但该协议书的内容为搜房北京公司就协商解除劳动合同事宜向孙宝云支付经济补偿金,并未提及孙宝云的股票期权问题,不足以推定搜房公司和孙宝云合意终止股票期权关系……《离职协议书》没有明确变更或终止《股票期权协议》,孙宝云和搜房公司之间的权利义务仍受《股票期权协议》的约束。”
在该案例中,员工孙宝云就注意到了30日行权窗口的问题。但在一揽子解决方案《离职协议书》中,双方没有明确地将股票期权问题涵盖在内,只是笼统地说“双方权利义务终止,除违反本协议的行为外,任何一方不得通过任何途径向对方主张任何权利”,可能是双方故意将期权问题切分出来单独处理,也有可能是双方的误解。但无论怎样,双方错过了员工离职达成一揽子解决方案这个最佳的时机。
最全的jQuery插件列表
jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不jquery及的,它兼容 CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理 HTML documents、events、实现动画效果,并且方便地为网站提供 AJAX 交互。 jQuery 还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 jQuery 能够使用户的 html 页保持代码和 html 内容分离,也就是说,不用再在 html 里面插入一堆js来调用命令了,只需定义 id 即可。今天在Kollermedia.at上发现了一篇JQuery插件列表的文章,特推荐如下。
文件上传(File upload) JQuery_001
Ajax File Upload.
jQUploader.
Multiple File Upload plugin.
jQuery File Style.
Styling an input type file.
Progress Bar Plugin.
表单验证(Form Validation)
jQuery Validation.
Auto Help.
Simple jQuery form validation.
jQuery XAV - form validations.
jQuery AlphaNumeric.
Masked Input.
TypeWatch Plugin.
Text limiter for form fields.
Ajax Username Check with jQuery.
表单-选取框(Form - Select Box stuff)
jQuery Combobox.
jQuery controlled dependent (or Cascadign) Select List.
Multiple Selects.
Select box manipulation.
Select Combo Plugin.
jQuery - LinkedSelect
Auto-populate multiple select boxes.
Choose Plugin (Select Replacement).
表单基本、输入框、选择框等(Form Basics, Input Fields, Checkboxes etc.)
jQuery Form Plugin.
jQuery-Form.
jLook Nice Forms.
jNice.
Ping Plugin.
Toggle Form Text.
ToggleVal.
jQuery Field Plugin.
jQuery Form’n Field plugin.
jQuery Checkbox manipulation.
jTagging.
jQuery labelcheck.
Overlabel.
3 state radio buttons.
ShiftCheckbox jQuery Plugin.
Watermark Input.
jQuery Checkbox (checkboxes with imags).
jQuery SpinButton Control.
jQuery Ajax Form Builder.
jQuery Focus Fields.
jQuery Time Entry.
时间、日期和颜色选取(Time, Date and Color Picker)
jQuery UI Datepicker.
jQuery date picker plugin.
jQuery Time Picker.
Time Picker.
ClickPick.
TimePicker.
Farbtastic jQuery Color Picker Plugin.
Color Picker by intelliance.fr.
投票插件(Rating Plugins)
jQuery Star Rating Plugin.
jQuery Star Rater.
Content rater with asp.net, ajax and jQuery.
Half-Star Rating Plugin.
搜索插件(Search Plugins)
jQuery Suggest.
jQuery Autocomplete.
jQuery Autocomplete Mod.
jQuery Autocomplete by AjaxDaddy.
jQuery Autocomplete Plugin with HTML formatting.
jQuery Autocompleter.
AutoCompleter (Tutorial with PHP&MySQL).
quick Search jQuery Plugin.
编辑器(Inline Edit & Editors)JQuery_002
jTagEditor.
WYMeditor.
jQuery jFrame.
Jeditable - edit in place plugin for jQuery.
jQuery editable.
jQuery Disable Text Select Plugin.
Edit in Place with Ajax using jQuery.
jQuery Plugin - Another In-Place Editor.
TableEditor.
tEditable - in place table editing for jQuery.
多媒体、视频、Flash等(Audio, Video, Flash, SVG, etc)
jMedia - accessible multi-media embedding.
JBEdit - Ajax online Video Editor.
jQuery MP3 Plugin.
jQuery Media Plugin.
jQuery Flash Plugin.
Embed QuickTime.
SVG Integration.
图片(Photos/Images/Galleries)
ThickBox.
jQuery lightBox plugin.
jQuery Image Strip.
jQuery slideViewer.
jQuery jqGalScroll 2.0.
jQuery - jqGalViewII.
jQuery - jqGalViewIII.
jQuery Photo Slider.
jQuery Thumbs - easily create thumbnails.
jQuery jQIR Image Replacement.
jCarousel Lite.
jQPanView.
jCarousel.
Interface Imagebox.
Image Gallery using jQuery, Interface & Reflactions.
simple jQuery Gallery.
jQuery Gallery Module.
EO Gallery.
jQuery ScrollShow.
jQuery Cycle Plugin.
jQuery Flickr.
jQuery Lazy Load Images Plugin.
Zoomi - Zoomable Thumbnails.
jQuery Crop - crop any image on the fly.
Image Reflection.
Google地图(Google Map)
jQuery Plugin googlemaps.
jMaps jQuery Maps Framework.
jQmaps.
jQuery & Google Maps.
jQuery Maps Interface forr Google and Yahoo maps.
jQuery J Maps - by Tane Piper.
游戏(Games)
Tetris with jQuery.
jQuery Chess.
Mad Libs Word Game.
jQuery Puzzle.
jQuery Solar System (not a game but awesome jQuery Stuff).
表格等(Tables, Grids etc.)
UI/Tablesorter.JQuery_003
jQuery ingrid.
jQuery Grid Plugin.
Table Filter - awesome!.
TableEditor.
jQuery Tree Tables.
Expandable “Detail” Table Rows.
Sortable Table ColdFusion Costum Tag with jQuery UI.
jQuery Bubble.
TableSorter.
Scrollable HTML Table.
jQuery column Manager Plugin.
jQuery tableHover Plugin.
jQuery columnHover Plugin.
jQuery Grid.
TableSorter plugin for jQuery.
tEditable - in place table editing for jQuery.
jQuery charToTable Plugin.
jQuery Grid Column Sizing.
jQuery Grid Row Sizing.
统计图(Charts, Presentation etc.)
jQuery Wizard Plugin .
jQuery Chart Plugin.
Bar Chart.
边框、圆角、背景(Border, Corners, Background)
jQuery Corner.
jQuery Curvy Corner.
Nifty jQuery Corner.
Transparent Corners.
jQuery Corner Gallery.
Gradient Plugin.
文字和超链接(Text and Links)
jQuery Spoiler plugin.
Text Highlighting.
Disable Text Select Plugin.
jQuery Newsticker.
Auto line-height Plugin.
Textgrad - a text gradient plugin.
LinkLook - a link thumbnail preview.
pager jQuery Plugin.
shortKeys jQuery Plugin.
jQuery Biggerlink.
jQuery Ajax Link Checker.
鼠标提示(Tooltips)
jQuery Plugin - Tooltip.
jTip - The jQuery Tool Tip.
clueTip.
BetterTip.
Flash Tooltips using jQuery.
ToolTip.
菜单和导航(Menus, Navigations)
jQuery Tabs Plugin - awesome! . [demo nested tabs.]
another jQuery nested Tab Set example (based on jQuery Tabs Plugin).
jQuery idTabs.
jdMenu - Hierarchical Menu Plugin for jQuery.
jQuery SuckerFish Style.
jQuery Plugin Treeview.
treeView Basic.
FastFind Menu.
Sliding Menu.
Lava Lamp jQuery Menu.
jQuery iconDock.
jVariations Control Panel.
ContextMenu plugin.
clickMenu.
CSS Dock Menu.
jQuery Pop-up Menu Tutorial.
Sliding Menu.
http://stilbuero.de/jquery/tabs_3/
幻灯、翻转等(Accordions, Slide and Toggle stuff)
jQuery Plugin Accordion.
jQuery Accordion Plugin Horizontal Way.
haccordion - a simple horizontal accordion plugin for jQuery.
Horizontal Accordion by portalzine.de.
HoverAccordion.
Accordion Example from fmarcia.info.
jQuery Accordion Example.
jQuery Demo - Expandable Sidebar Menu.
Sliding Panels for jQuery.
jQuery ToggleElements.
Coda Slider.
jCarousel.
Accesible News Slider Plugin.
Showing and Hiding code Examples.
jQuery Easing Plugin.
jQuery Portlets.
AutoScroll.
Innerfade.
拖放插件(Drag and Drop)
UI/Draggables.
EasyDrag jQuery Plugin.
jQuery Portlets.
jqDnR - drag, drop resize.
Drag Demos.
XML XSL JSON Feeds
XSLT Plugin.
jQuery Ajax call and result XML parsing.
xmlObjectifier - Converts XML DOM to JSON.
jQuery XSL Transform.
jQuery Taconite - multiple Dom updates.
RSS/ATOM Feed Parser Plugin.
jQuery Google Feed Plugin.
浏览器(Browserstuff)
Wresize - IE Resize event Fix Plugin.
jQuery ifixpng.
jQuery pngFix.
Link Scrubber - removes the dotted line onfocus from links.
jQuery Perciformes - the entire suckerfish familly under one roof.
Background Iframe.
QinIE - for proper display of Q tags in IE.
jQuery Accessibility Plugin.
jQuery MouseWheel Plugin.
对话框、确认窗口(Alert, Prompt, Confirm Windows)
jQuery Impromptu.
jQuery Confirm Plugin.
jqModal.
SimpleModal.
CSS
jQuery Style Switcher.
JSS - Javascript StyleSheets.
jQuery Rule - creation/manipulation of CSS Rules.
jPrintArea.
DOM、AJAX和其它JQuery插件(DOM, Ajax and other jQuery plugins)
FlyDOM.
jQuery Dimenion Plugin.
jQuery Loggin.
Metadata - extract metadata from classes, attributes, elements.
Super-tiny Client-Side Include Javascript jQuery Plugin.
Undo Made Easy with Ajax.
JHeartbeat - periodically poll the server.
Lazy Load Plugin.
Live Query.
jQuery Timers.
jQuery Share it - display social bookmarking icons.
jQuery serverCookieJar.
jQuery autoSave.
jQuery Puffer.
jQuery iFrame Plugin.
Cookie Plugin for jQuery.
jQuery Spy - awesome plugin.
Effect Delay Trick.
jQuick - a quick tag creator for jQuery.
Metaobjects.
elementReady.
英文:http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/
作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
创业四字经 【增新版】
这个四字经涵盖了创业历程的不同方面和阶段。是许多过来人的忠告。承蒙大家喜欢原47条,另收25条。欢迎建议、补充。希望加些有本土特色的。
创业四字经
1. 慎用本钱 Watch your cash.
2. 精选同伙 Pick founders carefully.
3. 早纳全才 Hire generalists early.
4. 迟雇专家 Hire specialists later.
5. 投资文化 Invest in culture.
6. 抵挡诱惑 Avoid tempting distractions.
7. 发烧客户 Support customers maniacally.
8. 避免商计 Avoid business plans.
9. 常写博客 Write a blog.
10. 忠于数据 Never fudge numbers.
11. 百家争鸣 Encourage diverse thinking.
12. 珍惜时间 Guard your time.
13. 推迟租楼 Defer renting space.
14. 保证睡眠 Get enough sleep.
15. 延筹资金 Delay raising capital.
16. 坚忍萧条 Persist through downturns.
17. 有根有据 Decide with data.
18. 天天向上 Improve product daily.
19. 常有进账 Recognize revenue consistently.
20. 服务有偿 Start charging early.
21. 回报伯乐 Reward early adopters.
22. 常有卖点 Sell something today.
23. 不怕说不 Say “NO” often.
24. 不求完美 Accept imperfect data.
25. 热情求贤 Recruit with zest.
26. 培育良材 Nurture your best.
27. 礼待商家 Treat vendors well.
28. 充满自信 Believe in yourself.
29. 尊重对手 Respect your competitors.
30. 开怀尝新 Try something new.
31. 树立品牌 Build a brand.
32. 全神贯注 Focus, focus, focus.
33. 加速周转 Iterate more often.
34. 自创自用 Use your product.
35. 体验构想 Live your vision.
36. 举革纳谏 Encourage rational debate.
37. 迅速果断 Make decisions swiftly.
38. 直面艰险 Face harsh realities.
39. 知法守法 Don’t break laws.
40. 保重身体 Protect your health.
41. 犒劳成绩 Celebrate your successes.
42. 精简会议 Cancel unnecessary meetings.
43. 员工增值 Improve employee's resumes.
44. 小心大佬 Beware big bullies.
45. 分享经历 Share the experience.
46. 保持人缘 Maintain your relationships.
47. 开心体验 Keep it fun.
新增
48. 信任员工 Trust your Employees
49. 相信直觉 Trust your Gut
50. 带头加油 Cheerlead the Process
51. 建立自信 Believe in Yourself
52. 处处创新 Apply creativity everywhere
53. 推销理念 Sell the story
54. 重优求异 Do it different; Do it better
55. 始于足下 Take small steps
56. 适时跃进 Leap when necessary
57. 择机冒险 Punt if necessary
58. 管理风险 Minimize the risk
59. 相信账本 Listen to accountant
60. 小心快钱 Beware quick money
61. 运用媒体 Get good press
62. 预算广告 Have ad budget
63. 了解市场 Know your prospects
64. 避免积压 Don't over-produce
65. 认清同伙 Investigate your partners
66. 信任当先 Establish trust early
67. 忠实生财 Loyalty drives sales
68. 不做小人 Don't be mean
69. 回馈客户 Give something back
70. 分享成功 Help Others Succeed
71. 了解人文 Understand local culture
72. 绝不放弃 Don't Give Up
2010年中国互联网最火爆六大领域
2009年,中国网民规模达到了3.84亿人,普及率达到28.9%。而四川网民达到了1635万,增速居全国第五。据艾瑞咨询统计,2009年中国互联网经济规模达743亿元,预测2010年互联网经济年营收规模将超1000亿元。
2010年,中国互联网领域会有哪些新兴的商业模式概念突进,成为这个产业里的火爆者?昨天,记者采访了国内著名IT评论人、互联网实验室原总裁刘兴亮。在他看来,微博客、云计算、网络游戏、电子商务、企业级互联网解决方案、HULU式视频网站,可能是2010年中国互联网最火爆的六大领域。
领域1:微博客 将成为各大网站的必备
记者:微博客实际上去年就看出红火的苗头,今年是不是会扩展到更多网站来应用?
刘兴亮:微博客可以算是新兴起的一类开放互联网社交服务,国际上最知名的微博网站是Twitter,目前已是最炙手可热的互联网新贵,美国总统奥巴马、美国白宫、FBI、Google、HTC、DELL、福布斯、通用汽车等都在Twitter上进行营销和与用户交互。而在国内,目前著名的微博有:新浪微博、搜狐微博、网易微博、嘀咕、叽歪、滴、做啥、139说客、9911等。
年终岁末,微博这种新式互联网应用在中国异常火爆。毫无疑问,微博将是互联网行业未来两三年引导创新的热点,也将是潮流引爆点。可以预测的是,就像BBS、博客一样,2010年微博客也将成为各大网站不可或缺的一部分。到了2010年年底,如果没有配备微博客,都不好意思说自己是中大型网站。
领域2:云计算 今年可获得两倍增长
记者:对云计算的增长前景,你给一个通俗的说法吧?
刘兴亮:狭义云计算是指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的资源;广义云计算是指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的服务。这种服务可以是IT和软件、互联网相关的,也可以是任意其他的服务。通俗点说,云计算就好像电表和电线路,用户不需要自己再发电了,只需要接上电,安上电表,按需付费即可;也可以比喻为煤气管道,用户再也不需要自己去买一罐一罐的煤气了。
现在我们开一个公司,首先要考虑是买很多电脑,配备几台服务器。再过几年,回过头来看看今天开公司的做法,可能就会感觉很傻。就好像早些年,开公司开工厂必须先买发电机一样。但现在,谁还买发电机?云计算就是这么个玩意。提供云计算服务的公司,在2010年至少可以获得两倍的增长。
领域3:手机游戏将逐渐向网游全面过渡
记者:网络游戏已经是一个老生常谈
的领域,今年会有什么新的变化?
刘兴亮:即使最不乐观地估计,2010年网络游戏也将增长30%左右。其中,手机游戏力量进一步崛起,应用商店模式将改变手机游戏研发企业(CP)对SP渠道的严重依赖,手机游戏研发企业将成为电信运营商、通讯设备制造商、移动应用增值服务商(SP)及各种投资机构争相拉拢的对象。同时,手机游戏业将与当年PC游戏一样进一步向网游全面过渡。
领域4:电子商务 B2C将取代C2C成为主流
记者:电子商务今年的突破点在哪里?刘兴亮:电子商务经历了过去近十年的高速发展之后,正在逐步进入一个新的发展时期。这些年,中国电子商务的主流是C2C,这有点不正常。进入2010年之后,B2C模式将逐渐成为主流。除了京东、VANCL这些平台外,2010年更多的传统企业会纷纷“触网”,加入B2C行列。电子商务将引领整个互联网产业的发展。目前互联网行业迎来了第三股浪潮,将把互联网植入传统产业。当两者无缝对接后,会产生全新的商业模式,对企业的组织结构、经营模式都将带来巨大冲击。
领域5:企业级解决方案 舆情监测将越来越受企业重视
记者:你看好的企业级互联网解决方案,是不是指第三方提供的建站类服务?
刘兴亮:不光是这样。你可以看到,当越来越多的传统企业加入互联网大潮后,就迫切需要有专门的公司为他们量身定做一整套的互联网解决方案,可能会包括网站建设、SEO、舆情监测、电子商务等等。同时,互联网行业将越来越细分化,比如舆情监测等,即使互联网公司也需要,也越来越重视。
领域6:视频网站 以版权内容为主的网站大行其道
记者:视频网站去年以版权纠纷最为抢眼,是不是会由此导致今年市场格局的变化呢?
刘兴亮:目前看来,视频网站主要有两个派别,一个是以版权内容为主的主流资讯网站,代表选手是由NBC和新闻集团共同注册成立的Hulu;另一个派别就是以YouTube为代表的视频分享网站,强调原创性和自由分享。
前几年的中国网络视频市场上,视频分享网站发展得异常迅猛。但到了去年末,发展势头悄然出现了变化。随着网络视频国家队的进入,百度、网易等准备开始做以版权内容为主的视频网站,再加上搜狐、酷6等大规模删除了非版权内容,视频分享网站已经不再主流,开始走向衰落。
从受广告主青睐的程度来看,视频分享网站没法和主流视频资讯网站相比。美国市场就是一个典型的例子,后起步的Hulu已经盈利,先发展的YouTube却还在苦苦挣扎。我预测,2010年,HULU式视频网站将大行其道。(罗曙驰)
工作累了看看:美国联邦法律规定
1)不得与豪猪发生性关系。(靠,谁敢呀)
2)每周四晚6:00以后不得放P。(以后还真要小心了,别一不留神坐牢了还不知为啥)
3)任何人不得销售其子女。(好象中国也不许吧)
无论任何时候,将冰激淋卷放在口袋里是违法的。(有病丫的)
阿肯色州:
男性可以合法殴打其配偶,但每月最多一次。(估计很多东北的兄弟知道了一定想移民阿肯色了,可也有例外呀,克林顿就是阿肯色的前州长,咋老被喜莱莉扁呀)
亚利桑纳州:
任何房间中不得有两根以上的假阳具。(估计那州的最高法官丫是个变态狂!)
夏威夷州:
不得将谷物放在耳朵里。(神经病,以为偷太空种子呀)
肯塔基州:
1)任何年满18岁的男性,若与17岁以下的女性发生性关系,而且当时她又没穿鞋袜,那将课重罪。(兄弟们千万注意了呀!别全脱了)
2)圆周率在该州法定为4。(活活气死咱祖聪之前辈呀!)
爱荷华州:
1)男人如果给他的情人送一盒巧克力糖的话,那么这盒糖的重量绝不能低于50磅,否则情人有权上告
3)任何有胃病的男性不得在公共场所与女性接吻。(接吻和胃有关系吗?男性胃癌晚期患者的福音)
1)不得仅为娱乐而将球砸向他人脑袋。(谋杀可以不?真的脑子进水了)
2)10:00以后不得穿拖鞋。(光脚吧)
凡谋杀时不得穿防弹背心。(管得着吗,警察这么没自信!)
北卡州:
任何一位未婚男性与一为未婚女性,如果在任何旅馆或汽车旅馆登记为已婚,那么他们即算合法夫妻了。(想带小蜜开房的兄弟们千万别去那州呀!)
宾西法尼亚州:
不得在浴室唱歌。(难怪在宾大商学院的同胞都不会K歌)
加利福尼亚州:
仅在每周六,男性被允许在法院的门前台阶上合法殴打其配偶。(这是啥规定,郁闷ING)
犹他州:
1)不喝牛奶违法。(喝不完援助非洲难民呀,干么为难自己!难怪俺一只要喝牛奶就拉肚子的朋友从犹他转到纽约了,保命要紧呀。)
2)不得在正在执行急救任务的救护车后座上做爱。(这好理解,怕病人看见血管 爆裂么!哈哈)
让JAVA活起来—-很欣赏(JMF媒体框架)
Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节。JMF API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求。在这篇文章中,我将向你介绍如何用很少的代码就编写出多媒体程序。
Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单的例子向你展示如何利用该接口进行编程。
JMF目前的最新版本是2.1,Sun通过它向Java中引入处理多媒体的能力。下面是JMF所支持的功能的一个概述:
● 可以在Java Applet和应用程序中播放各种媒体文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件。
● 可以播放从互联网上下载的媒体流。
● 可以利用麦克风和摄像机一类的设备截取音频和视频,并保存成多媒体文件。
● 处理多媒体文件,转换文件格式。
● 向互联网上传音频和视频数据流。
● 在互联网上广播音频和视频数据。
JMF的结构
为了更好地说明JMF的结构,让我们用立体声音响做一个简单的比喻。当你CD机播放CD唱片的时候,CD唱片向系统提供音乐信号。这些数据是在录音棚中用麦克风和其他类似的设备记录下来的。CD播放机将音乐信号传送到系统的音箱上。在这个例子中,麦克风就是一个音频截取设备,CD唱片是数据源,而音箱是输出设备。
JMF的结构和立体声音响系统非常相似,在后面的文章中,你会遇到下面的这些术语:
● 数据源(Data source)
● 截取设备(Capture Device,包括视频和音频截取设备)
● 播放器(Player)
● 处理器(Processor)
● 数据格式(Format)
● 管理器(Manager)
下面让我们来看一看这些术语到底代表什么意思。
1.数据源
就像CD中保存了歌曲一样,数据源中包含了媒体数据流。在JMF中,DataSource对象就是数据源,它可以是一个多媒体文件,也可以是从互联网上下载的数据流。对于DataSource对象,一旦你确定了它的位置和类型,对象中就包含了多媒体的位置信息和能够播放该多媒体的软件信息。当创建了DataSource对象后,可以将它送入Player对象中,而Player对象不需要关心DataSource中的多媒体是如何获得的,以及格式是什么。
在某些情况下,你需要将多个数据源合并成一个数据源。例如当你在制作一段录像时,你需要将音频数据源和视频数据源合并在一起。JMF支持数据源合并,在后面的例子中我们将提到这一点。
2.截取设备
截取设备指的是可以截取到音频或视频数据的硬件,如麦克风、摄像机等。截取到的数据可以被送入Player对象中进行处理。
3.播放器
在JMF中对应播放器的接口是Player。Player对象将音频/视频数据流作为输入,然后将数据流输出到音箱或屏幕上,就像CD播放机读取CD唱片中的歌曲,然后将信号送到音箱上一样。Player对象有多种状态,JMF中定义了JMF的六种状态,在正常情况下Player对象需要经历每个状态,然后才能播放多媒体。下面是对这些状态的说明。
● Unrealized:在这种状态下,Player对象已经被实例化,但是并不知道它需要播放的多媒体的任何信息。
● Realizing:当调用realize()方法时,Player对象的状态从Unrealized转变为Realizing。在这种状态下,Player对象正在确定它需要占用哪些资源。
● Realized:在这种状态下Player对象已经确定了它需要哪些资源,并且也知道需要播放的多媒体的类型。
● Prefetching:当调用prefectch()方法时,Player对象的状态从Realized变为Prefetching。在该状态下的Player对象正在为播放多媒体做一些准备工作,其中包括加载多媒体数据,获得需要独占的资源等。这个过程被称为预取(Prefetch)。
● Prefetched:当Player对象完成了预取操作后就到达了该状态。
● Started:当调用start()方法后,Player对象就进入了该状态并播放多媒体。
4.处理器
处理器对应的接口是Processor,它一种播放器。在JMF API中,Processor接口继承了Player接口。 Processor对象除了支持支持Player对象支持的所有功能,还可以控制对于输入的多媒体数据流进行何种处理以及通过数据源向其他的Player对象或Processor对象输出数据。
除了在播放器中提到了六种状态外,Processor 对象还包括两种新的状态,这两种状态是在Unrealized状态之后,但是在Realizing状态之前。
● Configuring:当调用configure()方法后,Processor对象进入该状态。在该状态下,Processor对象连接到数据源并获取输入数据的格式信息。
● Configured:当完成数据源连接,获得输入数据格式的信息后,Processor对象就处于Configured状态。
5.数据格式
Format对象中保存了多媒体的格式信息。该对象中本身没有记录多媒体编码的相关信息,但是它保存了编码的名称。Format的子类包括AudioFormat和VideoFormat类,ViedeoFomat又有六个子类:H261Format、H263Format、IndexedColorFormat、JPEGFormat、RGBFormat和YUVFormat类。
6.管理器
JMF提供了下面四种管理器:
● Manager:Manager相当于两个类之间的接口。例如当你需要播放一个DataSource对象,你可以通过使用Manager对象创建一个Player对象来播放它。使用Manager对象可以创建Player、Processor、DataSource和DataSink对象。
● PackageManager:该管理器中保存了JMF类注册信息。
● CaptureDeviceManager:该管理器中保存了截取设备的注册信息。
● PlugInManager:该管理器中保存了JMF插件的注册信息。 创建一个Player对象
在JMF编程中,最常见的工作就是创建一个Player对象。你可以通过Manager类的createPlayer()方法创建Player对象。Manager对象使用多媒体的URL或MediaLocator对象来创建Player对象。当你获得了一个Player对象后,你可以通过调用getVisualComponent()方法得到Player对象的图像部件(Visual Component,在图像部件上可以播放多媒体的图像)。然后将图像部件加入到应用程序或Applet的界面上。Player对象还包含一个控制面板,在上面可以控制媒体的播放、停止和暂停等。
Player类中的很多方法只有在Player对象处于Realized的状态下才会被调用。为了保证Player对象已经到达了该状态,你需要使用Manager的createRealizePlayer()方法来获得Player对象。但是对于start()方法来说,你可以在Player对象到达Prefetched状态之前调用它,它可以自动将Player的状态转换到Started状态。
截取多媒体数据
多媒体数据的截取是JMF程序中另一个非常重要的功能。你可以按照下面的步骤截取数据:
● 通过查询CaptureDevieceManager获得你希望使用的截取设备。
● 获得设备对应的CaptureDeviceInfo对象。
● 从CaptureDeviecInfo对象中获得MediaLocator对象,然后用它创建一个DataSource对象。
● 使用DataSource对象创建Player对象或Processor对象。
● 调用start()方法,开始截取多媒体数据。
你可以使用CaptureDeviceManager对象获得系统中可用的视频和音频截取设备。通过调用getDeviceList()方法你可以获得设备的列表。每个设备都对应一个CaptrueDeviceInfo对象。也可以通过调用CaptureDevieceManager对象的getDevice()方法来获得特定的CaptureDeviceInfo对象。在使用设备截取多媒体数据前,还需要从CaptureDeviceInfo对象中获得设备对应的MediaLocator对象。然后你可以直接使用MediaLocator来构造Player或Processor的实例,也可以用MediaLocator构造一个DataSource对象,然后将DataSource对象送入Player或Processor对象中。最后调用start()方法来截取多媒体数据。
一个JMF例子
当你使用JMF进行编程以前,你需要安装JMF。同时在硬件上也有一些要求。由于本文的代码是在Windows 2000下编写和测试,因此文章中提到的操作系统需要的软件都是与Windows有关的。虽然Java是跨平台的,但是JMF是个例外――并不是所有的平台上都实现了JMF。
硬件和软件要求
硬件方面你需要与SoundBlaster兼容的声卡,芯片最好使用奔腾III以上的芯片。内存最好不小于64MB。同时你需要安装下面的软件:
● Windows95/98,Windows NT 4.0, Windows2000或 WindowsXP。
● JDK1.1.6或以上的Windows版本。
● JMF类和动态库
在Windows下安装JMF2.1
当下载了JMF2.1以后,运行jmf-2_1_1b-windows-i586.exe。该程序会将JMF2.1安装到你指定的目录下。当安装成功后,你需要确认一下安装程序正确设定了CLASSPATH和PATH环境变量。在CLASSPATH中需要包含jmf.jar和sound.jar;在PATH中需要包含JMF动态库的路径。
JMFRegistry
如果你希望使用视频和音频截取的设备,你需要确认安装了这些设备的驱动程序。除此之外,你还需要运行JMFRegistry应用程序。JMFRegistry可以向JMF注册新的数据源、媒体处理器、插件、视频和音频截取设备,然后你才能够在你的程序中使用它们。你只需要运行一次JMFRegistry就能注册系统中所有的视频和音频截取设备。
当你运行了JMFRegistry后,会弹出图一所示的窗口:
图一 通过JMFRegistry注册视频和音频截取设备
选择“Capture Devices”标签,然后按下“Detect Capture Devices”按钮,程序将自动检测出系统中的视频和音频截取设备。在左边的类表框中会列出所有检测到的设备的名称。在图一中我们看到JMFRegsitery发现了JavaSound audio capture、vfw:Logitech USB Video Camera:0和vfw:Microsoft WDM Image Capture (Win32):1。单击某个设备可以看到该设备支持的视频或音频格式。如果JMFRegistry无法检测到设备,有可能是没有正常安装设备的驱动程序。
例子程序
由于JMF2.1比较复杂,我不可能在在例子中包含JMF2.1支持的所有功能。因此我选择了下面几个在JMF中比较常用的功能:播放多媒体、注册音频和视频截取设备、截取视频和音频。
1.播放多媒体
在JMF.java中有一个play()方法。该方法可以播放用户选择的多媒体文件。当播放多媒体文件时,你需要一个Player对象。在例子中,dualPlayer就是Player接口的实现对象。
Player dualPlayer;
在Play()方法中,通过使用FileDialog获得媒体文件的路径和文件名,并保存在filename中。
try {
FileDialog fd =
new FileDialog(this, "Select File", FileDialog.LOAD);
fd.show();
String filename = fd.getDirectory() + fd.getFile();
...
}
catch (Exception e) {
System.out.println(e.toString());
}
然后你需要通过媒体管理器Manager间接创建一个Player对象。你可以使用Manager类的createPlayer()方法或者createProcessor()方法来获得一个Player对象或Processor对象。在play()方法中,我使用的是createPlayer()方法。
dualPlayer = Manager.createPlayer
(new MediaLocator("file:///" + filename));
有时你需要使用一个Player对象来控制多个其他的Player和Controller对象,我们把这个Player对象称为主对象,并把这些对象组成一个组。通过调用主对象中的start()、stop()、setMediaTime()等方法就可以激活组中所有成员的相应方法。主对象控制所有的状态变化和事件发布。然后使用addControllerListerner()方法来将一个ControllerListener对象绑定到Player对象上,Controller对象将向该ControllerListener对象发送事件消息。
dualPlayer.addControllerListener(this);
最后需要调用start()方法来启动Player对象。start()方法将Player对象的状态设置为Started。如果Player没有被实体化(Realize)或预取(Prefetch),start()方法会自动执行这些操作。
dualPlayer.start();
由于JMF类实现了ControllerLister接口,因此需要实现该接口中的controllerUpdate()方法,该方法在Controller对象产生一个事件时被调用。
public synchronized void controllerUpdate(ControllerEvent event) {
if (event instanceof RealizeCompleteEvent) {
Component comp;
if ((comp = dualPlayer.getVisualComponent()) != null)
add ("Center", comp);
if ((comp = dualPlayer.getControlPanelComponent()) != null)
add("South", comp);
validate();
}
}
当JMF类产生了一个RealizeCompleteEvent事件后,controllerUpdate()方法在界面上增加两个Component对象,一个用于播放媒体,一个用于放置控制按钮,例如播放、停止等。
在运行程序的过程中,程序会产生下面的输出。
Starting player ...javax.media.TransitionEvent
[source=com.sun.media.content.video.mpeg.Handler@71bb78,
previous=Unrealized,
current=Realizing,
target=Started]
Open log file: C:/test/Java/JMF/JMF/jmf.log
javax.media.DurationUpdateEvent
[source=com.sun.media.content.video.mpeg.Handler@71bb78,duration=
javax.media.Time@2a37a6
javax.media.RealizeCompleteEvent
[source=com.sun.media.content.video.mpeg.Handler@71bb78,
previous=Realizing,
current=Realized,
target=Started]
Adding visual component
Adding control panel
javax.media.TransitionEvent
[source=com.sun.media.content.video.mpeg.Handler@71bb78,
previous=Realized,
current=Prefetching,
target=Started]
javax.media.PrefetchCompleteEvent
[source=com.sun.media.content.video.mpeg.Handler@71bb78,
previous=Prefetching,
current=Prefetched,target=Started]
javax.media.StartEvent
[source=com.sun.media.content.video.mpeg.Handler@71bb78,
previous=Prefetched,
current=Started,
target=Started,
mediaTime=javax.media.Time@56a05e,timeBaseTime=
javax.media.Time@3a8602]
javax.media.EndOfMediaEvent
[source=com.sun.media.content.video.mpeg.Handler@71bb78,
previous=Started,
current=Prefetched,
target=Prefetched,
mediaTime=javax.media.Time@1d332b]
前面提到,当调用start()方法的时候,Player会切换到Started状态。从上面列出的信息中可以看到Player对象的状态从Unrealized变成了Started。当EndOfMedia事件被激活时(这时Player对象完成了媒体文件的播放),状态从Started变成了Prefetched。图二显示了程序正在播放多媒体文件时的情况。
图二 程序正在播放媒体文件
2.注册音频和视频截取设备
在例子中,注册音频和视频截取设备的方法只在程序的内部注册这些设备,在程序外则不起作用。该方法的作用是当用户的计算机上存在多和音频和视频截取设备时,告诉程序因该使用哪个设备和这些设备支持的音频和视频格式。因此在进行截取处理之前需要获得设备的配置信息。在例子中,当在Configure菜单上按下Capture Device命令后,会弹出CaptureDeviceDialog对话框。如果在截取音频或视频前没有设定设备的配置,也会弹出该对话框。图三显示了该对话框。
图三 设备注册对话框
让我们来看一下CaptureDeviceDialog类中的init()方法:在初始化了界面之后,通过调用CaptureDeviceManager类的getDeviceList()方法:
devices = CaptureDeviceManager.getDeviceList ( null );
CaptureDeviceManager类使用查询机制和一个注册表来定位设备,然后将设备的信息放入CaptureDeviceInfo对象中返回。我们还可以利用CaptureDeviceManager类来注册新的设备。通过调用getDeviceList()方法程序获取了一个支持指定格式的设备的列表。在例子中,我将格式参数设定为null,这意味着设备可以使用任何格式。返回值被放入device变量中。如果getDeviceList()方法返回的是一个非空值,程序会将包含在其中的音频设备名称和视频设备名称分别放入两个下拉列表中中,但是到目前为止我们还不知道哪些设备是音频设备,哪些是视频设备。
我们可以通过CaptureDeviceInfo的getFormat()方法获得Format对象组数,在Format对象中保存了设备支持的媒体格式。Format类间接被AudioFormat和VideoFormat类所继承。因此我们可以利用设备支持的格式类型来区分设备的类型:
if (devices!=null && devices.size()>0) {
int deviceCount = devices.size();
audioDevices = new Vector();
videoDevices = new Vector();
Format[] formats;
for ( int i = 0; i < deviceCount; i++ ) {
cdi = (CaptureDeviceInfo) devices.elementAt ( i );
formats = cdi.getFormats();
for ( int j=0; j<formats.length; j++ ) {
if ( formats[j] instanceof AudioFormat ) {
audioDevices.addElement(cdi);
break;
}
else if (formats[j] instanceof VideoFormat ) {
videoDevices.addElement(cdi);
break;
}
}
}
. . .
}
上面的程序运行后,audioDevices()中将包含所有的音频设备,videoDevices()中将保存所有的视频设备。其中cdi是CaptureDeviceInfo对象。然后将设备名称填入下拉列表中:
// 将音频设备显示在下拉列表中
for (int i=0; i<audioDevices.size(); i++) {
cdi = (CaptureDeviceInfo) audioDevices.elementAt(i);
audioDeviceCombo.addItem(cdi.getName());
}
// 将视频设备显示在下拉列表中
for (int i=0; i<videoDevices.size(); i++) {
cdi = (CaptureDeviceInfo) videoDevices.elementAt(i);
videoDeviceCombo.addItem(cdi.getName());
}
然后程序显示出当前选中的设备支持的格式:
displayAudioFormats();
displayVideoFormats();
下一步需要获取用户选中的音频设备和视频设备以及它们支持的格式,相关的方法是JMF类中的getAudioDevice()、getVideoDevice()、getAudioFormat()和getVideoFormat()方法。然后将获取的对象分别保存到audioCDI,videoCDI,audioFormat和videoFormat中:
audioCDI = cdDialog.getAudioDevice();
if (audioCDI!=null) {
audioDeviceName = audioCDI.getName();
System.out.println("Audio Device Name: " + audioDeviceName);
}
videoCDI = cdDialog.getVideoDevice();
if (videoCDI!=null) {
videoDeviceName = videoCDI.getName();
System.out.println("Video Device Name: " + videoDeviceName);
}
// 获得选中的多媒体格式
videoFormat = cdDialog.getVideoFormat();
audioFormat = cdDialog.getAudioFormat();
3.截取视频和音频
使用capture()方法可以截取音频和视频数据。但是在使用该方法前需要确定是否已经选中了视频和音频截取设备:
if (audioCDI==null && videoCDI==null)
registerDevices();
和play()方法类似,可以通过使用Manger类中的静态方法createPlayer()创建一个Player对象,该对象可以播放一个DataSource对象中的数据流。
Player createPlayer(MediaLocator sourceLocator)
在例子中,我首先通过调用audioCDI和videoCDI的getLocator()方法来获得MediaLocator对象,然后利用Manager类的createPlayer()方法创建Player对象。最后将一个ControllerListener对象绑定到视频Player对象上并开始播放。
videoPlayer = Manager.createPlayer(videoCDI.getLocator());
audioPlayer = Manager.createPlayer(audioCDI.getLocator());
videoPlayer.addControllerListener(this);
videoPlayer.start();
audioPlayer.start();
使用这种方法导致最后获得了两个Player对象。我们也可以使用Manager类中的createDataSource()方法从视频和音频CaptureDeviceInfo对象(audioCID和videoCDI)中获得视频和音频数据源(DataSource对象),然后调用createMergingDataSource()方法将两个数据源合并成一个数据源(ds):
DataSource[] dataSources = new DataSource[2];
dataSources[0] =
Manager.createDataSource(audioCDI.getLocator());
dataSources[1] =
Manager.createDataSource(videoCDI.getLocator());
DataSource ds = Manager.createMergingDataSource(dataSources);
然后可以使用ds作为createPlayer()方法的参数来获得一个Player对象dualPlayer。调用addControllerListener()就可以进行播放了。
dualPlayer = Manager.createPlayer(ds);
dualPlayer.addControllerListener(this);
dualPlayer.start();
小结
Java多媒体框架是一个很好的多媒体编程工具。在这篇文章中我只是简单介绍了JMF的一些基本功能。如果有兴趣的话可以仔细阅读一下Sun公司的Java网站上提供的JMStudio的例子。在JMStudio中不仅实现了简单的播放和视频/音频截取功能,还实现了从互联网下载和向互联网上传多媒体数据流的功能。而且它还包含了JMFRegistry的源代码,将相应的代码移植到你的应用程序中后,你就不需要在运行程序前运行JMFRegistry来向JMF注册设备了。
作者简介:冯睿,2000年毕业于美国Northern Illinois大学电气工程系,获硕士学位。随后在New Monics软件公司工作了一年,其间参加了Java虚拟机的开发和优化工作。目前在国内一家GIS公司担任项目经理,主要从事应急指挥系统的交通GIS系统的开发
国内专业垂直搜索引擎汇总
我先抛个砖,列举一下我所知道的国内垂直搜索引擎,大家也来补充一下你知道的吧。
工作搜索引擎:
http://jobui.com 职友集
http://so.01hr.com 职通车
http://www.globehr.com 搜职网
分类信息搜索引擎:
http://yooye.com 优越搜索
http://www.guton.com 国通网
http://www.kooxoo.com 酷讯
http://www.pagou.com 爬狗
http://www.sojz.cn/ 焦作
房屋垂直搜索引擎:
http://www.yougedi.com 有个地
http://www.21home.cn/ 21世纪房产
商业搜索引擎:
http://www.shangsou.com/ 商搜
http://china.eceel.com/ Eceel
成人用品搜索引擎
性搜 http://www.Sinsoo.com
论坛社区搜索引擎
http://www.qihoo.com 奇虎
http://www.daqi.com 大旗
购物搜索引擎:
http://www.skyyaya.com 丫丫的购物搜索
http://www.sobigo.com 搜比购
评论搜索:
http://www.souping.com/ 搜评网
餐饮搜索:
http://gudumami.cn/ 咕嘟妈咪
公交线路搜索:
http://zuoche.com 坐车网
Blog搜索引擎:
http://www.souyo.com/ Souyo
oao.cn 中客blog搜索
http://www.feedsearch.net/ Blog中文搜索
http://www.booso.com/ 博搜,搜索老百姓自己的故事
http://www.qisobaso.com/blog.html 七搜八搜
http://www.feedss.com/ Feedss
购物搜索引擎:
搜比购 http://www.sobigo.com
游戏商品搜索引擎
金聚网 http://www.jj160.com
玩网游的可能会比较喜欢,呵呵
http://www.jj160.com
托托找工作网
http://www.totojob.com
无线搜索论坛
http://www.jeffer.cn
中文游戏搜索
http://game.souyo.com/
中文博客搜索
http://souyo.com/
数据挖掘引擎(软件)
http://www.digdig.com.cn/
就要软件搜索
http://www.chaoji.com/index.html
视频搜索
http://www.openv.tv/index.html

