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

韩国恺的博客

hanguokai.com

 
 
 
 
 
 

使用 USB Key 登录 Google 账号

2015-7-11 14:14:21 阅读644 评论0 112015/07 July11

2015 Google I/O 的参会者每人获得一个 30美元优惠码来购买 Yubico Security Key ,插入这个 Key 就不用在 Google 两步验证的时候输入一次性验证码了。产品介绍见这里:

https://www.yubico.com/products/yubikey-hardware/fido-u2f-security-key/

https://www.yubico.com/products/yubikey-hardware/yubikey-edge/

第一次使用前,先注册 Key:

登录 Google 账号安全设置,进入两步认证设置,找到 Security Key 。注册一个新的 Key:注册前先拔出,点击注册,插入 key,触摸一下 key 上的按钮,注册成功(由于 bug,第一次会失败,再试一次就成功了)。

使用方法:

登录 Google 账号的时候,还是先输入用户名和密码,进入两步认证的时候现在就可以使用 security key 了,插入 key,触摸一下 key 上的按钮,就登录成功。(由于

作者  | 2015-7-11 14:14:21 | 阅读(644) |评论(0) | 阅读全文>>

如何获得 Google+ 的数字 ID

2015-1-4 16:33:20 阅读663 评论0 42015/01 Jan4

Google Plus (俗称 G+),过去还不支持自定义 URL 名称或者你还没有获得自定义 URL 的时候,每个人的主页链接是这种形式:https://plus.google.com/102248421401104622920/ 。中间那个数字就是你的 G+ 数字 ID 。

但是后来 G+ 支持自定义 URL 了,这个时候,你的 G+ 主页就是这样的了:

https://plus.google.com/+GuokaiHan 。

数字 ID 链接或者 https://google.com/+GuokaiHan 都会跳转到自定义 URL 上。

现在如果你只得到自己的自定义 URL ,比如 +GuokaiHan ,想知道自己的数字 ID 的话,以下两种方法可以获得自己的数字 ID 。

1)在自己个人主页发过的某个帖子上(Post),右键复制自己的个人链接,或者帖子的下拉菜单中的 Link to post 就可以获得数字 ID 形式的链接。比如:https://plus.google.com/102248421401104622920/posts/AscJtdqr9ay

2)通过 G+ API 也可以获得数字ID。

在 https://developers.google.com/+/api/latest/people/get#try-it

作者  | 2015-1-4 16:33:20 | 阅读(663) |评论(0) | 阅读全文>>

几个 Mac OS X 小工具

2014-12-5 1:25:00 阅读806 评论0 52014/12 Dec5

几个 Mac 小工具,给自己留作备忘。

ClipMenu - http://www.clipmenu.com/

系统剪切板工具,可以记录下很多复制记录,设置里面的选项也很丰富。

Alfred - http://www.alfredapp.com/

快速打开 App、文件、目录的小工具。

Spectacle - http://spectacleapp.com/

窗口管理工具,通过快捷键快速将窗口定位

Go2Shell - http://zipzapmac.com/go2shell

一键打开一个当前 Finder 目录所在位置的终端(Terminal)

Command Line Tools for Xcode - https://developer.apple.com/downloads/index.action

开发者必备,如果你不想安装庞大的整套 Xcode,那么可以只安装这个 Command Line Tools 。

其它常用软件:

MPlayerX 。或者 VLC 支持播放列表。

微软的远程桌面连接 Mac 版。

ShadowsocksX ,不过我还是 VPN 为主。

收费软件:

ScreenFlow 录屏、录制课程。

AirServer, OS X 上镜像 iPhone/iPad 屏幕,但其实很少用。

作者  | 2014-12-5 1:25:00 | 阅读(806) |评论(0) | 阅读全文>>

Google Play 中国开发者入门视频

2014-11-27 14:49:06 阅读646 评论0 272014/11 Nov27

2014年11月20日,Google Play 宣布:中国开发者可以向全球130个国家的Google Play用户提供付费应用啦 。同时特别发布了3个中文的视频介绍。除了下面的视频,我另外整理了《开通 Play 开发者商户账号流程》

1. Introduction (Getting Started) (Google Play 开发者新手入门)

2. Google Play Developer Registration (Google Play 开发者注册)

3. Merchant setup in Dev Console (Google 电子钱包商家帐户设置)

视频地址参考:

Youtube 播放列表

优酷播放列表

作者  | 2014-11-27 14:49:06 | 阅读(646) |评论(0) | 阅读全文>>

Google Drive: 在多个目录中共享同一个文件或文件夹

2014-4-8 23:41:20 阅读2527 评论0 82014/04 Apr8

更新日期:2015/03/11 。

