[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"list-\u002Farticles\u002F12":3},{"items":4,"total":131},[5,21,31,40,49,60,69,79,89,99,114,121],{"id":6,"type":7,"slug":8,"title":9,"date":10,"category":11,"tags":12,"body_markdown":15,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},110,"article","auto-backup-database","数据库自动定时备份","2010-02-19 13:09:00","tech",[13,14],"备份","数据库","\n原理很简单，用FTP把数据库下载下来，然后放到备份空间去。\n\n至于备份空间哪里找嘛，115网盘倒是个不错的选择，速度很快，而且重要的是，传上去的文件不能用FTP修改删除，只能在WEB中转移到永久空间，如果不转移就只保留三天，于是每天备份一下，没问题就不管它，有问题了就能找到三天之内的数据。\n\n但是，要到3级才给开通FTP。\n\n备份.bat代码：\n\n```bat\necho open sssky.net>beifen.ftp\necho shuhan>beifen.ftp\necho ***（密码）>beifen.ftp\necho cd \u002Fshuhan\u002Fweb\u002F00_other>beifen.ftp\necho get mydiary.mdb mydiary%date:~5,5%.mdb>beifen.ftp\necho close>beifen.ftp\necho open cnc.ftp.u.115.com>beifen.ftp\necho 1237565>beifen.ftp\necho ***（密码）>beifen.ftp\necho cd \u002Fupload>beifen.ftp\necho send mydiary%date:~5,5%.mdb>beifen.ftp\necho bye>beifen.ftp\nftp -s:beifen.ftp\ndel mydiary%date:~5,5%.mdb\ndel beifen.ftp\n```\n\n然后在自己经常能上网的电脑上，或者是服务器上每天定时执行这个就OK了。\n",null,0,"2026-08-28 04:37:17","published","",{"id":22,"type":7,"slug":23,"title":24,"date":25,"category":26,"tags":27,"body_markdown":30,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},150,"asp-mvc","mvc三层构架在asp中的应用","2010-02-13 14:44:28","web",[28,29],"asp","mvc","\n前段时间读了不少关于MVC的文章，试着在ASP中应用了一下，发现对于小程序，代码量会大幅度增加，但是逻辑清晰，数据封装很合理，以前需要仔细规划的代码复用竟然成了理所当然的事情。\n\n所谓MVC，即Model（模型），View（视图），Control（控制）三层架构。各部分各司其职，Model即底层构架，包含与数据库连接的部分，View即UI展示部分，与用户直接打交道，Control即控制层，负责接收View的请求并做适当预处理后交由Model处理，然后接收Model返回值并做格式化处理返回View层。简单地说，Model直接与系统底层如数据库等打交道，而不管数据出去后如何用，View只负责请求和展示数据，而不管详细流程，Control分别与View和Model打交道，并负责数据的验证、格式化等工作。\n\n写了一个获取用户资料的ASP中应用：\n\n先写Model层，定义数据库地址，打开连接数据库，获取记录。\n\n在写Model层之前定义了两个类：Cls_Config整站设置，包括数据库地址；Cls_DatabaseModel，负责打开关闭数据库连接。\n\nCls_ConfigModel.asp代码如下：\n\n```asp\n\u003C%\nClass Cls_ConfigModel\n\tPrivate i_datapath,i_sitename,i_sitedomain,i_mastermail\n\tPrivate Sub Class_Initialize()\n\t\ti_datapath=\"data\\testtdata.mdb\"\n\t\ti_sitename=\"testsite\"\n\t\ti_sitedomain=\"www.test.cn\"\n\t\ti_mastermail=\"master@test.cn\"\n\tEnd Sub\n\tPublic property get DataPath\n\t\tDataPath=server.MapPath(i_datapath)\n\tEnd property\n\tPublic property get SiteName\n\t\tSiteName=i_sitename\n\tEnd property\n\tPublic property get SiteDomain\n\t\tSiteDomain=i_sitedomain\n\tEnd property\n\tPublic property get MasterMail\n\t\tMasterMail=i_mastermail\n\tEnd property\nEnd Class\n%>\n```\n\nCls_DatabaseModel.asp代码如下：\n\n```asp\n\u003C!--#include file=\"cls_configmodel.asp\" -->\n\u003C!--#include file=\"..\u002Fpublic\u002Fcls_cache.asp\" -->\n\u003C%\nClass Cls_DatabaseModel\n\tPrivate i_config,i_cache,i_datapath\n\tPrivate i_conn\n\tPrivate Sub Class_Initialize()\n\t\tset i_cache = new Cls_Cache\n\t\tif i_cache.GetCache(\"Config\",\"DataPath\") = \"\" then\n\t\t\tset i_config = new Cls_ConfigModel\n\t\t\ti_datapath = i_config.DataPath\n\t\t\tCall i_cache.SetCache(\"Config\",\"DataPath\",i_datapath)\n\t\telse\n\t\t\ti_datapath = i_cache.GetCache(\"Config\",\"DataPath\")\n\t\tend if\n\t\tset i_cache = nothing\n\tEnd Sub\n\tPrivate Sub Class_Terminate()\n\t\tset i_config=nothing\n\tEnd Sub\n\tPublic property get Conn\n\t\tset Conn=i_conn\n\tEnd property\n\tPublic Function OpenConn()\n\t\tset i_conn=server.createobject(\"adodb.connection\")\n\t\ti_conn.open \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"& i_datapath &\";User ID=admin;Password=;Jet OLEDB:Database Password=\"\n\tEnd Function\n\tPublic Function CloseConn()\n\t\tset i_conn=nothing\n\tEnd Function\nEnd Class\n%>\n```\n\n其中Cls_Cache是一个缓存类，这里缓存了数据库地址。\n\n用户Model层Cls_UserModel.asp代码如下：\n\n```asp\n\u003C!--#include file=\"cls_databasemodel.asp\" -->\n\u003C%\nClass Cls_UserModel\n\tPrivate i_database,i_sql,i_rs\n\tPublic UserInfo()\n\tPrivate Sub Class_Initialize()\n\t\tset i_database=new Cls_DatabaseModel\n\tEnd Sub\n\tPrivate Sub Class_Terminate()\n\t\tset i_database=nothing\n\tEnd Sub\n\tPublic Function GetUserInfo(KeyType,Key)\n\t\tselect case KeyType\n\t\tcase \"uid\"\n\t\t\ti_sql=\"select * from [MYT_User] where UserId=\" & Key\n\t\tcase \"uname\"\n\t\t\ti_sql=\"select * from [MYT_User] where UserName=&#39;\" & Key & \"&#39;\"\n\t\tend select\n\t\ti_database.OpenConn()\n\t\tset i_rs = i_database.Conn.execute(i_sql)\n\t\tif not i_rs.eof then\n\t\t\tReDim UserInfo(i_rs.fields.count)\n\t\t\tfor i=0 to i_rs.fields.count-1\n\t\t\t\tUserInfo(i)=i_rs(i)\n\t\t\tnext\n\t\telse\n\t\t\tReDim UserInfo(2)\n\t\t\tUserInfo(0)=0\n\t\t\tUserInfo(1)=\"guest\"\n\t\tEnd if\n\t\ti_rs.close\n\t\tset i_rs=nothing\n\t\ti_database.CloseConn()\n\tEnd Function\nEnd Class\n%>\n```\n\nModel层构造SQL语句并查询，然后将记录集存入UserInfo数组，供Control层调用。\n\nControl层Cls_User.asp代码如下：\n\n```asp\n\u003C!--#include file=\"..\u002Fmodel\u002Fcls_usermodel.asp\" -->\n\u003C%\nClass Cls_User\n\tPrivate i_uid,i_uname,i_user\n\tPrivate Sub Class_Initialize()\n\t\tset i_user = new Cls_UserModel\n\tEnd Sub\n\tPrivate Sub Class_Terminate()\n\t\tset i_user=nothing\n\tEnd Sub\n\tPublic property get Uid\n\t\tUid=i_uid\n\tEnd property\n\tPublic property get UName\n\t\tUname=i_uname\n\tEnd property\n\tPublic property let Uid(Userid)\n\t\ti_uid=Userid\n\t\tCall i_user.GetUserInfo(\"uid\",Userid)\n\t\tFillInfo()\n\tEnd property\n\tPublic property let UName(UserName)\n\t\ti_uname=UserName\n\t\tCall i_user.GetUserInfo(\"uname\",UserName)\n\t\tFillInfo()\n\tEnd property\n\tPrivate Function FillInfo()\n\t\ti_uid=i_user.UserInfo(0)\n\t\ti_uname=i_user.UserInfo(1)\n\tEnd Function\nEnd Class\n%>\n```\n\nCls_User类中只定义了两个属性：i_uid，i,uname。当View层给i_uid或者i_uname赋值的时候调用Model层查询用户信息，然后用Fillinfo函数填写属性供View层调用。\n\nView层UserInfo.asp代码如下：\n\n```asp\n\u003C!--#include file=\"control\u002Fcls_user.asp\" -->\n\u003C!DOCTYPE html PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD XHTML 1.0 Transitional\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FTR\u002Fxhtml1\u002FDTD\u002Fxhtml1-transitional.dtd\">\n\u003Chtml xmlns=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxhtml\">\n\u003Chead>\n\u003Cmeta http-equiv=\"Content-Type\" content=\"text\u002Fhtml; charset=gb2312\" \u002F>\n\u003Ctitle>显示用户信息\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C%\nset User=new Cls_User\nfor iii=1 to 100\n\tUser.Uid=2\n\tresponse.write User.Uid\n\tresponse.write User.UName\nnext\nset User=nothing\n%>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n```\n\n这样调用逻辑就非常清晰了。\n\n试着加了一个循环（注释掉的代码），查询100个用户大约要3秒左右，看来频繁连接数据库开销确实很大。\n\n另外，循环的时候变量不能用i，不然只能显示第一个用户信息，不知何故。\n\n三层构架的大致思想基本算是掌握了，缓存应用还不够自如，模板类的实现还没开始。任重道远。\n\nPS：今天大年三十，祝所有人幸福安康！\n",{"id":32,"type":7,"slug":33,"title":34,"date":35,"category":26,"tags":36,"body_markdown":38,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":39},155,"read-exif-by-asp","ASPJpeg读取exif信息","2010-02-07 20:29:53",[28,37],"exif","\n最近在想怎么优化上传体验，QQ超大附件上传上有一个细节设计让我觉得特别向往，就是上传的时候与服务器文件进行对比，如果已经存在就不用重复上传，直接标记就完了。\n\n可以很遗憾的是这个功能不太容易实现，先说服务端，要进行诸如MD5之类的计算并不容易，在网上也没有看到用ASP得到文件MD5的例子（不通过调用其他组件）。\n\n而客户端，不装控件，通过脚本读取文件更是不可能的事情。想着FLASH也许可以，但是还是没找到实例。\n\n于是退而求其次，想想能不能在服务器识别重复文件。因为在校内混了这么久，发现有很多照片会被重复上传。于是想到提取图片的EXIF信息。\n\n以下部分是ASPJPEG提取EXIF信息的方法，记录一下：\n\n```asp\nPath = Server.MapPath(\"photo.jpg\")\nSet Jpeg = Server.Cr&#101;ateObject(\"Persits.Jpeg\")\nSet Info = Jpeg.OpenInfo( Path )\n\nFor Each Item in Info\n\n\tResponse.Write Item.Name\n\tResponse.Write Item.Description\n\tResponse.Write Item.Value\n\nNext\n```\n加上表格后效果如下：\n\n![读出的EXIF信息](\u002Fassets\u002Fweb\u002F2010\u002Fread-exif-by-asp\u002Fread-exif-by-asp-1.jpg)\n\n另外获取单项属性的方法：\n\n```asp\nInfo(\"Make\")\n```\n\n这样如果EXIF信息完全一样的就可以认为是同一照片了。\n","https:\u002F\u002Fassets.toobug.net\u002Fassets\u002Fweb\u002F2010\u002Fread-exif-by-asp\u002Fread-exif-by-asp-1.jpg",{"id":41,"type":7,"slug":42,"title":43,"date":44,"category":26,"tags":45,"body_markdown":48,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},156,"web-browser-situation-2010-01","2010年1月国内上网客户端情况","2010-01-30 17:58:01",[46,47],"浏览器","客户端","\n分析了一些第三方统计的数据，大致结果如下：\n\n## 网络接入：\n\n- 电信：55%\n- 网通：30%\n\n还有一些二级接入商像长宽之类的份额都很小\n\n## 搜索引擎：\n\n- 百度：75%\n- GOOGLE：20%\n\n仍然是百度和GOOGLE两大巨头主宰搜索市场，百度风头正劲。\n\n另外，腾讯SOSO表现比较突出，估计跟QQ客户端有关，再其次是SOGOU，其他的就不值一提了。\n\n## 操作系统：\n\n- XP：90%\n- VISTA\u002F2008：5%\n- 7：4%\n- 2003：1%\n\n其他系统可以忽略了。试图找到LINUX的身影，找是找到了，但是份额非常非常少，甚至低于WIN98。2000略高于98。\n\n## 浏览器：\n\n- 微软IE6：55%\n- 微软IE7：10%\n- 微软IE8：8%\n- 不明版本IE：7%\n- 360 IE6内核：12%\n- 360 IE7内核：3%\n- TT IE6内核：2%\n- MAXTHON IE6内核：1%\n- FF：1%\n\n- IE6合计：70%\n- IE7合计：13%\n- IE8：8%\n- 不明版本IE：7%\n- FF：1%\n\n目前在内核方面，IE6仍然占绝对优势，虽然设计师对IE6恨之入骨，但是无法逃避巨大的用户群。这个结果和操作系统的比例有极大关系。IE7和IE8普及率仍然不高，估计如果没有盗版装机光盘，这个比率还会低一点。IE以外的内核在中国基本没有市场，Firefox表现稍好，也才1%。CHROME，OPERA等可以忽略。\n\n## 屏幕分辨率：\n\n- 1024*768：40%\n- 1440*900：18%\n- 1280*800：14%\n- 1280*1024：5%\n- 1152*864：3%\n- 800*600：1%\n- …………\n- 1024*600：低于1%\n\n整体来看，屏幕分辨率离散度非常大，这跟目前市场上液晶面板乱七八糟的规则联系很大。1024*768和1440*900分别占领着标准比例和宽屏的老大地位。1200+，1400+，1600+甚至1900+的大分辨率开始出现并占有不小比例。800*600终于淡出视野了。特别值得注意是1024*600，上网本的比例仍然不大，但是绝对数量也不小。最高兴的是设计师终于不用再照顾800*600了，不过像1920的大分辨率怎么呈现又成了另一个问题。\n\n> 以上数量均为样本平均估计值，仅供参考。另外，在取样过程中发现各项数据跟网站类型还是关系挺大的，比如某IT类网站，IE6份额明显偏低，IE8和FF份额高出不少，甚至OPEAR都高于1%，来自GOOGLE搜索流量比例明显偏大。\n",{"id":50,"type":7,"slug":51,"title":52,"date":53,"category":26,"tags":54,"body_markdown":59,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},151,"dynamic-load-pics-with-jquery","jquery实现ajax加载图片","2010-01-29 22:19:57",[55,56,57,58],"JavaScript","jQuery","ajax","加载","\n最近在学习JQuery，想从原理上模拟一下无刷新的相册浏览。\n\n最先想到的思路是利用缓存，也就是先显示提示消息，然后get图片，在get完的时候回调，将img标签的`src`改掉，由于刚刚get过，有了缓存，所以图片会立刻显示出来。\n\n页面元素：\n\n```html\n\u003Cinput class=\"picbtn\" type=\"button\" value=\"Next\" \u002F>\n\u003Cdiv class=\"tip\">正在加载……\u003C\u002Fdiv>\n\u003Cdiv class=\"notice\">\n\t\u003Cimg \u002F>\n\u003C\u002Fdiv>\n```\n\n按钮的事件绑定：\n\n```javascript\n$(\".picbtn\").click(function(){NextPic();});\n```\n\n定义了一个数组PicArr用来记录所有图片。\n\nNextPic内容：\n\n```javascript\n$(\".tip\").slideDown(200);  \u002F\u002F显示提示\t$.get(PicArr[CurrPic],function(){\n\t$(\"img\").attr(\"src\",PicArr[CurrPic]);\n\t$(\".tip\").slideUp(200);\n\tCurrPic++;\n\tif(CurrPic>4)\n\t\tCurrPic=0;\n\t\t});\n};\n```\n\n在CHROME和FF下显示正常，IE6下异常，IE7、8未测试。\n\n后来在ASPRAIN的开发者 稽山草 的帮助下，思路改成了先改src，然后绑定onload事件，在onload中回调。\n\n核心代码：\n\n```javascript\n$(\"img\").attr(\"src\",PicArr[CurrPic])\n\t.bind(load,function(){\n\t\t$(\".tip\").slideUp(200);\n\t\tCurrPic++;\n\t\tif(CurrPic>4)CurrPic=0;\n\t});\n```\n\n后来一看基本正常了，但是仔细看还是不正常，图片顺序开始乱跳，跟踪了好久发现回调函数会多次运行。中间想到会不会是事件绑定的问题，因为`onclick`事件的绑定是`$(Element).bind(\"click\",callback)`，可以简写成`$(Element).click(callback)`，想到`$(Element).bind(\"load\",callback)`和`$(Element).load(url,callback)`会不会是一样，查资料写得都不怎么清楚，改了试一下，还是不一样，不过在chrome和ff下依然能工作，但是数据不太正常，IE下报错。\n\n再次检查 稽山草 给的代码，发现问题在哪了。\n\nload事件的绑定的是一个匿名函数，而当按钮按下时会再次绑定，所以会重复执行。于是将绑定`bind`改成`one`搞定。最终完整代码如下：\n\n```html\n\u003C!DOCTYPE html PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD XHTML 1.0 Transitional\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FTR\u002Fxhtml1\u002FDTD\u002Fxhtml1-transitional.dtd\">\n\u003Chtml xmlns=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxhtml\">\n\u003Chead>\n\t\u003Cmeta http-equiv=\"Content-Type\" content=\"text\u002Fhtml; charset=gb2312\" \u002F>\n\t\u003Ctitle>JQUERY动态加载图片\u003C\u002Ftitle>\n\t\u003Cscript type=\"text\u002Fjavascript\" src=\"jquery\u002Fjquery-1.3.2.min.js\">\u003C\u002Fscript>\n\t\u003Cscript type=\"text\u002Fjavascript\">\n\t\t(function($){\n\t\t\t$.NextPic=function(){\n\t\t\t\t$(\".tip\").slideDown(200);\n\t\t\t\t$(\"img\").attr(\"src\",PicArr[CurrPic]).one(load,function(){\n\t\t\t\t\t$(\".tip\").slideUp(200);\n\t\t\t\t\tCurrPic++;\n\t\t\t\t\tif(CurrPic>4)CurrPic=0;\n\t\t\t\t});\n\t\t\t\t\u002F*(\"img\").load(PicArr[CurrPic],function(){\n\t\t\t\t\t$(this).attr(\"src\",PicArr[CurrPic]);\n\t\t\t\t\t$(\".tip\").slideUp(200);\n\t\t\t\t\talert(CurrPic);\n\t\t\t\t\tCurrPic++;\n\t\t\t\t\tif(CurrPic>4)CurrPic=0;\n\t\t\t\t});*\u002F\n\t\t\t}\n\t\t})(jQuery);\n\n\t\t$(document).ready(function(){\n\t\t\tPicArr = new Array(\"1.jpg\",\"2.jpg\",\"3.jpg\",\"4.jpg\",\"5.jpg\");\n\t\t\tCurrPic=0;\n\t\t\t$(\".tip\").css({\"position\":\"absolute\",\"top\":\"100px\",\"left\":\"50px\"});\n\t\t\t$(\".tip\").hide();\n\t\t\t$(\".scoll\").click(function(){$.NextPic();});\n\t\t})\n\t\u003C\u002Fscript>\n\u003C\u002Fhead>\n\u003Cbody>\n\t\u003Cinput class=\"picbtn\" type=\"button\" value=\"Next\" \u002F>\n\t\u003Cdiv class=\"tip\">正在加载……\u003C\u002Fdiv>\n\t\u003Cdiv class=\"notice\">\n\t\t\u003Cimg id=\"img\"\u002F>\n\t\u003C\u002Fdiv>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n```\n",{"id":61,"type":7,"slug":62,"title":63,"date":64,"category":65,"tags":66,"body_markdown":68,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},62,"my-2009","2009掠影","2010-01-02 21:53:13","life",[67],"年度总结","\n2009年以快得不可思议的速度掠过去了，快得我都还没记下那些应该记住的事情，快得当我写下2010这四个数字的时候没有一点点概念。想起来写总结的时候是1月1日，可是真要写的时候却发现一点思路都没有，记忆一片空白。拖到今天终于还是要写的，只要借着以前的日志和状态之类的东西回忆一下2009到底干了些什么。\n\n## 一、经历\n\n2009年做得最多的事情还是和民乐团有关的吧。上半年到底做了些什么真的不大记得了，只是印象中好像比较上心，大约也就是关于音乐会，关于自己的笛子水平，还有关于惠惠当团长的事情吧。下半年的事情印象就清晰了，招新，换团干，准备音乐会，评优答辩，各种演出等等。\n\n音乐会是期盼了好久了的，每次想起来有自己的专场了就兴奋不已。之前还不止一次地跟朋友们谈起，要他们一定过来捧场。可是，最终音乐会还是流产了。从上半年推迟到下半年时，那个遗憾就真的足以让人丧失斗志。从下半年推到看不见的明年的时候，我差点哭了。基本上一个专场就是我在民乐团剩下的唯一的愿望了。\n\n有音乐会的动力，还有自己身为学长，要带好学弟学妹们的责任感，09年上半年我还是每天早上到团里去练笛子，水平也还算在以正常速度进步，不久到了瓶颈，老大说，在这个阶段要想进步，必须得苦练基本功，能出来就出来了，出不来估计一辈子也就这样了。到了暑假，练功就散了，一个月下来进步也不大，或者也可能是像老大说的那样，我要苦练，但是我练得还不够苦，所以感觉不到进步了。\n\n经历了一些波折，惠惠最终还是担起了民乐团的重担，而我说过的，if you do, i do。我不怎么在乎我在一个怎样的职位，我只是想尽力做些事情帮她一下。所以不管是在谱务部还是业务部，还是当了业务副团，我感觉我做的事情都一样，至少思维方式是一样的。\n\n招新、团长换届等事情再一次让我感觉到做一件事情的复杂。我觉得我是比较能把事情理顺的那种人，但还是觉得繁杂，有时候也在想其他的人面对如此复杂的事情会如何处理。不过我坚信，经历过就是一种成长。另外，答辩从理论上讲也是会触动我的，但是我之前已经有过两次评优答辩的经验，所以也算轻车熟路了。\n\n关于民乐团，最后一点，2009年的暑假集训，让我觉得很没有集训的感觉。\n\n2009年的经历还有几件事情让我印象深刻。\n\n第一便是暑假去了校内参加创意大赛并且获得了三等奖。其实当初是偶尔看到了这个比较的链接，刚好当时基本考完了比较闲，于是在截止日期前一天抽了一个晚上做了PPT发过去了。虽然时间比较短，但是其实还是比较自信的，因为毕竟做网站这么多年，想的东西也比较多，而且自认为比较正确。后来果然就入围了，风风火火地去了校内。在那里经历了非常难忘的两天，虽然很累，但是收获特别多：一方面是认识了一帮来自天南地北的朋友，个个都是顶呱呱的，同时也惊讶于原来在酒店住宿也可以住得妙趣横生；另一个更为重要的方面，是我关于互联网的大部分想法得到了肯定，坚定了自己继续往这条路走下去的信念。当然北京之行还顺便去了故宫、鸟巢，不能胜举。\n\n第二是做了一个非常美丽的美国梦。这个梦就像天上掉下来的一般，莫名其妙地被通知要去美国演出了，甚至连名义都不清楚。不过既然有这样的好事，努力是自然的，于是8个人的小乐队每天疯狂排练，比集训训练的时间还要长。我清楚地记得我有一个星期就上了两节课。现在想起来，那些天天往省歌跑的日子还在眼前，当时被批得要流泪的感觉还在。排练的结果是秒杀了艺传的民乐系，当时真是很爽，憋了太久的气终于有地方出了。不过后来各方面的原因，去不了了，看着剩下的人热火朝天地准备出国，尤其是还要跟他们一起排练，心里的滋味只有自己才感觉得到。当时朱老师告诉我这个消息的时候，我在她办公室很肆意地笑，晚上回到宿舍，趴在枕头上哭了。\n\n## 二、心态\n\n其实这一年，一直有一个梦。不断地破灭又不断地重现。不断有要我放弃的声音，不过我总在坚持，虽然连一个让我自己信服的理由也找不到。\n\n其实这一年很平静，真的很平静，虽然应该有些风风雨雨的历程。我觉得现在似乎很难有什么东西能让我再热血澎湃、激动不已了。\n\n暑假的时候有些躁动，经历过后就只想归于平静了，就这样看着身边的人，看着他们幸福的样子，那样其实也挺好的。\n\n不准备考研了，不再像以前一样壮志满怀了，不再能对着电脑写一整天的代码了。平静是不是有时候也可以理解为慵懒？\n\n## 三、成长\n\n其实关于自然科学方法论的东西似乎已经不再需要什么进步了，于是感觉收获甚少。\n\n关于其他方面，经历的事情在思考范围之外的似乎也不多，反而但是自己的思考空间越来越大了。或者触动我的该是两部电视剧？《大秦帝国》和《汉武大帝》又一次向我展示了人际关系的复杂，展示了利益集团的冲突，展示了帝王非同常人的英明决断，从这两部电视中学到了很多关于为人处事的经验。\n\n看清了未来的路，这是个艰辛的过程，但是我很庆幸我能想得很清楚。\n\n开始更加深刻细致地感受和处理人与人的关系。上半年完07笛子就剩下我和小权子两人了，太多的画面只能存在于照片中了。就两人，竞争气氛一下子消失得无影无踪。甚至连私人感情也伴着他频繁的约会一下子觉得淡了，虽然我知道兄弟间的感情是怎样的，但是一个人找不到玩伴的时候还是忍不住会觉得有些落寞。\n\n血浓于水的亲情时常让我不知所措，纯真的同学至情时常让我感动得无以言表，在大学还能碰到一两位能交心的老师也让我觉得幸运至极。\n\n各种各样的关系开始变得透明起来，一眼洞穿。开始仔细地思考和周围人们的关系，思考着一年两年，十年二十年后的关系。\n\n## 四、展望\n\n虽然平静，但是这一年似乎还是思考的东西太多，牵绊的东西太多，做的东西太少。那天在网上看到一个标题，如果能回到2009年1月1日，你会怎么过这一年？如果是我，我可能还会选择同样的方式吧，毕竟于我而言，这一年想通了太多的事情，而这些都是这个阶段必须想通的。经过这一年，未来的路已经勾勒出来了，希望接下来的一年能踏实地走下去吧，能收获自己的理想最好了，不能的话，也希望走的过程能让自己无悔。\n",{"id":70,"type":7,"slug":71,"title":72,"date":73,"category":11,"tags":74,"body_markdown":78,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},108,"how-to-develop-wubi-input-method","五笔应该用怎样的思路去开发","2009-12-22 14:35:32",[75,76,77],"开发","五笔","输入法","\n先说明一下，本人使用五笔已经近10年了，前前后后用过微软的王码86、五笔加加、陈桥五笔、万能五笔等等好多版本，最后还是锁定在五笔加加PLUS2.81上了。\n\n做出这个选择有两方面的原因。\n\n一方面是词库，五笔加加PLUS利用附带的工具可以自己选择和替换词库，我用的一个2.8万的词库，不多不少，感觉最好。之前用王码86感觉词库太少。\n\n另一方面是界面，五笔加加的界面看着很舒服，可以换皮肤是一个次要因素，主要因素是简洁，上屏速度快，给人干练的感觉，字打快的时候非常舒服。\n\n前几日一个朋友见我打字，问了一问题：五笔为什么快？\n\n我不知道搜狗五笔的开发者（看到QQ五笔也发布了，感觉也没做到很好，所以也同时在想QQ五笔的开发者）有没有思考过这个问题。\n\n答案是五笔的重码少，基本不用选字，大家可以想想如果你用拼音打字，你的大部分时间是花在哪里的，其实键盘的敲击时间是很短的，大量的时间是花在选字上的。王永民先生当年苦心研究的本质其实就是怎样去减少汉字的重码问题。\n\n明白这一点，我们再回头来看搜狗五笔（也包括QQ五笔），能够不选字直接上屏的字词已经远远少于五笔本来的样子，因为加了太多的词库。这一点肯定是受拼音影响太深了，因为拼音有重音，词库越大，在一定范围内，几个音节联合起来得到期望的字词的概率也越大，而五笔本来就是一个以单字为主，辅以少量词汇的输入法，当你注入太多的词汇时，只能增加选词的负担。\n\n所以我的观点：大词库是五笔的大忌，而不是应该拿来炫耀的！\n\n当初搜狗拼音因为有搜索的统计，凭词库（当然还有语言模型）一夜红遍大江南北。但是这个思路放在五笔上是行不通的。\n\n那么，五笔应该怎么走。我有两个观点。\n\n第一，五笔本来是一个不太能再深挖的领域，速度已经接近极致，再快是很困难的，所以不妨在其他方面做做文章，比如用户体验等等，不要再纠缠词库和速度。\n\n第二，如果非要加入词库，不妨借鉴拼音，加入语言模型的识别，也就是说，把五笔的单字输入模式（或者叫四码模式更恰当一些？）改成联合输入模式，就像当初的拼音，大家都在以词为单位时，微软的拼音是以句为单位的。比如“我是中国人”，编码为“Q W K L W ”，那么能不能改成“QWKLW ”（注意空格的区别）整体识别输出？当然，其中有些困难比如编码的拆分是可以预见的，但我想这个思路是不是可以试验一下，如果效果好，五笔的一片新天地又出来了。\n\n还有一个，这种模式的速度与五笔固有模式的速度相比有没有优势？我没有答案。\n\n长久积累的一些想法，供大家思考。也希望能得到有识之士的批评指正。欢迎讨论。\n\n> 本文发布在搜狐五笔论坛，原帖地址：[http:\u002F\u002Fwubi.sogou.com\u002Fbbs\u002Fviewthread.php?tid=146582](http:\u002F\u002Fwubi.sogou.com\u002Fbbs\u002Fviewthread.php?tid=146582)\n",{"id":80,"type":7,"slug":81,"title":82,"date":83,"category":11,"tags":84,"body_markdown":88,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},107,"diy-a-antivirus-udisk","真正让你的u盘百毒不侵（换电脑也不怕）","2009-12-16 18:02:26",[85,86,87],"病毒","杀毒","u盘","\nU盘病毒可以说已经成为了一个非常严重的问题，且不说有多少不能识别U盘病毒的人为其所害，即使像我这种能够识别U盘病毒的人也为一次又一次地删除病毒，恢复文件夹属性弄得没有耐心了，于是想到弄一个一劳永逸的办法。\n\n为照顾不太懂这方面的同学，我们先解释一下目前U盘病毒经常会做哪些事情。\n\n## 病毒的行为\n\n首先，病毒会将U盘根目录下的文件夹隐藏，然后生成同名的EXE文件，图标为文件夹的图标。比如U盘根目录下有一个文件夹名为“学习”，那么病毒会将它隐藏，然后生成一个“学习.EXE”的可执行文件，图标和WINDOWS默认的文件夹图标一模一样。如果在开启了“显示隐藏文件”和“显示已知类型文件的后缀名”的电脑上，能清晰地看到这一事实。如果你看不到，也不要紧，看一下属性，文件夹和文件的属性是不一样的。千万不要随意点击，不然点一次就是运行一次病毒。\n\n然后，大部分的病毒会在根目录写入AUTORUN.INF，这个文件的作用是用来实现病毒的自动运行的，具体机制见搜索。有了这个文件，U盘右键里的“打开”、“资源管理器”之类的就不再安全了，因为可能是运行病毒的途径。这里顺利多说几句，防止AUTORUN.INF起作用的方法很多，第一是软件，360安全卫士，USBCleaner之类的软件还有诸多杀毒软件都有这项功能，第二是从其他地方进入U盘，比如在开始菜单点右键进入资源管理器，或者直接按WIN+E进入资源管理器，或者在地址栏输入U盘盘符如“I:”，或者在CMD中进入U盘盘符然后输入“start.”等等。总之不要随意双击U盘图标或者通过右键进入。\n\n## 对症下药\n\n解释清楚了病毒的机理之后就可以对症下药了，关键的一步是阻止病毒在U盘里面写入文件。如果只是在你自己电脑上用，就很简单了，N多软件可以让WINDOWS只读不写，但是U盘经常会插到别人电脑上，如何在别人的电脑上禁止写入就是本文要探讨的问题了。\n\n如果你的U盘或者读卡器有写保护开关，那你就不用往下看了，因为你只要打开写保护，U盘就不能写入任何文件了，当然也不会中毒。\n\n没有写保护的U盘如何操作呢？本来想到了好几个思路，第一，让U盘在WINDOWS下识别成光盘，只读不写，这种方法可以实现，但是实现之后自己对U盘里面文件的操作将变得非常麻烦，第二，用加密软件，让U盘变成非WINDOWS下常规的读写方式，这个没有去试，不知道有没有这样的软件，第三，将U盘的剩余空间填满，不给病毒留空间，但是想了一下不太现实，首先要生成占位文件不是一种非常方便的事情，其次自己对文件的操作不方便，而且可能让程序异常，第三也不能保证小体积的文件无法写入。\n\n最后只能想到用NTFS的权限大法了。试验了一下午终于成功，跟大家分享一下。\n\n首先要将U盘格式化成NTFS格式，当然，备份好自己的文件就不多说了。可以当我们右键点击U盘图标要格式化的时候，发现格式中没有NTFS！这个问题网上给出了好几种解决办法，有一种是用软件，没去试，另一种是改设置，试验成功。打开U盘的属性，硬件，然后选中U盘（如果不知道哪个是U盘的话就都记下，然后把U盘拔了看少了哪个），属性，策略，改为“为提高性能而优化”，再格式化就有了NTFS了。压缩建议不开，因为开了拷文件会很慢。\n\n第二步就是设置权限，在U盘图标上点右键，属性，安全，将所有用户删除，然后再添加你的电脑的常用用户，也就是你登录系统输入密码时的用户，如果不知道的话右键我的电脑，管理，本地用户和组，然后看哪个是。对这个用户给予所有权限。再添加一个EVERYONE用户，对这个用户不给写入、修改之类的权限，但是要给读取的权限。\n\n到这里我们的主体工作就已经基本完成了，换台电脑试试，怎么样，是不是不能写入任何文件了？\n\n嗯。毒是防了，可是除了我们自己的电脑外，在别处不能拷文件进去了，那还要U盘干嘛？下一步就是解决在别处电脑上拷文件进来的问题。\n\n其实也是想了好久的，后来实在是发现病毒写文件和我们自己拷文件没有本质的区别，只是位置不一样，于是我们也只好专门开一个文件夹来拷文件了。\n\n将U盘插回自己常用的电脑上，然后新建一个文件夹，专门用来在以后拷文件。然后对这个文件夹设置权限，方法和前面一样，打开这个文件夹的属性，安全。直接点击高级，下面有两个选项，第一个去掉，是为了让这个文件夹和根目录的权限不一样。然后修改EVERYONE的权限。将“应用到”改为“只有该文件夹”，然后加上一些写入什么的权限，不要给“写入属性”“写入扩展属性”之类的权限，不然它会被病毒隐藏，这一步是修改了这个文件夹本身的权限。确定后再添加一个权限，用户名是EVERYONE，应用到“只有子文件夹和文件”，可以把所有的权限基本都给，除了最后的更改权限和取得所有者，当然还有最上面的所有权限。这一步是设定这个文件夹里面的文件的权限。也可以修改一下，比如给写入不给删除，这样这个文件夹里面的文件就只能写不能删了。\n\n好了，设置完了，这样你的U盘就彻底防毒了。要拷东西时就拷进指定的文件夹就OK。稍微有些不爽的是不能直接使用“发送到”功能写入U盘。\n\n> 本文所有菜单的文字均按WINDOWS XP的写的，如果是更高版本的系统可以自己看着办，方法都差不多。另外，这样制作出来的U盘是无法在WIN98和WIN ME下读取的，不过相信这个年代没有用这系统了的吧。另外UBUNTU是支持NTFS的挂载的，所以理论上在UBUNTU下可以读取，权限就不清楚了，这具具体没试验过。另外其他的LINUX也没试验。\n\n欢迎提出改进方案或者更好的方法！有问题欢迎探讨。\n",{"id":90,"type":7,"slug":91,"title":92,"date":93,"category":65,"tags":94,"body_markdown":98,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},56,"some-words-written-on-winter","写在初冬","2009-11-02 20:13:51",[95,96,97],"随笔","冬天","初冬","\n还没做好过冬的准备。一大早躺在被子里就瑟瑟发抖，走出宿舍，寒风刺骨。\n\n走进教室，一股暖流扑面而来，觉得很温馨。找了靠窗的座位，阳光暖暖地照在身上，有些受宠若惊，这是多久没有过的感觉了？\n\n塞着耳机，响起那些曾经再熟悉不过的旋律，地板上有些光点，反射着阳光，灿烂得无法想像。\n\n窗外北风呼啸，偶尔还会呼呼作响。树很高，针状的树叶很放松地垂着，随风摇摆，看过去，那就是舞蹈，优雅得很。\n\n想起很多往事，不由自主。\n\n想起高中时某年冬天，窗外漫天雪花，窗内是作文课。我在窗内写着窗外的雪花。\n\n想起某年春天，阳光暖暖的，我在阳光下懒懒的，一边喝茶一边写下《艳阳天艳阳心》。\n\n想起某年深秋，听着音乐，一边聊天，一边欣赏着阳光下看书的孩子们，然后不舍地踱进阴暗的工作室。\n\n想起某次上课，躲在后面，晒着太阳，懒洋洋地写下些文字聊以自慰。\n\n……\n\n今天才发现，冬天真的来了。\n\n冬天，它又来了，而我，还停留在某年夏天。\n\n又要感慨岁月匆匆、时不我待，又要感慨人生苦短、壮志未酬。是的，要做的还有太多。\n\n未来，越来越近了，可未来是否还有今天的灿烂阳光，却依然未知。都在猜想，都在预测，可是天气预报都报不准，谁又能预言未来？\n\n今天很灿烂，暖洋洋的，于是今天的我很放松，懒洋洋的。\n\n嗯，就这样。\n",{"id":100,"type":7,"slug":101,"title":102,"date":103,"category":104,"tags":105,"body_markdown":108,"permalink":16,"excerpt_src":16,"media_type":109,"media_title":110,"media_author":111,"media_url":112,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":113},5,"about-tvplay-hanwudadi","关于《汉武大帝》","2009-11-02 20:01:33","bmm",[106,107],"观后感","电视剧","\n![汉武大帝](\u002Fassets\u002Fbmm\u002F2009\u002Fabout-tvplay-hanwudadi\u002F01.jpeg)\n\n花了一些时间，看完了电视剧《汉武大帝》，又看了一些史料，大致了解了这段辉煌的历史。\n\n还是忍不住想说说电视剧。\n\n感觉这部电视剧不是很成功。\n\n1. 在情节的安排上，过于拖沓，很多事情拖得很久很久，甚至连汉武帝出场都拖到近20集。\n2. 在对史实的选择上有欠考试，整个电视剧就想武帝打匈奴，为了打匈奴整顿内政，完全不讲内政改革的一些细节和在国计民生方面做出的努力，对于中央集权、改币制这些东西也是一笔代过。而像武帝之后的事情则完全不提，空前盛世也只是以旁白的形式讲述了一段。\n3. 情节过渡不够自然。一方面剧情很拖沓，一方面镜头切得太快。尤其是最后，中间好像几十年的时间就不见了，直接进入武帝年老的反思期。中间的过渡太快，难以反应和接受。\n\n总体而言感觉不怎么样。不过能让我了解一段历史，它的作用也就达到了。\n\n> PS:最近终于把中国历史的大致脉络弄清楚了。\n","movie","汉武大帝","胡玫","https:\u002F\u002Fmovie.douban.com\u002Fsubject\u002F2411184\u002F","https:\u002F\u002Fassets.toobug.net\u002Fassets\u002Fbmm\u002F2009\u002Fabout-tvplay-hanwudadi\u002F01.jpeg",{"id":115,"type":7,"slug":116,"title":117,"date":118,"category":65,"tags":119,"body_markdown":120,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},52,"found-my-missing-udisk","u盘失而复得","2009-10-25 10:20:49",[95,87],"\n最近有点倒霉。收拾宿舍，发现手机耳机没了。前不久MP4耳机坏了，换了一副，在团里丢了。U盘又丢了。\n\n那天手机QQ，突然有个人加我，然后说捡到了我U盘，其实当时我还不知道U盘丢了。但是马上意识到它可能真的丢了，因为前一天吃饭时U盘在上衣口袋里面，吃完饭觉得热就把上衣脱了拿着，结果给掉出来了。\n\n不过还好有在U盘里放自己个人信息的习惯，这次丢了也真的碰到了好心人，真的按U盘里的联系方式找到了我。\n\n昨天晚上拿到了U盘，有点激动。\n\n发现我写东西越来越没条理了，懒得管了，反正也是为了纪念。感谢好心的人！\n\n> 2012年12月29日注：这个U盘在被我带到深圳后还是丢了，此后再没见这么漂亮而且速度这么快的U盘，每每对着龟速的进度条就会想起这个U盘。\n",{"id":122,"type":7,"slug":123,"title":124,"date":125,"category":65,"tags":126,"body_markdown":130,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"cover":20},57,"something-about-tetris","俄罗斯方块玩出来的心得","2009-09-19 12:39:10",[127,128,129],"心得","游戏","俄罗斯方块","\n暑假在家没事做，自己写了个俄罗斯方块，再无聊的时候就玩方块，结果后来发现好多道理都是可以从中总结出来的。不细说了，列举如下：\n\n1. 要有计划有方案，脚踏实地。\n2. 要对将会发生的事情有充分的预见并准备好方案。\n3. 烂摊子只要耐着性子还是很容易收拾的。\n4. 实在收拾不了的烂摊子不妨全部盖住从头再来。\n5. 计划以外的事情发生了不一定全是坏事，有时会有惊喜。\n6. 任何时候必须保持冷静。\n7. 专心做好自己的事情，别去关注太多事情本身以外的东西。\n8. 小心谨慎任何时候都不是坏事，大意会让人死得很快。\n9. 要有想法，有战略，有方法。\n10. 把希望押在唯一的事物上是不保险的，多留退路。\n11. 只要有心，资本累积可以很快。\n",190]