Categories
不学无术

如何練習批判閱讀 Critical Reading / 怎样评价论文质量

参考/原文:
1. 《如何練習批判閱讀》 http://sex.ncu.edu.tw/papers/4-3-2.php
2. 《怎样评价论文质量》http://blog.sina.com.cn/s/blog_6880c3050100oy44.html


 
如何练习批判阅读
如何进行批判阅读 文\何春蕤
在收集资料阅读文献时,当然要了解对方在说些什么,而这些说法和你的研究有什么关系。这就牵涉到如何「阅读」文献,也就是一般学者所谓的critical reading。
批判阅读是一种阅读的态度,也是一种思考的活动。
台湾教育体制中所训练的阅读(例如因为要被考试而读)通常是被动的,被迫的,也因为害怕失败受惩罚而阅读;这种阅读是片段的,背诵时间地点,列举条目,以便被老师考试。长此以往,不但阅读的材料不会在读者生命中停留很久(不愉快的经验谁要记得?),也不会真正帮助读者的认知或成长,事过境迁就抛诸脑后。
更严重的后果则是,主体一方面无从养成主动的、抗拒的、与作者对诘的阅读习惯,另方面更不会养成喜欢阅读、享受阅读、掌握阅读的欲望。这种支离破碎的、百般不愿的训练,对于长远的人生影响甚巨。
阅读不应该是被动的领受作者的指示,消极的被作者引导,顺从的接受作者的论点或所提供的数据。真正对主体有帮助的阅读,总是主动的探询作者的论点立场。
以下的提示应该有助养成批判阅读的习惯。以后阅读文献时,请一面读,一面问自己:
Before reading, ask yourself: Based on its topic and what I know about the author or the topic, what do I expect to find in this piece? (Why did I pick this piece to read anyway?)
(不必妄自菲薄,读者不是一张白纸,在面对阅读材料时总是已经有一些知识和想法。能够发动自己已经知道的,来和现在看到的新材料融合对话,就能使新东西更快在自己的思想体系中找到位置,建立起意义来。例如,看看文章作者的身分、题目的架构、出现的脉络时间点等等背景资料,以便快速找到定位。脉络:这篇东西刊登在哪个刊物或书籍中?这个刊物和书籍的学术脉络为何?有什么特殊的取向或色彩吗?作者:作者是谁?过去有何其他作品?一般对其评价如何?属于什么专业领域、学术流派或特殊团体?请善用google查询。题目:这篇文章的题目是什么?其中明示主题为何?问题为何?关键词有哪些?指向哪些领域?哪些重要理论资源?读读刊物宗旨或特刊说明来帮助你设定思考方向。先猜想/预期可能这篇东西会说什么、采取什么立场。读者越有直接间接相关的想法,阅读过程就越容易成为动态的对话反思过程。)
While reading, constantly monitor your own reaction: How do I feel about the piece as a whole? Convinced? Excited? Disappointed? What’s missing? Are the author’s ideas predictable? What do I think about the points being made in this piece? What are some good points/arguments in the piece? What does it or could it say about what I am interested in?
(读者既然有些自己的想法,阅读过程中就可能不断对阅读材料有所反应,例如,不以为然、惊讶不解、愤怒不满、崇拜赞赏、忘我失神等等,当然也可能看不懂、觉得无甚新意、敷衍塘塞。这些乍看只是情绪反应的感觉,其实多半都有一些深刻的源头,可能这个阅读正在挑战读者的基本价值,可能提出了完全想不懂的说法,可能和读者从前读过的有些相似或差异。注意这些反应,分析、理解、组织自己的反应,这是主动阅读的基本工夫。)
What is the author trying to get at? What are the fields in which this piece would make sense? What is the scholarly context of the piece?
(一面读,一面想,为什么作者会想写这篇东西?作者预设自己在对哪个领域、哪个主题发言?作者在和哪些学术人士对话?这篇文章辩论了哪些问题?整理出这篇文章的动机、目的、意义,知道人家在辩论什么以致于有这样的论点出来。特别注意要阅读前言、序文、后记和脚注,这些地方多半是作者呈现自己的思想和脉络、以及周边可能细节的所在。)
How does the author present the issue and the arguments? (How does the author frame the discussion? What are the rhetorical strategies (tropes, imagery, etc.) that s/he uses? Who are cited in the discussion? What materials from what academic fields are cited? Where does the author stand in relation to various cited scholars?)
(仔细看作者如何铺陈议题,从哪开始、经过哪些转折,如何带出自己的立场,如何和其他观点对话,如何理解阅读别人,如何引用别人,如何engage别人。有什么矛盾或不足之处?作者偏好援引哪些学者、哪些学术经典?作者在论述和立场上与这些文献摆出何种姿态和关系?作者想要证明什么?这些分析可以帮助你认识这篇文章的操作,也因而能对作者的表现和论证做出评断)
What implications does this piece have in relation to major issues of value or belief or theory? How can you use this piece in your own writing? 
(一篇文章往往不是只对它所聚焦讨论的题目有意义,有时候对另外一些没有提到或者部份提到的议题有深刻的含意。换句话说,读者得动员自己的广博知识来读出文章中的论点可能还有什么其他含意,或者可以启发另外什么思考,或者换个脉络、换个角度、换个适用场域,就会出现新的视角和理解。当然,能读出什么东西,就要看读者本身的背景知识、灵活联想、创意运用了。更重要的是,如果读者本身就在一个比较边缘的位置上,阅读文献时往往可以透过另类的眼光看出文献论点有何不足或不妥之处。)
上述阅读习惯需要时间来养成,刚开始可能觉得很麻烦,在每一篇文献上都花这么多工夫,那怎么负担得了?不过,多做几次就慢慢养成习惯,养成直觉,以后就容易了。总之,阅读不是等候作者给你些东西,而是自己主动的努力掌握文献,making sense of it。
由于研究过程中要读很多文献,遇到好用的论点或可能引用的文句,最好立刻用小贴纸标记重要页面,或者甚至写写阅读笔记,把当下浮现的想法记录下来,或用自己的文字来综合总结所读到的东西,这都是促使自己思考、查验自己是否读通了的好方法。如果要写这种summary,要注意以下几点︰

  1. 这篇文章的发表或出版信息一定要完整记下来,放在你做的记录上方,以便以后还找得到出处。如果影印了篇章,也要顺手把出版信息抄下来,过了这个时间点,有时候想找也不知道是哪里出来的。
  2. 写summary时并非浓缩对方的观点、单单按照对方的呈现顺序、以精简的形式写出而已──这很容易在后来你的写作中形成抄袭。相反的,你需要从你自己的研究方向、你的关切、你的评估角度来重述/重塑对方的立论。
  3. 换句话说,你需要选择那些和你的研究最直接相关的论点,用你自己的角度来凸显这些论点的意义和问题所在,而不是仅仅把全文的论点浓缩写出来,好像你是个透明人,没有自己的观点似的。(这也就是为什么在引述他人时很容易落入扭曲原意、断章取义。因此,这个步骤需要特别小心,得读懂原文才行)
  4. 切入重点,不要繁复(如果读者要冗长的论述,那他们读原典即可,干嘛要读你的纲要?)你能在纲要中如何一针见血的说清楚对方在说些什么,这才是重点。

 
 
