Showing posts with label Network. Show all posts
Showing posts with label Network. Show all posts

December 4, 2010

140 Google Interview Questions

original site:click

Google Interview Questions: Product Marketing Manager

  • Why do you want to join Google?
  • What do you know about Google's product and technology?
  • If you are Product Manager for Google's Adwords, how do you plan to market this?
  • What would you say during an AdWords or AdSense product seminar?
  • Who are Google's competitors, and how does Google compete with them?
  • Have you ever used Google's products? Gmail?
  • What's a creative way of marketing Google's brand name and product?
  • If you are the product marketing manager for Google's Gmail product, how do you plan to market it so as to achieve 100 million customers in 6 months?
  • How much money you think Google makes daily from Gmail ads?
  • Name a piece of technology you've read about recently. Now tell me your own creative execution for an ad for that product.
  • Say an advertiser makes $0.10 every time someone clicks on their ad. Only 20% of people who visit the site click on their ad. How many people need to visit the site for the advertiser to make $20?
  • Estimate the number of students who are college seniors, attend four-year schools, and graduate with a job in the United States every year.
  • How would you boost the GMail subscription base?
  • What is the most efficient way to sort a million integers?
  • How would you re-position Google's offerings to counteract competitive threats from Microsoft?
  • How many golf balls can fit in a school bus?
  • You are shrunk to the height of a nickel and your mass is proportionally reduced so as to maintain your original density. You are then thrown into an empty glass blender. The blades will start moving in 60 seconds. What do you do?
  • How much should you charge to wash all the windows in Seattle?
  • How would you find out if a machine's stack grows up or down in memory?
  • Explain a database in three sentences to your eight-year-old nephew.
  • How many times a day does a clock's hands overlap?
  • You have to get from point A to point B. You don't know if you can get there. What would you do?
  • Imagine you have a closet full of shirts. It's very hard to find a shirt. So what can you do to organize your shirts for easy retrieval?
  • Every man in a village of 100 married couples has cheated on his wife. Every wife in the village instantly knows when a man other than her husband has cheated, but does not know when her own husband has. The village has a law that does not allow for adultery. Any wife who can prove that her husband is unfaithful must kill him that very day. The women of the village would never disobey this law. One day, the queen of the village visits and announces that at least one husband has been unfaithful. What happens?
  • In a country in which people only want boys, every family continues to have children until they have a boy. If they have a girl, they have another child. If they have a boy, they stop. What is the proportion of boys to girls in the country?
  • If the probability of observing a car in 30 minutes on a highway is 0.95, what is the probability of observing a car in 10 minutes (assuming constant default probability)?
  • If you look at a clock and the time is 3:15, what is the angle between the hour and the minute hands? (The answer to this is not zero!)
  • Four people need to cross a rickety rope bridge to get back to their camp at night. Unfortunately, they only have one flashlight and it only has enough light left for seventeen minutes. The bridge is too dangerous to cross without a flashlight, and it's only strong enough to support two people at any given time. Each of the campers walks at a different speed. One can cross the bridge in 1 minute, another in 2 minutes, the third in 5 minutes, and the slow poke takes 10 minutes to cross. How do the campers make it across in 17 minutes?
  • You are at a party with a friend and 10 people are present including you and the friend. your friend makes you a wager that for every person you find that has the same birthday as you, you get $1; for every person he finds that does not have the same birthday as you, he gets $2. would you accept the wager?
  • How many piano tuners are there in the entire world?
  • You have eight balls all of the same size. 7 of them weigh the same, and one of them weighs slightly more. How can you find the ball that is heavier by using a balance and only two weighings?
  • You have five pirates, ranked from 5 to 1 in descending order. The top pirate has the right to propose how 100 gold coins should be divided among them. But the others get to vote on his plan, and if fewer than half agree with him, he gets killed. How should he allocate the gold in order to maximize his share but live to enjoy it? (Hint: One pirate ends up with 98 percent of the gold.)
  • You are given 2 eggs. You have access to a 100-story building. Eggs can be very hard or very fragile means it may break if dropped from the first floor or may not even break if dropped from 100th floor. Both eggs are identical. You need to figure out the highest floor of a 100-story building an egg can be dropped without breaking. The question is how many drops you need to make. You are allowed to break 2 eggs in the process.
  • Describe a technical problem you had and how you solved it.
  • How would you design a simple search engine?
  • Design an evacuation plan for San Francisco.
  • There's a latency problem in South Africa. Diagnose it.
  • What are three long term challenges facing Google?
  • Name three non-Google websites that you visit often and like. What do you like about the user interface and design? Choose one of the three sites and comment on what new feature or project you would work on. How would you design it?
  • If there is only one elevator in the building, how would you change the design? How about if there are only two elevators in the building?
  • How many vacuum's are made per year in USA?
  • Why are manhole covers round?
  • What is the difference between a mutex and a semaphore? Which one would you use to protect access to an increment operation?
  • A man pushed his car to a hotel and lost his fortune. What happened?
  • Explain the significance of "dead beef".
  • Write a C program which measures the the speed of a context switch on a UNIX/Linux system.
  • Given a function which produces a random integer in the range 1 to 5, write a function which produces a random integer in the range 1 to 7.
  • Describe the algorithm for a depth-first graph traversal.
  • Design a class library for writing card games.
  • You need to check that your friend, Bob, has your correct phone number, but you cannot ask him directly. You must write a the question on a card which and give it to Eve who will take the card to Bob and return the answer to you. What must you write on the card, besides the question, to ensure Bob can encode the message so that Eve cannot read your phone number?
  • How are cookies passed in the HTTP protocol?
  • Design the SQL database tables for a car rental database.
  • Write a regular expression which matches a email address.
  • Write a function f(a, b) which takes two character string arguments and returns a string containing only the characters found in both strings in the order of a. Write a version which is order N-squared and one which is order N.
  • You are given a the source to a application which is crashing when run. After running it 10 times in a debugger, you find it never crashes in the same place. The application is single threaded, and uses only the C standard library. What programming errors could be causing this crash? How would you test each one?
  • Explain how congestion control works in the TCP protocol.
  • In Java, what is the difference between final, finally, and finalize?
  • What is multithreaded programming? What is a deadlock?
  • Write a function (with helper functions if needed) called to Excel that takes an excel column value (A,B,C,D…AA,AB,AC,… AAA..) and returns a corresponding integer value (A=1,B=2,… AA=26..).
  • You have a stream of infinite queries (ie: real time Google search queries that people are entering). Describe how you would go about finding a good estimate of 1000 samples from this never ending set of data and then write code for it.
  • Tree search algorithms. Write BFS and DFS code, explain run time and space requirements. Modify the code to handle trees with weighted edges and loops with BFS and DFS, make the code print out path to goal state.
  • You are given a list of numbers. When you reach the end of the list you will come back to the beginning of the list (a circular list). Write the most efficient algorithm to find the minimum # in this list. Find any given # in the list. The numbers in the list are always increasing but you don't know where the circular list begins, ie: 38, 40, 55, 89, 6, 13, 20, 23, 36.
  • Describe the data structure that is used to manage memory. (stack)
  • What's the difference between local and global variables?
  • If you have 1 million integers, how would you sort them efficiently? (modify a specific sorting algorithm to solve this)
  • In Java, what is the difference between static, final, and const. (if you don't know Java they will ask something similar for C or C++).
  • Talk about your class projects or work projects (pick something easy)… then describe how you could make them more efficient (in terms of algorithms).
  • Suppose you have an NxN matrix of positive and negative integers. Write some code that finds the sub-matrix with the maximum sum of its elements.
  • Write some code to reverse a string.
  • Implement division (without using the divide operator, obviously).
  • Write some code to find all permutations of the letters in a particular string.
  • What method would you use to look up a word in a dictionary?
  • Imagine you have a closet full of shirts. It's very hard to find a shirt. So what can you do to organize your shirts for easy retrieval?
  • You have eight balls all of the same size. 7 of them weigh the same, and one of them weighs slightly more. How can you fine the ball that is heavier by using a balance and only two weighings?
  • What is the C-language command for opening a connection with a foreign host over the internet?
  • Design and describe a system/application that will most efficiently produce a report of the top 1 million Google search requests. These are the particulars: 1) You are given 12 servers to work with. They are all dual-processor machines with 4Gb of RAM, 4x400GB hard drives and networked together.(Basically, nothing more than high-end PC's) 2) The log data has already been cleaned for you. It consists of 100 Billion log lines, broken down into 12 320 GB files of 40-byte search terms per line. 3) You can use only custom written applications or available free open-source software.
  • There is an array A[N] of N numbers. You have to compose an array Output[N] such that Output[i] will be equal to multiplication of all the elements of A[N] except A[i]. For example Output[0] will be multiplication of A[1] to A[N-1] and Output[1] will be multiplication of A[0] and from A[2] to A[N-1]. Solve it without division operator and in O(n).
  • There is a linked list of numbers of length N. N is very large and you don't know N. You have to write a function that will return k random numbers from the list. Numbers should be completely random. Hint: 1. Use random function rand() (returns a number between 0 and 1) and irand() (return either 0 or 1) 2. It should be done in O(n).
  • Find or determine non existence of a number in a sorted list of N numbers where the numbers range over M, M>> N and N large enough to span multiple disks. Algorithm to beat O(log n) bonus points for constant time algorithm.
  • You are given a game of Tic Tac Toe. You have to write a function in which you pass the whole game and name of a player. The function will return whether the player has won the game or not. First you to decide which data structure you will use for the game. You need to tell the algorithm first and then need to write the code. Note: Some position may be blank in the game। So your data structure should consider this condition also.
  • You are given an array [a1 To an] and we have to construct another array [b1 To bn] where bi = a1*a2*...*an/ai. you are allowed to use only constant space and the time complexity is O(n). No divisions are allowed.
  • How do you put a Binary Search Tree in an array in a efficient manner. Hint :: If the node is stored at the ith position and its children are at 2i and 2i+1(I mean level order wise)Its not the most efficient way.
  • How do you find out the fifth maximum element in an Binary Search Tree in efficient manner. Note: You should not use use any extra space. i.e sorting Binary Search Tree and storing the results in an array and listing out the fifth element.
  • Given a Data Structure having first n integers and next n chars. A = i1 i2 i3 ... iN c1 c2 c3 ... cN.Write an in-place algorithm to rearrange the elements of the array ass A = i1 c1 i2 c2 ... in cn
  • Given two sequences of items, find the items whose absolute number increases or decreases the most when comparing one sequence with the other by reading the sequence only once.
  • Given That One of the strings is very very long , and the other one could be of various sizes. Windowing will result in O(N+M) solution but could it be better? May be NlogM or even better?
  • How many lines can be drawn in a 2D plane such that they are equidistant from 3 non-collinear points?
  • Let's say you have to construct Google maps from scratch and guide a person standing on Gateway of India (Mumbai) to India Gate(Delhi). How do you do the same?
  • Given that you have one string of length N and M small strings of length L. How do you efficiently find the occurrence of each small string in the larger one?
  • Given a binary tree, programmatically you need to prove it is a binary search tree.
  • You are given a small sorted list of numbers, and a very very long sorted list of numbers - so long that it had to be put on a disk in different blocks. How would you find those short list numbers in the bigger one?
  • Suppose you have given N companies, and we want to eventually merge them into one big company. How many ways are theres to merge?
  • Given a file of 4 billion 32-bit integers, how to find one that appears at least twice?
  • Write a program for displaying the ten most frequent words in a file such that your program should be efficient in all complexity measures.
  • Design a stack. We want to push, pop, and also, retrieve the minimum element in constant time.
  • Given a set of coin denominators, find the minimum number of coins to give a certain amount of change.
  • Given an array, i) find the longest continuous increasing subsequence. ii) find the longest increasing subsequence.
  • Suppose we have N companies, and we want to eventually merge them into one big company. How many ways are there to merge?
  • Write a function to find the middle node of a single link list.
  • Given two binary trees, write a compare function to check if they are equal or not. Being equal means that they have the same value and same structure.
  • Implement put/get methods of a fixed size cache with LRU replacement algorithm.
  • You are given with three sorted arrays ( in ascending order), you are required to find a triplet ( one element from each array) such that distance is minimum.
  • Distance is defined like this : If a[i], b[j] and c[k] are three elements then distance=max(abs(a[i]-b[j]),abs(a[i]-c[k]),abs(b[j]-c[k]))" Please give a solution in O(n) time complexity
  • How does C++ deal with constructors and deconstructors of a class and its child class?
  • Write a function that flips the bits inside a byte (either in C++ or Java). Write an algorithm that take a list of n words, and an integer m, and retrieves the mth most frequent word in that list.
  • What's 2 to the power of 64?
  • Given that you have one string of length N and M small strings of length L. How do you efficiently find the occurrence of each small string in the larger one?
  • How do you find out the fifth maximum element in an Binary Search Tree in efficient manner.
  • Suppose we have N companies, and we want to eventually merge them into one big company. How many ways are there to merge?
  • There is linked list of millions of node and you do not know the length of it. Write a function which will return a random number from the list.
  • You need to check that your friend, Bob, has your correct phone number, but you cannot ask him directly. You must write a the question on a card which and give it to Eve who will take the card to Bob and return the answer to you. What must you write on the card, besides the question, to ensure Bob can encode the message so that Eve cannot read your phone number?
  • How long it would take to sort 1 trillion numbers? Come up with a good estimate.
  • Order the functions in order of their asymptotic performance: 1) 2^n 2) n^100 3) n! 4) n^n
  • There are some data represented by(x,y,z). Now we want to find the Kth least data. We say (x1, y1, z1) > (x2, y2, z2) when value(x1, y1, z1) > value(x2, y2, z2) where value(x,y,z) = (2^x)*(3^y)*(5^z). Now we can not get it by calculating value(x,y,z) or through other indirect calculations as lg(value(x,y,z)). How to solve it?
  • How many degrees are there in the angle between the hour and minute hands of a clock when the time is a quarter past three?
  • Given an array whose elements are sorted, return the index of a the first occurrence of a specific integer. Do this in sub-linear time. I.e. do not just go through each element searching for that element.
  • Given two linked lists, return the intersection of the two lists: i.e. return a list containing only the elements that occur in both of the input lists.
  • What's the difference between a hashtable and a hashmap?
  • If a person dials a sequence of numbers on the telephone, what possible words/strings can be formed from the letters associated with those numbers?
  • How would you reverse the image on an n by n matrix where each pixel is represented by a bit?
  • Create a fast cached storage mechanism that, given a limitation on the amount of cache memory, will ensure that only the least recently used items are discarded when the cache memory is reached when inserting a new item. It supports 2 functions: String get(T t) and void put(String k, T t).
  • Create a cost model that allows Google to make purchasing decisions on to compare the cost of purchasing more RAM memory for their servers vs. buying more disk space.
  • Design an algorithm to play a game of Frogger and then code the solution. The object of the game is to direct a frog to avoid cars while crossing a busy road. You may represent a road lane via an array. Generalize the solution for an N-lane road.
  • What sort would you use if you had a large data set on disk and a small amount of ram to work with?
  • What sort would you use if you required tight max time bounds and wanted highly regular performance.
  • How would you store 1 million phone numbers?
  • Design a 2D dungeon crawling game. It must allow for various items in the maze - walls, objects, and computer-controlled characters. (The focus was on the class structures, and how to optimize the experience for the user as s/he travels through the dungeon.)
  • What is the size of the C structure below on a 32-bit system? On a 64-bit?
