Showing posts with label Google. Show all posts
Showing posts with label Google. Show all posts

Saturday, June 11, 2011

SPDY简介

今天在看CTF write-up时发现 有人提到 SPDY这样一个东西, 貌似跟Chrome项目有关, 于是在Geek原始冲动的驱使下了解了一下.

首先SPDY是一个应用层协议, 它被创造出来的唯一目的就是让Web更快、更快,还是更快. Google这家公司似乎很喜欢 “快” 这个东西, Chrome从诞生到现在每次几乎必定宣传自己有多么得快, 搞得大家已经产生了某种心理暗示. SPDY诞生于2009年, 其实这是对外公开发布的时间, 开始研究的时间应该更早. 众所周知, 如今的Web是通过HTTP协议和TCP协议进行传输, 但种种因素导致HTTP传输变得很慢:

  • 每一个TCP连接一次只能发一个HTTP请求, 这个估计是HTTP协议的最大弊端. 想象一下如今的网站已经包含大量的图片、CSS、JS需要加载, 如果一个请求一个请求地发, 那肯定会慢死, 所以浏览器通常都是通过建立多个连接来回避这个问题, 但毕竟治标不治本.
  • 只能由客户端主动发起HTTP请求, 即时有时服务器知道还需要回复其它资源, 它也只能等客户端先发起再回复. 服务器真可怜, 太被动了.
  • HTTP头没有压缩, 而且HTTP头也有一些重复信息, 比如User-Agent就没有必要每次都发来发去, 太浪费带宽了.
  • 数据压缩是可选的, Google认为必须强制要求.

既然HTTP有这么多缺点, 那应该不止Google自己想要解决, 其实是有的, 本着不重复造轮子的原则Google列举了现有的一些改进方案:

  • HTTP pipelining: 以流水线的形式传输请求和数据, 这里吐槽一下, 以前在公司时Facebook的某牛来介绍时谈到了他们开发的BigPipe, 思想也是流水线, 同样也是为了优化Web性能, 不知道他们是不是借鉴了HTTP pipelining, :)
  • SCTP: 用于替代TCP的传输层协议, 提供了multiplexed streams (多路复用流) 和stream-aware congestion control (流感知拥塞控制)
  • SST: 同样用于替代TCP协议 (TCP同学真是众矢之的…), 也可以运行在UDP协议之上.
  • MUXSMUX: 运行在传输层和应用层之间的中间协议, 同样提供了复用流.

但是Google同学觉得以上这些都还不够, 它要追求更大程度的性能提升. 考虑到TCP现在应用还很广泛, 想替代也不是一天两天的事情, 但HTTP就不一样了, 它是应用层的! 所以说有自家的浏览器就是好办, 发明个应用层协议马上就可以上线. SPDY在刚出来的时候Google还在说这并不是用来替代HTTP协议的, 它只是一个中间协议, 但看看 最新的协议文档 里面已经将SPDY分为了两层, 其中一层被描述为HTTP-like, 大有取代HTTP的意图. 可以想到Google已经将提议提交给IETF, 也许未来的某一天我们就不再使用HTTP协议了. SPDY主要有以下一些特性:

  • multiplexed streams, 一个TCP连接将支持无限的并发HTTP请求
  • 请求优先级, 因为现在支持并发请求, 就必须得为每一个请求设置一定的优先级
  • 压缩HTTP头, 去掉多余的头信息
  • 全部请求都是通过SSL加密, Google认为安全网络连接必定是未来的发展方向, 即使加密会微微增加一些传输时间
  • Web服务器将能够主动发起通信, 也就是server push
  • 还有一个类似的叫server hint, 不同于server push的是它仅仅向客户端发送一个suggest, 提示客户端需要发送一个HTTP请求

这些改进到底能有多大提升? Google给出的数据是39%~55%, 在丢包严重或高延迟环境下, SPDY变现更加出色.

要支持SPDY, 除了客户端必须支持外, 还要有相应的Web服务器. 现在已经有 PythonJavaApache moudleRuby 等各种实现.