批判阅读技巧
批判阅读写作小秘方:
在做批判阅读写作时,我们要下的工夫不仅仅是对该文做概述或总结,更重要的是要有分析评论的成分。摘要仅是对文章做摘述以及重点整理,也就是说,它只是告诉读者:本文作者说了什么?而一篇批判阅读写作要做的事情就不只如此;它必须要分析、诠释说明,并且对该文做出评论。这时,读者的意识就会加诸于此批判阅读的文章中。批判阅读写作不一定是对文章做负面的响应,或是一味地挑该文的毛病及盲点。我们的响应可以是正面的、负面的、或是两者皆是,重点是我们如何对该文做出回应,以及我们为何会有此回应。而这就是我们做批判阅读写作时的重点。
第一步:分析文章
在阅读书籍或文章时,以下的一些问题可以帮助我们分析该文本。

  1. 作者的重点(主要论述)是什么?
    2. 作者写该文的目的为何?
    3. 作者想要与什么样的观众群对话?
    4. 作者用什么样的论点来支撑他/她的说法?
    5. 作者用什么证据来支持所提出的论点?
    6. 作者的基本假设或立论为何?

第二步:评论该文
阅读文本之后,我们可以开始来评论作者在文章中所阐述的意见。在做这个动作时,可以试着问下列问题来帮助我们做评论的动作。

  1. 作者的论点是否合乎逻辑?
    2. 作者所提供的事实在文章的逻辑内是否准确?
    3. 作者是否有对其文中之关键词下确切的定义?
    4. 作者是否有用足够的证据来证明他/她所提出的论点?该论述是否能支持作者本身的立论?
    5. 对于作者所预设的读者群而言,该文是否有达到作者预设的效果?
    6. 文章本身的立论是否自相矛盾?
    7. 该文是否能帮助读者了解作者所欲呈现的主题?
    8. 该文是否有某些描述或论点引起你的强烈反应?那些描述或论点为何?你的反应为何?为何有此反应?
    9. 最后,这篇文章引起了你哪些问题?你从该文的论述中察觉到了什么?

第三步:着手做批判阅读写作
用标准论说文格式写作。基本上,写此类文体时,文章的安排最好不要按照原文作者的布局,因为这样很容易让自己的批判阅读成为摘要写作。文章一开始,先说明自己的评论主题及观点。然后,在原文中找出明确的论述或例子来支撑自己的评论。在结论时,为自己的论点做总结并且再次强调自己评论的观点及要旨。

  1. 首先,先确定以及解释作者的原意及论点。适时地引用原文中的文句来支撑自己对于作者观点的理解是正确的。
    2. 接下来,提出自己的观点。解释自己是如何阅读并评断原文的论点,然后开始叙述自己同意或不同意的观点。
    3. 对于自己所提出的每一个观点,记的引述原文中的文句(可以是做摘要、引用或是释意)来为自己的观点作辩护及论证。
    4. 解释这些段落是如何支撑自己的论点。

by Susan Katz and Jennie Skerl
resource (The Writing Center): http://www.rpi.edu/web/writingcenter/critique.html
 
从批判阅读到批判写作

  1. 批判阅读通常要先经过几个基本阅读步骤。一开始先浏灠研究材料──尤其是序论和结语──才能策略性的选择出你批判的重点。
  2. 画重点或做笔记的时候,要强调其立论点:文章中有哪些是作者用来解释她的分析走向?她使用的概念有哪些?她是怎么使用那些概念的?她怎么做出结论的?不管其中的事实和例子多有趣,都不需要强调。首先,找出涵盖其目的、条理和举证意义的大方向,每个段落的首句对这个步骤来说相当的重要。
  3. 当你开始考虑要在你的论文里和原文的某一部份辩论的时候,要很清楚它在原文中的立论点为何。看重原文是批判阅读中相当重要的一部份。
  4. 当你要直接从原文中引用时,一定要以批判的角度切入。也就是说,不要只是把引文用来连接你的论点,而是要在带出引文的时候同时说出你对它的评断,还有你引用此文的原因。通常一段引文会接着一段更深入的分析。
  5. 批判阅读的技巧也是批判倾听的技巧。在演讲中,聆听不只是为了得到信息,也是要学会思考的方式。你的老师通常都会针对该学科举例说明适合的思考方式。

数据源:http://www.utoronto.ca/writing/critrdg.html#3
 


怎样评价论文质量

1、选题的意义
  看题目的新颖、独特和实用性,在理论和实践的意义程度。
2、研究方法的合理性、科学性
  采用的研究方法手段是否与题目内容、任务相适应;主要方法设计的科学性、严谨性;有无独创的先进方法与手段。
3、论点的科学性
  论文的观点力求正确、鲜明、新颖、客观;较高的要求是有独到见解或创新的理论。
4、论证的逻辑水平、广度与深度
  论证要符合逻辑规律,论点与论据必须一致,推理方法形式运用正确合理。论证的中心突出并有一定深度;论证的问题范围与研究范围相一致。
