October 31st, 2008 by 张磊
昨天在项目里,同事用了一个ActiveX控件来把AJAX请求返回的字符串解析为XML DOM。这样的操作方式在Firefox下行不通,于是兼容性问题被摆到桌面上。一下子没有想到好的解决方案,后来一拍脑袋,用responseXML不就可以了! 在2005年,AJAX还算个新东西,它的全称是Asynchronous JavaScript and XML。我刚学习AJAX的时候,读了《Ajax Foundation》和《AJAX In Action》这两本书。从最基本的XMLHTTP开始,一步步打造装备了AJAX的应用程序——虽然在现在看来很多东西有点老土,但我依然觉得它们是非常适合想学AJAX的同学。 那时的书里也在灌输这个概念:用XML格式来发送响应信息。那时用文本+操作innerHTML是会被鄙视的,因为它不够灵活。也就是说,在最开始的时候,AJAX里的响应用的是XML,根本就不会有本文开始的问题。只要获取一下responseXML,就是一个XML DOM。只要再获取一下DocumentElement,就得到了DOM根节点。在上面随便用什么getElementById,和操作页面上的DOM元素没啥区别。 现在的AJAX应该很少用XML格式的响应了。操作innerHTML确实很便捷;就算需要更为灵活的数据,也有清晰好用的JSON。Rails框架还提供了RJS,可以返回javascript片段到客户端执行。其实这种思路是通用的,但拿rails来做,很容易。 其实,像XML这种臃肿的东西,注定不会在AJAX的世界里呆多久的。
December 21st, 2007 by 张磊
前日买的3本书,今天就到了。捧着沉甸甸的箱子,心里满满的。这次买的书之前有写,三本花了168.4元,卓越亚马逊的VIP帐号连一分钱都没给我省。捧着书的时候想起Livid一个摆满了O’REILLY的书架。大学期间我没买过多少专业方面的译著,今天简单统计了一下,买了博文视点的两本(Web开发敏捷之道第一版、第二版),买了华章的一本(算法导论),图灵教育的两本(数据结构与算法分析、AJAX基础教程),还有O’REILLY的一本(Ajax On Rails)。但是从图书馆借的书那就多了去了,觉得同样是翻译或影印外文,O’REILLY的书最靠谱。 3本书拿回来一看,传说中有70%和第一版不同的《Web开发敏捷之道第二版》,看看目录也没有增加多少东西,有点小失望。但是仔细看一下,确实有不少细节的更新。而且对于AJAX也加入了更多内容,还比较对味。 “Ajax On Rails“是英文版的,也还没有深入地看。主要内容是script.aculo.us和rails的协作。在前两本书中能看到,只要介绍script.aculo.us,就没有漏掉Drag and Drop的实现,而且都还附带了例子,很容易学。 第三本书是《算法导论》,读了前言。同我猜测的一样,越是站在高处看东西就越简单。高中时读霍金的《果壳中的宇宙》,像是在听故事。那个老头子的幽默,影响了我好久。
December 21st, 2007 by 张磊
有好长时间不用javascript,这几天用起来还有点不纯熟。不想看到再有人说javascript是rubbish,关键还是人怎么使用它。复习一下有关的知识: javascript中的数组 arr = new Array(); arr = new Array(num); arr = new Array(["item1","item2"...]); 数组的创建基本就这几种,我用的最多的是第一种。表面看起来,创建数组的时候提供一个整型参数可以创建一个定长数组,其实还是可以使用超出范围的index来设置数组元素的。比如用arr = new Array(3)创建一个数组,仍然可以用arr[100]=”item100″进行赋值。所以,还不如干脆用第一种呢。 javascript中的类 function Shop (name) { this.name = name; this.somefunc = function (){ } } 在JS中,声明一个类不是用class XXX,而是用上面的方法。Javascript中的类有些高级的用法,如果感兴趣可以看一下script.aculo.us/prototype这些库的程序,还是比较容易懂的。我自己掌握的就是上面这个简单的办法。使用的时候,通过shop = new Shop(name) 就可以创建一个Shop的类。 当然,类也可以包含方法,具体的用法,实践一下就好。 JSON 最初接触AJAX的时候,在我的启蒙书籍“AJAX基础教程”中看到过JSON。当时我用AJAX根本用不到XML(只用TEXT),所以也没打算去折腾这个看起来比XML复杂的JSON。 JSON是这样一个东西,可以把任何Javascript的对象、数组等数据编码为一个字串,而比同样内容编码为XML要省了不少空间。如果想向服务器发送一个或多个对象的信息,用JSON无疑是很方便的。关于JSON的具体介绍可以看这里。 想用JSON,需要先下载一个JSON的文件,地址是http://json.org/json.js。下载之后包含在页面内,对任何想编码为JSON的数据,只要调用一下toJSONString()就可以了。 比如一个数组定义为 arr = new Array(["item1","item2"]); ,使用arr.toJSONString()将返回[["item1"],["item2"]]。 上面说了编码JSON。想把原来的对象还原回来,只要用eval()函数。当然eval的效率值得商榷,不过还没进行过具体的测试。 此外,友情提醒一下,那个JSON.js文件里面注释占了一大部分。如果要用在实际的项目中,最好都干掉吧,不然很影响加载的速度。
December 3rd, 2007 by 张磊
现在是学习时间。 先摘一段huony的文章: …… 在学习这些课程的时候你可以学通,我发现计算机这个学科真是好,我们学一些技术,但是我们本身就是在学管理。 各门语言课程让你学会如何说话行文,编译原理让你学会如何针对“平台”切换说话方式,离散数学让你学会优化很多的流程,操作系统是一门很好的例子,我觉得是一门系统管理课程。计算机的操作系统是一个非常经典的“系统”,哪个系统不是处理器、进程和进程调度、信息传递机制、I、O组成的?学校是一个系统、自然界也是一个系统、社团是个系统,公司也是个系统。你在用计算机的知识去理解这些系统并学会多进程的合理调度、提升效率,你会发现这就是管理。 …… 上面的文字来自于Ases5周年那天我拿到的Ases文集。读了之后顿觉英雄所见略同,当然我对专业方面的认识和理解跟huony比起来还有很大差距。想想令狐冲学独孤九剑、张无忌学太极剑,学的都是剑意。当然,huony写文章不太多,感觉对标点的使用并不恰当。为了保持原味,我连标点都没改。 还有一段,是《Ajax模式与最佳实践》这本书上的: 置换模式明确规定,对外暴露的URL被看作是组件,它需要使用一个资源,这个URL不会与一个特定的表现(类似jsp)绑定在一起。 这本书不太适合初学者看。说实话,我自己花了一天时间把这本书谈的模式浏览了一次,具体的内容没怎么深入下去,但感觉冲击很大。在讲AJAX的同时,全书也在贯彻着REST,把URL视为可操作的资源。联想起了今年上半年参加阿里巴巴的侠客行大会时,听JavaEye范凯的讲座,用ROR开发REST程序。关于REST的更多东西,得自己找点资料了。 最近感觉视野极大地开阔,在电脑上累了就看书。前些日子借的《Programming Ruby》也看完了,和C/C++/Java这些语言们比起来,Ruby更让人感叹设计者的智慧(当然,发展到后面就是社区的智慧了)。是咱的邻居日本人哦。今天又花了几个小时看完了《AJAX框架解析与实例》,真正用的时候再去查吧。现在开始看厚厚的《代码大全》了,挺没感觉的。 也开始关注Nutch,Java总要好好了解。因为用到很多Java的特性,估计Nutch中爬虫这一块不会有很多其它平台的移植;但在搜索上,也许可以有其他平台上面的实现呢。 还在关注的是牙线(据说用牙线让人更健康),不过我的眼睛实在有崩溃的感觉。
November 30th, 2007 by 张磊
从图书馆一口气抱回了8本书,一路上的生人熟人都惊讶地看着我。回到宿舍时,胳膊软得连电话都举不起来了。软件设计师考试已经过去了,下一步想准备一下系统分析师。而我始终觉得要想搞定这些考试,一定的实践很需要,最好能有大量的实践。软设的下午题本来没底的,最后居然比上午题还高,我毫不怀疑自己沾了实践经验的好处。 一个学通信的朋友说他觉得到了大三课内的知识很难,当时我说,学习在更多时候是改变我们理解问题的方式的。其实我也没有全明白自己在说啥。在操作系统课里学的处理互斥的知识,不只可以用在操作系统上;学数据库设计处理多对多关系也可以顺便考虑下多夫多妻。事和物之间有说不清的联系,可是只有足够敏感且足够渊博的人才能一窥究竟。 距离挂失不到一周,中行给我补发的金卡就到了手里。卓越的退货是上门服务,速度也非常快。只剩下某个酒店欠我的钱没还,某人又给我一笔“巨款”。 今天借的书目(可以去当当网搜一下这些书的介绍): 《Ajax模式与最佳实践》《AJAX框架解析与实例》 《Programming Ruby》 《代码大全》 《系统分析师考试辅导》《系统分析师技术指南》《系统分析之路》《系统分析师考试论文试题分类分析与范文》 我看书很快,记忆力也很好,所以借来慢慢看 其实我一点都不喜欢写code。做一个东西有点像造房子,除了砌墙痛苦点,其他都还不错。围绕着用什么材料怎么设计结构把房子造好想主意的过程,还是很享受的。
April 9th, 2007 by 张磊
今天晚上有三个会,不过时间重合在一起了,只能去一个——这样正好,哈哈。开会的时候呢,我就顺便看了一下今天借来的《应用Rails进行敏捷Web开发》。 以前也借过ROR方面的书,比如这个。但是觉得讲得太过死板,看不进去。今天看着这本书,看着作者用相当生动的语言,描述着他轻而易举创建一个不小的应用,让我一下觉得ruby拉近了很多。 我回来之后就把书递给Alone,希望他能从中间学到一点东西。不过话又说回来,rails提高了开发的效率隐藏了更多底层的细节。所以如果你对HTML不熟悉,对基本的cookie这些不熟悉,还是选择PHP这种语言补一下的好。 晓光告诉我尝试了AJAX,觉得效果很好。但我自己还没有做好足够的准备去尝试做一个Ruby的应用。开发习惯迁移的代价是巨大的,而且我坚持认为Rails框架只有在熟练掌握ruby语言和框架特性的时候才可以被很好地发挥(比如test这些内容,虽然不影响开发,但绝对会在后期升级起到作用)。不知道rails的学习可不可以和开发一样,进行“需求->开发”的循环,哈哈。 V2Read的数据库里还没有《应用Rails进行敏捷Web开发》,要不可以把这篇东西当作书评了。 V2Read第一天,注册用户6人,其中3人来自Yellow,还有2位是我的朋友,剩下的是一位很和蔼的老师。最近的一次技术沙龙,我想就PHP进行整站系统的设计,以ProjectZLLP为例,谈一下。
January 31st, 2007 by 张磊
以前一直不留意51la的侧栏,今天看到有一个免费做SEO评测的,进去他们论坛,竟然也看到了BuyRen在申请做免费评测。顺便看了一下蚂蚁社区的评测报告。 过多JS对SEO有很大副作用,如果AJAX用的不好,恐怕事情会更糟。这是引用报告中的一段: 在google或百度中输入site:www.maayee.com,可以看到每条检索结果显示的内容非常相似,例如下面: 正在处理中,请稍候… 蚂蚁社区? 分享生活经验的博客社区. 专题文章用户. 首页 | 浏览蚂蚁 | 专题目录 | 蚂蚁指南 ? 登录?注册 | 消息?朋友?个人中心. 蚂蚁黄金线. 我在这里: 其实blogcn也是用着AJAX的,可是为什么SEO就没问题呢?那是因为blogcn把JS代码的片断移到了页面尾部,而把内容放在了前面。很多SB拼了命把内容藏起来,人家Google可不鸟你。 还有一个问题是关键词和描述。 1)大的分类重新编写 meta keywords和description,最好是人手编写;用户申请的专题时,让用户自己撰写专题描述然后把它放到 meta description;专题里面的贴子则可以直接使用贴子或者文章标题作为meta description 2)帖子的keywords 可以直接调用网页title(并不包含专题、类别和分类的名称),如果觉得太少则可以写模版然后调用即可 这个东西也是我之前在考虑的。在Project acid中有很好的体现。但由于别的原因(主要是页面不够规范),Acid的SEO很差。关键字和描述的变化可以极大地提升SEO质量,但是对于一套成型的论坛系统,恐怕改一下很难。 外链培育是一个web2.0网站的典型特征: 蚂蚁拥有很强的合作资源,外链资源丰富,但显然仍未充分利用。 例如,每个用户都是潜在的外链合作者,通过提供简单的代码服务,例如展示本人在蚂蚁发表或回复的帖子、管理或订阅的专题、好友,显示本人聚合到蚂蚁的博文 在蚂蚁的回复。。。等等,都可以诱导用户在博客中加入蚂蚁的外链。技巧上,可以将静态链接和动态代码结合,即在代码之前,加一个静态的说明性链接,而且这 段链接的文本应根据动态内容而多有变化。 如果这么做了,蚂蚁的外链数量和品质将取得很大的优势。 做这个需要一个好的思路。 再回到AJAX上。我觉得AJAX能带给用户很好的使用体验,但另一方面也让SEO变得困难。以内容为主的网站还是应该尽量避免使用AJAX,表把内容藏起来,Google看不到,大家也都看不到。 所有引用文字来自http://bbs.hongqing.org/thread-2175-1-1.html
August 8th, 2006 by 张磊
今天看到POPO在谈学AJAX的一个小问题。就是在异步发送数据以后,进行处理的函数中,函数体被包含在if(xmlHTTP.status==200){…}中(这种说法不准确,但一开始学习的时候情况确实是这样的)。 为什么要包含在这里面呢?我一开始在本机未通过服务器测试时,xmlHTTP.status的值一直为0,程序一直不正常。但是我把这个文件放在APACHE服务器文件夹里,通过http协议访问,就正常了。那么,这个200是什么呢?答案是,200是服务器返回的状态代码。 试想如果请求一个服务器上不存在的页面,会提示”错误404″。没错,这个404也是状态代码,表示“无法找到指定资源”。200是什么意思呢?是OK,一切正常,所有POST或GET得到的结果都会跟在后面。现在明白为什么要放这么一句if(xmlHTTP.status==200){…}进行判断了吧。 那再回过头来,为什么不通过网页方式访问,用文件方式访问不能得到正确的状态值呢?其实0并不是一个状态值(最小是100),它的值为0说明没有被初始化。通过文件方式访问根本就没使用HTTP协议,所以也不会有http的状态代码。 呵呵,写这篇文章,所有的学习都是建立在探索的基础上。
August 4th, 2006 by 张磊
今天早上可是一波三折。 5:30起来,打算继续昨天的思路,为这个exblog写一个自动保存文章功能的AJAX实现。可是后来一想,不知道这个破破烂烂千疮百孔的东西还能撑多久,又让我想到了神奇的WP。我下载来新的WP2.0.4,琢磨着怎么改进改进,能让它的rss导入好使一点。现在的问题是,编码不同,rss是gb2312(这个该死的gb2312害我不是一次两次了,我发誓以后做web能用utf-8的时候绝不会用gb2312),而WP支持的是utf-8。 我把生成的rss保存起来,然后新建一个空白的文本文档,把编码方式改成utf-8。然后从保存好的文件里将所有内容复制过来,编码转换就完成了。但导入的时候,CDATA内的东西好好的没问题,可是结束的地方多了一个”]]>”。一查知道,导入的时候,程序把”]]>”中的”>”替换成了”>”,所以就多出来了。 要修改这个,到admin/import/rss.php中,把第83行改成” $post_content = str_replace(array (‘<![CDATA[', ']]>’), ”, $wpdb->escape(trim($post_content[1])));”,这样就把<!CDATA[和]]>都替换掉了。 貌似这样已经可以了,但导入以后发现,原来rss里的图片不能正常显示。什么原因呢?只能说exblog对rss的生成一点都不重视,只是拿和网页上一样的内容放进来充数。后来的两个小时,我一直在试图解决这个问题,但始终不能完美地搞定。唉,exblog真是个好系统,用户黏度是很高的。 最后,想了这么一个办法。自己写程序,从exblog的数据库生成rss输出,然后通过wp导入——WP也真是的,居然不支持UBB(是我没找到么?),要不也许可以省好多力的。 在字符编码这一块,我的知识还是空白。空白是多么可怕啊……
June 1st, 2006 by 张磊
像我这样没有从基础学习上来的人往往总会被一些细小的东西难倒。昨天在做店评的某一个组件时,用上了AJAX,且成功了——本来这是很好的,我着实欣喜了一番。后来才发现,我做的东西在gb2312编码下只能显示英文,不能显示中文——有高手说改成itf-8编码情况会好起来,可是事实并非如此。 《foundations of ajax》这本书,我3月17日购于当当网,现在已经把它通读了三遍了,但是很遗憾,这本书里后台是使用java写的,所以我对浏览器端的ajax操作已经相对熟练,但是对和php协同工作还很是陌生。所以现在的我只会使用”innerHTML=”这样的方法来动态修改页面。可能下一步要做的是研究xml特别是php中操作xml。我还是很佩服自己学习的能力的——其实php中做xml我也涉及过——在寒假做的红包系统里。 还有一本比较贵的书《Data Structure and Algorithm Analysis in C》——全英文版的。我对其中的某些算法依然没有了解透彻。我不知道明年的ACM还有没有机会参加,但对算法的学习真的应该深入下去——虽然现在的算法荣誉已经不是什么大不了的事情,java流行说明人们对程序效率的要求再没有以前那么高了。