struct foo {
char a;
char* b;
};

  • Efficiently implement 3 stacks in a single array.
  • Given an array of integers which is circularly sorted, how do you find a given integer.
  • Write a program to find depth of binary search tree without using recursion.
  • Find the maximum rectangle (in terms of area) under a histogram in linear time.
  • Most phones now have full keyboards. Before there there three letters mapped to a number button. Describe how you would go about implementing spelling and word suggestions as people type.
  • Describe recursive mergesort and its runtime. Write an iterative version in C++/Java/Python.
  • How would you determine if someone has won a game of tic-tac-toe on a board of any size?
  • Given an array of numbers, replace each number with the product of all the numbers in the array except the number itself *without* using division.
  • Create a cache with fast look up that only stores the N most recently accessed items.
  • How to design a search engine? If each document contains a set of keywords, and is associated with a numeric attribute, how to build indices?
  • Given two files that has list of words (one per line), write a program to show the intersection.
  • What kind of data structure would you use to index annagrams of words? e.g. if there exists the word "top" in the database, the query for "pot" should list that.
  • What is the yearly standard deviation of a stock given the monthly standard deviation?
  • How many resumes does Google receive each year for software engineering?
  • Anywhere in the world, where would you open up a new Google office and how would you figure out compensation for all the employees at this new office?
  • What is the probability of breaking a stick into 3 pieces and forming a triangle?
  • You're the captain of a pirate ship, and your crew gets to vote on how the gold is divided up. If fewer than half of the pirates agree with you, you die. How do you recommend apportioning the gold in such a way that you get a good share of the booty, but still survive?
  • How would you work with an advertiser who was not seeing the benefits of the AdWords relationship due to poor conversions?
  • How would you deal with an angry or frustrated advertisers on the phone?