5、运用理论的程度
  能结合本课题相关的专业理论、基础理论对研究的问题与获取的材料进行充分论述、阐述与分析,并经高度概括抽象形成观点、结论。
6、研究材料事实的可靠性与代表性
  论文中报告、引用的多种材料事实,首先要力气真实、可靠、准确、客观,来自科研或生产实践;其次,材料要丰富、完备、有代表性,有说服力。
7、论文结构层次的完整性与合理性
  结构要完整,格式规范。尤其讨论部分的结构要适合于表达研究的成果内容。总的结构合理、层次清晰、逻辑性强。
8、结论的价值
  从研究任务和专业角度出发,看结论的正确性、全面性、概括性和新颖性(或创新性)。
9、文字水平
  基本要求是通顺、准确、用词恰当。
10、图表运用技巧
  适合于论证需要;直观性、说服力和技巧性较强;图表规范。

Categories
不学无术

[转载]Python中实现带Cookie的Http的Post请求

本文转载自http://www.crifan.com/python_http_post_request_with_cookie/


 
已经实现了如何获得对应的cookie,具体参考:
【已解决】Python中如何获得访问网页所返回的cookie
现在想要把已获得cookie,在http的提交post请求的时候,也同时发送过去。
即,实现带cookie的http的post。
【解决过程】
1.看了这里
http://www.ideawu.net/blog/archives/270.html
的介绍,好像是cookiejar,自动管理的,不需要手动指定之前已有的cookie了。
去写代码试试。
2.后来的结果证实了,接下来,直接调用urllib2.Request,其自动会把cookie送过去的,
因为之前已经是urllib2.build_opener,添加了对应cookiejar去自动管理cookie了。
对应的代码如下:

# first url request
baiduSpaceEntryUrl = "http://hi.baidu.com/motionhouse";
cj = cookielib.CookieJar();
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
urllib2.install_opener(opener);
resp = urllib2.urlopen(baiduSpaceEntryUrl);
# second time do url request, the cookiejar will auto handle the cookie
loginBaiduUrl = "https://passport.baidu.com/?login";
para = {
    'username'  : username,
    'password'  : password,
    'mem_pass'  : 'on',
    };
postData = urllib.urlencode(para);
req = urllib2.Request(loginBaiduUrl, postData); # urllib2.Request: the HTTP request will be a POST instead of a GET when the data parameter is provided.
req.add_header('User-Agent', gConst['userAgentIE9']);
req.add_header('Content-Type', 'application/x-www-form-urlencoded');
req.add_header('Cache-Control', 'no-cache');
req.add_header('Accept', '*/*');
req.add_header('Connection', 'Keep-Alive');
resp = urllib2.urlopen(req);
respInfo = resp.info();

 

【总结】
Python中的cookiejar,自动帮我们管理好cookie,用起来,还是蛮方便的。
我们要做的只是,第一次build_opener的时候,把对应的cookiejar传进去,
以后每次的http的request,都会自动包含了cookie,而不需要我们操心了。

Categories
不学无术

[转载]使用 Chrome 开发者工具进行 JavaScript 问题定位与调试

本文全文转载自http://www.ibm.com/developerworks/cn/web/1410_wangcy_chromejs/


JavaScript 的调试工具在近年来有了长足发展,几乎每一款主流浏览器都配备了专门的调试工具。Google 的 Chrome 浏览器自带了 JavaScript 调试工具 developer tools(以下统称开发者工具)。这款工具在易用性、稳定性和调试效率方面并不逊于其他常用调试工具(如 FireBug),并且它增加了很多其他工具所不具备的新功能。本文着重从调试 JavaScript 代码的角度,详细介绍如何通过 Chrome 的开发者工具高效、准确地进行 JavaScript 问题定位与调试。

引言

Google Chrome 是由 Goole 公司开发的一款网页浏览器,自 2008 年 9 月第一个测试版本发布以来,其市场占有率逐步上升,至 2014 年 5 月,Chrome 已超越 Firefox 成为全球市场占有率第二的浏览器。Chrome 的受欢迎程度与其优秀的性能与兼容性密不可分,并且越来越多的网络应用程序都添加了对 Chrome 的支持,也足以体现网络应用的开发人员对 Chrome 的认可与青睐,而其中最重要的原因之一,莫过于 Chrome 所提供的强大的开发者工具。Chrome 开发者工具包含诸多强大的功能模块,适应于多个不同场合的需要。本文先简单介绍 Chrome 开发者工具的各个模块及其基本功能,再着重针对网页脚本调试,阐述如何巧妙运用 Chrome 开发者工具定位与调试问题。(本文所选的 Chrome 开发者工具为 Chrome V35 版本中内置,较之前版本可能略有不同,请留意)

Chrome 开发者工具介绍

虽然对于 Chrome 开发者工具的介绍,Google 官方以及互联网中都有众多文章进行阐述,但为了有助于读者更好地理解本文后面对如何巧妙运用开发者工具定位及调试脚本的阐述,在此对开发者工具中的各个模块做一个概要性的介绍。如果对其中某些模块特别有兴趣,请参考文末的链接,从中进行深入了解。
Chrome V35 版本中的开发者工具分为 8 个大模块,每个模块及其主要功能为:

  • Element 标签页: 用于查看和编辑当前页面中的 HTML 和 CSS 元素。
  • Network 标签页:用于查看 HTTP 请求的详细信息,如请求头、响应头及返回内容等。
  • Source 标签页:用于查看和调试当前页面所加载的脚本的源文件。
  • TimeLine 标签页: 用于查看脚本的执行时间、页面元素渲染时间等信息。
  • Profiles 标签页:用于查看 CPU 执行时间与内存占用等信息。
  • Resource 标签页:用于查看当前页面所请求的资源文件,如 HTML,CSS 样式文件等。
  • Audits 标签页:用于优化前端页面,加速网页加载速度等。
  • Console 标签页:用于显示脚本中所输出的调试信息,或运行测试脚本等。

后文会在阐述过程中,会提及使用 Element 标签页探测页面元素并查看该元素的 HTML 内容,也会使用 Source 标签页与 Console 标签页调试脚本及查看调试信息,并不会详细介绍他们的基本功能,请在阅读时提前了解以上相关标签页的基本功能。


 

