OpenParty "梅雪映春"

| 1 Comment
OpenParty "梅雪映春"的准备时间只有7天,却出现了众多水准远超预期,令人惊喜的精彩话题。这还要感谢各位热心的话题贡献者,以及抽出宝贵时间来参加活动的诸位朋友。下面简单记录一下自己现场参与的两个话题。

首先开始的是钱钱带来的《如果做好演讲》。这个话题主要面向对外演讲的技术人员,介绍如何使演讲内容更具吸引力,更易被接受。

做好充足的准备:对外进行的演讲和培训都要在内部先讲上两到三遍。

对于演讲者来说,需要注意的方面:
  • 演讲内容,选择自己擅长的东西
  • 知己知彼,了解参与者的基本情况,他们对于演讲或培训内容的期望(可以直接提问)
  • 不要依赖讲稿,生动的语言可以给听众留下深刻的印象
  • 分享过后将内容总结成脑图,养成良好的知识整理习惯
  • 准备事项Checklist
  • 踩点 - 准时到达会场,尽力避免意外因素
演讲过程中
  • 设计一个足够吸引注意力的开场白
  • 三个要点:
    • 向观众呈现演讲稿梗概
    • 把观众的注意力从幻灯拉回到演讲者身上
    • 用尽浑身解数开始讲故事
  • 忘掉讲稿,一个演讲者首要的任务是讲故事
关于现场氛围的环节

"危机处理"的几种通常方法:
  • 提问 - 引发听众的思考
  • 停顿 - 适当的停顿可以帮助听众理清思路
  • 调侃 - 把严肃的事情换一种方式表达
紧张心理:不要去试图克服,任何人演讲都会紧张,这是一个正常的生理反应。需要让这种反应对演讲起到帮助
  • 不要吃太多肉,适量进食最佳
  • 准备小抄卡片(用到的机会不多但有心理安慰作用);其它工具的辅助,比如Keynote的查看下一页功能
  • 精神胜利法 - 心理暗示
  • 太空漫步法 - 走动一下有助于大脑思考
上面那些技巧,可以帮助你将演讲做得更好 ,却不是让演讲成功的最重要因素。

让演讲成功的两个最重要因素是:
  • Idea, 清晰的、结构化的、内容丰富的信息。
  • 打开那扇门:一次成功的培训和演讲经验,可以帮助演讲者建立感觉和信心
推荐的书籍:

话题结束以后,现场有一位参与者补充分享了一些关于演讲的经验,我认为很有价值,也进行了简要记录。

不用麦克风会有更好的效果:声音可以直达观众耳中。观众听到不自然放大的声音时会产生逃避感,不使用麦克风可以减少距离感,使听众更加认真聆听。实践证明,即使在能容纳500人的会场,通过特殊的发声训练,可以做到不用麦克风进行演讲。

演讲的本质是对话。台下的听众虽然不说话,却是用聆听的形式和演讲者进行交流。所以演讲过程中足够的目光交流很重要。
在偌大的会场上如何更加吸引观众的注意?丰富的肢体动作。思考下戏剧中的演员,在小小的舞台上需要通过鲜艳的装扮以及夸张的肢体语言来放大自己,演讲也是如此。

如何面对现场观众突如其来的挑战?遇到挑战很正常,此时需要演讲者相对强势一些、对自己有足够的信心并建立气场。演讲者应该是控制全场的人,在气势上要压倒对方。演讲时全体听众是演讲者一方的支持者,心理上对于莫名其妙出来挑战的观众并没有好感。


另一个话题是ThoughtWorks徐昊带来的《8小时用HTML5打造VNCViewer》。这个分享非常精彩,其实现过程中的思考方式、使用的新技术都让人有醍醐灌顶的感觉。以下的记录由现场的笔记总结而来,比较粗略,难免有失误,还望大家指正。

由于HTML5具备Canvas, WebSocket,所以萌生了使用HTML5来打造一个VNCViewer的想法。同时为这个项目设定目标:在12小时之内完成。

HTML5的定义

