读书雷达 | 公益+互联网篇

极思读书雷达01 (1)

ThoughtWorks中国区社会公正事务(P3)团队为热爱创新的挑战者们推出了以技术、方法论、领域知识和个人发展为四个纬度三个等级的第一版读书雷达,这版读书雷达是通过百余家社会组织投票以及专家、机构推荐而最终推出。

选取这四个纬度的原因是许多社创者在创业过程中总是受限于技术和产品化思维的壁垒,而互联网发展的今天,IT是创新者的必备工具,精益、敏捷或者设计思维都是不可或缺的方法,领域知识的必需以及个人成长的软技能是根基。

这个特别针对致力于公益领域的创新者以及社会创新的热爱者所推荐的读书图谱,利用雷达的特点和优势来展现个人读书的广度和深度,为每一个致力于公益领域创新的非技术背景的伙伴们提供从入门到高级的进阶读书计划,让社会领域创新不再陌生!

极思读书雷达02 (1)

公益+互联网 读书雷达(点击可查看大图)

专家推荐

顾远

Aha社会创新学院创始人,中国社会创新和社会企业领域的重要推动者,多项社会创业支持计划的发起人、顾问和导师,任多个全国知名社会创业和教育创新机构的理事。英国伦敦大学组织发展硕士、美国NFTE 创业导师、国际项目管理专业资格(PMI),先后曾在《东方早报》、《中国财富》、《IT 经理人世界》、《21世纪经济报道》、香港《信报》、台湾“社企流”等媒体开设专栏,主持编写了四本NGO 管理及社会创新类书籍,已出版两本专著,并多次在国际会议上做关于中国社会创新/社会企业领域的主题发言。由他发起成立的“Aha 社会创新学院”已成为中国社会创新与社会企业领域最重要的教育及研究机构之一。同时也是中国最早的社会创业加速器,目前主要支持来自教育领域的社会创业。

《失控》-Kevin Kelly

“预言是世界上最容易做的事情,因为当检验预言的时候到来,人们多半是已经忘记了当初的预言。本书写于20年前,但那些书中预言却几乎全部实现了!今天我们反复阅读这本书,不仅是为了欣赏一个人的智慧和洞察可达的深度,更是为了理解今天我们的周遭正发生的一切,做出我们自己的预言,然后实现它们。”

《共同的底线》-秦晖

“这本书中收录的文章尽管论题不一,但都透着秦先生一贯的主张:中国需要警惕‘问题殖民’,也就是说不要盲目地围绕左和右、公平还是效率、自由主义和保守主义、大政府小市场还是小政府大市场这些概念争论不休。 ”

《创新的艺术》- Tom Kelley&Jonathan Littman

“本书谈的是创新的‘艺术’而非‘科学’,有很多有趣的案例和实用的技巧,对创新的根本原则和原理论涉及不多,适合初尝创新滋味的读者。”

《卓有成效的管理者》- Peter F. Drucker

“对于绝大多数的管理者而言,本书所强调的’要事优先’、‘了解你的时间’、‘有效决策’等等观念早已耳熟能详,而真正的问题是:我们做到了吗?”

潘毅

香港理工大学应用社会科学系教授,香港理工大学与北京大学合办的中国社会工作研究中心副主任。潘毅主要研究中国劳工、性别及文化政治、全球化等。1992年与1994年分别于香港中文大学历史系与香港大学社会科学系毕业,1998年于伦敦大学(The School of Oriental and African Studies,University of London)亚非学院完成人类学博士学位。潘毅的研究具有广泛的国际影响,她的《中国制造:全球化工厂下的女工》2005年获得米尔斯(C. Wright Mills)奖,为首次获此奖的亚洲学者。除学术活动外,潘毅亦活跃于社会运动。

《信息时代的世界工厂:新工人阶级的网络社会》-邱林川 《中国女工》-潘毅 《资本的终结》-李民骐

邱林川

传播学博士,香港中文大学新闻与传播学院副教授,在多个传播学专业期刊担任副主编、编辑委员会委员、书评编辑等职务。邱博士长期关注数字技术对大众、尤其是社会中下阶层的影响,著有《信息时代的世界工厂》、《新媒体事件研究》等著作。针对数字技术对劳动者和消费者普遍的异化,邱博士提出了“i奴”的概念,指出当代资本主义体系重现了17世纪奴隶制的很多特征。

《 A New Culture of Learning》-John Seely Brown & Douglas Thomas

“这本书告诉大家学习和游戏如何在新媒体时代发生深刻变化,一种新的学习文化已经渐露端倪。 ”

《信息时代三部曲:网络社会的崛起、认同的力量、千年终结》-Manuel Castells

“这三部曲分别讲述网络社会的特征和兴起、捍卫传统及群体身份的抗争、以及前苏联、东亚包括中国在世纪之交的重大转变。 ”

《Digital Labor: The Internet as Playground and Factory》-Trebor Scholtz

“互联网是你我的娱乐场也是新的血汗工厂。如何逃离这赛博空间的剥削与欺骗,让数码劳工找到一片属于自己的天?这本书收入的章节涉及网游、电商、大数据、互联网企业和公民社会组织运营模式等各种问题。 ”

《黑客伦理与信息时代精神》-Pekka Himannen

“作者旗帜鲜明地提出,互联网时代的精神就是黑客精神,即:热情创新、全身心投入、不计物质回报、与同行共享成果。本书为开源运动注入一支少有的哲学强心针。”

《案例研究》-Robert Yin

