微软LiveLabs Pivot浏览器试用

Pivot是Microsoft Live Labs研发的新一代浏览器,进入live labs的官网(http://livelabs.com/),首页第一个项目就是Pivot(http://www.getpivot.com/),官方说只可以在英文版的Win7上进行安装。今天终于拿到了Pivot的安装码,于是安装试用。大家都知道Live Labs最擅长的是图形处理,所以对这款新一代浏览器的UI我还是抱了很大的期望。

安装过程还是很顺利,只是后边导入IE数据的时候有些慢,因为平时几乎不用IE,所以本来数据就很少,但仍然倒了好几分钟,我个人分析可能是Pivot在对这些数据进行必要的分析和数据结构重组。

安装完成打开Pivot,第一感觉就是:这完全不是IE。淡蓝色的主界面风格,非常的干净,清爽,没有Windows标题栏,顶端就是导航栏,主体是像chrome一样的历史记录的豆腐块,最底下是一派按钮,主页、历史记录以及标签栏还有推荐的Collections。

打开一个Google日历,因为这个有很多JS,来测试一下Pivot对JS的解析效率,并跟Chrome做一些对比。从感观上,打开速度貌似 Pivot要快一点,但运行起来似乎Chrome更加流畅,但差别并不明显,不仔细感觉是感觉不到的。从这一点上看,Pivot跟IE比绝对是一个质的提升。

但打开两三个大JS页面以后,就突然觉得机器有点卡了,于是打开任务管理器去看。Pivot会给每一打开的页面,分配一个渲染器(TridentHostServer),独立于一个Pivot主进程之外。页面有动作的时候这个渲染器就会占用大量的CPU和内存。于是我拿新浪体育的首页做测试,这个页面的数据比较多,而且效率不高,我觉得适合测试。当浏览页面的时候,渲染进程会占用50%的CPU,也就是跑慢一个核。内存大概在 60M上下,而主进程却占用了130M左右的内存。从这个角度讲,Pivot的性能远远未达到可以发布的程度,还有很长的一段路要走。

浏览简单的看完以后,看历史记录的一些操作,可以说Pivot把浏览记录的分类和搜索带到了一个新的层次,否则他们不会把主页按钮旁边这么重要的位置给历史记录。历史记录有两种浏览视图,列表方式和缩略图,又可以按照网站,搜索记录,日期和浏览数来进行分类,而且可以把每个页面细化到最小粒度,另外还可以使用各种条件进行搜索。这是功能上,UI上做的就更到位了,支持放大缩小,带惯性滑动等,让人感觉这中浏览体验就是为多点触控屏而生的。到这里,稍微有点了解微软只支持win7的意思了。

这两个比较引人注目的功能之后,就是一些小的设计,很有意思。比如地址栏左边的一个GO按钮,这里提供了历史记录,标签和筛选的快捷方式,相比 chrome只能通过快捷键或打地址的方式更加傻瓜了,也就更友好。还有就是前进和后退的缩略图预览,更加直观。还有就是主界面左侧的导航栏,是IE的经典风格,不知道是为了照顾用户是习惯还是什么。另外,这个版本的Pivot还提供了Tips功能,打开Tips几乎在每一个地方都会有个气泡,告诉你这是什么,干啥用的。

Pivot是一个款很强大的浏览器,跟Bing整合又非常紧密,而且UI也一改之前的风格,并且加入了很多先进的UI技术,但目前来看这种为每一个页面开启一个渲染器进程的设计,似乎是有些霸道,占用了太多太多的系统资源,当然我们相信微软会在以后的时间里,对这个渲染器进行大量优化,使之能用。

总的来说,Pivot是一款值得期待的产品,是一款可以跟当前的Chrome媲美的产品(我的意思是如果Chrome仅仅是浏览器的话)。

最后,附上我的安装码,还剩下9次:1CAA E85C 1C96 99A6。大家可以在第一段里给出的地址去下载。

【补充】另外一个邮箱申请的也到了,这个可以用10次:A6BF E975 FADF A133

貌似我很少给微软说好话,但这个Pivot的确让我打心里期待,哈哈。

约瑟夫问题的解答

约瑟夫问题是一个很臭名昭著的算法题,今天闲着没事在网上乱逛,又看到了这个问题,在大脑里搜索,记忆中已经找不到这个算法的描述了,于是乎从0开始又做了一遍。这里是一个比较传统的算法,对题目描述的完全模拟,比较笨,复杂度姑且认为是o(n)吧。之后我会考虑江湖上曾经盛传的一个逆向思维的算法,貌似效率要好一点,我做出来了再写文章。

闲言少叙,说归正传。问题描述(来自互联网):n个人围成一圈,每人有一个各不相同的编号,选择一个人s作为起点,然后顺时针从1到k数数,每数到k的人退出圈子,圈子缩小,然后从下一个人继续从1到k数数,重复上面过程。求最后推出圈子的那个人原来的编号x。

解题思路(来自我本人):这明显是个循环问题,而且是可知的有限循环,循环次数n-1,所以就for吧。

一般来说从正向去考虑,头脑中出现如下场景:就是n个人排排坐,然后随便找个人,告诉他数1,然后他就数,接下来按照顺时针或者逆时针方向走下去,数了一圈又一圈,知道有个倒霉蛋数到k,当然他也可能是幸运儿,如果最后剩下的那个要被扔到河里之类的。基本就是这么个思路,然后按照数据结构的思想去建模,应该是个头尾相接的链表,然后元素被一个一个的拿掉。

至于算法,首先我需要构造一个n个人的数组,为了图省事,我把它做成2维的,如下:

1 => 1 => 1

2 => 2 => 2

3 => 3 => 3

...

n => n => 4

这是一张map,第一列是下标是内存偏移量,不可变,或者变起来麻烦,所以有了第二列,作为序号;第三列数字是这n个人的原始编号。这样构造数组的原因是,在运算过程中,人会不断的减少,所以序列的序号会变,我们变第二列,而最后我们需要知道这个人的原始序号,直接从第三列读取就OK了。

其实还有个办法就是把每次序号变化记录下来,这样会节约空间,但是我认为这些都不是核心的东西,所以无所谓,就这么办吧,如果有人追求完美可以搞一下。

然后就是从中一个一个的把元素抽掉,我们完全模拟题目描述:

设有n个人,编号为0,1,2...n-1,数1的人的编号是s,最后数到k的人出局(n,s和k是整数, -1< s

则,第一轮出局的人的编号是o (o = s + (k % n) - 1),此人出局;进入下一轮计算:s = o + 1,让o他之后的人编号向前滑动一个,覆盖o,n -= 1。根据新的s和k值进行计算,依此循环,直到n=2的时候,那个最后留下的人x = s,然后通过s的地址去那个2维数组里找到相应的号码就OK了。

以上就是这个最本,最直接的算法:写出来就是一个for(;n>1;n++) 的一个循环,具体的代码实现就不写了,很简单,有兴趣的同学可以试试。

接下来想一想那个江湖上盛传的一个逆向解答的,就是从n=2开始的算到n=n,这个算法的复杂度貌似会更低,稍后奉上,敬请期待。

我不喜欢的和我喜欢的,另外谢谢你们

最近琢磨自己到底喜欢什么,不喜欢什么,想想应该是这样的。

对于书,不看励志类,绝对不看,感觉那绝对骗人的。另外,喜欢看人生丰富而且有思想的人写的东西,这种东西看起来比较耐人寻味,虽然语言可能晦涩一点。

对于人,不喜欢没思想的,遇到事看不明白,想不清楚,再聪明也白费。喜欢有头脑的,不是聪明,而是有头脑,有头脑的人在关键的东西上总是能想的很明白。

对于工作,喜欢技术导向的,这样的公司做起来总能充满激情的向前走。不喜欢销售导向的,而且不仅仅是不喜欢,甚至是深恶痛绝,没有原因,就是不喜欢。

对于事业,喜欢自己的,就是去创造一个的那种成功,虽然挺难的,但不妨碍我喜欢。不喜欢站在巨人的肩膀上,说实话,那种感觉真的不太好。

对事情,不喜欢把一切都想的巨清楚,巨明白,没用,会让人畏首畏尾。喜欢想到做到,可能有时候会让人有点无语,但只要有个目标,那么只要想清楚当下要做好的一件事就OK了,去做。

我这个人可能有点偏激,喜欢的东西缺点也变成有点,不喜欢的东西真的是一无是处,而且几乎不太可能对某个东西的态度。

想了很多形容自己的词,想不出来合适的,感觉有点小孩儿,有点死心眼儿,有点格格不入,有点非主流,最后一个最贴切的词应该就是:高嘉峻!

另外,最近想清楚了意见我认为很重要的事,就是真的要感谢两个人,一个人让我成为了一个理想主义者,可以不迷失在这个灯红酒绿,充满物语的世界,能抱有一个还算纯的梦想,并且肯为之奋斗,并且舍弃很多;另一个人让我没有彻底中了理想主义的毒,让我在追求梦想的同时也还顾及着自己生活的这个时代,让我不至于像李白老师那样,愤愤过一生。谢谢你们!

写给仍然在大学奋斗的兄弟姐妹们

刚才在浴室,一直在想写这么一篇东西需要做哪些功课,最重要的是明确自己的形象,这样才不会说错位的话,说出来的东西也就不会太偏了,当然也就可以让那些道不同的人可以明确的知道,我们是不相为谋的。

客观的说,我是一个不太主流的学生,但从学校走出来,我自信走在了一个主流的路上。因此,我不想聊太多大学生在学校里应该做什么,只以一个过来人的身份,说说当来到一个从学校进入社会的门口的时候,我是如何选择的,希望能给大家一些借鉴。

在大三的那个暑假,我开始投简历,但是看到大家在各种各样的求职网站上翻职位,投简历的样子,我觉得我的工作不应该是这样找到的,我远远没到一个为了工作而工作的年龄,我们也远远没到一个需要尽一份社会责任的年龄,我工作是为了让自己学习和成长的要求得到满足。于是,我开始在Google上查我认为值得我加入的公司的招聘职位,不可否认,这样的找工作命中率的确不高,当周围的同学一个一个的都开始了朝九晚五的生活的时候,我还在Google着我渴望的职位。

终于,一天下午我接到了HP的电话,但当我走进他们的办公室,我发现这与我想象中的工作完全不同,是完全不同的技术方向,于是我表达了我的意思之后,离开了。然后是一家通信公司的面试通知,当我开始工作三天后,我发现这家公司的气氛距离活力,激情这种作为一个优秀技术团队必须的素质太远了,于是我再次离开。直到我接到第三个电话,Yahoo!的电面,我觉得这可能是一个我现象中的团队,于是我离开了上海,来到一个完全陌生的城市开始了全职实习。三份工作,从接到第一个电话,到决定不去或拿到Offer,周期都没有超过24小时,我想这并不是偶然,这应该是我这种Google找工作的一个特点吧。

来到这个团队,开始了长达1年的实习,但就在我毕业的那段时间,实习整整1年的时间,由于公司战略的调整,我开始加入一个新的团队,开始了完全不一样的工作。突然,我发现这个团队的发展方向和当下的工作状态,已经和之前的完全不同。我开始思考一些问题,我发现当下最适应自己发展的似乎已经不是在这样的一个工作中继续慢吞吞的走下去。于是我开始酝酿这下一次转身。

这些,就是我这个毕业4个月的人的一些求职经历,希望可以给大家一些借鉴,我讲不出什么面试技巧,因为我仅有的两次面试,都是单刀直入的聊技术,这没有技巧可言。至于简历,也只是把自己会的东西和做过的事堆在那张纸上,仅此而已。

我认为我做事有一个很重要的原则,那就是“想清楚”,想清楚一个目标,一个很明确的,一个很终极的目标,想清楚,想的清清楚楚,反复确认自己的确要做这件事,接下来,开始为了达成这个目标,做好当下最该做的事,即使这件事在别人看来可能荒谬,可能不可思议,但只要你曾经反复确认过那个终极目标,那么就去做这个荒谬的事吧,因为他是对的!一件事,不会因为他荒谬或是不可思议就成为一件错误的事。

事实上,完全不需要,或者说千万不能把达成这个目标路上的每一个细节都想的清清楚楚以后再动手,且不说这些细节你不可能面面俱到,也不说想清楚这些你需要多少时间,仅仅是因为你想清楚以后会让自己瞻前顾后,畏首畏尾,就不应该去做这种愚蠢的思考。我认为,为了最终目标而固执的去做一件看似荒谬的事才是最理智的选择,而想清楚每一个细节后,谨小慎微的前行真成了不可理喻的行为。

所以,当你为了那个目标,而离开某个城市,拿着连房租都付不起的薪水,开始实习,或者辞去一个似乎几乎好过周围所有朋友的工作,而开始过着下岗职工的生活,都不要紧,只要曾经对自己说过,我要做到,那么只需做就是了。

配置一个能用的VIM

若干年前,我知道了世界上有vi这么个东西,后来我接触到了vi,并且开始使用vim进行工作,本着磨刀不误砍柴工的原则,对vim的配置研究了一下,也有一些新的,但迟迟没有写出来跟大家共享,今天闲着没事,就跟大家分享一下。各种原因,很多软件还得指着win的环境,所以不能完全抛弃 Windows,所以Linux下边的配置就不说了,跟Win下边的gvim异曲同工。

把我自己在Windows下边gvim的配置贴一贴吧。另外搞了几个小插件。

首先是常规的一些配置和说明:

colorscheme murphy "这是GVIM一个配色方案,默认的,看起来比较舒服
syntax on "语法高亮
filetype on "文件类型检测
filetype plugin on "这个据说是补全需要的
set nocompatible "关闭vi兼容,vi兼容太恶了……
set number "行号
set autoindent "自动缩进
set smartindent "也是缩进
set showmatch "匹配,括号之类的
set hls "搜索高亮
set incsearch "搜索自动定位
set mouse=a "鼠标模式,还可以等于v,至于习惯哪一个,仁者见仁了
set background=dark "顾名思义
set tabstop=4 "缩进4字符
set shiftwidth=4 "一个tab
set guioptions-=m "不显示菜单
set guioptions-=T "不显示工具
set ruler "右下角显示状态
set mousehide "输入隐藏鼠标
set guifont=YaHei_Consolas_Hybrid:h10:cANSI "这个是字体,我用了雅黑和consolas的组合
set fenc=chinese "一下几个都是编码的问题,用来消除乱码的
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1
set fileformat=unix
set cursorline "高亮当前行,配合后边的hi,我喜欢比较舒服的grey15
set visualbell "屏幕闪烁,我开始是novisualbell,现在想打开玩一段时间
autocmd GUIEnter * simalt ~x "最大化打开
highlight Cursorline guibg=grey15 "这就是当前的背景高亮
if has("win32")
set fileencoding=chinese
else
set fileencoding=utf-8
endif
language messages us_EN.utf-8
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim

配置基本就这些,再说说插件,我装了三个插件,nerdTree一个目录树的工具,我很喜欢,个人认为好过project;ctags,这个偶尔读大代码会用到,很方便;mark,这个写代码会用到,避免变量出错,适合我这种人;omni,这是自动补全,就装上了,其实不太用……

下边是有关这几个插件的配置:

" auto command 自动补全用的
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete

" map 首先是nerdtree的几个很方便
map tr :NERDTreeToggle d:\

map ^c:NERDTree c:\
map ^d:NERDTree d:\
map ^e:NERDTree e:\
map ^f:NERDTree f:\

map ^m:Mark regex
" 先变是ctags的
map fun :TlistOpen
map cls :TlistClose

" taglist
let Tlist_Auto_Highlight_Tag = 1
let Tlist_Auto_Open = 0
let Tlist_Auto_Update = 1
let Tlist_Close_On_Select = 0
let Tlist_Compact_Format = 0
let Tlist_Display_Prototype = 0
let Tlist_Display_Tag_Scope = 1
let Tlist_Enable_Fold_Column = 1
let Tlist_Exit_OnlyWindow = 0
let Tlist_File_Fold_Auto_Close = 0
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Hightlight_Tag_On_BufEnter = 1
let Tlist_Inc_Winwidth = 0
let Tlist_Max_Submenu_Items = 1
let Tlist_Max_Tag_Length = 30
let Tlist_Process_File_Always = 0
let Tlist_Show_Menu = 0
let Tlist_Show_One_File = 1
let Tlist_Sort_Type = "order"
let Tlist_Use_Horiz_Window = 0
let Tlist_Use_Right_Window = 0
let Tlist_WinWidth = 30
let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'

就这些配置了,后边我挂出我插件和vimrc的文件:

plugins: http://jiajun.org/g/vimplugins.zip

vimrc: http://jiajun.org/g/vimrc

 

 

vimrc的这个,下下来放到相应的位置就好了,默认安装的gvim在我的文档,有个叫.vimrc的