Chrome的tab search

原谅我愚钝,今天才在无意中发现了Chrome浏览器的这个小功能,非常好用,特此推荐。

是这样的:我现在一直习惯用http://dict.youdao.com/ 的有道在线字典来查一些不认识的单词,所以每次碰到生词就在Chrome里边开一个新的标签页,在地址栏里边输入http://dict.youdao.com/,然后进入有道首页再在搜索框里输入单词,按回车键等结果。所幸Chrome有网址记忆,这个网址太常用了,所以基本上只要打dic三个字母以后自动补全的网址就出现在提示栏第一位了。

可是今天我才发现:在打完三个字母以后,可以直接按一下tab,地址栏会直接变成Youdao Dict的搜索栏,这样继续在地址栏里边输入单词就可以了,不用去访问有道的首页。就像这样:
tab_search

 

 

回车以后就直接出现查单词的结果了:
tab_search2
这个功能是Chrome浏览器对各个网站提供的通用接口来实现的,而很多网站也早已经按照Chrome定义的接口支持了这一功能。比如wikipedia,还有知乎,百度知道这些时不时会查一下的地方。Wordpress也支持这个功能,比如要查我blog里边的台湾游记,就可以直接tab,然后输入台湾就可以了。

要在自己制作的网站中加入对这个功能的支持非常简单,只要在网站首页的html文件head标签里加入一个超级链接就可以了。具体说明在这里:http://www.chromium.org/tab-to-search

PS: 实测了一下IE11仍然不支持这个feature。

用bing图片做桌面

微软bing搜索引擎的一大特色就是每天都会放出高质量的图片,不论是收藏还是用来做桌面都很不错。打开bing主页http://bing.com 在右下角就有一个下载按钮可以下载当天图片。如果觉得每天自己下载图片换桌面太累的话,还可以安装一个叫bing desktop 的软件,这个软件会在电脑启动的时候一起启动,自动帮你换桌面http://www.bing.com/explore/desktop

我用了一段时间的bing desktop,后来觉得它集成了各种功能太笨重了,比如在桌面上显示一个搜索框,随时可以搜索之类的;还比如bing词典。可惜我对这些额外的功能都统统没有兴趣,只是想换桌面而已。现在已经流行简洁易用的设计了,不知道为什么bing的PM还是不能意识到这点。其实收集一下数据就知道了,我打赌一半以上安装这个软件的人都只用它换桌面。

后来发现每次电脑启动都变慢了,bing desktop或许还做了一些额外的事情,而我的电脑硬盘还是不争气的HDD,每次在电脑启动时候总是显得有些笨重。于是bing desktop就被毫不留情的卸载了。

前段时间为了熟悉一下Python写了个脚步自动下载bing的桌面图片然后换桌面,只要把它加到电脑的计划任务里边就可以代替bing desktop自动换桌面了,顺便把图片保存到OneDrive。

代码在https://github.com/hwind/hwindCode/blob/master/Python/practice/SetBingImageAsDesktop.py

不过不写code的人用起来还是有点麻烦,首先你需要安装Python,还得设置一下计划任务什么的。

PS: 并不是每天的bing主页都可以用来做桌面,有时候主页会显示一个动态图片,它不是普通的图片格式文件。

Surface在我们家重新获得重视

公司发的Surface平板从拿到手之后基本处于闲置状态。除了刚开始几天图新鲜,后来的状态基本是:仍在桌子上两个礼拜没人碰,突然有一天想起来要拿起来玩玩儿,结果打开就发现没电了。拿去充电,充着就忘记了;万一没有忘记,充好电打开就提示系统要更新要重启,更新完又忘记它了。。。总之一直都觉得没什么用。搬到西雅图以后,竟然又从公司领了台Surface回来。开始也没在意,一直扔在那里用IPad。

在国外最痛苦的莫过于看视频了。各种美剧,英剧就不用说了,视频网站基本都会根据IP地址直接拒绝访问。好在我们对国产电视剧也情有独钟。每天拿着IPad看优酷爱奇艺乐视,运气好了一分钟卡一次,运气不好了一秒钟卡一次,那叫痛苦啊。突然有一天,不知道为什么用Surface开了乐视,没想到旁边IPad卡到不行的时候Surface竟然如行云流水一般流畅。好奇之下,又挑了几个不同的片源比较了一下:Surface上播放起来都很流畅。从此Surface就在我们家复兴了。