“这是社会科学界用得最广的一本关于案例学习的教科书,适用于分析社区、公司、事件、人物、产品等各种案例。”

《美国人民史》- Howard Zinn

“这本书告诉大家美利坚合众国以及美帝国的背后有怎样的野蛮剥夺与英勇反抗。”

《蒙面骑士》- 戴锦华&刘健芝

“此书图文并茂,讲述’网络时代的第一场游击战争’,即1994年在墨西哥南部发生的萨帕塔起义。北京大学和香港岭南大学的两位女老师深入玛雅人后代生活的丛林,带大家看到:反对新自由主义的斗争原来真可以如此美丽浪漫。”

王瑾

麻省理工学院比较媒体系和全球文化研究系教授、中国文化研究讲座教授,MIT新媒体行动实验室主任,中国科学与技术大学客座教授,中国大陆知识共享(Creative Commons)国际顾问委员会主席,美国维基百科基金会顾问委员,以及9家国际学术期刊的编委,同时也是NGO2.0项目的发起人与主任。研究方向集中于全球与中国新媒体文化、新媒体应用、娱乐媒体与广告营销、公民媒体与技术公益等领域。曾获得美国国家人文中心和哈佛大学Radcliffe跨学科研究中心等研究员职位。2007年至今,她担任着英国利兹大学媒体产业研究中心顾问、澳大利亚悉尼科技大学中国社会和文化变迁研究中心国际顾问,兼任香港大学传播学院项目评审委员会委员。出版过8本著作,其中《品牌新中国》享有英语、日语、阿拉伯语、汉语四种版本。

《 Rewire: Digital Cosmopolitans in the Age of Connection》-Ethan Zuckerman

“本书作者通过各种案例阐释这种现象的发生,并呼吁那些进出于多语种、多文化社区之间的桥梁者—‘cosmopolitans’(有世界主义情怀的人)—深入调动和发挥他们擅长的链接作用,以实现信息技术网络化的真正潜能。”

《互联网+公益:玩转新媒体》-王瑾&周荣庭

“当 ‘互联网’+ 碰上了 ‘公益’会催生何样的实践和文化转型呢? 互联网不仅是工具,更是一种自我突破的思维方式。 ”

《行动研究与社会工作》-杨静&夏林清

“在国内‘三社联动’的政策环境下,这本书为国内社会工作的专业带来新的启发、输入了新的视角。既有理论高度又是有血有肉的好书。 ”

恩派推荐

陈迎炜 中国社创之星评选执委会秘书长

《零边际成本社会》-Jeremy Rifkin

“这是一本关于未来蓝图的书,推荐给所有选择社会创业的伙伴。 ”

《U型理论》-C.Otto Scharmer

“这本书是在道上行走的书,也完美中西合璧的组织变革的书。作者奥托邀请我们一起以全新的视角重新审视自己、和他人的关系和组织管理及结果,探索一种革命性的领导方式。 ”

《如何改变世界》-David Bornstein

“《如何改变世界》不知道是多少社会创业者的启蒙读物,作者是路透社的专栏作者,花了大量时间挖掘一位又一位的”社会创业家”的故事,通过最直接的呈现,震撼每一位读者的心灵。 ”

王稳 恩派《社会创业家》全媒体主编,724社创空间负责人

《人人时代》-Clay Shirky

“互联网的趋势与社群发展趋势的相互影响和解读。”

《精益创业》-Eric Ries

“不是教你创业,而是教你一种思维方法,如何快速获得真正有效的市场反馈。”

《中国NGO口述史》-王名

“从发展的角度理解中国的NGO。 ”

《从理想主义到经验主义》- 顾准

“从本质上理解如何将事做成事业,代表一种思考的深 度。”

技术

基础

  1. 重来-Jason Fried、David Heinemeier Hansson
  2. 云计算-姚宏宇、田溯宁
  3. 管理3.0-Jurgen Appelo
  4. 浪潮之巅-吴军
  5. 无处可藏-Glenn Greenwald
  6. 驱动力-Daniel H. Pink
  7. 人人时代-Clay Shirky

启发

  1. 用户故事与敏捷方法-Mike Cohn
  2. 软件工艺-Pete McBreen
  3. 人件-Tom DeMarco
  4. 大数据时代-Viktor Mayer Schön berger
  5. 创客-Chris Andersen
  6. 人月神话-Frederick P. Brooks, Jr.
  7. 游戏改变世界-Jane McGonigal
  8. A New Culture of Learning-John Seely Brown 、Douglas Thomas
  9. Rewire: Digital Cosmopolitans in the Age of Connection-Ethan Zuckerman

进阶

  1. 与机器赛跑-Erik Brynjolfsson、Andrew McAfee
  2. 技术元素-Kevin Kelly
  3. UINX编程艺术-Eric S. Raymond
  4. 失控-Kevin Kelly
  5. 信息时代三部曲-Manuel Castells
  6. Digital Labor-Trebor Scholtz
  7. 黑客伦理与信息时代精神-Pekka Himannen
  8. 信息时代的世界工厂-邱林川

方法论

基础

  1. 金字塔原理-Barbara Minto
  2. 设计方法与策略-代尔夫特理工大学工业设计工程学院
  3. The Doodle Revolution-Brown Sunni
  4. 打开餐巾纸-Dan Roam
  5. 创新自信力-Tom Kelley、 David Kelley
  6. 思维导图-Buzan T 、Buzan B
  7. 商业模式新生代 -Alexander Osterwalder
  8. 精益创业-Eric Ries
  9. 案例研究-Mike Cohn

