Shared posts

24 Jul 21:09

用快速记忆法背单词

看了一个TED演讲《每个人都能掌握的记忆技巧》之后,发现记忆不是什么特异功能,而是人人都可以掌握的方法。

简而言之,就是把人名Baker,记成更为形象的色香味俱在的baker

用此法实践了一下,效果不错。

Incandescent 

炽热发光的

只需要记成inc and descend 公司 和 下降

曾炽热发光的公司一下子业绩下降了

fractious 

易怒的,暴躁的,坏脾气的

只需要记成 fra(nk) 一推特爱吵架网友 做了ct后,脾气很坏。 ious一般都不是好形容词。

proscribe 禁止

Pro支持 scribe 在石头上刻十戒,所以是 禁止。汝不可犯奸淫

distent 扩张的,膨胀的

dis(tant) tent 远距离 帐篷,意味着:扩张

Petroleum 

EU 标准的汽油

24 Jul 21:08

[小红猪]MOOC崛起,大学的未来在网络?(中)

by 小红猪小分队

本文作者:小红猪小分队

本文为第89期小红猪抢稿

译者:玛雅蓝

校对:伏维阁主

小红花等级:3.5朵

前文:[小红猪]MOOC崛起,大学的未来在网络?(上)

无标题1在这个国家,当人们提到“高等教育”的时候,他们谈论的是两个体系。一是精英教育,它对提出申请的学生择优录取,例如哈佛大学、加州大学克鲁兹分校、西北大学、宾州州立大学和凯尼恩学院。这些学院常常拒绝大批的申请者,而且他们都遵循着一个共同而有点模糊的观念——大学的终极目标是什么。

电影里的大学是绿草如茵、树木成林的方形院子,为乔治亚式或哥特式(或乔治亚-哥特式)的建筑所环绕。这些学校投放到邮箱里的宣传小册子看起来通常都差不多。你可能会看到一个拜伦一般的小伙子坐在榆树下的长凳上读《笛卡尔式的沉思》;或者你也可能会看到同样一位奉行浪漫主义的少年,顶着满头乱发,单肩吊着背包。他和一个可爱、真诚的年轻姑娘并肩同行,她一定喜欢围巾,也很可能喜欢雪莱。他们都在微笑。宣传手册上的每个人都在微笑。教授们戴着里克·莫拉尼斯(Rick Moranis)风格的眼镜,永远面带微笑——不管是和一个好学的学生一起工作,还是在分享一本摊开的书,或者摆出两手向上的姿势,就好像举着两只饱满的水果。我们相信,大学是特殊之地,优秀的年轻人被挑选进来,他们得以摆脱世俗的一切,来到这精神的花园里耕作。

但这并不是大多数美国人所熟知的高等教育。大部分普通民众接受高等教育的地方是社区大学、地区大学和其他一些不筛选学生的学校。大多数申请者都能取得入学资格。那里的老师并非都有博士学位或者研究经费;他们看上去可能忙个不停而且烦躁不安。学生可能也是如此。一些学生只能兼读,还要在学业和家庭或全职工作之间苦苦挣扎。因此辍学率和完成学业需要的时间都比精英学校要高。许多学校资金不够,或者在认证方面如覆薄冰;那里也没有什么方形院子。这些学校的课程通常是为帮助学生掌握专业技能而设立的。如果你想成为一名医药助理,可以申请相关课程。如果你想学会操作一台红外线分光机,也会有一门课告诉你怎么做。这是高等教育的平民一支,美国高校中80%的学府都属于这一类

高等教育还背负着沉重的压力。在上世纪六十年代中叶,两位经济学家威廉·鲍莫尔(William J. Baumol)和威廉·波温(William G. Bowen)发现了在教育等行业中出现的“成本病”(cost disease),他们的理论引人们开始思考教育体系的压力。通常来说,如果某行业工人的工钱增加的话,其产值也会上升。但哈佛大学的教室能够容纳的学生仍和一个世纪以前差不多。而且,在把年轻无知的十八岁孩子变成受过教育的成年男女的时候,通常用来提高效率的方式——采用先进的技术,加快生产过程,同时完成更多工作——似乎无从运用。虽然在过去的一百年中,教师的薪水相比整体经济有了或多或少的增长,但他们的产值仍停滞不前。人们认为,“鲍莫尔成本病”理论可以用来解释为什么教育开支一路飙升,却不见明显成效。

波温在七八十岁的大部分时间都担任普林斯顿大学校长,卸任之后,他加入了梅隆基金会(Mellon Fondation)。去年,在斯坦福组织的一系列演讲中,他提出在线教育可能治愈他在近半个世纪前发现的“成本病”。如果不堪重负的教育机构能把学生分流给在线教育,将可以减少教职员工数量和相关开支。课堂也不会如此拥挤。最大的好处是,高等教育中的精英和平民体系从此得以融为一体,相辅相成:全国财力最雄厚的大学可以给他们那些不那么受宠的同胞提供一些资源,同时也能在这个过程中精简自己的教学。至于那些现在只能勉强维持的学校,它们可以像圣荷西州立大学那样使用在线课程资源,让他们的学生享受到一流的教育。这是一个多赢策略。在哈佛大学,人们反复对我说:“水涨船高。”

然而真的是这样吗?一方面,像哈佛和斯坦福这样的大学成了高等教育中的星巴克和Peet’s咖啡,为离你最近的大学提供精品品牌课程,精明学生都会利用它,但这其中只有极少数人有机会到达这个遥不可及的彼岸。历史上,精英教育的高高在上一直是它残酷的部分。如果你二十岁,在达特茅斯大学,可能你会在凌晨一点坐在寝室里,和两个穿着拖鞋和Target牌牛仔裤的孩子分享中国菜。二十五年后,这两人中一个运营着价值数亿美元的高科技公司,另一个掌管着参议院委员会。接触“精英教育”的特别之处可能更多在于接触精英,而不是接受课堂教育。来自阿肯萨斯州中下阶级的男孩比尔·克林顿(Bill Clinton)在乔治敦大学、牛津和耶鲁之外也能接受到同样优秀的教育,但那样他便不会成为总统。

与此同时,小型教育机构可能会被埋没,或降格为主流力量的附庸。斯坦福大学的约翰·汉尼希认为:“作为一个国家,我们在努力资助太多想成为研究机构的大学。许多研究机构都在进步,国家可能无法承担。”如果精英大学能够承担起整个体系中的科研重任,那些资金不足的学校可以被撤销或精简。

2012年2月里的一天,一个名叫加里·金(Gary King)的社会科学家来到哈佛大学的一座灰砖墙行政楼,给哈佛大学的行政人员和督察董事会作展示。金虽然只有五十多岁,却已经是一个“大学教授”——那是哈佛教职人员的最高级别,拥有在哈佛任何一个学院工作的资格。他主管量化社会科学学院,那天他讲述的是他的专业,也就是收集和分析数据。

“哈佛面临的最大威胁是什么?”金穿着一套黑西装,戴着斜纹领带,有点笨拙地站在一屋子的油画和大人物面前,开始了演讲。“我觉得目前对哈佛最大的威胁来自盈利模式的大学。”他解释说,凤凰城大学投资了一千万美元用于研究和发展教学。与此同时,百分之七十的美国人没有大学文凭。“你可能会说,‘哦,那太糟糕了’,或者是‘哦,那些顾客不一样’。但事实是这是一个盈利来源。对于私立机构来说,这是一块巨大的蛋糕。”

金连珠炮般抛出了理解未来教育的三个重要前提:“社会联系激励”,“教学教育教师”和“即时反馈促进学习”。他曾经尝试对自己的课堂进行改革。他把讨论课程内容的所有邮件搬到了一个开放数据库中,让学生们看到他们以为只有自己会问的“愚蠢”的问题曾经也有人提过,而且还能看到是谁问的。

利用这些整理工具,在线教育从一种传播方式变成了一个珍贵的数据集中资源。用传统方式很难评估和比较不同教学方式的效果,金解释说,对于在线教育,这可以通过“大规模评测分析”,也就是大数据来实现。他说:“我们可以在哈佛这么做。我们正在我们自己的课堂上进行改革,而且我们还可以评估每个学生,每间课室,每个行政办公室,每座楼,每项娱乐活动,每个警察,每件事物。我们基本上可以掌握每件事的信息,并利用它为学生服务。”

他说,对于像哈佛这样的学校来说,为大学中的所有活动收入一个浩大而翔实的数据库可能帮助学生解决许多在大学生活中遇到的问题。“现在,如果一个学生想知道,为成为医学博士需要做哪些准备,他们会去问导师,会咨询师兄师姐。他们当然会得到建议,但与和几个前辈聊天相比,和成千上万个前辈聊聊怎么样?”有了在足够长的一段时间内收集的数据,你可以计算得出概率,并给学生们一个置信度相当高的答案,告诉他们为了实现自己的目标要作哪些选择。他继续道:“每次你上亚马网站逊,你都是一个随机实验的被试。每次你在谷歌上搜索,你也是一个实验的被试。当这里的某个学生做点什么事的时候,我们为什么不也这么做呢?”

正式的数据采集很有吸引力。当数字生活把精英学校的门槛一点点降低,学校不仅仅是在彼此竞争。他们对教育市场的控制正受到工业的挑战。几个月前,在华盛顿的一场国会游说会话上,哈佛大学的校长福斯特恰好和斯坦福校长汉尼斯聊过。福斯特在会议上告诉我,汉尼斯谈到了早期的一门MOOC课程,是他的一位教授塞巴斯蒂安·弗兰(Sebastian Thrun)开设的,介绍人工智能。这门课一时爆满,参与的人数最后超过了一万六千。弗兰没有放过其中的机会。他随后把斯坦福的MOOC课程搬过来,加入一笔风险投资,与Udacity合作。福斯特回到波士顿,和系主任小组会面,这个小组是她为了讨论教育的未来而召集的。她告诉我,把在线课程应用到哈佛的急切需要带着一种新鲜感。金获邀在二月的会议上讲话,在随后的几个星期中,参加了会议的督察员们通过邮件和电话问了许多问题。不到三个月前,有声明称哈佛和麻省理工将启动它们的非盈利MOOC制作项目——edX。

那天下午,在他的办公室,望着一个小小的四方庭院和史威登堡(Swedenborg Chapel)的背面,金对我说他认为MOOC还不足以取代课堂教学。他说:“目前,在线教育和现场授课之间还是有很大的差距。”

这其中相差了多少?这正是最近一场辩论的话题。和其他地方一样,哈佛大学的MOOC设计者们承认人文学科遇到了特殊的困难。大卫·J·马伦(David J. Malan)教授在哈佛大学讲授大受欢迎的编程入门课程“计算机科学50”,当他把这门课变成MOOC课程时,对学生作业的评估不是很困难,因为这些作业都是程序,可以由计算机自动评分。但对纳吉这一类的课来说就不是这样了,他们的作业主要是写文章和讨论。为了模拟课堂讨论,纳吉和迈克尔·桑德尔使用了在线论坛,但结果似乎不尽人意。CB22x的讨论开始后不久,一名课程助理凯文·麦格拉斯(Kelvin McGrath)对我说:“甚至有个小组在讨论耶稣,还有自豪感什么的。他们并没有跟上课程的内容。”

伊恩·M·米勒(Ian M. Miller)是一名毕业生,负责一门计划在秋天上线的MOOC历史课的技术工作。他说:“人文学科一直开支不大,而科学一直很烧钱。你通常只会给人文学科一个放书的小储藏室,那对他们来说基本上够了。但科学家需要实验室、仪器和计算机。我不想说对MOOC来说是相反的情况,但科学课程相对容易设计和开展。在电脑看来,我们在人文学科中提出的问题难度要大得多。”如果三位伟大的学者用三种方式教一首诗,这不是低效,而是构成所有人文学科的基石。

那天下午和金聊天的时候,我说把人文学科变成在线课程尤其困难。金皱起了眉头。

“为什么?为什么就应该是这样?”他问。

我说,当你教授定性理解的东西时,评估大量学生的表现就更加困难。

金表示反对:“我觉得在这些领域,评估工作的起步可能比较艰难。这不是因为它更难评估,而是因为更难定义你希望评估的东西。”大数据可能有助于解决这个问题。他继续说,MOOC的真正潜力在于把输入随机转化成一个单一的虚拟“课室”,这在传统模式中是无法实现的。他告诉我:“随机分配不同的教学方法和教学模式,不同的观看方式,还有各种东西都将成为可能。因为参与人数众多,(在线教育)还有开展许多实验的巨大潜能。至少在在线教育中,你可以彻底解决这个教育研究领域中的大问题。”

目前,关于MOOC运行效果的数据还很分散而且匮乏。这其中的一块里程碑是波温通过梅隆基金会的一个下属机构——伊塔卡组织(Ithaka organization)协助开展的随机实验。实验显示在教育效果方面,在线学习和传统的课堂教学并没有显著差异。这个实验研究的是一门统计学课程,但它混合了在线和现场教学两种模式,学生们每周参加一次课堂问答。如果MOOC仅仅在线上开展,辍学率通常会超过百分之九十。

24 Jul 21:05

找寻JACK之旅V-香港! 林欣杰 Keith Lam

by Converse

JACK是谁?

他是个体,“他”同时也代表了一类人。他们不拘一格,不用寻常的眼睛去看世界,他们愿意用自己的手去创造生活,用真实的感情去赋予作品生命。他们是让“东西”诞生的人。

Samantha是来自美国加州的艺术策展人,韩夏是来自中国华北的独立电影导演,她们两个对于生活在中国的JACK充满了好奇心。他们做了什么呢?

夏天开始的时候,她们踏上了找寻“JACK”的旅程。

找寻JACK——第五站

香港 Dimension+
林欣杰 Keith Lam

IMG_6465

林欣杰(Keith Lam)的“实验室”Dimension+就位于观塘的一座非常普通的建筑里,旁边是一间乒乓球学校,总有脸庞红扑扑的小朋友突然窜出来。在香港6月恼人的闷热天,Sam和韩夏刚刚走进这个硕大(在香港人均居住面积只有12.6平米的现在,它真的是大到惊人!)的空间时,都迅速地感到了一丝“冷意”,几台不同体积和功能的激光切割机,3D打印机,还有大量的装置艺术作品,甚至还有几套机器人制服摆在角落。处在实验室后端的工作间充满了木料和工具,简直就是一个制造者的天堂。Sam和韩夏脑海中都充满了无数的问题—“这个是什么”“那个怎么用”,似乎用一整天的时间都无法把这个宝藏探究明白。

gift1

林欣杰是一位成功的新媒体艺术家,同时也是香港理工大学设计学院和香港艺术学院的客座讲师,说话一直都极为平和而有耐心。他带着Sam和韩夏展示了各种机器的使用方法,虽然一切都还是带着神奇的光芒,但是两位找寻女孩都觉得,原来做一个自己脑海中的东西,只要肯花时间,真的没有那么难!

gift2

在实验室的出口处摆着一个木箱,里面放了很多林欣杰收藏的老唱片,很多都是香港流行音乐辉煌年代的精品。把一张“Beyond”的《再见理想》摆上林欣杰自制的木头唱机上,时间好像真的回到了很久之前。当然,林欣杰不会和他的理想离别,他正一步步迈进他的理想——也许你还在迷惑怎样做一个制作家,也许你为生活所困太久,但是这一切都还有机会,只要有时间和希望,任何人都可以做一个MAKER。至于怎样才能做一个Maker,下篇再聊!

IMG_6474

 

 

 

24 Jul 21:03

活色生香!16款使用视频背景的网页欣赏

by chenzimu7

活色生香!16款使用视频背景网页欣赏

网站并不一定非得是静态的。HTML5和CSS3的兴起使得网站开发有了更多的可能性。借助HTML5,越来越多的将动态视频用作网站首页的背景,营造独特的浏览体验。这种动态的背景视频,不仅有趣,而且能让用户有种身临其境的感觉。

使用视频背景之后,网站以一种极具创造性的方式营造出独特的氛围,这比起静态的背景容纳更多的信息。它可以改变网页风格,讲述网站的内容,展现操作过程,当然,也可以像静态背景一样单纯的表现一种情绪,方便而有趣。以下是我们搜集的案例,希望能给你带来一些启示。

01. mediaBOOM

活色生香!16款使用视频背景网页欣赏

这是一家互动广告公司的网页,背景视频展现的是一个虚构的世界,其中充满了带有复古风情的美洲风景。

02. MyProvence Festival

活色生香!16款使用视频背景网页欣赏

Myprovence展现的是艺术家对于这一地区的探索。

03. Spotify

活色生香!16款使用视频背景网页欣赏

音乐服务网站Spotify,网页中的视频背景展示的是Spotify的音乐是如何融入人们多姿多彩的生活。当然,如果你对Spotify有兴趣的话,可以看看这篇《小图标大学问!我是如何设计著名音乐软件SPOTIFY里的图标》

04. Life of Pi

活色生香!16款使用视频背景网页欣赏

这是电影《少年Pi的奇幻漂流》拍摄花絮网站,背景视频就是李安拍摄这部传奇电影背后的花絮。

05. Telly

活色生香!16款使用视频背景网页欣赏

Telly是一个创业项目,网站的背景视频展示的是随风摇摆的草地,营造出独特的氛围。

06. Fernando Maclen

活色生香!16款使用视频背景网页欣赏

这是天才设计师Fernando Maclen的个人网站,其中虚化的背景视频展示的是他的设计生活。

07. Windward

活色生香!16款使用视频背景网页欣赏

这是一款iPhone应用的网站,这款为水手开发的应用可以展示潮汐、风速和温度等数据。背景视频中波涛汹涌的大海很好地营造出氛围。

08. Matter

活色生香!16款使用视频背景网页欣赏

网站背景视频中展示的是随机选定的人物视频,非常独特,令人难忘。

09. Eagleclean

活色生香!16款使用视频背景网页欣赏

这是伦敦保洁公司Eaglechean的网站,背景视频颇为幽默。

10. Dromoland Castle

活色生香!16款使用视频背景网页欣赏

Dromoland Castle是爱尔兰著名的酒店和乡村庄园,背景视频展现出酒店附近的自然美景。

11. Y.CO Yachts

活色生香!16款使用视频背景网页欣赏

网站使用视频背景展示了在游艇上度假的美好环境。

12. Flipboard

活色生香!16款使用视频背景网页欣赏

著名新闻应用Flipboard的网站,视频背景展示了Flipboard的使用场景。

13. Nike Jordan M6

活色生香!16款使用视频背景网页欣赏

网站的时评背景展示了新鞋是如何设计完成的。

14. Arcade Fire

活色生香!16款使用视频背景网页欣赏

这是独立摇滚乐队Arcade Fire的官方网站,视频背景会随着音乐播放同步进行。

15. The Cassette

活色生香!16款使用视频背景网页欣赏

这是一个法国鞋店的网站,其中的视频背景巧妙地展示了它在不同角度的样子。

16. The Wood

活色生香!16款使用视频背景网页欣赏

这是The Wood 餐厅的网站,视频背景微妙地展示出餐厅质朴的装饰和氛围。

更多酷站朝下看:
《香艳动人!一组帅哥美女云集的时尚网站欣赏》
《条条框框的华丽玩法!20个矩形元素的创意网站》
《免费高清!10个无版权限制的大图特供网站》

FASHION-WEBSITE-DESIGN-1

原文地址:creativebloq
优设网翻译:@陈子木

本文由优设网原创翻译,请尊重版权和译者成果,转摘请附上优设链接,违者必究。谢谢各位编辑同仁配合。

【优设网 原创文章 投稿邮箱:2650232288@qq.com】

================关于优设网================
“优设网uisdc.com“是一个分享网页设计、无线端设计以及PS教程的干货网站。
【特色推荐】
设计师需要读的100本书:史上最全的设计师图书导航:http://hao.uisdc.com/book/
设计微博:拥有粉丝量73万的人气微博@优秀网页设计 ,欢迎关注获取网页设计资源、下载顶尖设计素材。
设计导航:全球顶尖设计网站推荐,设计师必备导航:http://hao.uisdc.com
———————————————————–
想在手机上、被窝里获取设计教程、经验分享和各种意想不到的”福利”吗?
添加 优秀网页设计 微信号:【youshege】优设哥的全拼
您也可以通过扫描下方二维码快速添加:

sdcweixin

优设哥向您推荐:

28个超酷的单色背景网页设计欣赏

10个以视频动画为网页背景的网站

我的地盘听我的!20个大胆创新另辟蹊径的酷站赏析

44个酷炫的黑暗主题网页设计

网页设计趋势:大视频网页头部的运用
无觅
24 Jul 21:02

接地气干货!设计一个logo的常规思路是怎样的?

by cyRotel

接地气干货!设计一个logo的常规思路是怎样的?

@沁心小阳台 :是时候出马了。在设计之前我们先谈谈为什么要设计Logo,甚至是为什么要进行设计。

一、思考篇

(1)客户为什么要设计Logo