其实也没什么特别的用途,根本不用装App—-直接打开IE浏览器看视频,基本就是乐视和爱奇艺(优酷好像还是有点卡)。没有具体研究过为什么Surface播放视频流畅而IPAD卡,显然不是带宽原因,都是从家里的wifi连过去的。

再后来,又发现Surface的几个用途:

  • 照片都存在OneDrive上,在Surface上也不需要同步到本地,想看的时候直接打开,基本上很流畅。这样即使Surface存储不大,却可以毫无压力的拥有上百G的照片。其他OneDrive上的文档也一样。之前在国内这个是做不到的,因为网络访问OneDrive的速度非常慢。
  • Zaker还有豆果美食等几个App做的还不错,拿来每天看看新闻研究一下美食。
  • 直接打开douban.fm连上蓝牙音箱放歌儿听。
  • 偶尔要搜点东西比较快,右手一划拉搜索框就出来了。

总结一下:给Surface找到了些适合的事情。大多数时候那些App都没什么用,直接打开浏览器就可以做很多事情了。

今天看了一下Google的Chromebook,现在貌似很火,价格比Surface还要便宜。Chromebook对wifi的依赖比较强,没有wifi的环境只能做少量的事情。不过Surface如果不能上网的时候又能干嘛呢@@

大数据的应用

今天我们来聊一下,如果你/某企业已经有了大数据的硬件平台,那么到底能用它来做什么呢?

http://people.ischool.berkeley.edu/~hal/Papers/2013/BeyondBigDataPaperFINAL.pdf 这篇来自Google首席经济学家的论文对这个问题有简洁明了的阐述:

  1. 数据的抽取和分析
  2. 私人化/客户化定制
  3. 连续不断的实验
  4. 基于更好的监测而提供新型的服务套餐/合约

直接翻译过来有点拗口,不过具体的例子就很好理解了。今天先说数据的抽取和分析,几乎每个谈到大数据的人都会谈到这一点,这是其最直接而普遍的应用。

比如你提供了一个网络服务,你很想知道这个服务的运行和使用情况,那么怎么办呢?很简单,记Log(日志)就是了:”几点几分,谁,来自哪个IP,访问了哪个服务,成功还是失败”。早些年Log一办就用来监测系统运行是不是正常,通常系统管理员写一些Perl脚步扫描一下就完事儿了。也有人干脆把Log写进数据库,这样用SQL语句就可以查询,非常方便。 题外话:突然想起来之前碰到的一个项目,Log全部记到数据库,后来每天海量的SQL语句插入,查询,终于扛不住了。

后来出现了Hadoop这种的分布式系统,之前做不到的事情可以做了: 公司的老板想知道产品的使用状况;产品经理想知道某个新功能是否受欢迎;市场营销人员想知道到底谁才是目标客户;系统维护人员想知道服务器负载。

这种系统一般的结构如下:

  • 首先把Log集中到HDFS文件系统,然后用Hadoop Cluster访问HDFS。
  • 具体的查询语句由用户向Hadoop Cluster提供:用户既可以写MapReduce Job来告诉Hadoop Cluster要怎么处理日志,也可以直接写Hive script. Hive是一种语法很SQL非常像的语言,它首先赋予Log以结构化的定义,然后像SQL语句一样做查询。
  • Hadoop运算的结果通常会存储到数据库里。因为运算结果已经是处理过的数据,数据量不大,存储到数据库方便之后快速查询,并且可以和很多现有的基于数据库的应用结合。
  • 最后无论是老板的,产品经理的,市场营销人员的,还是系统维护人员的问题,都可以通过从数据库生成的报表来回答。最简单的比如用Excel连接到数据库就可以做报表,复杂的当然有各种各样的报表产品。

在云计算平台逐渐发达的今天,很快就可以搞出这样的系统。即使不用云计算平台,照着文档搭个Hadoop出来,然后部署这样的系统也并非难事。大数据从此不再是什么神秘的,只有少数几家大公司才玩儿的了的事情。

可是如果大数据之做到这个程度,那就太初级了。很多地方在聊大数据,最后无非是在海量数据上计算一个平均值AVG,最大值最小值MAX,MIN;或者按某些东西分分类GroupBy;再或者把两组数据关联一下Join。这几个函数可是初中生就会的。。。所以在大数据很热的今天,机器学习人工智能也很热。一直没有勇气去深入研究一下机器学习人工智能的理论,所有的知识还停留在读书时候读的一点材料。不过我相信只有在大数据集上运用统计学的方法才能得到更多有意思的结果。