启发

  1. 点石成金-Steve Krug
  2. The Moment of Clarity-Madsbjerg Christian
  3. Little Bets-Peter Sims
  4. To Sell Is Human-Pink Daniel H.
  5. 0到1-Peter Thiel、Blake Masters
  6. 社会研究方法-Earl Babble

进阶

  1. Designing For Growth- Jeanne Liedtka
  2. Playing To Win-A.G. Lafley
  3. This Is Service Design Thinking-Schneider
  4. The Ten Faces Of Innovation-Tom Kelley
  5. Change By Design-Tim Brown
  6. 零边际成本社会-Jeremy Rifkin
  7. U型理论-C.Otto Scharmer

公益领域知识

基础

  1. 真正的问题解决者-Ruth A. Shapiro
  2. 群-雷金纳德.范李等
  3. 社会创业-Arthur C.Brooks
  4. 非营利组织管理概论-王名
  5. 非营利组织的管理-Drucker.P.F
  6. 中国NGO口述史-王名
  7. 如何改变世界-David Bornstein
  8. 中国女工-潘毅
  9. 互联网+公益:玩转新媒体-王瑾、周荣庭

启发

  1. 社会影响力投资 -Anthony Bugg Levine
  2. 行动改变生存-寇延丁
  3. 新乡土中国-贺雪峰
  4. 中国社会各阶层分析-梁晓声
  5. 资本主义的真相-张夏准
  6. Powered By Pro Bono-Taproot Taproot
  7. 行动研究与社会工作-杨静、夏林清

进阶

  1. 公共与非营利组织战略规划-John M.Bryson
  2. 暴力-Slavoj Žižek
  3. 不平等的代价-Joseph E.Stiglitz
  4. 共同的底线-秦晖 /他的思想中蕴含的深刻的人文关怀和对自由公正的坚定捍卫
  5. 美国人民史- Howard Zinn
  6. 蒙面骑士-戴锦华、刘健芝
  7. 资本的终结-李民骐

个人发展

基础

  1. 非暴力沟通-Marshall B.Rosenberg
  2. 把时间当朋友-李笑来
  3. 高效能人士的7个习惯-Stephen R.Covey
  4. 哈佛凌晨四点半-韦秀英
  5. Show And Tell-Dilys Evans
  6. 创新的艺术-Tom Kelley

启发

  1. Critical Thinking-Richard Paul 、Linda Elder
  2. 思考,快与慢-Daniel Kahneman
  3. 拆掉思维的墙-古典
  4. 影响力-Robert B. Cialdini
  5. 吸引力法则-Jack Canfield
  6. 把时间留给重要的事-Lothar Seiwert

进阶

  1. 创业维艰-Ben Horowitz
  2. Get Things Done-Brad Fregger
  3. 集体行动的逻辑-Mancur Lloyd Olson
  4. 行动改变生存-寇延丁
  5. 组织文化与领导力-Edgar H. Schein
  6. 怪诞行为学-Dan Ariely
  7. 卓有成效的管理者-Peter F. Drucker
  8. 从理想主义到经验主义-顾准

合作伙伴

恩派(NPI)

起步于2006年初,它以”助力社会创新,培育公益人才”为使命,致力于发掘培育那些处于创业期的草根社会组织。历时八年,现已发展成为国内规模最大、服务最全、影响最广的支持性公益组织之一。迄今为超过1000家民间公益机构提供了孵化或成长支持服务,培训公益人才近万人,为数千家公益机构筹措超过3亿元人民币的运作资金,承担运营约6万平方米的公益平台/社区服务中心。

Aha社会创新学院

中国社会创新与社会企业领域最重要的教育及研究机构之一,致力于帮助个人和组织掌握创新与创业的方法以更有效地解决社会问题。同时,Aha也是中国最早的社会创业加速器,为包括教育领域在内的社会创业机构提供创业辅导、创业者成长和社会投资连结等多方位支持,帮助他们将自己对社会问题的洞见发展成为一个成熟的解决方案,为世界带来可持续的改变。

关于ThoughtWorks P3 (社会公正事务)

ThoughtWorks的最高使命是服务于社会——P3(Pillar 3)作为公司三个核心支柱之一,是实现社会与经济公正这一使命的重要一步,但我们仍须不断努力将社会与经济公正议题融入到公司的日常运作和每个员工的工作中。P3在全球范围内积极倡导社会和经济公正。在中国区,ThoughtWorks致力于构建公正社会,并努力消除信息、知识与机遇的不平等障碍。

Share

2015.5 技术雷达 | 平台篇

   点击这里可以下载最新中文版本PDF

Apache Spark(spark.apache.org)作为一种快速和通用的大规模数据处理引擎已取得稳步进展。该引擎基于Scala实现,非常适合于那些在多并行操作之间重用数据工作集的应用程序。它即可以作为一个独立集群,也可以作为Hadoop的YARN集群的一部分来工作。它可以从不同的源来访问数据,比如 HDFS,Cassandra,S3 等。不仅如此,Spark还提供了许多更高级的操作符,以便简化数据并行应用程序的开发。作为一种通用的数据处理平台,它使许多更高级别的工具的开发成为可能,如交互式SQL(Spark SQL),实时流媒体(Spark Streaming),机器学习库(MLib),R-on-Spark等。