还用说?!当然是赚钱!一般土包子老板就要个包装,来个图形标识一下我们的产品(#‵′)凸

当然,作为负责的设计师,请务必尽心尽力以正确的商业设计说服那些想真正做生意的老板,要建立品牌不要只要有个薄薄的外表,说服不了就睡了他 (・(ェ)・)

这样做也有利于双方的合作,不然只要个Logo,你还是让他做吧。(Ps:虽然品牌不是那么容易就建立,但是作为长久发展,先让品牌跑起来,在行动中调整姿态。)

(2)为什么找你做Logo

作为老板,天天处于水深火热之中,特别是中国,这才是真正的丛林法则的高等练级区,哪里有时间去研究图形的艺术,找你合作就是拿我的理念和你独特的视角和设计能力创造出符合我预期的赚钱机器。

作为商业设计,一切以客户为主,除非设计师个人的倾向性符合客户要求。同时客户也需要学习,不要把自己定位为一个负责作图的工作人员,而是一个可以和企业共同出谋划策的合作人,这是一个互相学习的友好合作。(Ps:可能在一些城市依然存在土包子就拿自己意愿做设计的情况。。)

(3)设计沟通

拿Gelato做个例子吧,现在小Q老板什么都没有,只有产品,还有杀出市场的豪言~

言语的偏差性对于图形来说是始终存在的,尤其是在什么都没有的情况下就做设计,绝对有风险。

先来份行业调研,市场调研后发现同类型的Gelato有瑞士M、意大利V等等,妈蛋,除了味道美味价格比他们低以外完全没有竞争力啊。看看瑞士M那风骚的小球上还加个毛,这品牌视觉真心妒忌 (#‵′)凸

看看客户对这些品牌的Logo类型能接受到什么程度,能引导的引导,学习嘛,你在教一天天理性的要死的人学习图形的感性空间~多费点劲。然后给个视觉设计方向,差异化选择,双方确认后开始制作。(让客户合理的介入设计,引导正确的设计方向,作为客户,自己确认的事情很难推翻。)

接地气干货!设计一个logo的常规思路是怎样的?

二、设计篇

(1)头脑风暴

妈蛋,持续了半个月的沟通终于开动做设计了(设计师也对客户行业学习研究),通常拿到项目的第一感觉是想象力最丰富最感性的表现,时刻记录灵感元素,团队开始头脑风暴,任何想象都可以,做个冰淇凌项目从巴黎想到比基尼都没有问题,绝对忌讳线性思维,发散!跳跃!这是项目中难得可以随意的时刻[]~( ̄▽ ̄)~*

接地气干货!设计一个logo的常规思路是怎样的?

(2)组合

生了一堆的点子,可以开始组合了,理性负责客户的需求(其实更多时候,你所做的设计,不是给客户看的,而是给客户的客户看的。)感性负责连线组合。

时刻谨记合理差异化,不然做它做甚?!

时刻以赚钱为第一生产力!

在没有成功看透这个世界的万物的时候恰当的翻一翻Logo pond等专业飞机稿网站找找灵感,或许同样的灵感别人的图形美感就无比的爆棚。(图形语言是一门很深的技艺,设计师的本家饭碗呀。)

这个时候出十个或几个都可以,最终挑选时不是单单以图形去挑选,在设计Logo时,要考虑它满级的时候是个怎么样的形态~对于客户的理念传达的是否出彩到位。

  1. 头脑风暴
  2. 图形组合(商业目标为基准,要靠谱,要有未来。)
  3. 初稿+调整
  4. 延展创想(不少设计师被重型压榨,一个人要出很多稿件,质量难免有降低,其实延展和整体视觉才是品牌最出彩的地方,一个蛋大的小标志我才懒得看。)
  5. 制作提案(万分重要,让客户看到未来!未来!未来!)

(3)提案

如果小Q看到两个月我给了他一个6P的PPT,我想他会带他家二狗灭了我(σ‘・д・)σ,双方交流的再好,方向确定的再妙,没有一个系统的框架和相应的氛围一百块钱我都不愿意出。

杜绝贴历史贴成就的设计,作为一个Logo实在是表现不出什么几百年的历史传承,什么上下五千年的文化沉淀,,所以作为一个Logo只要表现出一点或几点,把这一点无限的放大,通过视觉体系触类旁通,打通关于产品所有的想象,通过小Q想表现的理念和与之配套的视觉体系相融合。(职业设计师时刻考虑,客户要去赚钱的,客户的客户可不会费时间去看你Logo代表了多宏大的文化积淀,没事别扯蛋。)

提案要有逻辑,要有观赏体验,国内好的提案不多,真的,用心做吧,你能吓哭客户,PDF,30+P,一秒变高富帅。

(4)修改?

什么?修改?小Q,你妹的什么意思?!你说好的就要这个方向呢,之前所有的都是谎言嘛?你这个没良心的负心汉!(ノへ ̄、)

附上LOGO设计超级指南:
《设计师必看!LOGO设计的忌讳有哪些?》
《如何从甲方抽象的概念里提炼LOGO创意》
《超赞!2014 LOGO设计新手指南(上篇)》

biglogo

原文地址:zhihu
作者:@沁心小阳台

【优设网 原创文章 投稿邮箱:2650232288@qq.com】

================关于优设网================
“优设网uisdc.com“是一个分享网页设计、无线端设计以及PS教程的干货网站。
【特色推荐】
设计师需要读的100本书:史上最全的设计师图书导航:http://hao.uisdc.com/book/
设计微博:拥有粉丝量73万的人气微博@优秀网页设计 ,欢迎关注获取网页设计资源、下载顶尖设计素材。
设计导航:全球顶尖设计网站推荐,设计师必备导航:http://hao.uisdc.com
———————————————————–
想在手机上、被窝里获取设计教程、经验分享和各种意想不到的”福利”吗?
添加 优秀网页设计 微信号:【youshege】优设哥的全拼
您也可以通过扫描下方二维码快速添加:

sdcweixin

优设哥向您推荐:

经验分享!如何让设计效果可量化

PS教程:教你创建魔幻霸气的金属龙形LOGO

设计师必看!Logo设计的忌讳有哪些?

案例研究:我们应该如何设计漂亮的Logo

推荐!UC浏览器新Logo设计经验分享
无觅
24 Jul 21:01

Material Design:构建软件的物质世界

by chenzimu7

layering__1_.0_standard_1020.0

编者按:Google推行的Material Design已经远远超出之前Android Design的格局,视觉标准化的背后,隐藏着Matias Durate和他的谷歌战队背后改变世界的心。如果你还在和隔壁桌的同事争论Material Design到底是不是扁平化的话,不妨看看Durate、Wiley和Jitkoff 的思维已经走到了多远的地方,看看Material Design 看似简单的界面背后那颗炽热的雄心。

“将纸片以如此先进的方式呈现出来,这已经与魔法无异了。”

在谈及Material Design的核心理念的时候,时任谷歌设计高级副总裁Matias Duarte如此说道。这套新的谷歌设计规范制定了统一的UI视觉设计和各元素运动的物理规则。当然,这套设计也有一点怪异。

在创建这套规范的过程中,谷歌的设计团队觉得有必要创建一套系统而连贯的外观和统一的体验,让它可以在所有的产品中广泛地运用,希望它能应用到Android、Chrome OS 以及网页设计中去。Duarte领导的设计团队并没有单纯地创建一套色版然后写上一堆规范就了事儿,而是开始从一些最基本的问题开始重新思考。3年前,Duarte在发布Android 4.0的时候,叩问世界:“机器是否有灵魂?”3年后,Matias在发布Material Design和Android L之后又问了一句,“软件是如何构成的?”

软件是如何构成的?

物质与型态

当谷歌搜索首席设计师Jon Wiley和同事Nicholas Jikoff面对Google Now中广泛运用的卡片式设计的时候,自然而然地延伸出这个问题:软件是如何构成的。当你滑开一个卡片的时候,自然而然会想,接下来会发生什么?

“彩色的Logo会以更加多姿多彩的形式展现出来。”

“这听起来像是一个毫无意义的一句话”,Duarte说道“但是它的确是一个极具生命力的思路。”这种设计思路引领设计团队以全新的视角来看到应用中的每一个视觉元素。比起讨论像素和层,设计团队更愿意以卡片为单位,将它们视作实体,思考软件的界面变化和交互过程。

Material_Design_music

如果这些卡片都有着实体和它们自己的物理属性,那么就意味着这些卡片在运动的时候会相互影响,需要遵循一套物理规则。在这种设定之下,你就不能让它们随意地变化,就像你无法让物理世界中的实体随便变形一样。

想象一下,如果有一种智能材料像纸一样简单,同时也可以根据触摸而改变形状,这让我们开始思考(这种物质会带来怎样的设计)。这就是Material Design。

于是谷歌设计团队决定将这种隐喻注入设计,他们设计的界面元素都变成了一张张神奇的“纸片”。这样一来,不同的视觉元素都如同扁平的纸片叠加在一起,轻飘飘地浮动在背景之上,它们有着一致的阴影和一致的光源。当你滑动不同的层的时候,它们更多的是滑到屏幕以外,而不是消失。

更明亮的色彩,更富有张力的排版布局,与具备物理属性的纸片结合在一起,为Material Design奠定了基础。刚刚发布的Android L中,鲜亮的色彩和无处不在的卡片足以展现Material Design的精巧设计,以及协调的美感。

Wiley和Jitkoff说,Material Design的出现,与其说是谷歌在设计风向上的改变,不如说是谷歌设计哲学的进化。在2012到2013这两年间,Google曾经发起过一个“肯尼迪项目”,这个设计项目旨在全公司推行一套统一的设计过程。Material Design的出现,也推动谷歌的“肯尼迪项目”进入了下一个阶段。

创意与约束

在Duarte看来,Material Design“统一了思路”,也“绝对是一个制约因素”,但这种限制也使得设计更一致,更容易做出决策。举个例子吧,比如在一个APP中,设计一个卡片不停翻转来展示卡片背后的内容。在Material Design的中,却不能如此设计。因为在Material Design中,卡片是有着明确的物理属性,在这个空间中并没有空间供卡片进行翻转,也不会让它不停翻转呈现不同内容。

Duarte说,通常我们对于物理实体总能轻松理解,但是软件设计通常会打破我们对于事物的认知和体验。Wiley认为,这种超出日常认知的设计会让人迟疑,就如同科幻电影中不遵循内在逻辑的设定一样。Duarte直指iOS的设计理念:“我不会(让UI元素)高速地穿过空间,不会让虚拟的边缘给你带来划破手掌的错觉。”

“设计是在约束中寻找解决方案,”Duarte说道,“如果设计失去了约束就无法称之为设计了——没有约束的那是艺术。”

谷歌的设计师依然拒绝为这种材料命名,因为没有名字的束缚它更具灵活性,也更具有神秘主义的色彩。的确,Material Design中的元素遵循一系列的物理规则,但是它们并不具有拟物化风格。它们如同纸片一样来回滑动,但是它们具有无与伦比的“魔力”。

它们没有物理纸张的型态限制,一个转场动画就可以让它们自由伸张或者缩小。对于谷歌而言,这些动画非常重要,因为这可以让用户明白他们置身于一个APP中。Wiley认为,目前很多APP给人的感觉像是被跳跃剪辑的电影或者电视节目,让用户失去时间和空间的概念。在他看来,用户需要的APP更接近于舞台剧,剧情一幕幕地推进,舞台上的故事经过编排和转换,这非常重要。

Material_calendar_gif

走向现实

更重要的是,这种神奇的材料会在你需要的时候出现。Google针对Google Now这样的产品已经进行了多年的探究,并且它们现在已经成为了Material Design中重要的组成部分。Material Design的出现,并没有强行要求用户去管理数据,而是通过设计让用户去相信Google在对的时间给出对的内容。

这就是为什么同时推出的可穿戴系统Android Wear,仅保留了与通知系统进行操作和回复的功能。对此问题,Android Wear平台的设计师 Alex Faaborg是如此应答的:“对于手表,你并不会花费大量时间与之进行交互,你只是想看一下消息并且用语音进行回复。这在设计理念上和Google Now基本一致,不过更加平台化而已。”

要接受这样的设计,用户需要更加信任Google,不论是数据安全还是设计。Duarte坦言:“我们想找出最简单的解决方案,将作出最简单易用的设计置于首位。”

IMG_9884_verge_super_wide

野心:Parc 3.0

Material Design的野心并不止于为网页和软件创建一致规范的外观和体验,甚至超过了Android L和Android Wear的布局,Google希望通过Material Design 强化人们的认知与计算机技术之间的联系。

在Duarte看来,施乐Parc研究中心为我们带来的图形化界面,和可以点击拖拽的窗口设计,是极为重要的研究成果,但是它并非突破性的进展,因为它仅仅只是实体桌面的虚拟化设计,并没有“具备对象关系”。而苹果通过触摸技术做了具有类似意义的事情,将人们带入了触摸与移动软件元素的时代,它让用户和屏幕背后的虚拟世界通过触摸建立起了对象关系。

如果说施乐Parc研究中心带来的施乐之星是Parc 1.0的话,那么iPhone的出现就是Parc 2.0了。现在,Google希望Material Design能成为Parc 3.0,开拓一个新时代。谷歌相信Material Design的设计语言能再次带着我们前进,这套设计语言中融入了触摸屏、手势操作、语音控制以及谷歌自有的智能算法以及更多的新技术。这些技术结合在一起,让我们的大脑明白软件的运作机制,具备跨设备的功能,让我们能够直观的解决问题。

Material_Design_book

Material Design正是组织和容纳这一切的框架,只是刚刚诞生的它尚未成为施乐之星桌面系统和iPhone这样划时代的产品。但是将我们每天都要面对的或简单、或复杂的新技术合理整合起来确实非常重要。如果Google能够按部就班地将Material Design应用在Chrome OS、Android、网站等所有平台的话,那么用户就可以以在多平台之间无需调整进行切换了。

目前,Material Design还是一个理念,在谷歌推出更多使用这一设计的软件之前,它依然会保持它神秘的一面。但是,正如Wiley所说的,它还处于起步阶段。接下来,谷歌要做的事情还有很多。

“如果我们真的能用它替代现在的设计的话”,Duarte说:“那么未来就真的触手可及了。”

看完谷歌,不妨看看他的宿敌,苹果公司相关的文章:
《怒赞!设计师必看的苹果设计历代启示录》
《抽丝剥茧!揭秘苹果最新操作系统YOSEMITE的图标设计》
《真相!前苹果设计师揭秘关于苹果的4个传说》

原文地址:TheVerge
优设网翻译:@陈子木

本文由优设网原创翻译,请尊重版权和译者成果,转摘请附上优设链接,违者必究。谢谢各位编辑同仁配合。

【优设网 原创文章 投稿邮箱:2650232288@qq.com】

================关于优设网================
“优设网uisdc.com“是一个分享网页设计、无线端设计以及PS教程的干货网站。
【特色推荐】
设计师需要读的100本书:史上最全的设计师图书导航:http://hao.uisdc.com/book/
设计微博:拥有粉丝量73万的人气微博@优秀网页设计 ,欢迎关注获取网页设计资源、下载顶尖设计素材。
设计导航:全球顶尖设计网站推荐,设计师必备导航:http://hao.uisdc.com
———————————————————–
想在手机上、被窝里获取设计教程、经验分享和各种意想不到的”福利”吗?
添加 优秀网页设计 微信号:【youshege】优设哥的全拼
您也可以通过扫描下方二维码快速添加:

sdcweixin

优设哥向您推荐:

晴耕雨读:天气类iPhone App设计欣赏

围观!Android首席设计师谈移动与软件设计

经验分享:APP设计中便捷的单手操作

超实用!19条Android平台设计规范

细谈APP非全屏化的设计理念
无觅
22 Jul 18:10

dmesg 总结

by sundayhut

1.dmesg介绍

在dmesg里我们可以查看到开机信息,printk产生的信息等。若研究内核代码,在代码中插入printk函数,然后通过dmesg观察是一个很好地方法。

 

2.dmesg输出含义

dmesg 输出的数字含义是什么,纠结了一会儿,下面给出解释

终端输入dmesg,可以看到每行最开始显示的是一个综括号,里面的数字为timestamp,时间戳,该时间指示的系统从开机到现在的运行时间,单位为s 秒。

 

图1

 

3.dmesg -c

  在显示的同时,clean掉dmesg缓存中信息

4.dmesg -T

  以当前时间的方式显示时间信息,而不是图1所示的开机时间

 

图2

 

3 dmesg -d 

显示dmesg中两条打印信息的时间间隔

 

图3

 

我们可以计算,上一行的时间戳 + 下一行的间隔 = 下一行的时间戳

例如:第一行和第二行,1069.638561 + 0.000003 = 1069.638564  这里的时间单位为秒

 

4.dmesg -d -T

-d和-T参数混合使用,效果可想而知

 

图4

 

5.dmesg | tail 显示dmesg最近一次的输出

 

由上面我们可以看到dmesg可以让我们获得很多信息,包括函数进入时间等,可以利用dmesg原本已有的功能进行辅助分析。dmesg 很~\(≧▽≦)/~赞

22 Jul 18:10

Tor Browser Bundle(TBB)无法连接的解决

by tk

很奇怪,在某些网络下(公司/xx),TBB一打开就会提示无法访问到网络,但是在家庭宽带下正常。这里都是已经添加过网桥,所以不需要考虑没有添加网桥。

错误日志里,最显著的就是

connection_connect(): Bug: Tried to open a socket with DisableNetwork set

DisableNetwork is set. Tor will not make or accept non-control network connections. Shutting down all existing connections.

百度/必应多次无果,百度里只有一个类似的情况,但是也没有给出方法。没TBB上不了谷歌,所以没法用。

所以把重点转移到这个“DisableNetwork set”上,终于在 Stackexchange 上找到了一个解释页面:Failed to connect Tor 3.5.2 on Windows

大意是网络环境限制/监管很大,Tor的连接都被block掉了,需要使用pluggable transports

这下子就大概明白了,普通网桥都被网管block了。这时候就得靠obfs3网桥了。

打开Get Bridges!,拉到下面高级选项里,选择获取obfs3网桥,输入验证码,添加网桥。

然后连接,等待即可。

PS:如果你无法访问Tor Project,可以去下载OpenDNSCrypt,这样可以避免DNS污染直接访问Tor官网。

22 Jul 11:50

Re: 求那个程序员手动敲出win98的笑话

by TheHanged
发信人: TheHanged (懷著對未來的忐忑我勇往直前), 信区: Joke
标 题: Re: 求那个程序员手动敲出win98的笑话
发信站: 水木社区 (Tue Jul 22 16:20:18 2014), 站内

你以为高手只会复制系统盘的所有字符吗

人家是半小时编程出一个比尔盖茨水平的人工智能
又用半小时指挥这个人工职能复制出10000个高水平人工智能程序员

然后看着这些人工智能用3小时编出win98
【 在 hyoga (白鸟·没见过猪跑,还没吃过猪肉吗?) 的大作中提到: 】
: 标 题: Re: 求那个程序员手动敲出win98的笑话
: 发信站: 水木社区 (Tue Jul 22 16:05:46 2014), 站内
:
: 这不科学啊,简单地算一下(为了计算方便,粗略估计):
: 假设win98安装盘100MByte=800Mbit=838860800bit
: 4个小时=4x3600s=14400s
: 所以这个人每秒要按838860800/14400=58254次键盘。
: 结论是:bull shit...
: 【 在 wzzc (wzzc) 的大作中提到: 】
: : 发信人: xazl (西北狼), 信区: Joke
: : 标 题: 我见过的一个让我瞠目结舌的电脑高手
: : 发信站: 水木社区 (Fri Dec 23 16:27:34 2005), 站内
: : 很久以前,那还是我用win98的时候有次我系统崩溃了,因为我是电脑白吃,我朋友给我介绍了一个高手来帮我修电脑。
: :   他看了一下电脑,问我有没有98的盘,我说没有。
: :   他想了一下,叫我把固定电话拿给他,我想修电脑要电话干什么,但人家是高手,我也不好说什么,就把电话拔下来给他
: : 了。
: :   他把电话线空着的一头接在电脑的一个插孔内,然后进入了dos,然后就开始在电话上不停的按着键,他按键的速度非常
: : 快,但是只按0,1两个键,我搞不懂这有什么用,但也不敢问,看了半个多小时,他还是不停的按这两个键,我渐渐的有些困
: : ,我问他这东西要搞多久,他说要几个小时,我给他倒了杯茶,就一个人去隔壁睡觉了。
: :   醒来的时候,一看已经过了4个多小时,我起身到隔壁,看见他正在98里面调试,过了一会儿,他说,你试试,我坐上椅
: : 子用了一下,真的好了,我当时也不懂电脑,谢过人家就走了。
: :   后来我慢慢对电脑有了了解,终于了解,原来当时那位高手是用机器语言编了一个98系统,我后来问我朋友那位高手的下
: : 落,我朋友说前几年去了美国之后,杳无音讯....
:
:
: --
: 3dfx终将被人遗忘,这是不可避免的。但是多少年后,我仍然可以每天睁开眼就能看到它们,
: 所有的历史都能浮现在那面墙上,一个王朝,一个神话,一个魔法的时代,全部展现在那面
: 墙上。这,就是幸福吧。
:
:
22 Jul 11:48

天文学家如何看待占星术?

by 红猪

本文作者:红猪

wpid-PastedGraphic-2014-07-22-14-12.png

【你出生时太阳、月亮和几大行星的位置,真能影响你的性格乃至命运,甚至影响到具体某一天你的运气是好是坏吗?图片来源:astro-live.gr】

(文/Andrew Fraknoi)有的时候,当天文学家或天文学爱好者向别人介绍自己的兴趣时,他们立刻会被拖进一场关于占星术的辩论当中。面对将这种古代迷信信以为真的人,许多天文爱好者的应答往往都不那么礼貌。可是,许多占星术的信徒都是善良的好人,他们之所以对占星术发生兴趣,只是因为媒体上老是宣扬星座,而他们又没有相应的科学知识来看出这门迷信的破绽。

上世纪80年代,罗纳德·里根任美国总统时,有媒体披露白宫是根据旧金山一位占星师的预测来安排日常事务的。这件事使美国人再次意识到了占星术的广泛群众基础,大众也开始好奇占星师的说法是不是真有道理。下面我就提供一份快速指南,好让各位可以对占星师的预测做出种种回应。

占星术的原则

占星术的理论基础其实相当简单:一个人的性格与命运可以根据他出生时太阳、月亮和几大行星在星座中的位置来判断。占星师用名叫“星相”的图片来分析这些天体的位置,并号称这样就能预测和解释人一生的道路,还能帮助个人、企业和国家制定重大决策。

虽然在一个知道了太阳、月亮和行星究竟是什么、究竟有多远的人看来,这样的说法相当可疑,但是2005年的一次盖洛普调查显示,仅在美国,就有1/4的人表示自己相信占星术的效力。而且每一天,全世界都有数千人根据占星师和占星书籍的建议,决定重大的医疗、职业和个人事务。

占星术的具体起源已经茫不可考,不过它少说也已经有了数千年的历史,而且在许多文化中都以不同的面貌出现。它产生于人类的世界观为魔法和迷信所主宰的时代,那时候,人类对自然规律的掌握往往是性命攸关的。

在那个年代,人类眼中的天体是神,是高贵的精灵——往少了说,也是经常干预人类生活的神性人物。古人迫切地在天上寻找预兆,想看看众神接下来会做些什么。

在这个背景之下,将明亮的行星和“重要”的星座与人生的重大问题联系在一起,也就显得诱人而可靠了。(占星师认为,重要的星座就是太阳的轨迹在一年中经过的那些星座,他们把那些星座称作黄道十二宫。)即便到了今天,虽然社会在科学教育上投入颇多,许多人对于占星术的痴迷依然没有减少。在他们看来,将金星视作一颗云气覆盖、炎热如同火炉的荒漠行星,实在比不上将它视作决定结婚对象的帮手来得诱人。

wpid-QwiFCgXK6__FjySwq7sLle8bsbIskWInZ4pWMxGURLWAAgAApAEAAEpQ-2014-07-22-14-12.jpg

【当地球在一年的时间里围绕太阳运行一圈,我们就会看到太阳的轨迹经过了不同的星座。占星师把你出生时太阳背后的那个星座称为你的“太阳星座”。图片来源:Voyages through the Universe © 2004 Cengage/Brooks-Cole】

10个尴尬的问题

要理解占星术的观点,一个好的办法是挑出它的一些宣言,然后对它们的逻辑结论做一番怀疑而愉快的考察。下面就是我最喜欢向占星术的支持者提出的10个问题。

1、世界上有1/12的人口在某一天具有同样的运气,这样的概率有多大?

报纸上星座专栏(光美国就有1200份日报有此类专栏)的支持者宣称,你只要在某份晨报上的12段文字中阅读一段,就能够知道当天的运势了。我们做一个简单的除法就知道,这意味着全世界有超过5亿人会在某一天具有同样的运气,而且天天如此。要一下子预测这么多人的吉凶,星座专栏显然就只能采用最模糊最笼统的语言了。

2、为什么出生的时间在占星术中如此重要,而不是受孕的时间?

占星术之所以在一些人看来是科学,是因为某个人的星相取决于一个特定的数字――那人的出生时间。占星术在很久之前问世的时候,古人认为一个人出生的时刻也是创造他生命的神奇时刻。但是今天的我们已经知道,出生不过是胎儿在子宫内持续发育9个月的结果。不仅如此,科学家现在还认为,一个孩子性格的许多方面在出生之前就决定了。

不过我倒是怀疑,占星师之所以坚持采用出生时刻,和占星理论其实没有多大关系:绝大多数客人都知道自己的生日,但是要确定自己受孕的时刻就难了(也许还会造成尴尬)。为了使他们的预测有度身定做的效果,占星师于是坚持采用那个比较容易确定的日期。

3、如果母亲的子宫能在孩子出生之前隔绝星座的影响,那么用一圈牛肉把孩子围在中间,不也能起到同样的效果吗?

如果天体真能发射出这样强大的力量,那么它为什么会又在人出生之前被薄薄的一层肌肉和皮肤阻挡呢?如果它真的可以阻挡,而孩子的星相又不够理想,那我们能否在孩子出生后立刻用一圈薄薄的牛肉把他围在中间,以此隔绝天体的影响,直到他的星相变得比较吉利为止呢?

4、如果占星师真像他们宣称的那么灵验,他们自己为什么就没发大财呢?

有的占星师会说,他们预测的不是具体事件,而是大概趋势。还有人说,他们的能力可以预测重大事件,小的就不行了。可是不管怎么说,占星师都应该可以预见到股票或期货的大致行情,并且赚到几十亿的钱财,根本就不必问客人收高额费用。然而,又有几个占星师看到了即将发生的股市和楼市下跌,并且警告了客人呢?

wpid-z8LMDSxGFK4031O0OXL9DfmhIboijqMbSgjKNCjr_zyCAgAACAEAAEpQ-2014-07-22-14-12.jpg

还真有将占星术应用到股市领域的,这门“学科”名叫金融占星术(Financial Astrology),只是不知道那些占星师的财运如何。图片来源:asknow.com

5、在太阳系最外层的两颗行星发现之前,所有的占星都是错误的吗?

有的占星师声称,大多数报纸星座专栏采用的太阳星座(也就是某人出生时太阳在黄道上的位置)并不精确,不足以显示宇宙产生的影响。这些“严肃”的占星师坚称,太阳系的所有重要天体的影响都应该加以考虑,包括太阳系最外层的两颗行星——1781年发现的天王星和1846年发现的海王星。

如果真是这样,那么许多占星师所说的,他们的这门技艺在过去几百年里都曾精确地预测未来,又该作何解释呢?难道说1846年之前的所有星相预测都是错的?如果是那样,那么早年的占星师为什么就没有根据预测的纰漏,抢在天文学家之前就推算出天王星和海王星的存在呢?

6、占星术难道不是一种应该谴责的偏见吗?

在文明社会里,我们谴责一切根据性别、肤色、宗教、民族和其他出生时的偶然因素对人妄下判断的体制。而占星师却自诩能根据另外一个偶然因素评判别人――就是那人出生时某些天体的位置。拒绝和狮子座约会、拒绝雇佣处女座,这和拒绝与天主教徒约会、拒绝雇佣黑人相比,难道不是一样糟糕吗?

7、为什么不同流派的占星术彼此有这么大的分歧?

占星师们似乎在占星这门技术的几个基本问题上都有分歧:地轴的进动是否应该考虑(见下方文字框),多少行星和天体应该参考,以及最重要的,哪些人格特质和哪些天文现象相互对应,都是众说纷纭。阅读10个星座专栏,或者咨询10个占星师,你可能就会得到10种解读。

如果占星术真像它的支持者宣称的那样是一门科学,那么占星师在数千年的数据搜集和解读修正之后,为什么还是没有得出一个公认的理论呢?不同的科学观点在长期与实验和其他证据对照之后,一般都会趋于一致。相比之下,根据迷信或个人信念建立的体系,反而会在从业者对权力、金钱和名声的攫取中逐渐分化。

8、如果星座的影响体现在一种已知的力量之中,那么占据主导的为什么就是行星呢?

如果说占星术的效力可以归结为引力、潮汐或者磁力的影响(每一样都有不同的占星学派主张),那么任何一个刚刚入门的物理系学生都能把影响一个新生儿命运的因素计算出来。罗杰·卡弗(Roger Culver)和菲利普·伊安纳(Philip Ianna)在合著的《占星术真假辨》(Astrology: True or False, 1988, Prometheus Books)里就列举了许多这方面的例子。比如产科医生在接生的时候,他对婴儿的引力是火星的6倍,潮汐力影响是火星的20000亿倍。这位医生的质量或许比那颗红色行星小得多,可是他的位置离新生儿要近得多!

9、反过来说,如果星座的影响体现在一种未知的力量之中,那它为什么就不受距离的影响呢?

宇宙中我们所知的一切远距力,都会随着物体间的距离增大而减小。然而在占星术这个数千年前问世的、以地球为中心的体系中,天体的影响却完全不受距离的制约。火星无论是和地球位于太阳的同一侧,还是在远出7倍的太阳的另一侧,它在你星相中的作用都是完全相同的。如果真有一种不受距离影响的力,它将是革命性的科学发现,我们的许多基本观念都要随之更改。

10、如果天体的影响不受距离制约,那为什么就没有依据恒星、星系和类星体的占星术呢?

法国天文学家让-克洛德·佩克尔(Jean-Claude Pecker)指出,占星师只在太阳系的天体上发挥技艺,这未免太狭隘了。在我们渺小的太阳、月亮和行星之外,宇宙中有数万亿巨大的天体同样应该对我们产生影响。一个客人的星相里少了参宿七、蟹状星云脉冲星和仙女座大星系,他的星相还算完整吗?

wpid-R2luJx9vq6dEuWIfOL7A-M9GlNqRWxh3KjD0QctpQGuyAgAAcgEAAEpQ-2014-07-22-14-12.jpg

【太阳系只是宇宙中极为渺小的一个角落,太阳系以外数以万亿计的巨大天体,不应该被占星术士纳入考量的范畴吗?图片来源:某占星研究院招生海报
检验占星术】

就算在上述所有问题上都对占星术网开一面,承认星相的影响超出了时下对于宇宙的理解,我们最后还是可以给占星术致命的一击:一句话,它不灵验。许多严谨的测试已经证明,占星术虽然说得好听,但它并不能预测任何事情。

毕竟,我们在判断某个东西灵不灵验的时候,是不需要知道它的原理的。过去十几二十年,占星师都忙得没有时间对自己的工作开展统计学上有效的验证,物理学家和社会科学家就只好代劳了。下面就是几项代表性的研究。

美国密歇根州立大学的心理学家伯纳德·西弗尔曼(Bernard Silverman)在密歇根州搜集了2978对将要结婚的新人的生日,以及478对将要离婚的夫妇的生日。大多数占星师宣称,在人际关系方面,他们至少可以预测哪些星座匹配、哪些不匹配。但是西弗尔曼将这些预测和实际的婚姻状况对比,却发现两者并没有相关。比如,“星座不匹配的”的男女,彼此结婚的概率和“星座匹配”的男女是相当的。

许多占星师坚称,一个人的太阳星座和他的职业选择有着密切关系。实际上,职业咨询也已经成为了现代占星术的重要职能。于是美国凯斯西储大学的物理学家约翰·麦戈维(John McGervey)对照了大约6000名政治家和17000名科学家的履历和生日,想看看这两类从业者的生日是不是像占星师预测的那样,都集中在某些星座。结果却发现,这两类人的星座都是完全随机的。

wpid-BFeDaEU-nfj86OOkyHF_2BsGkVJ7SPmEdo-3hNjoh00AAgAA3AEAAEpQ-2014-07-22-14-12.jpg

【一个人的职业发展和他的星座真有关联吗?统计表明,至少上千名政治家和上万名科学家的星座分布完全是随机的。图片来源:predictmydestiny.com】

有占星师认为单凭太阳星座还不足以预测。对此,美国劳伦斯伯克利国家实验室的肖恩·卡森(Shawn Carlson)设计了一个巧妙的实验。他让几组志愿者提供他们完整的星相信息,再要他们填写加利福尼亚州人格问卷——那是一份标准的心理学问卷,使用的正是占星师的那种宽泛、笼统、描述性的语言。

一个“声誉卓著”的占星团体替志愿者看了星相,28名职业占星师同意参加实验,他们每人收到了一份星相,外加3份人格描述,其中的一份正属于星相的主人。占星师的任务是解读星相,然后在3份描述中选出他们认为最匹配的一份。

虽然这些占星师预测自己的正确率可以达到50%以上,但是经过116轮实验,他们的实际正确只有34%——正好相当于瞎猜!1985年12月5日,卡森在著名的科学期刊《自然》上发表了这个结果,这对占星业是相当尴尬的一件事。

另外的实验显示,星相的内容其实并不重要,重要的是求占者要觉得占星师的解读是针对他一个人。几年前,法国统计学家米歇尔·高奎林(Michel Gauquelin)搜集了法国历史上一名穷凶极恶的连环杀手的星相信息,将它发送给了150个人,并要他们评估自己和这些信息的匹配程度。结果有94%的受访者声称在这份描述中看到了自己。

澳大利亚研究者乔弗里·迪恩(Geofrey Dean)对占星术做过广泛的检验,他曾将22名被试的星座信息倒转过来,将其中的描述词语都换成反义词。结果有95%的被试依然声称这些描述说得很准,这个比例和看到原始描述的被试相同。可见,那些去占星的人要的只是指引,随便什么指引都行。

前一阵,天文学家卡弗和伊阿纳追查了几个著名占星师和占星团体在过去5年内发表的预测,结果在3000多份详尽的预测当中(许多是关于政治家、电影明星和其他名人的),只有大约一成是说对了的。换作是资深记者或许多读报看电视的人来预测,结果都会准确得多吧。

如果占星师根据星座所做的预测10次里有9次是错的,那他们看来就不能成为人生抉择和国家事务的可靠参谋了。但是尽管如此,对他们深信不疑的人数还是有成百上千万之多。

显然,我们这些天文学爱好者并不能奢望大众对于占星术的痴迷会就此消失。但我们还是应该在有利或者恰当的时候陈述己见,对占星术的缺点要讨论,对它脆弱的理论基础要指出。和年轻人共事的天文学家可以运用自己的知识在年轻人心中培养健康的怀疑精神,并鼓励他们对真正的宇宙产生兴趣——那些遥远的行星和恒星自有其魅力,它们对地球生物的生活和欲望才不关心呢。我们不能放任下一代在古人的幻想中成长,因为那都是人们蜷缩在火堆旁恐惧夜色的时代留下的妄想。(编辑:Steed

本文作者安德鲁·弗拉克诺伊为美国山麓学院(Foothill College)的天文学教授,2007年荣获卡内基教学促进基金会和教育促进及支援协会颁发的加利福尼亚年度教授奖,太平洋天文学会颁发的理查德·埃蒙斯奖(Richard H. Emmons award),以及美国物理学会颁发的安德鲁·格芒特奖(Andrew Gemant Award)。

扩展阅读

地球进动:你有没有读错星相?

我们的地球在宇宙中的运动分成几种。除了绕着地轴转动(形成了白天黑夜)、围着太阳转动(形成了春夏秋科)之外,它还有另外一种运动,这种运动比较缓慢,知道的人也不多:我们这颗行星的轴线本身也在绕着圈子运动,就像一只陀螺在转动时,它的轴线也在缓缓转动一样。地轴的这种转动称为“进动”,它的速度是相当缓慢的,要25000年才能完成一周。

因为有了进动,地轴会随着时间的推移指向不同的方向。(今天位于北极点正上方的北极星,并非一向处在这个位置!)当地轴转动,我们在某个月份看见的太阳背后的星座也会随之变化。太阳在12个月中经过的那条星座带称为“黄道”。既然地轴进动一周的时间大约是25000年,而黄道又分成了12个星座,那么太阳每隔2000年左右就会移动一个星座的位置。巧的是,现代占星术的规则正好是在大约2000年前形成的(由托勒密在他的名著《占星四书》中规定)。也就是说,太阳每月经过的星座,其实已经移动了一格。

wpid-pZBa7zFP5wpX00UXAllUJTDYelWfxgnvbBzLjYK282SlAQAA4AEAAFBO-2014-07-22-14-12.png

地球的自转轴就像陀螺摇晃一样,也会缓慢进动。由此造成的岁差现象,会使每年同一天太阳在星空背景中所处的位置略有变化。成百上千年之后,如今真正的“太阳星座”与占星术所采用的2000年前的那套体系,已经偏出了一个星座。图片来源:wikipedia.org

我们来看一个实例:占星师认为,一个8月1日出生的人,他的星座是狮子座。2000年前,太阳在8月1日的确位于狮子座。但是到了21世纪,由于地轴进动的影响,8月1日那天的太阳已经不在狮子座了,而是移动到了巨蟹座。就这样,占星术的星座和它们据以产生的真正星座之间发生了“错位”。

由于许多和星座有关的性格特征都是根据古人看见的星座形象制定的——比如水里的一条鱼、空中的一只鸟——这个错位就使得整个占星体系产生了疑点。

“占飞机术”

还有一个好办法可以让大家思索占星术的效用,那就是生造出一门内容相似,却没有那么多传统和历史负担的“科学”来。我就喜欢叫别人想象一门名叫“占飞机术”(Jetology)的新科学,它主张在一个人出生的时候,全世界大型喷气机的位置都会影响他的性格和命运。

为了得到占飞机学的精确解读,客人必须耐心等候职业占飞机师详尽地分析全世界喷气机的位置分布。(这些数据可以用电脑来搜集和组织,可见占飞机术一定是一门科学!里根总统的占星师就是这么宣称的——因为她使用了电脑,所以占星术一定是科学。)

然而,就算你的占飞机图像已经绘成,如果没有高明的知识,你就依然看不懂图像的涵义。要正确地解读这样一幅图像,你就必须接受好几年的占飞机术训练。以飞越旧金山上空的大型喷气机群为例,它对求占者爱情生活的意义,是需要一位资深占飞机师经过大量研究才能弄懂的。

当你的听众开始对这个荒谬的例子发笑时,你可以问问他们这有什么好笑。肯定会有人问你为什么那些东西在天空中的位置能影响我们的人生——这时,你就可以用同样的问题质疑占星术了。

22 Jul 04:49

如何从 WEB 页面中提取信息

已经五个月没有更新 blog 了,这五个月全身心投入到了两个关于如何从页面上抽取结构化数据的项目上。这也是我加入某厂最主要的原因。其中一个全自动模板生成抽取器,虽然还不完全能够实用,但比1年前效果好太多,同时也让我想明白了一些问题。这都是下文主要讨论的问题。

关于 pyspider 项目,这几天我也在慢慢填上这延期了3个月的坑,至少完成第二里程碑吧。但缺少实际应用的环境,很多东西是否工作得很好,我也不是很有把握。如果有的话,还是希望支持1-2个实际的抓取项目吧。

而 “如何获得页面/数据” 这个问题依旧是我持续关注中,想要去解决的问题。但是,既然某厂的后续解决方案是将所有抓取页面过 webkit 渲染(虽然很多时候渲染不出 或 需要点击动作,代价往往大于直接抓 API),不会有很多精力投入,待我慢慢想想。。

四种解析模式

xpath / css选择器 / 正则表达式

示例: https://www.kimonolabs.com/

通过手动、自动、半自动方式,设定需要抽取元素的 xpathcss选择器 或 正则表达式 进行定位提取的方法(这里需要指出的是,html 并不是正则的,正则表达式可能在部分简单提取时有效,但 不要用正则表达式进行页面提取)。其根本思想是提供一种定位元素的规则进行页面抽取。

这个方法被用得最多,好处是有效,嗯。缺陷在于用户需要会 xpath / css选择器 / 正则语法,虽然有一些工具(例如上面的kimono、chrome的调试工具、pyspider里面的脚本)辅助生成规则,但可能通用性不足 或 区分度不够,选取到不需要的内容。这在大批量抽取时需要大量的高级人力去配置,即使是熟练工也需要5-10分钟配置一个页面(6-8个属性),需要耗费大量精力。

这种抽取方式的一种变形是:将 key 和 value 同时在页面中标出,通过 key 和 value 总是穿插出现的这一假设,省去单独为每个属性设置规则的人力,极大增快标注效率。
例如:http://movie.douban.com/subject/7054604/ 这个页面中的
> 导演: 迈克尔·贝 > 编剧: 伊伦·克鲁格
> 主演: 马克·沃尔伯格…
> 类型: 动作 / 科幻 / 冒险
> 制片国家/地区: 美国 / 中国大陆 > 语言: 英语 / 汉语普通话 / 粤语
> 上映日期: 2014-06-27(美国/中国大陆)
> 片长: 166分钟
> 又名: 变形金刚:歼灭世纪(港) / 变形金刚4:灭绝时代 / 变形金刚4 / 变4 / Transformers 4
> IMDb链接: tt2109248

导演/编剧/类型等 属性名 往往拥有相同的 xpath,而值的 xpath 也是独立的几种。他们一定是 key: value 的形式组织的,通过用 key 分割 value 的方式能轻松将所有信息提取出来。

data highlighter

示例: http://googlewebmastercentral.blogspot.com/2012/12/introducing-data-highlighter-for-event.html

Data Highlighter 的标注方式是:给一系列相似的页面,让用户标出(高亮)每个属性在页面中的位置。通过多个页面的标注信息,寻找每个属性的特征。当然了,这个特征可以是 xpath,也可以是上下文,也有可能是机器学习的特征向量。

Data Hightlighter 通过高亮 多个页面中相同属性 进行规则学习,省去了人为设置规则时的学习成本。实践表明,在单一页面模板下,标记2个页面就足以生成规则了。效率远大于手工设置规则。Google Data Highlighter 甚至对文字进行了切分,能在 英语 / 汉语普通话 / 粤语 xpath 相同的情况下,分别选出三种语言。是我目前见过的成熟度最高、通用性最好、最简便的数据抽取方式。

micro-data

示例: http://microformats.org/ 以及各大网站

页面属性标记,通过在页面数据元素上增加属性标识,通过开放的标准格式,为数据提取提供便利,例如这是豆瓣的评论数据:

< p class="rating_self clearfix" typeof="v:Rating"> <span class="ll bigstar35"></span> <strong class="ll rating_num" property="v:average">6.7</strong> <span property="v:best" content="10.0"></span> </p>

typeof="v:Rating" 表明这里是 rating 数据,v:best 表明 rating 的最大值。通过开放的 data format 标准,只按照标准抽取,就能得到包含的结构化数据。但是,需要站长的支持,在页面中加入标记才可以。

从广义上讲,主图识别,页面发布时间这样的属性,其实也可以是通过对页面内容进行分析获得的。这与 micro-data 一样,通过元素足够强的特征,对元素的含义进行理解分析。

模板生成与提取

image

页面模板(wrapper)抽取是基于这样一个假设:结构化页面都是 通过模板 将数据库中的数据 映射成页面的。通过页面分析,得到页面模板,通过模板提取出实际的结构化数据。

例如,我使用过的方法,将多个相似页面放在一起比对,寻找等位节点(具有相同结构或表示相同数据类型的元素),将 DOM树 合并。通过比较不同页面上的同类节点,能够获知页面中哪部分是变化的,哪部分是不变的。变化的部分为数据,不变部分为模板。最后形成如上图所示的模板,页面变化部分被涂黑。这个方法类似于将多张纸叠在一起,透过光去看,就会发现变化的文字部分会比其他部分更黑。

当然了,这个方法也有缺陷,例如:页面一页面二 的标题部分,一个是蓝色,一个是绿色,虽然在人类视觉上它们相差不大,但从页面结构上绿色多了一层 <font>,作为算法很难理解,这样的样式表示他们是否有相同的含义,是否有区别。同理左侧推荐的蓝绿相间,即使作为人也很难理解它们有什么区别。

两个核心问题

总结起来,以上四种解析模式都在尝试解决以下两个问题:

一个元素在说什么

当你打开一个页面,你怎么知道一个页面在传递什么信息?你怎么知道一个元素是文章的标题?怎么知道一个元素是作者?作为人类,我们可能会看到一个元素的位置是否在页面中间,元素的字体大小、颜色,元素前面是不是有一个 “作者:”,元素内容是否长得像一个人名/时间,上下文中这个元素都在讲什么,这篇文章是什么领域,等等。人类可能会有非常多的 经验知识 ,当看到一个页面的时候能够解读出页面上的信息。

在 “xpath / css选择器 / 正则表达式” 的解析模式中,这个工作正是人肉去完成的,人去解读这个页面,找到信息所在元素。而在 “data highlighter” 的解析模式中,也需要人在多个页面中进行标注,告诉机器每个属性所在。

但是作为计算机,是否能做到这一点?micro-data 通过开放的格式约定,通过 property 这一个特殊的属性标记告诉计算机一个元素说的是什么。而模板挖掘通过:xpath,元素class,id属性,上下文等特征去挖掘元素的含义。

但是,页面样式结构,在人类在没有足够的知识情况下,也有可能会无法解读,例如我们的爷爷奶奶可能就看不懂网页上说的是什么。同时,正如语言是有二义性的一样,页面结构也会如此,这给计算机去理解,页面说的是什么,带来了巨大的困难。

这个元素和其他的元素有什么区别

因为,大批量数据抽取是计算机的活,这需要 准确 地告诉计算机,你想要抽取的元素是哪一个。在 “xpath / css选择器 / 正则表达式” 的解析模式中,xpath、css选择器、正则表达式正是对这一信息的描述。选取一个正确的表达式,即涵盖不同页面,又和其他属性有所区分,是一件需要经验和技巧的工作。而 “data highlighter” 将这个工作交给了计算机。“模板生成和套用” 过程中也由计算机分析出了规则。

而对于 “micro-data” 来说,这个问题有些特殊。通过开放的标准格式,程序已经能够了解每个元素在说什么了,那么定位就不再有意义。但是反过来,这又何尝不是一种定位。

结构化解析

结构化解析实质是计算机对一个页面的理解,无论这种理解是人去创建规则、做出某种约定 还是 机器学习。上面列举的四种解析方式,“xpath / css选择器 / 正则表达式” 和 “data highlighter” 回答了这个元素和其他的有什么区别。 “micro-data” 利用了一个元素在说什么。而 “模板生成与提取” 同时涉及元素说什么,它在哪。

那么作为结构化解析的究级形态是怎样?我们可以假想一个人,他打开一个页面就能知道上面说的是什么,有什么样的信息,这是人类对于:通过网页获取知识的一种能力,一种方式。计算机也是一样,结构化抽取 就是 计算机从网页中获取知识的过程。“这个元素和其他的元素有什么区别” 终究只是在无法达到:计算机理解 一个页面在说什么 的辅助手段。理解 “一个元素在说什么” 乃至 “一个页面在说什么” 我认为是才是其究级形态,而结构化数据也不过是计算机,对于浩瀚互联网信息理解的一种表达罢了。

22 Jul 04:49

开发Android必知的工具

by Ider

tools程序开发有时候非常依赖使用的开发工具,好的完备的开发工具可以让开发人员的工作效率有大幅度的提高。开发Android也是如此,大家可能都离不开Eclipse或Android Studio这些工具,但他们其实是集成开发环境(Integrated development environment, IDE),把很多工具集成在一个里面,配合可视化界面和键盘快捷键,方面寻找和使用。

不过有时候工具集成太多了,往往让人感到迷惑容易遗忘某个工具的存在。本文就谈谈Android开发和Debug时可使用的一些工具,这些工具都可以在安装了Android SDK的Eclipse或Android Studio找到相应的菜单和按钮来打开使用。但考虑到IDE很多时候打开速度实在太慢了,还是考虑直接使用指令在终端单独开打它们吧。

如果安装了Android Studio,这些工具可以在其安装包中找到,比如在Mac下它们就保存在/Applications/Android Studio.app/sdk/tools路径下。如果是使用Eclipse,那么就需要手动下载Stand-alone Android SDK,解压之后也能在其下的tools文件夹里找到。

android

这个工具会叫android也说明了它地位应该是最高的,的确它的功能包括了管理SDK(Software development kit)和AVD(Android Virtual Device),以及创建和更新开发使用的Project。通过android -h就能看到其基本使用方式。

       Usage:
       android [global options] action [action options]
       Global options:
  -h --help       : Help on a specific command.
  -v --verbose    : Verbose mode, shows errors, warnings and all messages.
     --clear-cache: Clear the SDK Manager repository manifest cache.
  -s --silent     : Silent mode, shows errors only.

                                                                    Valid
                                                                    actions
                                                                    are
                                                                    composed
                                                                    of a verb
                                                                    and an
                                                                    optional
                                                                    direct
                                                                    object:
-    sdk              : Displays the SDK Manager window.
-    avd              : Displays the AVD Manager window.
-   list              : Lists existing targets or virtual devices.
-   list avd          : Lists existing Android Virtual Devices.
-   list target       : Lists existing targets.
-   list device       : Lists existing devices.
-   list sdk          : Lists remote SDK repository.
- create avd          : Creates a new Android Virtual Device.
-   move avd          : Moves or renames an Android Virtual Device.
- delete avd          : Deletes an Android Virtual Device.
- update avd          : Updates an Android Virtual Device to match the folders
                        of a new SDK.
- create project      : Creates a new Android project.
- update project      : Updates an Android project (must already have an
                        AndroidManifest.xml).
- create test-project : Creates a new Android project for a test package.
- update test-project : Updates the Android project for a test package (must
                        already have an AndroidManifest.xml).
- create lib-project  : Creates a new Android library project.
- update lib-project  : Updates an Android library project (must already have
                        an AndroidManifest.xml).
- create uitest-project: Creates a new UI test project.
- update adb          : Updates adb to support the USB devices declared in the
                        SDK add-ons.
- update sdk          : Updates the SDK by suggesting new platforms to install
                        if available.

android sdk

全新的SDK包里是没有编译工具的,Android程序员都知道Android有很多个版本,开发时要针对版本进行设计和编程。android sdk指令就可以开打一个可视化的管理窗口,让用户可以在上边选择下载需要的Android版本以便可以使用其上的API。还可以下载相应API的源码方便学习。
(可以不加sdk参数,直接使用android指令也是打开SDK管理窗口。)
android-sdk

在这个界面上也可以选择将SDK工具,也就是本文中所要提到的工具,更新到最新的版本。如果不小心更新到了现在开发还不兼容的SDK版本,在这里就无法降版本了,只能到晚上重新下载旧的版本,然后拷贝到前面提到的sdk文件下覆盖现有的tools文件夹。

android avd

开发Android程序一定要有设备来做测试。最好的就是破解了的具有管理员权限的实体设备;如果没有,一部可以开启开发者选项的普通实体设备也可以。因为实体设备的运行效率是最好的(只要不是已经差不多块被市场淘汰的老旧的Android手机),呈现的效果也更接近真实用户的体验。如果实在没有实体设备来做开发,那就只能退到虚拟设备上了。

android avd指令可以打开虚拟设备管理器,方便创建和修改Android虚拟设备以供开发测试。不过在此之前还是需要使用SDK管理器去下载相关API版本的设备镜像才能创建指定版本的虚拟设备。
android-avd

虚拟设备毕竟是借用电脑上的资源所以相对来说运行速度会很慢。但使用虚拟设备也有几个好处:不用担心设备没有电;在做演示的时候可以投影显示;可以创建不同API版本和屏幕尺寸的设备来做查看效果,就不需要花很多钱买齐各种设备

其他功能

android指令还可以用创建Android项目,然后用ant或gradle来编译,这样就可以完全脱离IDE。不过多数情况下还是会倾向于使用IDE来创建,毕竟可视化的界面会更加的便捷。有时候可能想要部署到其他的设备或者开发项目可以使用这些脚本来做到一键创立。

DDMS

这个工具也是极为重要的,使用频率比android是高很多。android这个工具大多数是用来做初始化配置,而ddms则是debug过程中不可缺少的。它可以查看程序使用时所运行的线程信息,网络使用率,可以进行profiling来查看期间那个方法使用了最多的资源。
ddms

在Eclipse和Android Studio中都已经很少的集成了logcat内容的展示,在IDE中还能直接通过点击异常的条目来跳转到相应的出错文件的指定行,十分方便,所以一般不会单独在终端打开这个界面。

dmtracedump

这个指令不太常用,主要是把profiling生成的trace文件处理成一个图片文件,显示方法之间的调用关系。除了看得比较酷炫,实际很难直接从图上找出太多有用的价值。
dmtracedump

uiautomatorviewer

这个工具在我看来绝对是神器啊,它可以展示出当面屏幕所呈现的视图(View)的布局(Layout)以及其尺寸大小。这样就可以用来调整xml文件来重新安排布局。不过更多时候,我用它找到视图的id,然后通过id反向寻找对应的的xml文件。

这个工具不局限在只能查看自己的应用,它可以显示屏幕上的任何东西。所以可以用它来看看别人的应用使用了什么View来呈现也是不错的,比如看看他们是用ListView还是RelativeLayout,用的时button还是textview加点击事件。
uiautomatorviewer
有些局限就是它不支持查看自定义的视图,只会显示系统定义的类型名字。另外如果是利用canvas和OpenGL画的内容,也无法查看到其具体细节。不过知道别人是自己画的,不是简单组合几个系统视图那也是很有用的信息。

traceview

这个工具也是用来打开profiling生成的trace文件的,但它远比dmtracedump要好用的多。traceview会列出每个方法调用所使用的事件,展开方法还能看到方法被调用其他方法所占用的时间百分比。这样就可以知道那个方法用了最多的资源,进而可以对其进行优化或者将其搬离主线程。
traceview-alone

monitor

说了那么多工具,再来说monitor工具,我感觉前面说这么多都是在浪费时间,因为只要这一个就可以包含全部前面介绍的工具了。还额外附赠了好些功能,比如uiautomatorviewer一次只能查看一个屏幕布局,但使用monitor捕获会生成独立的文件,查看互不影响。只能说前面的只是为各个工具做功能介绍,真需要用的时候只要打开monitor就好了。
monitor

同样的它也可以打开trace文件分析方法调用所花了的时间。
traceview

其它

emulator

用指令emulator -avd <name>来启动给定名字的虚拟设备,不过一般还是会通过AVD管理器来打开。但是如果某个虚拟设备经常使用,用这个来打开是挺方便的。要是记不住名字,可以通过android list avd来查看。

monkeyrunner

这个指令可以运行一些脚本来模拟一个返祖用户是如何疯狂的使用开发的应用程序的,用它做一些压力测试也是挺好的。如果不想写脚本,也可以直接使用adb下的monkey指令来做类似的测试。

sqlite3

Android默认自带了sqlite做数据库,SDK中也提供了简洁清晰的API来创建和访问sqlite数据库文件。数据库文件存在于设备的/data/data/<app-packagename>/databases路径下,每个应用都有自己保存数据库文件的文件夹。SDK工具中也带了这个sqlite3工具帮助喜欢用终端来查看sqlite文件的程序员来访问数据库文件。

不过我很少使用这个工具,因为必须要把sqlite数据库文件设备中用adb pull指令提取到电脑上。而对于普通设备,因为缺少操作权限而无妨提到sqlite数据库文件。对于破解的具有管理员权限的实体设备或者虚拟模拟器,它们在设备上就有sqlite3指令可以直接在adb shell下操作。更主要的原因是我还是习惯用具有可视化的程序来查看这些数据。

mksdcard

该工具是为Android虚拟设备提供一个伪造的sdcard来提供设备的存储量。多个设备也可以共用一个由这个工具创建出来的文件,只要他们不同时启动使用。

 

在终端运行这些工具时,可以在指令最后加上 & 让其在背后运行,这样就可以在一个终端同时打开多个工具了。要像了解其他更多关于最新Android工具的内容,可以浏览Android开发官方网站,还有Android Tools Project Site网站,以及历年Google IO上介绍Android工具的视频。

除了这些工具外,Android还有一个更强大的工具那就是adb,不过它更像是指令没有可视化界面。而且adb已经从tools文件夹移到了platform-tools下了。在之前已经有文章介绍通过它查看Activity Stack的方式,之后也会有更多文章来详细介绍它。

References:
  1. SDK Tools | Android Developers
  2. Managing Projects from the Command Line | Android Developers
  3. Updating SDK from command-line – Android Tools Project Site
  4. Using DDMS | Android Developers
  5. Android: how to use dmtracedump – Stack Overflow
  6. Google I/O 2014 – What’s new in Android development tools – YouTube
  7. Google I/O 2011: Android Development Tools – YouTube
22 Jul 04:48

如何让设计效果可量化

by CDCer

前言:

做搜搜这些年一直沉浸于重点工作中的项目,除了定时写项目总结与培训。都快忘记写文章很抱歉。这次终于有了重新学习机会,2014年应该多写。

长久一来也是思考如何让我们每天面对的工作内容更直观价值体现与量化。

做为搜索交互设计师。更正,做为搜索用户体验设计师,如何将你的技能和除网站之外背景知识运用到搜索设计工作中去–这也正是大多数用户体验真正开始的地方。

想到搜索的设计,就是搜索还需要设计?或是搜索不就一个框加按钮.让视觉做的好看些不就好了!其实交互设计师,视觉设计师,开发人员,信息架构师,搜索引擎优化专业人员以及WEB分析师都因为各自有着独立技能体现出各身在于搜索类产品的价值。那作为合格设计师我们不仅需要是知识,技能,经验,创新等,同时我们也需要具备体现设计工作价值的方法。

 

记得在项目不断迭代优化过程中,设计师们也总说我们价值不被认可。当时需求方与老板也常问我你们设计究竟能否可量化如何可量化?当然先不说其它因果原由与价值其它体现。本身这个问题也是我长久一来一直思考刚好借此将它解决。当时也找团队讨论听到大家纷纷提到设计太抽象与设计很难通过数据量化等…其实在这个探讨过程也是发现问题所在过程,把大家疑虑问题点归纳然后逐个分析并且思考解决后再归纳梳出。然后在实战过程中再不断调整与持续再归纳思考。

简单如下:

 

首先,我们做项目的交互设计可量化是需要一个基本评估标准:

个人认为根据不同项目侧重会有所不同,这个需要设计师根据项目需求和产品目标等来判断。任何纬度与标准都是参考,随着个人和行业发展与变化一定都是时时变通。所以没有固定标准走天下或者说标准也是时时更新中。

  1. 1.项目功能设计。

– 点击率、转化率、点击流、活跃度、留存率、成功率等

  1. 2.体验可用性。

识别性- 点击率

高效性- 时间效率

有效性- 功能使用成功率、操作信息传达有效性

易学性- 新用户操作与操作的符合程度

一致性- 和规范不一致数量

  1. 3.用户满意度。

– 口碑、新增用户数、在线时长、回头率等

 

其次,根据基本评估标准进行评估可量化:

每个项目根据需求设计都有所不同,搜搜在做网页改版时候我们有比较突出预览功能,左边栏等。当时我以A/B Test, 灰度测试做为主要数据评估方法。在预览新产品没有参照物时候,其实建议可用按我们预期标准来进行对比。相反则以同时与旧版本进行对比。

  1. 1.数据统计和分析。

-采用数据指标有:点击率、转化率、点击流、活跃度、留存率、成功率等。

 

1)  举例:以网页预览点击率分析

预览适合评价纬度
功能需求、识别性

统计方法
点击次数/曝光量

参照物
上线前后一周或者一月的日均同比
AB测试的方式,两个方案之间比较
干扰因素

同比的方式,不适合单独评估内容型模块的设计效果,用户点击的决策受内容本身影响较大。

2)  举例:以点击流分析

适合评价纬度

有效性

统计方法

页面跳转的持续点击流统计

参照物

上线前后一周或者一月的日均同比

AB测试的方式,两个方案之间比较

干扰因素

同比的方式,会受不同时间段内其他相关因素的干扰。

……

转化率在做搜搜首页改版时做为数据指标给出很好的评估参考。活跃度与留存率均在预览功能设计同时做为很重要的数据评估指标。成功率在需要用户配合注册或填写内容时等也都可以做为其一参考。以上是做为搜搜为纬度的数据基本标准参考内容。个人始终把数据做为客观决定之一,并非唯一。

 

2. 用户研究。

– 用户访谈、问卷调查、产品反馈满意度、可用性测试

用户研究比较适用于搜搜需求挖掘和新方案的评估,可用性测试主要分为两类:

1)    总结性评估:版本更新时,评估旧版本,可以给与新版本以设计指导,并且作为新版本上线后的比较依据。

