Monday, February 14, 2011

javascript

JavaScript 被设计用来向 HTML 页面添加交互行为。
通常被直接嵌入 HTML 页面, 是一种解释性语言.

HTML 的 <script> 标签用于把 JavaScript 插入 HTML 页面当中。
document.write 字段是标准的 JavaScript 命令,用来向页面写入输出。

<html>
<body>
<script type="text/javascript">
document.write("Hello World!");
</script>
</body>
</html>

可以通过src属性进行外部js文件调用
<script src="xxx.js">....</script>

当页面载入时,会自动执行位于 body 部分的 JavaScript。
当被显式调用时,位于 head 部分的 JavaScript 才会被执行。
将脚本编写为函数,在<head>中定义。

创建函数的语法:
function 函数名(var1,var2,...,varX)
{
代码...
}

Try...Catch 语句

try...catch 可以测试代码中的错误。try 部分包含需要运行的代码,而 catch 部分包含错误发生时运行的代码。
语法:
try
{
//在此运行代码
}
catch(err)
{
//在此处理错误
}
throw 声明的作用是创建 exception(异常)。你可以把这个声明与 try...catch 声明配合使用,以达到控制程序流并产生精确错误消息的目的

只要页面中出现脚本错误,就会产生 onerror 事件。

如果需要利用 onerror 事件,就必须创建一个处理错误的函数。你可以把这个函数叫作 onerror 事件处理器 (onerror event handler)。这个事件处理器使用三个参数来调用:msg(错误消息)、url(发生错误的页面的 url)、line(发生错误的代码行)。
语法:
onerror=handleErrfunction handleErr(msg,url,l)
{
//Handle the error here
return true or false
}

RegExp 对象用于规定在文本中检索的内容。
RegExp 对象有 3 个方法:test()、exec() 以及 compile()。
test() 方法检索字符串中的指定值。返回值是 true 或 false。
exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
compile() 既可以改变检索模式,也可以添加或删除第二个参数。

浏览器检测
javaScript 包含一个名为 Navigator 的对象,能够对访问者的浏览器类型及版本进行检测
var browser=navigator.appName
var b_version=navigator.appVersion

JavaScript 拥有若干内置的对象,比如 String、Date、Array 等等。除了这些对象,你还可以创建自己的对象Object()。
//创建一个对象的实例
personObj=new Object()
personObj.firstname="John"
//创建一个对象的模板& 使用模板创建对象实例: this 指向当前对象
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname
this.lastname=lastname
this.age=age
this.eyecolor=eyecolor
this.newlastname=newlastname
}
需要对对象的函数进行实际编写,e.g.:
function newlastname(new_lastname)
{
this.lastname=new_lastname
}


myFather=new person("John","Doe",50,"blue")
myMother.newlastname("Doe")。

Sunday, February 13, 2011

ajax & json

AJAX技术是由Jesse James Garrett于2005年2月在一篇文章中提出来,是Asynchronous JavaScript XML(异步JavaScript 和XML)的简称,Ajax提供与服务器异步通信的能力,一个最简单的应用是无需刷新整个页面而在网页中更新一部分数据。

设计的初衷是用传统的Web技术也能达到FLASH的效果。后来我在实践中发现,可以把JavaScript 和 XML 这两种传统的Web技术让来实现。

Google应该是AJAX最主要推动者,Google Map、Gmail都在应用AJAX,但是对Google最主要业务搜索来说,AJAX的支持并不好,因为搜索引擎主要是抓取静态的网页,而无法抓取态的AJAX技术。


Ajax包括:
XHTML和CSS
使用DOM(DocumentObjectModel,i.e.文档对象模型)作动态显示和交互
使用XML和XSLT做数据交互和操作
使用XMLHttpRequest进行异步数据接收
使用JavaScript将它们绑定在一起

一个Ajax交互从一个称为XMLHttpRequest的JavaScript对象开始。如同名字所暗示的,它允许一个客户端脚本来执行HTTP请求,并且将会解析一个XML格式的服务器响应。Ajax处理过程中的第一步是创建一个XMLHttpRequest实例。使用HTTP方法(GET或POST)来处理请求,并将目标URL设置到XMLHttpRequest对象上
在JavaWeb服务器上,到达的请求与任何其它HttpServletRequest一样。在解析请求参数后,servlet执行必需的应用逻辑,将响应序列化到XML中,并将它写回HttpServletResponse

