- CommonJS调研
-
CommonJS是什么
CommonJS是一个标准库,或者说是一组规范。因为官方并没有给出真正的代码实现,而是给出一些代码组织规范、常用模块的api、包(Package)的命名规范和具体格式。
CommonJS的官方网站是http://www.commonjs.org/
wiki地址http://wiki.commonjs.org/wiki/CommonJSModules
模块的规范,其实就是require方法,定义了如何在当前的代码中使用已有的api。具体的规范(Modules/1.1.1)见http://wiki.commonjs.org/wiki/Modules/1.1.1
约定
Require
require是一个函数,接受一个外部模块名称的参数
- 该方法返回对应外部模块返回的api
- 如果引入外部模块出错,需要抛出异常
- require函数可能有一个
main属性,只读 - require函数可能有一个
paths属性,一个字符串数组,定义了查找引入模块的优先级。
模块上下文
- 一个模块中,有一个变量
require - 一个模块中,有一个对象
exports,包含这个模块对外的api - 一个模块中,还必须有一个变量
module,是一个对象,可能包含id和uri属性。
- 一个模块中,有一个变量
模块名
- 模块名是由斜杠连接的1个或多个
term组成的字符串 term必须驼峰命名,也可能是...- 模块名可以没有后缀名
.js - 模块名可以是相对路径或默认"顶级"的,如果是相对路径必须在前面加上'.'或'..'
- 模块名是由斜杠连接的1个或多个
使用示例
math.js
exports.add = function() { var sum = 0, i = 0, args = arguments, l = args.length; while (i < l) { sum += args[i++]; } return sum; };increment.js
var add = require('math').add; exports.increment = function(val) { return add(val, 1); };program.js
var inc = require('increment').increment; var a = 1; inc(a); // 2 module.id == "program";实现
- 一般由底层框架实现require方法,当然js也可以实现,但对于模块中缺少var而生成的全局变量就不好处理了。
- 使用exports而不用this来返回api,一方面this需要根据上下文才能知道具体指什么,而exports则更好理解些。
下面贴一个asp实现的require方法:
//by wifeng.cn //2011/9/15 15:47 //只是实现了“顶级”模块加载,相对的并没有处理 (function(){ var loaded = {}; var global = global || {}; require = function(name){ var fso = require.fso || (require.fso = new ActiveXObject('Scripting.FileSystemObject')); var path, paths = require.paths, found = false; for(var i=0; i<paths.length; i++){ path = Server.MapPath(paths[i] + '/' + name + '.js'); if(fso.FileExists(path)){ found = true; break; } } if(!found){ error('module not found'); } if(path in loaded){ return loaded[path]; } loaded[path] = {}; var content = fso.OpenTextFile(path, 1).ReadAll(); var fn = new Function('require', 'exports', content); try{ fn.call(global, require, loaded[path]); }catch(e){ error('runtime error.', e); } return loaded[path]; function error(msg, ex){ throw new Error(msg); }; }; require.paths = ['bin/lib', '.']; require.loaded = loaded; })()推荐一个比较完善的asp方法:https://github.com/smith/commonjscript/blob/master/require.js
已有的解决方案
其中大部分项目都按照CommonJS规范实现了require方法: http://wiki.commonjs.org/wiki/CommonJS
- Ubuntu将窗口按钮位置改成右侧
-
修改方法
打开控制台,输入
gconf-editor打开配置编辑,修改apps/metacity/general/的button-layout值为menu:minimize,maximize,close保存立即生效。
- 令人震惊的asp js框架
-
从今年初开始,我就开始酝酿做一个传统的asp js编程框架。我是个web前端开发人员,擅长javascript开发。而在服务端,除了nodeJS外(支持nodeJS的主机少而贵),比较靠谱的js服务端貌似就只有asp了。
尽管优秀的php框架百花齐放,仍提不起我的兴趣,总感觉php是一个大杂烩,食之无味。国内的asp主机便宜,且遍地都是。于是自己写的asp js框架也终于有了基本的框架。项目地址:f-asp-javascript
今天在github上闲逛,发了一个aspjs项目,相见恨晚。代码很有条理,优雅的代码,丰富的类库。令人惊讶!大致浏览完主要代码后,真觉得自己完全是在重复造轮子。。。
顺便说一下,该项目附带了nodejs,可以直接在windows下跑哦~
贴一下Readme的框架特色:
- Clean Code Separation
- Module System similar to CommonJS
- Request Routing (Sinatra-style)
- Rich Templating Engine (based on normal-template from Nitro)
- Powerful Model layer with validation and relationships (based on ActiveRecord)
- Event Binding
- Persistent Session layer with namespacing and expiry options
- Server-Side HTML Parsing, including DOM, Sizzle and jQuery
- Helper functions for:
- JSON
- date parsing/manipulating/formatting
- sending email
- binary data
- charset conversion
- WP7开发记录
-
我的手机(htc mozart)浏览器网页点返回键,每次都会震一下,弄得我心情很是不好,目前也没有顺手的浏览器可用。于是自己动手,做了个简单的浏览器。
原理比较简单,就是使用了WebBroswer这个控件,加上不会震动的返回按钮。。
记录下一些技术点:
显示隐藏控件
control.Visibility = Visibility.Collapsed; //隐藏 control.Visibility = Visibility.Visible; //显示启用Javascript
WebBroswer默认不执行Javascript,需要手动开启:
control.IsScriptEnabled = true;控件排列顺序
<StackPanel Orientation="Vertical"></StackPanel> 横排 <StackPanel Orientation="Horizontal"></StackPanel> 竖排读取XAP中资源文件
//当文件为Resource类型时,可通过App.GetResourceStream方法取得文件流。 //当文件为Content类型时,可通过Microsoft.Xna.Framework中的TitleContainer.OpenStream方法获得文件流。 App.GetResourceStream(new Uri("Resources/logo.jpg", UriKind.Relative); StreamReader reader = new StreamReader(TitleContainer.OpenStream("html/demo.html"));
- windows环境硬盘安装ubuntu
-
准备工作
机器:thinkpad x200 无光驱,无法使用光盘直接安装 已安装系统:windows7 下载ubuntu镜像:ubuntu-11.04-desktop-amd64.iso 拷贝到C盘根目录 从镜像中提取vmlinuz initrd.lz文件到C盘根目录(用于引导镜像安装) 下载grub,将grldr grldr.mbr grub.exe拷贝到C盘根目录(用于引导启动)为grub创建文件:
C:/menu.lst
title Windows 7 find --set-root /bootmgr chainloader /bootmgr boot title Install Ubuntu find --set-root /vmlinuz kernel /vmlinuz boot=casper iso-scan/filename=/ubuntu-11.04-desktop-amd64.iso ro quiet splash locale=zh_CN.UTF-8 initrd /initrd.lzC:/boot.ini
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows" /noexecute=optin /fastdetect c:\grldr.mbr="grub"安装
重启windows,选择grub,选择Install Ubuntu,进入ubuntu live cd桌面,
Ctrl-Alt-T打开终端,输入sudo umount -l /isodevice卸载光驱盘,点击桌面上安装按钮,选择ubuntu windows共存方式安装,进行分区等操作,继续完成安装向导。扫尾
重启系统,进入windows,删除C盘下增加的文件。
