查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

韩国恺的博客

hanguokai.com

 
 
 
 
 
 

自制一个编程语言主题的音乐幻灯片

2013-4-27 13:43:41 阅读1061 评论1 272013/04 Apr27

我为5月5号 编程语言主题活动 做了一个音乐幻灯片,包括 Go、Erlang、Dart 以及很多计算机名人。你认识其中的所有人和他所代表的编程语言吗?(背景歌曲为:Return To Innocence,译为:返璞归真)

这次还有个关于版权问题的教训。因为背景音乐是有版权限制的,所以在上传 Youtube 之后,Youtube 会自动检测到内容并给你发一个 Email 说:“您的视频可能包含由EMI所有或需要其授予许可的内容,但仍可以在 YouTube 上播放!在某些情况下,系统可能会禁止该视频,或者在它旁边显示广告。”

事实上,Youtube 上除了自己别人是无法看到的。虽然音乐是从国内正规网站上下载的,但这不意味着你可以在任何地方使用。所以,我把 Youtube 上的版本删除了。只保留一个国内的版本。

作者  | 2013-4-27 13:43:41 | 阅读(1061) |评论(1) | 阅读全文>>

Dart 性能测试

2013-3-1 20:46:56 阅读2350 评论0 12013/03 Mar1

我们通常需要对代码或核心算法做性能测试。性能测试的概念非常简单:执行要测试的代码,测量其执行时间(一般是多次测试的平均值)。性能测试真正的难点是避开各种干扰因素,而这些干扰因素可能非常复杂。除了自身代码,还可能涉及硬件、底层系统、语言、库的实现等各个方面。Dart 中的性能测试和其它语言并没有什么不同,只不过需要注意几点。

1. 热身

Dart 语言的一个目标是快速启动,为此 Dart VM 并不会立刻优化要执行的代码。执行时间太短、次数太少的代码无法触发 VM 的优化器,这样的结果并不能反映真实的性能数据。所以,在正式开始记录执行时间之前要预先执行足够多的次数和时间,然后再开始测试性能。

除了热身,测试本身也要执行足够的时间和次数才能获得准确的数据,尤其是单次执行时间很短的测试。

2. 关闭检查模式和调试模式

Dart 有两种执行模式:检查模式(checked)和生产模式(production)。检查模式会在运行时插入大量类型检查,自然会影响性能。命令行模式下 dart 默认就是生产模式。但在 Dart Editor 中默认是在检查模式下运行,首先保证程序在检查模式下执行没问题,然后在性能测试时在程序的启动配置中取消 VM 的 “Run in checked mode”选项。

此外,debug 模式也会对性能有影响。在 Dart Editor 的选项配置中,Run and Debug 中的 break on exceptions 设为 none 。

基本性能测试代码

作者  | 2013-3-1 20:46:56 | 阅读(2350) |评论(0) | 阅读全文>>

Dart 语言入门(六)——异步与并发编程

2012-11-26 16:58:07 阅读2918 评论0 262012/11 Nov26

更新日期:2012年11月26日

一、异步编程 Future

有时候我们需要让一个调用异步执行,比如一个比较耗时的操作,好继续后面的处理,而不是一直等待处理完成。异步执行就是调用本身立即返回,并在稍后的某个时候执行完成时再获得返回结果。在 Dart 中,这是通过 Future<T> 对象实现的。我们可以通过 then() 方法注册一个回调函数在成功执行完成时调用,并获得返回值。如果执行失败,则会抛出异常。另外也可以通过 handleException() 注册遇到异常时执行的回调函数,如果这个回调函数返回 true ,那么 Future 认为异常已被很好地处理了就不再抛出异常,否则还是会抛出异常。但一般不必注册 handleException,因为异常会正常抛出给外面的代码。onComplete 注册的回调函数不管成功还是失败都会执行。

当 Future 完成时,依次执行以下动作:

如果成功完成,那么执行 then 方法中注册的回调函数如果执行失败,那么依次执行 handleException 方法中注册的回调函数,直到其中一个返回 true执行 onComplete 方法中注册的回调函数如果执行失败,并且 then 方法中至少注册了一个回调函数,并且没有一个 handleException 方法中注册的回调函数返回 true,那么就抛出异常。

使用 Completer 对象可以创建一个 Future,并在之后为 Future 提供一个返回值。

作者  | 2012-11-26 16:58:07 | 阅读(2918) |评论(0) | 阅读全文>>