使用 Chrome 开发者工具巧妙定位脚本代码

目前很多的网页应用程序都会使用各种诸如 JavaScript 之类的脚本语言,来增强事件处理、页面展现或是样式控制等方面的功能。很多网站或网络应用系统都已做成单页面模式,该页面只负责加载相关的脚本与样式,这些脚本与样式来负责动态生成更多的子页面或对话框。因此,该类网页应用程序的脚本数量会非常大,从而使开发人员在如此之多的脚本中定位某个问题变得困难起来,但也并非毫无技巧。

单页面的网络应用程序一般会引入复杂的 JavaScript 框架,如 JQuery, Dojo 或 ExtJS 等。这些框架都支持声明自定义的网页小组件,如 Dojo 中的 widget。一般而言,每一个 widget 会被单独写在一个 JS 文件中。因此,在定义该组件时,可以将储存它的 JS 文件名做为其 id 成员属性的一部分(例如前缀),并在描述该组件的 HTML 模板中,将 id 的值加入到 HTML 标签的属性中。当应用程序在 Chrome 浏览器中运行时,在使用 Chrome 开发者工具的”元素”模块中的元素探测功能查找 HTML 时,可以很直观地看见每一个 div 对应的 JS 文件。因此,当某一个 div 出现问题时,对其 HTML 进行探测后,便可根据其中的 id 定位到相应的脚本文件,从而使问题调试的范围大大缩小。以下通过实际项目中的例子加以说明。

清单 1. Dojo 中自定义 widget 引入 id 的声明方式
dojo.declare("exc.fe.bijits.FeLogon.FeLogonLogonPanel",[exc.kc._Bijit, dojox.dtl._Templated,], {
 templatePath: dojo.moduleUrl('exc.fe.bijits.FeLogon', "FeLogonLogonPanel.html"),
    select : null,
    SESSION_ID_OFFSET : 0,
    sessionid : null,
    launchType: "Standard Login",
    langcnt: 0,
    currentLang:null,
	……//省略之后不相关的方法和属性
	……
});

在清单 1 中给出的是使用 Dojo 创建自定义 widget 并将该 widget id 引入其模板 HTML 中的方式。自定义的 widget 在继承了 dojox.dtl._Templated 之后,Dojo 有内部机制可将该 widget 声明的名称作为 id 自动加到其 HTML 模板中。因此开发人员只要保证该 widget 声明的名称与其所储存的文件名对应即可。清单 1 中的 id 与储存该脚本的文件名均为”exc.fe.bijits.FeLogon.FeLogonLog-
-onPanel”。
在此前提下,打开浏览器运行网页加载该 widget 后,使用 Chrome 开发者工具的网页元素探测功能找到该 widget,便可看见其 id,即相应的脚本文件,如图 1 所示。如若该 widget 中的行为出现异常,例如 user id 不能进行校验,便可打开其相关的脚本文件进行调试。

图 1. 查看 widget 在 HTML 模板中的 id

查看 widget 在 HTML 模板中的 id

开启运行时错误自动暂停功能,准确定位出错脚本位置

在 Chrome 开发者工具中,可以开户运行时错误自动暂停这一功能(如图 2 所示),从而使开发者工具能在发现运行时脚本异常时,在异常脚本处暂停运行,跳转至调试页面,供开发人员进一步查找该运行时异常产生的原因。

图 2. Source 面板中的自动暂停按钮

Source 面板中的自动暂停按钮
自动暂停按钮的下方有一个选项,Pause On Caught Exceptions,如果勾选上,则即使所发生运行时异常的代码在 try/catch 范围内,Chrome 开发者工具也能够在错误代码处停住。

合理添加调试日志,通过 Console 标签页定位

在进行脚本开发过程中,在重要的方法中添加必要的调试日志输出语句,可以方便开发人员进行问题定位与调试。清单 2 中的 JavaScript 脚本方法中,在其开始和结束处添加了 debug 级别的日志输出,从而使该方法在被执行时,可在 Console 标签页找到相关日志,并且能通过点击该日志的末端文件链接直接跳转到 Source 标签页的脚本源文件中,极大方便了相关代码的定位,如图 3 所示。

清单 2. Dojo 中自定义 widget 引入 id 的声明方式
_containerSelect : function( /*ContentPane*/ cp ) {
        var F = this.declaredClass + "._containerSelect(): ";
        console.debug(F,"Starting: ", cp);//当方法被执行时,在控制台输出相关日志
        dojo.forEach( this.children, function(child) {
            if ( cp.id === child.targetId ) {
                this.showChild( child.id );
                //-- Save requested module
                this._history.push( child.id );
                //kak
                if(this.globalArgs._showModuleTopic)
                  dojo.publish(this.globalArgs._showModuleTopic, [ child.id,"open" ]);
            }
        }, this);
		console.debug(F,"End");//当方法执行结束后,在控制台输出相关日志
    },
图 3. Console 面板中的日志输出

Console 面板中的日志输出


 

使用 Chrome 开发者工具调试 JavaScript 的技巧与心得

上文介绍了 3 种定位相关脚本的方法,在定位脚本之后,通常会对脚本中的部分代码进行调试,本章主要详细讲解高效快捷地利用 Chrome 开发者工具进行 JavaScript 脚本调试的几种技巧与心得。

设置条件断点

与 Java 调试类似,Chrome 开发者工具提供了断点设置、删除与断点存储等基本功能。同时,开发者工具也提供了设置条件断点的功能,使开发者可以控制该断点只有在满足某一条件时才会被触发。
条件断点的设置如图 4 所示,在所需要设置断点的行最前端的行号处点击右键,选择添加条件断点后,会弹出一个对话框用于输入具体的条件。合理运用好条件断点能够提高调试的效率与准确性,使开发人员能更专注于在期望的场景下进行调试。

图 4. Source 面板中添加条件断点

Source 面板中添加条件断点

修改 JavaScript 文件中的代码