现在已经有越来越多的大公司小公司正在把机器学习人工智能的算法搬到cloud上来,我觉得这是个不错的方向。如今这些算法的门槛太高了, 一般的程序员都不太清楚,更谈不上应用了。整个IT产业的历史都是不断把各种技术封装抽象到不同的层次模块,希望机器学习人工智能的最新成果快点被模块化。

 

大数据,要怎么玩

大数据,云计算和商务智能是时下很流行的几个词。那么一个企业想要做大数据分析,要怎么玩,有要花多少钱呢?

做大数据分析首先要有一套Hadoop集群来处理数据。我们假设某企业每天有100GB的数据需要存储并做分析,其所用的Hadoop集群有4个结点 – 这算是最起码的配置,如果数据太少了根本没必要玩儿大数据。部署一套Hadoop集群有多种解决方案:

  1. 自己买机器,然后去http://hadoop.apache.org/ 安装各个组件自己搭建
  2. 自己买机器,然后安装某些定制过的Hadoop集群。比如http://www.cloudera.com/http://hortonworks.com/ 都是在Apache开源软件的基础上做的集成和扩展。这样部署起来更方便,有问题了也可以找相关的公司咨询解决方案(它们也是这么赚钱的)
  3. 使用Amazon的EMR, http://aws.amazon.com/elasticmapreduce/ ,在amazon的云计算平台上创建一个Hadoop集群。
  4. 使用Microsoft的HDInsight, http://azure.microsoft.com/en-us/services/hdinsight/,在Microsoft的云计算平台上创建。

从技术和可维护性的角度来说,我是坚决赞成使用云计算平台的解决方案的。随便想想前两个方案吧,先要买机器: 买什么配置的机器得自己研究,买多少台呢?多了浪费,少了又怕不够用。买回来得有地方放着吧,要机房要稳定供电要提防着机器罢工。然后还得转软件,得专门雇个懂Hadoop的人,其实也没什么大事儿,就是配置一下系统维护一下,可是又不能找临时工,不然哪天系统出问题了找谁去修呢?

我们可以算一下方案3,4的花费有多少:

Amazon EMR按节点收钱,以General Purpose – Current Generation m3.xlarge为例,每小时的价格是$0.35 (虚拟机的价格加上EMR的价格之和 )。 那么2个控制结点(master node)以及4个核心结点(core node)每月的费用大约是0.35 x 6 x 24 x 30 = $1512. 存储另外收钱,每天100G那么每个月3000G的数据,费用大约是0.0295*3000=$88.5。 除此之外数据的读写传输还有额外费用,暂且不计。每个月费用大约在$1600左右,如果数据一直保留那么后来的存储费用会越来越高。

Microsoft HDInsight收费的方法类似,以2个头结点(head node)和4个数据结点(data node)为例,每个结点$0.32每小时,每月大约$1382。数据存储$0.024*3000=$72,合计大约$1450左右。我比较了一下,Microsoft的A3机器比amazon的m3.xlarge内存要小(7G VS 15G)。 所以这样看来的,两家运营商提供的Hadoop集群价格不相上下。

所以使用云计算平台的Hadoop,每个月花费至少在$1500到上下。不用想了,一定比自己搭系统便宜,雇个人维护系统每个月工资也得$1000了吧,还有机房的房租,电费,硬件维护升级的费用。。。

等等。。。刚才我们假设是4个结点,如果真的做点用来做一些应用的话,4个结点就太少了,那么增加到十几二十个结点的话呢?每个月就要$7500了。对于中小型企业来说也算一笔不菲的花销,对大企业还好。所以虽然云计算平台有优势,虽然目前Amazon和Microsoft都推出了Hadoop,但是用户数量并不是非常多,价格门槛比较高也算是一个重要因素:随便用用就要成千上万的花钱,谁敢随便用啊。

 

那么这个价格是否还可以更低呢?答案是可以。 看下现在Hadoop的用法,每个客户都要创建自己的Hadoop集群,系统运行起来就开始收费。显而易见这种做法并没有利用到云计算的优势:在多个用户之间共享资源,以提高资源利用率并降低价格。每个客户的Hadoop集群都不可能一直在使用,总有忙时闲时,闲的时候就是在浪费。

实际上amazon提供了另外一些类型的虚拟机:Reserved Instance针对低,中,高的利用率提供了三种不同价格,如果你认为自己的Hadoop集群利用率比较低,可以选Light Reserved Instance,每小时价格会便宜。还有一种Spot Instance,其价格根据竞价机制决定:amazon会根据系统的当前负载情况来定价,然后客户出价来bid,bid到之后可以使用直到用户选择停止或者amazon的价格增长。

