magic 发布的文章

DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架. 设计目标是简单实用,快速开发,降低ajax开发成本。 欢迎大家提出建议,我们将在下一版本中进一步调整和完善功能.共同推进国内整体ajax开发水平。 在线演示地...

最近更新: 发布于 2 年 前

jQuery 是一个非常优秀的 JavaScript 框架,而且还有相当多的插件。其中的一些UI插件也相当的给力,比如 Ninja UI,是一款界面插件,使用它将能给你的项目增色不少。此插件包含有幻灯,智能提示等常见的效果。 目前的文档还不是很全,但是官方提供的例子已...

和 jQuery UI 一样,Chico UI 包含 auto-complete, blink, carousel, countdown, date-

picker, dropdown, expand, calendar 等诸多逐渐,同时还提供一个 CSS 布局框架,用于实现网页布局和表格。...

PrimeUI 是 PrimeFaces 团队的一个 jQuery UI 组件库,目前包含多个 UI 部件。

最近更新: 发布于 7 个月 前

基于Jquery的UI库,包含常用UI组件,如:布局、表格、树形、Tabs、工具条、弹出菜单、表单等等。 采用Html5 +

CSS3编写,可以支持常用的浏览器,如:Chrome、FireFox7+、Safari 5+和IE 9+等。

jQueryUI 是一套 jQuery 的页面 UI 插件,包含很多种常用的页面空间,例如 Tabs(如本站首页右上角部分) 、拉帘效果(本站首页左上角)、对话框、拖放效果、日期选择、颜色选择、数据排序、窗体大小调整等等非常多的内容。 下面是一些 jQuery UI 的效果图...

最近更新: 发布于 1 周 前

jQuery Tools 是一个当前网站开发中最最常用的UI组件集合,包括:Tab、工具提示ToolTip、窗口滚动、Overlap、Expose和Flash嵌入,jQuery Tools 只有 5.8k 大小(强烈推荐)。 下图是一个跳格控制的截图 上面效果实现的代码:

最近更新: 发布于 4 年 前

jQuery easyui 为网页开发提供了一堆的常用UI组件,包括菜单、对话框、布局、窗帘、表格、表单等等逐渐, 下图是一个具有布局效果的窗口:

最近更新: 发布于 3 个月 前

LigerUI是基于jQuery开发的一系列控件组,包括表单、布局、表格等等常用UI控件 使用LigerUI可以快速创建风格统一的界面效果

最近更新: 发布于 2 个月 前

jQuery MiniUI - 快速开发WebUI。
包含控件:DataGrid、Tree、TreeGrid、Menu、Toolbar、Tabs、Layout、Panel、DatePicker、ComboBox、TreeSelect、TextBoxList等。

典型应用:页面布局、CRUD、Master/Detail、数据验证等。 技术亮点: 快速开发:使用Htm...

最近更新: 发布于 3 年 前

JQuery Smart
UI是基于JQuery的Ajax开发框架,实现前、后台分离、功能和数据分离,UI层全部使用htm+js+json完成,通过一个统一数据接口与服务端进行数据交换。

主要有三部分组成: 一套日常应用的JQuery插件(类似JQuery UI,JQuery EasyUI),核心基...

这是一个模仿ExtJS区域布局(Border Layout)实现的jQuery

UI页面布局管理器。简单易于使用,东南西北中5个区域可以嵌套使用,外观可以通过CSS控制。

Wijmo是用于创建桌面及移动Web应用程序的HTML5前端控件集。从交互式图表到强大的表格控件,Wijmo包含了用户所需要的一切。Wijmo建立在标准的JavaScript库基础上,就像jQuery

UI和jQuery Mobile一样。此外,Wijmo还集成了多个框架,包括Knockout、AngularJS...

UIKit 是一个小型的、灵活的 JavaScript 的 UI 框架,压缩后只有 4K

大小。提供的UI组件包括:对话框、确认、颜色选择、翻转卡、上下文菜单以及提醒框等等。

很抱歉,ANGELA UI已很长时间没有更新,这段时间我都比较忙,而且当初只是兴趣写一下,可能让很多关注它的同行失望。
现在带给大家一个好消息,这个UI将重写,将改为以类的形式实现,css改为less的形式,js改用coffee来写,敬请期待~。

基于jQuery的UI,最新...

几个 jquery 常用 ui 组件 弹出框:dialog 支持ajax内容,iframe,指定html代码 警告框:alert 页面提示:msg

拖动支持:drag 位置固定:使ie 6 也支持 position:fixed 属性 选项卡切换:tab...

jqxWidgets 是一个复杂的、创新的 UI 部件库,基于 jQuery 开发,可让用户开发非常专业的、跨浏览器支持的 Web应用,主要特点:
Feature complete widgets for jQuery Rich functionality and great performance.

Search-engine friendly. Quick to downl...