一段时间以来,Hadoop 社区一直在尝试把低延迟和交互式 SQL 查询能力带到Hadoop平台中(称为SQL-on-Hapdoop)。开源数据库引擎 Cloudera Impala,Apache Drill 和 Facebook的 Presto 都在2014年应运而生。我们认为,SQL-on-Hadoop 这一趋势标志着一个重要的转折,它将 Hadoop 的定位从与数据库互补的批处理,转变为某种可以与之竞争的技术。

Cloudera Impala(cloudera.com/content/cloudera/en/ products-and-services/cdh/impala.html)是早期的SQL-on-Hadoop 平台之一。它是一个基于C++的,支持大规模并行处理的分布式查询引擎。Impala 守护进程是这个平台的核心组件,其负责协调 Impala 集群中跨一个或多个节点间 SQL 查询的执行。 Impala 充分利用了 Hive 的元数据目录来共享两者的数据库和表。Impala 还提供了命令行工具以及 JDBC 和 ODBC 驱动程序供应用程序使用。

密码仍然是一种糟糕的用户认证机制。近来我们看到有公司(如Yahoo!)采用了“无密码”的解决方案——每当你需要从一个新的浏览器登录时,一个一次性验证码会被发送到你的手机来进行认证。如果你仍在使用密码认证,我们推荐您采用能够显著提高安全性的双阶段认证(two-factor authentication)机制。基于时间的一次性密码算法(TOTP)(en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm)是目前这个领域的标准,在 Google(play.google.com/store/apps/details?id=com.google.android.apps.authenticator2)和 Microsoft(windowsphone.com/en-us/store/app/authenticator/e7994dbc-2336- 4950-91ba-ca22d653759b)智能手机中都这样免费的认证应用。

Apache Kylin (kylin.io),是一个来自 eBay 公司的开源数据分析解决方案,它能够在超大数据集上进行基于 SQL 的多维度分析(OLAP)。Kylin 旨在构建一个基于 Hadoop 的混合 OLAP (HOLAP) 解决方案,最终将能够支持 MOLAP 和 ROLAP 风格的多维分析。你可以使用 Kylin 所提供的立方体设计器来定义立方体,并启动一个离线进程来构建它们。离线进程会进行一个预连接的步骤,将事实表和维度表连接到一个扁平化的结构中。下一个是预聚合阶段,各个单独的立方体被 Map Reduce 任务会构建出来。其结果被存储在 HDFS 序列文件中,之后被载入 HBase 。数据请求可以由基于 SQL 的工具提交 SQL 产生。查询引擎(基于 Apache Calcite)会决定目标数据集是否在 HBase 中存在。如果存在,该引擎会直接访问 HBase 中的目标数据,以次秒级延迟返回结果。如果目标数据集不存在,该引擎会将这些查询转向 Hive(或者是集群中任何其它可以用 SQL 查询 Hadoop 的方案)。

CoreCLR (github.com/dotnet/coreclr) 和 CoreFX (github.com/dotnet/corefx) 是 .NET 的核心平台和框架。虽然算不上是什么新闻,他们最近被微软开源了。一个主要的变化是这些依赖是基于二进制文件来部署的,不再需要事先安装在机器上。这使得并行部署变得容易,允许应用程序可以无冲突的使用不同版本的 .NET 框架。你可以安装 .NET 依赖到任何环境中,基于 .NET 编写代码成为了一个实现细节。从外部依赖的角度来看,一个用.NET实现的工具与用 C 语言编写的东西并没有什么不同,这就使它成为编写通用应用程序和工具的一个更有吸引力的选择。CoreFX 也已被分解为独立的 NuGet 依赖,从而使应用能够按需使用,这让 .NET 的应用和库占的空间的更小,并使得替换部分框架更加容易。

Heroku 用它的12要素应用模型改变了我们关于构建、部署、托管 Web 应用的方式。Deis (deis.io) 将 Heroku PaaS 模型封装到一个开源框架中,部署在可被托管在任何地方的 Docker 容器中。Deis 仍在进化当中,但对于那些符合12要素模型的应用来说,它具备大大简化部署,并在你自选的环境中进行托管的潜力。Deis 也已成为 Docker 周边丰富的平台和工具生态系统中的又一鲜活事例。

预测分析在越来越多的产品中被使用,而且通常出现在面向最终用户的功能上。H2O (docs.0xdata.com) 是一套非常有意思的新开源工具包(其背后是一家创业公司),因为其易用的用户界面设计,使得预测分析对项目组更可用。同时它还集成了数据科学家最喜欢的一些工具:R 和 Python 语言,以及 Hadoop 和 Spark。H2O提供了很高的性能,并且依我们的经验,非常易于在运行时集成,特别是在基于 Java 虚拟机的平台上。

当 Oracle 决定停止对 Sun 公司的 OpenSSO(一个开源的访问管理平台)进行开发时,ForgeRock 决定接管它并将它集成进他们的 Open Identity Suite 中。现在它被命名为 OpenAM (forgerock.com/ products/open-identity-stack/openam) ,成为了一个支撑 OpenID 连接和 SAML 2.0的可扩展的开放源码平台。不过,由于 OpenAM 历史悠久,导致它的代码库很庞大,并且文档也很难理解。希望在不久后,一个更轻量级的,对自动化部署和配置提供更好支持的替代方案将会出现。

Spark 是基于云的互联设备全栈解决方案,Spark Photon 是一个带 wifi 模块的微控制器,而 Spark electron 是连接到移动网络的变体。Spark 操作系统为这些设备添加了 REST API 服务。这套解决方案降低了进入物联网,并构建你自己的可连接设备的门槛。