Sources

October 29, 2010

sth. about usrp in gnuradio

On Thu, Jul 21, 2005 at 05:48:33PM +0530, Arora_Amit wrote:
> Hi all,
>
> We are working on USRP. Please can any let us know what the
> factors or on what basis the audio_decimation, if_freq, usrp_decim.

These values are choosen so that the sample rates through the
processing path "make sense".  The USRP can sample and decimate at
particular rates.  The audio sink/source can sample at particular
rates.  We generally pick ratios such that they are related by simple
integer factors and that the signals of interest have appropriate
bandwidth at various points in the signal processing chain.

The API for using and controlling the usrp is documented in
usrp/host/lib/usrp_basic.h and usrp_standard.h

> It will be help if we can get what the following mention programs does:

> 1.    usrp_fft_simple.py

Does the same thing as usrp_fft only with less gui cruft.
(Plots Fast Fourier Transform of samples received from USRP.)

> 2.    benchmark_usb.py

An unreliable program to detemine maximum bandwidth of USB

>From the comment at the top of the file:

  Benchmark the USB/USRP throughput.  Finds the maximum full-duplex speed
  the USRP/USB combination can sustain without errors.

> 3.    usrp_oscope.py

Digital oscilloscope that uses a USRP as the source of samples.

> 4.    dbs_debug.py