在HTML5之前,HTML这个概念仅指代用以描述数据的语意化文档标签。之前的W3C始终将HTML定位为单纯定义数据的标准,有意淡化BOM(Browser Objective Model)对象。而从HTML5开始,第一次将HTML的概念扩展到HTML+CSS3+JS的集合。在原先的数据表现上添加了一些新的语意化标签如<header>, <footer>等,但BOM的增强更令人兴奋:引入Canvas, WebSQL, WebSocket(在频繁交互的网络应用中节约大量资源), PostMessage(在不同页面之间传递数据)等对象为实现更多种应用提供了可能。

个人项目也要按照标准的项目流程做计划:进行任务分解。有任务分解列表的同时,也要有项目的风险列表。考虑到一些通常的项目风险,比如:一旦协议太复杂以致于不能用很短的时间了解,就会影响项目实现。

首先需要了解VNC协议,任务预计需要两小时。发现VNC的工作原理并不复杂:服务器和客户端经过握手确定协议版本、所支持的编码方式等,随后开始通信,传输屏幕上的显示内容。显示内容传输时支持不同编码方式,协议本身可以扩展以支持更多种编码方式。VNC的协议有43页(链接),1小时阅读完毕。其中主要包括两大部分,显示和接受输入。出于应用需要,不考虑输入部分的实现。

此时任务列表更新为:
  • 建立连接
  • 服务器与客户端间进行握手
  • 开始传送数据
使用HTML5的WebSocket建立连接时,发现WebSocket要求需要HTTP协议才能建立连接;同时建立长连接还需要如下步骤:HTML5端会发送一个请求,询问服务器是否能将协议升级成为WS/WSS协议,服务器需回复确认。但VNC服务器诞生较早,不支持升级协议这个约定。有两种解决方法:自己实现一个VNC Server,或者写一个Proxy来解决问题。因为自己实现VNC Server成本太高,不可能在时间限制内完成,所以选择了写Proxy的方案。
Proxy使用node.js , 一个运行在服务器端的JavaScript框架来完成。起初选用的原因主要还是个人的兴趣,接下来可以看到,最终这个框架拯救了整个项目。这个Proxy只用了10行JavaScript,使服务器和客户端的两个TCP流对接上即可。

服务器端代理部分耗时45分钟

接下来面临的是编码问题,VNC使用底层数据编码,而HTML端是相对高层的数据编码方式,这里通过node.js实现统一;服务器建立连接需要认证,VNC的认证机制使用DES加密。在网上寻找JavaScript DES库的时候,发现能找到的三个库均不能正常工作。不得已自己实现了JavaScript的DES库,耗费了不少时间。此时5个小时过去了,服务器端和客户端已经可以正确连接。

接下来解决显示的问题

Canvas有一个绘制函数几乎可以原生支持VNC的Raw编码方式,于是直接使用这个方法实现。测试时发现基本不能正常使用:由于数据传输量非常大,客户端的性能完全不能满足需求,画图速度太慢,占用资源过高。

6个小时过去了

考虑在信息传输方式上做优化,传递每个像素数据的Raw编码方式所需数据量过大。同时实验中发现不同VNC服务器发送信息的行为不太一样:苹果的服务器按照行的方式发送屏幕显示数据,而某个版本Linux中则是直接把屏幕分为四个区域来处理显示更新。按照区块刷新的编码方式进行了测试,发现并不能解决问题:画面后面的帧显示比原先略快但仍不可用,并且显示第一帧画面的速度非常慢。