XB 软件公司最近发布了JavaScript UI 库Webix ,其中包含的组件超过45个,用这些组件可以构建跟HTML5 和 CSS3
兼容的程序,这些程序不仅能在个人电脑上运行,还能用在iOS、 Android 和 Blackberry 设备上运行。它能访问离线web存储、地理位置(

geolocatio...

最近更新: 发布于 1 个月 前

minjs 是一组轻量级的 jQuery 组件,提供多种 Web 常用组件,包括表单、表格、日历等,其中迷你表单帮助你使用 HTML5

表单增强,尽管浏览器不一定支持也可以使用。

Interface是一个丰富的界面组件的集合,其利用轻量级JavaScript库jQuery。有了这个组件,您可以建立富客户端应用。
Interface拥有MIT和GTL两个协议,基本上意味着您可以在用在商业和非商业。 只要您保持interface每个文件的版本。 示例代码

window.onload ...

一 数字辅助表
数字辅助表是一个只包含从1到N的N个整数的简单表,N通常很大。数字辅助表是一个非常强大的工具,所以我们创建一个持久的数字辅助表:



CREATE TABLE Nums(
a INT UNSIGNED NOT NULL PRIMARY KRY
)ENGINE=InnoDB;

CREATEPRODURE  CreateNums(t  INT  UNSIGNED)
BEGIN
DECLARE  s  INT  UNSIGNEDDEFAULT1;
TRUNCATETABLENums;
INSERTINTONumsSELECTs;
WHILE  s*2<=t  DO
BEGIN
INSERTINTONumsSELECTa+sFROMNums;
SETs=s*2
END;
ENDWHILE;
END;

二 连续范围



CREATETABLEt(a  INT UNSIGNEDNOTNULLPRIMARYKEY);
INSERTINTOtVALUES(1);
INSERTINTOtVALUES(2);
INSERTINTOtVALUES(3);
INSERTINTOtVALUES(100);
INSERTINTOtVALUES(101);
INSERTINTOtVALUES(103);
INSERTINTOtVALUES(104);
INSERTINTOtVALUES(105);

如何得到下面的输出结果呢?
28841896_1417152253253A.png



SELECTMIN(a)start,MAX(a)endFROM(
SELECTa,rn,a-rnASdiff
FROM(SELECTa,@a:=@a+1  rnFROMt,(SELECT@a:=0)ASa)
ASb
)ASc
GROUPBYdiff;

三 最小缺失值

点击(此处)折叠或打开



CREATE  TABLE x(
aINTUNSIGNED  PRIMARY KEY,
b  CHAR(1)NOTNULL
)ENGINE=InnoDB;

INSERTINTOx SELECT 3,'a';
INSERTINTOx SELECT 4,'b';
INSERTINTOx SELECT 6,'c';
INSERTINTOx SELECT 7,'d';

注意a列必须是一个正整数,所以这里的类型为INT UNSGINED。最小缺失值的问题是,假设列a从1开始,对于当前表中的数据3、4、6、7,查询应返回1。
如果当前表的数据为1、2、3、4、6、7,则返回5。
解决方案如下:



SELECT
CASE
WHENNOTEXISTS(SELECTaFROMxWHEREa=1)THEN1
ELSE
(SELECTMIN(a)+1ASmissing
FROMxASA
WHERENOTEXISTS
(SELECT*FROMxASB
WHEREA.a+1=B.a))
ENDASmissing;

运行上面的SQL,得到结果为1,若向a列插入1,2后得到的结果为5。
若要对最小缺失值进行补缺操作,解决方案如下:



INSERTINTOx
SELECT
CASE
WHENNOTEXISTS(SELECTaFROMxWHEREa=1)THEN1
ELSE
(SELECTMIN(a)+1ASmissing
FROMxASA
WHERENOTEXISTS
(SELECT*FROMxASB
WHEREA.a+1=B.a))ENDASmissing,'p';

运行上面的SQL,我们将会在a列插入5,b列插入'p'。

四 获取行号
行号是指按顺序为查询结果集的行分配的连续整数。



CREATETABLEsales(
empidvarchar(10)NOTNULL,
mgridvarchar(10)NOTNULL,
qty` int(11)NOTNULL,
PRIMARYKEY(empid)
);

INSERINTOsalsesVALUES('A',Z',300);
INSER INTO salses VALUES('B',X',100);
INSERINTOsalsesVALUES('C',Y',100);
INSER INTO salses VALUES('D',Z',300);
INSERINTOsalsesVALUES('E',X',200);
INSER INTO salses VALUES('F',Z',100);

现在我们根据empid进行行号统计



SELECTempid,
(SELECTCOUNT(*)FROMsalesAST2
WHERET2.empid<=T1.empid)ASrownum
FROMsalesAST1;

但是上面这句SQL效率不是最理想的,在Mysql数据库中得到行号最快的解决方案是采用CROSS JOIN。

中文分词一直都是中文自然语言处理领域的基础研究,也是中文搜索引擎的核心模块之一。目前而言的分词系统绝大多数都是基于中文词典的匹配算法,其中,最为常见的是最大匹配算法
(Maximum Matching,以下简称MM算法)
,而MM算法有三种:一种正向最大匹配、一种逆向最大匹配和双向匹配。本文以正向最大匹配算法为例介绍其基本思想和实现。
一、基本思想
(1)假设词典中最长的词语字数为w(一般设置为8个字符,即4个汉字)。
(2)判断带分词语句长度是否大于w个字,如果大于w则跳到(3),如果小于w则跳到(6)。
(3)取待分词语句的前w个字。
(4)在词典中查找w,如果存在,则从语句中去掉w,从语句中w后的词开始重复上面过程。
(5)如果不存在,就去掉这w个字的最后一个字。
(6)检查是否是单字或者空,如果是,则退出。
(7)如果不是,则继续判断词库中是否存在这个词,如此反复循环,直到输出一个词。
(8)继续取短语的前w个字反复循环,这样就可以将一个语句分成词语的组合了。

二、简单实现

include

include

include

using namespace std;
set g_setWordDictionary;

int construct()
{
g_setWordDictionary.insert("中国");
g_setWordDictionary.insert("中国人");
g_setWordDictionary.insert("纽约");
g_setWordDictionary.insert("北京");
}

bool match(string &word)
{
set::iterator itor = g_setWordDictionary.find(word);
if (itor == g_setWordDictionary.end())
{
return false;
}

return true;
}

void forward_maximum_matching(string content, set &keywords)
{

define MAX_LEN 12 //词库中最长词语(utf-8一个汉字3个字节)

define MIN_LEN 3 //单字(原理同上)

int len = content.length();
int right_len = len;
int start_pos = 0;
bool ret = false;
string kw_value = "";
int kw_len = 0;
int kw_pos = 0;
//单字或空串
while (right_len > MIN_LEN)
{
//语句大于词库中最长词语
if (right_len >= MAX_LEN)
{
kw_value = content.substr(start_pos, MAX_LEN);
}
//语句小于词库中最长词语
else
{
kw_value = content.substr(start_pos, right_len);
}

//词库匹配
ret = match(kw_value);
kw_len = kw_value.length();
kw_pos = 0;
while (!ret && kw_len > 2*MIN_LEN)
{
//去掉候选词右边一个汉字
kw_len -= MIN_LEN;
kw_value = kw_value.substr(kw_pos, kw_len);
//继续匹配
ret = match(kw_value);
}

//匹配到词
if (ret)
{
keywords.insert(kw_value);
//从语句中去掉匹配到的词
start_pos += kw_len;
right_len = len - start_pos;
}
//未匹配到词,下移一个字
else
{
start_pos += MIN_LEN;
right_len = len - start_pos;
}
}//while (right_len > MIN_LEN)
}

int main()
{
//构造词库
construct();

//切分词库
string content = "我是中国人,我是来自中国北京的中国人,在纽约工作";
set keywords;
forward_maximum_matching(content, keywords);
set::iterator itor;

//输出分词
for (itor=keywords.begin(); itor!=keywords.end(); ++itor)
{
printf("result: %s\n", (*itor).c_str());
}

return 0;
}

相同之处

RequireJS 和 Sea.js 都是模块加载器,倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然。

不同之处

两者的主要区别如下:

  1. 定位有差异 。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。
  2. 遵循的规范不同 。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。
  3. 推广理念有差异 。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
  4. 对开发调试的支持有差异 。Sea.js 非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。RequireJS 无这方面的明显支持。
  5. 插件机制不同 。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。

还有不少差异,涉及具体使用方式和源码实现,欢迎有兴趣者研究并发表看法。

总之,如果说 RequireJS 是 Prototype 类库的话,则 Sea.js 致力于成为 jQuery 类库。

最重要的

最后,向 RequireJS 致敬!RequireJS 和 Sea.js 是好兄弟,一起努力推广模块化开发思想,这才是最重要的。

更新

  • 2013.06.30 推荐一篇图片并茂的文章:

参考

    • 从 RequireJS 到 Sea.js 系列: (要翻墙)
  • (要翻墙)

CMD 规范在这里:

AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
类似的还有 CommonJS Modules/2.0 规范,是 BravoJS 在推广过程中对模块定义的规范化产出。
还有不少??

这些规范的目的都是为了 JavaScript 的模块化开发,特别是在浏览器端的。
目前这些规范的实现都能达成浏览器端模块化开发的目的

区别:

1. 对于依赖的模块,AMD 是提前执行 ,CMD 是延迟执行

不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。

CMD 推崇 as lazy as possible.

2. CMD 推崇依赖就近 ,AMD 推崇依赖前置 。看代码:

// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此处略去 100 行
var b = require('./b') // 依赖可以就近书写
b.doSomething()
// ...
})

// AMD 默认推荐的是
define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
a.doSomething()
// 此处略去 100 行
b.doSomething()
...
})

虽然 AMD 也支持 CMD 的写法,同时还支持将 require 作为依赖项传递,但 RequireJS
的作者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。

3. AMD 的 API 默认是一个当多个用 ,CMD 的 API 严格区分,推崇职责单一 。比如 AMD 里,require 分全局
require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use
来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹

4. 还有一些细节差异,具体看这个规范的定义就好,就不多说了。