JavaScript 代码完成非常基本的任务:
## 从 Web 表单中获取需要的数据。JavaScript 代码很容易从 HTML 表单中抽取数据并发送到服务器。
## 修改表单上的数据:更新表单也很简单,从设置字段值到迅速替换图像。
## 建立要连接的 URL; 打开到服务器的连接。
## 设置服务器在完成后要运行的函数。
## 发送请求。

XMLHttpRequest 几个方法和属性。
open():建立到服务器的新请求。
该方法有五个参数:
request-type:发送请求的类型。典型的值是 GET 或 POST,但也可以发送 HEAD 请求。
url:要连接的 URL。
asynch:如果希望使用异步连接则为 true,否则为 false。该参数是可选的,默认为 true。
username:如果需要身份验证,则可以在此指定用户名。该可选参数没有默认值。
password:如果需要身份验证,则可以在此指定口令。该可选参数没有默认值。

通常使用其中的前三个参数

send():向服务器发送请求。
abort():退出当前请求。
readyState:提供当前 HTML 的就绪状态。 onreadystatechange 属性允许指定一个回调函数。回调允许服务器反向调用 Web 页面中的代码
responseText:服务器返回的请求响应文本。
E.g.:
// --- html code, which calls callServer whenever the input box is changed ---
<form>
<p>City: <input type="text" name="city" id="city" size="25"
onChange="callServer();" /></p>
<p>State: <input type="text" name="state" id="state" size="25"
onChange="callServer();" /></p>
<p>Zip Code: <input type="text" name="zipCode" id="city" size="5" /></p>
</form>

// --- javascript ---
// --- create XMLHttpRequest on a browser (MSIE/opera/etc) ---
/* Create a new XMLHttpRequest object to talk to the Web server */
var xmlHttp = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}
@end @*/
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}


function callServer() {
// Get the city and state from the web form
var city = document.getElementById("city").value;
var state = document.getElementById("state").value;
// Only go on if there are values for both fields
if ((city == null) || (city == "")) return;
if ((state == null) || (state == "")) return;
// Build the URL to connect to
var url = "/scripts/getZipCode.php?city=" + escape(city) + "&state=" + escape(state);
// Open a connection to the server
xmlHttp.open("GET", url, true);
// Setup a function for the server to run when it's done
xmlHttp.onreadystatechange = updatePage; //-> call updatePage when response is received (i.e. onreadystatechange)
// Send the request
xmlHttp.send(null);
}

// --- process server's response
function updatePage() {
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
document.getElementById("zipCode").value = response;
}
}
// escape(): 它用于转义不能用明文正确发送的任何字符。比如,电话号码中的空格将被转换成字符 %20,从而能够在 URL 中传递这些字符

其中, 下面的"true" 表明这是一个异步连接, 这时表单将不等待服务器响应,用户可以继续访问表单.
>> xmlHttp.open("GET", url, true);



JSON:
JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。
JSON 用 hash结构 ({}包围的) 来定义一个数据, 用 [] 包围的多个数据来 定义一个数组.

用[index]来访问数组的某个元素,"."来访问数据的key, 如:
>> people.programmers[0].lastName
要把json数据转换为字符串
>> String newJSONtext = people.toJSONString();
利用 POST 请求发送 JSON 数据
>> var url = "organizePeople.php?timeStamp=" + new Date().getTime();
>> request.open("POST", url, true);
>> request.onreadystatechange = updatePage;
>> request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
>> request.send(people.toJSONString());
如果通过GET方法通过url直接发送JSON数据,需用escape(people.toJSONString()) 以避免url错误

在服务器上解释 JSON
在服务器端处理 JSON 基本上就需要两个步骤。
1. 针对编写服务器端程序所用的语言,找到相应的 JSON 解析器/工具箱/帮助器 API。
2. 使用 JSON 解析器/工具箱/帮助器 API 取得来自客户机的请求数据并将数据转变成脚本能理解的东西。

比如,假设为 PHP 使用的是 JSON-PHP 模板
require_once('JSON.php');
$json = new Services_JSON();
// accept POST data and decode it
$value = $json->decode($GLOBALS['HTTP_RAW_POST_DATA']);
// Now work with value as raw PHP

Saturday, January 15, 2011

植物种植