这是 Chrome 开发者工具提供的一种非常实用的功能,即使开发人员可直接对开发者工具的 Source 标签页中的代码进行修改,并将其保存,使浏览器在下次执行该段脚本时,直接加载最新修改的版本。目前的 Firebug 及 IE 自带的开发者工具都不支持对脚本的直接修改,导致在 Firefox 或 IE 中调试脚本时,如果需要对代码进行修改,需要先去修改脚本源文件,再同步至应用服务器,再清理浏览器缓存,最终再次打开应用程序时,才会看到代码修改后的效果。可见 Chrome 开发者工具提供的这一功能,大大提供了开发者调试脚本的效果。
需要注意的是,由于这种修改是保存在浏览器缓存中,因此它不会影响到脚本的源文件。当开发人员决定采用修改之后的脚本时,需要将其复制到脚本的源文件中。

使用控制台打印变量值或方法的返回结果

当断点被触发进入到调试模式时,我们可以将当前任意存在的变量或方法输入到控制台中,按下回车后,控制台便会返回相关的结果。该功能可使开发人员方便了解程序运行至断点处时各个所需要变量或方法的返回值。
需要注意的是,当在控制台中输入的方法名字不带括号时,控制台输出的是该方法所包含的代码信息,而并不是运行结果。

结合 Element 标签页调试 JavaScript 中对 CSS 的控制

在网页开发过程中,经常需要在脚本中控制不同条件下页面的样式展示,例如要求某一个按钮的颜色在用户停留十秒钟之后由白色变成灰色。此时我们便需要在脚本中通过具体的数值指定这个”灰色”该如何表示,一般情况下我们需要查找相关资料或使用其他工具才能得到期望的”灰色”所对应的 RGB 数值或十六进制数值。然而在 Chrome 开发者工具的 Element 标签页中,其实已经提供了包括该功能在内的一系列对样式进行实时修改的功能,并且在修改之后能够立即从页面中看到变化。
图 4 给出的是 Element 标签页的右半部分,当要对某个样式类中的颜色进行修改时,它提供出一个非常直观的图谱供选择,并在下方将其十六进制代码显示出来。开发人员可直接在此进行颜色选择,确定颜色后,在 JavaScript 代码中引用其十六进制数值即可。

图 5. Element 面板中的颜色样式编辑

Element 面板中的颜色样式编辑


 

结语

Chrome 开发者工具的功能丰富而强大,本文着眼于对 JavaScript 的定位与调试,介绍了其中的技巧与心得。相对于 Firebug 与 IE 开发者工具而言,Chrome 所提供的一些独特功能如对脚本源码的直接修改,极大方便了开发者对脚本的开发与调试。随着 Chrome 新版本的推出,相信其开发者工具的功能也会日益增强,我们可以通过阅读其官方更新说明,了解到新功能,借助 Chrome 开发者工具的支持,提高网页应用程序开发与调试的效率。


参考资料

学习

Categories
不学无术

[机器学习相关的一些中文教程]Machine Learning for Graphics, Vision and Multimedia

找到了一个比较好的网站,里面是一些[机器学习相关的教程,重要的是都是中文的,读起来比较快。
Homepage: http://www.cmlab.csie.ntu.edu.tw/~cyy/learning/

Topics

Date Topic Tutorial References
03/16 Principal Component Analysis
姜任遠 文宗麟
PCA
03/23 PCA Extensions
葉冠麟
黃輔中
PCA missing data
Robust PCA
03/30 Isomap
Locally Linear Embedding

謝昌熹 許平
ISOMAP & LLE
04/06 Laplacian Eigenmaps
Linear Discriminant Analysis
黃俊翔 陳駿丞 蕭淳澤
LDA
LDA applications
04/13 Locality Preserving Projection
Local Discriminant Embedding

蕭志傑 翁仲毅
潘振銘
LPP
04/27
05/04
Support Vector Machines
李根逸
林宗勳
林宏儒
何昇舫
SVM
SVM
SVM
libsvm
Support Vector Regression
黃子桓
SVR
Relevance Vector Machine
楊善詠
RVM
05/11 Boosting
翁明昉
陳宏暐
黃信騫
鄭鎧尹
Ensemble Learning
AdaBoost binary
AdaBoost extensions
AdaBoost applications
05/18
05/25
Graphical Models
朱威達
Graphical Model
Belief Propagation
鄭文皇 謝致仁
謝永桓
low-level learning
Applications
05/25
06/01
06/08
Approximate Inference
Expectation Maximization
莊上墀 郭煜楓 劉治杰 楊恕先
EM
Variational Learning
林蓉珊
周亮瑜
呂旺洲
Variational Learning
Variational Learning
Variational Learning
Categories
不学无术

机器学习文章集锦

偏最小二乘法回归(Partial Least Squares Regression) JerryLead 2011-08-21 21:32 阅读:14396 评论:2
典型关联分析(Canonical Correlation Analysis) JerryLead 2011-06-20 20:17 阅读:14508 评论:13
增强学习(Reinforcement Learning and Control) JerryLead 2011-05-13 11:19 阅读:12228 评论:5
因子分析(Factor Analysis) JerryLead 2011-05-11 15:59 阅读:15384 评论:15
线性判别分析(Linear Discriminant Analysis)(二) JerryLead 2011-04-21 23:31 阅读:10580 评论:1
线性判别分析(Linear Discriminant Analysis)(一) JerryLead 2011-04-21 23:26 阅读:13518 评论:8
ICA扩展描述 JerryLead 2011-04-19 16:35 阅读:5327 评论:0
独立成分分析(Independent Component Analysis) JerryLead 2011-04-19 16:11 阅读:14087 评论:5
主成分分析(Principal components analysis)-最大方差解释 JerryLead 2011-04-18 21:11 阅读:31676 评论:15
在线学习(Online Learning) JerryLead 2011-04-18 20:20 阅读:7410 评论:3
(EM算法)The EM Algorithm JerryLead 2011-04-06 16:18 阅读:77452 评论:41
混合高斯模型(Mixtures of Gaussians)和EM算法 JerryLead 2011-04-06 16:07 阅读:19594 评论:14
K-means聚类算法 JerryLead 2011-04-06 15:57 阅读:54823 评论:9
规则化和模型选择(Regularization and model selection) JerryLead 2011-03-27 11:51 阅读:8520 评论:1
支持向量机(五)SMO算法 JerryLead 2011-03-18 20:45 阅读:30592 评论:33
支持向量机(四) JerryLead 2011-03-18 20:37 阅读:13900 评论:6
支持向量机(三)核函数 JerryLead 2011-03-18 20:22 阅读:36999 评论:15
支持向量机SVM(二) JerryLead 2011-03-13 12:36 阅读:25688 评论:16
支持向量机SVM(一) JerryLead 2011-03-13 11:32 阅读:57184 评论:18
Categories
不学无术

Spotlight on the Natural Sciences: Use of Visual Images | 科学写作中使用图、表的关键

https://class.coursera.org/composition-003/lecture/151
 
QQ截图20141021104914 QQ截图20141021104937 QQ截图20141021104949 QQ截图20141021105008
 


 

  1. Don’t repeat information in text and table/figure. 正文与图表中不要重复表述信息.
  2. Table/figures can stand alone… if the caption are well-written. 如果图表的题注写的得当,图或表示可以独立于正文而存在的。
  3. Good graphic design is essential… and don’t involve lots of fancy tricks. 一幅设计良好的图是必要的,但是不要太过专注于一些修图小技巧。
  4. Visual images can help you tell your story. 图片可以帮助你讲你的故事~

不过个人感觉,现在很多论文都是花一大段来解释一张图的。

Categories
不学无术

推荐系统中常用算法 以及优点缺点对比

全文转自:http://www.woshipm.com/operate/107472.html
推荐方法是整个推荐系统中最核心、最关键的部分,很大程度上决定了推荐系统性能的优劣。目前,主要的推荐方法包括:基于内容推荐、协同过滤推荐、基于关联规则推荐、基于效用推荐、基于知识推荐和组合推荐。

一、基于内容推荐

基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推荐的,而不需要依据用户对项目的评价意见,更多地需要用机 器学习的方法从关于内容的特征描述的事例中得到用户的兴趣资料。在基于内容的推荐系统中,项目或对象是通过相关的特征的属性来定义,系统基于用户评价对象 的特征,学习用户的兴趣,考察用户资料与待预测项目的相匹配程度。用户的资料模型取决于所用学习方法,常用的有决策树、神经网络和基于向量的表示方法等。 基于内容的用户资料是需要有用户的历史数据,用户资料模型可能随着用户的偏好改变而发生变化。
基于内容推荐方法的优点是:
1)不需要其它用户的数据,没有冷开始问题和稀疏问题。
2)能为具有特殊兴趣爱好的用户进行推荐。
3)能推荐新的或不是很流行的项目,没有新项目问题。
4)通过列出推荐项目的内容特征,可以解释为什么推荐那些项目。
5)已有比较好的技术,如关于分类学习方面的技术已相当成熟。
缺点是要求内容能容易抽取成有意义的特征,要求特征内容有良好的结构性,并且用户的口味必须能够用内容特征形式来表达,不能显式地得到其它用户的判断情况。