Dart 语言入门(五)——库的使用

2012-11-25 11:54:13 阅读2396 评论0 252012/11 Nov25

更新日期:2012年12月27日

在 Dart 中有库(library)的概念,你可以导入一个库使用它提供的功能,也可以自己定义一个可重用的库。尽管这是很多 server 端语言都支持的概念,但在 JavaScript 尚不支持。如果你用 Dart 编写 Web 应用就可以利用这点,帮你更好地组合代码。一个库可以由一个或多个文件组成。

任何 Dart 应用程序都是一个库,即使没有使用 library 声明。import 用于导入一个库,library 用于定义一个库,part 用于将其他文件包含到当前库的定义中。

私有概念在 Dart 中,以下划线开头的成员是私有的。注意,Dart 中的私有单元是库,而不是类。私有是指在库的外部不可见,而在库的内部是完全可见的。比如,你在类中定义了一个私有方法,实际上在类所在的库中是完全可见的。

1. import 语句

import 语句可以导入一个库,然后你就可以使用该库中定义的所有成员了。例如,下面是导入 dart:html 库的 import 语句:

import 'dart:html'; // 导入 Dart 标准库

在 import 关键字后面通过一个字符串形式的 URI 来指定要导入的库。Dart 的标准库使用 dart: 前缀的格式,如 dart:html、dart:io 等。你也可以导入一个绝对或相对路径的 dart 文件,如:

import 'lib/unittest.dart'; // 导入文件

作者  | 2012-11-25 11:54:13 | 阅读(2396) |评论(0) | 阅读全文>>

Dart 语言入门(四)——特殊的对象方法

2012-11-24 14:24:41 阅读1493 评论0 242012/11 Nov24

更新日期:2012年11月24日

对象中除了实例方法、静态方法和 getter/setter 方法外,还有一些特殊的方法。比如,操作符重载可以让你自定义操作符的行为,noSuchMethod 可以让你动态处理一个未定义的方法调用。

一、操作符重载

Dart 支持很多操作符,见下表,大部分和其它语言一样,不用特别在意。操作符的优先级按从上到下的顺序逐渐降低。

说明 操作符 一元后缀和参数测试 expr++    expr--    ()    []    .    ?identifier 一元前缀 -expr(负数)    !expr    ~expr(求补)    ++expr    --expr    乘法 *    /    %(求余)    ~/(求商) 加法 +    - 位移 <<    >> 关系判断和类型测试 >=    >    <=    <    as(类型转换)    is(类型测试)    is! 相等判断 ==    !=  按位与 & 按位异或 ^ 按位或 | 逻辑与 && 逻辑或 || 条件判断 expr1 ? expr2 : expr3 级联调用(cascade) .. 赋值 =    *=    /=    ~/=    %=    +=  

作者  | 2012-11-24 14:24:41 | 阅读(1493) |评论(0) | 阅读全文>>

Dart 语言入门(三)——面向对象

2012-11-19 14:47:28 阅读2633 评论0 192012/11 Nov19

更新日期:2013年3月17日

Dart 是基于类的、纯面向对象语言,类型是可选的。类是单继承的,但可以实现多个接口。Dart 中的所有东西都是对象,包括数字、函数等,它们都继承自 Object,并且对象的默认值都是 null(包括数字)。下一步 Dart 还计划实现 Mixin-based 的继承和 Mirror-based 的反射。

类和接口

Dart 中的类和 Java 类似,用 class 关键字定义一个类,用 extends 关键字继承一个类,用 implements 关键字实现一个或多个接口。但和 Java 不同的是,在 Dart 中类和接口是统一的,类就是接口。因为每个类都有一个隐式接口,包括类的所有(可见的)实例成员(字段和方法)和它所实现的所有接口,但类的构造函数不属于它的隐式接口。一个只有抽象方法的类就相当于传统意义上的接口(比如 Java 的接口)。所以,你可以继承一个类,也可以实现一个“类”。如果你想复用已有类的一些实现,那么你可以继承一个类;如果你只是想具有该类/接口的外在行为,那么你可以实现这个类。因此,你不必再考虑是使用接口还是抽象类的问题了,它们没有区别。

在语法上,如果一个方法没有实现,那么直接以分号结束即可,这就是一个抽象方法。抽象方法不需要用 abstract 关键字声明,有实现的方法就是非抽象方法,没有实现的就是抽象方法。这很自然。如果一个类中包含抽象方法,那么“应该”用 abstract 关键字声明这个类为抽象类,但并不强制要求,没