解决传输数据量的问题,需要从传输协议上入手。VNC协议默认有5种Encode方式,分别是:
  • 全屏更新
  • 区域刷新
  • Hextile(将屏幕分成16x16的诸多小块来进行刷新,详解
  • zlib 将raw的数据进行压缩然后再传输
  • hextile+zlib,将Hextile格式的数据进行压缩再传输
参考一些资料,均推荐使用zlib方式对数据进行压缩处理,可以节省带宽、提高速度(未经压缩的画面一帧的流量是4.3M)。此时需要一个JavaScript的zlib实现来进行解码工作。发现没有这样的库...... 此路不通。

能否使用HTML5的Worker进行后期处理?查阅文档发现Worker进程不能直接访问DOM对象,所以不能在Canvas上面进行绘画。而且传递大数据量时速度很慢。简单地说这个功能适用于计算密集的任务,但不适合这种数据密集的任务。

最后解决问题的关键功能,是一个比较陈旧、平时几乎不再使用的浏览器功能 - DataURI Encoding。即把资源经由Base64编码后直接显示在页面中。这里面最重要的突破在于:从最终目的中思考,用户最终的目的是什么?所需的VNC解码内容和哪些浏览器支持的原生信息格式最为接近?
首先想到的答案是视频,但是发现如果使用HTML5的<video>标签需要把VNC流转换为视频格式。这个工作太复杂,几乎无法完成。
如果不能作为视频来处理的话,那么作为图片显示的方式是否可行呢?把VNC的数据流转化为图片,浏览器即可通过硬件加速来显示图片。将VNC流转换成相应的图片格式在客户端进行太复杂,同时非常消耗资源。这时之前在服务器端选用的node.js技术发挥了重要作用。在VNC服务器端编写了一个新的VNC编码方式,可以直接将VNC的数据流以JPEG的方式进行编码(解决了传输数据量的问题),然后在服务器的node.js端对数据流进行解码,直接向浏览器传回通过Base64编码的JPEG图片,即可做到以很低的延迟显示VNC服务器的内容。

至此,整个项目完成,共耗时8小时23分钟

OpenParty "琴瑟和鸣"

| No Comments
2010年11月份的OpenParty "琴瑟和鸣"活动话题众多,热情的分享者们带来了不少精彩的话题。从哈佛大学的《幸福课》体会分享到Web安全架构,从PHP框架开发到西班牙弗拉明戈舞蹈,话题依然保持着多元化的特性。关于活动的详细信息欢迎大家访问OpenParty网站。在此简要记录一下自己参与的两个话题的信息。

首先是由张韡武带来的西班牙国粹艺术-弗拉明戈的介绍。

这个介绍中首先讲解了什么是美、以及舞蹈艺术是人们发自内心想要表现美的一种形式。18世纪下半页弗拉明戈发源于西班牙南部的安达卢西亚。在起源之后,主讲人继续介绍了弗拉明戈的发展与传承,以及与其它艺术形式,如书法等的共通性。弗拉明戈一个显著的特征在于,它更多是由艺术家出于表达的内心情感而被创造,而非达到某种即成的"美的标准",迎合某种潮流或观众的需求。这使得弗拉明戈的气质更加个性化,也更加鲜活。

印象最深的是在话题的最后,应邀而来的弗拉明戈舞蹈家现场即兴表演后的一句话:弗拉明戈是一种舞蹈,也是提倡热爱生活,以积极的情绪面对生活的一种态度。

这个话题的细节内容很多,同时还有很多的视频欣赏,感兴趣的朋友请移步这里查看视频。

---

接下来是Tin带来的《爬虫点滴-实现搜索用Spider的一些细枝末节》话题。

首先Tin讲述了下自己进入研究爬虫这个领域的体会。了解些搜索引擎的基本知识,同时在没有经验的情况下,看看社区的项目是怎样做的。没有公开的相关知识,请教下身边的朋友怎样做,从而了解这个领域可能遇到的问题和风险。随后自己动手,开始做一些简单的原型。全网爬虫最简单的Python实现只需不到100行代码。待这个原型运行起来后,就会开始碰到一些问题。此时就要求助于相关的论文。参考论文以改进对自己系统的设计,使其逐渐完善成形。下一个步骤是监控,搜索引擎爬虫作为一个无人看守的系统,需要有很多指标来检测整个系统的运行情况。这些指标也同样反应了这个爬虫的质量。经过1-2个月的运行,通常都会遇到性能和存储上的问题(开始应用分布式存储,做好容量预测),解决这些问题在依靠查看论文、学习前人经验的同时,还要自己进行大量的实践。通过重复这个流程,建立各种指标来完善系统,是一个持续的过程。

爬虫分为两个大类:

全网抓取
  • 最大的问题是存储容量
  • 去噪(过滤掉各种不需要的信息)
  • 任务调度(面对近乎无限的互联网,用有限的抓取资源,最大程度地获取有价值的信息)

小而专的垂直抓取
  • 主要工作在于解析一个特定领域的信息
  • 对这些信息进行识别
  • 关键在于把重复的劳动变成流程、使其模版化

全网抓取的构成(搜索引擎技术基本要素)四个部分
  • 抓取
  • 内容处理
  • 倒排索引
  • 搜索前端

抓取工作需要解决的一些问题:
  • 归一化(去掉重复文本)
  • 锚/文字链接处理
  • 页面优先级处理、权重处理
  • 新鲜度控制
  • 礼貌度
  • 死链和检测
  • 吞吐量:1个CPU的机器,也可以吃满百兆带宽

正文提取:只索引有意义的部分
对于搜索引擎应用来说,分词非常重要
相关度(相关度词汇语意库)

全网抓取问题
  • 必须使用分布式存储,因为传统的数据库在运转两个月以后都会无法负担
  • 排链接
  • 看论文,不同的实现方法

垂直抓取技术的实践
  • 先对网页进行Tidy
  • 用CSS-Selector进行语义识别和抓取
  • 可以使用Proxy来抓取

No-SQL数据库与爬虫原生相关

H-Base
  • 需要SA介入
  • 是BigTable实现

实践Cassandra并最终放弃
  • 是Dynamo实现
  • 难以实现锁
  • 稳定性成问题
  • 节点挂得多,存不进数据
  • 要考虑可用性、分区容忍性,可移植性

Google Caffine
  • 在数据库实现了事务和Trigger
  • 爬虫使用多线程
  • 尽量少考虑异步实现(异步很难调试)
  • 锁/timestamp 都是基础服务(flickr用mysql 一张表一个字段实现了timestamp)

其它的一些体会
  • Microformat很重要
  • Web应该开放

OpenParty "玲珑秋月"

| No Comments
2010年10月份的OpenParty "玲珑秋月" 活动在经过了九月份的休整以后,携着跨越了艺术、技术、旅行等领域的话题归来,关于活动的详细信息欢迎大家访问OpenParty网站来了解。在此简要记录一下自己参与的几个话题的信息。

首先到是王海磊带来的"Code Generated Art"话题。这个话题是我个人期待已久的融合了计算机技术及艺术的话题。演讲者王海磊对于自己的描述是"一个艺术家,设计师和计算机程序员,现在在致力于通过计算机技术来创造新媒体艺术"。下面我简要描述一下自己在这个话题中感受最深的部分。希望能帮助大家对于新媒体艺术有一些简要的了解。

计算机与互联网已经影响了人类社会的每个方面,为什么不能影响艺术呢?由于对于艺术的追求以及对于计算机技术的喜爱,最终这个方向成为王海磊的职业发展方向。

大家可能已经见过很多计算机生成的漂亮的分形画面,其中可能很简单就可以得到十分美丽的画面,那这些画面都是艺术品么?单纯美丽的画面并不是艺术品,艺术品的一个先决条件是创作者在创作伊始,通过一个可能的故事和线索,引起的一种触动,甚至是深入哲学层次的思考来决定的。

用计算机代码生成的艺术通常被称作 Generative Art,程序可以用来做我们从来没有想过的事情,而不仅仅是我们日常使用计算机去做的那些事情。

计算机程序只是工具,它并不创造艺术。整个"生成艺术品"的创造过程可以描述为:有一个灵感来触动你,有一个想法,把自己想要的东西以计算机语言的方式呈现出来,然后计算机语言操作计算机来产生图像。

一个"生成艺术"的计算机程序可以产生很多图片,从成百上千张中选出几个满意的不是一个轻松的过程;其挑选标准是能恰如其分地表达作品的目的,如果这些图像都不能达到目标效果,那么就修改程序,反复这个过程。

程序员朋友们可能感兴趣的是:需要通过什么工具来完成这些艺术品,其中使用到的工具包括:NodeBox, Processing, Python, Ruby, Objective-C,其实工具并不是最重要的,就生成作品这个需求来说,在Photoshop里面写脚本也可以做到相同的效果。

作品展示:
  • "等高线图"  - 展现地理信息数据里的简洁有效的抽象美。
  • "盲文排列"  - "眼睛",主题:盲文就是盲人的眼睛
  • "天目" -  由500万条线构成,为了达到这种质感,实验了很久
  • "女书"

前一阵在北京还举办了新媒体艺术展,并且参展"艺术北京2010"----中国最高等级的现代艺术展,说明Generative Arts这种艺术形式已经得到了现代艺术界认可。

对这个话题有着更多兴趣的朋友,欢迎访问王海磊参与的缘分新媒体艺术空间网站

---

我自己带来的"尼罗河背包记"话题,则吸引了很多对于旅游和埃及感兴趣的朋友。

这次出门旅行,最让我感到震撼的,并不完全是旅途中壮丽的景色和遗迹──的确,阿布辛贝神庙和金字塔带来的是跨越数千年的震撼,但是最深刻的体验却是旅途中遇到的人和事,那些来自不同国家的年轻旅行者的所见所想使得世界不再仅仅只是停留在地球仪上的概念,而是身边可以感受和了解的实在。

从去年的旅行话题分享经验看来,我一直在重新思考旅行话题分享的意义。分享话题的意义何在?"向他人表达我去过这里"?这样的意义根本就不重要,因为无论去过多少地方、有过怎么样的境遇,这些都将变得不再重要,原因是它们已经不再是单独的故事,而是化作了旅行者不可分割的一部分;在他人看来波澜壮阔的冒险旅程,可能只是旅行者认为最不起眼的部分,而那些真正让旅行者震颤、感动、赋予了整个旅行以意义的东西,却不能非常简单地用任何文字或者书面的形式来加以表达,唯有亲身体验方能感受。所以,旅行游记的最根本价值,正如我以前所说过的那样,依然是激励着更多人上路,去观察并探索外面的世界,这个世界是广阔的,但除非你亲自去探索和发现它,否则这概念上的广阔并没有太多的实际意义。

此次演讲中的slides已经上传到OpenParty网站,大家可以在这个"尼罗河背包记"页面上看到;这次旅行途中的一些照片,我已经在我的豆瓣相册上传,欢迎感兴趣的朋友前往察看。同上次旅程一样,关于这次旅行路上的详细见闻,也会在将来在这里的旅行文章连载中出现,敬请期待。

---

"从0到30万,我做liageren.com这一年"这个话题是由俩个人网站的创始人刘文举(Dave)带来的创业话题,其中讲述了很多创业之中的故事和乐趣,也有着对于很多创业者至关重要的经验。

在最早萌生了"为情侣使用的网站"这个idea之后,Dave就自己尝试去做,同时自己也是网站的最初用户。后来毅然辞职,将这个网站作为事业来进行。期间也经历了用户增多的喜悦以及资金不足的困境,现在俩个人已经是相同领域网站中的佼佼者。

网站的几次转型,其中有不太成功的尝试,如策划了面向单身用户的交友功能,但是发现所取得的效果并不十分理想:有类似功能的网站很多,并不能突出自身的特色,相反,俩个人一直以来作为一个专为情侣设计的网站,突然加入的单身功能也让已有的用户感到十分困惑。后来就逐渐淡化了单身用户的功能。从中得到的经验教训是,要始终坚持提高网站的辨识度。

尽早尝试盈利,不要过分依赖投资。现金流就是创业者流淌的血液,这是创业中至关重要的一环。俩个人尝试通过为收费用户提供vip服务的方法,很早就开始了在盈利模式上的努力,并且效果不错。

刘文举的话题中,我个人认为最具有价值的一个部分就是"如果创业可以重来",这部分中列举了在创业中经历的很多经历和故事,以及如果能够将这个过程重新来一次,作为一个有经验的创业者会避免的问题。这部分列举的很多要点,都是来自亲身体验,如"不要试图满足所有的用户;开发者和真实用户的距离有一光年;用户不在乎你的技术",这些没有体验就不会感受到的真知灼见,对于创业者来说是很有价值的。

我的记录只覆盖了这个话题的一小部分,感兴趣的朋友可以在这里察看Dave的幻灯简介。

Find recent content on the main index or look in the archives to find all content.

OpenID accepted here Learn more about OpenID