时间序列数据库(TSDB)是一种针对时间序列数据的处理做了优化的系统。它允许用户对各种以时间序列组织起来的数据库对象进行 CRUD 操作。同时它还可以在整个序列上执行统计计算。虽然时间序列数据库不是一个新的技术,但是我们还是在这些数据库应用中看到了一些新的热点,尤其是在物联网应用领域。在许多开源和商业平台(比如OpenTSDB, InfluxDB, Druid, BlueFloodDB 等等)的促进下,时间序列数据库技术发展迅猛。另外还值得一提的是,其中一些数据库产品还使用了类似 Cassandra 和 HBase 的分布式数据库作为他们的底层存储引擎。

容器技术,PhoenixServer 以及持续交付的崛起已经开始让我们摆脱昔日部署 Web 应用的方式。传统方式是我们需要构建出应用工件,然后将工件安装到应用服务器中。这种方式会导致较长的反馈周期,构建时间的变长,以及在生产环境中管理这些应用服务器的开销变大。除此之外,这些应用服务器也很难做自动化。在与我们一同工作的很多团队中,开始倾向于将 HTTP 服务器嵌入到应用中。有很多可以选择的嵌入式服务器:Jetty, SimpleWeb, Webbit 和 Owin 等。更容易做自动化,更容易做部署,对基础设施的投入也会减少,因此我们推荐在未来的项目中使用嵌入式的应用服务器而不是传统的应用服务器。

Google 从2009年开发了一个实验性质的协议 SPDY (chromium.org/spdy/spdy-whitepaper),作为一个替代协议,它用于解决 HTTP/1.1中的一些性能短板。新的 HTTP/2 标准协议包含了很多 SPDY 中性能优化的关键特性,Google 已经宣布从2016年初就会停止在浏览器中支持 SPDY。因此,如果你的应用需要 SPDY 中的特性,我们推荐你去尝试 HTTP/2。

点击这里可以下载最新中文版本PDF

Share

2015.5 技术雷达 | 技术篇

点击这里可以下载最新中文版本PDF

2015-5 技术

