5页PPT

by 老姜 2012.3.23 13:20

编者按:本文编译自TechCrunch原文《365 Days, $10 Million, 3 Rounds, 2 Companies, All With 5 Magic Slides》,由SocialCast创始人Tim Young撰写。文中讲述了他如何在一年内凭借5张幻灯片,通过3轮融资,为SocialCastabout.me获得$1000万风险投资的传奇。(本文由@claireleely编译投递)

一年内说服风投投资两个创业公司不是一件容易的事,其中的艰辛只有Tim Young知道,从中他领悟到融资过程中的许多注意事项,尤其是在与风投的首次接洽时。下面跟大家分享一下:

首次会面尽量避免使用投影仪

大多数风投在会议室中接待创业者。一般Young会带上自己的笔记本电脑和视频转接器。有一次拜访一家著名基金公司,Young忘记带视频转接器。此时,为了避免尴尬和麻烦,Young决定改变策略,直接用笔记本电脑向投资人演示幻灯片,当然这种情况仅适用于与2人以下的投资人会面时。结果证明笔记本演示的效果非常不错,而Young 也揽得一张风投协议。Young分析其原因在于当创业者与投资人一起聚集在笔记本面前时,彼此距离拉得更近,相对于距离较远的会议室模式,氛围更加融洽,更令人放松。

了解每个投资人的立场

每个投资人在了解创业公司时都有各自的出发点:有的人更关注产品或服务,有的人更注重财务,有的人一开始则更看重团队。创业者要先对自己的出发点有非常准确的认知,才能找到合适的投资人。你更愿意与自己出发点相似的投资人合作,还是更愿意与自己互补的投资人合作呢?在与会面之前,创业者应该对投资人的背景有一定了解。创业者可以通过投资人的工作经验来了解他们:他们之前是负责销售还是产品?他们整个职业生涯都是风投吗?从他们的工作经验你可以推测出每个人的思考方法和在企业建设中的专长。

首次会面中的幻灯片

与投资人的首次会面通常持续30分钟至1个小时,时间非常宝贵。为了给投资人留出足够的时间提出他们关心的问题,创业者一定要确保用简洁有力的陈述向投资人展示你的公司,激发起他们的兴趣,然后才能进入下一步。演讲者应当尽量避免在介绍的过程中陷入讨论或者技术性漏洞。

Young采取了非常极端的做法,他将所有的内容囊括在5张幻灯片中。他典型的开场白是:

“我用简短的5张幻灯片清晰地勾勒出我们的业务框架,跟各位分享一下”

做出这样的陈述之后,Young立刻注意到投资人表现得十分感兴趣。接下来就是这5张神奇的幻灯片,它们介绍了创业公司的愿景、策略、价值观和潜力。

神奇的五张幻灯片:

 

幻灯片0封面 – 加公司Logo和日期

 

幻灯片1:公司简介

简要介绍公司的主要成员,包括:创始人(Founder)、投资人(Investors包括天使投资人、亲戚朋友等),主要员工(Key Employees),顾问(Advisors),财务(Financial包括已获得投资额和目前融资额),技术(Technology使用什么语言平台等?- 不必赘述),客户(Customers包括主要客户,活跃用户数等)

 

幻灯片2:数据

公司的数据状况,收入状况(净收入,目前每月支出等)

 

幻灯片3:时间表(即黄金页)

这张幻灯片是最有价值的一页,也是要花费许多精力的一页。Young所知道的另外5家创业公司使用了这张模式的幻灯片,在过去半年中他们都已经成功筹集到资本。这是整个演示中的精华篇章!在这里你建立起趋势模型,向投资人传达你所知道的未来,然后立即通过产品演示向投资人展示你所描述的未来,这将构成非常有力的陈述。Young用下面的幻灯片向投资人展示了活动流(Activity Stream)的兴起。

(译者注:活动流(Activity Stream)有时也称为生活日志(Lifestream), 是某个人在一个特定网站上的所有活动的信息集合。随着 Web 用户越来越依赖于活动流来获取信息,能够发布和订阅活动流数据变得很重要。但是因为 RSS 和 Atom 不支持社交元数据,所以需要一种新的格式来发布社交活动。目前Facebook, MySpace, Google Buzz等都采用了Activity Stream格式)

 

空白幻灯片:产品展示

在向投资人演示过程中Young经常会碰到一个问题:每当他要陈述自己的观点时,总有人试图回去讨论当前或之前幻灯片的内容。碰到二次这种情形以后,Young设计出这张空白幻灯片。空白幻灯片一般会插在Young想要陈述一个重要观点或者演示过度的时候。空白幻灯片出现时,所有人关注的焦点就都回到陈述人身上了。同时Young也提示不要过多使用空白幻灯片(它们的存在只是为了产生戏剧性效果)。Young使用了下面这张空白幻灯片过度到一个简短的产品展示。

(Young在幻灯片中提醒大家一定要排练,他使用ScreenFlow排练了150次)

 

幻灯片4:项目投资的吸引力/客户概览

 

幻灯片5:我们的方向

 

首先列出公司当前最重要的3个目标方向,同时要说明投资人在其中能起到什么作用。

 

辅助性幻灯片

 

除了上面的5张幻灯片以外,Young还准备了约40张辅助性幻灯片。这些幻灯片在与投资人的首次见面中一般不会用到,但是它们对之后的会面会很有帮助。当讨论过程中涉及到更深层次的背景知识时,这些辅助性幻灯片就会派上用场。Young的辅助幻灯片的内容可分为以下几部分:

* 每个团队成员的详细背景介绍

* 产生价值定位的现有用户群研究

* 用户获取策略

* 深层次技术概述

* 目标客户群特征

* 市场大小和机遇

 

幻灯片注意事项

 

