推荐大家一个不错的Podcast网站 -
静雅思听(www.justing.com.cn) 是一个不错的音频下载网站,像我这样的上下班时间较长的同志都希望能多找到几个中文Postcast源,以免上下班ipod里的歌都听烦了。
静雅思听这个网站最近进行了改版,从而全部栏目支持了
Postcast在iTunes的订阅(以前只有好心牛人制作了位于
feedsky的三个栏目),不仅可以随心所欲的选择各种分类的podcast,而且不像feedsky那样限制单线程音频下载,实在是方便了不少,故此推荐一下.
今天偶然浏览水木社区的WarCraft版,看到了Sky在WCG中国区小组赛就已两败被淘汰的消息,确实有点震惊,今年WCG中国是不是有没有希望夺金了?
说起来很奇怪,本人不玩即时战略类的游戏,觉得又要生产又要战斗实在忙不过来(还是喜欢可以一边和咖啡一边慢慢玩的足球经理一类的游戏),但是却很喜欢在午休的时候看土豆网上的魔兽录像。有些事情就是这样没法解释,就像我其实从来就没玩过StarCraft这游戏,甚至没有看过整局的别人的战役,依然不妨碍我当年大学时每周在水木等小说《星皇争霸》的本日十大的更新帖子...
回到今天的话题,我于是顺着WarCraft版的转载找到了Sky的Blog,有趣的是我看到了Sky的一系列回忆的文章,从他小时候打星际的经历开始起。这一系列已经到了第10篇,很显然还会有很多续篇,因为还没有写到暴雪出品魔兽争霸的时间呢:)主要是我在Sky的回忆里面体会到了星皇争霸这在小说中才有的经历,网吧里的结识,战网上的磨练,战队间的比赛,当然还多了小说里没有的一份生存的艰辛,学业、生活费的困扰和父母对儿子的期待...总而言之强烈推荐本系列,我个人特别有感觉的是《回忆2 ID》-Sky这个id的由来,和《回忆8 冲浪网吧》- 一段典型的我高三时期的网吧的描述,印象深刻。
观后感,在中国能成为世界冠军肯定是一段艰辛的经历,需要非常人的毅力才行。让我继续期待Sky带给我们更多精彩的回忆吧,同时祝福他早日恢复状态,不要总和中国男足一样不能“走向世界”了:)
继上周重感冒在家躺了两天之后,本周四再次闹出人品问题,上吐下泻,肚子疼的想跳楼。更惨的是一吃东西就肚子痛,最后到周六下午前基本只能靠喝果汁补充体力。结果很多工作和
写了大半的blog也耽搁了几天,唯一的一点好消息是经过这次折腾体重降了3公斤...
周末带着从死神手里爬出来的大无畏精神,和大学同学勇敢的看了电影
赤壁(因为
万达影城一整天都只放赤壁, 囧),由于事先在网上看到一些评论,所以期望很低,被里面的诸葛亮雷到了几次后觉得金城武还是很有喜剧天赋的...
补充完精神食粮,我们几个好友又直奔
海底捞(别忘了我之前还只能喝水,不过为了美食,这次带上药献身一次),席间同学都说我是缺乏锻炼,身体才这么差,提到以后多组织足球和乒乓球活动,有点期待,真的好久不运动了。身体是革命的本钱 ,为了伟大的革命事业,为了能为全人类的幸福做出贡献,我必须要加强锻炼,提高体制,健康的为祖国工作50年...(多么光辉的口号啊)
p.s. 有踢球打球的同志们赶快找我哦
Creating the wrapped element set
选择页面元素
多数jQuery操作的第一步,就是先选中页面中已存在的元素,然后对其进行操作。jQuery选择器很强大,完全支持W3C的css选择器语法(包括ie6上不支持的高级选择器),并且不依赖浏览器的css选择器的支持,是完全多浏览器兼容的,例:
- $("p a.specialClass")
- $("a[href*=jquery.com]")
- $("p:even")
- $("form > div")
- $("ul li:nth-child(2)")
jQuery还支持一些自定义的特别有用的选择器,例:
- $(":checkbox:checked:enabled")
- $("div p:not(:hidden)")
全部的选择器,可以查看JQuery官网的
选择器列表,比较多这里也没法一一介绍。另外推荐jQuery in Action一书
附赠源码中的选择器实验室,可以用来练习。jQuery使用插件也可以支持按照XPath选择元素。另外两个小的注意事项
- 除了nth-child的下标从1开始之外,其他涉及位置和下标的选择器,如eq都是0开始的
- :not 括号中只能跟过滤型选择器,而不能是选择型的,如p:not(:hidden)可以:not(p:hidden)不可以
建立新的元素
另外一部分的jQuery的操作始于新建新的页面元素,同样使用$,这个在第一章中讲过,这里还是有两个小注意事项:
- 新建元素可以省略后面的闭合标记,jQuery能自动补齐,如$('<div>')
- 不能用来新建script标记
管理被包装的元素集
“被包装的元素集”(wrapped element set)其实就是前面两点提到的选择的页面元素和新建的元素的合集。这些元素被选出来以后可能会需要一些管理,如取部分或是按照一个条件过滤等等,常见的作用于被包装的元素集的管理函数如下:
- size() - 获取元素集中元素的数量,如:$('a').size()
- get(index) - 访问元素集可以像数组一样,$('a')[2]就是取第三个元素,当然为了jQuery链也可以写成函数形式,如: $('a').get(2)
- add(expression) - 将$(expression)的到的元素添加到现有元素集中,jQuery链时格外有用,如: $('img[alt]').add('img[title]'), 有人说这和$('img[alt],img[title]')没什么区别吗,但是看了这个jQuery链的例子你就明白了, $('img[alt]').addClass('a').add('img[title]') .addClass('b')。当然也可以用add直接添加新建立的元素,如:$('p').add('new Element there!')
- not(expression) - 在元素集中去掉参数表达式所匹配的内容,和expression中的:not类似,如$('img[title]').not('[title*=puppy]')就等同于$('img[title]:not([title*=puppy])'),同:not,not()元素也只支持上文提到的过滤型选择器
- filter(expression) - express可以是string或者function。当传入string类型时,就是一个和not()动作相反的函数,在 元素集中去掉参数表达式不匹配的内容。当传入function时,通过function的返回值过滤所有返回false的元素,这样可以处理一些复杂的过滤动作,在function的上下文中this就表示当前待过滤的元素,例:$('td').filter(function(){return this.innerHTML.match(/^\d+$/)})
- slice(begin,end) - 和get()类似,是按照数组的处理方法截取元素集的方法,参数的含义和普通的数组的slice是相同的,如:$('*').slice(2,3);
- find(selector) - 在元素集中进一步进行选择,如wrappedSet.find('p cite'),其实就等同于$('p cite',wrappedSet)
- contains(text) - 在当前元素集中查找含有text的元素然后返回这些元素组成的集合。
- is(selector) - 检查元素集中是否至少有一个元素满足selector,如果是就返回true。如:var hasImage = $('*').is('img');
- 最后是一组按照被包装的元素集的DOM的上下关系组成新集合的方法:children(), next(), parent(), parents(), prev(), siblings(), nextAll(), prefAll(), contents(). 这些方法都是按照字面的意思返回一个新的元素集,除了contents外,都支持附带一个expression参数像filter函数那样进行过滤,contents函数主要用于获取iframe的内容
jQuery链所需的函数
除了管理元素集的一些函数外,还有几个可以处理元素集的函数,他们几乎是为jQuery链所生,如:
- clone() - 克隆
- end() - 将当前操作元素集调回到上一次的返回元素集。前面提到的若干函数和clone都是会返回一个新的元素集,有时候我们需要原来的那套元素集继续操作(如果不是jQuery链,大可使用两条语句,也就不需要end了,但是要一条链完成,就需要end了),举个例子: $('img').clone().appendTo('#b').addClass('a') 只能把克隆的那一份图片添加css类,如果要想给克隆前的那些图片添加类,就可以写作$('img').clone().appendTo('#b').end().addClass('a');
- andSelf() - 概念类似,将当前和上一次的元素集合并在一起作为新的当前元素集
最后小结,选取元素,选取复杂的元素集,做一些适当的过滤或是取其父节点或是创造一个新元素,这些正是Javascript操作DOM流程的第一步。jQuery提供了超级豪华的选取方案经常可以用几种不同的方法达到选取目的,这是为下一步修改这些元素做好准备。
链接:
《jQuery in Action》 in action系列
Open Library -
http://openlibrary.org 是我从
Aaron Swartz的网站上找到的一个有趣的网站。它的口号是“
One web page for every book”,声称要收集每一本发行的书,并且我已经能够在Open Library看到很多带全文的图书了。不过有关图书信息管理并不是我感兴趣的话题,我是发现网站的多国语言支持系统很有趣。
Open Library的整个网站都是一种创新型wiki,网站的每一个动作,如修改主页(当然,普通用户没有权限)或是
添加一本新书,实际上都是在修改或创建一个wiki页面,挺有趣的主意。同理,为网站添加中文支持,也是在创建和修改一系列wiki页面: 在主页上能找到一个
翻译页面的链接,里面列举了所有国家的语言,只要我们编辑好中文的i18n字符串(操作若干i18n相关的wiki页面),网站的语言选择下拉菜单中就会自动多出中文的选项,这样所有用户都可以使用中文翻译的系统界面了。
这种多语言的支持的好处是显而易见的,尤其像这种非营利的org网站,可以让来自世界各地用户用他们熟悉的i18n类似的字符串翻译来自发的帮忙对网站进行翻译,同时由于有wiki的版本控制,也不用担心翻译中的各种损坏问题。
我第一次去Open Library的时候还没有中文翻译在上面,于是花了一周左右的业余时间,一天翻译十几条词汇,算是把中文界面添加了进去。不过由于不熟悉图书馆里的一些专业术语,有的地方还是随便翻译的。目前Open Library已经有10多种语言的版本了,这就是"
You"的力量所在。
不过Open Library现在还是beta,我翻译的时候遇到过几次页面出错,导致不能保存的情况。不过估计开发人员看到了log,第二天我再看的时候就已经修复了,不过是丢了一些词条罢了。希望不要哪天我翻译完的部分又丢了才好:)
Firefox3的首发日6月17日已经过去半个月了,几天前收到了
spreadfirefox.com的邮件,大意是确认Firefox Download Day破了24小时下载软件的吉尼斯世界纪录。
提起Download Day的说法,想起17日当天在
叽歪网上的笑谈:由于访问人数众多,Firefox3的下载网站瞬间就Down掉了,有人说
这是Download Day还是Downtime Day啊,我突然想起一种叫法,就叫"D-Day"吧,这样Download,Downtime都占了,还取其反攻IE市场的含义。
上面的邮件中提到D-Day一共有
8,002,530次Download,里面好歹也有我一次的记录啊,从某种意义上,也是参与打破了吉尼斯世界纪录是不是?spreadfirefox.com就很了解用户的这种心理,特地提供了为所有下载者提供
打破纪录的资质证明的页面,实际上随便填上用户名就能自动生成一个pdf版本的证书。

