unicode、utf-8、ansi的故事

我在网上看到的一篇很详细的讲这三种编码的文章。讲解的非常清楚,转过来给大家看看吧。

作者的blog是http://haoxiaobo.spaces.msn.com

快下班时,爱问问题的小朋友Nico又问了一个问题:
"sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思。"
并不是所有简单的问题都很容易回答,就像这个问题一样。于是我答应专门写一篇BLOG来从头讲讲编码的故事。那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起。嗯,也许这样开始比较好……

很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。
再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。
开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。
他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。遇上00x10, 终端就换行,遇上0x07, 终端就向人们嘟嘟叫,例好遇上0x1b, 打印机就打印反白的字,或者终端就用彩色显示字母。他们看到这样很好,于是就把这些0x20以下的字节状态称为"控制码"。
他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。大家看到这样,都感觉很好,于是大家都把这个方案叫做 ANSI 的"Ascii"编码(American Standard Code for Information Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。
后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用 127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128 到255这一页的字符集被称"扩展字符集"。从此之后,贪婪的人类再没有新的状态可以用了,美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧!
等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。但是这难不倒智慧的中国人民,我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。
中国人民看到这样很不错,于是就把这种汉字方案叫做 "GB2312"。GB2312 是对 ASCII 的中文扩展。
但是中国的汉字太多了,我们很快就就发现有许多人的人名没有办法在这里打出来,特别是某些很会麻烦别人的国家领佳节又重阳导人。于是我们不得不继续把 GB2312 没有用到的码位找出来老实不客气地用上。
后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准,GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。
后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK 扩成了 GB18030。从此之后,中华民族的文化就可以在计算机时代中传承了。
中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 "DBCS"(Double Byte Charecter Set 双字节字符集)。在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此他们写的程序为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值是大于127的,那么就认为一个双字节字符集里的字符出现了。那时候凡是受过加持,会编程的计算机僧侣们都要每天念下面这个咒语数百遍:
"一个汉字算两个英文字符!一个汉字算两个英文字符……"
因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码,连大陆和台湾这样只相隔了150海里,使用着同一种语言的兄弟地区,也分别采用了不同的 DBCS 编码方案——当时的中国人想让电脑显示汉字,就必须装上一个"汉字系统",专门用来处理汉字的显示、输入的问题,但是那个台湾的愚昧封建人士写的算命程序就必须加装另一套支持 BIG5 编码的什么"倚天汉字系统"才可以用,装错了字符系统,显示就会乱了套!这怎么办?而且世界民族之林中还有那些一时用不上电脑的穷苦人民,他们的文字又怎么办?
真是计算机的巴比伦塔命题啊!
正在这时,大天使加百列及时出现了——一个叫 ISO (国际标谁化组织)的国际组织决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码!他们打算叫它"Universal Multiple-Octet Coded Character Set",简称 UCS, 俗称 "UNICODE"。
UNICODE 开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ascii里的那些“半角”字符,UNICODE 包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位,所以其高 8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。
这时候,从旧社会里走过来的程序员开始发现一个奇怪的现象:他们的 strlen函数靠不住了,一个汉字不再是相当于两个字符了,而是一个!是的,从 UNICODE 开始,无论是半角的英文字母,还是全角的汉字,它们都是统一的"一个字符"!同时,也都是统一的"两个字节",请注意"字符"和"字节"两个术语的不同, “字节”是一个8位的物理存贮单元,而“字符”则是一个文化相关的符号。在UNICODE 中,一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了。
从前多种字符集存在时,那些做多语言软件的公司遇上过很大麻烦,他们为了在不同的国家销售同一套软件,就不得不在区域化软件时也加持那个双字节字符集咒语,不仅要处处小心不要搞错,还要把软件中的文字在不同的字符集中转来转去。UNICODE 对于他们来说是一个很好的一揽子解决方案,于是从 Windows NT 开始,MS 趁机把它们的操作系统改了一遍,把所有的核心代码都改成了用 UNICODE 方式工作的版本,从这时开始,WINDOWS 系统终于无需要加装各种本土语言系统,就可以显示全世界上所有文化的字符了。
但是,UNICODE 在制订时没有考虑与任何一种现有的编码方案保持兼容,这使得 GBK 与UNICODE 在汉字的内码编排上完全是不一样的,没有一种简单的算术方法可以把文本内容从UNICODE编码和另一种编码进行转换,这种转换必须通过查表来进行。
如前所述,UNICODE 是用两个字节来表示为一个字符,他总共可以组合出65535不同的字符,这大概已经可以覆盖世界上所有文化的符号。如果还不够也没有关系,ISO已经准备了UCS-4方案,说简单了就是四个字节来表示一个字符,这样我们就可以组合出21亿个不同的字符出来(最高位有其他用途),这大概可以用到银河联邦成立那一天吧!
UNICODE 来到时,一起到来的还有计算机网络的兴起,UNICODE 如何在网络上传输也是一个必须考虑的问题,于是面向传输的众多 UTF(UCS Transfer format)标准出现了,顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到 UTF时并不是直接的对应,而是要过一些算法和规则来转换。
受到过网络编程加持的计算机僧侣们都知道,在网络里传递信息时有一个很重要的问题,就是对于数据高低位的解读方式,一些计算机是采用低位先发送的方法,例如我们PC机采用的 INTEL 架构,而另一些是采用高位先发送的方式,在网络中交换数据时,为了核对双方对于高低位的认识是否是一致的,采用了一种很简便的方法,就是在文本流的开始时向对方发送一个标志符——如果之后的文本是高位在位,那就发送"FEFF",反之,则发送"FFFE"。不信你可以用二进制方式打开一个UTF-X格式的文件,看看开头两个字节是不是这两个字节?
讲到这里,我们再顺便说说一个很著名的奇怪现象:当你在 windows 的记事本里新建一个文件,输入"联通"两个字之后,保存,关闭,然后再次打开,你会发现这两个字已经消失了,代之的是几个乱码!呵呵,有人说这就是联通之所以拼不过移动的原因。
其实这是因为GB2312编码与UTF8编码产生了编码冲撞的原因。
从网上引来一段从UNICODE到UTF8的转换规则:
Unicode
UTF-8
0000 - 007F
0xxxxxxx
0080 - 07FF
110xxxxx 10xxxxxx
0800 - FFFF
1110xxxx 10xxxxxx 10xxxxxx

例如"汉"字的Unicode编码是6C49。6C49在0800-FFFF之间,所以要用3字节模板:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 1100 0100 1001,将这个比特流按三字节模板的分段方法分为0110 110001 001001,依次代替模板中的x,得到:1110-0110 10-110001 10-001001,即E6 B1 89,这就是其UTF8的编码。
而当你新建一个文本文件时,记事本的编码默认是ANSI, 如果你在ANSI的编码输入汉字,那么他实际就是GB系列的编码方式,在这种编码下,"联通"的内码是:
c1 1100 0001
aa 1010 1010
cd 1100 1101
a8 1010 1000
注意到了吗?第一二个字节、第三四个字节的起始部分的都是"110"和"10",正好与UTF8规则里的两字节模板是一致的,于是再次打开记事本时,记事本就误认为这是一个UTF8编码的文件,让我们把第一个字节的110和第二个字节的10去掉,我们就得到了"00001 101010",再把各位对齐,补上前导的0,就得到了"0000 0000 0110 1010",不好意思,这是UNICODE的006A,也就是小写的字母"j",而之后的两字节用UTF8解码之后是0368,这个字符什么也不是。这就是只有"联通"两个字的文件没有办法在记事本里正常显示的原因。
而如果你在"联通"之后多输入几个字,其他的字的编码不见得又恰好是110和10开始的字节,这样再次打开时,记事本就不会坚持这是一个utf8编码的文件,而会用ANSI的方式解读之,这时乱码又不出现了。
好了,终于可以回答NICO的问题了,在数据库里,有n前缀的字串类型就是UNICODE类型,这种类型中,固定用两个字节来表示一个字符,无论这个字符是汉字还是英文字母,或是别的什么。
如果你要测试"abc汉字"这个串的长度,在没有n前缀的数据类型里,这个字串是7个字符的长度,因为一个汉字相当于两个字符。而在有n前缀的数据类型里,同样的测试串长度的函数将会告诉你是5个字符,因为一个汉字就是一个字符。
希望这篇文章是NICO想要的.

Posted in iTech | 1 Comment

JSP中的4个Scope Object

Scope在English中的意思是范围,JSP中有四个限定范围的对象,分别是Page,Request,Session,Application;它们的范围依次增大!~
通俗点来说,这个范围就像变量的作用域一样!
一、Page
Page顾名思义就是页面的意思,它的范围最小,只作用在单一Page中,跑出这个Page就失效!可以分别用pageContext对象的getAttribute()和setAttribute()方法获得和设置属性值。
Page1.jsp

  1. <html>
  2. <head>
  3. <title>
  4. Page1.jsp
  5. </title>
  6. </head>
  7. <body>
  8. <% pageContext.setAttribute("userName","Tony"); pageContext.setAttribute("Pin","0907");  %>
  9. <jsp:forward page="PageScope2.jsp"/>
  10. </body>
  11. </html>

Page2.jsp

  1. <html>
  2. <head>
  3. <title>
  4. Page2.jsp
  5. </title>
  6. </head>
  7. <body>
  8. <%    String Name=(String)pageContext.getAttribute("userName");    String Password = (String)pageContext.getAttribute("Pin");    out.println("Name = "+Name);    out.println("Password = "+ Password);  %>
  9. </body>
  10. </html>

(语法加亮插件不支持JSP,HTML加亮搞得参差不齐,看着真别扭 T^T)
当Page1.jsp forward到Page2.jsp中后,Page Scope对象失效,因此在Page2.jsp中执行的结果是Name=null Password=null。所以,如果数据设置为Page范围的话,数据只能在同一个页面上取得,其它页面都无法获得该数据。
二、Request
Request的范围限定在请求和被请求的两个页面之间,随后这个属性就失效了。可以分别用request对象的getAttribute()和setAttribute()方法获得和设置属性值。如果有很多页面,范围都限定为Request的话,对象中的属性就一直生效并且可以在页面中传递使用。
参考以上Page1.jsp和Page2.jsp两个页面,如果把里面的pageContext对象换成request,Page2.jsp中就能正常输出结果:Name=Tony Password=0907
三、Session
Session,即会话的意思。它的作用范围是客户端与服务器建立持续连接的那段时间,与服务器断开连接后,这个属性失效。方法依然是上述的set和get,对象是session。例如上淘宝购物,用户登陆后,服务器与用户的Session就一直维持着,直到用户关掉浏览器。
四、Application
范围最大,时间最长,作用于整个Web Application中,也就说整个系统的页面都能使用application对象中的属性。就像全局变量要慎重使用,application对象使用不当会对服务器造成负担,所以三思而后用!

JSP中使用Java Bean,也要为一个Bean限制作用范围(默认为Page)。四个范围解释同上。使用方法是在定义一个Bean时说明:

Posted in iTech | Leave a comment

千年等一回~

大家好!
在下(原地)复活了啊(又开始宅了啊~)!

由于,
在上次更新到本次更新期间发生了太多的事情(焦头烂额,只好打游戏排忧解难,于是...算了...),

嘛以前的事一笔带过:
我家3.5级地薄雾浓云愁永昼震,
高达圈圈雷人结局(至今受不了钢加农+RX78+EXIA这种稀奇古怪的结局啊,揉脸)
Edit Pluse3 的ANSI和UFT-8的设置(乱码抓狂,差点去跳楼了!骗你的= =)
弄清了UTF-8和Unicode的关系(痛定思痛!不可以重蹈覆辙!)(需要补充技术文章)

在某个无聊之极的课上,
编译了一个Linux内核(从早上等到下午吃饭= =),
编译了一个Google Android平台(从早上等到晚上熄灯= =),
然后存放编译好的东西的虚拟机,
成功的坏掉了~
于是重新编译了一遍~(从早上等到早上 o(>﹏&lt ;) o )
但是从此觉得CLI很...萌~ o(*^__^*)o ( Make! ls! Make! cd~ Make! Make! ...)

后来喜欢上了Unlimited Sky~ Sky Chord~

以上~

这次更新的主要内容是:
虽然感觉,
做了一个破烂网站,
也被放在学校主页上了~
成就感满满~(低调!人生最得意的时候,就离悲剧不远的时候!)

人生第一次成功hack了一个破烂网站:
某山寨游戏自从6月23日起暂停激活某些游戏大区了,
6月25日晚宣布:暂停激活区域,是将被合并的区域,合并后,所有数据叠加( 激活就有价值¥100的初始数据啊)!
于是用了20分钟(包括查服务器大区资料的10分钟,下载安装firefox5分钟),
就成功hack了激活页面~
乐翻天了啊~
通告大头,
通告老大,
通告游戏战友,
觉得还不爽,
直接在贴吧上发帖,
意图提高贴吧知名度,
结果自然是被游戏官网发现了(知名度出乎意料的高啊= =),
仅仅18小时以后,
官网说:6月23日以后激活的账号无效~正在收集非法激活的玩家账号信息(你们要我账号干吗?!)~
于是我坚信:低调!人生最得意的时候,就离悲剧不远的时候!

J2EE课程设计终于不当“大哥”,
我头上还有个“大哥”,
于是在下无比轻松啊!
心情无比舒畅啊~
中午一口气灌了一瓶可乐~
嘛,好久没这么爽了!

以上!

下期更新:对MVC的想法以及Unicode编码理论

Posted in 未分类 | 1 Comment

ZZZzzz...点名...zzzZZZ

最近事情又多又无聊(下期更新详述),
还意外的非常消耗体力,
以致于好久没有更新,
但是已经把下期更新的内容提纲写好了(意外的勤奋啊~)。

当前很烦,
下午的课非常想翘掉(无聊、累人还影响心情,还是大头的嵌入式有意思啊...),
那就拿回答问题当理由翘课吧~

介绍开始~

问题介绍:
点名来自:http://vifix.cn/blog/roll-call-game-from-kudoki-dono.html

规则如下:

  1. 把你的播放器(或mp3)打开,放进你所有的歌,无序播放
  2. 点“一首”获得每个问题的答案
  3. 你必须写下那首歌的名字无论看起来有多傻
  4. 在歌名后面的括号里写下评论
  5. 点 10 个朋友

我所有的歌都有好好的整理在一个文件夹下没问题,

大多是320k采样的AAC(之前有一只iPod,无奈刮台风的时候掉水里了,质保过了,悲剧...),

所以文件夹比较小就不拿出来了...

而且,

因为小子收集了周杰伦全部的CD,

所以可能大多数是周董在回答...

好,

吸气~

平静~

回答开始~

1. 如果有人说,“这样行吗?”你说:

周杰伦(果然...)《暗号》-【八度空间】:

既然有暗号那么一定安排周密,

肯定行啦~

皇:Final Mission Start!

2. 你怎样描述自己?

后弦《给安娜》-【古·玩】:

原来我生出来就是送人用的...

3.你喜欢一个男孩/女孩什么?

Avril《Naked》-【Under My Skin】

OTZ

...好吧我承认...

不过绝对不仅仅就是这样的!(语无伦次了吧?)

我是有点信奉柏拉图精神恋爱的!(别狡辩了...)

OTZ

这个问题就到这里,

下一个...

4.你今天感觉怎么样?

周杰伦《我的地盘》-【七里香】

指着废物老师们:你们都被开除了!把学费还来!(感觉真好...)

那是不可能的...

5.你生命的目的是什么?

周杰伦《伊斯坦堡》-【Jay】

唔原来如此,

老大,

你快闪到伊斯坦堡去吧~

至于我嘛,

用飞机接我就去,

这么远累死了...

6. 你的座右铭?

《那一天的时光机》

貌似是哪个没看过的动画片的OP/END...

还是无损的(新放进去的啊)...

不过,

完全没感觉啊...

是说我容易后悔吗?

那倒是没错啊...

7. 你的朋友怎么看你?

齐藤理咏《献给所有人》

呃,

真是意外好的好人啊...

虽然我觉得回答的没错,

不过话说,

最近好人当得比较累啊(总觉得世界上好人太少了...)...

8、你怎么看你的父母?

后弦《九公主》-【九公主】

啊他们是皇帝皇后,

而且有些老了...

9.你经常考虑的事情是什么?

后弦《只爱火星人》-【古·玩】

后弦这个家伙,

尽写这些乱七八糟的歌,

出场率还意外的高,

真是很麻烦的家伙啊...

火星人!

带我和我的电脑(里面有游戏)一起走吧!

地球真的很危险啊(去火星无忧无虑的打游戏...)!

你们也千万小心,

别还没接到我,

就被河蟹掉啊!

10.你怎么看你最好的朋友

周杰伦《珊瑚海》-【十一月肖邦】

周董&(Lara):转身离开,有话说不出来(你有话说不出来),

海鸟跟鱼相爱只是一场意外~

...分手了...鉴定完毕...

11. 你怎么看你喜欢的人?

《だんご大家族》-CLANNAD End

意外的和谐啊...

老白,你是团子吗?(肯定要被打了...)

12. 你生命的故事是什么?

WestLife《To be with You》-【?】

一路有你的生命才精彩,

真理啊~

13. 你长大后想成为什么?

《奇迹之海》

唔~

意外的美好啊~

虽然罗德岛战记的没看过(听说是悲剧(?))...

不过这歌真是无比的好听啊,

像大海一样宽广银月啊,

很有奇迹的感觉~

我长大了就让我成为奇迹之海吧~

14. 你的爱好/兴趣是?

《泪水的另一边》-【机动战士高达OO Season2 OP2】

歌词是:我愿所有的人都不在悲伤什么什么的...

意外的美好啊~(我是治愈系?)

15. 你最害怕的是?

《The Next Door Exile》-未知的OP/ED

呃,

因为我习惯的是整张的转换,

所以总有些没听过没有感觉的歌...

就歌名而言,

害怕孤单是必然吧...

16. 你最大的秘密是?

Avril-《I'm with You》-【?】

...好可怕...

我是幽灵?

成天跟在别人后面吗...

还是我跟逢(哔-)河私奔了(嘿嘿嘿嘿),

不想让别人知道?

17. 当你看到喜欢的人你会想到什么?

《夜想》-【AIR?】

貌似是AIR的插曲,

非常的宁静和忧郁啊~

倒是很有我(暗恋时候)的风格...

18. 你婚礼的时候会挑哪首歌?

Linkin Park《Crawling》-【Hybrid Theory】

...重金属...

...很High的感觉...

那时我已经堕落到在地上爬的地步了吗?!

还是我找到了个女王...

19. 他们在你葬礼的时候会放什么音乐?

周杰伦《她的睫毛》-【叶惠美】

啊,

大家意外的欢快呐...

20. 你怎么看你的朋友们?

Avril《Thing I'll Never Say》-【?】

敏娜~

我绝对不告诉你们:

Merry me today~

21. 你会把这篇问卷叫什么?

WestLife《Soledad》

soledad不知道什么意思...

好像是西班牙语,

百度是:孤独的keeping...

这问卷有这么浪漫吗...

回答问题结束~

以上。

终于点名了啊!

不从身边人找,

大家都忙(忙什么就不好说了)...

老白(没有Bolg就写评论吧),OymzyOO,哈夫,我朋友本来就少,

就点这么多~

Posted in iLife | 1 Comment

...

上次写博客是6天前了,

这些天一直宅在家里(纸篓里的垃圾积累地好快,主要是不停地吃东西...),

按消耗时间排序,

做以下的事:

1.打游戏(永恒的主题,占了60%的时间...);

2.写验证码;

3.看动画片;

4.跟大头去打球。

唔,

 

正文:

之一:关于游戏:

这个这个(不好意思地挠挠头),

现在生活最容易的乐趣就是打游戏了:

抱着冲锋枪爆头的感觉太好了~

抱着狙击枪横行的感觉太好了~

One shot, one kill~

发现 = 死亡~

一天连续10小时不吃饭不睡觉~

结论是:没救了。

最近看到的说法是:

游戏助长短期的成就感(但是,所有真正的杰作都是一点一滴积累起来的)。

换句话说打游戏不好(这我早就知道了)...

唔唔,

我还是尽量找点别的乐子吧,

敲敲代码写写博客什么的?

 

之二:验证码:

这是正事~

看手册(声称是中文手册,其实一堆英文,大大降低阅读速度...),

翻网页(网上遍地的垃圾资料早就习惯了...),

参考别人的做法(方法是可以借鉴滴~,虽然程序代码一堆语法错误...)。

虽然是比较陌生的语言(手册在手,万事不愁!MSDN除外...),

一步一步,

从正确显示,

到加入噪点效果,

到更换字体,

到字体大小自由显示、字体倾斜、随机字体...

从最初的48行,

到现在有138行了。

嘛,

一直以百度的验证码为标准,

虽然过于花哨了点,

不过自己都觉得还可以啦嘿嘿嘿嘿...

上图

 

百度验证码

百度验证码

 

 

我的验证码

我的验证码

果然,

好东西都是一点一滴积累的啊。

这个难道就是传说中的,

长期(?)努力的成就感...

 

总结:

1.我有一个php的验证码类了,就算不用php,我应该也可以很快搞出来一个了;

2.转了一边真正的MVC(转晕菜了...),知道以前理解错了(汗!课程设计的时候满口的MVC,全是bushit...),可以好好想下MVC真正的意义了...

3.对字体有概念了,大概了解了下.ttf和.pfb(?)字体,给自己找了个满意的编程字体:Andale Mono(仅学习使用!不做任何商业用途!保证24小时删除!);

4.翻了很多遍php手册上的图像函数列表(这也算...)。

 

之三:看动画片:

龙x虎24话太劲爆了:

1.“再过两个月我就18岁了,

那时候你就嫁给我吧!”

不要同意!

老虎大人啊~

我整个人都求婚了...

还一边想着原来如此,

怪不得古河能改姓冈崎了(没看Clannad,怕伤感造成情绪消沉,然后拼命打游戏...)...

2.大人当然不同意啦,

怎么办?

“我们逃吧!”

“嗯!”

私奔了...

3.私奔到外公家去了(这算什么私奔?!),

逃到外公(龙儿老年版)外婆(泰子老年版),

“这个家伙,

是我老婆,

请多关照!”

我不嫉妒我不嫉妒我不嫉妒...

 

高达圈圈依照计划(谁的计划?)发展中,

没啥惊喜,

沙词找到路易斯了啊,

傻子纳完全进化了啊,

圈圈高达又发飙了啊,

伪九龙刷阴招被LockOn枪毙了啊,

那个超级玛丽的BF存在感太弱,

以至于到底是哈雷路亚还是阿雷璐亚一直分不清,

算了啊,

不好意思...

连个巨牛差无比的战术预报员联手,

敌人来多少死多少啊...

提耶利亚搞到Veda了啊,

就是一直不知道Veda到底是啥...

我还是喜欢游戏里的空战强袭(目前鄙人的第一座机,呼呼~)...

 

贫穷管家快看完了,

3000院Nagi很萌,

动画很恶半夜凉初透搞,

然后,

没剧情,

基本上,

没啥意思...

以上...

 

之四(代尾):大头的篮球 · 鄙人的游戏(拼凑):

大头坦克一样横行球场,

不停地把球放进篮筐里;

 

我畏畏缩缩(彻底的篮球盲,怕犯规...其实是体育盲...就看看F1...飙车我喜欢,不怎么用活动的...),

还拼命地跑来跑去装积极...

脚上满是和鞋子磨擦出来水泡,

满身臭汗...

 

于是,

打游戏的时候,

我就盯着大头打...

 

大头生气了,

一拍鼠标:“X!谁啊!”,

再看看:“哦,竹千代(鄙人用的游戏账号)啊...”

 

嘿嘿嘿嘿....

 

P.S.:

写这些的时候, 

喝的是无糖的可口可乐,

以前好像叫健怡可口可乐,

现在换了包装叫零度可乐,

广告词是:无糖,依然可口可乐。

嘛,

无糖,

依然那么难喝...

Posted in iDiary | 2 Comments

Tortoise SVN实用基础教程(有VSS基础) By Mac | vifix.cn | 奇迹の海

好用的Windows下SVN客户端——Tortoise SVN的下载地址:

http://tortoisesvn.tigris.org/

文档:

http://www.subversion.org.cn/svnbook/
http://www.subversion.org.cn/tsvndoc/

SVN 与 VSS 的区别:

VSS中,编辑一个文件,有一个锁定的概念,这样可以确保修改一个文件时别人无法修改这个文件

SVN和它思路不同,SVN中认为,项目中的参与人员,一般来说,分工明确的情况下编辑并不会冲突,所以并不特别重视锁定这个概念(但是SVN完全支持类似于VSS的锁定,独占一个文件的编辑)

即使编辑了一个文件,只要不是同一行,SVN还拥有非常智能的方式将它们合并进成为一个新的文件

只有在编辑了同一个文件的相同位置,SVN才会把文件标记为冲突,从而交给用户进行处理

TortoiseSVN(以后简称TSVN)使用:

所有操作,大部分操作在右键菜单的TSVN中,

后文中提及的大部分操作,

都是右键菜单操作。

正文

之一:建立SVN项目仓库

你也可以在自己的计算机建立SVN的仓库

方法是:

新建一个文件夹,比如d:svnmyproject

进入这个文件夹,右键->TSVN->Create repository here...

然后在你的项目文件夹(比如e:javamyproject1)里面导入项目:

进入e:javamyproject1,然后右键,TSVN->Import

输入:file://d:/svn/myproject/trunk

导入就行了

SVN支持http://, svn://, file://等多种协议

它本身(非TSVN,TSVN仅仅是客户端)可以作为服务器运行,也可以作为apache的模块运行

以后你在e:javamyproject1下面的提交之类的操作将会被记录在d:svnmyproject这个仓库里面

之二:下载项目仓库文件到工作目录:

现在,新建一个空文件夹

使用刚建好的SVN项目仓库地址(比如:file://d:/svn/myproject/trunk

右键空白处

选择SVN Checkout(检出)

之三:提交修改的文件

右键->SVN Commit

会出现一个提交窗口,Message里面写入关于这次提交的一个概要

这里我们进行一个约定

如果这次的提交以修改为主,那么Message前面加上@MOD,比如:

"@MOD 对README.txt进行了修改,加入了项目描述"

诸如此类

如果这次提交以添加新文件为主

那么@ADD,例如:

"@ADD 加入style.css样式表"

这是test项目,你可以随意编辑,随意提交,随意删除

但是不要删除任何的隐藏的.svn文件夹下面的内容,这个是SVN的信息

重命名是,右键文件->TSVN->Rename

删除是,右键文件->TSVN->Delete

注释:

  1. 锁定:锁定一般针对二进制文件编辑时采用,比如jpg, gif, doc之类的非纯文本文件
  2. 版本号:SVN中,任何提交,无论修改有多么微小,都会让修订版本号增加1
  3. ShowLog:右键空白处->TSVN->Show Log可以查看以往的提交记录;右键文件->TSVN->ShowLog可以查看与这个文件相关的提交记录

之四:恢复到以前的版本

SVN中的每个修订版的任何文件都可以被获取到,所以只要是提交过的文件,不用担心其修改的问题,即使改错了,也可以恢复到以往的任意一个版本

具体操作是右键文件(或空白处——针对当前文件夹)->TSVN->Update to revision

之五:编辑冲突

现在来演示一下冲突问题:

你把test.txt的asdf全部换成别的文字

但不要提交

我也来修改同样的地方,然后提交后,你再尝试提交

【以上是大哥教我的时候的聊天记录,可以选择的做法是:在两个文件夹下check out同一个项目仓库,然后在两个文件夹下同时修改,可以有同样的效果】

SVN会提示出错,然后阻止你的提交

你这时候右键->SVN Update

SVN会将服务器上的版本,以及你自己的版本都分别放一个文件,选择test.txt右键->TSVN->Edit conflict

是一个典型的diff程序,你可以在左右两侧分别比较

"Mine"和"Theirs"的版本的区别,然后右键冲突的地方,选择要哪个地方的版本

最后保存后,再度提交成为一个新的修订版【根据小子的实践,直接点击 mark as resolved就包括:save 和 commit,所以慎用此键】

之一:提交的原则

关于提交,有一些基本原则,提交上去的代码

1. 不影响到其它开发者开发的部分的功能

2. 可以运行,有程序bug没有关系,但是不要有错误(语法错误之类的)

在上面这个原则上,尽可能的多提交(当然也不用写两三行就提交一次,这个度要把握好),方便团队中的成员都拥有最新的版本

之二:发布最终的版本

最终发布的版本(术语叫生产环境版本),里面不需要.svn的数据,你只需要在项目文件夹里面,右键,然后TSVN->Export导出,或者右键拖拽你的项目文件夹,有Export here的选项

Posted in iTech | Leave a comment

...

之一:

之前从来不关心气预报,

出门前看见下雨就抓一把伞那种。

直到今年初(的一个昏昏欲睡的午后),

一位中国移动的姐姐给我打电话,

成功地引诱我制定天气预报的短信推送业务(主要说是半年免费)。

就算如此,

每天下午4点受到的冗长预报,

我只是瞟一眼温度就马上删掉(不要占用本来就不够的短信箱!)。

今天刮大风,

去好好学习的时候被吹的晕头转向七荤八素,

于是今天收到天气预报的时候多看了几眼:

威海明天西南风转南风,阵风8级,平均风力6级。

唔~(恍然大悟:原来真的这么大啊...)

以前在家从来没听过这么大风的天气预报...

(回忆:

偶尔的听到,

天气预报姐姐甜美的声音:合肥,风力3到4级...

我就直嘀咕:哇靠那么大风...

原来根本不算什么...

回忆完)

以前只觉得风大,

现在量化了...

 

之二:

很久以前(就是过年的时候,不知道算不算很早以前...)

小子决定学唱日语歌!

因为觉得非常好听(好听到感动哇),

所以觉得不会唱实在是太遗憾了(像失恋般痛苦...)!

唔唔~

从明天开始实施!

选定曲目:

《Trust You》

《Go Your Own Way》

《短暂而永恒的悲伤》

《奇迹之海》

备选:

《Unlimited Sky》

【对了发现我无意中选了个非常棒的域名:usky(取得时候很随便...当时想的是u = you),

可以当作是:unlimited sky,

有一种 "Impossible is nothing" 的感觉,

很棒的名字啊,大爱!】

 

尾:

前些日子和一帮兄弟在书店买书的时候,

碰到一位穿着厚重黑风衣的学长(?),

脸庞清秀眼睛很亮without glasses,

总是很安静微笑的,

低沉嗓音,

低调自信稳重(崇拜下)。

不知什么起因,

他在付款的时候,

从手腕上拨下两根橡皮筋,

现场上演魔术(刘谦春晚上表演的,两根橡皮筋搅在一起在拉开那那种)。

和春晚的表演完全一样,

然而就是没有距离,

就在这个小小的拥挤的书店里绽放,

精致,新奇。

我冲上去(崇拜地)围观,

收钱的姐姐惊叹好厉害好厉害,

学长(?)大人仍旧低调笑,

我觉得现场的气氛一下却活跃起来。

觉得生活中就是应该这些精致美好的事物。

我也想学(女生一定喜欢^_^)。

下次计划下!

Posted in iDiary | Leave a comment

...

小子太喜欢打游戏了(其实都是很垃圾的网游:CrossFire,SD 敢达 OnLine...),

主要是打游戏的时候太有成就感(它们打不过我哇哈哈哈)...

小子也喜欢看动画片(钉宫!钉宫!钉宫!钉宫!...),

就是觉得:很有趣啊... 

 但是,

小子打游戏或者看动画片,

就停不下来(整天整天地打游戏或者整天整天地看动画片)...

唔...

不能这样...

某大叔(丁瀚家老爸)说过:在你得到的时候,就必然有牺牲什么。

所以, 

因为我有目标(这个才是正真追求的人生价值啊),

我不能整天整天地娱乐(只能牺牲掉了...)。

又鉴于一娱乐起来就控制不住的问题,

小子决定,

根本不要碰游戏,

根本不要碰动画片。 

远离娱乐,珍爱生命!

唔,

都没办法... 

Posted in iDiary | 1 Comment

Vista 下 apache 安装 no service installed 问题解决

使用各种方式安装apache都找不到服务的情况下:

运行中键入:cmd ,出来DOS窗口( 使用管理员权限 )
键入: d:\ 注释:进入D盘,假如apache安装在D盘
键入: cd apache2 注释:进入D:\apache2\目录
键入: cd bin 注释:进入D:\apache2\bin\ 目录
键入: httpd.exe -k install -n apache2 注释:添加了apache2这个服务了,下面我们要启动它
键入: net start apache2 注释:启动apache2服务 关闭服务器是: net stop apache2
OK,问题解决.

 源自:百度知道

Posted in iPHP | Leave a comment