Microsoft方面就做的比较差,没有这些灵活的选项,以至于客户不得不频繁的创建然后删除Hadoop集群,因为不删除放在那里就要收钱。

其实amazon提供的方案对客户来说也非最佳选择。如果客户自己并不清楚自己的利用率怎么办,或者利用率经常变化难以预测怎么办?最直接的方法是按需收钱:试想一下,作为客户,我只是想去分析一些数据,我凭什么要在乎创建什么样的Hadoop集群,要多少结点,多大负载,平台完全可以帮客户决定这些事情,帮客户把运算需求动态的分布在若干结点上,算完以后用了多少CPU收多少钱,多么简单。

期待云平台上的Hadoop集群能继续改进,真正利用到云的优势。

推荐一下百度云

现在的生活已经越来越依赖于云存储了,从几年前用Dropbox存一些常用文档,到去年把几乎所有的文档(视频除外)同步到Skydrive,再到最近看到google drive大降价考虑转移到他家。云存储好处显而易见:再也不用担心电脑宕机硬盘崩溃,也不用费心去买移动硬盘备份资料,可以再各种设备上访问到我需要的文档(这一点实际上是假的,因为Skydrive 访问速度实在令人厌恶)。

昨天试用了一下百度云。因为以下三点推荐:
1. 同步速度非常快。我试验了大约600M的文档,在家上传下载速度大约都能达到800k-1M。
2. 用位于东亚和美国西部的机器分别测试了一下访问速度,都很快,适于全球范围内的文件共享。
3. 最重要的是,他家现在在搞活动,安装一个移动客户端登陆一下就送2T容量,2T啊。

可以使用百度云来存储共享音乐,视频,电子书这类文档。容量足够大,对安全隐私的担忧比较低。有需要的同学可以去注册一个。
Capture

提高wordpress blog页面加载速度

由于我的blog虚拟主机在国外,而且这种共享主机的性能实在差强人意,因此在国内访问blog的速度一直都很慢。另外,因为写游记,大多页面里都包含了不少图片,图片的加载速度成为了整个页面加载速度的瓶颈。最近稍微研究了两种方案来提高图片加载速度:

1. CDN
CDN是Content Delivery/Distribution Network的缩写。简单来说,就是通过一系列分布于全球不同位置的服务器组成的分布式系统来保证网络内容访问的高可靠性(high availability)和高性能(high performance)。比如同样一张图片,复制两份分别放在中国和美国的服务器上,根据访问用户的所在地,有系统自动决定从哪台服务器来做响应。很显然,中国的服务器响应中国用户的速度会快很多,省得比特流跨越太平洋。

CDN适合用于图片,视频,文本这样静态的互联网内容,能够大大提高访问速度。感谢骏骏的帮助,我才知道国内外都有一些CDN的服务提供商,比如http://www.qiniu.com/注册之后就有免费的10G容量,对于个人用户来说足够用了。

使用CDN也很简单:写blog的时候把图片上传到CDN上面,然后把URL贴进文章里边就可以了。别人访问blog的时候,浏览器会自动访问相应的CDN服务器去加载图片。这样图片就能快速加载了。另一方面,图片不从wordpress的虚拟主机里加载,也可以降低虚拟主机的负载。

我最终没有选择这个方案。主要原因是不希望把图片放在另外一个CDN服务商那里,否则我得再花经历去维护这些图片,而放在那里的图片以后迁移备份都可能会有麻烦。另一方面,原来文章里的大量图片需要迁移过去,也不确定迁移的难度有多大,比如很多的URL Link是否需要更新。

2. 单独host自己的图片服务器
其实这是一个CDN的简化解决方案。我的需求是提高blog页面在国内的加载速度,并不需要有遍布全球的CDN网络,只要有一台位于中国的服务器提供图片访问就足够了。而之所以选择自己host,一方面是因为手头恰好有一台Windows Azure的虚拟机可以利用,另一方面是可以拥有完全的控制权,方便对图片的管理备份,也省得把自己的图片在网络上到处存放。