作者  | 2012-11-19 14:47:28 | 阅读(2633) |评论(0) | 阅读全文>>

Dart 语言入门(二)——函数

2012-11-17 16:11:25 阅读2933 评论0 172012/11 Nov17

更新日期:2012年11月17日

函数在 Dart 中受到很好的支持。函数的基本语法和 JavaScript 类似,但是不需要输入 function 关键字,这样代码更简练。所有函数都有返回值,没有指定返回值的函数返回 null。

String sayHello(String name){

return 'hello $name';

}

因为 Dart 中的类型是可选的,所以这样写也可以:

sayHello(name){

return 'hello $name';

}

但如果你的函数是对外给别人使用的 API,那么最好包含类型信息。因为明确函数的输入类型和返回类型,别人更容易明白这个函数的意图和限制。

如果函数体中仅仅是简单地返回一个表达式的值,那么可以使用更简练的箭头语法 => expr; ,它等价于 { return expr; } 。所以上面的代码还可以这样写:

sayHello(name) => 'hello $name';

你不仅可以定义一个有名字的函数,还可以使用匿名函数、把函数作为参数传递给其它函数、把函数赋值给一个变量、返回一个函数等。

main() {

var sayHello = (name) => 'hello $name'; // 把一个匿名函数赋值给变量

sayHello('Guokai'); // 利用该变量调用函数

作者  | 2012-11-17 16:11:25 | 阅读(2933) |评论(0) | 阅读全文>>

Dart 语言入门(一)——概述和基本语法

2012-11-16 17:09:15 阅读8449 评论0 162012/11 Nov16

更新日期:2012年11月20日

一、语言概述

Dart 语言在2011年10月由 Google 发布,并在2012年10月发布第一个里程碑版本 M1。Dart 作为一种结构化的Web开发语言,既让人感觉熟悉,又足够灵活。既适用于快速原型开发,又适用于组织大型的代码库。既可以用在桌面版和移动版的浏览器中,也可以在服务器端使用。总体上说,Dart 语言是感觉熟悉的并且符合程序员的直觉,特别是你已经掌握了 Java、JavaScript 等语言的话。

Dart 是一门很特别的语言。我觉得最有特色的特性是可选类型,他在动态语言的基础上,结合了静态语言的优点。另一个特色是,Dart中的类和接口是统一的,类即接口,你可以继承一个类,也可以实现一个类(接口)。除此之外还有很多非常不错的特性,比如工厂构造函数和命名构造函数,getter/setter方法,语言级别的级联调用等。作为现代语言的基本功能,自然也包含了良好的面向对象和并发编程的支持。

编程语言并不是孤立存在的,Dart也是这样,他由语言规范、虚拟机、类库和工具等组成:

SDK:SDK 包含 Dart VM、dart2js、Pub、库和工具。Dartium:内嵌 Dart VM 的 Chromium ,可以在浏览器中直接执行 dart 代码。Dart2js:将 Dart 代码编译为 JavaScript 的工具。Dart Editor:基于 Eclipse 的全功能 IDE,并包含以上所有工具。支持代码补全、代码导航、快速修正、重构、调试等功能。

Dart 两种运行模式:

作者  | 2012-11-16 17:09:15 | 阅读(8449) |评论(0) | 阅读全文>>

2012百度开发者大会小记

2012-3-23 20:44:05 阅读812 评论0 232012/03 Mar23

早上,说前500位有神秘礼物,于是我一大早就赶过去了。以为像美国google io 大会一样

发个google手机或百度手机,结果是个“空盒”,不知干啥用的。

10:00,李彦宏做了简短发言,比喻当前移动开发就像是北京现在的春天一样,表面上还是一片秃,

叶子都没有,不过会发展起来的。

整体介绍百度云体系,发布个人云存储(网盘)、百度应用引擎BAP2.0等。

找个13岁开发者演讲,虽然做了点东西,但是有点作秀,那些IT媒体人倒是喜欢转发这类内容。

上午的主会场,人多,wifi都用不了,下午分会场wifi还比较稳定。

我下午一直在第三分会场,听了4场:

1. 钱景,分成,收入——百度的移动互联网广告

2. 蒋宇捷介绍了html device api等新api和其它一些问题,这也太超前了,产品中还用不到的。

3. 街旁工程师敬宓将了他们做LBS使用MongoDB遇到的问题,内存和磁盘占用高,很消耗资源,大量

随即请求的导致io负载很糟,性能差,最后他们自己做了个简单DB解决了。

4. 海豚浏览器联合创始人刘铁锋,综述了从过去到现在技术的演进和web平台的发展。

会后,我向刘铁锋表达了web和os之间分层的观点。时间有限没多说。

因为我前几天用File api做的小工具在百度和腾讯的应用平台上都因为浏览器兼容问题而审核不过。

所以向在场的一个百度负责人表达了百度应用平台的浏览器兼容性要求导致不能使用html5的问题,

作者  | 2012-3-23 20:44:05 | 阅读(812) |评论(0) | 阅读全文>>

SSL证书与Https应用部署小结

2012-2-17 21:45:24 阅读69959 评论4 172012/02 Feb17

为了提高网站的安全性,一般会在比较敏感的部分页面采用https传输,比如注册、登录、控制台等。像Gmail、网银等全部采用https传输。

https/ssl 主要起到两个作用:网站认证、内容加密传输和数据一致性。经CA签发的证书才起到认证可信的作用,所有有效证书均可以起到加密传输的作用。

浏览器与SSL证书

上图是IE和Chrome上对https的不同表现。

Chrome 网站安全性指示器说明:http://support.google.com/chrome/bin/answer.py?hl=zh&answer=95617

SSL最主要应用是在浏览器和Web服务器之间,尽管不限于此。当然,安全本身是重要的内在属性。但在表面上看,部署SSL 就是为了让用户浏览器里看起来更安全一些,以增加用户的信任感。所以很多企业更把它当作门面,而签发机构也为此卖高价,尤其是国内的价格明显高于国外的。

实际上SSL证书也可以做客户端认证,用户拥有自己特有的证书,用它可以证明自己的身份,当然也就用不着用户名和密码了。但这种用的很少,一般web服务器也不支持。

内容加密传输更安全,如果只是为了加密,使用自签发的证书也可以,但浏览器无法验证证书,所以会给出一个非常吓人的警告,所以自签发证书不适合给外人使用,只适合内部使用,把这个证书 加入到自己的信任列表或忽略证书验证即可,以后就不会继续拦截了。

作者  | 2012-2-17 21:45:24 | 阅读(69959) |评论(4) | 阅读全文>>

有趣的字符比较规则(Collation)

2012-2-13 0:14:21 阅读652 评论0 132012/02 Feb13

由于网易博客采用GBK字符集,而本文内容又涉及很多国外的特殊字符,所以无法正确显示出来。

以下内容仅是我原文的内容截图。

原文内容请访问:Google博客 或 Google docs链接 (需翻墙)。

以后内容可能还会补充,先写到这里。

作者  | 2012-2-13 0:14:21 | 阅读(652) |评论(0) | 阅读全文>>

按条件发布Web应用新特性

2011-12-7 15:19:21 阅读565 评论0 72011/12 Dec7

上午看了一篇:Developing Gmail’s new look ,结合自己的理解整理出本文。

在互联网行业,Web应用需要不间断地随时发布和更新。

就像这句话所说:“changing tires on a moving car”,我们给行驶中的汽车换轮胎,而且这车上坐了成千上万的乘客!

Web软件和传统软件的发布管理很不一样。

线上代码的管理很麻烦,经常要修改、发布新代码,而频繁更新又容易产生问题。

项目中会有各种不相关(或相关)的修改,比如有的是修复bug,有的开发新特性。而分支的管理、合并又很麻烦。

只维护一个主干最简单,但是一部分代码修改之后要发布,而另一部分修改还没完成怎么办?

conditional features

我们通常的做法是“部署即发布”。

而条件特性是:部署修改的代码,但是不执行它,何时执行由条件标志决定。

可以理解为在新代码前后有一些 if 语句的条件判断。条件标志是打开状态才执行,这些标志在部署的代码之外管理。

标志可以通过各种形式设置,比如:

所有用户的百分比(如果我们想逐步发布新功能)只对内部人员发布个别少数用户(如热情的粉丝)

总之,条件开关使得我们可以分离产品(代码)更新和发布新特性。

作者  | 2011-12-7 15:19:21 | 阅读(565) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 

北京市 海淀区

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018

注册 登录  
 加关注