1. 头像。在幻灯片中一定要使用公司成员的头像,不要只列出一堆人的名字。投资人很看重团队,所以要把每个人展示给投资人,加深印象。

2. 尽量简单,少用文字。Young总是努力让每张幻灯片只包含一点重要信息。如果文字太多,投资人就会各自低头看手机去了。

3. 确保你的幻灯片能讲个好故事。你的产品和团队都很出色,但重要的是你要让投资人跟你一起分享并加入到这个精彩的故事中。

4. 不要读幻灯片。潜在的投资人需要了解你,看你怎样推销自己的愿景。读幻灯片只能让路演了无生趣。

5. 幻灯片提供的只是辅助性数据,你所说的才是最重要的。

6. 最重要的一点是要有眼神交流。用眼神交流来推销你的愿景、激情和热情,最重要的是用眼神与投资人分享你的旅程。

文中幻灯片PDF版下载: Magic 5 Slide Deck PDF

本文链接地址:http://www.techcrunchchina.com/6334
来自TechCrunch中文站。

Tags:

提取m4v视频文件中的字幕

by 老姜 2012.2.28 14:05

m4v文件中可以内置软字幕,如何提取呢?

找到一个名叫Annotation Edit的软件(目前只有Mac版),可以提取m4v文件中的cc字幕。但是,免费版只能看,不能导出,只有收费版才能导出字幕文件。不过还是可以曲线救国的。

开启应用,选择 Import QuickTime Captions…

command+A 选择所有字幕行,右键选择 Merge selected entries.

在右上区域就得到了所有字幕,只是缺少了时间轴信息,但这样更容易格式化处理。

将得到的字幕文本复制到一个文本文件,使用Vim就可以很方便地将其格式化成易读的文本。到此就大功告成了。

Tags: ,

iOS

如何下载multiupload上的文件

by 老姜 2012.2.3 07:57

解決不能******multiupload

首先登入http://tools.half-moon.org/multiupload/,將下載地址輸入,送出自動解析出MU UP RS FS HF等下載地址
http://tools.half-moon.org/multiupload 該地址不需要代理

Tags:

程序员技术练级攻略【转】

by 老姜 2012.2.1 17:36