水培风信子
.概述
风信子是多年生球根类花卉,冬天及早春是它的生长期及花期,夏天则是它的休眠期,故一般将其作一年生花卉栽养.风信子喜温暖,湿润,空气流通,阳光充足的环境.是水培花卉中最易养的观花品种之一.风信子的花色多变,红的象火,紫的醉人,黄的耀眼,粉的妩媚,白的纯洁,兰的深邃,她们代表着积极向上,代表着热爱生活.开花的时候象征着春天的到来,催人振奋.从11月份开始水养,大约80-90天后开花,有香味.
水培风信子的几个基本注意事项:
1.水位离球茎的底盘要有1-2CM的空间,让根系可以透气呼吸.严禁将水加满没过球茎底部!
2.如果用清水养每7天换一次水,如果用水培营养液养则视浑浊程度每15-20天更换一次营养液.无论怎样要保持瓶内水质的清洁.
3.球茎发芽前不要放在直射阳光下照射.发芽后应置于光线明亮,空气流通,有阳光的位置上,以利于它的生长.

盆栽杜鹃
.概述
杜鹃花是著名的观赏花木,由于其花枝优美,花色艳丽,花期又长,在我国民间有“花中西施”的美誉。
.土质
配土对盆栽杜鹃的生长发育至关重要。必须具备以下几个条件:疏松、排水通畅、通气良好。杜鹃花喜酸性土,Ph值在4.5至6为宜,盆栽一般采用黑山泥或黄土加腐殖土,按1:1的比例混合成的营养土栽培。栽植时间春、秋季均可。但以3至4月份上盆或翻盆为最佳。用酸性的山泥,再选用排水良好的浅花盆,土应分层配制,下面土稍粗,上面细土,装好后将花根压紧,使根与土壤紧密接触。一年翻盆一次,翻盆时将老根剪除,栽后即浇水,置于阴凉处。
.浇水和湿度
杜鹃花浇水是一项很重要的工作。因为杜鹃花的根系比较细弱,既怕涝,又不耐旱,过干或过湿对植株生长都不利,因而要特别注意控制水量。如果在展叶期缺水,就会使杜鹃花的叶色变黄,叶卷曲,如干得厉害,还会枯死。要是开花时缺水,则会花瓣软瘪,花朵下垂,花色不鲜艳,甚至会花朵凋萎,死亡。所以必须根据天气晴雨、空气干湿、盆土含水量等情况酌情浇水。浇水的时间宜在早晚,特别是炎热的夏季更不宜在中午浇水。因为根部受冷水刺激后会使花卉受到伤害。浇水原则是不干不浇,浇必浇透。
.施肥
合理施肥是促使枝壮、叶绿、花鲜艳的重要措施。在开花与新梢生长期施以氮肥为主的肥料。春季生长时期为使老叶转绿,施肥2至3次,开花时,施肥1至2次,开花之后为促使枝叶生长,可施肥5至6次,秋季停止生长前再施1至2次。夏季天气炎热,温度高,应少施肥,即使施肥,浓度也要特别低,以免造成高温高湿肥害。总之,施肥应结合浇水,以薄肥多施为原则。
.光照
杜鹃花喜半阴,怕暴晒,在开花期和炎热的夏季,应放置于背阴场地,或搭凉棚。但也不可忽视光照,以防枝瘦、叶小、花少。

盆栽君子兰
.概述
君子兰为多年生常绿草本植物,喜温暖、湿润及半阴环境。土壤要求疏松,富含腐殖质,排水要好上盆种植最好选用高脚泥盆,盆底多垫碎盆片,使排水畅通。
.浇水和湿度
需水量依不同季节而不同,春夏每天浇1次水,秋季隔天浇1次水,冬季休眠期3-5天浇1次水,凡见土表发白时即浇,浇则浇透。切不可形成“截腰水”,形成土壤上湿下干
.施肥
肥水方面,春秋生长期,包括花期,盆土可略湿一些。给生长期的君子兰施入以氮为主的腐熟液肥,每15天一次,施2~3次。花期2~3月份,施入以磷为主的肥料,每10天一次,施1~2次。炎热夏季、寒冷冬季停肥。盆土也应偏干为宜。
.温度
君子兰耐半阴,生长期忌阳光直射,要放在有遮荫环境条件下,冬季开花期要给以充分光照条件。在室内有散射光条件下也能正常生长,但光照过弱,容易造成叶片变薄,叶色变淡,而失去光泽。
.光照
盆栽君子兰,日常养护除冬季需在室内保暖外,最好放置在室外半阴、避雨处。
.问题
如果君子兰的叶片边缘部分出现铁锈斑点,那是因为:1、施入肥料过浓或是生肥。2、盆土不透气,排水不良,或长时间过湿、过干。3、放置地空气不流通,病菌侵蚀。只要采取相应的措施,很快就会好转。