在 Google Drive 中,提供的 "Move to" 功能是把文件从一个目录移动到另一个目录,也就是在新目录中出现,同时在旧目录中消失。但有时候我们希望将文件同时放到多个目录中,特别是别人分享的文件,类似于 Gmail 中的打标签的功能。

一、新版 Google Drive

2014年7月,Google Drive 更新了一套新的界面。 新版界面把这个功能隐藏地更深了,但其实还是有的。

Shift + Z :选中一个文件或目录,然后按 Shift + Z 会弹出“Add to”窗口,而不是默认的“Move to”窗口。区别在于 Add to 在添加到一个新目录的同时,并不在老目录中移除。顺便说一句,快捷键 Z 是 Move to,快捷键 Shift + Z 是 Add to 。

移除目录:

如果同一个文件出现在两个不同的目录中,使用界面提供的删除功能会将这个文件从所有目录中删除。但是如果你并不想“删除”文件,而是让这个文件从某个目录消失怎么办?

做法是:点击这个文件,然后在右边窗口的“Details”中下面的 Location 中会列出这个文件所有出现的目录,点击旁边的“X”即可从指定目录中移除。

二、老版 Google Drive

在使用 "Move to" 功能时,用按下 Ctrl 或 Cmd 键选中多个文件夹即可。这样这个文件就会同时出现在多个地方了。如果同时还选中了原来文件所在的位置,那就相当于原位置还在,并且在其他位置也有了。如下图所示,出现了两个选中的文件夹。

作者  | 2014-4-8 23:41:20 | 阅读(2527) |评论(0) | 阅读全文>>

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

2013-4-27 13:43:41 阅读944 评论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 | 阅读(944) |评论(1) | 阅读全文>>

Dart 中的 const 与 final

2013-3-19 3:56:36 阅读1364 评论1 192013/03 Mar19

起初,我也对 const 和 final 的区别感到迷惑,并且在日常的快速开发中这两个修饰符用的不多。因此我查了一些解释,在这里做个整理记录。

概念上说,final 表示不可变,只能赋值一次,初次赋值之后就不能再赋其它值了,是只读变量。而 const 表示常量,更准确地说是编译时常量,因此 const 也是只读的、不可变的。const 和 final 都可以表示不可变,但又有细微的差异。

变量声明

var 或者类型可以声明变量,而 const 和 final 也可以用于声明变量。声明 var 的地方可以用 const 或 final 代替。声明类型的地方可以与 const 或 final 组合使用。例如下面这些声明都是可以的:

var a = 1;

const a = 1;

final a = 1;

int a = 1;

const int a = 1;

final int a = 1;

这里 const 和 final 没有区别,因为变量 a 被立即赋值为一个数字常量。

区别一:final 要求变量只能初始化一次,并不要求赋的值一定是编译时常量,可以是常量也可以不是。而 const 要求在声明时初始化,并且赋值必需为编译时常量。

区别二:final 是惰性初始化,即在运行时第一次使用前才初始化。而 const 是在编译时就确定值了。

编译时常量指的是:字面量(如数字、bool、字符串、List的字面量形式)、其它常量

作者  | 2013-3-19 3:56:36 | 阅读(1364) |评论(1) | 阅读全文>>

Chrome 中的 JavaScript 断点设置和调试技巧

2013-3-14 16:06:32 阅读175050 评论7 142013/03 Mar14

你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容。嗯~,用这两种土办法确实解决了很多小型 JavaScript 脚本的调试问题。不过放着 Chrome 中功能越发强大的开发者工具不用实在太可惜了。本文主要介绍其中的 JavaScript 断点设置和调试功能,也就是其中的 Sources Panel(以前叫 Scripts)。如果你精通 Eclipse 中的各种 Java 调试技巧,那么这里的概念都是类似。写作本文时使用的 Chrome 版本为 25.0.1364.172。

基本环境

Sources Panel 的左边是内容源,包括页面中的各种资源。其中,又分 Sources 和 Content scripts。Sources 就是页面本身包含的各种资源,它是按照页面中出现的域来组织的,这是我们要关注的。异步加载的 js 文件,在加载后也会出现在这里的。Content scripts 是 Chrome 的一种扩展程序,它是按照扩展的ID来组织的,这类扩展实际也是嵌入在页面中的资源,它们也可以读写DOM。编写、调试这类扩展的开发者才要关心它们,如果你的浏览器没安装任何扩展,那么 Content scripts 就看不到任何东西。

Sources Panel 的中间主区域用于展示左边资源文件的内容。

Sources Panel 的右边是调试功能区,最上面的一排按钮分别是暂停/继续、单步执行、单步跳入、单步跳出、禁用/启用所有断点。下面是各种具体的功能区。稍后介绍。