Program to assist in debugging the DBS_RX daughterboard.

The DBS_RX daughterboard is a receive-only daughterboard that covers
800 MHz to 2400 MHz.

> 5.    nbfm_ptt_quick_and_dirty.py

Removed from CVS.  See nbfm_ptt.py  Narrow Band FM "Push to Talk" (wakie-talkie)

> 6.     usrp_rx_cfile.py

Read samples from the USRP and write to file formatted as binary
single-precision complex values.

> 7.    dbs_fft.py

Removed from CVS.

> 8.    nbfm_rcv.py

Narrow Band FM receiver.


If you haven't already, I suggest that you spend some time with:

  http://www.gnu.org/software/gnuradio/doc/exploring-gnuradio.html
  http://www.gnu.org/software/gnuradio/doc/howto-write-a-block.html


Also, there are online docs for the C++ guts:

  http://www.gnu.org/software/gnuradio/doc/index.html

October 17, 2010

How to test USRP when you get it

prerequisites:
1. install Linux: need to select a OS here

2. install GNU Radio:    --http://gnuradio.org/trac/wiki
3. (optional) read the hardware documents:    --http://gnuradio.org/trac/wiki/USRP
        user guide/install guide:    --http://www.comsec.com/wiki?UsrpInstall
        All the datasheets can be downloaded here

4. (optional) read driver source code
        the source codes related to USRP:
            /usrp
                firmware: for 8051 in USB controller, mostly writen as .c and .a51
                FPGA: for FPGA, mostly writen as .v (it seems fpga only has SRAM inside, so it need to download software for fpga every time)
                host: for PC, mostly writen as .cc
            /gr-usrp
                driver for dauther board: mostly writen as .py and .cc
            /gnuradio-example/python/usrp
                example for single usrp board: all writen in .py
            /gnuradio-example/python/multi-usrp
                example for multi usrp boards: all writen in .py


begin to test:
1. How to power on and start test:
        step1. before plug in USB cable, open two terminal.
        step2. to see a real time display of all log messages: tail -f /var/log/messages (to check the usb driver is correctly installed)
    How to stop and power off:
        step1. stop the program.
        step2. disconnect USB connection and power off

2. test a script for usrp first without daughter board, which file I need to test?
--http://www.comsec.com/wiki?UsrpInstall
gnuradio\gnuradio-examples\python\usrp\usrp_siggen.py & usrp_fft.py

3. how to test the transmitter and receiver for daughter board?
The antenna should be connect by Tx/Rx SMA but NOT Rx2! there is a switch for Rx2 and the switch is off in default!
The Tx and Rx can NOT be connected directly by cable! need a attenuator about 40-50 dB!!
    1) /gnuradio-examples/python/usrp/usrp_siggen.py and usrp_fft.py to observe signal
    2) /gnuradio-examples/python/digital/benchmark_tx.py and benchmark_rx.py to test data transmission.
        The boards need to be at least 3m apart. --/home/james/gnuradio/gnuradio-examples/python/digital/README
    3) use tx_voice.py and rx_voice.py to test voice transmission.
    4) some also said to test /gnuradio-examples/python/usrp/usrp_nbfm_ptt.py to test full duplex voice call, but I can't make it works.

test voice:
1. gnuradio-examples\python\audio\dial_tone.py as tutorial
2. gnuradio-examples\python\audio\audio_copy.py
    gnuradio-examples\python\audio\audio_to_file.py
    gnuradio-examples\python\audio\audio_play.py
3. gnuradio-examples\python\digital_voice\encdec.py to test by one USRP
4. gnuradio-examples\python\digital\tx_voice.py
    gnuradio-examples\python\digital\rx_voice.py to test by two USRP

test data:
1. gnuradio-examples\python\digital\benchmark_tx.py
    gnuradio-examples\python\digital\benchmark_rx.py to test by two USRP

suggested by others:
1. http://www.nabble.com/High-packet-error-and-reception-problems-with-RFX-2400-t3522095.html
./benchmark_tx.py -f 2412M --bitrate 500k -v --tx-amplitude=30000
usrp_siggen.py and usrp_oscope.py
./benchmark_rx.py -f 2412M --bitrate 100k -v --rx-gain=75
--in digital folder

2. http://staff.washington.edu/jon/gr-osx/gr-osx-usrp.html#using
benchmark_usb.py Estimate throughput of USB
usrp_siggen.py Signal generator
usrp_oscope.py Oscilloscope (screenshot)
usrp_fft.py Spectrum analyzer (screenshot)

June 25, 2010

Network Simulator

最近一直在鼓捣网络仿真软件,逐渐发现些开源的好处,大家都在整理资料,都在去努力完善一个项目。当这样的行为发生在某一群向着相同目标进发的专业人士身上,似乎惺惺相惜的感觉就更加强烈。当然,我还只能算作业余,逐渐把自己用到的链接添加在这里,应该比仅仅下载到本地的作用会更大。

Useful references (order from more basic to more complex):

NS Simulator for Beginners, lecture notes This is a very good point to begin with.
Sandeep Gupta NS tutorial  Very simple and straightforward slides.
NS by Examples Practical breakpoints to get involved. The comments are also useful if the current version of ns-2 cannot debug the original code.
Marc Greis' Tutorial  This is the classic and most important tutorial. It has been fully recommend to MASTER the step-by-step exercises it describes, especially if you are going to change the NS2 code. The Ping Agent that he describes is very important to do it yourself, instead of simply downloading the c++ files and compiling it. Furthermore, refer to this post on the ns2 mailing list to know the additional steps required on the ping agent on the newest versions of NS2. (click)
New NS wiki There are lots of information which order in a more structured way.
NS Simulator Courses for Beginner Although it has BEGINNER in the caption, the destination is to check the scripts. We can also refer to the /ns/tcl/ex and /ns/tcl/test directories of ns2 source tree.
NS Manual is used to peek the reference documentation.
NS中文手册
Implementing a New Manet Unicast Routing Protocol in NS2
ns2 for the Impatient
ns2measure manual


Personal web pages:
柯志亨教授的主页 has many useful references and video guidance.
Pedro Vale Estrela's NS2 Page
Lloyd Wood's NS2 Page

May 5, 2009

Good things about journalism


From the New York Times

1. A really strong desire to find the truth, wherever it may lurk;

2. An assumption that everyone knows more than you, and that your job is to find, cultivate, question, and listen to your sources, and then come to a view;

3. An inclination not to take anything at face value, because everyone has a point of view, and those points of view are usually driven by self-interest;

4. A resolve not to let commercial interests (in other words, advertisers) influence your search for the truth.

文章探讨的是新闻工作者真正的意义。不过,写出的却似乎是一个放之各个行业皆准的原则。

January 13, 2009

Google's production


今天看了两篇文章,分析google如何能够取得人们的好感和使用,第一篇的key words只有一个“CONTROL”。但我感觉,这样的分析有些过于简化了。的确,google中的控制权使我感觉很好。现在还清楚的记得,一周前,从压根儿不懂CSS的语句,到按照一个模板自己修改、设计整个页面,不断试验直到满意时候自己的欣喜。Gmail中的自定义智能屏蔽和标签管理也让我现在基本放弃了outlook。但是,原因似乎远非如此。

第二篇文章是Google官方博客中的技术人员写的。更加接近使用时的真实感受,只是感觉文字还是有点虚幻。我就从一个使用者的角度,加入一些总结吧~

1. Focus on people—their lives, their work, their dreams.
纯粹的广告语言,跳过~

2. Every millisecond counts.
虽然没有开发人员在自己博客里面声称的加速56倍那么夸张,但Chrome对于Javascript的内核支持的确使得很多网站的访问速度大大加快。网站对于Java脚本的密集应用,让“load and run”模式明显劣于Chrome的应用浏览器内部网络,尽管Google标称的“cloud computing”还相当的虚幻。同样的两个页面,来自blogger和spaces.msn,装载速度天差地别,当然我会选择那个让我效率更高的地方。 在这里,与其说是技术原因,不如说是设计思路的问题。

3. Simplicity is powerful.
当把新浪网中打开一个网页看着各种低俗广告的蹦来蹦去,和Google reader简明扼要的rss浏览比较,对于后者的选择也就顺理成章了。同样是邮件广告,在新浪中,是强行加入每个邮件的末尾,大多是什么智联招聘或者某某婚介网之类。而gmail是读取邮件关键字并以标志性的文字形式在屏幕最边上一列给出相关广告。尽管一般而言两种广告我都不会去点击,但相信后者的广告针对性会更好一些。这样简简单单的关键字搜索技术,如果新浪的技术人员不会的话,我这个刚刚入门的学生可以教你们。

4. Engage beginners and attract experts.
我是基本被engage了……

5. Dare to innovate.
在gmail的lab里面,有很多小的gadget,大部分派不上任何的用场。但感觉很可爱。就好像看到自己某一天,一时性起鼓捣出一串蹩脚的代码,试试看,还能运行,那就算作是一个成果好了:)当然,也不能忘记google reader和google maps,都是lab里面毕业生~

6. Design for the world.
google程序员的口号,忽略~

7. Plan for today's and tomorrow's business.
同上。

8. Delight the eye without distracting the mind.
算是一个感受。不会强行插播广告,没有放入无法屏蔽的垃圾邮件。而且,界面已经远非当年那样简陋了:)

9. Be worthy of people's trust.
这个应该让李彦宏以及牛根生看看。有一次开什么员工会议,领导在台上说,“我和牛根生、李彦宏是好朋友,所以他们有难的时候我一定会帮,我们都是中国民营企业的典范”。说的倒也没错,除了谈不上典范,几个人都是一路货。李彦宏的竞价排名和三鹿公关,已经让我彻底的厌恶了这个人。把责任往奶农身上推,然后在进入资本市场寻求发展之后还要“抵御外辱”,我相信很多事情,媒体的报道和当事者本人的初衷出入甚大。往小里说,要先学会做人,才能去做事。往大里说,"Don't be evil"应当是每个企业遵循的准则。

10. Add a human touch.
这个属于“CONTROL”的范畴,第一篇文章讲得肯定比我透彻:)

-------------------------------------

<Why products fail>
by Mike Elgan

Why do some people prefer Windows XP and Mac OS X over Windows Vista? After all, Vista is pretty and sleek and much more advanced than XP, and, in many areas, Mac OS X. Why is there so much love for Xbox, but none for Windows Mobile?

Why do BlackBerry users love their BlackBerrys, but the public is lukewarm about Palm devices?

Why is the Amazon Kindle, which is an unsophisticated, clunky, poorly designed gadget so popular with owners?

Why do people love plain, ugly Gmail?

The answer to these questions is a mystery to most of the companies that make PCs, gadgets, consumer electronics devices and to software makers. The industry spends billions on usability testing and user interface design. Unfortunately, that money is mostly wasted.

The problem is that there are too many technologists in technology. The technology is only half the equation. The other half is the human, that irrational, impulsive, impatient, power-hungry gratification machine.

When you ask someone what they really want, they won't tell you the truth because they're not aware of the truth.

Both users and product designers alike talk about user interface (UI) consistency, usability and simplicity, and system attributes like performance and stability. What's missing is that these attributes are means to an end. The real issue is always the user's physiological feeling of being in control. And control comes in many ways:

Consistency: Designers focus on UI "consistency," but why? Consistency gives predictability, which gives users a feeling that they know what will happen when they do something -- even for the first time. It's a feeling of mastery, of control.

Usability: One of the errors software and hardware designers make is to base their UI decisions on the assumption that the user is an idiot who needs to be protected from himself. Give this moron too much rope and he'll hang himself, the reasoning goes. But instead of taking the Microsoft route -- burying and hiding controls and features, which protects newbies from their own mistakes but frustrates the hell out of experienced users -- it's better to offer a bullet-proof "undo." Give the user control, let them make their own mistakes, then undo the damage if they mess something up.

Simplicity: Simplicity is complex. And there are many ways to achieve it. One way is to insist on top-to-bottom, inside-and-outside simplicity. Extreme examples include the original Palm Pilot organizer, Gmail and RSS feeds. And then there's the illusion of simplicity, which is the Microsoft route. In trying to be the operating system vendor for all people and all tasks, Microsoft Windows and Windows Mobile are extraordinarily complex pieces of software engineering. To "simplify," the company hides features, buries controls and groups features into categories to create the appearance of fewer options, without actually reducing options. (From all accounts, it appears that Windows 7 will offer more of the same.) Both extremes result in something you could call "simplicity." But one version thrills users by putting them in control. The other frustrates them by taking away control.

Performance: Everyone hates slow PCs. It's not the waiting. It's the fact that the PC has wrenched control from the user during the time that the hourglass is displayed. That three seconds of staring at the hourglass is three seconds when you feel utterly powerless. Fast computers are good because they keep the user in control.

