In: 没用的话
28 Nov 2008February 2002
“…Copernicus’ aesthetic objections to [equants] provided one essential motive for his rejection of the Ptolemaic system….”
- Thomas Kuhn, The Copernican Revolution
“All of us had been trained by Kelly Johnson and believed fanatically in his insistence that an airplane that looked beautiful would fly the same way.”
- Ben Rich, Skunk Works
“Beauty is the first [...]
In: 没用的话
28 Nov 2008本文是Taste for Makers的中文翻译, 经原作者Paul Graham的同意,公开发表.
<版权信息>
在保留和不改变本版权信息的前提下, 本译文可以自由地复制,变更和再发布.
Copyright 2002 by Paul Graham
原文: http://www.paulgraham.com/taste.html
中文译者: 戴雨文
<版权信息结束>
“哥白尼对天动说美学上的反对是他拒绝托勒密体系的重要原因…”
- Thomas Kuhn, The Copernican Revolution
“在Kelly Johnson的训练之下,我们狂热地坚信他的主张: 一架看上去很美的飞机飞得也会同样的美.”
- Ben Rich, Skunk Works
“美是第一道检验: 世上没有永久的地方容纳丑陋的数学.”
- G. H. Hardy, A Mathematician’s Apology
我最近与一位在MIT任教的朋友聊天. 他的领域现在很热门,来自即将成为研究生的申请表每年都潮水般地涌向他. “他们中的大多数看上去都很聪明,”他说. “我不能确定的是他们是否有鉴赏力.”
鉴赏力. 你现在不常听到这个词了. 不过我们仍然需要其中的概念,不管人们叫它什么. 我朋友的意思是,他希望学生不仅是好的技术人员, 而且会用他们的技术知识设计出美好的事物.
数学家称出色的工作是”美的”, 就象不论是过去还是现在,科学家,工程师,音乐家,建筑师,设计师,作家和画家用”美”来形容作品一样. 他们使用同一个形容词,是一种巧合,还是他们所说的有某种含义上的重合? 如果有重合, 我们能否利用一个领域里关于美的发现,去找到另一个领域(的美)?
对于我们设计者来说,这些不仅是理论问题. 如果的确有叫做美的东西,我们必须能够认识它. 我们需要好的鉴赏力来做出好的事物. 与其视美为空洞的抽象物, 我们不如把它看成一个实际的问题: 你如何做出好的物品?
如果你现在提起鉴赏力, 许多人会告诉你”鉴赏力是主观的”. 他们实际上是这样感觉的,所以他们这样认为. 当他们喜欢某样东西的时候,也不知道是为什么. 可能是因为它美,也可能是他们的妈妈有同样的东西,或者是在杂志上看到某个电影明星有同样的东西,或者他们知道这东西很昂贵. 他们的思维处于未经权衡的随心所欲的混乱状态.
大多数人从小就被鼓励让这种随心所欲处在未经权衡的状态下. 如果你取笑你的弟弟在图画书上把人的皮肤涂成绿色, 你妈妈可能会说”你喜欢你的方式,他喜欢他的方式”之类的话.
你妈妈这时并不是想教你重要的美学理论,她只不过想让你俩停止斗嘴.
就象成人告诉我们的许多半真半假的事一样, 这件事与他们说的其它的事矛盾. [...]
In: 新闻
27 Nov 2008新浪科技讯 北京时间11月26日消息,据国外媒体报道,YouTube日前与一个由日本23家最大的电视广播商和版权机构组成的联盟签署了一项许可协议,并表示用户上传的版权内容并非是一种威胁。两年前,该联盟曾谴责YouTube放任用户上传盗版内容。
YouTube表示,部署的一项新技术能够识别用户上传内容的版权所有人,为内容合作伙伴带来收入。YouTube负责内容合作业务的副总裁大卫·埃文(David Eun)在东京举行的一次新闻发布会上阐述了YouTube的商业计划,称将重点解决创收问题。
YouTube利用视频内容创收计划的核心是Content ID,该系统首先扫描用户上传的视频内容,然后与由版权人提供的参考视频数据库进行比对。埃文说,“这一技术将继续得到改进,但它的表现已经令我们相当吃惊了。”
在发现盗版内容后,内容提供商有三种选择:封杀盗版内容;跟踪盗版内容,了解哪些用户在何时观看了盗版内容;在盗版内容中插播广告获得收入。埃文表示,目前已经有约300家合作伙伴使用了Content ID,在约90%的情况下他们会选择插播广告。
埃文称,“在被观看次数最多的视频内容中,被合作伙伴声称拥有版权的用户上传内容多于合作伙伴自己上传的内容。对于一些合作伙伴而言,内容的被观看次数因此而增长了50倍,不但会提高广告收入,还使他们能够更了解用户喜欢哪些类型的内容。”
YouTube还在试验视频内置广告。埃文表示,试验表明,按点进率计算,视频内置广告的有效性比标准显示广告高8-10倍。
过去两年中,YouTube在日本的地位得到了巩固。日本已经成为YouTube最大的海外市场。
本帖不仅仅是分析文件,还把Discuz中模板解析这一原理分析了一下。转自www.discuz.net 作者:郭鑫
我记得我刚开始学PHP的时候,对模板解析实在是觉得很奇怪,不知道这个原理怎么实现的,后来看书看多了也明白有一个著名的Smarty在那,曾经也用过一段,不过感觉不是很好,就开始分析Discuz的模板技术是怎么实现的了,然后我把这个模板解析的代码分离出来了,觉得很好用,用了一段时间, Discuz的模板解析是用正则表达式替换一些模板中的规定的语言标记,然后呢,写到forumdata/templates中,再用include引用到index, forumdisplay等等中,和smarty的原理基本上相同,只是功能没有smarty那么多,smarty内建了一个cache来着…连个 User Guide都几百页…
呵呵,不过现在基本上两个都没用过,正则表达式好是好用,不过正则的效率不是很高,以前看PHP技术文档的时候说能不用正则就尽量不要用,那东西烦着,现在做什么项目基本上用的是框架,MVC的模式,View中的代码一般不用模板解析出来,混杂php代码在里面,也觉得不错,OOP的开发效率比较高,很多地方重用代码是很开心的~!
Discuz的模板解析要分析出来只要用到两个文件:./include/global.func.php和. /include/template.func.php,global只要一个函数就够了,template要全部的文件下面我就分开讲一下,会比较详细,大家耐心看:
Section One–./include/global.func.php—->template function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function template($file, $templateid = 0, $tpldir = ”) {
global $tplrefresh;
$tpldir = $tpldir ? $tpldir : TPLDIR;
$templateid = $templateid ? $templateid [...]
In: CSS| Javascript| Web前台相关
25 Nov 2008一、我们需达解决的麻烦
减少HTTP请求数. 减少HTTP请求数有什么好处
降低服务器跟客户端的建立和消除HTTP请求和响应Header的开销
减少服务器为HTTP连接的进程和线程的开销,如果可能,还会包括GZIP压缩的CPU开销.
减小被请求文件大小, 减少请求数据占用的网络带宽.
让用户更快的看到想要的结果.
提高客户端渲染速度.
让浏览器同时能请求更多的数据.
提高服务器相应速度.
通过版本化控制客户端Cache.
二、如何解决我们的麻烦
A.如何减少HTTP请求数
合并JS文件跟CSS文件。
合并框架图片以及相对变动较少的图片成一张,通过CSS背景切割来完成渲染,比如:加速图片显示。
合理使用本地Cache来缓存JS/CSS/IMAGE。
合理使用UserData缓存JS文件,对于FF用户可以单独请求服务器,这样能解决80%用户的问题.代码可以蓉儿(meizz)的js framework1(标注1)。
把JS跟CSS合并成一个文件
B.减小被请求文件大小,减少请求数据占用的网络带宽
压缩JS体积:删除JS中空白换行,注释,混淆把长变量换成短变量;
压缩CSS体积:删除CSS注释、写法尽量用简写;
使用(X)HTML+CSS方式搭建网站结构,提高CSS重用性,来减少(X)HTML文件大小;
使用服务器端GZIP压缩JS/ CSS文件,缩小传输文件大小。附注:Apache1跟Apache2的GZIP的效率跟方式不一样的,根据需要自行选择。
嗷嗷补充说明:压缩、合并JS和CSS都由程序处理。而不是自己手动去缩删,不然不利于后期维护。
C.让用户更快的看到想要的结果
用户对于一个站点的白页的忍受时间根据统计是8-12秒。白页的产生可能由于各种原因引起,我们能做的就是怎么让用户能变的稍微能等待更久。
方案1:多做一个引导页,让用户体会其中的变化
案例:mail.aol.com中的loading引导页
方案2:优先载入页面结构以及结构图片,后一步载入当前页面数据,再后一步载入Iframe,Flash等数据.让用户尽早的看到被打开页面的希望.
D.提高客户端渲染速度
这个问题就比较泛泛了,影响客户端的渲染速度有多方面的,主要目的都是提高程序方面的效率.
对于大索引的结构,尽可能的少用索引访问,能用访问兄弟节点的方式尽可能用访问兄弟节点的方式.
字符串拼接尽可能用数组方式
大规模添加节点数据,请不要使用appendChild方式,尽量使用类似innerHTML的insertAdjacentHTML方式,FF下需修正(标注1)
E.让浏览器同时能请求更多的数据.
浏览器默认只是支持单域名同时有两个HTTP请求,使用多域名将能把请求数提高,在网络条件优良的情况下,能更快的下载数据,呈现结果.
F.提高服务器相应速度
对于需快速响应的文件,把其放入快速响应的服务器,应该是不错的方案,优化方案请系统储备组提供.
G.通过版本化控制客户端Cache
通常js/css这类文件改动比较频繁,但是为了加载速度变快,我们有可能需要设定这类文件的过期时间为几天后,这样我们碰到的问题就是,如何及时更新这些在cache的文件?
通过一个简单的配置,通过修改JS的版本来及时告诉浏览器,这些文件必须重新请求了,不要继续使用浏览器cache中的数据. 方案有好几个:
手动改这些js的文件名
手动改这些js的路径
通过URL Rewrite方式来改重定位js路径
通过一个在高响应服务器上的一个js配置告知页面,这个页面该链接哪些JS文件
大版本不变,小版本不断追加,等一定时间后,统一更新,高效利用cache
标注
meizz的js framework还没出正式版,有兴趣在CSDN的页面翻一下
Firefox修正方式
1
2
3
4
5
6
7
8
9
10
11
function addHTML(oParentNode, sHTML) {
if(window.addEventListener) {// for MOZ
var oRange = oParentNode.ownerDocument.createRange();
oRange.setStartBefore(oParentNode);
var oFrag = oRange.createContextualFragment(sHTML);
oParentNode.appendChild(oFrag);
}
else {// for IE5+
oParentNode.insertAdjacentHTML("BeforeEnd", sHTML);
}
}
转载于:http://www.blueidea.com/tech/site/2007/4822.asp
最近在做一个整合 UCenter 的项目,下载了一份 uc开发手册,测试结果是这样的:
通过uch 登陆 可以同步登陆到论坛,但是不能登陆到 ucexample_1.php 和 2 这个开发手册自带的例子中。
但是通过ucexample_1.php 和 2 的例子登陆是可以登陆到 uch 和 论坛的
所有都是在配置正确的前提下进行,在 uc管理中的 应用管理 通信是要成功的。
那么问题是如何出现的呢?
看一下 api/uc.php
99-110行
//同步登录 API 接口
include ‘./include/db_mysql.class.php’;
$db = new dbstuff;
$db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
$uid = intval($get['uid']);
$query = $db->query(“SELECT uid, username FROM {$tablepre}members WHERE uid=’$uid’”);
if($member = $db->fetch_array($query)) {
[...]
CHKDSK命令可检查磁盘状态并显示状态报告,还能修正磁盘错误。
状态报告显示MS-DOS文件系统中的逻辑错误,该文件系统由文件分配表(FAT)和目录组成(CHKDSK不验证文件中的信息能否准确读出)。如果磁盘有错误,CHKDSK便会给出一条警告信息。所以,应不时地用CHKDSK来检查一下磁盘有无错误,以保证系统的正常运行。
一、CHKDSK命令的语法
CHKDSK drive:[[path]filename][/F][/V]
若要显示当前驱动器的磁盘状态,可用命令:
CHKDSK
二、CHKDSK命令的参数解释
(1)drive
指定要用CHKDSK检查的磁盘所在的驱动器。
(2)[path]filename
指定要用CHKDSK进行碎片检查的一个或一组文件的路径及名称,可用通配符(*或?)指定多上文件。
三、CHKDSK命令的开关项
(1)/F
修正磁盘错误。需要注意的是从其它应用程序(如Windows等)运行CHKDSK时不要选此项。
(2)/V
磁盘检查时,显示每个目录下的文件。
四、帮助信息的获取
如果不知道CHKDSK命令的用法也没关系,在DOS下随时打入CHKDSK/?便可了解其用法。
五、关于CHKDSK命令的注释
(1)状态报告的形式
MS-DOS按类似下列的形式显示CHKDSK的状态报告:
Volume MS-DOS_6 created 07-16-1996 10:40a
Volume Serial Number is 2111-59F0
629,424,128 bytes total disk space
638,976 bytes in 15 hidden files
1,146,880 bytes in 70 directories
120,766,464 bytes in 1,802 user files
506,871,808 bytes available on disk
(2)修正磁盘错误
在修正磁盘错误时,最好使用ScanDisk程序。详细信息可以参阅(SCANDISK)命令。用CHKDSK/F命令修正磁盘错误的显示信息如下:
10 lost allocation units found 3 chains
convert lost chains to files?
若按下Y,MS-DOS把每个丢失的链在根目录中以FILEnnnn .CHK形式的文件名存放文件,nnnn是从0000开始的数字。CHKDSK检查结束后,可以检查一下这些文件是否含有所需要的数据,如果有就可以对其进行编辑后使用,否则便可将其全部删除,以免占用磁盘空间。若选N,MS-DOS只修正磁盘,但不保存丢失的分配单元的内容。
如果不用/F开关项,CHKDSK将出示信息提醒用户是否文件需要修正恢复,但不进行实际的错误修正工作。
(3)ERRORLEVER参数
若CHKDSK没有找到任何错误,则返回到ERRORLEVER的值为0。如果找到了一个或多个错误,返回时ERRORLEVER的值为255。
六、使用CHKDSK命令的注意事项
(1)系统存在打开的文件时
当有文件打开时请不要使用CHKDSK。因为CHKDSK是假定磁盘文件处于关闭状态而设计的。当有文件打开时,相应的MS-DOS将会修改文件分配表和目录结构。这种改变并不一定立即进行,文件分配表和目录结构的改变发生在不同时刻。因此如果磁盘上文件打开时运行CHKDSK,就会把目录结构和文件分配表的不一致解释为出错,从而导致数据丢失或文件系统的破坏。因此,在运行其它程序,如Microsoft Windows时,千万不要运行CHKDSK。
(2)CHKDSK不能用于分配的驱动器和网络。
CHKDSK不能用于由SUBST命令形成的驱动器工作,也不能用于网络驱动器上的磁盘检查。
(3)物理磁盘错误
CHKDSK命令只能找到文件系统中的逻辑错误,而不能查找物理磁盘错误。要查找物理磁盘错误,请使用SCANDISK程序。
(4)坏磁盘扇区
CHKDSK报告中将坏扇区标记上“bad”,SCANDISK和其它物理磁盘错误修正程序也将坏扇区标记为“bad”,因此坏扇区不会造成危害。
(5)交叉链接的文件
如果有两个文件或目录共用同一磁盘空间的记录,CHKDSK会报告有交叉链接文件。如果CHKDSK发现有交叉链接文件存在,会显示类似如下信息:
is cross linked on allocation unit
CHKDSK不会修补交叉链接文件,即使指定了/F项。要修复交叉链接文件,需要运行SCANDISK程序,或者进行手工修复,然后复制到指定的文件中并删除原文件。
七、应用实例
(1)将CHKDSK的状态报告存入文件
可将CHKDSK状态报告重定向输出到一文件中保存,但注意重定向CHKDSK输出到文件时,不要使用/F开关项。例如:将CHKDSK检查的信息输出到CHK.LIS文件中,其命令为:
C:\DOS>CHKDSK A:>CHK.LIS。
(2)若检查C盘存储多少数据,还有多少剩余空间并修正磁盘错误,可输入如下命令:
CHKDSK C:
当遇到错误时,CHKDSK会暂停并提示信息。
(3)查找文件
利用CHKDSK与FIND命令结合管道功能实现在全盘的文件查找,这一命令格式不仅可以列出所查找文件的所在目录,而且还可以列出各目录中的同名文件,连隐含文件也不例外。值得注意的是使用本命令之前,应先用CHKDSK/F参数修正磁盘错误。例如在C盘上查找README文件,其命令格式如下:
C:>CHKDSK/VIFIND “README”
在以前的HTML标准下,要隐藏横向滚动条,只需要在CSS里加上
Body
{
overflow-x:hidden;
}
但是在现在的标准下”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”下面,上面的代码不产生任何效果,因为现在不是以Body作为容器,而是html标签,所以
加入:
HTML
{
overflow-x:hidden;
}
但是这样做了以后,在IE7下,鼠标滚轮上下滚动不起作用了,IE6下却是正常的。多加上一行代码就解决问题了
HTML
{
overflow-x:hidden;
overflow-y:auto;
}
解决WINXP系统开机后弹出Generic host process for win32 services 遇到问题需要关闭!
出现上面这个错误一般有三种情况。
1.就是病毒。开机后会提示Generic Host Process for Win32 Services 遇到问题需要
关闭”“Remote Rrocedure Call (RPC)服务意外终止,然后就自动重起电脑。一般该病毒会在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Run 下建立msblast.exe键值,还会在c:\windows\system32目录下会放置一个msblast.exe的木马程,解决方案如下:
RPC漏洞
详细描述:
最近发现部分RPC在使用TCP/IP协议处理信息交换时不正确的处理畸形的消息导致存在一个安全漏洞。该漏洞影响使用RPC的DCOM接口,这个接口用来处理由客户端机器发送给服务器的DCOM对象激活请求(如UNC路径)。如果攻击者成功利用了该漏洞将获得本地系统权限,他将可以在系统上运行任意命令,如安装程序、查看或更改、删除数据或者是建立系统管理员权限的帐户等.
已发现的一个攻击现象:
攻击者在用户注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Run 下建立一个叫“msupdate”(估计有变化)的键,键值一般为msblast.exeC:\windows\system32目录下会放置一个 msblast.exe的木马程序.
另外受攻击者会出现“Generic Host Process for Win32 Services 遇到问题需要关闭”“Remote Rrocedure Call (RPC)服务意外终止,Windows必须立即重新启动”等错误信息而重启。
建议到http://www.microsoft.com/security/security_bulletins/ms03-026.asp下载相应补丁。如果已受攻击,建议先拔掉网线,在任务管理器中结束msblast.exe进程,清除注册表中的相应条目,删除system32下的木马程序,最后打补丁。
第二种情况是排除病毒后,还出现这样的问题,一般都是IE组件在注册表中注册信息被破坏,可以按下面的方法去解决该问题:
1。 在”开始”菜单中打开”运行”窗口,在其中输入”regsvr32 actxprxy.dll”,然后”确定”,接着会出现一个信息对话 框”DllRegisterServer in actxprxy.dll succeeded”,再次点击”确定”。
2 再次打开”运行”窗口,输入”regsvr32 shdocvw.dll
3 再次打开”运行”窗口,输入”regsvr32 oleaut32.dll
4 再次打开”运行”窗口,输入”regsvr32 actxprxy.dll
5 再次打开”运行”窗口,输入”regsvr32 mshtml.dll
6 再次打开”运行”窗口,输入”regsvr32 msjava.dll
7 再次打开”运行”窗口,输入”regsvr32 browseui.dll
8 再次打开”运行”窗口,输入”regsvr32 urlmon.dll
如果排除病毒问题后,做完上面的几个IE组件注册一般问题即可得到解决。
3.如果电脑有打印机,还可能是因为打印机驱动安装错误,也会造成这个错误。解决方法如下:
重装打印机驱动程序。
一般情况下做到上面三步后,该问题即可得到全面解决。
svchost.exe是nt核心系统的非常重要的进程,对于2000、xp来说,不可或缺。很多病毒、木马也会调用它。所以,深入了解这个程序,是玩电脑的必修课之一。
大家对windows操作系统一定不陌生,但你是否注意到系统中“svchost.exe”这个文件呢?细心的朋友会发现windows中存在多个 “svchost”进程(通过“ctrl+alt+del”键打开任务管理器,这里的“进程”标签中就可看到了),为什么会这样呢?下面就来揭开它神秘的面纱。
发现
在基于nt内核的windows操作系统家族中,不同版本的windows系统,存在不同数量的“svchost”进程,用户使用“任务管理器 ”可查看其进程数目。一般来说,win2000有两个svchost进程,winxp中则有四个或四个以上的svchost进程(以后看到系统中有多个这种进程,千万别立即判定系统有病毒了哟),而win2003 server中则更多。这些svchost进程提供很多系统服务,如:rpcss服务(remote procedure call)、dmserver服务(logical disk manager)、dhcp服务(dhcp client)等。
如果要了解每个svchost进程到底提供了多少系统服务,可以在win2000的命令提示符窗口中输入“tlist -s”命令来查看,该命令是win2000 support tools提供的。在winxp则使用“tasklist /svc”命令。
svchost中可以包含多个服务
深入
windows系统进程分为独立进程和共享进程两种,“svchost.exe”文件存在于“%systemroot% system32”目录下,它属于共享进程。随着windows系统服务不断增多,为了节省系统资源,微软把很多服务做成共享方式,交由 svchost.exe进程来启动。但svchost进程只作为服务宿主,并不能实现任何服务功能,即它只能提供条件让其他服务在这里被启动,而它自己却不能给用户提供任何服务。那这些服务是如何实现的呢?
原来这些系统服务是以动态链接库(dll)形式实现的,它们把可执行程序指向 svchost,由svchost调用相应服务的动态链接库来启动服务。那svchost又怎么知道某个系统服务该调用哪个动态链接库呢?这是通过系统服务在注册表中设置的参数来实现。下面就以rpcss(remote procedure call)服务为例,进行讲解。
从启动参数中可见服务是靠svchost来启动的。
实例
以windows xp为例,点击“开始”/“运行”,输入“services.msc”命令,弹出服务对话框,然后打开“remote procedure call”属性对话框,可以看到rpcss服务的可执行文件的路径为“c:\windows\system32\svchost -k rpcss”,这说明rpcss服务是依靠svchost调用“rpcss”参数来实现的,而参数的内容则是存放在系统注册表中的。
在运行对话框中输入“regedit.exe”后回车,打开注册表编辑器,找到[hkey_local_machine systemcurrentcontrolsetservicesrpcss]项,找到类型为“reg_expand_sz”的键“magepath”,其键值为“%systemroot%system32svchost -k rpcss”(这就是在服务窗口中看到的服务启动命令),另外在“parameters”子项中有个名为“servicedll”的键,其值为“% systemroot%system32rpcss.dll”,其中“rpcss.dll”就是rpcss服务要使用的动态链接库文件。这样 svchost进程通过读取“rpcss”服务注册表信息,就能启动该服务了。
解惑
因为svchost进程启动各种服务,所以病毒、木马也想尽办法来利用它,企图利用它的特性来迷惑用户,达到感染、入侵、破坏的目的(如冲击波变种病毒“w32.welchia.worm”)。但windows系统存在多个svchost进程是很正常的,在受感染的机器中到底哪个是病毒进程呢?这里仅举一例来说明。
假设windows xp系统被“w32.welchia.worm”感染了。正常的svchost文件存在于“c:\windows\system32”目录下,如果发现该文件出现在其他目录下就要小心了。“w32.welchia.worm”病毒存在于“c:\windows\system32wins”目录中,因此使用进程管理器查看svchost进程的执行文件路径就很容易发现系统是否感染了病毒。windows系统自带的任务管理器不能够查看进程的路径,可以使用第三方进程管理软件,如“windows优化大师”进程管理器,通过这些工具就可很容易地查看到所有的svchost进程的执行文件路径,一旦发现其执行路径为不平常的位置就应该马上进行检测和处理。
由于篇幅的关系,不能对svchost全部功能进行详细介绍,这是一个windows中的一个特殊进程,有兴趣的可参考有关技术资料进一步去了解它。
姓名:郑玏
性别:男
职业:IT工程师
爱好:KTV、乒乓球、台球、五子棋、围棋、编程
语言:中文、英语、闽南语
Email: