What I learn from:
http://queue.acm.org/detail.cfm?id=1142065
Growth impact:
Larger data sets, faster update rates, more requests, more services, tighter SLAs (service-level agreements), more failures, more latency challenges, more service interdependenceies, more developers, more documentation, more programs, more servers, more networks, more data centers.
Progress:
There were many complex pieces of software combined into a single system. It could not evolve anymore. The parts that needed to scale independently were tied into sharing resources with other unknown code path. There was no isolation and, as a result, no clear ownership.
Service orientation becomes encapsulating the data with the business logic and operates on the data, with the only access through a published service interface.
Grew into hundreds of services and a number of application servers that aggregate the information from the services.
Move from a two-tier monolith to a fully distributed, decentralized, services platform serving many different applications.
Outcomes:
Strict service orientation is an excellent technique to achieve isolation; you come to a level of ownership and control that was not seen before.
By prohibiting direct database access by clients, you can make scaling and reliability improvements to your service state without involving your clients.
If you want to insert advanced infrastructure techniques such as decentralized request routing or distributed request tracking, you need a single unified service-access mechanism.
The developement and operational process has greatly benefited from using services.
Giving developers operational responsibilities has greatly enhanced the quality of the services.
Headaches:
How do you make sure that developers are productive?
How can you make sure that all the pieces work together as intended, now and in the future?
How do you test in this environment?
How to make decision:
Scope and prototype the idea quickly. New ideas are enabled through the loosely coupled services model.
How to measure:
Have good understanding of how customers interact with the site.
Most of our developers are in the loop with customers.
Integrated with partners:
Provide branded web sites for the general retail partners.
2015年4月8日星期三
2015年4月7日星期二
Fallacies of distributed computing
Good reading materials about common problems of the distributed computing.
http://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
1. The network is reliable
2. Latency is zero
3. Bandwidth is infinite
4. The network is secure
5. Topology does not change
6. There is one administrator
7. Transport cost is zero
8. The network is homogeneous
http://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/
http://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
1. The network is reliable
2. Latency is zero
3. Bandwidth is infinite
4. The network is secure
5. Topology does not change
6. There is one administrator
7. Transport cost is zero
8. The network is homogeneous
http://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/
- Distributed systems are different because they fail often.
- Writing robust distributed systems costs more than writing robust single-machine systems.
- Robust, open source distributed systems are much less common than robust, single-machine systems.
- Coordination is very hard.
- If you can fit your problem in memory, it’s probably trivial.
- “It’s slow” is the hardest problem you’ll ever debug.
- Implement backpressure throughout your system.
- Find ways to be partially available.
- Metrics are the only way to get your job done.
- Use percentiles, not averages.
- Learn to estimate your capacity.
- Feature flags are how infrastructure is rolled out.
- Choose id spaces wisely.
- Exploit data-locality ?
- Writing cached data back to persistent storage is bad.
- Computers can do more than you think they can ?
- Use the CAP theorem to critique systems.
- Extract services.
2014年2月4日星期二
工作一年有感
算算到今日就在Pinterest工作一年了,仔细想想这一年收获颇丰。
为什么我当初会选择来Pinterest工作?鄙人不才,没有能力拿到Facebook的offer。算算现在Facebook当时给我周围的同学的offer现在的价值,都已经翻了一翻,而Pinterest的价值却还没有长,如果pinterest未来失败的话,后悔肯定会是有的。
想当初面试的时候,其实最想去的是quora和dropbox,因为面试我的人实在太牛逼了。现在想想觉得quora确实没有什么意思,但是dropbox还是很吸引人的。
除去上面几家,那么剩下最有兴趣的就是pinterest了,于是就来了。
说说我的同事们,我一直觉得和聪明的人一起工作在不管是在哪里都会成功的,这也是当初quora和dropbox吸引我的原因,期初我并不知道pinterest太多的牛人,但是加入之后我就深深的被我的老板和我的同事们折服了。
Pinterest对外来说,估计最出名的员工之一就是Tracy Chou了,美丽,聪明,做事情认真负责。可是现在我觉得最优秀的员工就是我的manager Hui Xu和mentor Charles了。Hui Xu在Google就很牛,短时间就做到了Stuff Eng,而且做了Google的realtime index,review我的design和code都非常的细致,期初我觉得有些严格到吹毛求疵,但是如今他不再review我的code的时候,我开始经常反复思考如果他能review得话会有多好。
Charles来自Amazon,后来也在Amazon旗下的IMDB,A9工作过,是很牛的eng。他对Distributed System理解很深刻,对code,project的要求很高。可以说看他写过的code是一种享受,对自己的提高非常大。因为有Hui和Charles的指导,我有时候觉得在Pinterest当一个工作狂是一种享受。
另外真心觉得在这里工作比在UCLA读Phd要累很多,可能是我当初不够认真努力吧。
我的收获颇丰,其主要原因有两点,一点是team size比较小,另一点是睡眠时间比较少。Team size比较小,当我刚加入的时候,我们team刚把search的infrastructure写好,然后开始投入recommendation system当中。我作为新手,被安排去维护和更新我们的search infrastructure。所以我可以接触到很多项目,做了autocomplete,search quality improvement,search query classification,search internationalize。还有一直到今天还在做的realtime search和新的search infrastructure。我们的小search team逐渐长到今天的4个人,我也从一个初出茅庐的小屁孩成长到要独立面对问题去做一些decision的小屁孩,不管是完成project的能力还是解决问题的能力,我都有很大提升。
对未来有很多期待,最期待的无非就是Pinterest在未来的三四年能成功上市。为了达成这个目标,我一定要好好给我认识的牛人推销Pinterest,短时间内的大目标就是把胡伯涛和郭华阳拉到公司里来。拉更加senior的eng这个任务就让那些senior eng去完成吧。还有一点就是要学会理财,半年来没有怎么存钱,如今到回家的时候发现钱不够用,真是拮据啊,希望今年的理财不要那么糟糕。
为什么我当初会选择来Pinterest工作?鄙人不才,没有能力拿到Facebook的offer。算算现在Facebook当时给我周围的同学的offer现在的价值,都已经翻了一翻,而Pinterest的价值却还没有长,如果pinterest未来失败的话,后悔肯定会是有的。
想当初面试的时候,其实最想去的是quora和dropbox,因为面试我的人实在太牛逼了。现在想想觉得quora确实没有什么意思,但是dropbox还是很吸引人的。
除去上面几家,那么剩下最有兴趣的就是pinterest了,于是就来了。
Pinterest对外来说,估计最出名的员工之一就是Tracy Chou了,美丽,聪明,做事情认真负责。可是现在我觉得最优秀的员工就是我的manager Hui Xu和mentor Charles了。Hui Xu在Google就很牛,短时间就做到了Stuff Eng,而且做了Google的realtime index,review我的design和code都非常的细致,期初我觉得有些严格到吹毛求疵,但是如今他不再review我的code的时候,我开始经常反复思考如果他能review得话会有多好。
Charles来自Amazon,后来也在Amazon旗下的IMDB,A9工作过,是很牛的eng。他对Distributed System理解很深刻,对code,project的要求很高。可以说看他写过的code是一种享受,对自己的提高非常大。因为有Hui和Charles的指导,我有时候觉得在Pinterest当一个工作狂是一种享受。
另外真心觉得在这里工作比在UCLA读Phd要累很多,可能是我当初不够认真努力吧。
对未来有很多期待,最期待的无非就是Pinterest在未来的三四年能成功上市。为了达成这个目标,我一定要好好给我认识的牛人推销Pinterest,短时间内的大目标就是把胡伯涛和郭华阳拉到公司里来。拉更加senior的eng这个任务就让那些senior eng去完成吧。还有一点就是要学会理财,半年来没有怎么存钱,如今到回家的时候发现钱不够用,真是拮据啊,希望今年的理财不要那么糟糕。
2014年1月17日星期五
快一年了
工作快一年了,多多少少有些感触,本来想等到一年之后写个一年总结,但是白羊座本来就是个急性子,所以今天想到了整理一下自己的bookmark,因为想读得东西读不玩了所以就忍不住要说点什么。
每天基本上要打开我的feedly刷新一下,一共订阅了49个sources。从前在Google Reader上订阅的更多,因为那里我年轻的时候订阅了很多女明星,女神的blog,谁知道很久以前他们都不写blog了,所以如今移民到feedly我就把他们都删掉了。剩下49个sources里有那么2个是动漫相关,3~4个是IT新闻有关,另外的都是技术博客,推荐那么几个,等到工作一年之后再讲。
平时看看技术博客,大多数都一扫而过,因为有的太过理论,有的是讲新技术,并不适用,碰到好的都会单独放在bookmark里。今天就是看到bookmark里东西太多,而且大多是计划要看但是没看的。所以不得不过来吐槽。
今天整理bookmark,发现:
和Guitar相关的有5个,但是四大和弦到现在还没有练会。
Javascript看了那么5个网页,但是没有什么大project要用到它,以后想用还要从新学。
Pinterest内部的收藏夹也就11个网页,还有很多没有在里面的常用的大多也都记住了。
想学习Go,买了一本书,也收藏了10个网页,现在基本处于能看懂的状态,自己写还要查很多文档。
MTG,PAD,For Fun什么的收藏了14个网页,比较推荐的就是The Coding Love,而且每周一我都会看Rich kids of Instagram激励自己。
除了Feedly之外,还收藏了几个IT新闻的网站。
Research有关的东西其实数数也就比较仔细的看了19篇,而且都没掌握。
Engineer有关的东西比较仔细的看了43篇,而且都不会实现。
收藏了但是还没来得及学习的东西还有40+篇,刚入职一周可能收藏个1篇,现在经常1天就收藏几篇,目测这个队列是只会增长不会减小了。
写完发现自己推荐的也就是the coding love和rich kids of instagram这样娱乐网站,总体评价就是自己太弱所以只能推荐这些了。
Javascript看了那么5个网页,但是没有什么大project要用到它,以后想用还要从新学。
Pinterest内部的收藏夹也就11个网页,还有很多没有在里面的常用的大多也都记住了。
想学习Go,买了一本书,也收藏了10个网页,现在基本处于能看懂的状态,自己写还要查很多文档。
MTG,PAD,For Fun什么的收藏了14个网页,比较推荐的就是The Coding Love,而且每周一我都会看Rich kids of Instagram激励自己。
除了Feedly之外,还收藏了几个IT新闻的网站。
Research有关的东西其实数数也就比较仔细的看了19篇,而且都没掌握。
Engineer有关的东西比较仔细的看了43篇,而且都不会实现。
收藏了但是还没来得及学习的东西还有40+篇,刚入职一周可能收藏个1篇,现在经常1天就收藏几篇,目测这个队列是只会增长不会减小了。
写完发现自己推荐的也就是the coding love和rich kids of instagram这样娱乐网站,总体评价就是自己太弱所以只能推荐这些了。
2013年6月12日星期三
[Linux] Hbase shell
# Use for commands:
help 'command', status, list, describe 'tablename'
*The status shows the basic status of the cluster.
status 'simple'
status 'detailed'
# Create tables:
create 'tablename', {NAME=>'family 1'}, {NAME=>'family 2'}
create 'tablename', 'family1', 'family2'
# Scan table:
scan 'tablename'
*Restrict columns: {COLUMNS=>'family:'}, {COLUMNS=>['c1', 'c2']
*Restrict number of results: {LIMIT=>number}
*Restrict start / stop row: {STARTROW=>'start row key', ENDROW=>'end row key'}
# Count:
count 'tablename', 5000
*Here 5000 is means report results every 5000 rows.
# Delete:
delete 'table', 'rowkey', 'colkey(family:column)'
delete 'table', 'rowkey'
*Delete all rows in the table.
truncate 'tablename'
# Remove table:
*First you need to disable the table, and then you can drop table.
disable 'tablename'
drop 'tablename'
# Change column family:
*Must disable table first, and then change column family
alter 'tablename', {NAME=>'family', METHOD=>'delete'}
- Hbase files stored as HFiles in HDFS.
- sorted key/value pairs and an index of keys.
- /hbase/tablename/region/column-family
help 'command', status, list, describe 'tablename'
*The status shows the basic status of the cluster.
status 'simple'
status 'detailed'
# Create tables:
create 'tablename', {NAME=>'family 1'}, {NAME=>'family 2'}
create 'tablename', 'family1', 'family2'
# Scan table:
scan 'tablename'
*Restrict columns: {COLUMNS=>'family:'}, {COLUMNS=>['c1', 'c2']
*Restrict number of results: {LIMIT=>number}
*Restrict start / stop row: {STARTROW=>'start row key', ENDROW=>'end row key'}
# Count:
count 'tablename', 5000
*Here 5000 is means report results every 5000 rows.
# Delete:
delete 'table', 'rowkey', 'colkey(family:column)'
delete 'table', 'rowkey'
*Delete all rows in the table.
truncate 'tablename'
# Remove table:
*First you need to disable the table, and then you can drop table.
disable 'tablename'
drop 'tablename'
# Change column family:
*Must disable table first, and then change column family
alter 'tablename', {NAME=>'family', METHOD=>'delete'}
- Hbase files stored as HFiles in HDFS.
- sorted key/value pairs and an index of keys.
- /hbase/tablename/region/column-family
[Linux] Screen command
Use screen on remote machine.
screen [-AmRvx -ls -wipe] [-d name] [-h lines] [-r name] [-s] [-S name]
screen -r pid.name: recover a screen work.
screen -d -r pid.name : recover a screen work, kick off other user on this work and start.
screen -ls
screen -m : start a new screen.
screen -dm : a new screen start with detached model.
screen -p number or name
Ctrl + a + d : quit screen with process still running.
exit : quit screen.
Ctrl + a + c : create a new window.
Ctrl + a + w : list windows.
Ctrl + a + n : next window.
Ctrl + a + p : previous window.
Ctrl + a + 0 ~ 9 : switch between window 0 to 9.
Ctrl + a + K : quit current window and jump to next.
screen [-AmRvx -ls -wipe] [-d name] [-h lines] [-r name] [-s] [-S name]
screen -r pid.name: recover a screen work.
screen -d -r pid.name : recover a screen work, kick off other user on this work and start.
screen -ls
screen -m : start a new screen.
screen -dm : a new screen start with detached model.
screen -p number or name
Ctrl + a + d : quit screen with process still running.
exit : quit screen.
Ctrl + a + c : create a new window.
Ctrl + a + w : list windows.
Ctrl + a + n : next window.
Ctrl + a + p : previous window.
Ctrl + a + 0 ~ 9 : switch between window 0 to 9.
Ctrl + a + K : quit current window and jump to next.
2013年2月10日星期日
[Work] Using Git
Working in a small company will need git to commit your code and cooperate with other people.
Here is a list of command lines usually used.
Clone the main repository to your workspace:
git clone git@github.p.com:user/project.git
Add your fork:
git remote add myname git@github.p.com:user/project.git
Reset to latest code by running:
git checkout master
git fetch origin
git reset --hard origin/master
Setup your branch:
git branch your_branch_name
Make changes to your code and push it for others to see:
git push myname new_feature_branch
Hacker way, commit often:
git commit -a -m "message"
Modify commit list:
git rebase -i master
Setup git default edit and global information:
git config --global user.name "your name"
git config --global user.email "your email"
git config --global core.editor vim
More about:
git diff master
git pull
Other git commands:
Here is a list of command lines usually used.
Clone the main repository to your workspace:
git clone git@github.p.com:user/project.git
Add your fork:
git remote add myname git@github.p.com:user/project.git
Reset to latest code by running:
git checkout master
git fetch origin
git reset --hard origin/master
Setup your branch:
git branch your_branch_name
Make changes to your code and push it for others to see:
git push myname new_feature_branch
Hacker way, commit often:
git commit -a -m "message"
Modify commit list:
git rebase -i master
Setup git default edit and global information:
git config --global user.name "your name"
git config --global user.email "your email"
git config --global core.editor vim
More about:
git diff master
git pull
Other git commands:
git config --global user.name "robbin" git config --global user.email "fankai#gmail.com" git config --global color.ui true git config --global alias.co checkout git config --global alias.ci commit git config --global alias.st status git config --global alias.br branch git config --global core.editor "mate -w" # 设置Editor使用textmate git config -1 #列举所有配置用户的git配置文件
~/.gitconfig Git常用命令 查看、添加、提交、删除、找回,重置修改文件git help查看文件diff# 显示command的help git show # 显示某次提交的内容 git show $id git co -- # 抛弃工作区修改 git co . # 抛弃工作区修改 git add # 将工作文件修改提交到本地暂存区 git add . # 将所有修改过的工作文件提交暂存区 git rm # 从版本库中删除文件 git rm --cached # 从版本库中删除文件,但不删除文件 git reset # 从暂存区恢复到工作文件 git reset -- . # 从暂存区恢复到工作文件 git reset --hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改 git ci git ci . git ci -a # 将git add, git rm和git ci等操作都合并在一起做 git ci -am "some comments" git ci --amend # 修改最后一次提交记录 git revert <$id> # 恢复某次提交的状态,恢复动作本身也创建了一次提交对象 git revert HEAD # 恢复最后一次提交的状态
git diff查看提交记录# 比较当前文件和暂存区文件差异 git diff git diff <$id1> <$id2> # 比较两次提交之间的差异 git diff .. # 在两个分支之间比较 git diff --staged # 比较暂存区和版本库差异 git diff --cached # 比较暂存区和版本库差异 git diff --stat # 仅仅比较统计信息
git log git logtig Mac上可以使用tig代替diff和log,# 查看该文件每次提交记录 git log -p # 查看每次详细修改内容的diff git log -p -2 # 查看最近两次详细修改内容的diff git log --stat #查看提交统计信息
brew install tig Git 本地分支管理 查看、切换、创建和删除分支git br -r # 查看远程分支 git br分支合并和rebase# 创建新的分支 git br -v # 查看各个分支最后提交信息 git br --merged # 查看已经被合并到当前分支的分支 git br --no-merged # 查看尚未被合并到当前分支的分支 git co # 切换到某个分支 git co -b # 创建新的分支,并且切换过去 git co -b # 基于branch创建新的new_branch git co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除 git co $id -b # 把某次历史提交记录checkout出来,创建成一个分支 git br -d # 删除某个分支 git br -D # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
git mergeGit补丁管理(方便在多台机器上开发同步时用)# 将branch分支合并到当前分支 git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交 git rebase master # 将master rebase到branch,相当于: git co && git rebase master && git co master && git merge
git diff > ../sync.patch # 生成补丁 git apply ../sync.patch # 打补丁 git apply --check ../sync.patch #测试补丁能否成功Git暂存管理
git stash # 暂存 git stash list # 列所有stash git stash apply # 恢复暂存的内容 git stash drop # 删除暂存区Git远程分支管理
git pull # 抓取远程仓库所有分支更新并合并到本地 git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并 git fetch origin # 抓取远程仓库更新 git merge origin/master # 将远程主分支合并到本地当前分支 git co --track origin/branch # 跟踪某个远程分支创建相应的本地分支 git co -bGit远程仓库管理 githuborigin/ # 基于远程分支创建本地分支,功能同上 git push # push所有分支 git push origin master # 将本地主分支推到远程主分支 git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库) git push origin # 创建远程分支, origin是远程仓库名 git push origin : # 创建远程分支 git push origin : #先删除本地分支(git br -d ),然后再push删除远程分支
git remote -v # 查看远程服务器地址和仓库名称 git remote show origin # 查看远程服务器仓库状态 git remote add origin git@ github:robbin/robbin_site.git # 添加远程仓库地址 git remote set-url origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm创建远程仓库# 删除远程仓库
git clone --bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库 scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上 mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库 git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址 git push -u origin master # 客户端首次提交 git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track git remote set-head origin master # 设置远程仓库的HEAD指向master分支也可以命令设置跟踪远程库和本地库
git branch --set-upstream master origin/master git branch --set-upstream develop origin/develop
2012年11月16日星期五
找工作的感想(最后一部分)
从中篇后,又来了三藩两趟,这两次都下雨,而我又碰巧喜欢雨天,感觉不错。
公司:
比起从前,又多见识了四家公司,Twitter,Circle,PInterest和Dropbox。其中前三家都可以给我offer,Dropbox因为四个小时前才结束面试,所以结果没有出来。
除了Circle,说说剩下三家给我的感受。
Twitter很大,里面的人也不错,但是最大的问题就是我觉得他们的HR干活实在让面试者不爽。第一个HR联系我,安排了电话面试,然后说面的很好,然后就人间蒸发了。第二个HR联系我,安排我写一个程序然后发过去,然后就人间蒸发了。第三个HR联系我,我说我现在很着急,于是他安排了第四个HR联系我。第四个HR给我安排了电话面试,然后onsite。第五个HR联系我说有Offer,第六个HR会和你谈。第六个HR现在联系了我,说周一给我打电话。整个过程耗时将近一个月!
从前我听Amber说Twitter联系他,全天面试,Offer当场就出来,所以我对Twitter充满了好感,可是如今看来,Twitter对我既不热情,我也没有能力在他们那里作出impact,所以感情就淡了。
PInterest很好,办公室里一片红火,30多个程序员,面试我的主要是Search Team和Recommendation Team。其中有一个人是从Quora跳槽过来,还给我对比了Quora和PInterest之间的区别。我对PInterest印象不错,估值很高,用户多,最近有很详细的赢利计划,给我谈了好多这方面的可行工作。要是现在是7月初刚和Yiting Wang她们吃完饭的时候,我肯定就去PInterest了!可是时光飞逝,我十月一日投的简历,他们上周联系我加面试虽然只耗了不到一周,但是这让我等的有点久,有些失望。
Dropbox一看就是geek集中营,面试我的人清一色从MIT毕业,感觉他们是想把MIT搬到加州了。听他们的早起员工Albert讲Dropbox的成长故事,就是把MIT的内部云存储实现出来给大家使用。就这一点来看,我觉得Dropbox实在是太Cool了!非常的理想化!
面试题目:
面试题也小总结一下吧,电话面试都是一些常见的算法题目,除了算法题目有一些其他的问题不妨说说。比如C++的vector和list有什么使用的区别?C++的virtual function有什么好处或者短处?什么是deadlock?如何使用mutex和semaphore?浏览器里输入网址后进行的一系列工作流程?
常见的系统面试题:
如何实现短网址服务?背后数据库,数据分布怎么设计?
如果提供一个服务让人实时知道附近的人,附近的名胜,附近的朋友等,要如何设计该系统,数据如何存储分布?
如果要设计一个million people实用的聊天室,当然要分若干小聊天室或者聊天主题了,那么要如何设计?数据如何分布,如何发送消息?
然后有一个网站,其题目与面试题目相差无几,可以参考:
http://codility.com/
2012年11月8日星期四
找工作的经历(杂谈)
这不是最终篇,但是因为被这家公司的个人魅力吸引了,所以特地写一写今天的经历。
美国版的陌陌,但是与陌陌有着不同的理念。那就是Circle,感兴趣的人可以下载手机客户端:http://discovercircle.com/
这里能下载到circle的测试版本,据说一周后会有更新,我今天提前在他们创始人那里看到了更新后的circle,实在是太帅了,可以说是我见到的HCI最友好且酷的一个软件。
软件界面如图所示,可以显示人,以及一些与你的相关性,左下角可以看朋友,右下角可以看推荐的人,新版本向左滑可以看到朋友列表,向右划可以看到附近的人,以及这些人为什么会推荐给你。当你把手机放平后,新版本甚至可以有增强现实功能,看到你面前哪个方位有多远会有你的朋友,这点是我一直想有的功能,避免你和朋友约见在某个地方却找不到对方的尴尬。

创始人Evan的经历很神奇,他本科学过心理学,而且美国人貌似天生喜欢交朋友。美国人喜欢搭讪,但是搭讪毕竟会感到尴尬,比如你在咖啡厅见到一个美女,想和她聊聊天,但是过去Say Hi之后没有下文的情况很多,其实很多时候是因为彼此没有mutual trust,和陌生人聊天是非常困难的一件事情。
但是你可以想象,假设你看到一个美女头上写着想认识Stanford的人,或者喜欢某个地方的小乐队,碰巧你毕业于Stanford,也了解那个小乐队,并且美女知道你的这些情况,那么你和美女搭讪就不在尴尬了,说不定两个人聊的很high。还有一个情况是加入你来自清华,到Stanford读书,从前搞过竞赛,当你看到朱晨光的时候,你发现他也来自清华,搞过竞赛,那么肯定有很多想说的话,在异地交个朋友不容易。如果对方知道了这些,那么他就不会把朱晨光认成朱泽园,造成尴尬的局面。
这就是Circle的来源,同样是找周围的朋友,与陌陌不同的是他更关注两个人的相关性,更关注推荐两个有相互经历,有mutual trust的人认识彼此。
创始人也曾经做过实验,在咖啡厅里带着一个白板,上面写着毕业于Yale,在Stanford读计算机,去过非洲!这样在咖啡厅就会有很多人找他搭讪,聊天,还会觉得去非洲的经历很酷。这让我回想起穿着Google Codejam衣服在UCLA校园里走路的时候,曾经被搭讪过两次,认识了一个搞密码学的印度人。穿着Facebook Hackthon的衣服在Whole Food旁边的咖啡桌那,有人搭讪我Hackthon拿了第几名,做了什么。美国人很喜欢social,所以如果有什么东西能帮助你们建立起mutual trust,那么对交友很有好处。
他们公司的创始经历也很神奇,目前6~7个人。刚开始是他和两个印度人,要创办公司,但是印度人没有H-1B visa怎么办?他们对办理这个步骤都不是很熟悉,于是三个人一起去了印度!在印度工作了三个月,并且通过Evan的联系,帮助两个印度人办理了H-1B visa,然后回到Palo Alto继续创业工作。所以说很多人担心没有去小公司不给办理H-1B怎么办?其实完全不用担心,如果小公司真的要你,那么一定会帮你搞定这一切的。
同时,我也不得不说说他们的员工,个人魅力真的很吸引人。有三个印度人曾经参加过ACM ICPC,进入过World Final,而且还和我一年去的World Final,也就是2008年。他们问我认不认识ACRush,是不是和楼教主一个队,然后又对我表示了对楼教主的崇拜,我也给他们介绍了我的牛队友唐文斌(Open)和龙凡(Ted)。
这些印度人里有一个是Topcoder India的第一名,同时也是参加Google Codejam决赛的最年轻的人,他给我讲当初他们做了一个在对视频进行OCR,方便用户搜索视频中出现的字的软件,可惜没有卖掉T.T。还有一个印度人是物理世界决赛的金牌,当年印度高考的第六名。设计师musho在俄罗斯拿过很多设计比赛的第一名。真心是一个生气的集体。
我深深的被这个高智商的集体吸引了。
该公司介绍结束。
三藩好冷,今天在雨中走了很久,早上出门下雨被雨淋,中午去Stanford找朱晨光,胡伯涛和陈丹奇被雨继续淋,晚上回家的时候又被雨淋了,所以说我每个冬天来湾区都会感冒,怎么破!
2012年10月27日星期六
找工作的感想(中篇)
学校都要开始期中考试了,那么找工作的感想当然也就要到中篇了。
先概括一下,一共投了28份简历,8个内推,20个自己投。发出去的简历全都没有Cover Letter,这也算是一个失误,但其中也包括一点自信的成分,相信自己能够找到工作。
其中16个HR给我回了邮件,8家公司已经过了电话面试一轮,7家公司onsite已经结束。
有2个offer已经发了过来,还有2个承诺了口头的offer,下周应该能够收到。当然拒信也不少,3个拒信和1个口头说还是不要申请我们了。
先从不要我的公司说起:
Microsoft,我从前的老板调到了微软总部,于是我给他发了邮件,打了电话。他很相信我能拿到Google,Facebook和Twitter的offer,而且觉得我更适合这样的公司,于是告诉我不帮我内推Microsoft了,如果找不到工作再联系他,我想了想,觉得他说的也对,于是就没有申请Microsoft。
Palantir,一家我听说后比较想去的公司,胡伯涛推荐给我的公司,不过不是内推。做数据挖掘,有很多国家项目所以很有钱,但是可能是因为我没有Cover Letter的原因,于是简历发过去一周之后就收到了我们不会面试你这样的拒信。
Box.net,和Dropbox提供类似的服务,公司规模不大,130个Engineer,300+的销售人员,主要针对大客户。我个人很想做他们的Backend,不想做他们的Client。可是面试的时候Backend的team面我效果不好,Client的team面我很喜欢我,但由于个人回答上的问题,他们认为和我的职业规划不一致,于是给了我拒信。该公司面试从12点到6点,主要是system design和algorithm,一共和6~7个员工扯淡,非常辛苦。
Quora,我10月26日前最想去的公司,面试设计算法,公司的idea,修改open source的代码。我很喜欢这个公司的主要原因就是因为里面有很多聪明人。比如MIT,Caltech毕业的人,新加坡IOI队99,00,01年的成员,他们的CEO是美国IOI对02年的成员,每个聪明的人都有个人魅力吸引着我。可是由于我open source修改时的表现不好,给公司提改进意见时候一个数学公式没有推出来,很关心公司的盈利计划(因为CEO想10年内都不打算盈利的),所以他们给了我拒信。有幸是下周六还能去湾区参加CEO举办的聚会,到时候还可以聊聊天,认识一些牛人,对此我充满期待。该公司面试从下午2点到6点,轮数不多但是难度比较大,因为之前有和他们的大老板通过邮件,所以面试官都对我比较客气,也留下来吃了晚饭,可是结果还是没要我。
接着是不知道要不要我但是我不是很喜欢的公司:
Google,唉,其实我非常非常喜欢Google的产品,但是在Google的实习经历让我明白了加入大公司就只能面对一个小项目的小feature的痛苦,所以我并不想加入Google。另外,和人聊天了解到很多内容,比如Google并不自己去衡量如何给你订offer价位,很多情况下都是去match别的公司的,比如Facebook,Twitter的offer,于是你要是没有别的公司的offer,就很难和Google砍价。当然,Google牛人多自然不care一个新员工的重要性,这都可以理解。用来当养老的公司不错。Google的面试是intern转正的面试,所以在实习期间直接给我onsite面试了,结果我已经不care了。
Chopper Trading,我之前调查了一些trading公司,但是后来觉得和自己的理想不一致,于是都没有投。这家trading公司是一个师兄把我的情况介绍给了一个师姐,于是联系了一下我。公司很牛逼,但是我没有什么感觉,面试的问题非常的基础,但是基础的往往就是我们容易忽略的,比如List和Vector的长处和短处分别是什么?Virtual function的继承以及优缺点等?问的我一头雾水。
要我但是我并不感兴趣的公司:
Imo.im,小公司,程序员一共十几人,主要产品是手机上的聊天软件(iphone上用来登录Gtalk的主要软件),还有一个web平台。他们的面试好多轮,每轮两个员工来面你,面完你就认识他们一半以上的员工了。中午和CEO吃午饭,一路上聊了很多聊天软件的问题,比如Gtalk的不爽的feature,中国市场的微信,QQ,陌陌。他知道微信和QQ,但是不了解其中一些神奇的功能,比如摇一摇和附近的人。CEO人很nice,给我的offer也非常的高,估计是因为他们面试全都是算法题目,而且是在电脑上写不是在白板上写,所以我解决的比较好吧。但是我主要担心的是和别的公司竞争聊天软件没有什么市场,所以拿到了offer也不是很想去。
Storm8,叶阳师兄推荐的公司,做手机游戏。他们的发家史比较有趣,CEO和co-founder都是facebook的员工,观察到了Zynga在facebook上的成功,很早就开始做手机游戏(iphone1时代)。营销策略非常完美,他们从来不投广告,因为他们有很多游戏都在iphone app排名前50,所以他们在自己的游戏里给新游戏打广告,很容易让他们的新游戏进入排行榜前列。美国人为了玩游戏爽,很愿意在游戏里面花钱(不是购买游戏,而是购买游戏币)。所以他们的盈利非常高,并没有风头介入。从offer的角度上来说,钱不如Imo.im多,但是股票给我非常多,比我知道的其他人都高,Sign Bonus也很高,比我知道的new grad在他们工作的都高,让我很是心动。可是!他们的offer只给48小时考虑时间,这是某些硅谷公司的挖人手段,欺负新手!
我本来不想做游戏,觉得游戏公司和我想要去的互联网公司差距太大,可是面对白花花的银子忍不住动心,后来和唐总打了个电话,终于打消了我做游戏的念头。做游戏是个大坑,往里跳了之后世界就不一样了,所以要是热情不够,还是不应该做游戏的。
口头要我且我感兴趣的公司:
Facebook,面试facebook的过程非常奇葩,电话面试的时候貌似表现不好,于是就加面一轮。当时我在湾区,于是和他们的HR商量直接onsite,他们的HR在onsite前4个小时给我打电话确认了onsite。我满心欢喜的决定去onsite后,发现只是onsite进行第二轮电话面试。聊天中我告诉HR我已经有别的offer了,于是完成了onsite的“电话”面试,开始和facebook的朋友一起吃午饭的时候,突然接到HR的电话问我有没有时间直接下午进行onsite,那我当然有了,于是下午就连着onsite了。Facebook面完后就给我发了一个打算给我offer的邮件,让我等一等,因为还有一些手续。其实facebook想要招我的那个组我并不感兴趣,做一些给他们marketing,ads的internal tools,但是由于听说了下半年facebook给的疯狂的Sign Bonus数额,我不得不把facebook列为我感兴趣且口头要我的公司了。
Klout,这家公司的主要业务是分析用户在社交网络上的影响力,推荐大家都去注册,提升一下我的影响力。公司规模不大,算上sales什么的也就70~80人,公司创立于09年,但是已经盈利了,且9月底与Microsoft签下了一个很大的合同。他们做的东西很有趣,且作为小互联网公司能盈利我非常感兴趣,所以多说一点。
一开始去的时候,HR说CEO和他们的Chief Scientist很欣赏我的简历,要过来Say Hi,我当然非常荣幸了。于是开始和他们的CEO聊天。他们的CEO Joe辍学创业,和朋友开过几家公司,听到我讲去小公司的原因和职业规划的时候,对我表示了赞赏,同时,我自然也欣赏他们的公司,最后他给了我张名片,让我有问题可以给他发邮件。第一个面试的是一个印度人,在Yahoo工作了几年(这是我后来才知道的,我知道前还告诉他我不喜欢Yahoo,真是太囧了),该印度人问了我system design的问题和map reduce的问题,我感觉回答的不好(后来收到一个人的来信发现的确这个很吃亏)。第二个面试还是印度人,不过面的是算法题,轻松解决。中午一起吃午饭,和他们几个新来的员工讨论了些问题,感觉那里的人非常友好,并且我还得知一个一起讨论的美女是清华计算机系3字班的学姐(贵系3字班女生出人才啊,林希德,项荣璟,还有这个美女)下午第一轮面试是Chief Scientist,面了一个简单的算法题,聊天中才发现他们会重视我的原因,主要是贵系前辈们表现的好。该Scientist是当初Facebook的第二个中国人,之前看我的简历的时候发现搞过竞赛,于是问我认不认识符文杰-付老大,这时候死马也要当成活马医啊,我当然说我认识了啊,于是他还给我讲他和魏晓亮一起工作的故事,虽然他本科是复旦的,但这个时候我感觉就是自己人啊,所以聊的很投机。最后一个面试是他们的Backend manager,擅长系统,面试内容是聊天,所以我就把自己仅有的一点数据挖掘的知识讲啊讲,努力表现一下。
其实这次面试之后,我才明白面试结束并不是最后的结束,因为我知道第一个人我面的效果很差,如果坐以待毙的话肯定会死。但我非常喜欢这家公司,美国人相信数据和个人的影响力,公司够小不到100人且盈利,晚饭之后我就开始撰写邮件。先给chief scientist发邮件,告诉他我对中国来湾区比较成功的前辈的崇拜之情,以及看过的分析influence和community detection的paper。再给ceo发邮件,告诉他我对他们公司解决的问题的喜爱与热情,以及对于加入“小公司”的憧憬。于是今天收到了他们的邮件,scientist劝我多了解了解hadoop,hbase,hive这些open source,HR告诉我大家很impressed且我周一谈一谈,ceo给我了很好的feedback且让我有问题可以继续联系他。
中期感想,虽然收到的offer都不是自己最感兴趣的,但是得到了自己很感兴趣的公司的口头offer,算是一个比较好的期中答卷了。
我很感谢周围的人的帮助,无数人帮我内推,比如郭华阳,冯威,谢居晨,叶阳,项荣璟等前辈。
我同时对硅谷某些公司的老板非常感谢,比如Joe,Ralph,Adam D'Angelo,他们很关心潜在的员工,并且愿意与他们交流,得到一些公司外,或者来自不同国家的人对于他们的产品的看法,这种氛围让我觉得自己非常的荣幸。
最重要的是在我选择职业上给了很多建议的人,郭华阳对每个产品都能提出很宝贵的批评意见,让我面试的时候能够更好的给公司的人展现出自己能做出的改变。叶阳师兄推荐的游戏公司虽然我不是很感兴趣,但是他创业的想法和精神一直影响着我。李老师告诉我很多工作经验,让我明白在公司工作的同时要提升自己成为某一个方面的专家。唐总深刻的告诫了我做游戏要有精神,让我坚定了自己不做某些选择的想法。还有在Klout认识的丁前辈帮我分析了下我投的那些公司的长处和短处,以及发展前景,如果没有他的分析,我就不会知道Quora十年内都不想赚钱的这样的想法,真为当初打听Quora怎么赚钱的行为感到窘迫。
最后,这只是中篇,因为我还打算去面一下Twitter,Yelp,Foursquare和Dropbox,他们专注的领域有很多不一样的地方,如果让我分类的话我觉得四家公司完全是做不同的事情,要抓紧自己还在学校的时间多和不同的公司做做交流,多了解行业动态。
写不动了,待续。
2012年10月15日星期一
[Read] Why Choose Pyramid
http://www.quora.com/Is-pyramid-is-better-than-turbogears-2
Pyramid is a low-level framework, like Pylons.
The design goals of Pyramid are to provided just a little infrastructure and let the developer decide what s/he wants to actually use.
http://www.quora.com/How-do-Rails-vs-Flask-vs-Pyramids-compare-as-web-frameworks
Using a lot of tools that are not traditionally used with Django, i.e. MongoDB. Django to be too tightly coupled.
Flask: simple and clean. Doubt whether there are enough plugins at the moment. Don't know whether Flask will get big in the future.
Pyramid: Bigger than Flask, smaller than Django. New, fresh, quite stable and widely used in industry.
Raild: The language is not as clean as python. Huge community and lots of plugins. There are some problem like scale.
http://www.quora.com/What-kind-of-web-applications-does-Pyramid-specialize-in
Pyramid does not 'specialize' on a specific kind of web application. Pyramid is much more loosely coupled. One of the most visible demonstrations of this is that Pyramid doesn't come with an Object-Relation-Mapper or data access layer by default.
Pyramid is also more low-level framework compared with Django. It does less out of the bow, and assumes you'll write more functionality yourself, or plug in other libraries to help you.
http://www.quora.com/How-difficult-is-the-Pyramid-framework
The author is able to setup his first Pyramid application in three hours.
http://blog.fruiapps.com/2012/05/Choose-your-Python-Web-Framework-the-Hard-Way
Pyramid is a low-level framework, like Pylons.
The design goals of Pyramid are to provided just a little infrastructure and let the developer decide what s/he wants to actually use.
http://www.quora.com/How-do-Rails-vs-Flask-vs-Pyramids-compare-as-web-frameworks
Using a lot of tools that are not traditionally used with Django, i.e. MongoDB. Django to be too tightly coupled.
Flask: simple and clean. Doubt whether there are enough plugins at the moment. Don't know whether Flask will get big in the future.
Pyramid: Bigger than Flask, smaller than Django. New, fresh, quite stable and widely used in industry.
Raild: The language is not as clean as python. Huge community and lots of plugins. There are some problem like scale.
http://www.quora.com/What-kind-of-web-applications-does-Pyramid-specialize-in
Pyramid does not 'specialize' on a specific kind of web application. Pyramid is much more loosely coupled. One of the most visible demonstrations of this is that Pyramid doesn't come with an Object-Relation-Mapper or data access layer by default.
Pyramid is also more low-level framework compared with Django. It does less out of the bow, and assumes you'll write more functionality yourself, or plug in other libraries to help you.
http://www.quora.com/How-difficult-is-the-Pyramid-framework
The author is able to setup his first Pyramid application in three hours.
http://blog.fruiapps.com/2012/05/Choose-your-Python-Web-Framework-the-Hard-Way
2012年10月11日星期四
[Linux] Connect to My EC2
To use SSH connect to my EC2:
ssh -i "key file" ubuntu@ec2-23-23-28-26.compute-1.amazonaws.com
To use SCP copy file to my EC2:
ssh -i "key file" "source file" ubuntu@ec2-23-23-28-26.compute-1.amazonaws.com:"destination file"
Now I plan to deploy Django on my EC2 server!
2012年10月9日星期二
[Linux] Auto Indent in Vim
Basically, other IDE already support this function.
For VIM, we have to type in following command in ~/.vimrc
set cindent
set smartindent
set autoindent
set expandtab
set tabstop=2
set shiftwidth=2
Also, there is a documentation about indent in VIM available here:
2012年10月4日星期四
找工作的感想(前篇)
最近有些神经衰弱,每天一点左右睡觉,七点多就自然醒了。
白天很困,今天还在校车上睡着,差点就坐过站了,囧。
因为打算这个学期拿Master毕业,所以最近一直在忙找工作的事情,投了将近20家公司,当然看情况也许会继续投一些公司,和将近10家公司的HR有了一些联系和了解。
最主要是联系到了一些贵系的前辈,所以想写点东西记录一下想法。
找工作最重要的是什么?
我认为是个人未来的发展前景,但是我一直不了解职业规划什么的,没有真正的思考过。
我一直认为自己还年轻,可以多尝试,但是其实我并没有定下好的尝试方向。与李老师,叶阳学长的交流过程中,我获得了一些启发。
每个人都有创业的梦想,然而不一定能实现,在工作中可以选择一些公司去培养自己,使得自己变成一个generalists,对于很多方面都应该去积累经验。
如果想跳槽,升职,或者成为一个公司的骨干,也需要培养自己成为一个specialist。
现在才23岁,有充足的时间进入公司学习,成长,发现自己的专长,然后内外兼修,使得自己各方面得到充足的发展的同时,掌握一门拿手的技术。
这就不得不提到大公司和小公司的区别了,我在两家大公司实习过,Microsoft和Google。在Microsoft主要从事研究的实习,虽然只是面向某一个产品的某一个方面,但是我积累了很多知识,现在某一领域如果出现新的paper,我都能初步理解他们的做法。在Google的实习经历比较糟糕,加入了一个大产品的小部门,每天就做一点点事情,感觉并没有学到什么东西。
这两点经历让我对未来选择小公司去工作更加坚定,去小公司可以更好的学到一些本事,掌握一个产品End to End的开发过程。并且学习一些开源软件的用法,而不是大公司自己内部的架构。
选择一个小公司,相对来说就没有那么稳定,而且可能会比较繁忙。
需要常考虑的一个问题是这个小公司的前景如何?拿什么赚钱?是否会上市?是否会被卖给大公司?
还有一个严重的问题就是公司文化如何?我不是一个很social的人,所以如何融入公司,表现出自己的价值是很重要的,需要考虑的方面。
目前HR问我有什么问题询问,我常常只是问问这个公司现在有多少人,了解一下他们的规模。今天经过李老师提醒,才发现原来还是有很多问题需要考虑的。
关于经历方面,我突然发现有三点经历对我的事业起到了很大的帮助。
1.高中搞竞赛,取得了不错的成绩,更重要的是进入了一个不错的圈子,认识到很多牛人,这些牛人直到今天一直对我有很大的帮助,比如李老师,唐文斌,龙凡,郭华阳等。进入一个好的圈子的还有一个好处就是彼此认可对方的能力,对对方的未来有期待,这对于找工作有很大的帮助。
更加庆幸的收到一个IOI meet-up的活动邀请,由Quora的CEO,前Facebook的CTO举办的。因为他在2002年也参加过IOI,所以想把这个圈子里的人聚集起来聊一聊,想想能见到很多老朋友,心情莫名的激动起来。
2.上大学选择了清华计算机系,这也是一个不错的圈子,与上一个圈子不同的是这里的很多人他们也许并没有出色的竞赛成绩,但是他们在计算机圈内有一些我觉得很不错的成就,比如叶阳学长,有创业过,对选择工作有很深刻的理解,并且给我推荐了一家不错的公司。
3.参加ACM竞赛,与高中竞赛不同,更多要求更快,更准确的coding,写出bug free,clean maintenance的代码,在工作面试的时候非常有帮助,而且实习期间老板也觉得我写的代码比较易读。
最后,在与人交流方面,我发现不在硅谷还是欠缺很多。
从前我只注意大公司,比如Google,Facebook。通过与在硅谷的人交流,我开始注意到一些不是那么大的公司,比如Box,Storm8,Palantir。在硅谷的跳槽很频繁,但一开始的职业选择也同样重要,如果不了解硅谷的一些故事,那么很难想到要申请这些中小型的公司。这些公司分别是不同的学长或者同学推荐给我,可以看出与硅谷的人多交流的重要性。
因此,我开始更加觉得现在跳出UCLA去湾区是很重要且正确的一个选择。
待续。
2012年4月8日星期日
[Android] Using camera to capture pictures.
To prepare the surface:
this.surface = (SurfaceView)findViewById(R.id.yourSurface);
this.surfaceHolder = this.surface.getHolder();
this.surfaceHolder.addCallback(this);
this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
To start the camera:
this.camera = Camera.open()
this.camera.setPreviewDisplay(this.surfaceHolder);
Camera.parameters parameters = this.camera.getParameters();
parameters.getPreviewSize(x, y);
this.camera.startPreview();
To reset or pause the camera:
this.camera.stopPreview();
this.camera.release();
To take a picture:
this.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
To check SD card inside:
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
To save picture:
Bitmap bm = BitmapFactory.decodeByteArray(_data, 0, _data.length);
File myCaptureFile = new File(strCaptureFilePath);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
bos.flush();
bos.close();
this.surface = (SurfaceView)findViewById(R.id.yourSurface);
this.surfaceHolder = this.surface.getHolder();
this.surfaceHolder.addCallback(this);
this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
To start the camera:
this.camera = Camera.open()
this.camera.setPreviewDisplay(this.surfaceHolder);
Camera.parameters parameters = this.camera.getParameters();
parameters.getPreviewSize(x, y);
this.camera.startPreview();
To reset or pause the camera:
this.camera.stopPreview();
this.camera.release();
To take a picture:
this.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
To check SD card inside:
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
To save picture:
Bitmap bm = BitmapFactory.decodeByteArray(_data, 0, _data.length);
File myCaptureFile = new File(strCaptureFilePath);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
bos.flush();
bos.close();
2011年7月19日星期二
[Linux] VirtualBox里debian的分辨率修改
之前使用VirtualBox安装debian,发现没有办法改分辨率,很难受。
经过查找,找到了x-windows修改分辨率的方法:
使用gtf 1280 800 60得到要修改的代码,修改/etc/X11/xorg.conf如下:
Section "Monitor"
Identifier "Configured Monitor"
Option "DPMS"
Modeline "1280x800_60.00" 83.46 1280 1344 1480 1680 800 801 804 828 -HSync +Vsync
Modeline "1024x768_60.00" 64.11 1024 1080 1184 1344 768 769 772 795 -HSync +Vsync
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
SubSection "Display"
Modes "1280x1024_60.00" "1024x768_60.00"
EndSubSection
EndSection
经过查找,找到了x-windows修改分辨率的方法:
使用gtf 1280 800 60得到要修改的代码,修改/etc/X11/xorg.conf如下:
Section "Monitor"
Identifier "Configured Monitor"
Option "DPMS"
Modeline "1280x800_60.00" 83.46 1280 1344 1480 1680 800 801 804 828 -HSync +Vsync
Modeline "1024x768_60.00" 64.11 1024 1080 1184 1344 768 769 772 795 -HSync +Vsync
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
SubSection "Display"
Modes "1280x1024_60.00" "1024x768_60.00"
EndSubSection
EndSection
订阅:
博文 (Atom)