原文地址: http://bbs.5dou.net/viewthread.php?tid=21&page=1&extra=page%3D1
Flex Builder 3.0正式版+破解补丁
Flex Builder 3.0正式版:
http://download.macromedia.com/pub/flex/flex_builder/FB3_win.exe
或
http://www.adobe.com/cfusion/tdrc/index.cfm?product=flex
AIR1.0 正式版:
http://airdownload.adobe.com/air … obeAIRInstaller.exe
Flex Builder 3.0破解补丁:压缩包下载
[转]java虚拟机jvm关于内存的设置与调优
java虚拟机jvm关于内存的设置与调优
JVM内存的设置的原理
默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。
设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)
在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的设置是在commEnv.cmd里面。
本文引用地址:http://cnpoint.com/framwwork/2006/1109/content_4563.htm
JVM内存的调优
1. Heap设定与垃圾回收
Java Heap分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。
JVM的Heap分配可以使用-X参数设定,
-Xms
初始Heap大小
-Xmx
java heap最大值
-Xmn
young generation的heap大小
JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
为什么一些程序频繁发生GC?有如下原因:
l 程序内调用了System.gc()或Runtime.gc()。
l 一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
l Java的Heap太小,一般默认的Heap值都很小。
l 频繁实例化对象,Release对象。此时尽量保存并重用对象,例如使用StringBuffer()和String()。
如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态。许多Server端的Java程序每次GC后最好能有65%的剩余空间。
经验之谈:
1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3[2]。
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成[2]。
注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。
2.Stack的设定
每个线程都有他自己的Stack。
-Xss
每个线程的Stack大小
Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。
3.硬件环境
硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用[2]。
4.4种GC
第一种为单线程GC,也是默认的GC。,该GC适用于单CPU机器。
第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。
4种GC的具体描述参见[3]。
参考文章:
1. JVM Tuning. http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp#garbage-collection
2. Performance tuning Java: Tuning steps
http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,1604,00.html
3. Tuning Garbage Collection with the 1.4.2 JavaTM Virtual Machine .
http://java.sun.com/docs/hotspot/gc1.4.2/
原文地址:http://blog.csdn.net/tyrone1979/archive/2006/09/25/1274458.aspx
ASP中字符函数一览
函数 语法 功能
Len Len(string|varname) 返回字符串内字符的数目,或是存储一变量所需的字节数。
Trim Trim(string) 将字符串前后的空格去掉
Ltrim Ltrim(string) 将字符串前面的空格去掉
Rtrim Rtrim(string) 将字符串后面的空格去掉
函数 语法 功能
Len Len(string|varname) 返回字符串内字符的数目,或是存储一变量所需的字节数。
Trim Trim(string) 将字符串前后的空格去掉
Ltrim Ltrim(string) 将字符串前面的空格去掉
Rtrim Rtrim(string) 将字符串后面的空格去掉
Mid Mid(string,start,length) 从string字符串的start字符开始取得length长度的字符串,如果省略第三个参数表示从start字符开始到字符串结尾的字符串
Left Left(string,length) 从string字符串的左边取得length长度的字符串
Right Right(string,length) 从string字符串的右边取得length长度的字符串
LCase LCase(string) 将string字符串里的所有大写字母转化为小写字母
UCase UCase(string) 将string字符串里的所有大写字母转化为大写字母
StrComp StrComp(string1,string2[,compare]) 返回string1字符串与string2字符串的比较结果,如果两个字符串相同,则返回0,如果小于则返回-1,如果大于则返回1
InStr InStr(string1,string2[, compare]) 返回string1字符串在string2字符串中第一次出现的位置
Split Split(string1,delimiter[, count[, start]]) 将字符串根据delimiter拆分成一维数组,其中delimiter用于标识子字符串界限。如果省略,使用空格(“”)作为分隔符。
count 返回的子字符串数目,-1 指示返回所有子字符串。
start为 1 执行文本比较;如果为 0 或者省略执行二进制比较。
Replace Replace(expression, find, replacewith[, compare[, count[, start]]]) 返回字符串,其中指定数目的某子字符串(find)被替换为另一个子字符串(replacewith)。
1、Len函数示例:
下面的示例利用 Len 函数返回字符串中的字符数目:
Dim MyString
MyString = Len(“VBSCRIPT”) ''MyString 包含 82、Trim、Ltrim、Rtrim函数示例:
下面的示例利用 LTrim, RTrim, 和 Trim 函数分别用来除去字符串开始的空格、尾部空格、 开始和尾部空格:
Dim MyVar
MyVar = LTrim(” vbscript “) ''MyVar 包含 “vbscript “。
MyVar = RTrim(” vbscript “) ''MyVar 包含 ” vbscript”。
MyVar = Trim(” vbscript “) ''MyVar 包含”vbscript”。
3、Mid函数示例:
下面的示例利用 Mid 函数返回字符串中从第四个字符开始的六个字符:
Dim MyVar
MyVar = Mid(“VB脚本is fun!”, 4, 6) ''MyVar 包含 “Script”。
4、Left函数示例:
下面的示例利用Left 函数返回MyString 的左边三个字母:
Dim MyString, LeftString
MyString = “VBSCript”
LeftString = Left(MyString, 3) ''LeftString 包含 “VBS
5、Right函数示例:
下面的示例利用 Right 函数从字符串右边返回指定数目的字符:
Dim AnyString, MyStr
AnyString = “Hello World” ''定义字符串。
MyStr = Right(AnyString, 1) ''返回 “d”。
MyStr = Right(AnyString, 6) '' 返回 ” World”。
MyStr = Right(AnyString, 20) '' 返回 “Hello World”。
6、LCase函数示例:
下面的示例利用 LCase 函数把大写字母转换为小写字母:
Dim MyString
Dim LCaseString
MyString = “VBSCript”
LCaseString = LCase(MyString) '' LCaseString 包含 “vbscript”。
7、 UCase函数示例:
下面的示例利用 UCase 函数返回字符串的大写形式:
Dim MyWord
MyWord = UCase(“Hello World”) '' 返回”HELLO WORLD”。
8、StrComp函数示例:
下面的示例利用 StrComp 函数返回字符串比较的结果。如果第三个参数为 1 执行文本比较;如果第三个参数为 0 或者省略执行二进制比较。
Dim MyStr1, MyStr2, MyComp
MyStr1 = “ABCD”: MyStr2 = “abcd” ''定义变量。
MyComp = StrComp(MyStr1, MyStr2, 1) '' 返回 0。
MyComp = StrComp(MyStr1, MyStr2, 0) '' 返回 -1。
MyComp = StrComp(MyStr2, MyStr1) '' 返回 1。
9、InStr示例:
下面的示例利用 InStr 搜索字符串:
Dim SearchString, SearchChar, MyPos
SearchString =”XXpXXpXXPXXP”???
SearchChar = “P”??
MyPos = Instr(SearchString, SearchChar)???''返回 9.
注意:返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。
10、Split函数示例:
Dim MyString, MyArray, Msg
MyString = “VBScriptXisXfun!”
MyArray = Split(MyString, “x”,-1,1)
'' MyArray(0) contains “VBScript”.
'' MyArray(1) contains “is”.
'' MyArray(2) contains “fun!”.
Response.Write(MyArray(0))
11、Replace函数示例:
Replace(“ABCD”, “BC”, “12”) ''得到A12D
[转]ASP实例中VBScript的数组变量讲解
ASP实例中VBScript的数组变量讲解一
数组可以存储一系列相同类型的数据.可以使用循环读取数组中的所有值,如for。
标量变量和数组变量。多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候,将多个相关值赋给一个变量更为方便,因此可以创建包含一系列值的变量,称为数组变量。数组变量和标量变量是以相同的方式声明的,唯一的区别是声明数组变量时变量名后面带有括号( )。
下例声明了一个包含 11 个元素的一维数组:Dim A(10)
虽然括号中显示的数字是 10,但由于在 VBScript 中所有数组都是基于 0 的,所以这个数组实际上包含 11 个元素。在基于 0 的数组中,数组元素的数目总是括号中显示的数目加 1。这种数组被称为固定大小的数组。
在数组中使用索引为数组的每个元素赋值。从 0 到 10,将数据赋给数组的元素,如下所示:
A(0) = 256
A(1) = 324
A(2) = 100 . . .
A(10) = 55
与此类似,使用索引可以检索到所需的数组元素的数据。
例如:SomeVariable = A(8)
数组并不仅限于一维。数组的维数最大可以为 60(尽管大多数人不能理解超过 3 或 4 的维数)。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中,MyTable 变量是一个有 6 行和 11 列的二维数组:
Dim MyTable(5, 10)
在二维数组中,括号中第一个数字表示行的数目,第二个数字表示列的数目。
也可以声明动态数组,即在运行脚本时大小发生变化的数组。对数组的最初声明使用 Dim 语句或 ReDim 语句。但是对于动态数组,括号中不包含任何数字。
例如:Dim MyArray()
ReDim AnotherArray()
要使用动态数组,必须随后使用 ReDim 确定维数和每一维的大小。在下例中,ReDim 将动态数组的初始大小设置为 25,而后面的 ReDim 语句将数组的大小重新调整为 30,同时使用 Preserve 关键字在重新调整大小时保留数组的内容。
ReDim MyArray(25)
ReDim Preserve MyArray(30)
重新调整动态数组大小的次数是没有任何限制的,将数组的大小调小时,将会丢失被删除元素的数据。
重定义数组的实例
<%
dim x()
for i=0 to 10
redim x(i)
x(i)=i
response.write x(i)
next
%>
ASP实例中VBScript的数组变量讲解二
使用数组时,有三个函数是你必须掌握的。函数UBOUND()返回一个数组的大小。确切地说,它可以返回数组的某一维的大小。这里有这个函数的一些例子:
<%
DIM Product(10,33)
%>
<%=UBOUND(Product)%>
<%=UBOUND(Product,1)%>
<%=UBOUND(Product,2)%>
在这个例子中,第一个UBOUND()函数返回值是10。在缺省情况下,这个函数返回的是一个函数的第一维的上界。
第二个UBOUND()函数的返回值与第一个相同。它返回的是数组Product的第一维的上界。
警告
虽然数组的某一维的第一个索引值总是0,但其第一维总是用1表示,不要混淆了维数与索引。
最后,第三个UBOUND()函数的返回值是33。这是数组Product的第二维的维数。
当一个数组不是你声明的,但你需要确定这个数组的大小时,函数UBOUND()是有用的。例如,在第23章“使用记录集中”,你将学习如何从一个数据库表中把记录取到数组中。如果你需要知道这项操作所产生的数组的大小,你可以使用函数 UBOUND()。(知道一个数组的大小使你能够遍历和显示它的所有元素。)
VBScript有一个ERASE语句,可以用来操作固定大小的数组和动态数组。通过对一个静态数组使用ERASE语句,你可以清除这个数组。如果该数组是一个字符串数组,ERASE语句把该数组的所有元素重新初始化为空字符串””。如果该数组是一个数值数组,ERASE语句可以把该数组的所有元素重新初始化为0。这里有一些例子:
<%
DIM Product(2)
Product(1)=”Running shoes”
ERASE Product
%>
<%=Product(1)%>
当这个脚本执行时,不会输出任何讯息。ERASE语句清除了数组Product的所有数据,不论有多少元素被分配了值。
当对动态数组使用ERASE语句时,它的作用与上述的不同。当你对动态数组使用ERASE语句时,该数组本身会被删除。在你能重新使用这个数组之前,你必须对它重新初始化。如下例所示:
<%
DIM Product()
REDIM Product(100)
Product(1)=”Running Shoes”
ERASE Product
%>
这个脚本创建了一个名为Product的动态数组。该数组的索引值为1的元素被赋了一个值。然后,用ERASE语句删除了这个数组。如果你在它被删除之后试图访问这个数组的任何一个元素,则将会发生错误。
当你删除了一个数组后,内存就被释放。对一个访问率很高的站点来说,每一字节的内存都很珍贵。因此当你不再需要一个动态数组时,用ERASE语句删除它是个不错的主意。
操作数组的最后一个有用的函数是ISARRAY()。函数ISARRAY()可以用来测试一个变量表达式是否是一个数组。这里有一个例子:
<%
DIM Product(10)
DIM somevar
%>
<%=ISARRAY(Product)%>
<%=ISARRAY(somevar)%>
在这个例子中,第一个ISARRAY()函数返回TRUE,因为Product实际上是一个数组。第二个ISARRAY()函数返回FALSE,因为变量somevar没有被声明为一个数组。
ASP实例中VBScript的数组变量讲解三
数组函数:Array()[ybj86.cn]
Vbscript定义数组
返回包含数组的 Variant。
Array(arglist)
arglist参数是赋给包含在Variant中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则将会创建零长度的数组。
说明:用于引用数组元素的表示符,由跟随有括号的变量名组成,括号中包含指示所需元素的索引号。在下面的示例中,第一条语句创建名为 A 的变量。第二条语句将一个数组赋值给变量 A。最后一条语句将包含在第二个数组元素中的值赋值给另一个变量。
Dim A
A = Array(10,20,30)
B = A(2) ' B is now 30。
注意:未作为数组声明的变量仍可以包含数组。虽然包含数组的 Variant 变量与包含 Variant 元素的数组变量有概念上的不同,但访问数组元素的方法是相同的。
ASP中动态数组的定义
现在需要一数组,但是大小不固定,所以用动态数组。
dim item()
下面的语句会出现:下标越界 的错误,好像item()现在还不是一个数组一样。
redim preserve item(ubound(item)+1)
但是,我确实需要这么做,下标为0的数组元素也需动态添加进去。
用on error ,但是ASP又不支持goto,即:
on error goto errorHandler
在VB里可以如下做:
Private Sub Form_Load()
On Error GoTo errorHandler
ReDim Preserve item(UBound(item) + 1)
item(UBound(item)) = UBound(item)
errorHandler:
ReDim item(0)
item(0) = 0
End Sub
解决方法:
dim item()
sub aa()
’On Error Resume Next的意思是如果发生错误就继续直接执行出错语句下面的那句。一般的,如果出错,VB会报告并停止运行,但有时错误并不严重,不会产生严重影响,你可以在可能出错的语句前面加上这句。但是如果错误很严重,会影响到后续语句,就不要使用这个方法了。
on error resume next
'重定义item数组的下界=当前下界+1
redim preserve item(ubound(item)+1)
’如果定义错误,当然会报错了,因为ubound(item)根本取不到下界,然后定义item为下界为1
if err.number <>0 then
redim preserve item(1)
end if
response.write uBound(item)
end sub
aa
XP下IIS用户访问连接数限制修改
问题背景:
服务器经常出现下面的情况,该如何解决
——————————————————————————–
无法显示网页
目前访问网站的用户过多。
请尝试执行下列操作:
单击刷新按钮,或稍后重试。
打开 192.168.0.11 主页,然后查找与所需信息相关的链接。
HTTP 错误 403.9 – 禁止访问:连接的用户过多
Internet 信息服务
——————————————————————————–
技术信息(用于支持人员)
背景:
导致此错误的原因是:Web 服务器忙,因通信量过大而无法处理您的请求。
详细信息:
Microsoft 支持
----------------------------------
解决办法:
我们知道Windows 2000专业版或Windows XP专业版操作系统中IIS最多允许10个客户端的连接,在Windows 2000服务器版或Windows 2003服务器版操作系统中不存在这种连接限制问题。
Microsoft 提供了一个管理IIS的小工具MetaEdit,MetaEdit工作在Windows NT4.0、Windows 2000上,我发现它在Windows XP上也能正常工作,另外,MetaEdit只能管理II4.0、IIS5.0或更高版本的IIS。
下面利用这个工具突破Windows XP专业版IIS客户端连接限制:
首先,你需要到下面的地址下载MetaEdit,最新版本是2.2。
http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe
(如果是WINXP+SP2,请下载:SP2限制连接数补丁最新版本2.11a并查看文末说明)
然后,执行MtaEdt22.exe按向导提示完成MetaEdit安装。
最后,在MetaEdit中设置客户端连接限制的参数。
安装MetaEdit完毕后,在开始菜单的程序组Administrative Tools下点击MetaEdit 2.2运行,出现一窗口,在窗口的左边将树展开至LM \\ W3SVC,直接在W3SVC文件夹上单击,选择右边列表中Name为MaxConnections的项,双击后,出现对话框。在最后Data的文本框中默认的是10,这就是Windows XP专业版IIS默认设置的最大客户端连接数了,现在你可以改变这个默认值了,我把它改为10000,
注意:在Win2000 上的IIS客户端连接数最大为2000000000
[原创]获得后缀名为swf的通用正则表达式
经过对传统过滤url地址的正则表达式
http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
针对目前flash网站普遍采用的flash文件的连接形式如下:
src=”/www/flash/swfssss.swf”
src=”http://www.flash.net/flass/sss.swf”
src=”../sdfs/ssss.swf”
src=”ssdfd/ssfds/ss.swf”
进行正则表达式的修改,使得能够提取出正确的flash文件地址来进行转换保存
最终的正则表达式为:((http:)|[\w/=]|\.)+[\w-]+(/[\w./?%&=]*)*\.swf
说明:
():表示含有的字符集合
|:表示或
[]:表示包含的指定字符
\w:任意ASCII单字字符,也就是[a-zA-Z0-9]
/=:也就是=
\.:也就是“.”
*:自然是通配符了,所有字符
整体含义是:首字符含有“http:”或“a-zA-Z0-9小数点”后面用“/”分隔开的任意长度字符,结尾为.swf的内容全部过滤出来
呼~~~~~,正则表达式真的是很难理解的,不过只要弄清楚规则后还是需要多实践才能总结出来的
今天的任务完成了,明天写出个通用的结构出来,flash收藏家的核心技术难点就算解决了!爽啊!
在线正则表达式测试工具
Regexpal 是一个 JavaScript 写成的正则表达式在线验证工具,对于常接触正则的程序员来说,是个很实用的工具。
正则表达式 (Regular Expression) 作为一种方便快捷的字符串处理方案,受到了越来越多程序员的欢迎。虽然初学正则表达式比较抓狂,但一旦开始使用它,你就发现它真是强大的不得了。在 Web 应用开发中,正则表达式更是被广泛使用。流行的编程语言,如 PHP,ASP,JavaScript 都支持正则表达式。虽然调用方法不太相同,但匹配规则 (pattern) 都是一样的。
无论是正则表达式的熟练者,还是刚学正则的新手,验证自己书写的表达式是否正确一直是个麻烦的问题。通常我的做法是写一小段程序,并载入相关数据进行验证。这种方法虽然有效,但很麻烦。Regexpal就可以简化这个问题。
打开 Regexpal 的主页,我们看到只有很简洁的两个框框。上面的输入框中,我们可以输入正则表达式(匹配规则),而在下面的框框中我们输入待匹配的数据。此外,根据具体要求,我们还可以设置忽略大小写、多行匹配等参数。Regexpal 的匹配结果是实时的,当你完成设置的同时,匹配结果将会以不同的颜色在下方的数据框中被标记出来。这样,我们就可以很直观的看到自己的正则表达式是否正确了。
Regexpal 对于程序员来说,应该是一个收入收藏夹的好工具。当然,对于平时有大量文档需要处理的朋友,我也建议你学习一下正则表达式。利用正则来处理文本绝对可以达到事半功倍的效果。如今比较流行的编辑器,如 Notepad++ 都能够很好的支持通过正则表达式查找和替换。利用正则来处理大量有规律的文本,比传统的手工方法要省时省力的多。
[转]Flash中Wacom的应用
在FLASH热潮风靡世界的今天,WACOM也开始了她的再一次辉煌。
FLASH对 WACOM的支持并不能算是一个“好”字。但是WACOM会使FLASH发挥的更加多面化和完美化。很多朋友反映:在FLASH中用WACOM画出来的线条都不够平滑、不够流畅。这也是需要一些技巧的,首先在画之前你要确定你的画面是用纯线来表现还是用笔刷的块面线来表现,纯线条是没有粗细变化的,但是比较容易画的流畅;笔刷有压敏反应,所以可以画出非常自然的线条,遗憾的是掌握起来需要一定的熟练程度和技巧。下面我们来分别看一下(以下说 明针对FLASH5.0版本):
纯线条的绘画比较好掌握,只要你有良好的运用普通铅笔或钢笔画画的技巧,你就可以 很快地掌握WACOM的使用方法。
1、在绘前,先要把FLASH中具有自动对齐功能的“磁铁”点掉,取消自动对齐功能;
2、然后点下工具栏中的铅笔工具,在对应的工具栏下方的线条模式里面选择最后一种 :自由线条(Ink);
3、接下来,检查一下View菜单下的Grid选项中的Snap to Grid选项是否是选中状态, 如果是,就要取消对它的选择。
好了现在你就拥有了相当的自由度了,试一下你的WACOM吧。
笔刷的块面线条的绘画掌握起来比较复杂一些,首先我们要做的一步就是上面所讲的纯 线条的绘画3步前奏。因为笔刷的块面线也是有边缘的,它的边缘也就是线条的属性,所以 不能忽略。
接下来,我们需要选择笔刷工具,在下面的对应属性中点下那个蝌蚪状的压敏支持按钮 (Use Pressure),选择合适的笔触外形和适当的粗细,这里说明一点:虽然WACOM可以画出自由粗细的线条,我们可以通过手上的压感来自己调节线条的粗细;但是因为压感控制的敏感度和用力的不均衡,不同粗细的笔刷会有不同的压力感应圈。选择合适粗细的笔刷是非 常重要的一步。
最后,先在空白纸上测试一下你的绘画速度:速度太快的话,线条会有折线点出现,速度太慢也一样会有很多弯曲折断的线条边缘出现;要经常用、多练习才可以掌握好。另外,机器的配置好坏也一样会影响线条的光滑度:速度慢的机器就要画得慢一点;速度快的机器 要加快绘画速度。
勾完线后的修改:纯线条的画面需要先点开时间线面板上的显示外框功能,然后按下磁铁自动对齐按钮。这样比较容易察看接合与否,没接合的地方用鼠标工具拖拽一端进行自动接合。笔刷的块面线稿也可以用显示外框功能和自动对齐功能来修正接合,或者也可以直接用笔刷添补接合。对于多出来的线头,直接用橡皮擦除或者快速拖拽转折线点使多余部分分 离开线稿,再点击删除。
对于抖动折线或小曲线过多的地方,可以先用鼠标工具圈选该部分,然后点几下“光滑 (Smooth)”按钮,再用鼠标工具调整为合适的曲度。
合理使用WACOM:
1、保持好良好的使用角度。一般来说:笔和板在60度-70度的倾斜度间最为顺手和协调 。低于45度会使敏感度降低很多;接近垂直的角度容易损伤板面和笔尖。
2、保持版面清洁。新板子手感非常舒适,相信大家也一定保护的很好了。用的时间稍久了就不会在乎这些了,这样是不对的。版面上的灰尘和污垢很容易影响你的绘画效果并加快笔尖和板面的损耗。建议大家买一块普通的擦眼镜用的绒布来维护板面,不要用面巾纸等粗糙的东西去擦。使用前擦拭一遍,使用后擦拭一遍,然后用绒布盖好板面。笔不用时要插在座中,以免掉落(笔中有一条很窄的电路板,如果松动了则直接影响使用效果)。
3、笔尖每使用一段时间(大约15天,根据频繁度来定)后最好用镊子夹住稍微旋转一下,这样有利于延长笔尖的使用寿命,避免出现摩擦斜角。
4、板子和笔不要离强磁场、高温的东西太近。
以上部分只是一点本人日常总结的小经验,不到之处尚请指正。最后祝各位闪客能顺利地用WACOM打造自己的闪光之作!谢谢阅览。
cink(青羽)2002.1.14. 凌晨2:49
[C#]常用的匹配正则表达式和实例
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,”aa”).length;}
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
应用:JavaScript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, “”);
}
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的JavaScript程序:
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error(“Not a valid IP address!”)
}
}
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
var ip=”10.100.20.168″
ip=ip.split(“.”)
alert(“IP值是:”+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]
var s=”abacabefgeeii”
var s1=s.replace(/(.).*\1/g,”$1″)
var re=new RegExp(“[“+s1+”]”,”g”)
var s2=s.replace(re,””)
alert(s1+s2) //结果为:abcefgi
我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。
得用正则表达式从URL地址中提取文件名的JavaScript程序,如下结果为page1
s=”http://www.9499.net/page1.htm”
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,”$2″)
alert(s)
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup=”value=value.replace(/[^\u4E00-\u9FA5]/g,”)” onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,”))”
用正则表达式限制只能输入全角字符: onkeyup=”value=value.replace(/[^\uFF00-\uFFFF]/g,”)” onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\uFF00-\uFFFF]/g,”))”
用正则表达式限制只能输入数字:onkeyup=”value=value.replace(/[^\d]/g,”) “onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))”
用正则表达式限制只能输入数字和英文:onkeyup=”value=value.replace(/[\W]/g,”) “onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))”
补充:
^\d+$ //匹配非负整数(正整数 + 0)
^[0-9]*[1-9][0-9]*$ //匹配正整数
^((-\d+)|(0+))$ //匹配非正整数(负整数 + 0)
^-[0-9]*[1-9][0-9]*$ //匹配负整数
^-?\d+$ //匹配整数
^\d+(\.\d+)?$ //匹配非负浮点数(正浮点数 + 0)
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ //匹配正浮点数
^((-\d+(\.\d+)?)|(0+(\.0+)?))$ //匹配非正浮点数(负浮点数 + 0)
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ //匹配负浮点数
^(-?\d+)(\.\d+)?$ //匹配浮点数
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ //匹配email地址
^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ //匹配url
利用正则表达式去除字串中重复的字符的算法程序:
var s=”abacabefgeeii”
var s1=s.replace(/(.).*\1/g,”$1″)
var re=new RegExp(“[“+s1+”]”,”g”)
var s2=s.replace(re,””)
alert(s1+s2) //结果为:abcefgi
===============================
如果var s = “abacabefggeeii”
结果就不对了,结果为:abeicfgg
正则表达式的能力有限
1.确认有效电子邮件格式
下面的代码示例使用静态 Regex.IsMatch 方法验证一个字符串是否为有效电子邮件格式。如果字符串包含一个有效的电子邮件地址,则 IsValidEmail 方法返回 true,否则返回 false,但不采取其他任何操作。您可以使用 IsValidEmail,在应用程序将地址存储在数据库中或显示在 ASP.NET 页中之前,筛选出包含无效字符的电子邮件地址。
[Visual Basic]
Function IsValidEmail(strIn As String) As Boolean
‘ Return true if strIn is in valid e-mail format.
Return Regex.IsMatch(strIn, (“^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$”)
End Function
[C#]
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @”^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$”);
}
2.清理输入字符串
下面的代码示例使用静态 Regex.Replace 方法从字符串中抽出无效字符。您可以使用这里定义的 CleanInput 方法,清除掉在接受用户输入的窗体的文本字段中输入的可能有害的字符。CleanInput 在清除掉除 @、-(连字符)和 .(句点)以外的所有非字母数字字符后返回一个字符串。
[Visual Basic]
Function CleanInput(strIn As String) As String
‘ Replace invalid characters with empty strings.
Return Regex.Replace(strIn, “[^\w\.@-]”, “”)
End Function
[C#]
String CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
return Regex.Replace(strIn, @”[^\w\.@-]”, “”);
}
3.更改日期格式
以下代码示例使用 Regex.Replace 方法来用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。
[Visual Basic]
Function MDYToDMY(input As String) As String
Return Regex.Replace(input, _
“\b(?\d{1,2})/(?\d{1,2})/(?\d{2,4})\b”, _
“${day}-${month}-${year}”)
End Function
[C#]
String MDYToDMY(String input)
{
return Regex.Replace(input,
“\\b(?\\d{1,2})/(?\\d{1,2})/(?\\d{2,4})\\b”,
“${day}-${month}-${year}”);
}
Regex 替换模式
本示例说明如何在 Regex.Replace 的替换模式中使用命名的反向引用。其中,替换表达式 ${day} 插入由 (?…) 组捕获的子字符串。
有几种静态函数使您可以在使用正则表达式操作时无需创建显式正则表达式对象,而 Regex.Replace 函数正是其中之一。如果您不想保留编译的正则表达式,这将给您带来方便
4.提取 URL 信息
以下代码示例使用 Match.Result 来从 URL 提取协议和端口号。例如,“http://www.contoso.com:8080/letters/readme.html”将返回“http:8080”。
[Visual Basic]
Function Extension(url As String) As String
Dim r As New Regex(“^(? \w+)://[^/]+?(? :\d+)?/”, _
RegexOptions.Compiled)
Return r.Match(url).Result(“${proto}${port}”)
End Function
[C#]
String Extension(String url)
{
Regex r = new Regex(@”^(? \w+)://[^/]+?(? :\d+)?/”,
RegexOptions.Compiled);
return r.Match(url).Result(“${proto}${port}”);
}
Mikel