另一则新闻也值得大家注意,在
cnBeta的文章指出,Firefox3的市场占有率已达4%,算上Firefox2合起来有19%的市场占有率!虽然这应该是来自国外的统计,在中国FF还远达不到19%的市场占有率,不过FF的崛起是大势所趋,至少我身边一些的人也开始用Firefox了,使用Firefox不再被看作另类了,所有只支持IE的网站们该觉悟了。
最后以一句spreadfirefox.com邮件中的口号来共勉每一位Firefox使用者,并作一个有气势的结尾:
You are now part of a World Record and the proud owner of the best version of Firefox yet!

jQuery in Action是最近在上下班路上看的一本书,原本由于接触过一些
jQuery的代码,而且我也不是特别能刻苦钻研的人,所以并没有打算仔细研究jQuery的意思。不过近期实在没有技术文章可写,所以打算写一个
jQuery in Action一书的缩微笔记。正如in Action系列书目的出版目的 - “the In Action books are designed to help learning and remembering.”,我就写一个《jQuery in Action》 in action:)
chapter 1 - Introducing jQuery
- Unobtrusive JavaScript
这个词中文怎么译我还不知道准确的说法(可能还没有准确的说法[1]),它的意思就是正像CSS是从文档解构中把样式信息分离出来一样,unobtrusive JavaScript就是从文档结构中把行为信息分离出来。严格意义上讲,jQuery提倡的unobtrusive JavaScript认为所有在HTML的body部分中的JavaScript表达式或语句都是不对的,包括作为HTML元素的属性(onclick)和在body中的script片段。所有的JavaScript都应该在网页的head部分中,然后通过jQuery建立与结构元素之间的行为关联。(当然我想到一个例外,在做widget或是portlet的时候,由于只能添加body中的代码片段,上述断言也无法成立,但也可以尽量将JavaScript与页面元素分离)。jQuery的作者正是希望开发者能够通过使用jQuery更容易和优雅的实现unobtrusive JavaScript。
- jQuery()的用法
注意这里带了括号,表示jQuery是一个函数而不是指框架的名字,jQuery()绰号$(),是jQuery框架的核心,有以下几种用法:
- 选择并包装DOM元素以便对其进行进一步的操作
$("div.notLongForThisWorld").fadeOut();
- 作为全局工具方法的命名空间
$.trim(someString);
- 使用HTML标记创建新的DOM元素
$("<p>Hi!</p>").insertAfter("#followMe");
- 作为文档元素已经组建完毕的handler,$(document).ready的简写
$(function() { alert ('DOM is ready!')});
- jQuery是容易扩展的,通过定义$.fn.[新方法],另外的Plugin机制后面介绍。
- 使用"jQuery.noConflict();"来避免与同类JavaScript框架一同使用时产生的冲突问题。
以上是第一章的“in action”,其他章节,得等我几次上下班才能慢慢写哦,-__-b
update: 链接
《jQuery in Action》 in action - chapter 2
《jQuery in Action》 in action - chapter 3
《jQuery in Action》 in action - chapter 4
《jQuery in Action》 in action - chapter 5
《jQuery in Action》 in action - chapter 6
《jQuery in Action》 in action - chapter 7
《jQuery in Action》 in action - chapter 8
update: 2010-01
《jQuery in Action》第九章是有关plugin的内容,由于和现在的版本变化比较大就不翻译了:) 至此这本jQuery in Action也就到此为止了:)
欧洲杯随着
官网主页大大的西班牙夺冠的banner而宣告结束,一切又回到了正常。在
Twitter上换回了普通的头像,去掉了blog皮肤上的加油widget,不用半夜爬起来看球了。
今天继续延续此前的短篇惯例,仅用图片总结我支持的意大利和德国队的本届欧洲杯征程。
意大利:皮尔洛的眼泪