盆栽仙客来
.概述
仙客来的花葶增长主要靠减少光照强度、增加浇水量、勤施肥、昼夜温差小这些措施,反之则会生长较短。
.温度
夏季适宜生长温度15-25℃,冬季适宜生长温度为10-20℃,低于10℃,开花数减少。生长期要有10℃温差更好,可抑制仙客来徒长。
.浇水和湿度
浇水以见干见湿为原则,冬季水温保持在15℃以上,湿度保持在60%-80%之间,适宜的湿度对叶色有促进作用。
.施肥
仙客来属球根花卉,要求钾肥多,在仙客来生长过程中,适宜的肥料N、P、K分别为6.5%、6%、19%。在花芽分化期可半月追叶面肥磷酸二氢钾,浓度为3000倍,一至两次。
.光照
在能保证温度不高于25℃的情况下,仙客来可给予充足的光照,光线中的紫外线可以促进仙客来花色鲜艳度。

Monday, November 15, 2010

short summary of package

Packages are explicitly named scopes appearing at the outermost level of the source text (at the same level as top-level modules and primitives). Types, variables, tasks, functions, sequences, and properties may be declared within a package.
Packages must not contain any processes. Therefore, wire declarations with implicit continuous assignments are not allowed.

Items within packages are generally type definitions, tasks, and functions. Items within packages cannot have hierarchical references. It is also possible to populate packages with parameters, variables, and nets.

One way to use declarations made in a package is to reference them using the class scope resolution operator ::.
ComplexPkg::Complex cout = ComplexPkg::mul(a, b);

Explicit import allows control over precisely which symbols are imported:
import ComplexPkg::Complex;


An alternate method for utilizing package declarations is via the import statement.

Thursday, November 11, 2010

ansi color (with python)

#! /magnum/oss/bin/python
def printC(bg,fg):
print "\033[05;"+bg+";"+fg+"mABC"+"\033[0m"
mystr=""
attrib=[0,1,4,5,7,8]
for i in attrib:
mystr+="\033[%dm%d\033[0m " % (i,i)
print mystr
mystr="\n\n"
for i in range (40,48):
mystr="%d:" % i
for j in range (30,38):
fg=str(j)
mystr= mystr + (" \033[1;%d;%dm%d\033[0m" % (i,j,j))
print mystr

#EOF

%color.py
0 1 4 5 7 8
40: 30 31 32 33 34 35 36 37
41: 30 31 32 33 34 35 36 37
42: 30 31 32 33 34 35 36 37
43: 30 31 32 33 34 35 36 37
44: 30 31 32 33 34 35 36 37
45: 30 31 32 33 34 35 36 37
46: 30 31 32 33 34 35 36 37
47: 30 31 32 33 34 35 36 37

Thursday, November 4, 2010

how to change color of "ls" command

use "man dir_colors" for detailed help.
copy "/etc/DIR_COLORS" to "~/.dir_colors" to create user-defined color file.

to ease visibility of folder color with blackground, change default setting
 on line 59:
"DIR 01;34     # directory"  #i.e. darkblue
to
"DIR 04;36     # directory"  #i.e. darkcyan, underline

This is enough.

Tuesday, November 2, 2010

IQ 调制

I:in phase同相分量
Q:quadrature phase正交分量
IQ调制是通信调制的基础概念,实际是属于相干调制的范畴。
IQ调制通过将数据分路,分别进行相干的载波调制(注意,这里不完全是正交,正交适应于BPSK、QPSK中,8PSK等八相以上调制不适合这种提法)。正交调幅信号QAM有两个相同频率的载波,但是相互正交(相位相差90度,四分之一周期)。一个信号叫I信号,另一个信号叫Q信号。最后通过合路,将调制信息置于载波中的幅度、相位或者频率。
从传输线角度来看,I/Q信号是一种双线传输模式,能量主要集中在两线之间。与外界关系不大。以此可以抗击共模干扰。当然,双线间回路面积要小些。

IQ信号和抗干扰没关系
现代通信系统为了使频谱利用率更高,所以用了许多种矢量调制,如BPSK、QPSK、QAM等等。
而对于数字信号而言是不会区分一个信号是不是矢量的,所以就用了IQ调制这种方式,使数字和模拟之间塔起了矢量的桥梁。
I/Q调制最基本的好处就是单边带输出。