作者  | 2013-3-14 16:06:32 | 阅读(175050) |评论(7) | 阅读全文>>

Dart 性能测试

2013-3-1 20:46:56 阅读1883 评论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 | 阅读(1883) |评论(0) | 阅读全文>>

Dart 与 JavaScript 互操作

2013-2-25 18:56:52 阅读1968 评论0 252013/02 Feb25

Dart 语言为 Web 开发提供了强大的支持,特别适合 Web App。一般情况下,开发者只使用 Dart 即可完成所有的工作,但有时可能还需要与现存的 JavaScript 交互。为了解决这方面问题,Dart 提供了一个名为 js 的库,利用它我们就可以实现 Dart 与 JavaScript 简单的互操作。作为良好实践,应该避免 Dart 与 JavaScript 的紧耦合,尽可能减少不必要的交互并保持二者之间明确的交互界限。

安装 js 库

在 pubspec.yaml 文件添加 js :

dependencies:

js: any

然后执行 pub install 。

在使用的地方导入 js :

import 'package:js/js.dart' as js;

介绍

Js 库允许你在 Dart 程序中访问或调用 JavaScript 的对象、字段和函数,把 Dart 的对象和函数传递给 JavaScript 函数,以及在 JavaScript 中调用 Dart 的函数。js 库本身也是一个 Dart 程序,所以提供的功能既可以在支持 Dart 的浏览器上执行,也可以编译为 JavaScript 在不支持 Dart 的浏览器上执行。

在 Dart 程序中,Js 库使

作者  | 2013-2-25 18:56:52 | 阅读(1968) |评论(0) | 阅读全文>>

Dart 中的 Tree shaking

2013-2-21 13:32:41 阅读1055 评论0 212013/02 Feb21

Web 开发需要 Tree shaking

Web开发者总是希望引用的 js 文件越小越好,这样页面能加载更快。尤其是作为选用第三方库的一个重要参考,因为要用的话就必须完整引用它。但问题的实质是传统 Web 开发中缺少一种自动化的方式来排除未使用的代码。比如,我们只用到了一个库的一小部分功能,却不得不完整引用它。Web开发者真正需要的是一种类似连接器的工具,自动将不需要的代码排除。

Dart 的 tree shaking 技术正是这种工具,不用担心只使用一小部分功能而引用了一个较大的库,因为 dart2js 把没有用到的代码自动排除了。

Dart 语言之所以能够使用 tree shaking 排除不需要的代码,是因为 Dart 程序的结构在编译之后就不再改变了。Dart 不支持在运行时动态改变程序的结构,以及像 eval() 这样极端动态的功能。另外,Dart 代码本身有良好的结构:classes, libraries, packages, type annotations, metadata 等。这样 Dart 可以更加确定程序的结构,更具侵略性的判断出哪些部分可能不会被使用。

JavaScript 一般使用 Google Closure Compiler 或 

作者  | 2013-2-21 13:32:41 | 阅读(1055) |评论(0) | 阅读全文>>

Dart 中的 snapshot

2013-2-20 13:53:31 阅读1097 评论0 202013/02 Feb20

snapshot 及其主要用途

snapshot 是 Dart 程序的二进制序列化形式,和对象在 isolate 中的内存形式接近。

snapshot 的主要目的是提高 dart 程序的启动速度。

和读取源代码相比,snapshot 无需解析源代码,而是直接还原到程序开始执行前的初始状态。

dart 核心库、dart2js 等都会使用 snapshot 提高程序的启动速度。

snapshot 比从源代码加载要快得多,比正常的 JavaScript 启动速度快 10 倍。

而 JavaScript 很难做到这点,因为 JavaScript 的源码会有副作用,不能被实现为 snapshot 。

不管是桌面 Web、移动 Web 还是 server 端程序,快速的启动都是很有用的。

snapshot 特别适合较大型的 Web App ,比如 Gmail 在启动的时候需要预先读取 1MB 的 JavaScript 源代码,但如果是读取缓存在浏览器中的 Dart snapshot ,那么启动时间只需完整读取源代码启动时间的 1/10 。

当前 Dart 团队正在尝试减小 snapshot 的大小,因为这会直接影响到启动速度。

snapshot 除了提高启动速度外,还用于 isolate 之间的对象(消息)传递。

snapshot 的两种执行环境:

对于 Web App,什么都不用做,浏览器会自动使用 snapshot。因为支持

作者  | 2013-2-20 13:53:31 | 阅读(1097) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 

北京市 海淀区

 发消息  写留言

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

页脚

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

注册 登录  
 加关注