当多个独立开发的服务通过 API 交互的时候,API 提供端的改动会让它所有的消费端调用失败。消费端服务通常也不会直接去连接处于开发中的提供端服务来进行测试,因为这样的测试是缓慢且脆弱的(martinfowler.com/articles/ nonDeterminism.html#RemoteServices),因此最好的方式是采用测试替身(martinfowler.com/bliki/TestDouble. html),但这又引出了测试替身和实际的 API 之间失去同步的风险。消费端的开发团队可以通过使用集成的合约测试(martinfowler.com/bliki/IntegrationContractTest.html)来保护自己——其比较真实服务的响应和测试替身之间的一致性。这样的合约测试是非常有价值的,而更有价值的方式是消费端把它们的测试提供给 API 提供端——采用消费端驱动的合约(martinfowler.com/articles/consumerDrivenContracts.html),提供端可以运行所有消费端所提供的测试来验证自己的修改是不是有可能引起问题。这种消费者驱动的合约测试(consumer-driven context test)是成熟的微服务测试策略(martinfowler.com/articles/microservice-testing/)中非常核心的组成部分。

当我们需要一张描述当前系统的基础设施或物理架构的图形时候,我们通常会选用自己最喜欢的工具来绘制。但是当你使用云或者其他虚拟化技术的时候,这种方式却不再适用。我们可以使用这些平台本身提供 API 去查询实际的基础架构环境,并使用一些简单的工具比如 GraphViz(graphviz.org),一些可以输出 SVG 格式的工具,生成实时的,自动化的基础架构图(automated infrastructure diagram)。

离线优先 Web 应用程序(Offline first web applications)提供了基于缓存和更新机制来设计 Web 应用离线访问的能力。它的实现需要在 DOM 中设定一个标志来检查接入设备是否在线,离线则访问本地存储,在线则同步数据。现在所有的主流浏览器都支持离线模式,通过显示的指定 HTML 属性来使本地信息可访问,同时启动如 HTML, CSS,Javascript 或其他资源的下载和缓存。当前已经有一些工具使离线优先应用的实现变的简单,如 Hoodie(hood.ie),CouchDB(couchdb.apache.org),不仅如此它们还提供与本地部署的本地存储应用的集成能力。

大多数软件开发的心智模型都是做项目,在不同的档期内进行计划、执行和交付。敏捷开发极大的挑战了这种模型,通过与开发过程同时进行的持续需求发现,代替了预先的需求确定。精益创业的技术,如观察需求的 A/B 测试(martinfowler.com/bliki/ObservedRequirement.html),进一步削弱了这种心态。我们认为,大多数的软件开发工作应该遵循精益企业的引领(info.thoughtworks.com/lean-enterprise-book.html),将自己定义为构建支持业务流程的产品。这样的产品并没有所谓的最终交付,更多的是一个探索如何更好的支持和优化业务流程的过程,只要业务依然有价值就会不断持续下去。基于这些理由,我们提倡企业组织依照产品而不是项目(products rather than projects)的思路进行思考。

当前大多数开发团队都意识到编写安全软件并以负责任的方式处理用户数据的重要性。他们确实面临着陡峭的学习曲线和大量的潜在威胁,其范围从有组织的犯罪和政府的间谍活动到仅仅是为“玩笑或激怒什么人”而攻击系统的年轻人。威胁建模(Thread modeling)(owasp.org/index.php/ Category:Threat_Modeling)是一组技术,主要从防御的角度出发,帮助理解和识别潜在的威胁。当把用户故事变为“邪恶用户故事”时,这样的做法可给予团队一个可控且高效的方法使他们的系统更加安全。

Flux(facebook.github.io/flux)是 Facebook 为其互联网应用开发所采用的一种应用架构。它通常与 react.js 一同被提及,Flux 基于一个单向数据流,用户或外部事件对数据存储的修改会触发数据在渲染管道中向上流动。已经有好一阵子我们都没有看到任何古老的model-view-*架构的替代者了,Flux 拥抱这种 Javascript 前端应用与多个后端服务通信的现代互联网时代。

当前,大部分开发人员习惯使用 git 来管理源代码以及协作。但是,git 还可以为其他一些情况提供基础的实现机制,比如当人们需要使用基于文本化的文档进行协作的时候(这些文档可以被很容易的合并)。通过使用基于文本的可编辑格式,我们已经看到越来越多的项目把 git(git-scm.com)作为一个轻量化的 CMS 来使用。Git 有很多强大的功能,通过使用分布式的存储模型,Git 可以支持对变化的跟踪以及寻找替代品。然而,难于大范围采用 Git 的最大原因是 git 对于非编程开发人员来说并不容易学习,而我们期望看到更多的构建在 git 核心之上的工具的出现。这类工具可以为一些特殊听众简化他们的工作流程,如作为内容的作者。我们也欢迎更多的工具支持对比和合并非文本文档。

凤凰服务器(martinfowler.com/bliki/ PhoenixServer.html)的想法现在已经被很好的建立并且在被应用到一些正确的问题上时带来了很多好处。而我们要部署的服务器所依赖的环境,如在某些情况下需要等待网络配置、负载均衡、防火墙端口等等情况,却已逐渐成为修改配置时的主要瓶颈和限制。凤凰环境的概念可以帮助这种情况。它允许我们可以用自动化的方式创建整个环境并保证定期销毁和重建整个环境的流程正确,例如在AWS上使用CloudFormation。凤凰环境可以支持为测试,开发,UAT等等配置一个全新的环境。它也可以简化对灾难恢复环境的配置。由于凤凰服务器的模式并不总是可行的,我们需要小心地对待诸如状态和依赖,在蓝绿部署中用它对环境配置进行重置可以成为一种方式。

函数式反应型编程在过去的几年渐渐开始流行起来,同时这个概念越来越多被延伸到在分布式系统架构中。根据反应型编程宣言(reactivemanifesto.org),反应型架构(reactive architectures)主要基于通过一个网络下独立进程间的单向,异步的不可变事件流(可能具体实现为微服务)。在正确设置下,基于这种架构的系统容易扩展,具有弹性,也会减小了各个独立处理单元间的耦合。但是完全基于异步消息传递的架构同时会引入相应的复杂度,并且常常会依赖于一些专有的框架。所以我们推荐在选择这种架构风格前首先了解自己系统对于性能以及可扩展性的需求。

对于安全,传统的方式依赖于前期的需求规格以及最后阶段的验证。这种“安全三明治”的方式很难应用于敏捷团队,因为大部分设计都贯穿于整个过程,而且也没有持续交付所提供的自动化便利。公司或者组织应着眼于如何在整个敏捷开发周期中注入安全实践。这包括:正确评估当前威胁模型的级别以做前期设计;考虑何时将安全问题划分为独立的故事、验收标准、或全局的非功能性需求;在构建流水线中引入静态或动态的自动化安全测试;考虑如何将更深层次的测试,如渗透测试,引入到持续交付的发布过程中。正如 DevOps 的出现使得过去相互博弈的团队能够重新合作一样,同样的事情也正发生在安全人员和开发人员身上。(尽管我们并不喜欢安全三明治模型,但这也比根本不考虑安全要好得多,糟糕的是,这依然是一种非常普遍的状况。)

 

点击这里可以下载最新中文版本PDF

Share

2015.5 技术雷达 | 工具篇

点击这里可以下载最新中文版本PDF

0

尽管依赖管理的概念并不新奇,在很多技术栈下它甚至已经被作为一种基础开发实践,但在 PHP 社区却并非如此。Composer(getcomposer.org)作为 PHP 技术栈下的依赖管理工具,深受其他技术栈下依赖管理工具的影响。例如, Node 的 npm 以及 Ruby 的 Bundler 等。现如今 Composer 已经被 PHP 项目广泛使用,并且其本身也日趋成熟。虽然在对内部库的管理上,Composor 还有待改进,但是对于大多数外部库的管理 Composor 已能够完全胜任。

在企业级应用中,对组件进行良好的测试至关重要,尤其是对于服务的分离和自动化部署这两个关系到微服务架构是否成功的关键因素,我们更需要更合适的工具对其进行测试。“服务虚拟化”这一行业术语,意指能够在组件化服务的场景下模拟特定组件的工具。Mountebank 显然取得了不错的成绩。它是一个轻量的测试工具,可以被用于对 HTTP、HTTPS、SMTP 和 TCP 进行模拟(Mock)和打桩(Stub)。

 

Postman(getpostman.com/features)是一个在 Chrome 中使用的 REST 客户端插件,通过 Postman,你可以创建请求并且分析服务器端返回的信息。这个工具在开发新的 API 或者实现对于已有 API 的客户端访问代码时非常有用。Postman 支持 OAuth1 和 OAuth2,并且对于返回的 JSON 和 XML 数据都会进行排版。通过使用 Postman,你可以查看你通过 Postman 之前发起过的请求,并且可以非常友好的编辑测试数据去测试 API 在不同请求下的返回。同时,虽然我们不鼓励录屏式的测试方法,但是 Postman 提供了一系列的拓展允许我们将它作为跑测试的工具。

 

Brighter(iancooper.github.io/Paramore/Brighter.html)是一个基于.Net的开源工具库,主要实现了命令调用模式。我们从正在使用它的一些团队中收到了很好的反馈,尤其在与端口模式、适配器模式和命令查询职责分离模式(CQRS)一起使用的时候。特别值得一提的是,它还可以很好地与 Polly(github.com/michael-wolfenden/Polly)集成并提供熔断器模式的支持。

 

支持 DNS 和基于 HTTP 发现机制的服务发现工具 Consul(consul.io)持续让我们印象深刻。它提供了定制化的注册服务健康检查并标记不健康实例的功能远胜于其他类似的工具。更多时兴的工具与Consul的集成使其功能更加强大。Consul Template (github.com/hashicorp/consultemplate) 可以直接使用Consul的信息来填充配置文件,使得像用mod_proxy进行客户端负载均衡更加容易。在使用Docker的场景里,有了registrator (github.com/gliderlabs/registrator) 的帮助,只需要很小的工作量就可以自动化地向Consul注册Docker容器,使得管理基于容器技术的配置更加容易。

在我们软件开发领域,盲目地假设网络总是可靠,服务器总是能够快速并正确的响应导致了许多失败的案例。Hamms (github.com/kevinburke/hamms)是一个有趣的开源工具,它可以模拟一个行为损坏的HTTP服务器,触发一系列的失败,包括连接失败,或者响应缓慢,或者畸形的响应。它可以帮助我们更优雅的测试我们的软件在处理异常时的反应。

我们的多个使用.NET技术栈的项目已经在推广使用Polly(github.com/michael-wolfenden/ Polly)来帮助我们构建基于微服务的系统。它鼓励使用基于流畅表达式的透明错误处理机制,以及包含了多种断路模式(Circuit Breaker Pattern),如重试,不断重试,稍后重试。在其他语言中已经存在类似的程序库,如Java中的Hystrix,而Polly是.NET家族的一个很好补充。

REST-assured(code.google.com/p/rest-assured)是一个用于测试和验证RESTful服务的Java DSL。它使得为基于HTTP的RESTful服务编写测试变得更加简单。REST-assured支持不同类型的REST请求,并且可以验证请求从API返回的结果。它同时提供了JSON校验机制,用于验证返回的JSON数据是符合预期的。

 

ZED Attack Proxy(ZAP)(owasp.org/index.php/ OWASP_Zed_Attack_Proxy_Project)是一个OWASP的项目,允许你以自动化的方式探测已有站点的安全漏洞。可以用来做定期的安全测试,或者集成到CD的Pipleline中提供一个持续的常规安全漏洞检测。使用ZAP这样的工具并不能替换掉对安全的仔细思考或者其他的系统测试,但是作为一个保证我们的系统更安全的工具,还是很值得添加到你的工具集里。

 

相对于通过发送同步点对点请求的方式修改状态,最近许多企业级软件开发都在致力于基于异步不变事件序列的架构演进。Apache Kafka是一个开源消息框架,它支持基于有序的发布消息到许多独立的轻量级的消费方的架构风格。Kafka的独特设计使它能够在保持消息顺序强相关的前提下动态增加消费方的数量 。

 

Blackbox(github.com/StackExchange/blackbox)是一个用于加密源代码仓库中特定文件的简单工具。如果你需要存储密码或者私钥的时候,这个工具特别实用。Blackbox 可以和 Git,Merurial 和 Subversion 结合使用,并使用 GPG 加密。每个用户拥有自己的密钥,使得细粒度级别的权限撤销变得很容易。这个领域正在发生很多变化,一些其他的工具也可以考虑包含进来,如 git-crypt Trousseau

 

在数据科学和分析的世界里,大部分工作都是使用 Python 和 R 来完成,但是这两个语言只为 Web 可访问的可视化图形绘制提供了有限的几个支持。一种做法是将分析的结果转换成为能够在浏览器里很容易呈现和交互的格式。我们知道有两个工具来尝试这样做。Bokeh 是一个可以让你创建像 D3.js 一样风格的交互式可视化的 Python 和 JavaScript 库,但是在处理大数据集或者流式的数据集时,具有更高的性能。Vega 是一种针对 D3 的声明式可视化语法,它接收服务器端生成的 JSON 数据并将可视化描述转化为 D3.js 的代码。

 

Gor是一个开源工具, 可以实时捕获线上HTTP请求,并在测试环境中重放这些HTTP请求,以帮助我们使用到这些产品环境数据来持续测试我们的系统。使用它之后可以大大提高我们在产品部署,配置修改或者基础架构变化时的信心。

 

NaCl (nacl.cr.yp.to) 库(读作‘Salt’)提供了关于加密,解密和数字签名的一系列的功能,使得实现安全的网络传输,或者满足其他密码学方面的需求变得简单。尽管有一些其他的工具库也能提供这些功能,NaCl 承诺提供更快的速度和更简单易用的 API。当前支持 C 和 C++ 的库,关于 Python 的封装正在进行中。

Origami (facebook.github.io/origami) 是一款免费的用户原型设计工具,其对常用功能提供了大量的快捷键操作。它为将原型设计导出为代码片段提供了可能性,支持的语言有:iOS开发上的Objective-C,Android开发上的Java,以及Web开发上的Javascript。该工具可以被用来快速构建面向用户的交互式原型和测试用户使用流程。根据从一些团队收集的使用经验来看,我们建议您在需要时对该工具进行考察。

 

Pdfmake是一个可以在浏览器里直接生成和打印PDF文档的JavaScript库。使用pdfmake,你可以创建一个支持表、列和富样式等结构元素的文档,再通过辅助方法创建并打印或者下载为不包含客户端JavaScript的PDF文件。

在我们的经验中,相比其他办法而言,通过在一开始创建大量详尽的设计图表来开发软件系统,并不是什么好的选择。但用图表来表达系统中格外复杂和难懂的部分却往往是个好的想法,何况UML本身也已经提供了若干实用的、众所周知的图表。我们喜欢用 PlantUML(plantuml.sourceforge.net)来创建这些图表,因为它让我们以清晰的文字形式来表达图表背后的意图,而不用再去摆弄那些“过度”的图形化工具。同时,文字形式的表达方式还支持版本管理,并且可以和源代码存放在一起。

SoundCloud最近开源了一个Graphite的替代品:Prometheus (prometheus.io)。SoundCloud在解决生产环境中使用Graphite所遇到的困难的过程中,开发了Prometheus,它的工作方式和Graphite不同,主要体现在其对基于HTTP的拉模型的支持上(尽管它也支持和Graphite更类似的推模型)。不仅如此,它还因为支持根据获取到的度量指标进行告警的功能而比Graphite更胜一筹,所以,在你的运维工具套件中他会变得更加活跃。尽管在生产监控领域采用新技术需要谨慎行之,但早前的报告亦显示,SoundCloud对其在生产环境使用Prometheus表示满意,而且Docker也已参与到该工具后续的开发工作中。

Quick是一个针对Swift和Objective-C的测试框架,它和用来做测试验证的Nimble捆绑发布。Quick主要用于Swift和Objective-c程序行为的验证。它和rspec和jasmine具有相同的语法风格,基础环境很容易建立。Quick良好的结构和类型断言使得测试异步程序更加容易。

 

Security Monkey 是 Netflix Simian Army 工具系统中的一员,设计这套工具的初衷是为了确保系统是以有弹性的方式构建的。它不仅提供了针对AWS设置进行可配置的潜在安全漏洞评估功能,还对正在使用的 AWS 设置的变更进行监控并及时通知相应的负责团队。早于 AWS 的 Trusted Advisor Report 和 Cloudtrail 可用之前开发出来的Security Monkey虽然提供的功能在某种程度上与他们有些重叠,但Security Monkey还提供了更多的功能。如果这些 AWS 的服务不太能够满足你的需求,Security Monkey值得一试。

 

点击这里可以下载最新中文版本PDF

Share

2015.5 技术雷达 | 语言和框架篇

2015-5 语言&框架

自从我们上一次在技术雷达中提到 Nancy (nancyfx.org) 之后,它已然成为了我们在项目上的默认选择。围绕着小而垂直切片的架构和微服务需要的仅仅是这样轻量级的部署选项和不拘小节的工具。

前端 Javascript 框架持续喷井所带来的一个好处是,时不时一个新的主意出现的时候,会引起我们的思考。React.js 是一个 UI/View 框架,在这个框架中,Javascript 函数在一个响应式的数据流中生成 HTML。我们已经见到几个小的项目成功的使用了 React.js,开发人员也被其干净的易组合的组件化方式所吸引。

Spring Boot (projects.spring.io/spring-boot) 能够让独立的基于 Spring 的应用。它非常适合启动新的微服务并且易于部署。它也通过更少的样板代码从而降低了数据访问Hibernate 映射所带来的痛苦。Spring Boot 简化了基于 Spring 的 Java 服务,这是我们所喜欢的,然而同时,我们也学会了一定要对很多依赖保持谨慎。毕竟,潜伏在表面之下的依然是 Spring。

虽然并不是所有的体验都是正面的,AngularJS 依然在 ThoughtWorks 的项目中被广泛的使用着。我们依然建议团队评估单页 Javascript 应用所带来的额外复杂度对于满足需求而言,是不是真的有必要。我们也推荐评估一些其他类似的框架,在这一版的雷达中我们提出 Ember.js,它在 ThoughtWorks 内部也逐渐变得流行。Ember 被人称道的是,它对于惯例胜于配置非常固执己见,并且有着响应迅速的核心开发团队,其性能不错并且有一套基于 ember-cli 的构建工具。

在众多 JavaScript 框架中,我们要强调 Flight.js(flightjs.github.io),Flight 是个用于构建组件的轻量级框架。它没有通过太多“神奇”的东西来为 DOM 节点添加行为。它的事件驱动和基于组件的特点,促使开发人员写出低耦合的代码。这也使得测试单个组件相对容易。然而,当组件需要彼此交互的时候还是需要格外注意。Flight.js 对测试的支持很少,并且容易卷入事件漩涡。 继承与组合,我们喜欢组合,与之类似,我们非常喜欢 Flight.js 用混入的方式处理行为。

经过一些我们在真实世界中的经验,Swift(developer.apple.com/swift)仍然表现出非常好的前景。有些问题,如过长的编译时间,已经得到了解决。然而,持续的语言的变化会导致额外的开发工作,并使得构建你自己老版本的软件非常繁琐。测试和重构也依然痛苦。总之,虽然如此,在为苹果生态圈开发新项目的时候你还是应该考虑使用 Swift。

 

点击这里可以下载最新中文版本PDF

Share