二、协同过滤推荐

协同过滤推荐(Collaborative Filtering Recommendation)技术是推荐系统中应用最早和最为成功的技术之一。它一般采用最近邻技术,利用用户的历史喜好信息计算用户之间的距离,然后 利用目标用户的最近邻居用户对商品评价的加权评价值来预测目标用户对特定商品的喜好程度,系统从而根据这一喜好程度来对目标用户进行推荐。协同过滤最大优 点是对推荐对象没有特殊的要求,能处理非结构化的复杂对象,如音乐、电影。
协同过滤是基于这样的假设:为一用户找到他真正感兴趣的内容的好方法是首先找到与此用户有相似兴趣的其他用户,然后将他们感兴趣的内容推荐给此用户。其基本 思想非常易于理解,在日常生活中,我们往往会利用好朋友的推荐来进行一些选择。协同过滤正是把这一思想运用到电子商务推荐系统中来,基于其他用户对某一内 容的评价来向目标用户进行推荐。
基于协同过滤的推荐系统可以说是从用户的角度来进行相应推荐的,而且是自动的,即用户获得的推荐是系统从购买模式或浏览行为等隐式获得的,不需要用户努力地找到适合自己兴趣的推荐信息,如填写一些调查表格等。
和基于内容的过滤方法相比,协同过滤具有如下的优点:
1) 能够过滤难以进行机器自动内容分析的信息,如艺术品,音乐等。
2) 共享其他人的经验,避免了内容分析的不完全和不精确,并且能够基于一些复杂的,难以表述的概念(如信息质量、个人品味)进行过滤。
3) 有推荐新信息的能力。可以发现内容上完全不相似的信息,用户对推荐信息的内容事先是预料不到的。这也是协同过滤和基于内容的过滤一个较大的差别,基于内容的过滤推荐很多都是用户本来就熟悉的内容,而协同过滤可以发现用户潜在的但自己尚未发现的兴趣偏好。
4) 能够有效的使用其他相似用户的反馈信息,较少用户的反馈量,加快个性化学习的速度。
虽然协同过滤作为一种典型的推荐技术有其相当的应用,但协同过滤仍有许多的问题需要解决。最典型的问题有稀疏问题(Sparsity)和可扩展问题(Scalability)。

三、基于关联规则推荐

基于关联规则的推荐(Association Rule-based Recommendation)是以关联规则为基础,把已购商品作为规则头,规则体为推荐对象。关联规则挖掘可以发现不同商品在销售过程中的相关性,在零 售业中已经得到了成功的应用。管理规则就是在一个交易数据库中统计购买了商品集X的交易中有多大比例的交易同时购买了商品集Y,其直观的意义就是用户在购 买某些商品的时候有多大倾向去购买另外一些商品。比如购买牛奶的同时很多人会同时购买面包。
算法的第一步关联规则的发现最为关键且最耗时,是算法的瓶颈,但可以离线进行。其次,商品名称的同义性问题也是关联规则的一个难点。

四、基于效用推荐