最后, 如果你正在使用Chrome浏览器, 并且访问Google的网站, 那你已经开始使用SPDY了, 输入 chrome://net-internals/#spdy 还可以了解更加详细的信息.

Tuesday, November 24, 2009

Yet Another Gmail Row Highlight 0.0.1 Released! 键盘流的Gmail利器

昨天花了点时间写了一个Greasemonkey脚本, 功能和上一篇介绍的Gmail - Add Row Highlight (以下简称GARH) 很像, 只不过GARH是当鼠标滑过时高亮, 而我的这个脚本是在使用键盘浏览邮件时高亮小箭头指示的那行. 说得有点复杂, 上图:

Yet Another Gmail Row Highlight

脚本主页是: http://userscripts.org/scripts/show/62644, 不过目前Chrome/Chromium用户还无法使用.

大家多多提意见, 提交bug和建议请到: http://code.google.com/p/fancyweb/issues/list

推荐几个Chrome/Chromium使用的扩展和Greasemonkey脚本

介绍几个我正在使用的用于Chrome/Chromium的扩展和Greasemonkey脚本, 今天Google还公布了官方扩展网站, 相信不久之后Chrome/Chromium扩展将会迅速发展.

  1. Vimlike Smooziee

    Firefox下的Vimperator是我的大爱, 像Vim一样浏览网页, 这是一件既酷又便捷的事情. Vimlike Smooziee即是Chrome/Chromium下的Vimperator, 不过现在的功能还没有后者强大, 只支持基本的操作, 如j、k、H、L、d、u、f、F、gg、G、zi、zo、zz等. 让我们期待以后的发展吧.

  2. gPDF

    有时我们不想下载PDF文件, 而是直接在浏览器里打开看看, 以前的方法是安装Adobe Reader, 这样就会在点击PDF链接时自动使用Adobe Reader在浏览器中打开. 不过Adobe Reader实在是有点庞大, 每次打开都要花很长的时间. 现在使用gPDF扩展可以使用Google Docs来打开, 速度很快, gPDF还提供有Greasemonkey脚本Firefox扩展.

  3. Folders4Gmail

    Folder4Gmail

    这是一个Greasemonkey脚本, 和下一个将要介绍的一样, 属于Firefox扩展Better Gmail 2的其中一个组件. 最新版的Chrome/Chromium已经支持安装Greasemonkey脚本了, 不过还是会发生无法使用某些脚本的杯具. Folders4Gmail脚本的作用是利用Gmail的标签建立树形列表, 如图中所示, 将标签命名为"eBook/Biography", 这样"eBook"就是"Biography"的父目录. 这个脚本对于标签分类很有用处.

  4. Gmail - Add Row Highlight

    这个脚本可以让鼠标滑过的邮件高亮显示, 在邮件很多时可以不至于眼睛看花, XD

Saturday, September 26, 2009

批量获取Twitter好友feed的小程序

2010.1.19更新:
现在不推荐使用这种方法来获取Twitter好友的feed, 因为经过试验当好友数达到一定数目时, 获取的feed列表是不完全的.

曾经介绍过怎样通过Google Reader备份和搜索好友的Tweets, 其中关键的一步就是获取所有Twitter好友的feed, 这样就能通过Google Reader订阅了. 今天抽了点时间把以前那个code2string.py稍微改进了下, 现在只需要告诉程序你的Twitter用户名, 它就会自动完成获取feed和转换中文的工作了. 请猛击这里下载fetch_twitter_feed.py, 使用方法如下:
$ python fetch_twitter_feed.py username1 [username2 ...]
支持多用户名, 运行成功后会生成后缀为.opml的文件, 像以前一样, 导入Google Reader就行了.

Tuesday, August 18, 2009

在Google Reader中备份和搜索好友的Tweets

Twitter in Google Reader

2010.1.19更新:
现在不推荐使用这种方法来获取Twitter好友的feed, 因为经过试验当好友数达到一定数目时, 获取的feed列表是不完全的.