6月9日发表了《写给即将入行的程序员的一封信》,翻译自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来了一些他的心得和经历,我在把他的心得做了不多的增改,并根据我的经历增加了“进阶”一节。这是一篇由新手和我这个老家伙根据我们的经历完成的文章

  我的这个朋友把这篇文章取名叫Build Your Programming Technical Skills,我实在不知道用中文怎么翻译,但我在写的过程中,我觉得这很像一个打网游做任务升级的一个过程,所以取名叫“技术练级攻略”,题目有点大,呵呵,这个标题纯粹是为了好玩这里仅仅是在分享Mailper和我个人的学习经历。(注:省去了我作为一个初学者曾经学习过的一些技术(今天明显过时了),如:Delphi/Power builder,也省去了我学过的一些我觉得没意思的技术Lotus Notes/ActiveX/COM/ADO/ATL/.NET ……)

  前言

  你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)

  建议:

  • 不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。
  • 回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
  • 一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。
  • 一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。

  :你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下:

  • 现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。
  • 越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。
  • 微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史

  所以,我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。

  启蒙入门

  1、学习一门脚本语言,例如Python/Ruby

  可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:

  • 处理文本文件,或者csv(关键词 python csv, python open, python sys)读一个本地文件,逐行处理(例如word count,或者处理log)
  • 遍历本地文件系统(sys, os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果
  • 跟数据库打交道(python sqlite),写一个小脚本统计数据库里条目数量
  • 学会用各种print之类简单粗暴的方式进行调试
  • 学会用Google (phrase, domain, use reader to follow tech blogs)

  为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。

  2、用熟一种程序员的编辑器(不是IDE)和一些基本工具

  • Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。
  • Source Insight (或 ctag)

  使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。

  3、熟悉Unix/Linux Shell和常见的命令行

  • 如果你用windows,至少学会用虚拟机里的linux,vmware player是免费的,装个Ubuntu吧
  • 一定要少用少用图形界面。
  • 学会使用man来查看帮助
  • 文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
  • 学会使用一些文本操作命令 sed/awk/grep/tail/less/more …
  • 学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…
  • 了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息
  • 了解正则表达式,使用正则表达式来查找文件。

  对于程序员来说Unix/Linux比Windows简单多了。(参看我四年前CSDN的博文《其实Unix很简单》)学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。

  4、学习Web基础(HTML/CSS/JS)+服务器端技术(LAMP)

  未来必然是Web的世界,学习Web基础的最佳网站是W3School

  • 学习HTML基本语法
  • 学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)
  • 学会用 Firefox + Firebug 或 Chrome 查看你觉得很炫的网页结构,并动态修改。
  • 学习使用Javascript操纵HTML元件。理解DOM和动态网页(http://oreilly.com/catalog/9780596527402)网上有免费的章节,足够用了。或参看 DOM 。
  • 学会用 Firefox + Firebug 或 Chrome 调试 Javascript 代码(设置断点,查看变量,性能,控制台等)
  • 在一台机器上配置ApacheNginx
  • 学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。
  • 把PHP连接本地或者远程数据库 MySQL(MySQL 和 SQL现学现用够了)
  • 跟完一个名校的网络编程课程(例如:http://www.stanford.edu/~ouster/cgi-bin/cs142-fall10/index.php )不要觉得需要多于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定可以跟上
  • 学习一个Javascript库(例如jQuery或ExtJS)+ Ajax(异步读入一个服务器端图片或者数据库内容)+ JSON数据格式。
  • HTTP: The Definite Guide 读完前4章你就明白你每天上网用浏览器的时候发生的事情了(proxy, gateway, browsers)
  • 做个小网站(例如:一个小的留言板,支持用户登录,Cookie/Session,增、删、改、查,上传图片附件,分页显示)
  • 买个域名,租个空间,做个自己的网站。

  进阶加深

  1、 C语言和操作系统调用

  • 重新学C语言,理解指针和内存模型,用C语言实现一下各种经典的算法和数据结构。推荐《计算机程序设计艺术》、《算法导论》和《编程珠玑》。
  • 学习(麻省理工免费课程)计算机科学和编程导论
  • 学习(麻省理工免费课程)C语言内存管理
  • 学习Unix/Linux系统调用(Unix高级环境编程),了解系统层面的东西。
    • 用这些系统知识操作一下文件系统,用户(实现一个可以拷贝目录树的小程序)
    • 用fork/wait/waitpid写一个多进程的程序,用pthread写一个多线程带同步或互斥的程序。多进程多进程购票的程序。
    • 用signal/kill/raise/alarm/pause/sigprocmask实现一个多进程间的信号量通信的程序。
    • 学会使用gcc和gdb来编程和调试程序(参看我的《用gdb调试程序》)
    • 学会使用makefile来编译程序。(参看我的《跟我一起写makefile》)
    • IPC和Socket的东西可以放到高级中来实践。
  • 学习Windows SDK编程(Windows 程序设计 ,)
    • 写一个窗口,了解WinMain/WinProcedure,以及Windows的消息机制。
    • 写一些程序来操作Windows SDK中的资源文件或是各种图形控件,以及作图的编程。
    • 学习如何使用MSDN查看相关的SDK函数,各种WM_消息以及一些例程。
    • 这本书中有很多例程,在实践中请不要照抄,试着自己写一个自己的例程。
    • 不用太多于精通这些东西,因为GUI正在被Web取代,主要是了解一下Windows 图形界面的编程。

  2、学习Java

  • Java 的学习主要是看经典的Core Java 《Java 核心技术编程》和《Java编程思想》(有两卷,我仅链了第一卷,足够了,因为Java的图形界面了解就可以了)
  • 学习JDK,学会查阅Java API Doc http://download.oracle.com/javase/6/docs/api/
  • 了解一下Java这种虚拟机语言和C和Python语言在编译和执行上的差别。从C、Java、Python思考一下“跨平台”这种技术。
  • 学会使用IDE Eclipse,使用 Eclipse 编译,调试和开发Java程序。
  • 建一个Tomcat的网站,尝试一下JSP/Servlet/JDBC/MySQL的Web开发。把前面所说的那个PHP的小项目试着用JSP和Servlet实现一下。

  3、Web的安全与架构

  • 学习HTML5,网上有很多很多教程,以前酷壳也介绍过很多,我在这里就不罗列了。
  • 学习Web开发的安全问题(参考新浪微博被攻击的这个事,以及Ruby的这篇文章
  • 学习HTTP Server的rewrite机制,Nginx的反向代理机制,fast-cgi(如:PHP-FPM
  • 学习Web的静态页面缓存技术。
  • 学习Web的异步工作流处理,数据Cache,数据分区,负载均衡,水平扩展的构架。
  • 实践任务:
    • 使用HTML5的 canvas 制作一些Web动画。
    • 尝试在前面开发过的那个Web应用中进行SQL注入,JS注入,以及XSS攻击。
    • 把前面开发过的那个Web应用改成构造在Nginx + PHP-FPM + 静态页面缓存的网站。

  4、一些开发工具

  • 学会使用SVN或Git来管理程序版本。
  • 学会使用JUnit来对Java进行单元测试。
  • 学习C语言和Java语言的 coding standard 或 coding guideline。(我N年前写过一篇关C语言非常简单的文章——《编程修养》,这样的东西你可以上网查一下,一大堆)。
  • 推荐阅读《代码大全》《重构》《代码整洁之道

  高级深入

  1、C++ / Java 和面向对象

  我个人以为学好C++,Java也就是举手之劳。但是C++的学习曲线相当的陡。不过,我觉得C++是最需要学好的语言了。参看两篇趣文“C++学习信心图”和“21天学好C++

  • 学习(麻省理工免费课程)C++面向对象编程
  • 读我的“如何学好C++”中所推荐的那些书至少两遍以上(如果你对C++的理解能够深入到像我所写的《C++虚函数表解析》或是《C++对象内存存局)()》,或是《C/C++返回内部静态成员的陷阱》那就非常不错了)
  • 然后反思为什么C++要干成这样,Java则不是?你一定要学会对比C++和Java的不同。比如,Java中的初始化,垃圾回收,接口,异常,虚函数,等等。
  • 实践任务:
    • 用C++实现一个BigInt,支持128位的整形的加减乘除的操作。
    • 用C++封装一个数据结构的容量,比如hash table。
    • 用C++封装并实现一个智能指针(一定要使用模板)。
  • 设计模式》必需一读,两遍以上,思考一下,这23个模式的应用场景。主要是两点:1)钟爱组合而不是继承,2)钟爱接口而不是实现。(也推荐《深入浅出设计模式》)
  • 实践任务:
    • 使用工厂模式实现一个内存池。
    • 使用策略模式制做一个类其可以把文本文件进行左对齐,右对齐和中对齐。
    • 使用命令模式实现一个命令行计算器,并支持undo和redo。
    • 使用修饰模式实现一个酒店的房间价格订价策略——旺季,服务,VIP、旅行团、等影响价格的因素。
  • 学习STL的用法和其设计概念 -容器,算法,迭代器,函数子。如果可能,请读一下其源码。
  • 实践任务:尝试使用面向对象、STL,设计模式、和WindowsSDK图形编程的各种技能
    • 做一个贪吃蛇或是俄罗斯方块的游戏。支持不同的级别和难度。
    • 做一个文件浏览器,可以浏览目录下的文件,并可以对不同的文件有不同的操作,文本文件可以打开编辑,执行文件则执行之,mp3或avi文件可以播放,图片文件可以展示图片。
  • 学习C++的一些类库的设计,如: MFC(看看候捷老师的《深入浅出MFC》),Boost, ACE, CPPUnit,STL (STL可能会太难了,但是如果你能了解其中的设计模式和设计那就太好了,如果你能深入到我写的《STL string类的写时拷贝技术》那就非常不错了,ACE需要很强在的系统知识,参见后面的“加强对系统的了解”)
  • Java是真正的面向对象的语言,Java的设计模式多得不能再多,也是用来学习面向对象的设计模式的最佳语言了(参看Java中的设计模式)。
  • 推荐阅读《Effective Java》 and 《Java解惑
  • 学习Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是学习Java的设计,如IoC等。
  • Java的技术也是烂多,重点学习J2EE架构以及JMS, RMI,等消息传递和远程调用的技术。
  • 学习使用Java做Web Service (官方教程在这里
  • 实践任务: 尝试在Spring或Hibernate框架下构建一个有网络的Web Service的远程调用程序,并可以在两个Service中通过JMS传递消息。

  C++和Java都不是能在短时间内能学好的,C++玩是的深,Java玩的是广,我建议两者选一个。我个人的学习经历是:

  • 深究C++(我深究C/C++了十来年了)
  • 学习Java的各种设计模式。

  2、加强系统了解

  重要阅读下面的几本书:

  • Unix编程艺术》了解Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验。你一定会有一种醍醐灌顶的感觉。
  • Unix网络编程卷1,套接字》这是一本看完你就明白网络编程的书。重要注意TCP、UDP,以及多路复用的系统调用select/poll/epoll的差别。
  • TCP/IP详解卷1:协议》- 这是一本看完后你就可以当网络黑客的书。了解以太网的的运作原理,了解TCP/IP的协议,运作原理以及如何TCP的调优。
  • 实践任务:
    • 理解什么是阻塞(同步IO),非阻塞(异步IO),多路复用(select, poll, epoll)的IO技术。
    • 写一个网络聊天程序,有聊天服务器和多个聊天客户端(服务端用UDP对部分或所有的的聊天客户端进Multicast或Broadcast)。
    • 写一个简易的HTTP服务器。
  • Unix网络编程卷2,进程间通信》信号量,管道,共享内存,消息等各种IPC……这些技术好像有点老掉牙了,不过还是值得了解。
  • 实践任务:
    • 主要实践各种IPC进程序通信的方法。
    • 尝试写一个管道程序,父子进程通过管道交换数据。
    • 尝试写一个共享内存的程序,两个进程通过共享内存交换一个C的结构体数组。
  • 学习《Windows核心编程》一书。把CreateProcess,Windows线程、线程调度、线程同步(Event, 信号量,互斥量)、异步I/O,内存管理,DLL,这几大块搞精通。
  • 实践任务:使用CreateProcess启动一个记事本或IE,并监控该程序的运行。把前面写过的那个简易的HTTP服务用线程池实现一下。写一个DLL的钩子程序监控指定窗口的关闭事件,或是记录某个窗口的按键。
  • 有了多线程、多进程通信,TCP/IP,套接字,C++和设计模式的基本,你可以研究一下ACE了。使用ACE重写上述的聊天程序和HTTP服务器(带线程池)
  • 实践任务:通过以上的所有知识,尝试
    • 写一个服务端给客户端传大文件,要求把100M的带宽用到80%以上。(注意,磁盘I/O和网络I/O可能会很有问题,想一想怎么解决,另外,请注意网络传输最大单元MTU)
    • 了解BT下载的工作原理,用多进程的方式模拟BT下载的原理。

  3、系统架构

  • 负载均衡。HASH式的,纯动态式的。(可以到Google学术里搜一些关于负载均衡的文章读读)
  • 多层分布式系统–客户端服务结点层、计算结点层、数据cache层,数据层。J2EE是经典的多层结构。
  • CDN系统 – 就近访问,内容边缘化。
  • P2P式系统,研究一下BT和电驴的算法。比如:DHT算法
  • 服务器备份,双机备份系统(Live-Standby和Live-Live系统),两台机器如何通过心跳监测对方?集群主结点备份。
  • 虚拟化技术,使用这个技术,可以把操作系统当应用程序一下切换或重新配置和部署。
  • 学习Thrift,二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。
  • 学习Hadoop。 Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。
  • 了解NoSQL数据库(有人说可能是一个过渡炒作的技术),不过因为超大规模以及高并发的纯动态型网站日渐成为主流,而SNS类网站在数据存取过程中有着实时性等刚性需求,这使得目前NoSQL数据库慢慢成了人们所关注的焦点,并大有成为取代关系型数据库而成为未来主流数据存储模式的趋势。当前NoSQL数据库很多,大部分都是开源的,其中比较知名的有:MemcacheDB、Redis、Tokyo Cabinet(升级版为Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。

  写了那么多,回顾一下,觉得自己相当的有成就感。希望大家不要吓着,我自己这十来年也在不断地学习,今天我也在学习中,人生本来就是一个不断学习和练级的过程。不过,一定有漏的,也有不对的,还希望大家补充和更正。(我会根据大家的反馈随时更新此文)欢迎大家通过我的微博(@左耳朵耗子)和twitter(@haoel)和我交流。

原文链接:http://coolshell.cn/articles/4990.html

Tags:

AS3 的单元测试框架——asunit

by 老姜 2012.2.1 16:56

Tags:

Flash技术

Flash Player 11的新功能

by 老姜 2012.2.1 16:52

Flash Player 所拥有的全部功能可以在这里查看:http://www.adobe.com/cn/products/flashplayer/features.html 。同时在这个页面也可以查看到每个新版本所新增的功能。以下是 Flash Player 11 所拥有的新功能: 

  • Stage 3D 加速图形渲染
    • 探索 Adobe 高性能 2D/3D GPU 硬件加速图形渲染的新架构,为应用程序高级渲染提供了低级 Stage3D API,带来互动体验类的框架开发。
  • 本机 64 位支持
    • Flash Player 现在可利用 Linux®、Mac OS 和 Windows® 上对 64 位操作系统和 64 位网页浏览器的本地支持。
  • 相机的 H.264/AVC 软件编码
    • 来自您的计算机摄像头的美丽流媒体视频,具有更高的压缩效率和行业广泛的支持,实现高品质的实时通信(例如,视频聊天和视频会议)和视频直播节目。
  • 移动的内容保护支持
    • 现在 Android 设备可以支持 Flash Access 内容保护。广播装置现在可以获得和宣传更多客户的最喜爱移动设备。
  • 受保护的 HTTP 动态流化 (HDS)
    • 跨设备保护流视频,同时取消部署复杂的许可证服务器。
  • 受保护的 HTTP 动态流化 (HDS)
    • 跨设备保护流视频,同时取消部署复杂的许可证服务器。
  • 安全随机数生成器
    • 开发人员现在可以利用加密安全随机数生成来构建更安全的算法和协议。
  • TLS 安全套接字支持
    • 利用客户端/服务器应用程序对安全通信的全新支持。
  • 电话的 G.711 音频压缩
    • 通过 Flash Media Gateway (FMG) 和其他第三方客户端(通过开放 RTMP 协议),支持与传统电话系统的互操作性,而无需转码。
  • 三次 Bezier 曲线
    • 轻松创建复杂的三次 Bezier 曲线,无需通过 cubicCurveTo 绘制 API 自定义 ActionScript® API。
  • 增强的高分辨率位图支持
    • 可以开发使用大量位图的应用程序。BitmapData 对象不再局限于 16 兆像素(16,777,215 像素)的最高分辨率,最大位图的宽度/高度不再局限于 8,191 像素。
  • 异步位图解码
    • 通过解码初始加载而非点播加载的图像,提高应用程序的响应,提供更流畅的动画。图像视需要缓存。
  • 本机 JSON(JavaScript 对象表示法)
    • ActionScript 开发人员现在可以利用高性能本地解析和生成 JSON 格式数据。开发人员可以将现有数据无缝集成到他们的项目中。
  • 垃圾收集通知
    • GC 通知 API 对垃圾收集进度提供了额外的控制,使垃圾收集过程不会破坏用户体验。
  • 套接字进度事件
    • 通过确定写入缓冲区剩余字节数的新特性以及数据发送至网络层的新事件,改进数据传输管理。新的 API 允许应用程序轻松跟踪进展情况并提供反馈。
  • JPEG-XR 支持
    • 支持 JPEG-XR 高级图像压缩标准(国际标准 ISO/IEC 29199-2),具备比 JPEG 更高效的压缩,同时支持有损和无损压缩,并增加对 alpha 通道透明度的支持。
  • 高效率 SWF 压缩支持
    • 利用 LZMA 压缩减少 SWF 文件大小高达 40%,通过缩短下载时间和减少带宽消耗,使用户能够从更丰富的体验中受益。
  • 新的 removeChildren API
    • DisplayObjectContainer 现在实施了 removeChildren API,使开发人员能够运用单一 API 调用,快速删除容器的所有子对象。
  • 新的 MovieClip 属性
    • 利用新的 MovieClip.isPlaying 特性,返回 MovieClip 的当前播放状态。
  • Adobe Flash Access®
    • 利用关键旋转支持、V3 许可证链接、域名支持、增强输出保护以及设备过滤功能。

Tags:

Flash技术

Flex中的元数据标签

by 老姜 2011.11.5 08:33

元数据标签是一种特殊的标签,它在代码中的作用就是向编译器提供如何编译程序的信息。
实际上,这些标签并没有被编译到生成的SWF文件中,而只是告诉编译器如何生成SWF 文件。

Flex中的元标签列表如下:

标签 描述
[ArrayElementType("elementType")] 在数组中定义所有允许的数据类型。
[Bindable]
[Bindable(event="eventname")]
声明一个属性可以在代码中使用数据绑定表达式,Bindable可以用来绑定简单数据类型、类、复杂数据类型以及函数。
[DefaultProperty("propertyName")] 定义组件在MXML中使用时的默认属性的名称。
[Deprecated] 标识一个类或类的元素是不推荐使用的,这样编译器能认出他并在被调用时给出一个警告信息。
[Effect] 定义MXML的特效属性名称。
[Embed] 在编译时导入 JPED,PNG,SVG 或 SWF文件。也会导入SWC文件的图片资源。他的功能等同于MXML中的 @Embe 语法。
[Event] 定义MXML的事件属性的名称和类型。
[Exclude] 使 Flex Builder 的标签检查器忽略类元素。语法类似 [Exclude(name="label",     kind="property")]
[ExcludeClass] 是 Flex Builder 标签检查器忽略类。这相当于ASDoc中的 @private 标签。
[IconFile] 定义一个图标文件,使组件在Adobe Flex Builder的插入面板中以该图标显示。
[Inspectable] 定义一个属性的列表,供组件使用者在 Flex     Builder 的的属性提示和标签检查中使用。同时也定义了属性的可用值。
[InstanceType] 指定了 IDeferredInstance 中的,属性接受的数据类型。
[NonCommittingChangeEvent] 定义一个事件过渡触发器。
[RemoteClass] 把一个ActionScript对象映射到Java对象。
[Style] 为组件的样式属性定义一个MXML标签属性。
[Transient] 当一个 ActionScript 对象被映射到Java对象后,被该标签标识的属性,会从发送到服务端的数据中忽略掉。

[ArrayElementType]
实际上,定义一个数组通常来说是一件很平常的事情,因为数组中的元素可以是任何类型的。不过,使用ArrayElementType元数据标签可以让你定义数组元素的数据类型。下面的例子展示了如何使用[ArrayElementType]:

程序代码
   [ArrayElementType("String")]
     public var arrayOfStrings:Array;

     [ArrayElementType("Number")]
     public var arrayOfNumbers:Array;

     [ArrayElementType("mx.core.UIComponent")]
     public var arrayOfUIComponents:Array;

[Bindable]
Bindable元数据标签是最经常用到的一个元数据标签,因为它使程序组件之间的数据同步变得很容易。Bindable可以用来绑定简单数据类型、类、复杂数据类型以及函数。绑定数据的时候,你必须先使用元数据标签定义一下数据,正如Listing 1 中所示的那样。
Bindable也可以用来绑定到事件。Listing 2 展示了如何使用getter和setter函数将一个属性绑定到一个事件上。这个例子中有一个叫做phoneNumber的私有变量,还有一个公有的 setter和getter函数。使用Bindable标签将这个getter方法绑定到了一个叫做phoneNumberChanged的事件上,只要数据发生改变setter方法就会分派phoneNumberChanged事件。通过使用setter方法,可以在数据赋予私有变量之前对其进行操作。在这个例子中,数据只有在长度大于等于10的时候才会被格式化。当phoneNumberChanged事件被分派的时候,第二个TextInput组件会被更新,因为他的text属性绑定到了phoneNumber变量上。
[DefaultProperty]
DefaultProperty元数据标签用来将一个单一属性设定为某个类的默认属性。它允许在一个容器标签内设定属性,而不用定义属性的名字。一个简单的例子就是一个自定义Button类。Listing 3 展示了一个简单的Button类,它将label属性设定为了DefaultProperty。Listing 4 展示了label属性是如何在自定义Button标签中作为一个字符串定义的。
[Embed]
Embed元数据标签用来导入图片到程序。可以通过两种方式使用Embed。你可以将图片嵌入到ActionScript中并将其指派给一个变量(如同下面代码中的第一个例子),或者你也可以将图片直接指派给组件的属性(使用下面代码中的第二个例子所示的语法规则)。
例1:

程序代码
[Embed(source="myIcon.gif")]
[Bindable]
public var myIcon:Class;
<mx:Button label="Icon Button 1" icon="{myIcon}"/>
<mx:Button label="Icon Button 2" icon="{myIcon}"/>

例2:

程序代码
<mx:Button label="Icon Button 1" icon="@Embed(source=myIcon.gif')"/>
<mx:Button label="Icon Button 2" icon="@Embed(source=myIcon.gif')"/>

上面这两个例子产生的结果是一样的。创建myIcon类的好处是,它在一个类中只定义一次并可以绑定到程序中的多个组件。
[Event]
Event元数据标签用来声明那些被自定义类分派的事件。将这个元数据标签添加到类定义中之后,你就可以在MXML标签中添加事件处理函数来初始化该自定义类。Listing 5 创建了一个自定义Button类,每当它的label属性改变的时候就会分派一个事件。Listing 6 所显示的主程序文件初始化了这个自定义Button并创建了事件处理函数,该函数将新的labe属性值赋给了一个TextArea组件以显示当前发生的更改。
[Effect]
Effect元数据标签用来定义一个自定义效果,当某个事件发生的时候该效果会被分派。这个示例可以基于前面Event的例子来创建,通过简单地更改ButtonLabel类(Listing 7 )中的一行代码,就定义了一个效果,该效果可以在MXML标签中直接使用(Listing 8 )。
[IconFile]
IconFile 是用来定义一个jpg,gif或者png文件的文件名的,它在你的自定义类中作为图标来使用。[Embed]元数据标签可以用来嵌入图片、SWF文件、音乐文件以及视频文件等,而IconFile则只是用来嵌入用来作为自定义类图标的文件。下面是一个IconFile的例子:

程序代码
[IconFile("icon.png")]
public class CustomButton extends Button
{

}

[Inspectable]

在使用Flex Builder 2的时候,你可能会希望某些自定义组件的属性在代码提示和属性检查器(property inspector)中显示,Inspectable元数据标签就是用来定义那些属性的。Listing 9 展示的例子定义了一个inspectable的ccType变量,它定义了Visa为默认值、Credit Card为类别并将取值范围定义为包含了Visa, Mastercard, Discover, 和 American Express的枚举。
[InstanceType]
当在一个模板对象中声明一个像IDeferredInstance这样的变量时,InstanceType元数据标签就用来声明对象的类型。下面是InstanceType的用法:

程序代码
[InstanceType("package.className")]

[NonCommittingChangeEvent]
NonCommittingChangeEvent元数据标签在某个特定事件发生的时候可以防止变量在事件发生的过程中被更改。Listing 10 展示了它是如何工作的。一个名为s的字符串类型的私有变量被绑定到了名为ti2的TextInput组件上。另外一个id为ti1的TextInput组件在它的text发生更改的时候就会将s的值设置为它的text属性的值。另外,当triggerBinding 事件被分派的时候,附加在s变量上的Binding元数据标签就会进行绑定。只有在Enter键在ti1 TextInput组件中被按下时才会分派triggerBinding事件。
[RemoteClass]
RemoteClass 可以用来将一个ActionScript类绑定到一个Java类或一个ColdFusion CFC。这样做可以自动转换数据类型。下面的例子将包com.mydomain中的名为MyClass的ActionScript类绑定到了同一个包中名为MyClass的Java类:

程序代码
package com.mydomain {
   [Bindable]
   [RemoteClass(alias="com.mydomain.MyClass")]
   public class MyClass {
     public var id:int;

     public var myText:String;

   }
}

[Style]
Style元数据标签用来为组件定义自定义样式属性的。只需要简单地将Sytle元数据标签添加到类的定义当然,然后就可以使用getSytle方法获取它的值了。Listing 11 和 12 中的例子定义了两个样式,分别为borderColor 和fillColor,它们的数据类型都是uint。当类初始化的时候这两个样式就会在标签中被设定。代码中覆写了updateDisplayList函数,用自定义的样式画了一个圆形边框并将其填充。
现在你应该会有这样的感觉了:“喔,现在我知道在哪里可以使用它们了”或者“嗯,我想我会在新的项目中尝试使用这些元数据标签”。如果你没有,那么你可能需要回过头去再看一遍这篇文章。OK,我想说的是Adobe Flex小组提供给我们的元数据标签不只是非常的强大,可以让我们扩展或自定义我们要做的东西,而且它还非常易于使用。通过使用它们,仅仅几行代码就可以完成一大堆事情。如果不使用这些标签,你会发现在Flex 2中实现一些东西是很辛苦的。

Tags:

Flash技术

AS3设计模式之一:单例模式(Singleton Pattern)

by Administrator 2011.9.29 16:29

原文地址:http://www.cnitblog.com/flashlizi/archive/2007/11/09/33236.html

什么是单例模式?

在面向对象的编程中,有时候会要求一个类有且仅存在一个实例,并提供一个全局的访问方法。所以我们在设计这样的类的时候,就需要思考如何避开构造函数,提供一种机制来实现单例(单一实例)。这就是单例模式。另因为在AS3中无法操作线程,因此我们无需考虑多线程情况下的单例。

单例模式的几种AS3实现

在AS3中有多种方法可以实现Singleton模式,首先看下面的方法1:

 1package {
 2    public class Singleton {
 3        private static  var _instance:Singleton = new Singleton();
 4        public function Singleton() {
 5            if (_instance) {
 6                throw new Error("只能用getInstance()来获取实例");
 7            }

 8        }

 9        public static function getInstance():Singleton {
10            return _instance;
11        }

12    }

13}

此方法通过静态私有变量_instance来创建Singleton类的实例,通过getInstance方法来访问这个单一实例。另外,由于在AS3中不允许private、protected的构造函数,只能是public,因此需要防止用构造函数来创建Singleton类的实例。这个方法有个问题就是这个类的实例会在程序一开始就创建。

方法2:
 1package {
 2    public class Singleton {
 3        private static  var _singleton:Boolean=true;
 4        private static  var _instance:Singleton;
 5        public function Singleton() {
 6            if (_singleton) {
 7                throw new Error("只能用getInstance()来获取实例");
 8            }

 9        }

10        public static function getInstance() {
11            if (!_instance) {
12                _singleton=false;
13                _instance=new Singleton();
14                _singleton=true;
15            }

16            return _instance;
17        }

18    }

19}

此方法通过一个静态私有变量_singleton来控制_instance的创建,保证其唯一性。并且这个方法不存在方法1中的问题,_instance实例只有在调用getInstance()方法后才会创建。

方法3:
 1package {
 2    public class Singleton {
 3        private static  var singleton : Singleton;
 4        public function Singleton( caller : Function = null ) {
 5            if ( caller != hidden ) {
 6                throw new Error("只能用getInstance()来获取实例");
 7            }

 8            if ( Singleton.singleton != null ) {
 9                throw new Error("只能用getInstance()来获取实例");
10            }

11        }

12        public static function getInstance():Singleton {
13            if ( singleton == null ) {
14                singleton = new Singleton( hidden );
15            }

16            return singleton;
17        }

18        private static function hidden():void {
19        }

20    }

21}

此方法通过对构造函数增加参数来控制单个实例的创建。此构造函数只有传入参数为私有方法hidden的时候,才能创建实例。私有方法hidden对外的不可见性保证了单例的实现。

方法4:
 1package {
 2    public class Singleton {
 3        private static  var _instance:Singleton;
 4        public function Singleton(singletoner:Singletoner) {
 5            if (singletoner == null{
 6                throw new Error("只能用getInstance()来获取实例");
 7            }

 8        }

 9        public static function getInstance():Singleton {
10            if (_instance == null{
11                _instance = new Singleton(new Singletoner());
12            }

13            return _instance;
14        }

15    }

16}

17internal class Singletoner {
18}

此方法和方法3相似。这里利用了包外类对外的不可见性(Singletoner类仅在此as文件内可见)来保证单例的实现。

总结

单例模式的实现方式很多,在不同的需求下选择合适的才是最好的。比如方法1虽然一开始就会创建实例,但它不会像其他方法每次调用实例都要检查是否存在类的实例。Singleton模式只考虑实例的创建,而没有考虑到销毁,由垃圾回收机制自行处理。另外,你也可以扩展Singleton模式,比如稍做修改保证一个类只有少数几个实例,来实现一些特殊的目的,这样做也是合理和有意义的。

Tags: , ,

Flash技术

新增“分享”功能

by 老姜 2011.4.22 07:58

看到右侧那个标签了吗?对,就是蓝色那个,点击它,你可以将本博内容分享到人人网、开心网、QQ空间、新浪微博等一系列社会化关系网络站点,超过100个。够多吗?

这是JiaThis分享工具。

Tags:

IVR360新闻

AS3编码规范

by 老姜 2011.4.21 21:07

原文地址:http://artlee.biz/572/comment-page-1#comment-134

作者:Artlee

AS3编码规范

2010年3月10日 Artlee 版本v1

作者根据自己多年的Flash项目开发及管理经验,吸取驼峰命名法与匈牙利命名法的长处,结合MVCS开发模式,融入面向对象的开发思想,并且考虑到业界已有的不成文的约定,兼顾Flash开发以及Flex开发的便利性,草拟了这份AS3编码经验。请各位大师多多指教。

一,基本原则

  1. 约定大于配置,约定大于规范
  2. 规范思想,并非为束缚手脚
  3. 在无歧义的前提下,命名力求简洁
  4. 在语义明了的前提下,命名力求省力,如果可以同时不按shift,则不按
  5. 命名=表义词语+类型,名称表义为先
  6. 坚持使用强类型
  7. 把常用的成员,放在容易找到的地方,给予它们更大的访问权限
  8. 源码格式以清晰易读为准
  9. 注释大于代码,代码总是与注释有关的

二,一般规则

  1. 文件组织结构与包(在MVCS开发模式下)范式:(companyDomain|teamName).projectName

    +controllers 控制器目录

    +events 事件目录

    +managers 管理器目录

    +models 数据模型目录

    +models.vos VO对象目录

    +services 数据服务目录

    +views 视图目录

    +views.uis UI目录

    +utils 工具类目录

    +Module_{Name}.as 模块类(IFacade)

    说明:|表示或者,两者取其一

    词性:名词

    命名:驼峰命名法,第一个单词首字母小写,第二个单词首字母大宇,因形似驼峰而得名

  2. 类与类文件范式:SealedName[Type]

    说明:若无歧义,[]之内可略去,以下同

    如PopUpManager、MouseEvent、StringUtil、FishController等

    在MVC开发模式下,如果去掉Type,在项目中则可能出现同名文件,虽然完全限定名不同,但同时在同一个类中被引入时,会给编码带来不便。在这种情况下,保留Type更为合理。

    词性:名词

    命名:大驼峰命名法(首单词首字母大写)

  3. 接口范式:ISealedName[Type]

    说明:接口与类相比,不同之处仅在于附有前缀I

    词性:字母I+名词

    命名:大驼峰命名法(首单词首字母大写)

  4. 常量范式:CONST_VARIABLE_NAME = “constVariableName”

    命名:常量名称单词大宇,间以下划线,常量值使用驼峰命名法

    词性:名词、动名词等

    用途:在事件类中定义事件类型,在枚举类中定义枚举值等

  5. 实例变量、参数变量、函数变量与类静态变量范式:variableName

    命名:驼峰命名法

  6. 函数范式:[varName_]getMethodName(argName1 :String…)

    命名:驼峰命名法

    词性:动词、动名词

  7. 命名空间范式:lib_internal

    命名:小写字母单词,间以下划线

    词性:名词+形容词

  8. 类成员的位置成员优先级从高到低:常量,静态变量,静态函数,构造器,实例变量,getter/setter属性存取器,函数

    同级别的成员按访问修饰符排序:public,internal,protected,private

三,具体细则

  1. 在参数变量、函数变量中常用的缩写c : Controller(或ctrl)

    m: Model

    v:View

    e : Event or Error

    mdl: Module

    ui: UI

    srv: Service

    btn:Button

    mc:MovieClip

    spt:Sprite

    n:Num

    j,k,m,n: for循环数字标识

  2. 在MVCS开发模式下,常用的Type后缀视图:View

    视图接口:IView

    控制器:Controller

    数据模型:Model

    数据对象:VO

    UI:UI

    管理器:Manager

    事件集:Events

    事件:Event

    枚举类:*s(在类名加复数s)

    数据服务:Service

    工具类:Util

    模块:Module

    基类:Base

  3. 事件句柄函数命名举例onClick(e :MouseEvent) :void

    btnClose_onClick(e:MouseEvent) :void

    mouseEventHandler(e :MouseEvent) :void

    mcName_mouseEventHandler(e :MouseEvent) :void

  4. 颜色变量使用uint
  5. 时间变量使用Number
  6. switch多在事件句柄函数中使用
  7. 优先使用Vector,在声明数组Array时,标明它的元素类型,如fishs : Array /* Element Of Fish */
  8. 避免使用try..catch
  9. 在for循环中,使用j、k、m、n作为循环数字
  10. 不要声明没有类型的变量,不要使用*使用类型修饰符,避免返回类型为Object的对象
  11. 不用使用Object作为HashMap,使用Dictionary代替
  12. 基本弃用private,默认非公开的实例变量与实例函数使用protected访问修饰符
  13. 在VO类中,默认所有变量使用基元类型作为类型修饰符,使用public作为访问修饰符
  14. 基本弃用getter/setter,在一般情况下,不使用public的getter/setter存取器,代替以public getMethod/setMethod。
  15. 把花括号放在同一列,如:public getMehtod() : void

    {

    }

  16. 在类、函数上使用ASDoc注释,如:/**

    * comment

    */

  17. 不使用下划线作为变量前缀。
  18. 以Flash制作资源文件时:元件成员分层放置,每层须有名称

    库元件分目录放置,以类别组织文件夹

    元件的实例名称使用驼峰命名法,命名规则与实例变量同

    元件的导出名称与所要绑定的类名一致

    Label与AS均单独放在一层里,置于最上面

    避免使用mask

    尽量不要使用滤镜

  19. 控制显示对象的位置时,避免使用小数
  20. 修改fla文件之前要签出、锁定,再修改。
  21. 使用空白字符使代码明晰易读,如:在单词、符号之间使用空格

    在函数、变量之间使用空行

    在包、类、函数、匿名函数各级别间使用缩进

    如果参数列表过长,或数组元素很多,可以拆行,使用相同缩进

  22. 在导入类时,避免使用*号
  23. 约定在注释中添加fixed标签的类或函数,不要随意更改
  24. 函数变量在函数顶部统一声明,在事件函数内部移除事件监听统一放在函数顶部
  25. 在类的顶部写上该类的功能注释,1234,条列清楚,这个类有什么功能均是与此注释有关的。
  26. 不使用for(key:String in Array)的方式迭代数组
  27. 使用[]实例化数组,而非new Array()

Tags:

Flash技术

关于博主

我很想写点什么来让你了解我...

归档

页面

最近的文章

声明

本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2011