基于效用的推荐(Utility-based Recommendation)是建立在对用户使用项目的效用情况上计算的,其核心问题是怎么样为每一个用户去创建一个效用函数,因此,用户资料模型很大 程度上是由系统所采用的效用函数决定的。基于效用推荐的好处是它能把非产品的属性,如提供商的可靠性(Vendor Reliability)和产品的可得性(Product Availability)等考虑到效用计算中。

五、基于知识推荐

基于知识的推荐(Knowledge-based Recommendation)在某种程度是可以看成是一种推理(Inference)技术,它不是建立在用户需要和偏好基础上推荐的。基于知识的方法因 它们所用的功能知识不同而有明显区别。效用知识(Functional Knowledge)是一种关于一个项目如何满足某一特定用户的知识,因此能解释需要和推荐的关系,所以用户资料可以是任何能支持推理的知识结构,它可以 是用户已经规范化的查询,也可以是一个更详细的用户需要的表示。

六、组合推荐

由于各种推荐方法都有优缺点,所以在实际中,组合推荐(Hybrid Recommendation)经常被采用。研究和应用最多的是内容推荐和协同过滤推荐的组合。最简单的做法就是分别用基于内容的方法和协同过滤推荐方法 去产生一个推荐预测结果,然后用某方法组合其结果。尽管从理论上有很多种推荐组合方法,但在某一具体问题中并不见得都有效,组合推荐一个最重要原则就是通 过组合后要能避免或弥补各自推荐技术的弱点。
在组合方式上,有研究人员提出了七种组合思路:
1)加权(Weight):加权多种推荐技术结果。
2)变换(Switch):根据问题背景和实际情况或要求决定变换采用不同的推荐技术。
3)混合(Mixed):同时采用多种推荐技术给出多种推荐结果为用户提供参考。
4)特征组合(Feature combination):组合来自不同推荐数据源的特征被另一种推荐算法所采用。
5)层叠(Cascade):先用一种推荐技术产生一种粗糙的推荐结果,第二种推荐技术在此推荐结果的基础上进一步作出更精确的推荐。
6)特征扩充(Feature augmentation):一种技术产生附加的特征信息嵌入到另一种推荐技术的特征输入中。
7)元级别(Meta-level):用一种推荐方法产生的模型作为另一种推荐方法的输入。

七、主要推荐方法的对比

各种推荐方法都有其各自的优点和缺点,见表1。
算法

Categories
不学无术

Coyle's inspiring Sweet Spot | Critical Review on Coyle's 'The Sweet Spot'

这是我在Coursera上提交的一篇English Composition  I: Achieving Expertise的作业。如需使用我的文章,请至少在文末注明出处。本文为草稿性质的文章可能存在少许错误,最终成型的final版还在写作中,视情况公布。
This is a project essay of mine in English Composition  I: Achieving Expertise. Anyone who uses my work please at least cite this webpage at the end of your work. The text in this post is only a draft which may contain few syntax errors.


 
Project One: Critical Review of Coyle’s “The Sweet Spot”


 
Coyle’s inspiring Sweet Spot
The word “talent” can be seen through Coyle’s passage, but according to the author, the word is more or less linked with practice and mistakes. It’s obviously an inspiring and self-helping book, and this chapter gives a strong idea that greatness isn’t born. It’s grown, especially through mistakes.
In this chapter Coyle discusses a variety of ideas via different examples. He has visited different people from several countries. So he demonstrates his view with their personal experience. Brunio is an eleven-year-old Brazilian football player who is trying to learn the elastic, which is a ball-handling maneuver. Although he failed to finish the move at the first time, he stopped and thought with his taut face and focused eyes, practicing it slowly but progressively (P.13). Another girl Jennie kept working on the pop song, singing every note slowly, and finally sang the measure perfectly (P.13). Those two example presents the idea that practice deeply leads the way to success.
Coyle isn’t totally agree with the traditional explanation that such kind of concentrated talent is to attribute it to a combination of genes and environment (P.14). He offers his “deep practice” theory and reinforces it with a word list memorization exercise (P.16). The words in column B with fragments can be remembered more easily than column A because it evokes our deeper practice. The following life vest example (P.16) also proves his theory.
To further illustrate his idea, Coyle cites a UCLA professor Bjork. Bjork said “there’s an optimal gap between what you know and what you’re trying to do”, and that’s what the Sweet Spot is. In Coyle’s theory practice and making mistakes is a way to find the sweet spot, then one can turn mistakes into skills. And people use time more efficiently when they practice deeply (P.19).
According to Coyle’s theory, deep practice is a strange concept for two reasons. Firstly, it cuts against our intuition about talent. Secondly it turns mistakes into skills (which is mentioned above). His second reason provokes a question that what if the mistake has a decent chance of killing you (P.20). Then Edwin Link’s pilot simulation device is cited to deal with that question. As is described in the text that Edwin’s trainer allows a pilot to perform “take off” and “land” a dozen times on his instruments during a few hours (P.24). His invention successfully extended the deep practice idea onto dangerous jobs.
In order to assure his theory could take effect on other field, the author applies his idea to Brazil’s soccer players. In short, the special indoor football, futsal, helps local players gain more practice opportunities. Futsal is the lever through which those other factors transfer their force (P.28). However, I personally have some doubts that whether this magical ball is overestimated. In my opinion, other factors such as environment (e.g. poverty, popularity), passion of the kids might be taken into consideration as well. Though futsal does help improve their football skills, it isn’t quite clear that whether the mini-sized heavy ball is the key factor to such talent.
“As Coyle reports, deep practice actually changes the physical makeup of the brain. … However, mere repetition is not enough. To create myelin, the repetition requires powerful attention” said by Jade and Barbara (Eckard, et al. 2013). Coyle gives us hope and inspiration via a variety of stories, but it simply isn’t objective. He relates success (or talent) to deep practice regardless of innate capabilities and environments.
In summary, despite of Coyle’s little subjective, I have learned a lot from the first chapter of his book. Perhaps Coyle doesn’t need to be objective because the text itself is about making you feel good, energetic and ambitious, at least it inspired me well. I also admire his way of elaborating the concepts.
References
1.       Eckard, Bonnie J. “Embodying Deep Practice: A Pedagogical Approach to Actor Training.” Embodied Consciousness: Performance Technologies (2013): 46.
 