倒霉的意大利又一次倒在点球上,倒霉的皮尔洛由于黄牌累计停赛无法出场是导致意大利止步的原因之一,旁边同样倒霉的卡纳瓦罗赛前受伤也为意大利的淘汰埋下了伏笔,最倒霉的就是图片中走在前面,满脸不服的倒霉的多纳多尼,从死亡小组出线,只是点球负于最后的冠军西班牙,应该不算成绩糟糕,可是人们的比较坐标可是两年前世界杯冠军教练里皮,只能看到多纳多尼的犹豫布阵和错误选人,欧洲杯后被换掉也是无话可说。这届欧洲杯意大利确实太差,令人遗憾,唯一能让人记住的就是被淘汰后皮尔洛的眼泪...
德国: 巴拉克的“无奈”

德国能走到决赛已属不易,尤其是在小组赛输给克罗地亚以后,技术上的差距让人们无法再看好他。但德国人不需要被人看好,也可以通过
“坚韧,谋略,团队合作”淘汰夺冠大热葡萄牙和神奇火鸡土耳其。虽然在决赛中,仍然靠战术和意志让西班牙人打得很不舒服,无奈后防失误后自己本身攻击法术,只能遗憾告负。注意赛后巴拉克的眼神,我们能看到除了无奈之外更多的东西,我想正是这种东西让德国足球永远让人敬畏。
写道这里不免想到中国足球,虽然和欧洲杯不挨边,但好歹也给个面子,也用一幅图来总结一下世界杯预选赛吧 - 杜伊:"我们曾经并肩作战"

也许中国足球毁掉了一段友谊,抑或是一段友谊毁掉了中国足球...