过程很简单:在Azure VM的IIS 服务器目录下放一个文件夹,把wordpress目录下wp-content/uploads里边的内容用ftp的方式copy过去就可以了,这样所有blog图片的目录结构和新的IIS服务器下是完全一致的。比如http://hwind.me/wp-content/uploads/2014/03/Capture2-300×276.jpg这张图片wp-content/uploads/2014/03/Capture2-300×276.jpg这段路径在两边完全一样。
接下来就是要解决URL重定向的问题。 http://hwind.me会访问到wordpress的虚拟主机,怎样才能让浏览器知道如果后面是访问图片的话,需要去Azure VM的主机上取内容,而不是在wordpress的虚拟主机上呢?Wordpress支持URL Rewrite的方法来实现这个。简单的说,就是可以在根目录下的.htaccess文件里定义一些URL转换的规则,在浏览器真正访问一个URL之前,这个URL的内容会根据这些规则做转换。

为了满足我的需求,只需要加入以下两行config就可以了
RewriteEngine on
RewriteRule ^wp-content/uploads/(.*)$ http://life.hwind.me/blog/wp-content/uploads/$1 [R=301,L]

这个规则就是说,凡是以 wp-content/uploads目录下的资源,都改为去http://life.hwind.me/blog/wp-content/uploads下相同的路径下访问。而http://life.hwind.me就是我Azure VM主机上IIS服务器的地址。这样就实现了重定向。

最终采用了这个方案,所有的文章都不需要做任何更新就可以实现加速访问。有兴趣的人可以自己试一下。

关于费用:CDN服务商提供10G的免费空间,个人使用足够。Azure VM的主机small size一天大约2刀,相比之下也算费用不菲了。当然,一个主机可不仅仅是能做图片服务器这么简单。

用时间线来写游记

时间线已经不是什么新鲜的东西了,很多流行的不流行的网站都会时不时用它来发布新闻,比如前一阵的MH370事件中很多网站的新闻就搞成了时间线。这样条理性强,用图文甚至视频并茂地展示生动有力,同时支持非线性的阅读方式。

发现一个好玩的东西,可以简单快速得创建自己的时间线。效果美观,又来写游记记日记是不错,偶尔给别人做个demo也是很好的。
喜欢读英文的朋友直接看这里:http://timeline.knightlab.com/

创建

  1. 从这个网站下载一个google sheet 模板
  2. 根据模板填充你需要的内容。主要就是start time, end time, headline, text, media之类的。media里边可以提供图片,视频, google map location之类的URL。 它支持Twitter, Flickr, Google Maps, YouTube, Vimeo, Vine, Dailymotion, Wikipedia, SoundCloud 等各种各样的多媒体源。

    Capture

  3. 编辑好之后保存,然后发布到网络。—-这时你会得到一个URL,别人通过这个URL就可以访问到这个sheet.

    Capture2

  4. 再把刚才得到的URL粘贴到网站Step 3的编辑框里。

    Capture3

  5. 网站的Step 4会告诉你一个URL, 把这个URL嵌入到你想发布内容的html里边就可以了。

    Capture4

更新
时间线内容的更新更简单了,只要编辑你保存在google drive上的那个doc,再重新发布就OK。 所以可以创建好时间线以后通过编辑表格的方法来做记录和更新,用来写日记是不错的。

随便做了一个台湾游记的时间线,就写了一天的,以后可以慢慢加。

在Windows Azure VM上搭建VPN服务

Azure VM天然可以翻墙,另外对很多国外网站的访问速度都很快,比如windows app store。因此利用Azure VM搭建VPN服务可以大大方便工作学习生活。

其实步骤非常简单,我主要参考这篇guidance:http://www.thomasmaurer.ch/2012/07/how-to-install-vpn-on-windows-server-2012/

有几点上文没有提到的需要强调一下:
1. 对于SSTP服务,由于需要一张对应Azure VM的Cert,而一般人很难搞到CA Cert,通常只能自己签一张私有的cert。因此要把这张私有的cert放到所有想要连VPN server的机器的Cert Store里边,local machine\Trusted。

2. 安装VPN服务的同时,也要安装NAT服务。否则只能连到VM,不能通过VM访问internet。要在config tool中选择NAT->New Interface,添加一个接口。

3. 一定要follow guidance用静态IP地址,因为默认没有DHCP服务。

4. 客户端连接时,要输入machine name\User name。用.\User name无效。

然后就可以使用VPN了。
最后吐槽一下,没有VPN的时候在国内使用微软服务经常很慢,比如今晚连Azure Portal和SkyDrive都打不开。我开始觉得选择Sky Drive存贮我大量的文档照片是个错误的决定,关键时候用不了干着急没办法。

—-from my surface