来自Lifehacker的文章: Backup and Search Your Friends' Tweets with Google Reader [Twitter], 介绍了怎样在Google Reader中备份和搜索好友的Tweets.

  1. 首先打开这个网址: http://tw.opml.org/get?user=xiaogaozi&folder=1, 把user改为你的Twitter用户名, 然后将网页的源代码保存为.xml或者.opml文件.
  2. 进入Google Reader中的"Manage subscriptions"页面, 在"Import/Export"标签页中将刚才保存的文件上传上去就行了.

这时你所有Following的好友都会显示在Google Reader中, 你能看到他们以往的Tweets, 也能通过Google强大的搜索功能进行检索.

不过如果好友名是中文的话, 就会被转换为Unicode代码, 我写了个脚本可以将Unicode代码转换回字符: code2string.py. 假设你刚才保存的文件名为xiaogaozi_twitter.opml, 那么执行:
$ python code2string.py xiaogaozi_twitter.opml
然后会生成一个trans_xiaogaozi_twitter.opml文件, 上传这个就行了. 如果没法执行这个脚本, 还有一种简便的方法, 直接在Google中搜索那串Unicode代码就行了, Google会自动将它转换为字符, 百度无此功能.

Thursday, July 23, 2009

调教Firefox 3.5

昨天换上了Firefox 3.5 (以下简称FF 3.5), 是因为昨天才发现比较好的过渡方法, 是不是有点out了...
$ sudo apt-get install firefox-3.5

当我怀着兴奋与喜悦的心情打开FF 3.5时, 我不禁发现这页面是不是有点走样了. 如下图:
New Tab Button
那个打开新标签的图标很碍眼地挡在了第一个和第二个标签之间, 而且由于Vimperator的缘故, 当打开新标签的时候, 那个加号图标不会像正常的那样一直跟着走, 不过对于Vimperator来说这个图标也用不上. 于是我想把它隐藏了, 还原成以前的样子. 在这篇帖子的帮助下解决.

首先进入你的Firefox的Profile folder, 比如我的是: ~/.mozilla/firefox-3.5/5p41abxo.default, 然后修改chrome子目录下的userChrome.css文件, 没有则新建. 添加以下内容:
.tabs-newtab-button
{
  display: none;
}
重启浏览器即可.

接下来出现问题的是"我最喜爱的Firefox扩展"之一的TwitterFox, 很可恶的, FF 3.5的隐私模式 (后面还会再次谈到它) 的快捷键和TwitterFox默认的弹出窗口快捷键是一样的. 不过更可恶的是当我想要改变TwitterFox的默认快捷键时, 它却一直弹出这样一句话: New keyboard shortcut affects only new windows. 没怎么搞懂这句话是什么意思, 反正就是改不了. 在Twitter上发了问题, 不过没人回我. 但我还不想就这样罢休, 终于让我找到了方法. 打开"about:config", 搜索"twitternotifier.togglePopup", 将Value改为"P,,control alt"就行了, 你可以根据你自己的情况修改一下, 我这里把快捷键改为了Ctrl+Alt+P.

最后来说说FF 3.5新增的隐私模式 (Private Browsing). 在我看来, 这是一个完全鸡肋的功能. 虽然我很喜欢隐私模式的浏览方式, 但是FF 3.5设定的这种方式简直太"别出心裁"了, 每次从隐私模式退回来的时候原来的所有标签都要重新加载一次, 这个不仅浪费了时间, 还可能因此丢失掉以前页面上的一些东西, 所以说是完完全全的鸡肋. 相比之下, 我就更喜欢Chrome/Chromium的隐私模式 (incognito), 而且那个图标也挺酷的. 这里有一篇详细比较FF 3.5和Chrome 3的隐私模式的文章.

继续试用FF 3.5中, 昨天TX因为FF 3.5频繁假死已经快抓狂了...

Tuesday, July 14, 2009

Chromium极速安装指南

$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4E5E17B5
$ cat /etc/apt/source.list.d/chromium.list
# Chromium Daily Builds
deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu jaunty main
$ sudo apt-get update
$ sudo apt-get install chromium-browser