Stability: Designers focus on system "stability," but it's not because they worry about time wasted, though that's how users tend to talk a lack of stability. Like the performance issue, instability is about the theft of system control from the user. People waste all kinds of time on all kinds of things, and usually don't mind doing it. What enrages people is when somebody else forces wasted time on you. Blue Screens of Death are more akin to running into unexpected traffic jams or having somebody take away the TV remote control. You're forced into putting your objectives on hold, and left feeling powerless.

One reason for the industry-wide pandemic of frustrating products is that the whole culture of usability testing doesn't emphasize user feelings of control. Microsoft does usability tests, for example, but its tests are flawed. Typically, it sits random people in front of a PC in a usability lab. Victims are directed to do various tasks, and asked what they're doing and thinking as they try to complete those tasks. All of this is monitored, and everything is recorded.

Microsoft usability testing tends to focus on enabling users to "accomplish goals." Microsoft categorizes these goals according to their educated preconceptions about what people are trying to do based on their jobs or user categorization are you a student, middle manager, designer, for instance. So Microsoft focuses on results. My view is that how the user feels during the process is more important than anything else.

Here's the problem. In these scenarios, users are using somebody else's PC. They expect and assume that the software is in control. There is no psychological feeling of "ownership" over the equipment or the software or the work or anything. So the most important element -- the sense of control people feel when doing their own work on their own PCs in their own homes -- is missing entirely from the tests.

During usability tests, users are asked constantly about the software. And that's the wrong question. When real people are doing real work, they're focused on their own desires and objectives and are frustrated or not frustrated based on the degree to which they're given what they want.

My advice to Microsoft is to add an additional test: a "Who's In Control?" test. After performing a task, ask the user to rank their experience on a scale with "me in control" on one side, and "software in control" on the other. Try all test methods for completing various tasks, and choose the one ranked with the maximum "me in control" score. And they need the home version for ongoing testing in the "real world."

We've all experienced the full range of emotions while using gadgets, PCs, phones and software. At one end of the spectrum is a kind of thrilling joy, where something "just works." At the other end, there is a consuming rage. The amount of time your emotional state spends at one end of the spectrum rather than the other is the one and only thing that determines how much you "love" the product.

All the factors involved in using a PC -- consistency, usability, simplicity, stability, performance and even the successful completion of tasks -- all come down to control.

Give me control, and I will love your product. It's as simple as that.
---------------------------------------

<What makes a design "Googley"?>
by Sue Factor

Late in 2007, our User Experience (UX) group—which does user interface design, visual design, user research, web development, and user interface writing—set out to articulate the principles that ought to guide Google designs worldwide. What are the fundamentals that all Google designers and researchers accept? Which approaches to design are particularly "Googley"? How can we encourage teams throughout Google to dream big and make smart design decisions?

A small team gathered to discuss these questions and define the Googley Design Principles:

1. Focus on people—their lives, their work, their dreams.
2. Every millisecond counts.
3. Simplicity is powerful.
4. Engage beginners and attract experts.
5. Dare to innovate.
6. Design for the world.
7. Plan for today's and tomorrow's business.
8. Delight the eye without distracting the mind.
9. Be worthy of people's trust.
10. Add a human touch.

These UX principles flow naturally from the Ten things Google has found to be true and the UX group's stated mission: to design products that satisfy and delight our users. We described the principles as "Our Aspirations" for two reasons:

We have a lot of work to do when it comes to implementation.
Every real-world product will have to strike a balance between all ten principles.

Still, we don't want to waffle too much. These principles represent the User Experience group's declaration of beliefs. With "Satisfy and Delight" stitched on our leotards, we're determined to get up on the tightrope and start juggling principles. Please applaud or boo, as appropriate, so that we can make the next act even better.

January 10, 2009

Bullog.cn is killed... again!


尽管上面的很多言论相当无趣,但自由的发表自己的观点并尊重别人的立场,是一个健康的社会最为基本的特征吧。搞不好过几天,blogspot也会被屏蔽;然后是Youtube?wikipedia?……随便吧,自欺欺人的做法,无非是逼着每一个心智健全的人离开这里。

If in order to banish the opinion in question from the world it were sufficient to stop the mouth of a single man,... then that would be very easily done. But things stand otherwise. To carry out such a decision it would be necessary not only to prohibit the book of Copernicus and the writings of other authors who follow the same opinion, but to ban the whole science of astronomy. Furthermore, it would be necessary to forbid men to look at the heavens。----By Galileo

Days of our lives

Daisypath Anniversary tickers