2)    设计中评估:用设计Demo或灰度上线,找用户测试,目的是发现问题,在产品完全上线之前更加完善产品。

 

3. 专家评估。

大家在探讨过程中提到最多,其实我很犹豫要不要写上这个点。专家评估的权威性和产品形态了解程度都会受限。因为没有完善标准可以普及到每个对应背景设计环境中。当然经验很重要,所以在评估过程中可以给以很好的建议。另外就是站在其他角度去看体验闭环。但建议不要做为可量化硬性参考。

 

以上是简单归纳的几个思考点,如前面提到归纳实战后再不断思考归纳。搜索产品常常让设计工作价值更值得长期思考并挖掘。越是简单越值得挖掘。或许数据增长也不代表设计质量一定就是最好。再或者我们不仅把本身做为参照对比数据 ,同时与行内对比数据又如何更好挖掘。确定工作成效的评估纬度和评估指标不管是否可度量,都是我们设计师值得去思考与挖掘必经之路。

 

(本文出自腾讯CDC博客: http://cdc.tencent.com/?p=8118)

22 Jul 04:48

后缀自动机SAM初探

by fullpower

参考论文:陈立杰2012年WC讲稿《后缀自动机》

后缀自动机(FHQ+Neroyesq) http://hi.baidu.com/myidea/item/142c5cd45901a51820e25039(推荐)

 

SPOJ NSUBSTR

题意:给定一个字符串L<=250000,求长度为1,2,3……L的子串最多出现的次数。

建立后缀自动机,求出返祖边Parent树拓扑序。(等价于按照节点的len值从大到小排序,基数排序即可)

父节点表示有相同后缀但是最长长度小于当前后缀,是所有子节点的并集。

初始化最长链的节点(即原串?),每个节点即一个后缀。按拓扑序更新父节点。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define MAXN 500010
#define MAXC 26
using namespace std;
char ch[MAXN];int ws[MAXN],rk[MAXN],sz[MAXN],ans[MAXN];

struct Suffix_Automaton{
	int child[MAXN][MAXC],f[MAXN],l[MAXN];
	int head,tail,tot;
	void clear(){
		memset(child,0,sizeof(child));
		memset(f,0,sizeof(f));
		memset(l,0,sizeof(l));
		head=tail=tot=1;
	}
	void add(int c){
		int p=tail,np=++tot;l[np]=l[p]+1;tail=np;
		for(;p&&!child[p][c];p=f[p]) child[p][c]=np;
		if(!p) f[np]=head;
		else if(l[child[p][c]]==l[p]+1) f[np]=child[p][c];
		else{
			int q=child[p][c],r=++tot;
			memcpy(child[r],child[q],MAXC*sizeof(int));
			f[r]=f[q];l[r]=l[p]+1;f[q]=f[np]=r;
			for(;p&&child[p][c]==q;p=f[p]) child[p][c]=r;
		}
	}
	void insert(char*ch){
		int l=strlen(ch);
		for(int i=0;i<l;i++) add(ch[i]-'a');
	}
	int solve(char*ch){
		int len=strlen(ch);
		for(int i=0;i<=len;i++) ws[i]=0;
		for(int i=1;i<=tot;i++) ws[l[i]]++;
		for(int i=1;i<=len;i++) ws[i]+=ws[i-1];
		for(int i=tot;i;i--) rk[ws[l[i]]--]=i;
		for(int i=0,p=head;i<len;i++)
			sz[p=child[p][ch[i]-'a']]++;
		for(int i=tot;i;i--) ans[l[rk[i]]]=max(ans[l[rk[i]]],sz[rk[i]]),sz[f[rk[i]]]+=sz[rk[i]];
		for(int i=1;i<=len;i++) printf("%d\n",ans[i]);
	}
}SAM;

int main(){
	scanf("%s",ch);
	SAM.clear();
	SAM.insert(ch);
	SAM.solve(ch); 
	return 0;
}

 

22 Jul 04:48

搜索,快人一步

by 依云

缘起

在一群文件里搜索特定的文本,第一个想到的工具是经典的 grep。自从知道 ag——The silver searcher 之后,我就只用 grep 来过滤管道啦。

ag 的优势:

  • 命令短
  • 和 ack 以及 git grep 一样,默认会忽略掉你通常不想看的文本(二进制文件、被版本控制系统忽略掉的文件)
  • C 编写的,比 ack 更快!

作者在学在乎程序的执行效率。这也很重要,因为文件多啊,几十上百兆的源码找起来可费时了。

不过在我这里,ag 取代掉的既不是 grep 也不是 ack。因为我之前用的是 cgvg,和 ack 一样也是 Perl 写的,但不一样的是,它包含两个命令:一个(cg)用来搜索,另一个(vg)用来在编辑器里打开!

不知道为什么其它工具的作者都没有想到这一点。匹配的地方找到了,大部分情况都需要用编辑器打开看看,也许再改改吧?cgvg 免去了复制路径到编辑器里并跳转到特定位置这一烦琐的步骤。

所以换用 ag 之后,我自然也希望能够很便利地使用编辑器查看匹配的地方了。为此,我做了三个工具。好吧,其实有一个是在 cgvg 时代就已经有了的。

搜索

实践一下。假设我要寻找 Vim 源码中涉及到p_enc变量的地方。使用 agg 命令来搜索并使用翻页器 less 显示结果(截图时没有显示出 less 的存在):

agg result

agg 脚本更改了 ag 的显示样式,每一项开头都有一个序号,就和 cg 命令一样。同样地,agg 也把这个结果保存在主目录下的一个文件,以供 agv 命令使用。

注意,agg 并不能用来按文件名搜索。这种情况还是用 ag -g pattern

使用编辑器打开

agv 命令不给定参数,会显示上一次搜索的结果。如果给出一个编号,就会将结果在AGV_EDITOR环境变量指定的编辑器里打开,并跳转到对应的地方。和 vg 不同的是,agg/agv 为每一个终端维护了一个结果列表,这样就可以在不同的终端里搜索不同的内容而不会相互干扰了。

比如我们要去第 14 号结果所在的地方,只要执行agv 14,然后就到了:

agv result

我这里是在已有的 gVim 里打开的哦。因为我设置的AGV_EDITOR的值是vv $file:$line:$col。这是一句包含占位符的 shell 命令。$file$line$col分别是结果所在的文件、行号、列号。而vv,则是我写的另一个工具,用来在已经打开的 gVim 里打开文件,并且跳转到特定的地方

vv 需要 Python easygui 库,以及 gVim(或者 Vim)的 +clientserver 支持。vv 不仅支持上述格式的参数,作为一名 Pythonista 所编写的工具,它也支持从 Python 报错时打印的 Traceback 的行中提取文件名和行号。比如:

vv 'File "/usr/lib/python3.4/sre_parse.py", line 358, in _parse_sub'

这里,不一定要复制一整行。包含必要的信息(文件名和行号)就可以了。

当然,手动复制粘贴比较累。所以配合我的 zsh 全局别名:

alias -g XS='"$(xsel)"'

我只需要选中那一行,然后执行

vv XS

就可以了。zsh 会帮我把XS展开成我刚刚选择的文本。

ag.vim

ag.vim 是一个 ack.vim 的修改版,用于在 Vim 中调用 ag,就像 ack.vim 在 Vim 中调用 ack、grep.vim 在 Vim 中调用 grep 一样。

因为经常搜索在当前光标下的内容,我写了这么一条自定义命令:

command Agg exe 'Ag -Q ' . expand('<cword>')

仓库地址

https://github.com/lilydjwg/search-and-view

22 Jul 04:48

gdb代码调试总结

by sundayhut

1.gdb 编译、运行

编译:gcc -g -Wall hello.c -o hello

调试:./hello

 

2.设置断点

b 函数名

b 行号

上述b为break的简写

设置好断点后,可以通过info break查看设置的断点:

 

3.continue指令

运行到断点停止后,可以输入continue使代码继续运行

4.watch指令

watch s   变量s发生变化时中断 运行时 continue 继续执行遇到s变化时会显示old value以及new value以及watchpoint 号。如下:

 

 

顺便说一句,info break也可以看到watch对应的编号

 

5.run 运行

run 运行程序,若有参数,则在run后面加参数

 

6.print 查看变量

print value 查看value的值

 

7 清除断点

clear n 清除第n行的断点

delete breakpoint 1   其中1是breakpoint的num,该num可以通过info break查看

 

8.disable 清除watch点

disable 4  其中4是watch点的num,该num同样可以通过info来查看。

如下如在输入disable 4之前,Enb状态为y,输入后状态为n

 

之后要是用上了什么实用的gdb指令再完善该文章

22 Jul 04:48

文件系统--重命名的实质

by sundayhut

在minix系统中输入如下指令

mv /tmp/test/a.txt /tmp/test/ttt/b.txt

文件系统具体的操作时什么?

step1 :找到/tmp/test所在目录项对应的数据块,得到a.txt文件的inode number,假设是0x18,并把inode number设为0,这样就把a.txt删除了

step2 :通过路径名得到/tmp/test/ttt目录所在的数据块,在其中添加一个新的目录项,并把该目录项的inode编号设置为Ox18,其他目录项的设置保持不变。这样就在/tmp/test/ttt下新建了一个b.txt。

所以说文件本身没有任何移动,在重命名指令下改变的只是目录项。

 

具体如下。

1.在/tmp/test目录项所在block找到a.txt,置为0.

022f060 00 00 62 2e 74 78 7400 00 00 00 00 00 00 00 00 |..a.txt.........|  “a.txt”文件,其inode number 
0022f070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|  被设为0 
 
2. 通过路径名翻译成磁盘上的位置得到“/tmp/test/ttt/”目录文件中的目录项,在其中添加一个新的目录项
0022f860 18 00 63 2e 74 78 7400 00 00 00 00 00 00 00 00 |..b.txt.........|  “b.txt”文件,其inode number 
0022f870 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|  被设为0x18
 
橙色的内容62改成了63,其他内容没变,其实对应的是a.txt该名为b.txt,名字由a变成了b
22 Jul 04:47

模块化系统盘正在使用的文件系统类型

by sundayhut

背景:

在我的博客将文件系统模块化一文中提到了系统盘所在分区的文件系统,不能运用那篇文章介绍的方法。原因很简单:举例说明:

系统盘所在的分区为/dev/sda1。该分区的文件系统内类型为ext4。启动系统,为保证系统能运行,系统就自动将内核中的ext4.ko插入到模块中了。所以已经不给你机会再插入自己编译的该模块了。

那如果我偏偏就像研究ext4文件系统呢,难不成要重装系统,然后把系统盘改成ext2,或者ext3格式~~~~No No!!用不成那么麻烦。其实呢方法很简单,就是把ext4模块重命名,比如说命名成a_ext4,嘿嘿~系统很傻的,这样它就会报重名的错误了。

具体怎么做呢?见下文,还是有一些需要注意的地方。

方法:

这里的具体做法参见文件系统模块化

step1:编译内核

将ext4改成M模式

step2:修改ext4的Makefile文件。

运行重新编译的内核。将内核源码目录下\linux-2.6.34.14\fs\ext4文件拷贝到/home/modulefs文件夹,修改/home/modulefs/ext4中的Makefile文件:

源文件如下:
 
#
# Makefile for the linux ext4-filesystem routines.
#

obj-$(CONFIG_EXT4_FS) += ext4.o

ext4-y	:= balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
		ioctl.o namei.o super.o symlink.o hash.o resize.o extents.o \
		ext4_jbd2.o migrate.o mballoc.o block_validity.o move_extent.o

ext4-$(CONFIG_EXT4_FS_XATTR)		+= xattr.o xattr_user.o xattr_trusted.o
ext4-$(CONFIG_EXT4_FS_POSIX_ACL)	+= acl.o
ext4-$(CONFIG_EXT4_FS_SECURITY)		+= xattr_security.o

 

修改成如下

 
#
# Makefile for the linux ext4-filesystem routines.
#

obj-m += a_ext4.o

a_ext4-objs     := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
                ioctl.o namei.o super.o symlink.o hash.o resize.o extents.o \
                ext4_jbd2.o migrate.o mballoc.o block_validity.o move_extent.o
KERNELDIR:=/usr/src/linux-2.6.34.14/
PWD:=$(shell pwd)
a_ext4-$(CONFIG_EXT4_FS_XATTR)          += xattr.o xattr_user.o xattr_trusted.o
a_ext4-$(CONFIG_EXT4_FS_POSIX_ACL)      += acl.o
a_ext4-$(CONFIG_EXT4_FS_SECURITY)               += xattr_security.o
default:
        make -C $(KERNELDIR) M=$(PWD) modules
clean:
        rm -rf *.o *.mod.c *.ko *.symvers

与上篇博客文件系统模块化中修改Makefile相比,可以发现我们将ext4模块重新命名了,命名为a_ext4

 

step3.修改内核代码

既然在我们改变了模块中ext4的名字,改成了a_ext4,则在/home/modulefs/ext4的代码中我们也做出相应的改变。

修改/home/modulefs/ext4/super.c中的如下内容

static struct file_system_type ext4_fs_type 以及

static int __init init_ext4_fs(void)

源文件如下:

static struct file_system_type ext4_fs_type = {
	.owner		= THIS_MODULE,
	.name		= "ext4",
	.get_sb		= ext4_get_sb,
	.kill_sb	= kill_block_super,
	.fs_flags	= FS_REQUIRES_DEV,
};

static int __init init_ext4_fs(void)
{
	int err;

	ext4_check_flag_values();
	err = init_ext4_system_zone();
	if (err)
		return err;
	ext4_kset = kset_create_and_add("ext4", NULL, fs_kobj);
	if (!ext4_kset)
		goto out4;
	ext4_proc_root = proc_mkdir("fs/ext4", NULL);
	err = init_ext4_mballoc();
	if (err)
		goto out3;

	err = init_ext4_xattr();
	if (err)
		goto out2;
	err = init_inodecache();
	if (err)
		goto out1;
	register_as_ext2();
	register_as_ext3();
	err = register_filesystem(&ext4_fs_type);
	if (err)
		goto out;
	return 0;
out:
	unregister_as_ext2();
	unregister_as_ext3();
	destroy_inodecache();
out1:
	exit_ext4_xattr();
out2:
	exit_ext4_mballoc();
out3:
	remove_proc_entry("fs/ext4", NULL);
	kset_unregister(ext4_kset);
out4:
	exit_ext4_system_zone();
	return err;
}

 

把如下三处'ext4' 修改成a_ext4
修改前

.name = "ext4",

ext4_kset = kset_create_and_add("ext4", NULL, fs_kobj);

ext4_proc_root = proc_mkdir("fs/ext4", NULL);

修改后

.name = "a_ext4",

ext4_kset = kset_create_and_add("a_ext4", NULL, fs_kobj);

ext4_proc_root = proc_mkdir("fs/a_ext4", NULL);

 

step4:编译模块,然后插入模块

具体做法,同文件系统模块化

 

 总结:

    其实模块化系统盘所在分区文件系统的具体做法(称为A) 与 文件系统模块化(称为B) 有两个不一样:

1.A的Makefile需要改变模块的名字,B不需要

2.A需要修改内核的代码,B不需要

 

22 Jul 04:47

Linux内核 ext2 文件系统 makefile详解

by sundayhut

先给出两个makefile相关链接:

http://www.yayu.org/book/gnu_make/make-04.html

http://www.yayu.org/book/gnu_make/make-06.html

例1:linux-2.6.34.14\fs\ext2\makefile详解​​

#
# Makefile for the linux ext2-filesystem routines.
#

obj-$(CONFIG_EXT2_FS) += ext2.o

ext2-y := balloc.o dir.o file.o ialloc.o inode.o \
	  ioctl.o namei.o super.o symlink.o

ext2-$(CONFIG_EXT2_FS_XATTR)	 += xattr.o xattr_user.o xattr_trusted.o
ext2-$(CONFIG_EXT2_FS_POSIX_ACL) += acl.o
ext2-$(CONFIG_EXT2_FS_SECURITY)	 += xattr_security.o
ext2-$(CONFIG_EXT2_FS_XIP)	 += xip.o

1.obj-$(CONFIG_EXT2_FS) += ext2.o  obj- 表示如何编译 y m n分别表示进入内核编译,m 模块编译,n不编译。其中$(CONFIG_EXT2_FS)表示取CONFIG_EXT2_FS值操作,所以ext2的编译方式取决于编译内核是make config时CONFIG_EXT2_FS选定的值。

 

2.ext2-y或者ext2-objs都表示ext2模块(注:-objs用法见例二)

 

3.:= 表示赋值操作

 

4.ext2-y := balloc.o dir.o file.o ialloc.o inode.o \

 ioctl.o namei.o super.o symlink.o 表示ext2.o模块依赖于后面的*.o文件。-y和-objs都表示模块。
 

5.+= 表示追加方式复值:

objects = main.o foo.o bar.o utils.o

objects += another.o

上边的两个操作之后变量“objects”的值成:“main.o foo.o bar.o utils.o another.o”。使用“+=”操作符,就相当于:

objects = main.o foo.o bar.o utils.o

objects := $(objects) another.o

 

6.ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o xattr_trusted.o  表示如果make config步骤中CONFIG_EXT2_FS_XATTR赋值为y,则ext2模块在前面的编译基础上再加上xattr.o xattr_user.o xattr_trusted.o三个文件。

 

7ext2-$(CONFIG_EXT2_FS_POSIX_ACL) += acl.o

ext2-$(CONFIG_EXT2_FS_SECURITY) += xattr_security.o
ext2-$(CONFIG_EXT2_FS_XIP) += xip.o
这三行解释同6
 
 
例2.pcmfs的makefile详解:
#
# Makefile for the Linux pcmfs filesystem routines.
#

obj-m += simplefs.o
simplefs-objs := bitmap.o itree_common.o namei.o inode.o file.o dir.o
KERNELDIR:=/usr/src/linux-2.6.34.14/
PWD:=$(shell pwd)
default:
	make -C $(KERNELDIR) M=$(PWD) modules
clean:
	rm -rf *.o *.mod.c *.ko *.symvers

1.obj-m直接指定编译方式为模块化

2.simplefs-objs := bitmap.o itree_common.o namei.o inode.o file.o dir.o  其中-objs为模块。表示simplefs.o模块依赖后面的文件。

3.KERNELDIR:=/usr/src/linux-2.6.34.14/ 将变量KERNELDIR赋值,为后面提供使用

4.PWD:=$(shell pwd)赋值为当前目录

5.make -C $(KERNELDIR) M=$(PWD) modules

 其中make的 -C表示转换路径,可以再linux下通过man make查看:

        -C dir, --directory=dir

            Change to directory dir before reading the makefiles  or  doing
            anything  else.   If multiple -C options are specified, each is
            interpreted relative to the previous one: -C / -C etc is equiv‐
            alent  to -C /etc.  This is typically used with recursive invo‐
            cations of make.
 
 其中make M=的含义:M不是make中的选项,而是内核根目录下的makefile中使用的变量。M= dir 程序会自动在所指定的dir目录中查找模块代码,将其编译,生成.ko文件
 
 
 
 

 

22 Jul 04:45

[what if]第98期:饮血醉酒

by 一起剥坚果

本文作者:一起剥坚果

提问:

喝一个醉酒的人的血会不会把自己也弄醉了?

—— Fiona Byrne

 

回答:

不会。

普通人身体里流淌着约5升(14杯)的血液。

(别忘了每天要喝8杯血哦)

如果血液中的酒精浓度超过0.5%,那你就离死不远了。虽然有一小撮人血液中的酒精浓度超过了1%到最后也没挂掉,但酒精对人的半致死剂量——使一半人挂掉的剂量——为0.40(0.4%)。

如果某个人的血液酒精浓度达到了0.40,而你又在短时间内喝光了这个人的所有14杯血,[1]你会吐的:

14012900128

(我没法一直用画小松鼠来逃避,但只要我能,我一定会这么做的)

但是你吐不是因为酒精,而是因为你喝的是血。不过如果你忍着不吐出来,那么你就喝下了2克的乙醇,也就相当于一小杯啤酒所含的乙醇的量。

(每天至少要喝60杯水哦,这样才能不口渴)

而喝那么多醉酒的人的血会使你的血液酒精浓度升高到0.005。换言之,醉酒者体内的酒精只有1/60进入到了你的体内。

如果你在喝了前一个醉酒的人14杯血后,另一个人把你杀了并喝光了你的血,[2]那么这个人的血液酒精浓度会是0.00008。如果这个过程重复11遍,那么最后一个人的血液中的酒精分子数将会小于60个,再重复一遍后很有可能就一个都没有了。[3]再往后就已经和喝普通的血没什么区别了。[4]

但不管你喝的血液中有没有酒精,单单是喝14杯血液就不是什么好玩的事情。虽然没有多少医学文献关注于喝血液的后果,但从很多网络论坛上的帖子来看,任何一个普通人喝下一品脱的血液后都会呕吐:

(又一只小松鼠,防止你看到什么不该看的东西)

假如你频繁地喝人血的话,在经过很长一段时间后你身体中不断积累的铁元素会造成铁超载。多次输血的人有时也会遇到这种情况,这也是少数几种正确疗法是放血的情况之一。[5]

只喝一个人的血不太会造成铁超载,但你很有可能会得上血液传染病。绝大多数这种血液传染病都是由病毒造成,这些病毒会被胃酸破坏,但它们能够轻易在你喝下去的时候从你口腔或喉咙上的皮肤破损处进入血液系统。

喝下受感染的人的血液会被传染的疾病包括乙肝、丙肝、艾滋病、汉坦病以及埃博拉。我不是医生,所以我尽量不给出医疗建议。但是我可以很肯定地告诉你,那些体内含有埃博拉病毒的人的血千万不要去喝。

即便如此,饮血也不是什么闻所未闻的事情。它在很多文化里都是一个禁忌,但英国人吃"血肠",其实其中一大部分便是血液,而放眼全球类似的事物在世界各地都有出现。非洲的游牧民族马赛人平时主要喝牛奶,但有时他们也喝,说白了就是牛血和牛奶混合而成的蛋白质奶昔。

所以结论就是喝别人的血不是一件容易的事情,就算喝到了味道极有可能很糟糕,而且你还可能感染上一些严重的疾病。但是,你绝对不会因此喝醉。

说到底,早在酒精让你感到不适之前,光是看到血你可能已经魂飞魄散了。

(你……你从哪儿……哪儿弄来的?)

  • 注1:就算不喝也有50%的几率他们会挂掉。
  • 注2:这才叫公平。
  • 注3:以顺势疗法的角度来看,这样仍然算是高浓度。
  • 注4:就像一个loser一样。
  • 注5:其他的疾病包括红细胞增多症(PCV)和迟发性皮肤卟啉症(PCT)。
22 Jul 04:45

“云南白药含草乌”究竟意味着什么?

by 窗敲雨

本文作者:窗敲雨

云南白药按照国家食品药品监督管理总局规定修改了药品说明书,正式宣布配方中含有制草乌成分。使用草乌有多大风险?我们有必要承担它吗?

草乌是什么?

中药中的草乌是毛茛科植物北乌头(Aconitum kusnezoffii Reichb.)的干燥块根,与乌头、附子一样,生草乌含有乌头碱、新乌头碱、次乌头碱一类的生物碱成分。这类成分具有很大的毒性,口服乌头碱几毫克即可致命。中毒时可出现麻痹、心率失常、低血压、呼吸困难等表现。

wpid-F_jSa-K8BuTL0_t16Siw2y1XBLWpLJOqV9nuzl5z-FwSAQAAagEAAEpQ-2014-07-21-14-20.jpg

毛茛科植物北乌头(Aconitum kusnezoffii Reichb.

wpid-HsPwVJzk7HRabsAU-KmZi6TgbwSdEPa8RBWE0TsvwpZeAQAA_QAAAEpQ-2014-07-21-14-20.jpg

生药草乌

炮制能消除风险吗?

由于毒性很大,此类生药材在使用时通常会经过炮制来降低毒性。草乌炮制多采用浸泡蒸煮的方法。《中国药典》中提到的炮制方法为“取草乌,大小个分开,用水浸泡至内无干心,取出,加水煮至取大个切开内无白心、口尝微有麻舌感,取出,晾至六成干后切薄片干燥”。

在乌头类生物碱中,双酯型生物碱的毒性较高(上文提及的乌头碱、新乌头碱等就属于此类),蒸煮炮制的过程可以促进它们的水解,形成毒性相对较小的苯甲酰乌头原碱类。事实上,云南白药方面也确认了这一点。炮制确实可以使药材的毒性减少,但隐患并未因此而消除。

有研究认为,水解产生的苯甲酰乌头原碱类成分毒性可降至乌头碱的1/200左右,但考虑到乌头碱是一种毒性极强的物质,1/200的毒性依然不算太低(以乌头碱致命剂量3毫克估算,其200倍为600毫克,而通常氰化钾的致死剂量在50-250毫克之间,砒霜的致死剂量约为70-180毫克)。更重要的是,在炮制过程中,双酯型生物碱的水解并不完全,在炮制后药材中仍有一定量的残留。也有动物实验发现,草乌经炮制后生物活性也随之下降,由此推断达到同样效应所需的剂量可能也会增加[1]。这一因素实际也削弱了“炮制减毒”的作用。

另外,受到生药产地、炮制条件等因素影响,这些生物碱类物质的含量常会发生波动。《中国药典》中规定制草乌中双酯型生物碱含量不得超过0.04%,苯甲酰乌头原碱类应在0.020-0.070%。这实际上是相当粗略的含量要求。这也为其安全性增加了不确定因素。

毒物可入药,但须谨慎权衡

即使经过炮制,草乌仍有一定毒性,而它的毒性是否可以被接受还需要另外讨论。事实上,有很多人也在用“离开剂量谈毒性就是耍流氓”的表述为其辩护。但这句话的使用是有诸多前提的,在医药问题上,更要视情况而定。

确实,只要使用得当,“毒性”也可以成为药效。不过,毒物入药需要谨慎地权衡利弊,在获益大于风险时可以选择使用,同时在使用时必须对风险进行严格的评估与控制。假设有一种物质,可能导致呕吐、脱发、白细胞减少,看起来颇有些毒性,如果它能治疗肿瘤,又没有更好的选择,我们可以允许它作为药用;而如果它只能缓解感冒症状,我们显然没有理由去承担这些风险。

实际上,说到毒物入药,化学药物比中草药更胜一筹,连不到1微克就能置人于死地的肉毒杆菌毒素都被做成了药品——因为它实际上满足两项条件,一方面,它具有独特而持久的肌肉松弛作用,可以治疗其他方法难以改善的肌肉痉挛性疾病(虽然美容除皱的功效更加有名,但这才是它最初的本职工作);另一方面则是因为严格的使用规范和剂量限制可以使它的风险得到控制。(详情请看:肉毒毒素:最毒的美容明星和病痛狙击手 )

而草乌通常用于骨关节炎、类风湿性关节炎、扭伤等情况,虽然它在药理实验中确实表现出一些止痛、抗炎的活性,但在这方面也有更加安全、疗效更确切的药物可供选择(例如日常生活中常见的解热镇痛药)。不仅如此,草乌作为生药材,其中活性成分的剂量控制精确程度也远远比不上化学药物。曾有研究报道,在检测的制草乌中乌头碱含量可在0.0084%~0.034%之间波动[2],即使是完全符合药典规定的产品,其中的生物碱含量和组成仍然可能有不小的差异。可见,即使严格控制药材的使用量,其中有毒成分的剂量依然不能得到很好的控制。

具体到云南白药,其制剂包括散剂、胶囊、酊剂及气雾剂等,其中散剂和胶囊剂为处方药。此前声明中云南白药并未明确提及含草乌的制品种类。云南白药酊为乙类非处方药,按《乙类非处方药确定原则》,含毒性药材的口服制剂不应作为乙类非处方药,由此推测作为非处方药的云南白药酊可能与散剂和胶囊组方成分不同——这一点也可以与云南白药向FDA提供的配方中并无草乌成分相印证。由于该公司并未公布含有草乌的制剂品种及确切含量,目前很难对它们的安全性给出确切分析。不过考虑到可能的风险,用更加安全、剂量与不良反应明确的药物替代草乌制品会是明智的选择。

参考资料

  1. 柴玉爽,王玉刚,花雷等.附子乌头草乌及其炮制品的毒效比较[J]. 世界科学技术—中医药现代化, 2011年第13卷第5期.
  2. 曹晖. 香港市售乌头类药材及其炮制品的乌头碱含量测定[J]. 《中国中药杂志》, 1993年05期.
  3. 中国药典2010年版
22 Jul 04:44

天生失明的人,梦里会有颜色吗?

by 游识猷

本文作者:游识猷

“天生失明的人,梦里会有颜色吗?”燕公子在微博上如是问。

这是个既科学又感性的疑问。简单的答案是,没有。大脑只能用已知的素材来织梦。而我们“观看”时,用的不止是眼睛,更是大脑。我们所能“看见”的一切,其实是基于从前的经验而期待看见之物。无论是清醒还是做梦,这点都不会改变。

a-colorful-dream-color-blast

 【图片出处:fineartamerica.com

曾有研究者调查过15个盲人的372个梦,结论是五岁前失明者的梦没有色彩,也基本没有视觉图像。七岁以后才失明的人所做的梦跟普通人差别不大,但随着时间流逝,梦里“看见”的东西可能会越来越少,也越来越模糊。五到七岁间失明者则两种可能皆有。

天生目盲的电台主持汤米·爱迪生(Tommy Edison)曾在youtube上回答,他的梦里只有听嗅触味四感,不过,他在梦里同样会体验到各种不合逻辑的情节神展开、时空跳跃的情境瞬变换。一岁多时因病失明失聪的海伦•凯勒(Keller Helen)曾写过这样一个梦:她藏了起来,许多人着急地找她,弄出了很大的动静——知道这点是因为她的脚感到了传来的震动——然后她忽然觉得又冷又害怕,风中飘来冰与盐的气味,她试着逃跑,却被长草绊倒,然后她躺在那里,一动不动,而草叶如刀锋,刺痛了她的手指……她还有个反复出现的梦魇,一个恶灵呼啸着穿过她的脸,在她感觉里,那就像引擎吹来的一阵热风,她猜想这个梦魇来自幼时险被灼伤的经历。

仔细阅读就会发现,海伦在现实中不具备的视力和听力,在梦中实际上也没有出现,她的大脑早早失去这两种感官,以至于永远失去了了解“视听”的能力。此外,生而色盲者,也不能梦到自己现实中看不到的颜色。相比起来,一个52岁才因糖尿病失明的人在美国盲人基金会网站评论说,他仍然做着色彩斑斓的梦,在梦里,他能看见,一如往昔。而尽管彩色电视机推广以后,彩色梦的比例大幅增加,但仍有大概17%的视力正常者只做黑白之梦,原因至今不明 。

除非中风或外伤造成特定脑区损伤,余下的人人都会做梦。有人梦得恋恋不舍,有人梦得惊心动魄,有人梦得下限深不可测……梦虽然在每个睡眠时段都可能发生,但主要还是集中于 “快速眼动(REM)”阶段,把这个阶段的人叫醒,十有八九能忆起一些梦境残片。许多温血动物都拥有这种异相睡眠,比如鸟类与毛绒绒的陆生哺乳类。不过,追寻梦的本质的动物,迄今为止只有智人。

梦就像是在平行世界里活过来,眼看着一幕幕情境展开。然后我们在现实中醒来,苦思冥想才能忆起一些瑰丽曲折的片段。梦境往往难以理解,于是人们绞尽脑汁后出现了各种解释。古人往往将梦当成神启或预言,弗洛伊德则将梦视为潜意识里渴望满足的心愿,当然他也发现有些噩梦实在难以自圆其说,于是开始深挖梦里各种与“性”相关的象征。

如今学界里相信“梦是为了满足某种心理需要”的弗洛伊德粉已经不多。梦被视为内部信息占主导时,大脑皮层将各种难以控制而支离破碎的信息输入进行合理化的结果。哈佛大学的霍布森(J.Allen Hobson)提出的AIM理论就深深影响了“解梦界”。A代表激活(activation),I代表来自内外的信息流动(information flow),M则代表信息处理模式(mode of information processing)。所谓清醒,就是AIM三者俱全,大脑高度激活,外部信息顺畅流入,信息处理高速运转。无梦的深度睡眠,则是AIM三者都相当低迷。而做梦,则是有A有M没有I,大脑的许多区域仍然高度激活,但外部信息流动却大为凝滞,于是活跃的大脑只好就着手边的材料编出一个个连贯故事。

在梦中,视网膜和初级视觉皮层都被抑制,而更高阶的分析存储皮层如海马旁皮层则活跃地自给自足,从过去的经验中提取信息,造出各种视觉影像 。同样活跃的脑区还包括主管情绪的边缘系统(譬如杏仁核),于是许多梦带有强烈的负面情绪,特别是焦虑和恐惧。

727dLOYh_eajYBnvl_M0iGh8E0BhOGFwBxhvEHu45dnIAAAAyAAAAEdJ

【杏仁核3D图】

除非是清醒梦,或者梦境特别刺激,否则掌管逻辑推理与工作记忆的前额皮层在梦中往往处于抑制状态。这也是为什么梦不管多么离奇荒诞,我们在梦里都难以看出破绽,还常常一醒来就忘掉刚做的梦。只有在极为罕见的“清醒梦(lucid dream)”里,梦者负责推理的背外侧前额叶相当活跃,因而能觉察梦境中的不合逻辑之处,甚至能如《盗梦空间》一般控制梦的走向 。

在梦中,运动皮层能产生电脉冲指令,但由于胆碱能信号触发抑制性回路,导致这些指令只能到达脊髓上端,无法到达控制肌肉收缩的效应器,某种意义上说,梦中的人是处于高位截瘫状态的,这也是“鬼压床”的原理——如果你感知皮层被唤醒但运动皮层的指令还不通畅,就会发现自己动弹不得。

万一脑中抑制性回路受损,做梦的人就可能做出种种动作。五十年前法国研究者米歇尔•朱维特(Michel Jouvet)拿猫做过实验,发现脑桥中的蓝斑(Locus Coeruleus)受损后,猫在梦中会做出捕猎躲避等动作 。

类似地,改变一个人的大脑,就能影响他的梦。抗抑郁药物能改变脑内的神经递质,服用者有时会做更多的梦。有研究者对正做梦的人施予穿颅磁刺激,成功削弱了他在梦中体验到的灵魂出窍感 ……有朝一日,“盗梦”乃至“在梦中植入理念”未必不能实现。通过操纵梦境,我们或许能夜夜度过更为愉快的两小时。

(已发表于《知道日报》)

22 Jul 04:43

设计师们!你肯定会憧憬这位大神的工作和生活

by cyRotel

设计师们!你肯定会憧憬这位大神的工作和生活

编者按:今天分享的人物,一句话简介是「几乎能去任何公司的设计师」,他一共做过29份各种工作,曾是 Adobe 和 Facebook 的一员,最近两份工作是 Apple 的资深 UI 设计师和 Lytro 的创意总监,现在是Pinterest的产品设计头儿,这篇文中分享的工作经验以及有关设计的想法都很实在,童鞋们可以学习下。

@Sitsism :Jason 是一个辗转过不少公司的设计师。他曾是 Adobe 和 Facebook 的一员,最近两份工作是 Apple 的资深 UI 设计师和 Lytro 的创意总监。1 年前,他几乎可以去任何他想去的公司,但是 Pinterest 设计师无以伦比的激情促使他加入了这里。作为产品设计的头儿,他带领设计团队完成了 iPad 和网站的重新设计,目前正在重新设计 iPhone 客户端。

上午 7:44

理想状态:几乎能去任何公司的设计师的一天

Jason 在他的设计「地堡」里。在家里,他最高效的时间是晚上 11 点到凌晨 4 点。他的头等大事是陪伴家人,即使他已经工作了 20 个小时。他平时睡的很少。

你在哪里寻找灵感?

「最重要的应该来自我的家人——女儿,她很特别,她眼中的世界和我看到的非常不一样。我从来没有真正的长大,它可以帮助我保持那些好奇心和有点天真的想法。我认为这些品质在设计新产品的过程中很有帮助,比如说,它们可以让你从新鲜的角度来审视你将要做的产品,而不受行业趋势或其它类似产品的影响。」

日本和瑞士是第二个设计灵感来源。「成长期间,我的父母一直疯狂地热爱着亚洲文化。之所以说疯狂是因为:在我从小到大以来,我爸爸每个月有三个星期都身在亚洲,在可口可乐公司工作。他收藏亚洲艺术品超过 50 年。在日本设计中,他们会去掉一切不必要的东西。我喜欢『去掉一切不必要的东西』的概念,和『内容为重点』的想法。」

「我非常爱上世纪 50~60 年代的瑞士设计,特别是一个给了我比任何人都多灵感的家伙:Josef Müller-Brockmann 和他的网格系统。我的思考和工作方式很遵循网格系统的法则,因此也经常被叫做『那个钟爱网格系统的家伙』」。第三个就是摄影了。「我喜欢手动对焦——我是个使用徕卡相机的人。我非常喜欢把生活以视频的方式录下来,因为把他们拍成照片太难了。有了徕卡,我可以从镜头中观察我女儿,看她在周围环境背景中的样子。这个时候,我平时并不会有意识去对焦的东西构成了一种很漂亮的纹理,我才意识得到它们的存在。我觉得它对我的影响太大了,就好比在产品设计中,我比任何共事过的人都要古怪:开始设计时我不会打开 Photoshop,也不会在软件中画线框图。我会用笔画画。」

理想状态:几乎能去任何公司的设计师的一天

Jason 的背包——里面有徕卡相机和笔记本。

理想状态:几乎能去任何公司的设计师的一天

理想状态:几乎能去任何公司的设计师的一天

Jason 在今年初买了一个蹦床,最近还在 Pinterest 设计团队团建时用上了。他会在送女儿上学前和孩子们一起玩一下~

理想状态:几乎能去任何公司的设计师的一天

他和她的妻子 Sarah,正准备送大女儿和二女儿去上学。

在外包公司做设计和在创业公司做设计最大的不同是什么?

「我的职业生涯基本上可以被分为两个部分:一半是广告,一半是产品。我很幸运,这是一段很有趣的经历。我认为相比在咨询公司,在创业公司你更可以发挥创意。在咨询公司,你需要服务你的客户。而在创业公司,你有能力影响一个想法 —— 你就是客户。你可能会有一些内部的客户,但你真的有机会 —— 特别是在 Pinterest,你可以去找 Ben 和 Evan 聊聊新的想法或者让他们提提意见。比如说你可以说「Hey,我这有个屌爆的想法」。在咨询公司你该怎样去找创始人聊想法?可发挥的可能性就那么点而已。」

上午 8:45

理想状态:几乎能去任何公司的设计师的一天

Jason 开车离开 Mill Valley 的家去工作。

理想状态:几乎能去任何公司的设计师的一天

Pinterest 新办公室外。这个位于 SOMA 区的工厂刚刚被他们改造成一个巨大的 Loft。

理想状态:几乎能去任何公司的设计师的一天

理想状态:几乎能去任何公司的设计师的一天

理想状态:几乎能去任何公司的设计师的一天

Pinterest 的品牌经理 Everett Katigbak 负责这个新办公室的室内设计。

上午 10:13

理想状态:几乎能去任何公司的设计师的一天

理想状态:几乎能去任何公司的设计师的一天

理想状态:几乎能去任何公司的设计师的一天

大家聚集在一起吃午饭,午饭是由当地的餐厅和厨师供应的。

下午 3:00

理想状态:几乎能去任何公司的设计师的一天

理想状态:几乎能去任何公司的设计师的一天

理想状态:几乎能去任何公司的设计师的一天

会议无处不在 —— 从大堂到一间间玻璃办公室。我们有一个核心价值观「编织」,可以理解为「合作」,所以你经常会看到跨领域的团队在一起工作。会议室都是由员工自己命名的,他们会挑 Pinterst 中一些受欢迎的 Pin 来命名,比如 Kale Chips, Hipster Babies 和 DIY。

什么样的设计师能成为 Pinterest 的设计师?

「一个伟大的 Pinterest 设计师一定是一个能够真正帮助用户。大多数在这里的人都有很多疯狂的想法。这是 Pinterest 和其他我曾经待过的公司的不同。这并不是说需要有很强烈的自我意识,一定要做出一个属于自己的伟大产品之类的,而重要的是『我怎样才能帮用户做出好用的工具?』听起来有点始终在帮人家做事的感觉,就如你只是个指引者而已。但至少我是这么想的。」

设计团队其他成员:

理想状态:几乎能去任何公司的设计师的一天

  1. Justin Edmund 是一名为用户的日常生活打造完美体验的产品设计师。到目前为止他设计了很多 Pinterest 的产品。最值得人们注意的是个人主页和 Secret boards。
  2. Ash Huang 是 Pinterest 的设计师和插画师,也就意味着她的工作让网络变得更美好。因为她总是在画图标和小 pin 们,或者在像素间纠结,或者在白板上画图时闻马克笔的臭味。
  3. Everett Katigbak 的工作是四处游玩、拍摄有趣的人和物,他还是一位实物黑客。作为 Pinterest 品牌经理,他的工作就是为全世界讲关于我们的故事。
  4. Victor Ng 是一名品牌设计师,有时也是图书管理员。他帮助设计 Pinterest 的照片、印刷物和视频。

 

理想状态:几乎能去任何公司的设计师的一天

在 Pinterest 的白板上贴着好多 Pin,为了让大家看到不同的用户喜好和趋势。

理想状态:几乎能去任何公司的设计师的一天

Analog Pinterest — 你从小到大梦寐以求的昆虫收集。

理想状态:几乎能去任何公司的设计师的一天

如此多美妙的事情在 Pinterest 发生,Pinterest 团队也时不时需要被提醒集中注意力。 这个「FOCUS」诞生于最近的一次「Makeathon」——也就是 Pinterest 版本的 hackathon。

下午 6:30

理想状态:几乎能去任何公司的设计师的一天

Pinterest 的一伙人一起驱车前往他们最爱的 Mars 酒吧一起喝一杯。

你为什么决定加入 Pinterest?

「我和 Evan 在 Facebook 上认识并见了面。我们一起吃了晚餐,可以看出他有着巨大的热情。我的第一反应是,我喜欢这个人。我喜欢他,他对此也很有激情,我们的讨论也基于我事业中一直在追逐的两点——网格和图像,所以我选择加入,并且开心得不得了。他们是一群特别棒的创业伙伴。」

Pinterest 什么样的未来令你激动?

「我觉得 Pinterst 上的 pins 目前还是比较业余和不成熟,但是已出现逐步成熟的端倪——比如地点的出现和越来越多 pin 的形成。假如说一共有 100 步等着我们去走的话,我们才走到了第一步。Pinterest 的愿景是帮助人们获得灵感,再将灵感运用于现实生活中,最终将你自己的产物再放回 Pinterst 跟更多人分享。这是个完整且良性的循环。」

给设计师有哪些建议?

  1. 好好工作
  2. 态度要好
  3. 保持谦虚

你可以在下面找到他

Linkedin:Jason Wilson(巨长的职业生涯……)
个人网站:Jason Wilson

从他的 Linkedin 页面可以看出,他确实辗转了多个公司,一共做了 29 份各种工作……

同样的大神,不一样的生活:《揭秘大牛!ADOBE PS用户体验主管TIM RIOT的一天》

理想状态:几乎能去任何公司的设计师的一天

原文地址:zhuanlan.zhihu
作者:@Sitsism

【优设网 原创文章 投稿邮箱:2650232288@qq.com】

================关于优设网================
“优设网uisdc.com“是一个分享网页设计、无线端设计以及PS教程的干货网站。
【特色推荐】
设计师需要读的100本书:史上最全的设计师图书导航:http://hao.uisdc.com/book/
设计微博:拥有粉丝量73万的人气微博@优秀网页设计 ,欢迎关注获取网页设计资源、下载顶尖设计素材。
设计导航:全球顶尖设计网站推荐,设计师必备导航:http://hao.uisdc.com
———————————————————–
想在手机上、被窝里获取设计教程、经验分享和各种意想不到的”福利”吗?
添加 优秀网页设计 微信号:【youshege】优设哥的全拼
您也可以通过扫描下方二维码快速添加:

sdcweixin

优设哥向您推荐:

帅哥出没请注意!湖南卫视新锐设计师王坤的一天

姿势很重要:设计师该怎样进行自我调整

莫慌,抱紧我!给厌倦工作设计师的8个锦囊

敢问路在何方?一位淘宝资深设计师的职业思考

设计师一定要谨记的三不设计
无觅
19 Jul 05:10

近距离端详Android ART运行时库

by Lingcc

 

Table of Contents

在最新的Google I/O大会上,Google 发布了关于Android上最新的运行时库的情况。这就是Android RunTime (ART). ART 将会取代Dalvik虚拟机,成为Android平台上Java代码的执行工具。虽然自从Android KitKat,就有了一些关于ART的消息,但是基本都是一些新闻性质的,缺乏具体技术细节方面的介绍。本文尝试综合目前已有的各种消息,以及最新放出的Android L 预览版本的ROM的情况,对ART运行时库做个详细的分析。

 

ART 特性简介
和IOS,Windows,Tizen之类的移动平台直接将软件编译成能够直接运行在特定硬件平台上的本地代码不同。Android平台上的软件会被编译器首先编译成通用的“byte-code”,然后再在具体的移动设备上被转换成本地指令执行。

 

从Android诞生至今的十几年时间里,Dalvik从开始时非常简单的Java Byte-Code执行虚拟机,逐渐增加各种新的特性,满足应用程序对性能的需求,以及与硬件设备协同演进。这其中包括在Android 2.2版本中引入的即时编译器(JIT-Compiler), 以及随后的多线程支持,以及其他一些优化。

 

Android平台的演进

 

不过,在近两年里,Android整个生态系统的进步对Android虚拟机的需求,目前的Dalvik虚拟机的开发已经无法满足了。Dalvik最初设计时,处理器的性能很弱,移动设备的内存空间非常有限,而且都是32位的系统。于是Google开始构建一个新的虚拟机来更好的面对未来的发展趋势。这种虚拟机的性能能够在目前的多核处理器,甚至未来的8核处理上轻松扩展,能够满足对大容量存储的支持,以及大容量内存的支持。 于是乎,ART出现了。

1 架构介绍

 

APK文件的工作流

 

首先,ART的首要设计需求就是完全兼容能在Dalvik上运行的byte-code,即dex(Dalvik executable)。这样的话,对于程序员来说,就不需要对重新编译已有的程序,直接拿APK就可以在Dalvik和ART虚拟机上运行。ART带来的最大的变化,就是使用预编译技术(Ahead-of-Time compile)取代Dalvik中的即时编译技术(Just-In-Time compile)。之前,在应用程序每次执行的时候,虚拟机需要将bytecode编译成本地码执行,而在ART中这种编译操作只需执行一次,随后对该应用程序的执行都可以通过直接执行保存下来的本地码完成。当然,这种预编译技术,需要占用额外的存储空间来存储本地码。正是因为现在移动设备的存储空间越来越大,这种技术才得以应用。

 

这种预编译技术使得很多原来无法执行的编译优化技术在新的Android平台上成为可能。因为代码只被编译和优化一次,因此值得花费更多的时间在这次编译上,以便进行更多的优化。Google表示,现在可以在应用程序的整体代码技术上进行更高层次的优化,因为编译器现在能够看到应用程序的整体代码,而之前的即时编译,编译器只能看到并优化应用程序中某个函数或者非常小的一部分代码。采用ART后,代码中异常检查带来的开销绝大部分可以避免,对方法和接口的调用也加快了很多。完成这部分功能的是新添加的“dex2oat”组件,用来替代Dalvik中对应的“dexopt”组件。Dalvik中的Odex文件(优化后的dex)文件,在ART中也用ELF文件代替了。

 

因为ART目前编译生成ELF可执行文件,内核就可以直接对载入内存中的代码进行分页管理,这也会带来更加高效的内存管理,以及更少的内存占用。说到这里,我非常好奇内核中的KSM(Kernel same-page merging)在ART中会有什么样的影响,应该能带来不错的效果吧。我们拭目以待。

 

ART对续航时间的影响也是非常显著的。因为不再需要解释执行,JIT也不用在程序运行时工作,这样会直接节省CPU需要执行的指令数,因而耗电降低。

 

因为预编译时引入了更多分析和优化,编译的时间会变长,这是ART可能会带来的一个副作用。因此相比Dalvik虚拟机,当设备首次启动及应用程序第一次安装时,需要花费的时间更久。Google声称,这种时间上的增加并不那么恐怖。他们希望并预期日后ART上完成上述动作的时间会和目前的Dalvik差不多,甚至更短些。

 

ART与Dalvik性能比较

 

上面的图显示,ART带来的性能提升是非常明显的。对于同样的代码,性能提升约2倍左右。Google称,将Android L最终发布的时候,可以预计的性能提升将会像Chessbench一样,有3x的加速。

 

2 垃圾收集:理论和实践

Android虚拟机依赖自动化的内存管理机制,即自动垃圾收集。这一Java语言编程模式的基石也是Android系统自诞生之日起,非常重要的一部分。这里向不太了解垃圾收集概念的朋友解释一下,所谓自动垃圾收集,就是说程序员在编程过程中,不需要自己负责物理内存的存储的分配和释放。只需要使用固定的模式创建你需要的变量或者对象,然后直接利用该变量或对象即可。程序的运行环境会自动在内存中分配相应的内存空间存储该变量或者对象, 并在该变量或者对象失效后,自动释放所分配的内存。这是和其他需要人工进行存储管理的较低层次语言最大的区别。自动垃圾收集的好处是,程序员不必再在编程时担心内存管理的问题,当然,这也是有代价的,那就是程序员无法控制内存何时分配和释放,因而无法在需要时进行优化(Java语言有一些编程接口可以供程序员手工优化程序,但控制方式和粒度有限).

 

Android曾经被Dalvik的垃圾收集机制折腾了很久。Android平台的内存普遍较小,每次应用程序需要分配内存,当堆空间(分配给应用程序的一块内存空间)不能提供如此大小的空间时,Dalvik的垃圾收集器就会启动。垃圾收集器会遍历整个堆空间,查看每一个应用程序分配的对象,并对所有可到达的对象(即还会被使用的对象)标记,并将那些没有标记的对象空间释放掉。

 

在Dalvik虚拟机中,垃圾收集器执行的过程将导致两次应用程序的停顿:

  • 一是在遍历堆地址空间阶段,
  • 另一个是标记阶段。

 

所谓停顿,即应用程序所有正在执行的进程将暂停。如果停顿时间过长,将会导致应用程序在渲染时出现丢帧现象,进而导致应用程序的卡顿现象,大大降低用户体验。

 

Google声称,在Nexus 5手机上,这种停顿的平均长度在54ms。这个停顿时间将导致平均每次垃圾收集会导致在应用程序渲染显式时丢掉4帧的。

 

我自己的经验和测试表明,根据应用程序的不同,停顿的时间可能会增大很多。比如,在官方的FIFA应用程序这一典型程序中,垃圾收集的停顿会非常厉害。

07-01 15:56:14.275: D/dalvikvm(30615): GCFORALLOC freed 4442K, 25% free 20183K/26856K, paused 24ms, total 24ms

07-01 15:56:16.785: I/dalvikvm-heap(30615): Grow heap (frag case) to 38.179MB for 8294416-byte allocation

07-01 15:56:17.225: I/dalvikvm-heap(30615): Grow heap (frag case) to 48.279MB for 7361296-byte allocation

07-01 15:56:17.625: I/Choreographer(30615): Skipped 35 frames! The application may be doing too much work on its main thread.

07-01 15:56:19.035: D/dalvikvm(30615): GCCONCURRENT freed 35838K, 43% free 51351K/89052K, paused 3ms+5ms, total 106ms

07-01 15:56:19.035: D/dalvikvm(30615): WAITFORCONCURRENTGC blocked 96ms

07-01 15:56:19.815: D/dalvikvm(30615): GCCONCURRENT freed 7078K, 42% free 52464K/89052K, paused 14ms+4ms, total 96ms

07-01 15:56:19.815: D/dalvikvm(30615): WAITFORCONCURRENTGC blocked 74ms

07-01 15:56:20.035: I/Choreographer(30615): Skipped 141 frames! The application may be doing too much work on its main thread.

07-01 15:56:20.275: D/dalvikvm(30615): GCFORALLOC freed 4774K, 45% free 49801K/89052K, paused 168ms, total 168ms

07-01 15:56:20.295: I/dalvikvm-heap(30615): Grow heap (frag case) to 56.900MB for 4665616-byte allocation

07-01 15:56:21.315: D/dalvikvm(30615): GCFORALLOC freed 1359K, 42% free 55045K/93612K, paused 95ms, total 95ms

07-01 15:56:21.965: D/dalvikvm(30615): GCCONCURRENT freed 6376K, 40% free 56861K/93612K, paused 16ms+8ms, total 126ms

07-01 15:56:21.965: D/dalvikvm(30615): WAITFORCONCURRENTGC blocked 111ms

07-01 15:56:21.965: D/dalvikvm(30615): WAITFORCONCURRENTGC blocked 97ms

07-01 15:56:22.085: I/Choreographer(30615): Skipped 38 frames! The application may be doing too much work on its main thread.

07-01 15:56:22.195: D/dalvikvm(30615): GCFORALLOC freed 1539K, 40% free 56833K/93612K, paused 87ms, total 87ms

07-01 15:56:22.195: I/dalvikvm-heap(30615): Grow heap (frag case) to 60.588MB for 1331732-byte allocation

07-01 15:56:22.475: D/dalvikvm(30615): GCFORALLOC freed 308K, 39% free 59497K/96216K, paused 84ms, total 84ms

07-01 15:56:22.815: D/dalvikvm(30615): GCFORALLOC freed 287K, 38% free 60878K/97516K, paused 95ms, total 95ms

上面的log是从FIFA应用程序运行后的几秒钟时间里截取的。垃圾收集器在短短的8秒内被执行了9次,导致应用程序总共卡顿了603ms,丢帧达214次。绝大多数的卡顿都来自内存分配请求,在log中以”GC_FOR_ALLOC“标签描述。

 

ART将整个垃圾收集系统做了重新设计和实现。为了能做些对比,下面给出使用ART运行相同的应用程序,在相同的场景下提取的log:

07-01 16:00:44.531: I/art(198): Explicit concurrent mark sweep GC freed 700(30KB) AllocSpace objects, 0(0B) LOS objects, 792% free, 18MB/21MB, paused 186us total 12.763ms

07-01 16:00:44.545: I/art(198): Explicit concurrent mark sweep GC freed 7(240B) AllocSpace objects, 0(0B) LOS objects, 792% free, 18MB/21MB, paused 198us total 9.465ms

07-01 16:00:44.554: I/art(198): Explicit concurrent mark sweep GC freed 5(160B) AllocSpace objects, 0(0B) LOS objects, 792% free, 18MB/21MB, paused 224us total 9.045ms

07-01 16:00:44.690: I/art(801): Explicit concurrent mark sweep GC freed 65595(3MB) AllocSpace objects, 9(4MB) LOS objects, 810% free, 38MB/58MB, paused 1.195ms total 87.219ms

07-01 16:00:46.517: I/art(29197): Background partial concurrent mark sweep GC freed 74626(3MB) AllocSpace objects, 39(4MB) LOS objects, 1496% free, 25MB/32MB, paused 4.422ms total 1.371747s

07-01 16:00:48.534: I/Choreographer(29197): Skipped 30 frames! The application may be doing too much work on its main thread.

07-01 16:00:48.566: I/art(29197): Background sticky concurrent mark sweep GC freed 70319(3MB) AllocSpace objects, 59(5MB) LOS objects, 825% free, 49MB/56MB, paused 6.139ms total 52.868ms

07-01 16:00:49.282: I/Choreographer(29197): Skipped 33 frames! The application may be doing too much work on its main thread.

07-01 16:00:49.652: I/art(1287): Heap transition to ProcessStateJankImperceptible took 45.636146ms saved at least 723KB

07-01 16:00:49.660: I/art(1256): Heap transition to ProcessStateJankImperceptible took 52.650677ms saved at least 966KB

ART和Dalvik的差别非常大,新的运行时内存管理仅仅停顿了12.364ms,运行了4次前台垃圾收集,以及2次后台垃圾收集。在应用程序执行的过程中,应用程序的堆空间大小并没有增加,而Dalvik虚拟机中堆空间共增加了4次。丢帧的个数方面,ART虚拟机也降到了63帧。

 

上面这段示例,只不过是一个开发并不完善的应用程序中最坏的一个场景。因为即使在ART虚拟机中,这个应用程序还是丢掉了不少帧渲染图像。不过上面的log对比依然很有参考价值,毕竟牛逼的程序员没几个,大多数的Android程序都没办法开发的很完美。Android需要能hold住这种情况。

 

ART将一些通常需要垃圾收集器做的工作,拆分给应用程序本身完成。这样,Dalvik中因为遍历堆空间引入的第一次停顿,就被完全消除了。而第二次停顿也因为一项预清理技术 (packard pre-cleaning)的应用而大大缩短。使用该技术后,只需要在清理完成后,简单的检查和验证时稍微停顿一下即可。Google声称,他们已经设法将这类停顿的时间缩短到3ms左右,相比Dalvik虚拟机的垃圾收集器来说,基本上是一个多数量级的降低,很不错了。

 

垃圾收集性能对比

ART还引入了一个特殊的超大对象存储空间(large object space,LOS),这个空间与堆空间是分开的,不过仍然驻留在应用程序内存空间中。这一特殊的设计是为了让ART可以更好的管理较大的对象,比如位图对象(bitmaps)。在对堆空间分段时,这种较大的对象会带来一些问题。比如,在分配一个此类对象时,相比其他普通对象,会导致垃圾收集器启动的次数增加很多。有了这个超大对象存储空间的支持,垃圾收集器因堆空间分段而引发调用次数将会大大降低,这样垃圾收集器就能做更加合理的内存分配,从而降低运行时开销。

 

一个很好的例子,就是运行Hangouts(环聊)应用程序时,在Dalvik虚拟机中,我们能看到数次因为分配内存,运行GC而导致的停顿。

07-01 06:37:13.481: D/dalvikvm(7403): GCEXPLICIT freed 2315K, 46% free 18483K/34016K, paused 3ms+4ms, total 40ms

07-01 06:37:13.901: D/dalvikvm(9871): GCCONCURRENT freed 3779K, 22% free 21193K/26856K, paused 3ms+3ms, total 36ms

07-01 06:37:14.041: D/dalvikvm(9871): GCFORALLOC freed 368K, 21% free 21451K/26856K, paused 25ms, total 25ms

07-01 06:37:14.041: I/dalvikvm-heap(9871): Grow heap (frag case) to 24.907MB for 147472-byte allocation

07-01 06:37:14.071: D/dalvikvm(9871): GCFORALLOC freed 4K, 20% free 22167K/27596K, paused 25ms, total 25ms

07-01 06:37:14.111: D/dalvikvm(9871): GCFORALLOC freed 9K, 19% free 23892K/29372K, paused 27ms, total 28ms

我们从所有的垃圾收集log中截取了上述一段。其中的显式(GC_EXPLICIT)和并发(GC_CONCURRENT)是垃圾收集器中比较通用的清理和维护性调用。GC_FOR_ALLOC则是在内存分配器尝试分配新的内存空间,但堆空间不够用时,调用的。上面的log中,我们能看到堆空间因为分段操作而扩充了堆空间,但仍然无法装下大对象。在整个大对象分配的过程中,停顿时间长达90ms。

 

相比之下,下面这段log是从Android L预览版本的ART运行log中提取的。

07-01 06:35:19.718: I/art(10844): Heap transition to ProcessStateJankPerceptible took 17.989063ms saved at least -138KB

07-01 06:35:24.171: I/art(1256): Heap transition to ProcessStateJankImperceptible took 42.936250ms saved at least 258KB

07-01 06:35:24.806: I/art(801): Explicit concurrent mark sweep GC freed 85790(3MB) AllocSpace objects, 4(10MB) LOS objects, 850% free, 35MB/56MB, paused 961us total 83.110ms

我们目前还不知道log中的”Heap Transition”表达的什么意思,不过可以猜测应该是堆空间大小重设机制。在应用程序已经运行之后,唯一的对垃圾收集器的调用仅消耗的961us。我们并没有在这段截取的log之前,发现任何对垃圾收集器的调用操作。这段log中比较有趣的,就是LOS的统计。能够看到,在LOS中有4个较大的对象,共10MB。这块内存并没有分配在堆空间内,否则应该会有类似Dalvik的提示。

 

ART的内存分配系统本身也被重写了。虽然ART相比Dalvik,在内存分配方面,能够带来大约25%的性能提升,不过Google显然对此不满意,因此引入了一个新的内存分配器来取代当前使用的“malloc”分配器。

 

这个新的内存分配器,“rosalloc”(Runs-of-Slots-Allocator)是依据多线程Java应用程序的特点而设计的。此内存分配器有更细粒度的锁机制,可以直接对独立的对象上锁,而非对整个待分配的内存空间上锁。在线程局部区域中的小对象的分配,完全可以无视锁的存在了。没有了锁的请求和释放,线程局部小对象的访问速度也就大幅提升了。

 

这个新的内存分配器大幅提升了内存分配的速度,加速比达到了10x。

 

同时,ART的垃圾回收算法也做了改进,提升了用户使用体验,避免应用程序的卡顿。这些算法在Google内部目前仍然正在开发中。近期,Google仅仅介绍了一个新算法,“Moving Garbage Collector”.核心思想是,当应用程序运行在后台时,将程序的堆空间做段合并操作。

 

3 64位支持

ART在设计时充分考虑了将日后可能运行的各种平台进行模块化。因此,ART提供了大量的编译器后端,用于生成目前常见的体系结构的代码,例如ARM,X86和MIPS,其中包括对ARM64, X86-64的支持,以及尚未实现的对MIPS64的支持。

 

64位Android系统的优势

对于ARM的64位系统带来的好处,相比很多朋友都了解了。更大的内存地址空间,普适的性能提升,以及加解密的能力和性能提升,此外还有对已有32位应用程序的兼容。

 

除此之外,Google还在ART中引入了引用压缩技术,来避免ART堆空间内部因为64位指针的引入导致的内存占用变大问题。其实,就是在执行时,所有的指针都采用32位表示,而非64位系统应该采用的64位指针。

 

64位平台性能提升

Google公开了一些ARM和X86平台上应用程序在64位和32位模式下的性能对比。这只是一些预览性质数据。X86的性能测试在Intel的BayTrail系统上进行,对于不同的RenderScript测试程序,性能提升从2x到4.5x不等。ARM平台方面,分别在A57和A53系统上,对crypto的性能做了对比。这些数据因为都是针对非常小的例子,所以代表性不大,因此还无法代表实际应用场景的情况。

 

不过,Google也放出了一些有趣的数据,这些数据是在他们内部使用的系统Panorama上测试的。通过简单的从32位ABI转换为64位ABI,能够获得13%到19%的性能提升。还有个喜人的结论,那就是ARM的Cortex A53在AArch64模式下能获得性能提升比A57核要多。

 

Google还声称,目前应用商店中85%的应用程序都可以直接在64位模式下运行,也就是说仅有15%的应用程序在某种程度上使用了本地代码,需要重新为64位平台编译该应用程序。这对Google来说将是一个非常大的优势。明年,当大多数芯片厂商都开始推64位片上系统的时候,从32位Android系统到64位Android系统的的切换将会非常快。

 

4 结论

结合上面介绍的诸多方面,ART是Google发布的一款性能提升大杀器,并且ART也解决了多个数年来困扰Android系统的诸多问题。ART有效地改进了多个解释执行应用程序面临的问题,也提供了一个自动化的高效的存储管理系统。对于开发者来说,许多过去需要手工添加代码解决的性能问题,现在都能被ART轻松hold住了。

 

这也意味着Android系统终于能够在系统平滑度,应用程序性能方面与IOS势均力敌了。对消费者来说,是件喜大普奔的事情。

 

Google目前仍在,而且在未来一段时间内还将大力改进ART。ART目前的状况,与6个月前已经大不相同了,预计等到Android L真正发布的时候,又会有翻天覆地的变化。前途是光明的,让我们拭目以待,翘首期盼吧。

 

5 《灵犀志趣》注

  • 最新Android ART的代码库可以在 这里 找到。ART的代码里,能够看到不少LLVM的影子,见参考链接3.
  • 本文大部分内容取材自参考链接1

 

19 Jul 05:03

说说最近Google:safebrowsing引发页面加载阻塞的问题

by 理论弟

背景

一个礼拜前,在退款维权的业务中,发现这样一个问题: 在某些Firefox浏览器中,表单的butterfly加载阻塞导致功能异常了。

一开始,我们以为是即将发布的修改点导致的问题。

但再三确认本次的修改点后,确定只是改了文案啊! 这…

因此,我们首先怀疑是否线上已经有问题? 经过测试发现,果然,确实是个线上问题。

经过并不算麻烦的自测后,发现问题还不小:

影响范围:所有Firefox版本。
(注意:Firefox略有修复,但未完全解决:30.00+官方版Firefox浏览器; 原因是该版本携带有“附加组件管理器”1.2.3版本这个扩展)

chrome在一个月前也发现过类似问题,不过近期没有类似案例,可能已经在35中修复。

隐藏在Firefox中的Google:safebrowsing是如何工作的?


印象中,页面在Firefox中请求一个JS文件的过程,是这样的

图中看到了三个步骤:

  1. 页面向Firefox发起一个js的请求;
  2. Firefox判断是否为reload请求或者已在缓冲,if true直接读缓存,返回js文件给页面使用;if false则执行步骤3;
  3. 向阿里CDN请求,获取到js文件,返回js文件给页面使用,并且写入缓冲;

看起来没什么问题,太符合我们的认知了。

直到有一天,发现页面因为js加载阻塞导致页面功能严重受影响。

而且怎么强刷、清理缓存,都无果。

才发现….

原来,页面在Firefox中请求一个JS文件的真正过程,是这样的

这里演示下Google服务正常和异常两种情况:

一. Google服务正常时:

二. Google服务不正常时:

图中可以看到多了个本地哈希碰撞和向Google服务发送检测的过程,更多步骤描述如下:

  1. cdn返回js给Firefox后,Firefox先在本地safebrowsing哈希库中执行哈希碰撞;
  2. 碰撞结果为不通过的话,会向Google服务器(safebrowsing.google.com:443)发起检测通知,并进入等待状态;
  3. 此时,页面的直观感受就是js没有请求到,功能异常;
  4. 并且,如果再次请求同一个js文件,首先会查看safebrowsing等待队列;
  5. 如果已在safebrowsing等待队列中,则什么都不做。没错!什么都不做!(这就解释了,为什么强刷,甚至清理缓存后的强刷,都毫无作用)

似乎已经定位到了,问题了


第一: Firefox把我们的js判定为可疑文件(也就是哈希碰撞结果为可疑);
第二: Google服务被墙了, 哎~~

另外:

  1. safebrowsing会对所有静态资源执行哈希碰撞;
  2. 哈希碰撞,只针对静态资源的名称;(也就是说与js文件的文件内容无关)

于是,向Firefox的同学请求帮助


无辜的受害者: “为什么Firefox把我们的js认定为可疑文件?”

Firefox的解释是: “我也不知道为什么啊!”;

Firefox: “因为:Firefox浏览器会从Google下来一份safebrowsing哈希库,这个哈希库会对所有静态资源请求执行哈希碰撞。 因此,具体算法,Firefox方面,其实也是不知道的呢。”

无辜的受害者: “哦! 原来是被检查请求阻塞了呢?那要不你们添加一个阻塞行为的监控吧?”

Firefox: “对啊,对啊,在最新版本:30.00中,我们加了阻塞情况下,只进行本地检查的处理了, 你下载最新的版本就可以了。”

… 几个小时后 …

无辜的受害者: “我下更新到最新版本了,可还是不行呢? ”

Firefox: “要怪就怪gfw吧,为了伪造成是Google自己服务器的问题,而不是国内封锁,现在gfw对Google的封锁采用hold连接,不释放,不重置,一直不返回数据,造成现在火狐以为连接一直在等待数据”

无辜的受害人: “这….”, 尼玛,不是坑爹吗? “好的谢谢, 保持联系”。

因此,又抛出了两个新的问题:

  1. 为什么升级了Firefox还是在本地哈希碰撞中被fail了?
  2. 为什么Firefox已经添加了防阻塞处理,结果却还是被阻塞了?

问题的答案:

  1. Firefox升级是升级了,但是本地哈希库,并没有被更新(因为Google服务调不到啊~); 自测发现哈希库被保存在Firefox的应用程序中,而非个人配置目录中;
  2. Firefox添加了阻塞处理没错,但是gfw似乎做了一件奇葩的事情: gfw对Google的封锁采用hold连接,不释放,不重置,一直不返回数据,造成现在火狐以为连接一直在等待数据; 看来是Firefox的解决方案不够彻底啊;

最后的问题变成:

  1. Firefox没有处理到gfw对Google服务请求采取hold连接的情况;
  2. 没有得到能够让用户一次操作(如更新插件,更新浏览器)就能解决的方案,难以形成终极解决方案。

以后怎么办


首先:考虑到网络安全敏感问题,能拿到Google safebrowsing哈希库算法的可能性几乎不可能;尝试通过hash算法扫描本地代码库的思路不太可行。

看来:还是得靠Firefox那边,能够自己修复这个问题。 后续我们会持续跟进这一类的问题,并就这个问题跟Firefox方面保持反馈和测试结果的同步。

临时解决方案


js的出异常的解决方案是: 修改静态资源文件的文件名(注意如果是js文件必须修改非参数部分如: g.tbcdn.cn/aaa/bbb/ccc/ddd-min.js部分,而非 t=xxxxx.js)

另外:

由于safebrowsing检测的是所有静态资源,目前已发现的出现问题的资源文件类型和解决方案是:

/ Type Solution
1 ajax 修改请求名
2 js, css 修改目录时间戳
3 页面请求 修改参数名或添加时间戳

最后


说多了都是泪, 庆幸本次问题基本只在Firefox中被发现,并且没有大面积爆发。(应该多向chrome团队快速精准解决问题的作风学习呢~)

以后还是需要主动关注浏览器生态圈的动态,避免类似情况发生,以及对某些风险做好提前预防工作, 保证每一个使用Firefox的朋友有一个良好用户体验。

特别感谢Firefox的同学积极的帮助! 后续还会继续骚扰!

19 Jul 05:01

数学突破奖解析:告诉你真实的数学研究

by 方弦

本文作者:方弦

科学是目前人类探知客观世界最好的方式。对于科学的投入,尽管不一定能一蹴而就得到什么切实有用的成果,但长远来看却是技术发展最好的动力源。与技术开发不同,对科学的投入更像是公益活动,因为科学研究得到的成果属于全人类。而数学作为科学的语言,也有着类似的性质。

在目前富豪争相投身公益事业的社会潮流下,我们能听到的科学相关奖项也越来越多。除去老牌的菲尔兹奖、诺贝尔奖以外,我们时不时还能听到一些新的奖项。在前不久的6月23日,又有一个新的奖项横空出世,它名为“数学突破奖”,它的目标是“认可本领域内的重要进展,向最好的数学家授予荣誉,支持他们未来的科研事业,以及向一般公众传达数学激动人心之处”。

这个奖项引人注目之处之一它的奖金来源:Facebook的创始人扎克伯格以及数码天空科技的创始人之一米尔诺。此前他们还设立了“基础物理突破奖”与“生命科学突破奖”,合作者更包括Google创始人之一布林以及阿里巴巴的创始人马云。他们都是互联网造就的新贵,大概也正因如此,他们也更理解科学的重要性,因为正是科学的飞速发展,带来了日新月异的信息技术,也给他们带来了庞大的财富。

另一个引人注目之处则是高昂的奖金:三百万美元,这是诺贝尔奖的2.5倍有余,与解决3个克雷研究所千年难题所能获得的金额相同。这是科学奖项目前最高的奖金,它很好地完成了吸引公众眼球的任务。

那么,这次的获奖者都有哪些呢?他们的贡献又是什么呢?

西蒙·唐纳森(Simon Donaldson),来自石溪大学以及伦敦帝国学院,他因“四维流形革命性的新不变量,以及在丛以及法诺簇两方面,对其中代数几何与全局微分几何中稳定性之间联系的研究”而获奖。

马克西姆·孔采维奇(Maxim Kontsevich),来自法国高等科学研究院,他因“在包括代数几何、形变理论、辛拓扑、同调代数以及动力系统等在数学众多领域中产生深刻影响的工作”而获奖。

雅各布·劳瑞(Jacob Lurie),来自哈佛大学,他因“有关高阶范畴论和导出代数几何方面基础性的工作,对全扩展拓扑量子场论的分类,以及对椭圆上同调的参模理论解释”而获奖。

陶哲轩(Terence Tao),来自加州大学洛杉矶分校,他因“在调和分析、组合学、偏微分方程以及解析数论中的众多突破性贡献”而获奖。

理查德·泰勒(Richard Taylor),来自普林斯顿高等研究院,他因“在自守形式理论方面的多项突破性工作,包括谷山-韦伊猜想、一般线性群上的局部郎兰兹猜想以及佐藤-泰特猜想”而获奖。

看着这些简介,你现在的脑海里一定充满了各种“这些字每一个我都认识但是合起来是啥”又或者“哇好厉害啊好高深啊他们干的到底是啥”之类的念头。不要急,让笔者带大家分析每一位的主要贡献。

理查德·泰勒:代数数论

j不变量

我们从最后一位的理查德·泰勒开始。他的名字可能不太为人熟知,但如果说起费马大定理以及安德烈·怀尔斯,每个人可能都略有耳闻。泰勒是怀尔斯的学生。在当年怀尔斯证明费马大定理的故事中有一个小插曲,怀尔斯最初发布的证明其实是不正确的,其中存在一个漏洞。大家一开始看不出来,但随着数学界慢慢审视这项重要的工作,漏洞很快就被发现了。怀尔斯花了一年的时间找到了绕过漏洞的方法,而与他一起完成这项工作的,就是泰勒。

泰勒主要研究的领域是自守形式理论,这是代数数论——用代数结构研究自然数的一门数学分支——的一个重要部分。要理解自守形式,最好先从模形式开始。模形式是一种特殊的复值函数,它定义在复平面的上半部分,满足一定的增长条件,而最重要的是它有着高度的对称性,在一个被称为“模群”的特殊变换群的各种变换下仍然保持不变。这个群中的元素都是所谓的“默比乌斯变换”:

 z \mapsto \frac{az+b}{cz+d}, \, a,b,c,d \in \mathbb{Z}, \, ,ad-bc=1

(有关群论与模形式理论的另一个联系,请参见科学松鼠会文章《有限单群:一段百年征程

这里的a,b,c,d都是整数,也正因如此,模形式与数论天生就具有密不可分的关系。许多数论中的问题,甚至最耀眼的黎曼猜想,都能在模形式中找到联系,特别是一类被称为“椭圆曲线”的特殊曲线,与之关系更为密切,而这正是泰勒与他的合作者证明的谷山-韦伊猜想(现在又被称为模性定理)的内容。不仅是费马大定理,许多形式类似的方程解是否存在的问题,最终也能归结到有关某类椭圆曲线与模形式之间的关系,经过谷山-韦伊猜想指示的联系,从而得到解决。

除此之外,椭圆曲线除了是代数数论研究的轴心之一,也是计算数论中重要的研究对象,从而在实际生活中的应用占据着一席之地,特别是与每个人密切相关的密码学。与椭圆曲线有关的不对称加密协议,已经成为密码学的重要分支之一。这类加密协议虽然速度较慢,但在相同的密钥长度下,可以提供更可靠的保护。而这些加密协议的有效性以及具体应用,反过来又与椭圆曲线的理论研究息息相关。有许多加密时使用的工具,比如说泰特配对,就来源于理论研究。另外,椭圆曲线本身就能用于整数的因子分解,这也是RSA密码体系的命门。

至于泰勒研究的自守形式,则是模形式的一种推广,而椭圆曲线的对应推广又被称为超椭圆曲线。对于这些“升级版”的研究可以说根·本·停·不·下·来。它们结构之精致、地位之重要、内涵之丰富,再加上应用的潜力,实在使数学家们欲罢不能。

陶哲轩:解析数论、调和分析

Theta函数

对于陶哲轩,我们熟悉得多。他是华裔,也是神童,研究的领域之一——解析数论——也早已经由陈景润与哥德巴赫猜想而在中国家喻户晓。

同样研究自然数,陶哲轩走的路子跟泰勒的相去甚远。泰勒研究的代数数论,是尝试通过代数结构来理解自然数;而陶哲轩研究的解析数论,则是尝试通过函数的解析性质(例如有关上下界的估计)来进行探索。

在解析数论中,能用到的工具很多。除了经典的微积分(也就是高数中能学到的东西),还涉及更复杂的调和分析、代数数论以及组合中的一些工具。解析数论中的两大方法,筛法与圆法,前者可以看成组合学中容斥原理的巧妙应用,后者则是复分析与调和分析的集大成者。而陶哲轩在解析数论领域的重要贡献之一,就是引入了新的工具与技巧。他与本·格林证明了,存在任意长(而不是无限长)的等差数列,其中的每一项都是素数。在这个证明之中,他们用圆法拓展了组合中一个由斯泽梅雷迪发现的深刻定理,利用了有关加性组合的新思想解决解析数论的问题。这也使人们更多关于有关加性组合的研究。

(要更深入了解解析数论,请参阅科学松鼠会的《素数并不孤独》以及果壳网对Helfgott的专访

除此之外,陶哲轩在调和分析、偏微分方程方面也有重要的贡献,这两个领域对实际应用的影响更大。在工程中经常使用的小波分析,其实就是调和分析的一种应用。而陶哲轩对调和分析的研究,也直接催生了一门新的技术——压缩感知。在工程学中,我们经常需要测量某些信号,比如在摄影中,测量就是照相,而信号就是要成像的物体。压缩感知,其实就是如果我们知道信号的某些特殊性质,那么即使只进行少量的测量,在合适的情况下仍然能大体还原整个信号。利用这种方法,已经有人制作了只需单个像素感光元件的照相机,效果还不错,而需要记录的数据量则大大降低。这项技术在医疗诊断、人脸识别等广泛的领域都有重要的应用。

陶哲轩在组合学方面的工作,除了与解析数论有关的加性组合以外,还有代数组合。他与艾伦·克努森(Allen Knutson)发现的蜂窝模型给出了李特尔伍德-理查森系数的又一个组合解释,这些系数与一般线性群的表示论以及格拉斯曼簇的上同调有关,他也借此解决了代数组合中的一些猜想。

广阔的数学

eqwall

还有剩下三位的工作又是什么呢?

很遗憾,笔者也不清楚。

剩下的这三位,笔者仅仅知道他们研究的领域都与“代数几何”这一数学分支有关。虽然代数和几何大家都很熟悉,但“代数几何”作为一个整体,听说过的人可说是寥寥无几。代数几何奠基于希尔伯特的零点定理,之后经过格罗滕迪克之手一发不可收拾,目前已经发展数学中一门非常重要而又高度抽象的分支,与数学的其它分支有着各种各样深刻的联系。笔者虽然也有做代数几何的朋友,但是聊天的时候从来没有听懂过他的工作。

先不要急着用皮鞋追打笔者,也不要揭穿笔者各种打小广告的行为,笔者这样捉急,也是有原因的:

数学的跨度实在太广了,而每个领域都太深奥了,现在,即使穷尽一个人的一生,也难以涉猎数学的所有领域,而这些专家的所有工作横跨各种各样的领域,要一一详细解释更是难上加难。即使是数学系学生,对于很多没有钻研过的领域的理解,也只是“听说过大概是那么一回事”的程度而已。

这并不是数学特有的现象。实际上,现在整个科学体系经过数百年的不断积累,已经发展为一个庞大的整体。在牛顿的时代,一人尚且可以跨越数个不同的学科同时有所建树;在居里夫人的时代,一人最多也只能在一个学科的许多领域都有贡献;在现代,一人最多只能在一个学科的几个领域得到重大的成果,而绝大部分的研究者熟悉的仅仅是他们主攻的一两个领域。学科的细分前所未有,这也是一种必然,科学体系经过一代又一代研究者成年累月的积累,迟早会突破个人能掌握的极限,即使是天才。专业化、细分化,这是唯一的出路。

而数学研究领域之广阔,研究对象之丰富,研究方法之多样,也是其他学科中少见的。这也造成了数学分支之间前所未有的隔膜。研究量子群论的数学家,丝毫不会担心公理集合论中不可达基数的存在性会不会影响他的研究;埋头苦干纳维-斯托克斯偏微分方程的研究生,多半也永远不会用到范畴论中有关自伴逆变算子的结论;即使是代数几何的大拿,如果被问起随机幂律图的直径分布,大概也只能摇摇头。也正因如此,数学中跨领域的合作弥足珍贵,一个领域的数学工具如果能用在另一个领域中,常常也会带来意想不到的惊喜。

除了专门化之外,数学还有一个其它学科少有的特点:高度的抽象化。在欧拉的时代,数学还能表现成那种人人熟悉的数学式子;而在希尔伯特的时代,数学家们早就不满足于这种略显简单的抽象,决意利用更为抽象的语言将数学精确化,于是诞生了公理集合论;而随着代数拓扑与代数几何的发展,公理集合论已经略显繁琐,数学家们又引入了更抽象的范畴,又推广出高阶范畴,在其中,即使是无比复杂的结构,也被抽象为点与箭头、箭头之间的箭头、箭头之间的箭头之间的箭头,层次永无止尽;而到了现在,又兴起了对一种名为“拓扑斯”的特殊而又更为抽象的范畴,某些数学家甚至希望用它来代替公理集合论作为数学的基础。

这也使有关数学的传播难上加难。由于数学固有的抽象性,向一般大众传播有关数学的新知,常见的结局无非两种:传达的信息正确无误,但读者只能不明觉厉;传达的信息过度简化甚至歪曲,读者读得高兴,自以为理解,实际上却是谬种流传。而在科技日新月异的今天,即使是身边的技术,其中的包含的数学也早已非一般人能够掌握。对于现代的数学研究而言,高中数学不过是玩具,而大学中传说挂了无数人的高数,也只不过是基础中的基础。但对于绝大多数人来说,高数已经远远超过他们所需要掌握的数学。在保持正确性的前提下,现代的数学研究即使经过高度简化也难以为大众所理解,这也是非常正常的事情。如何逾越这个障壁,将数学的美、数学的作用以及研究数学的乐趣向大众传达,走出新的道路,这是一个难题,也是一个必须思考的问题。

互联网新贵们设立这个数学巨奖来奖励数学家,也是这种数学传播的一种尝试。他们希望能将公众的注意力吸引到数学研究上,让更多的人关注数学、喜欢数学,从而间接地鼓励未来的数学研究,还有未来的科技发展。“数学突破奖”这个奖项,在奖励数学家以及吸引公众目光这两方面已经胜利完成任务。但君子之泽,三世而斩。接下来,如何将这种对数学的一时关注转变为长期关注,转变为观念,转变为更好的政策,转变为文化,这是同时考验慈善家、数学工作者、媒体工作者、政治家,以及我们每一个人的问题。

(本文已发表于果壳网,有修改。转载请联系作者。文中前两张图来自维基百科,后一张图来自果壳网)

19 Jul 04:50

超方便!专为设计师而写的GitHub快速入门教程

by cyRotel

超方便!专为设计师而写的GitHub快速入门教程

李凯文( Tower设计师):在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目托管平台,许多企业也都是用GitHub来协同开发工作,当然我们彩程也是其中之一。笔者最初决定学习Git也是因为在团队内部设计方案初步被开发出来后,难免会有一些细节需要调整,而为了调整几像素的问题再求前端工程师出马,其实是很影响整体效率的,所以希望通过学习GitHub好在必要的时候直接参与开发,能发挥自己的一点CSS技术以更直接快速的解决问题。

但是期间竟然发现网上无一篇为设计师而备的Git教程,典型的,几乎没有一个教程讲了GitHub的官方应用,而都是围绕命令符做教程,对就是DOS那样的命令符界面,这对于设计师和产品经理等非技术背景从业者来说多少有些难于上手,所以笔者打算结合个人体验,自己动手写一篇以使用网页和客户端为主的GitHub教程(暂时先仅以Mac版客户端为例),希望它能帮助大家以最快速度熟悉并逐渐开始使用GitHub。

为什么要了解GitHub

在开始之前,还是得说说为什么GitHub值得设计师学习。除了开篇所讲的例子,可以将自己所了解的一点CSS或开发技能发挥出来,降低团队合作中的沟通成本。这本质上还是设计师是否应该学习开发或学习到什么程度的问题。不过我一直认为这没什么可探讨的,只是每个人不同的选择和追求。就像有些人是想成为家具设计师,有些人是真想亲手打磨出自己心中最理想的那一把椅子;有些人想成为建筑设计师,有些人只想在山脚下为家人盖一座完美小屋。同样,如果你是真的热爱这个日新月异的行业,没准某天也要自己创造点什么,我想你一定会毫不犹豫的开始学习。

什么是Github

超方便!专为设计师而写的GitHub快速入门教程

按惯例,还是先简介下究竟什么是Git(有基本认识的同学可以直接跳过)。让我们摒弃那些专业名词,用设计师工作中经常遇到的情况来介绍什么是Git:

• 你出了一版方案A,在大家讨论后,你改到B,结果再讨论,大家觉得还是不如用A,这时发现A没有另存,还得再改回去!在GitHub中就不用担心,它会记录你提交的每个版本,并把这些都放在一个仓库(Repository)里,而每一次提交改变就是 Commit,你可以随时回退到任意一个版本。

• 此外你还很可能遇到方案衍生的情况,在方案A的基础上,改出了一种方案B,又改出了一种方案C,可能还分别衍生出B1、B2及C1、C2,在GitHub里有分支(Branches)可以记录这种方案的分化过程。

• 后来你觉得B1和C2方案中都有可取的地方,把它们融合一下就可以输出终稿了,Git里当然也支持这种分支合并(Merged)。

当你个人使用Git,涉及的基本概念就这么几条,是不非常简单呢。下面我们来看看多人协同,也就是Git真正厉害的地方,当然也不复杂。

• 在稍大的团队中,可能需要几个设计师合作完成一个方案,怎么样统一进度呢,一种就是大家每天把文件拷在一起,这需要经常浪费时间去同步文件,显然很不方便。另一种是每个人电脑里都留一份,需要时就和云端服务器同步,Git就是采用这样的所谓分布式系统。好处是更安全,也更便捷。

• 那么问题也就来了,如果大家都改同一个东西,万一冲突了怎么办?不用担心,Git会帮你对比并告诉你哪里有冲突了,你可以逐个对冲突的地方做出抉择。此外,前面不是讲到可以衍生出分支(Branches)么,在大家各自推进方案的时候,分别把内容放在不同的分支里,就不会相互干扰了。

• 开源的项目是任何人都可见,你可以Fork一个项目,这相当于在你的账号下从原项目新建了一个分支,你可以在此基础上改动,如果有希望提交给原作者的成果,可以发合并申请到原库(Pull Request),原作者可以看到通知并决定是否合并。通过这种方式,大家就可以合力将某个开源项目变得更好。

超方便!专为设计师而写的GitHub快速入门教程

最后我们还得明确一下概念,Git和GitHub有什么区别,引用知乎上Fluyy的解释“git是一个版本控制工具,github是一个用git做版本控制的项目托管平台。”这有点类似于Wordpress和Wordpress.com的关系,前者是一个任何有都可以用的免费博客系统,后者是一个平台,在这个平台上你可以通过注册来直接使用Wordpress写博客。

说到这里我想你已经对GitHub是怎么回事有了基本的认识,下面就让我们撸起袖子,以一个简单的案例来看看GitHub到底是怎么使用吧。

案例学习:做一遍全明白!

我们以Fork一个项目,做出自己的修改并提交给原作者的任务作为基本案例,下面跟着我一步一步来吧,网快手快的同学几分钟就可以搞定啦。

第一步:注册一个GitHub账号并登录

这个流程就不说了,完成后可以下载GitHub官方App,并登录。

第二步:Fork仓库

超方便!专为设计师而写的GitHub快速入门教程

点这里打开我用马甲专为本教程建立一个库 Designers-Learn-Git,可以看到创建者名(我的马甲)写在/前面:Tower-KevinLi。然后点击右上角的Fork按钮。

完成后你会发现跳到一个新的页面,Tower-KevinLi变成了你的GitHub账户名(cnkevinlee是我的另一个马甲…),这表示你的账号下已经“复制了”一份Designer-Learn-Git,然后你就可以做修改了。

超方便!专为设计师而写的GitHub快速入门教程

第三步:修改文件

可以看到Designers-Learn-Git这个仓库里只有两个文件“README.md”(项目说明)和“花名册.txt”,这里我们只需尝试修改后者(道理和修改有很多文件的仓库是一样的)。可以直接在线修改,也可以先克隆到本机再修改,对于比较复杂的项目肯定是要采取后者,不过这里我们可以先看看在网页上直接修改怎么操作。

超方便!专为设计师而写的GitHub快速入门教程

在线修改:直接在页面上点”花名册.txt“的名字,进入如下详情页,再点击”Edit“。

这里设计的任务内容是在花名册上随便写写你的ID和Tiitle,初衷是能通过这个和学习这个教程的同学有一个互动,看看你能排到第几位。

超方便!专为设计师而写的GitHub快速入门教程

在编辑页面编辑完后,滚动到页面底部,点击绿色的“Commit Changes”按钮确认提交。

本地修改:另一种办法是把项目克隆到本地后再修改,打开客户端(这里以Mac最新版为例),点击右上角的“+”号,切换到“Clone”,找到“Designers-Learn-Git”后点击右下的“Clone Repository”按钮。

超方便!专为设计师而写的GitHub快速入门教程

然后从本地找到克隆的文件夹,打开“花名册.txt”,编辑并保存。这时再切换到GitHub应用的窗口,你会发现它在“Changes”页已经检测到并列出了你的改变,然后点击Commit & Sync按钮,将修改提交并同步到GitHub。注意,提交和同步是两个动作,需要先将下图那个绿色的按钮激活,这两个动作才会同时执行,否则你就需要在提交后再点整个界面右上角的Sync(适用于做出多个修改后统一提交的情况)。

超方便!专为设计师而写的GitHub快速入门教程

第四步:申请合并

在确认已经对自己Fork了的仓库修改成功后,你可以将提交合并申请,申请将你的版本合并入最初的项目也就是我创建的 Designers-Learn-Git,步骤如下:

在网页上打开你Fork的Designers-Learn-Git的页面,点击这个醒目的绿色按钮。

超方便!专为设计师而写的GitHub快速入门教程

再点击“Create pull request”按钮,提交申请,完成后我会收到通知,并将你补充的内容合并入原库。

超方便!专为设计师而写的GitHub快速入门教程

注意上图圈红的地方显示了要合并的两个分支,由于没有新建分支,这里就默认显示两个库都仅有的Master主分支,你可以尝试新建分支,并选择其它分支申请合并,体验GitHub的分支功能,本文作为入门教程这里就先不赘述了,有问题的同学可以联系我。

图片对比功能,设计师的真爱!

做完前面的案例,你会发现GitHub可以直接对比文件间的改动,但也仅对程序、文本文件有效,可我们设计师都是靠图吃饭啊!好了别急,GitHub一直在努力提升设计师的使用体验,并且已经实现了很好的图片对比功能,当然直接上传可能巨大的PSD源文件不太现实,但我们可以对比导出后的版本,点击这里看看Demo吧。

超方便!专为设计师而写的GitHub快速入门教程

GitHub的图片对比工具提供了三种对比方法帮你找不同,我们来挨个看一下:

2-up:就是直接并排放在一起对比,会显示尺寸:

超方便!专为设计师而写的GitHub快速入门教程

Swipe是将两个图摞在一起,通过拖动,改变上面的图的显示大小,用户盯着拖动线附近的变化就可以快速发现区别了,如图,当拖到猫眼附近就很容易看出一个戴了眼镜。

超方便!专为设计师而写的GitHub快速入门教程

Onion Skin也是将两个图摞在一块,图下方有一个拖动条,控制上面一张图的透明度,这样在拖动改变透明度的时候,就能感觉到有区别的地方了。

GitHub使用拓展:能做的远不止这些!

超方便!专为设计师而写的GitHub快速入门教程

用GitHub协作翻译

超方便!专为设计师而写的GitHub快速入门教程

苹果发布Swift语言,号称更加容易上手,让很多设计师都跃跃欲试。官方同时发布了(翻译成中文后)达300多页的官方手册,而国内一个自发组织起来的团队,30多个人用9天时间即将翻译和校对工作全部完成,他们每人都还有自己的事情,上班、上线、创业,然而借助GitHub他们仅用业余时间在这么短的时间内就完成了这一壮举。他们的口号是“这一次,让中国和世界同步”

点这里可以看到他们的项目和翻译成果。

用GitHub写书

说到了前一个例子,就不得不提GitBook,一个结合GitHub和Markdown来制作精美在线读物的工具。你可以自己或和任何人合作,编著一本在线书籍,还能够销售,当作家不再只是梦。

超方便!专为设计师而写的GitHub快速入门教程

用GitHub进行项目管理

GitHub最初是为了开发的管理而生,当然也就具备了项目管理的潜质,特别是与开发密切联系的项目中,它的优势尽显。这几篇文章介绍了如何使用GitHub结合其它工具进行项目管理:《Using Github for Project Management》、《使用GitHub进行团队合作》。

用GitHub搭建博客、个人网站

一个在线的个人页面,独立博客,几乎是每个设计师的必备。过去,要自己租空间、安装网站程序,搭个人网站,是个耗时又好钱的事。而GitHub本身提供免费的托管服务,又提供了贴心的Pages功能,可以绑定你自己的域名,让这一切就水到渠成了。免费、高效、不限流量,做一个个人页面绰绰有余,比如前两天碰巧看到的这个例子:jianglai.me。不过其实很多工程师都已经在GitHub上搭建了自己的博客,设计师们也快跟进吧。

推荐一些相关教程:

• 《通过GitHub Pages建立个人站点(详细步骤)

• 《如何搭建一个独立博客——简明Github Pages与Hexo教程

• 《搭建一个免费的,无限流量的Blog—-github Pages和Jekyll入门

更多进阶教程推荐

鉴于本文只是一篇抛砖引玉的入门教程,就不再详述更多的细节,如果对Git感兴趣的同学,可以看看下面这些,它们可以帮助你成为一名专家、至少是设计师中的Git专家 :)

《git-简明指南》

《Pro Git》

《Git Magic》

一个学习Git的在线互动教程

知乎上关于GitHub学习资料的问题

当然这也许不是最好的GitHub入门教程,但一定是最适合设计师的,希望它能帮助你快速的入门了解这一程序猿们整天挂在嘴边的东西。文中如有不恰当之处请之处,有不清楚的地方也欢迎联系我 @彩程-Kevin 讨论。

当然,GitHub只是技术世界的一个小支脉,问题的根本,还是设计师对于技术的学习,如果你是个不满足于绘图工具,想做Geek的设计师,欢迎加群 302258924 交流。

下期预告:《GitHub+开源响应式Web模板,最快速、最低成本搭建个人主页》

投稿者:@彩程-Kevin

【优设网 原创文章 投稿邮箱:2650232288@qq.com】

================关于优设网================
“优设网uisdc.com“是一个分享网页设计、无线端设计以及PS教程的干货网站。
【特色推荐】
设计师需要读的100本书:史上最全的设计师图书导航:http://hao.uisdc.com/book/
设计微博:拥有粉丝量73万的人气微博@优秀网页设计 ,欢迎关注获取网页设计资源、下载顶尖设计素材。
设计导航:全球顶尖设计网站推荐,设计师必备导航:http://hao.uisdc.com
———————————————————–
想在手机上、被窝里获取设计教程、经验分享和各种意想不到的”福利”吗?
添加 优秀网页设计 微信号:【youshege】优设哥的全拼
您也可以通过扫描下方二维码快速添加:

sdcweixin

优设哥向您推荐:

干货!设计师必读的15个响应式网页设计教程

围观!Android首席设计师谈移动与软件设计

经典:丢猫千万别找设计师

交互设计师不仅仅是个画破图的

视觉设计师成长的三个阶段
无觅
19 Jul 04:49

【VC教程】Hi!2014世界杯专题设计

by ranger

世界杯结束了!德国队赢了!小伙伴们都满足了吧?一想到马上要进入工作状态,整个人心情都不好了!别急今天的教程还跟世界杯有关!

小伙伴们看过来

先看一下效果

【VC教程】Hi!2014世界杯

草坪的制作

用矩形工具 勾画出带有透视的图形

【VC教程】Hi!2014世界杯

添加草地材质

【VC教程】Hi!2014世界杯

为了突出草地质感,用了2张草地的素材进行叠加

【VC教程】Hi!2014世界杯

添加材质的时候,注意按照透视添加

为了让草地边缘更加真实,我们给矩形边上画一些杂草

设置笔刷

【VC教程】Hi!2014世界杯

绘制边缘

【VC教程】Hi!2014世界杯

添加杂草材质(为了让边缘杂草跟内部杂草更好的融合,我们给单色的杂草边缘添加真实材质)

【VC教程】Hi!2014世界杯

效果如下

【VC教程】Hi!2014世界杯

用笔刷工具添加杂草第一层厚度

【VC教程】Hi!2014世界杯

把笔刷调小一点儿,然后反复图画厚度

【VC教程】Hi!2014世界杯

画完如果发现颜色不够深,可以给它颜色叠加深绿色29351d

【VC教程】Hi!2014世界杯

添加杂草材质,图层选项(叠加)

制作土地层

用矩形工具勾画出土地层形状

【VC教程】Hi!2014世界杯

给土地层添加蒙版画出不规则的边缘

【VC教程】Hi!2014世界杯

添加纹理素材

【VC教程】Hi!2014世界杯

调整土地层的明暗关系

【VC教程】Hi!2014世界杯

添加阴影层

【VC教程】Hi!2014世界杯

添加画面细节

根据足球场的透视关系画出中场线(绘画方法参见往期教程)

【VC教程】Hi!2014世界杯

添加足球,添加足球阴影。添加环境色

【VC教程】Hi!2014世界杯

运用笔刷工具,画一些掉落的渣土

【VC教程】Hi!2014世界杯

【VC教程】Hi!2014世界杯

调整组合

建一个色值为d1d1d1矩形,执行滤镜>杂色(数值4)>锐化

【VC教程】Hi!2014世界杯

用画笔工具为底图打一个高光,添加文字

【VC教程】Hi!2014世界杯

添加杂草材质,组合调整,最终完成

【VC教程】Hi!2014世界杯

更多畅游VC教程:
《PS教程!快速打造场景氛围(4)》
《PS教程!简单三步制作动感照片》
《PS教程!如何打造舞台效果第二弹》
《VC教程!教你快速打造场景氛围(附PSD下载)》
《VC教程!文案也有层级》
《VC教程!超酷现代战争按钮制作过程》

关于畅游VC

搜狐畅游视觉设计中心团队。我们是从游戏和生活中汲取创意和灵感的一群设计精灵,用爱去释放奇妙的设计魔法,描绘让你我感动的虚拟人生。

官网博客:vc.changyou.com
新浪微博: @畅游VC
微信公众平台:cyou_vc

您也可以通过扫描下方二维码快速添加:

【VC教程】简单三步制作动感照片

================关于优设网================
“优设网uisdc.com“是一个分享网页设计、无线端设计以及PS教程的干货网站。
【特色推荐】
设计师需要读的100本书:史上最全的设计师图书导航:http://hao.uisdc.com/book/
设计微博:拥有粉丝量73万的人气微博@优秀网页设计 ,欢迎关注获取网页设计资源、下载顶尖设计素材。
设计导航:全球顶尖设计网站推荐,设计师必备导航:http://hao.uisdc.com
———————————————————–
想在手机上、被窝里获取设计教程、经验分享和各种意想不到的”福利”吗?
添加 优秀网页设计 微信号:【youshege】优设哥的全拼
您也可以通过扫描下方二维码快速添加:

sdcweixin

优设哥向您推荐:

视觉飨宴!畅游VC视觉研究刊物-ISSUE05(附PDF下载)

VC教程!教你快速打造场景氛围(附PSD下载)

VC教程!文案也有层级

PS教程!如何打造纸张撕裂效果

VC教程!教你使用最受欢迎的配色小工具Kuler
无觅
19 Jul 04:47

PS教程:教你创建魔幻霸气的金属龙形LOGO

by cyRotel

PS教程:教你创建魔幻霸气的金属龙形LOGO

今天分享的教程,效果非常赞,且步骤不是很多,主要教同学们如何利用图层样式创建3D效果,同学们有空可以练练手。

素材打包:微盘下载

  • 龙形LOGO
  • 源文件

PS教程:教你创建魔幻霸气的金属龙形LOGO

Step 1:

新建文件,大小为1280×720 px 。

PS教程:教你创建魔幻霸气的金属龙形LOGO

选择渐变工具,径向渐变。

PS教程:教你创建魔幻霸气的金属龙形LOGO

渐变颜色从 #d97408 到 #4c2407.

PS教程:教你创建魔幻霸气的金属龙形LOGO

从中心到边缘,拉出如下渐变。

PS教程:教你创建魔幻霸气的金属龙形LOGO

Step 2:

然后把龙形LOGO的素材拖进来,你可以调整大小直到满意为止。

PS教程:教你创建魔幻霸气的金属龙形LOGO

Step 3:

接下来设置图层样式。

为了使它看起来有金属质感,首先要给它添加浮雕效果。参数如下:

PS教程:教你创建魔幻霸气的金属龙形LOGO

描边效果:

PS教程:教你创建魔幻霸气的金属龙形LOGO

PS教程:教你创建魔幻霸气的金属龙形LOGO

内阴影:

PS教程:教你创建魔幻霸气的金属龙形LOGO

效果如下:

PS教程:教你创建魔幻霸气的金属龙形LOGO

继续添加效果:

光泽:

PS教程:教你创建魔幻霸气的金属龙形LOGO

渐变叠加:

PS教程:教你创建魔幻霸气的金属龙形LOGO

外发光:

PS教程:教你创建魔幻霸气的金属龙形LOGO

投影:

PS教程:教你创建魔幻霸气的金属龙形LOGO

效果如下:

PS教程:教你创建魔幻霸气的金属龙形LOGO

Step 4:

选择合适的字体,打出 Dragon 文本。字体推荐:《超火!35款黑暗神秘的哥特式字体》

PS教程:教你创建魔幻霸气的金属龙形LOGO

18

Step 5:

选择龙形LOGO,右键拷贝图层样式。

PS教程:教你创建魔幻霸气的金属龙形LOGO

粘贴到文本上。

PS教程:教你创建魔幻霸气的金属龙形LOGO

Step 6:

摁住Ctrl 键,单击文本的 T 样图标,选中文本选区。

PS教程:教你创建魔幻霸气的金属龙形LOGO

Step 7:

单击选择 > 修改 > 扩展,扩展量为 5 px

PS教程:教你创建魔幻霸气的金属龙形LOGO

PS教程:教你创建魔幻霸气的金属龙形LOGO

最终效果:

PS教程:教你创建魔幻霸气的金属龙形LOGO

细心的同学可能发现效果与前边的图不同,没有一束束闪亮白光的点缀,这个只要用白色笔刷画一下,加点外发光效果就OK咯。不懂的同学下载 PSD 看看~

最新教程推荐:
《PS教程:创建清新雅致的樱花效果字体》
《简易教程出来啦!教你几步创建超火的多边形背景》

原文地址:graphicsimple
优设网翻译:程远

本文由优设网原创翻译,请尊重版权和译者成果,转摘请附上优设链接,违者必究。谢谢各位编辑同仁配合。

【优设网 原创文章 投稿邮箱:2650232288@qq.com】

================关于优设网================
“优设网uisdc.com“是一个分享网页设计、无线端设计以及PS教程的干货网站。
【特色推荐】
设计师需要读的100本书:史上最全的设计师图书导航:http://hao.uisdc.com/book/
设计微博:拥有粉丝量73万的人气微博@优秀网页设计 ,欢迎关注获取网页设计资源、下载顶尖设计素材。
设计导航:全球顶尖设计网站推荐,设计师必备导航:http://hao.uisdc.com
———————————————————–
想在手机上、被窝里获取设计教程、经验分享和各种意想不到的”福利”吗?
添加 优秀网页设计 微信号:【youshege】优设哥的全拼
您也可以通过扫描下方二维码快速添加:

sdcweixin

优设哥向您推荐:

涨姿势!优秀Logo必须自问的六个问题

Firfox Logo重塑的秘密

完结篇!LOGO设计终极指南

设计师必看!Logo设计的忌讳有哪些?

PS教程:蒸汽朋克式LOGO设计(下篇)
无觅
19 Jul 04:44

Re: old吗?

by aimmoney
发信人: aimmoney (野猪一样帅), 信区: Joke
标 题: Re: old吗?
发信站: 水木社区 (Fri Jul 18 18:12:50 2014), 站内

有次有个孩子考英语考试,忘记了老的英文单词
孩子淡定的刷着gprs上水木,随便就翻到一个
刚发的老帖,微笑着满怀信心往下翻,

尼玛,
只见一排的写着
~~~二舅,二舅~~

【 在 zjl (主教练) 的大作中提到: 】
: 有一孩子喝了两年冰红茶,每次开盖都是谢谢惠顾。 昨天他考试,惠字不会写,只见他淡定的拧开旁边的冰红茶,哎我草泥马啊
: ,,,,,,,,,,,,,,,,,,,,,,,,,,~~再来一瓶!


--

※ 来源:·水木社区 newsmth.net·[FROM: 118.194.214.*]