Works of others that indirectly helps me with my critical review
1.       Critical Review on “The Sweet Spot” by Daniel Coyle. http://criticalreviewthesweetspot.blogspot.com/
2.       Critical Review of Coyle’s The Sweet Spot        http://book.douban.com/review/5866658/
3.       Critical Review of Daniel Coyle’s “The Sweet Spot”http://www.researchgate.net/publication/252930427_Critical_Review_of_Daniel_Coyle’s_The_Sweet_Spot


 
以下是peer review的结果:
The following texts are results of peer review:
1 2 3 4

Categories
不学无术

PAT 1012. The Best Rank (25)

To evaluate the performance of our first year CS majored students, we consider their grades of three courses only: C – C Programming Language, M – Mathematics (Calculus or Linear Algebra), and E – English. At the mean time, we encourage students by emphasizing on their best ranks — that is, among the four ranks with respect to the three courses and the average grade, we print the best rank for each student.
For example, The grades of C, M, E and A – Average of 4 students are given as the following:

StudentID  C  M  E  A
310101     98 85 88 90
310102     70 95 88 84
310103     82 87 94 88
310104     91 91 91 91

Then the best ranks for all the students are No.1 since the 1st one has done the best in C Programming Language, while the 2nd one in Mathematics, the 3rd one in English, and the last one in average.
Input
Each input file contains one test case. Each case starts with a line containing 2 numbers N and M (<=2000), which are the total number of students, and the number of students who would check their ranks, respectively. Then N lines follow, each contains a student ID which is a string of 6 digits, followed by the three integer grades (in the range of [0, 100]) of that student in the order of C, M and E. Then there are M lines, each containing a student ID.
Output
For each of the M students, print in one line the best rank for him/her, and the symbol of the corresponding rank, separated by a space.
The priorities of the ranking methods are ordered as A > C > M > E. Hence if there are two or more ways for a student to obtain the same best rank, output the one with the highest priority.
If a student is not on the grading list, simply output “N/A”.
Sample Input

5 6
310101 98 85 88
310102 70 95 88
310103 82 87 94
310104 91 91 91
310105 85 90 90
310101
310102
310103
310104
310105
999999

Sample Output

1 C
1 M
1 E
1 A
3 A
N/A

===============================================


又回来做PAT题目了,C++都忘得差不多干净了有没有!下次尝试下提交Python的答案吧~诶嘿嘿
这道题没什么难的,因为它时间要求不高。
我做了个链表把学生成绩的节点连起来,这样是因为学号有6位数(其实要是弄个1000000行的矩阵也没什么了不起的嘛哼!),反正之后就是链表查找的问题了,没啥可说。

#include <iostream>
using namespace std;
struct RecordNode
{
	//存放单个学生数据的链表节点
	int studentID;
	int results[4];	//0-A, 1-C, 2-M, 3-E
	RecordNode* nextNode;
	RecordNode(int sid, int c, int m, int e, int a)
	{
		studentID = sid;
		results[0] = a;
		results[1] = c;
		results[2] = m;
		results[3] = e;
		nextNode = NULL;
	}
};
RecordNode* rootNode = NULL;
RecordNode* getNodePointer(int studentID)
{
	//没有则返回NULL
	RecordNode* currNode = rootNode;
	while (currNode != NULL)
	{
		if (currNode->studentID == studentID)
			return currNode;
		currNode = currNode->nextNode;
	}
	return currNode;
}
void getRankInMatrix(int studentID, int* ranks)
//从矩阵中得到某人的all排位
//(subj:  0-C, 1-M, 2-E, 3-A)
{
	//int ranks[4] = { 1, 1, 1, 1 };
	RecordNode* node = getNodePointer(studentID);
	if (node == NULL)
	{
		//ranks = NULL;
		//delete ranks;
		ranks[0] = -1;
		return;
	}
	int* results = node->results;	//所有课的成绩
	RecordNode* opNode = rootNode;
	while (opNode != NULL)
	{
		//遍历
		for (int subj = 0; subj < 4; subj++)
		{
			//subjects
			if (opNode->results[subj] > results[subj])
				ranks[subj] ++;
		}
		opNode = opNode->nextNode;
	}
	//return ranks;
}
char ACME[] = "ACME";
int main()
{
	int M, N;
	cin >> N >> M;
	RecordNode* opNode = rootNode;
	for (int i = 0; i < N; i++)
	{
		int sid, c, m, e, a;
		cin >> sid >> c >> m >> e;
		a = (int)(((c + m + e) / 3.0) + 0.5); //四舍五入
		if (opNode == NULL)
		{
			//新建根节点
			opNode = new RecordNode(sid, c, m, e, a);
			rootNode = opNode;
			continue;
		}
		RecordNode *currNode = new RecordNode(sid, c, m, e, a);
		opNode->nextNode = currNode;
		opNode = opNode->nextNode;  //move forward
	}
	for (int i = 0; i < M; i++)
	{
		int sid;
		cin >> sid;
		int ranks[] = { 1, 1, 1, 1 };
		getRankInMatrix(sid, ranks);
		if (ranks[0] == -1)
		{
			cout << "N/A";
			if (i < M - 1)
				cout << endl;
			continue;
		}
		int bestRank = ranks[0];
		int bestRankSubj = 0;
		for (int x = 1; x < 4; x++)
		{
			if (ranks[x] < bestRank)
			{
				bestRank = ranks[x];
				bestRankSubj = x;
			}
		}
		cout << bestRank << " " << ACME[bestRankSubj];
		if (i < M - 1)
			cout << endl;
	}
	return 0;
}

 
 

Categories
不学无术

以用户为中心的设计

摘自《设计心理学》(中文)第194页
在设计中,应当考虑到以下几个方面:

  • 保证用户能够随时看出哪些是可行的操作(利用各种限制类因素)
  • 注重产品的可视性,包括系统的概念模型、可供选择的操作和操作的结果
  • 便于用户评估系统的工作状态
  • 再用户意图和所需操作之间、操作与结果之间、课件信息与对系统状态的评估之间建立自然匹配关系

换言之,设计人员要确保:1.用户能弄明白操作方法;2.用户能够看出系统的工作状态