<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5052484681940626599</id><updated>2024-08-30T17:08:50.093-07:00</updated><category term="Ruby on Rails"/><category term="code"/><category term="mobile cloud computing"/><category term="test"/><category term="Cracking The Coding Interview"/><category term="Grid Computing"/><category term="Ruby"/><category term="SaaS"/><category term="attributes"/><category term="cloud computing"/><category term="521"/><category term="A Berkeley View of Cloud Computing"/><category term="ASMCC"/><category term="ASST2"/><category term="AdaBoost"/><category term="Agile Web Development"/><category term="Ajax"/><category term="Alex MacCaw"/><category term="Amazon"/><category term="Amazon EC2"/><category term="Apple"/><category term="Berkeley view of Cloud Computing"/><category term="Business Model"/><category term="CS"/><category term="CSS"/><category term="Cloud Computing Economics"/><category term="Cloud Computing&#39;s characteristics"/><category term="DPM"/><category term="Definition and Classification"/><category term="Distributed Computing"/><category term="EPI"/><category term="Ease User Experience"/><category term="Executive Summary"/><category term="GPA"/><category term="GPMCC"/><category term="Google"/><category term="Google App Engine"/><category term="Google AppEngine"/><category term="Google Cloud Computing"/><category term="Google File System"/><category term="HOG"/><category term="HTML"/><category term="High Performance Computing"/><category term="IaaS(HaaS)"/><category term="Interests"/><category term="Jamie Zawinski"/><category term="JavaScript"/><category term="LDA"/><category term="Load Balance"/><category term="Loose Coupling"/><category term="MVC"/><category term="Map Reduce"/><category term="Meta Programming"/><category term="Microsoft"/><category term="Microsoft Azure"/><category term="Mircea Goia"/><category term="Network Storage"/><category term="ORM"/><category term="OS"/><category term="OS161"/><category term="Object Oriented Design (OOD)"/><category term="PCA"/><category term="PHP"/><category term="PaaS"/><category term="Parallel Computing"/><category term="PhD"/><category term="Private Cloud"/><category term="Public Cloud"/><category term="QoS"/><category term="S.A.R."/><category term="SIFT"/><category term="Service Oriented"/><category term="Skills"/><category term="Startup vs Big Company"/><category term="Strong Fault Tolerance"/><category term="Technology Career Plan"/><category term="The Google Resume"/><category term="Top 10 Obstacles and Opportunities"/><category term="Utility Computing"/><category term="Virtualization"/><category term="Work/Life Balance."/><category term="algorithm design"/><category term="ask questions"/><category term="bag-of-words"/><category term="behavioral questions"/><category term="career option"/><category term="computer vision"/><category term="detection"/><category term="fault-tolerant nodes"/><category term="features"/><category term="five algorithm approaches"/><category term="java"/><category term="job"/><category term="k-NN"/><category term="key techniques"/><category term="large-scale clusters"/><category term="largest prime factor"/><category term="lock"/><category term="machine learning"/><category term="networking"/><category term="online application"/><category term="online contribution"/><category term="programmer"/><category term="programming"/><category term="programming interview"/><category term="project experience"/><category term="pseudo-code"/><category term="quality"/><category term="quantify impact"/><category term="recognition"/><category term="reflection"/><category term="regression"/><category term="technical questions"/><category term="top 10 mistakes candidate make"/><category term="travelling"/><category term="understand"/><category term="unit test"/><category term="validation"/><category term="vehicle classification"/><category term="vehicle detection"/><category term="vehicle recognition"/><category term="vehicle tracking"/><category term="writing"/><title type='text'>Yao_Shamujia Countryman</title><subtitle type='html'>Exploring in IT. CARPE DIEM!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-5580740331800614297</id><published>2014-03-16T16:00:00.001-07:00</published><updated>2014-03-19T09:45:48.706-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Meta Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="Ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="Ruby on Rails"/><title type='text'>Learning Notes about Metaprogramming Ruby</title><content type='html'>1. Metaprogramming is writing code that manipulates language constructs at runtime.&lt;br /&gt;
&lt;br /&gt;
2. Named Arguments allows you to set arguments by names rather than by position.&lt;br /&gt;
&lt;br /&gt;
3. Argument array, the * operator collects multiple arguments in a single array.&lt;br /&gt;
&lt;br /&gt;
def my_method(*args)&lt;br /&gt;
&amp;nbsp; &amp;nbsp;args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
my_method(1, &#39;2&#39;, &#39;three&#39;) # =&amp;gt; [1, &quot;2&quot;, &quot;three&quot;]&lt;br /&gt;
&lt;br /&gt;
4. Self Yield&lt;br /&gt;
When you pass a block to a method, you expect the method to call back to the block through yield.&lt;br /&gt;
&lt;br /&gt;
5. Metaprogramming: design a Domain Specific Language (DSL) and then using that DSL to write your own program.&lt;br /&gt;
&lt;br /&gt;
6. An object&#39;s instance variables live in the object itself, and an object&#39;s methods live in the object&#39;s class. (Objects of the same class share methods but don&#39;t share instance variables)&lt;br /&gt;
&lt;br /&gt;
7. A class is just a souped-up module with 3 additional methods---new(), allocate() and supreclass()---that allows you to create objects or arrange classes into hierarchies.&lt;br /&gt;
&lt;br /&gt;
8. Classes are nothing but objects, class names are nothing but constants.&lt;br /&gt;
&lt;br /&gt;
9. Module is to be imported somewhere (or used as a Namespace) and class is to be instantiated or inherited.&lt;br /&gt;
&lt;br /&gt;
10. load() to execute code and require() to import libraries.&lt;br /&gt;
&lt;br /&gt;
11. When you call a method, actually you are sending a message to an object.&lt;br /&gt;
&lt;br /&gt;
12. Symbol is immutable and some operations (such as comparison) run faster on symbol rather than on string. Symbol is used as the name of things, particularly, name of metaprogramming related things such as methods.&lt;br /&gt;
&lt;br /&gt;
13. Black slate, a class that has fewer methods than the Object class itself since removing most inherited methods from your proxies right away.&lt;br /&gt;
&lt;br /&gt;
14. Procs vs. Lambdas&lt;br /&gt;
1) In a lambda, return just returns from the lambda.&lt;br /&gt;
2) In the way check their arguments, lambda tends to be less tolerant than procs (and regular blocks).&lt;br /&gt;
&lt;br /&gt;
15. Blocks(they aren&#39;t really &quot;objects&quot;, but they are still callable): Evaluated in the scope in which they&#39;re defined.&lt;br /&gt;
&lt;br /&gt;
Procs: Objects of class Proc. Like blocks, they are evaluated in the scope where they&#39;re defined.&lt;br /&gt;
&lt;br /&gt;
Lambdas: Also objects of class Proc but subtly different from regular procs. They&#39;re closures like blocks and procs, and as such they&#39;re evaluated in the scope where they&#39;re defined.&lt;br /&gt;
&lt;br /&gt;
Methods: Bound to an object, they are evaluated in that object&#39;s scope. They can also be unbound from their scope and rebound to the scope of another object.&lt;br /&gt;
&lt;br /&gt;
16. Around Alias in three steps:&lt;br /&gt;
1) You alias a method.&lt;br /&gt;
2) You redefine it.&lt;br /&gt;
3) You call the old method from the new method.&lt;br /&gt;
&lt;br /&gt;
17. When you learn that, when it comes right down to it, code is just text.&lt;br /&gt;
&lt;br /&gt;
18. A master developer sits on top of mountain, meditating.&lt;br /&gt;
You are smart enough to learn, but are you smart enough to forget what you have learned? There&#39;s no such thing as metaprogramming. It&#39;s just programming all the way through.&lt;br /&gt;
&lt;br /&gt;
19. Trade-off of metaprogramming&lt;br /&gt;
Complexity for beginner vs Complexity for experts&lt;br /&gt;
&lt;br /&gt;
Internal Complexity vs External Complexity (By making insides of your code more complex, you make your library simpler for clients.&lt;br /&gt;
&lt;br /&gt;
Complexity by Terseness vs Complexity by Duplication&lt;br /&gt;
&lt;br /&gt;
Complexity for humans vs Complexity for tools&lt;br /&gt;
&lt;br /&gt;
20. Class Extension Mixing turns methods in module into class methods, modules make code easier to understand and change.&lt;br /&gt;
&lt;br /&gt;
21. Metaprogramming code can get complex but you can manage the complexity with unit testing which help you write code clean and error-free.&lt;br /&gt;
&lt;br /&gt;
22. Ruby with Metaprogramming expects you manipulate the language constructs, tweak the object model, reopen classes, define methods dynamically, and manage scopes with blocks. (&lt;u&gt;There&#39;s no such thing as metaprogramming. It&#39;s just programming all the way through.&lt;/u&gt;)&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/5580740331800614297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2014/03/learning-notes-about-metaprogramming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5580740331800614297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5580740331800614297'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2014/03/learning-notes-about-metaprogramming.html' title='Learning Notes about Metaprogramming Ruby'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-6365923673115034657</id><published>2014-02-22T11:26:00.001-08:00</published><updated>2014-04-08T17:10:43.860-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cracking The Coding Interview"/><category scheme="http://www.blogger.com/atom/ns#" term="EPI"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="Object Oriented Design (OOD)"/><category scheme="http://www.blogger.com/atom/ns#" term="reflection"/><category scheme="http://www.blogger.com/atom/ns#" term="test"/><title type='text'>Cracking the Coding Interview reflection</title><content type='html'>1. When test multiple cases, be careful about resetting global or shared variables for next test case! (i.e. vertex visited or not in problem Search Route In A Graph, previous value in problem Validate Binary Search Tree)&lt;br /&gt;
&lt;br /&gt;
2. Code in Google Java Style, which is widely used in Google Projects&lt;br /&gt;
&lt;a href=&quot;http://google-styleguide.googlecode.com/svn/trunk/javaguide.html&quot;&gt;http://google-styleguide.googlecode.com/svn/trunk/javaguide.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
1) add braces {} for one statement block like if, else, for, while.&lt;br /&gt;
2) Class name use UpperCamelCase. Method, Local Variable and Parameter name use lowerCaseCamel.&lt;br /&gt;
3) Noun for Class name, verb for method name, adjective for interface name.&lt;br /&gt;
4) null is not instance of anything.&lt;br /&gt;
5) package files for easy management and name space separation&lt;br /&gt;
&lt;br /&gt;
3. My solution:&lt;br /&gt;
&lt;a href=&quot;https://github.com/yao23/InterviewPreparation&quot;&gt;https://github.com/yao23/InterviewPreparation&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
4. OOD&lt;br /&gt;
1) Communication with the interviewer to clarify ambiguity for system sketch&lt;br /&gt;
2) Abstract objects from scenario, sometimes simplify the case, like corner pieces array in pro 6&lt;br /&gt;
3) Extract relationship between objects for inheritance, interface and property&lt;br /&gt;
4) Confirm action for methods, use key words in the problem&lt;br /&gt;
5) Divide large objects into components (i.e. online reading system into library, user manager and display)&lt;br /&gt;
6) HashMap is useful for fields or attribute design, Create/ Read/ Update/ Delete (CRUD) for methods design&lt;br /&gt;
7) Focus on core steps in the problem, such as attach edges, remove the edge from open edge lists, find next exposed edge in pro 6&lt;br /&gt;
8) use pseudo-code or comment to express ideas, what you did is less important than why you did, discuss trade-off with interviewer&lt;br /&gt;
9) use array for frequent searching, linked list for frequent adding and deleting&lt;br /&gt;
&lt;br /&gt;
5. Database&lt;br /&gt;
1) trade-off between flexibility and complexity&lt;br /&gt;
2) Make assumptions. Incorrect assumptions can be dealt with as long as they were acknowledged in both reality and interview&lt;br /&gt;
3) Normalized database is designed to reduce redundancy and denormalized &amp;nbsp;one is to optimize read time with redundancy, but expensive to update and insert, sometimes inconsistent, need more storage&lt;br /&gt;
&lt;br /&gt;
6. Stack can replace array when don&#39;t need to store immediate values, like &lt;a href=&quot;http://dp2.me/blog/?p=482&quot; target=&quot;_blank&quot;&gt;Largest Rectangle in Histogram&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Elements of Programming Interview&lt;br /&gt;
1. Approaching the problem&lt;br /&gt;
Clarify the question&lt;br /&gt;
Work on small examples&lt;br /&gt;
Spell out the brute-force solution&lt;br /&gt;
Think out loud&lt;br /&gt;
Apply patterns(D&amp;amp;C, recursion, DP, graph, hashmap, binary tree, stack, etc.)&lt;br /&gt;
&lt;br /&gt;
2. Presenting the solution&lt;br /&gt;
Libraries&lt;br /&gt;
Focus on the top-level algorithm&lt;br /&gt;
Manage the whiteboard&lt;br /&gt;
Test for corner cases&lt;br /&gt;
Syntax&lt;br /&gt;
Memory management&lt;br /&gt;
&lt;br /&gt;
3. General conversation&lt;br /&gt;
Can the candidate clearly communicate a complex idea?&lt;br /&gt;
Is the candidate passionate about his work?&lt;br /&gt;
Is there a potential interest match with some project?&lt;br /&gt;
&lt;br /&gt;
4. Other advice&lt;br /&gt;
Be honest&lt;br /&gt;
Keep a positive spirit&lt;br /&gt;
Don&#39;t apologize&lt;br /&gt;
Appearance&lt;br /&gt;
Be aware of your body language&lt;br /&gt;
Keep money and perks out of the interview&lt;br /&gt;
&lt;br /&gt;
5. Stress interviews&lt;br /&gt;
&lt;br /&gt;
6. Learning from bad outcomes&lt;br /&gt;
&lt;br /&gt;
7. Data Structure&lt;br /&gt;
Primitive types, Array &amp;amp; String, List, Stack and Queue, Binary Tree, Heap, Hash Table, Binary Search Tree. (Skip List, Treap, Fibonacci Heap, Disjoint-set data structures, Tries)&lt;br /&gt;
&lt;br /&gt;
8. Algorithm&lt;br /&gt;
Sorting, Recursion, Divide and Conquer, Dynamic Programming, Greedy, Incremental Improvement, Elimination, Parallelism, Caching, Randomization, Approximation, State&lt;br /&gt;
&lt;br /&gt;
9. Abstract analysis techniques&lt;br /&gt;
Case analysis, Small examples, Iterative refinement, Reduction, Graph modeling, Write an equation, Variation, Invariants&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/6365923673115034657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2014/02/cracking-coding-interview-reflection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/6365923673115034657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/6365923673115034657'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2014/02/cracking-coding-interview-reflection.html' title='Cracking the Coding Interview reflection'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-4467594748263571620</id><published>2014-02-17T17:02:00.000-08:00</published><updated>2014-02-19T00:10:25.210-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ajax"/><category scheme="http://www.blogger.com/atom/ns#" term="test"/><category scheme="http://www.blogger.com/atom/ns#" term="unit test"/><category scheme="http://www.blogger.com/atom/ns#" term="validation"/><title type='text'>Learning Notes about Agile Web Development with Rails (4)</title><content type='html'>Rails application --- Depot&lt;br /&gt;
&lt;br /&gt;
Ruby on Rails shines when it comes to dealing with change—it’s an ideal agile&lt;br /&gt;
programming environment.&lt;br /&gt;
&lt;br /&gt;
Along the way we will be building and maintaining a corpus of tests. These&lt;br /&gt;
tests will ensure that the application is always doing what we intend to do.&lt;br /&gt;
Rails not only enables the creation of such tests, it actually provides you with&lt;br /&gt;
an initial set of tests each time you define a new controller.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1. Use Cases&lt;/div&gt;
&lt;div&gt;
A use case is simply a statement about how some entity uses a system. Con-&lt;/div&gt;
&lt;div&gt;
sultants invent these kinds of phrases to label things we’ve all known all&lt;/div&gt;
&lt;div&gt;
along—it’s a perversion of business life that fancy words always cost more&lt;/div&gt;
&lt;div&gt;
than plain ones, even though the plain ones are more valuable.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
2. Page Flow&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Some folks like to mock up web application page flows using Photoshop, Word,&lt;/div&gt;
&lt;div&gt;
or (shudder) HTML. We like using a pencil and paper. It’s quicker, and the&lt;/div&gt;
&lt;div&gt;
customer gets to play too, grabbing the pencil and scribbling alterations right&lt;/div&gt;
&lt;div&gt;
on the paper.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
3. Data&lt;/div&gt;
&lt;div&gt;
Finally, we need to think about the data we’re going to be working with.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Notice that we’re not using words such as schema or classes here. We’re also&lt;/div&gt;
&lt;div&gt;
not talking about databases, tables, keys, and the like. We’re simply talking&lt;/div&gt;
&lt;div&gt;
about data. At this stage in the development, we don’t know whether we’ll even&lt;/div&gt;
&lt;div&gt;
be using a database.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
4.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Task A: Creating the Application&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration A1: Creating the Products Maintenance Application&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Creating a Rails Application&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Creating the Database&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Generating the Scaffold&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Applying the Migration (Rake looks for all the migrations not yet applied to the database&lt;/div&gt;
&lt;div&gt;
and applies them.)&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Iteration A2: Making Prettier Listings&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Our customer has one more request (customers always seem to have one more&lt;/div&gt;
&lt;div&gt;
request).&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
this code uses &lt;b&gt;%{...}&lt;/b&gt;. This is an alternative syntax for &lt;b&gt;double-quoted&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
string literals, convenient for use with long strings.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Rails keeps a separate file that is used to create a standard page environment&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
for the entire application. This file, called application.html.erb, is a Rails layout&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
and lives in the layouts directory&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
• We created a development database.&lt;/div&gt;
&lt;div&gt;
• We used migration to create and modify the schema in our development&lt;/div&gt;
&lt;div&gt;
database.&lt;/div&gt;
&lt;div&gt;
• We created the products table and used the scaffold generator to write an&lt;/div&gt;
&lt;div&gt;
application to maintain it.&lt;/div&gt;
&lt;div&gt;
• Updated an application wide layout as well as controller specific view in&lt;/div&gt;
&lt;div&gt;
order to show a list of products.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Task B: Validation and Unit Testing&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration B1: Validating!&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
The model layer is the gatekeeper between&lt;/div&gt;
&lt;div&gt;
the world of code and the database. Nothing to do with our application comes&lt;/div&gt;
&lt;div&gt;
out of the database or gets stored into the database that doesn’t first go&lt;/div&gt;
&lt;div&gt;
through the model. This makes models an ideal place to put validations; it&lt;/div&gt;
&lt;div&gt;
doesn’t matter whether the data comes from a form or from some program-&lt;/div&gt;
&lt;div&gt;
matic manipulation in our application. If a model checks it before writing to&lt;/div&gt;
&lt;div&gt;
the database, then the database will be protected from bad data.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration B2: Unit Testing of Models&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
An &lt;b&gt;assertion&lt;/b&gt; is simply a method call that tells the framework what we expect to be true.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Test Fixtures&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
In the world of testing, a fixture is an environment in which you can run a&lt;/div&gt;
&lt;div&gt;
test.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In the world of Rails, a test fixture is simply a specification of the initial con-&lt;/div&gt;
&lt;div&gt;
tents of a model (or models) under test. If, for example, we want to ensure that&lt;/div&gt;
&lt;div&gt;
our products table starts off with known data at the start of every unit test, we&lt;/div&gt;
&lt;div&gt;
can specify those contents in a fixture, and Rails will take care of the rest.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
What We Just Did&lt;/div&gt;
&lt;div&gt;
• We ensured that required fields were present.&lt;/div&gt;
&lt;div&gt;
• We ensured that price fields were numeric, and at least one cent.&lt;br /&gt;
• We ensured that titles were unique.&lt;br /&gt;
• We ensured that images matched a given format.&lt;br /&gt;
• We updated the unit tests that Rails provided, both to conform to the&lt;br /&gt;
constraints we have imposed on the model and to verify the new code&lt;br /&gt;
that we added.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Task C: Catalog Display&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration C1: Creating the Catalog Listing&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration C2: Adding a Page Layout&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration C3: Using a Helper to Format the Price&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration C4: Functional Testing of Controllers&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Both validation and functional tests will only test the behavior of controllers,&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
they will not retroactively affect any data that already exists in the database or&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
in fixtures.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
What We Just Did&lt;/div&gt;
&lt;div&gt;
We’ve put together the basis of the store’s catalog display. The steps were as&lt;/div&gt;
&lt;div&gt;
follows:&lt;/div&gt;
&lt;div&gt;
1. Create a new controller to handle customer-centric interactions.&lt;/div&gt;
&lt;div&gt;
2. Implement the default index action.&lt;/div&gt;
&lt;div&gt;
3. Add a default_scope to the Product model to specify the order to list the&lt;/div&gt;
&lt;div&gt;
items on the website.&lt;/div&gt;
&lt;div&gt;
4. Implement a view (an .html.erb file) and a layout to contain it (another&lt;/div&gt;
&lt;div&gt;
.html.erb file).&lt;/div&gt;
&lt;div&gt;
5. Use a helper to format prices the way we want.&lt;/div&gt;
&lt;div&gt;
6. Make use of a CSS stylesheet.&lt;/div&gt;
&lt;div&gt;
7. Write functional tests for our controller.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Task D: Cart Creation&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration D1: Finding a Cart&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration D2: Connecting Products to Carts&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
There’s an easy way to remember where to put&lt;/div&gt;
&lt;div&gt;
belongs_to declarations: if a table has foreign keys, the corresponding model&lt;/div&gt;
&lt;div&gt;
should have a belongs_to for each.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration D3: Adding a Button&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
What We Just Did&lt;/div&gt;
&lt;div&gt;
It has been a busy, productive day so far. We’ve added a shopping cart to our&lt;/div&gt;
&lt;div&gt;
store, and along the way we’ve dipped our toes into some neat Rails features:&lt;/div&gt;
&lt;div&gt;
• We created a Cart object in one request and were able to successfully&lt;/div&gt;
&lt;div&gt;
locate the same Cart in subsequent requests using a session object,&lt;/div&gt;
&lt;div&gt;
• we added a private method in the base class for all of our controllers,&lt;/div&gt;
&lt;div&gt;
making it accessible to all of our controllers,&lt;/div&gt;
&lt;div&gt;
• we created relationships between Carts and Line Items, relationships&lt;/div&gt;
&lt;div&gt;
between Line Items and Products, and were able to navigate using these&lt;/div&gt;
&lt;div&gt;
relationships, and&lt;/div&gt;
&lt;div&gt;
• we added a button which caused a product to be POSTed to a cart, caus-&lt;/div&gt;
&lt;div&gt;
ing a new LineItem to be created.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Task E: A Smarter Cart&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration E1: Creating a Smarter Cart&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration E2: Handling Errors&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Rails has a convenient way of dealing with errors and error reporting. It defines&lt;/div&gt;
&lt;div&gt;
a structure called a &lt;b&gt;flash&lt;/b&gt;. A flash is a bucket (actually closer to a Hash) in which&lt;/div&gt;
&lt;div&gt;
you can store stuff as you process a request. The contents of the flash are&lt;/div&gt;
&lt;div&gt;
available to the next request in this session before being deleted automatically.&lt;/div&gt;
&lt;div&gt;
Typically the flash is used to collect error messages.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration E3: Finishing the Cart&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
What We Just Did&lt;br /&gt;
Our shopping cart is now something the client is happy with. Along the way,&lt;br /&gt;
we covered:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
• Adding a column to an existing table, with a default value&lt;/div&gt;
&lt;div&gt;
• Migrating existing data into the new table format&lt;/div&gt;
&lt;div&gt;
• Providing a flash notice of an error that was detected&lt;/div&gt;
&lt;div&gt;
• Using the logger to log events&lt;/div&gt;
&lt;div&gt;
• Deleted a record&lt;/div&gt;
&lt;div&gt;
• Adjusted the way a table is rendered, using CSS.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Task F: Add a Dash of Ajax&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Whenever you work with Ajax, it’s good to start with the non-Ajax version of&lt;/div&gt;
&lt;div&gt;
the application and then gradually introduce Ajax features.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Iteration F1: Moving the Cart&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
A &lt;b&gt;partial&lt;/b&gt; is simply a chunk of a view in its own separate file. You can&lt;/div&gt;
&lt;div&gt;
invoke (render) a partial from another template or from a controller, and the&lt;/div&gt;
&lt;div&gt;
partial will render itself and return the results of that rendering. And, just as&lt;/div&gt;
&lt;div&gt;
with methods, you can pass parameters to a partial, so the same partial can&lt;/div&gt;
&lt;div&gt;
render different results.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Rails automatically prepends an underscore to the partial name when looking&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
for the file.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration F2: Creating an Ajax-Based Cart&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Ajax lets us write code that runs in the browser that interacts with our server-&lt;/div&gt;
&lt;div&gt;
based application.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration F3: Highlighting Changes&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration F4: Hiding an Empty Cart&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Whenever we want to abstract some processing out of a view (any kind of view),&lt;/div&gt;
&lt;div&gt;
we should write a helper method.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
What We Just Did&lt;/div&gt;
&lt;div&gt;
In this iteration we added Ajax support to our cart:&lt;/div&gt;
&lt;div&gt;
• We moved the shopping cart into the sidebar. We then arranged for the&lt;/div&gt;
&lt;div&gt;
create action to redisplay the catalog page.&lt;/div&gt;
&lt;div&gt;
• We used :remote =&amp;gt; true to invoke the LineItem.new action using Ajax.&lt;/div&gt;
&lt;div&gt;
• We then used an RJS template to update the page with just the cart’s&lt;/div&gt;
&lt;div&gt;
HTML.&lt;/div&gt;
&lt;div&gt;
• To help the user see changes to the cart, we added a highlight effect,&lt;/div&gt;
&lt;div&gt;
again using the RJS template.&lt;/div&gt;
&lt;div&gt;
• We wrote a helper method that hides the cart when it is empty and used&lt;/div&gt;
&lt;div&gt;
the RJS template to reveal it when an item is added.&lt;/div&gt;
&lt;div&gt;
• We wrote a test which verifies not only the creation of a line item but also&lt;/div&gt;
&lt;div&gt;
the content of the response that is returned from such a request.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
First, if you plan to do a lot of Ajax development, you’ll probably need to get familiar with your browser’s Java Script debugging facilities and with its DOM inspectors, such as Firefox’s Fire-&lt;br /&gt;
bug, Internet Explorer 8’s Developer Tools, Google Chrome’s Developer Tools,&lt;br /&gt;
Safari’s Web Inspector, or Opera’s Dragonfly. And, second, the NoScript plug-&lt;br /&gt;
in for Firefox makes checking JavaScript/no JavaScript a one-click breeze.&lt;br /&gt;
Others find it useful to run two different browsers when they are developing—&lt;br /&gt;
have JavaScript enabled in one, disabled in the other. Then, as new features&lt;br /&gt;
are added, poking at it with both browsers will make sure your application&lt;br /&gt;
works regardless of the state of JavaScript.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Task G: Check Out!&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration G1: Capturing an Order&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration G2: Atom Feeds&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration G3: Pagination&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
What We Just Did&lt;/div&gt;
&lt;div&gt;
In a fairly short amount of time, we did the following:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
• We created a form to capture details for the order and linked it to a new&lt;/div&gt;
&lt;div&gt;
order model.&lt;/div&gt;
&lt;div&gt;
• We added validation and used helper methods to display errors to the&lt;/div&gt;
&lt;div&gt;
user.&lt;/div&gt;
&lt;div&gt;
• We installed and used a plugin to paginate the list of orders.&lt;/div&gt;
&lt;div&gt;
• We provided a feed so that the administrator can monitor orders as they&lt;/div&gt;
&lt;div&gt;
come in.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Task H: Sending Mail&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration H1: Sending Confirmation E-mails&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration H2: Integration Testing of Applications&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Unit testing of models&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Model classes contain business logic. For example, when we add a prod-&lt;/div&gt;
&lt;div&gt;
uct to a cart, the cart model class checks to see whether that product is&lt;/div&gt;
&lt;div&gt;
already in the cart’s list of items. If so, it increments the quantity of that&lt;/div&gt;
&lt;div&gt;
item; if not, it adds a new item for that product.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Functional testing of controllers&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Controllers direct the show. They receive incoming web requests (typ-&lt;/div&gt;
&lt;div&gt;
ically user input), interact with models to gather application state, and&lt;/div&gt;
&lt;div&gt;
then respond by causing the appropriate view to display something to the&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
user. So when we’re testing controllers, we’re making sure that a given&lt;/div&gt;
&lt;div&gt;
request is answered with an appropriate response. We still need models,&lt;/div&gt;
&lt;div&gt;
but we already have them covered with unit tests.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
The next level of testing is to exercise the flow through our application. In many&lt;/div&gt;
&lt;div&gt;
ways, this is like testing one of the stories that our customer gave us when we&lt;/div&gt;
&lt;div&gt;
first started to code the application. For example, we might have been told&lt;/div&gt;
&lt;div&gt;
that A user goes to the store index page. They select a product, adding it to their&lt;/div&gt;
&lt;div&gt;
cart. They then check out, filling in their details on the checkout form. When they&lt;/div&gt;
&lt;div&gt;
submit, an order is created in the database containing their information, along&lt;/div&gt;
&lt;div&gt;
with a single line item corresponding to the product they added to their cart.&lt;/div&gt;
&lt;div&gt;
Once the order has been received, an e-mail is sent confirming their purchase.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This is ideal material for an &lt;b&gt;integration test&lt;/b&gt;. Integration tests simulate a con-&lt;/div&gt;
&lt;div&gt;
tinuous session between one or more virtual users and our application. You&lt;/div&gt;
&lt;div&gt;
can use them to send in requests, monitor responses, follow redirects, and so&lt;/div&gt;
&lt;div&gt;
on.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
(When you create a model or controller, Rails creates the corresponding unit or&lt;/div&gt;
&lt;div&gt;
functional tests. Integration tests are not automatically created, however, but&lt;/div&gt;
&lt;div&gt;
you can use a generator to create one.)&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
What We Just Did&lt;/div&gt;
&lt;div&gt;
Without much code, and a few templates, we have managed to pull off the&lt;/div&gt;
&lt;div&gt;
following:&lt;/div&gt;
&lt;div&gt;
• We configured our development, test, and production environments for&lt;/div&gt;
&lt;div&gt;
our Rails application to enable the sending of outbound e-mails.&lt;/div&gt;
&lt;div&gt;
• We created and tailored a mailer which will send confirmation e-mails in&lt;/div&gt;
&lt;div&gt;
both plain text and HTML formats to people who order our products.&lt;/div&gt;
&lt;div&gt;
• We created both a functional test for the e-mails produced,&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Task I: Logging In&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration I1: Adding Users&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration I2: Authenticating Users&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Iteration I3: Limiting Access&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Rails &lt;b&gt;filters&lt;/b&gt; allow you to intercept calls to action methods, adding your own&lt;/div&gt;
&lt;div&gt;
processing before they are invoked, after they return, or both. In our case, we’ll&lt;/div&gt;
&lt;div&gt;
use a before filter to intercept all calls to the actions in our admin controller.&lt;/div&gt;
&lt;div&gt;
The interceptor can check session[:user_id]. If set and if it corresponds to a user&lt;/div&gt;
&lt;div&gt;
in the database, the application knows an administrator is logged in, and the&lt;/div&gt;
&lt;div&gt;
call can proceed. If it’s not set, the interceptor can issue a redirect, in this case&lt;/div&gt;
&lt;div&gt;
to our login page.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration I4: Adding a Sidebar, More Administration&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
What We Just Did&lt;/div&gt;
&lt;div&gt;
By the end of this iteration, we’ve done the following:&lt;/div&gt;
&lt;div&gt;
• We created a virtual attribute representing the plain-text password and&lt;/div&gt;
&lt;div&gt;
coded it to create the hashed version whenever the plain-text version is&lt;/div&gt;
&lt;div&gt;
updated.&lt;/div&gt;
&lt;div&gt;
• We controlled access to the administration functions using before filters&lt;/div&gt;
&lt;div&gt;
to invoke an authorize method.&lt;/div&gt;
&lt;div&gt;
• We saw how to use rails console to interact directly with a model (and dig&lt;/div&gt;
&lt;div&gt;
us out of a hole after we deleted the last user).&lt;/div&gt;
&lt;div&gt;
• We saw how a transaction can help prevent deleting the last user.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Task J: Internationalization&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration J1: Selecting the locale&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration J2: Translating the Store Front&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration J3: Translating Checkout&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration J4: Add a Locale Switcher&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
What We Just Did&lt;/div&gt;
&lt;div&gt;
By the end of this iteration, we’ve done the following:&lt;/div&gt;
&lt;div&gt;
• We set the default locale for our application, and provided a means for&lt;/div&gt;
&lt;div&gt;
the user to select an alternate locale.&lt;/div&gt;
&lt;div&gt;
• We created translation files for text fields, currency amounts, errors, and&lt;/div&gt;
&lt;div&gt;
model names.&lt;/div&gt;
&lt;div&gt;
• We altered layouts and views to call out to the I18n module by way of the&lt;/div&gt;
&lt;div&gt;
t helper in order to translate textual portions of the interface.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Task K: Deployment and Production&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration K1: Deploying with Phusion Passenger and MySQL&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
A deployed Rails application works a bit differently. We can’t&lt;/div&gt;
&lt;div&gt;
just fire up a single Rails server process and let it do all the work. Well, we&lt;/div&gt;
&lt;div&gt;
could, but it’s far from ideal. The reason for this is that Rails is single-threaded.&lt;/div&gt;
&lt;div&gt;
It can work on only one request at a time.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The Web, however, is an extremely &lt;b&gt;concurrent&lt;/b&gt; environment. Production web&lt;/div&gt;
&lt;div&gt;
servers, such as Apache, Lighttpd, and Zeus, can work on several requests—&lt;/div&gt;
&lt;div&gt;
even tens or hundreds of requests—at the same time. A single-process, single-&lt;/div&gt;
&lt;div&gt;
threaded Ruby-based web server can’t possibly keep up. Luckily, it doesn’t&lt;/div&gt;
&lt;div&gt;
have to keep up. Instead, the way that we deploy a Rails application into pro-&lt;/div&gt;
&lt;div&gt;
duction is to use a front-end server, such as Apache, to handle requests from&lt;/div&gt;
&lt;div&gt;
the client. Then, you use the HTTP &lt;b&gt;proxying&lt;/b&gt; of Passenger to send requests&lt;/div&gt;
&lt;div&gt;
that should be handled by Rails to one of any number of back-end application&lt;/div&gt;
&lt;div&gt;
processes.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
SQLite is not recommended for high-volume, high concurrency web sites with large&lt;/div&gt;
&lt;div&gt;
datasets.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are plenty of alternatives to SQLite, both free and commercial. We will&lt;/div&gt;
&lt;div&gt;
go with MySQL. It already is included in OSX, is available via your native&lt;/div&gt;
&lt;div&gt;
packaging tool in Linux,&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration K2: Deploying Remotely with Capistrano&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Iteration K3: Checking Up on a Deployed Application&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
What We Just Did&lt;/div&gt;
&lt;div&gt;
We covered a lot of ground in this chapter. We’ve taken our code that ran locally&lt;/div&gt;
&lt;div&gt;
on our development machine for a single user and placed it on a different&lt;/div&gt;
&lt;div&gt;
machine, running a different web server, accessing a different database, and&lt;/div&gt;
&lt;div&gt;
possibly even running a different operating system.&lt;/div&gt;
&lt;div&gt;
To accomplish this, we used a number of different products:&lt;/div&gt;
&lt;div&gt;
• We installed and configured Phusion Passenger and Apache httpd, a pro-&lt;/div&gt;
&lt;div&gt;
duction quality web server.&lt;/div&gt;
&lt;div&gt;
• We installed and configured MySQL, a production quality database server.&lt;/div&gt;
&lt;div&gt;
• We got our application’s dependencies under control using Bundler and&lt;/div&gt;
&lt;div&gt;
Git.&lt;/div&gt;
&lt;div&gt;
• We installed and configured Capistrano, which enables us to confidently&lt;/div&gt;
&lt;div&gt;
and repeatably deploy our application.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/4467594748263571620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2014/02/learning-notes-about-agile-web_9495.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/4467594748263571620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/4467594748263571620'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2014/02/learning-notes-about-agile-web_9495.html' title='Learning Notes about Agile Web Development with Rails (4)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-3837743187331944185</id><published>2014-02-17T11:14:00.000-08:00</published><updated>2014-02-17T12:06:59.148-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="Ruby on Rails"/><title type='text'>Learning Notes about Agile Web Development with Rails (3)</title><content type='html'>Basic Ruby programming language knowledge&lt;br /&gt;
&lt;br /&gt;
1. &lt;b&gt;Ruby Names&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Local variables, method parameters, and method names&lt;/b&gt; should all start with&lt;br /&gt;
a lowercase letter or with an underscore: order, line_item, and xr2000 are all&lt;br /&gt;
valid. Instance variables begin with an “at” sign (@), such as @quantity and @product_id. The Ruby convention is to use underscores to separate words in a multiword method or variable name (so&lt;br /&gt;
line_item is preferable to lineItem).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Class names, module names, and constants&lt;/b&gt; must start with an uppercase&lt;br /&gt;
letter. By convention they use capitalization, rather than underscores, to dis-&lt;br /&gt;
tinguish the start of words within the name. Class names look like Object,&lt;br /&gt;
PurchaseOrder, and LineItem.&lt;br /&gt;
&lt;br /&gt;
Rails uses &lt;b&gt;symbols&lt;/b&gt; to identify things. In particular, it uses them as keys when&lt;br /&gt;
naming method parameters and looking things up in hashes.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
2. Methods&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
You don’t need a semicolon at the end of a statement as long as you put each&lt;/div&gt;
&lt;div&gt;
statement on a separate line. Ruby comments start with a # character and&lt;/div&gt;
&lt;div&gt;
run to the end of the line. Indentation is not significant (but two-character&lt;/div&gt;
&lt;div&gt;
indentation is the de facto Ruby standard).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ruby doesn’t use braces to delimit the bodies of compound statements and&lt;/div&gt;
&lt;div&gt;
definitions (such as methods and classes). Instead, you simply finish the body&lt;/div&gt;
&lt;div&gt;
with the keyword end. The keyword return is optional, and if not present, the&lt;/div&gt;
&lt;div&gt;
results of the last expression evaluated will be returned.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
3. Strings&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This previous example also showed some Ruby string objects. One way to cre-&lt;/div&gt;
&lt;div&gt;
ate a string object is to use string literals, which are sequences of characters&lt;/div&gt;
&lt;div&gt;
between single or double quotation marks. The difference between the two&lt;/div&gt;
&lt;div&gt;
forms is the amount of processing Ruby does on the string while constructing&lt;/div&gt;
&lt;div&gt;
the literal. In the &lt;b&gt;single-quoted&lt;/b&gt; case, Ruby does very little. With a few excep-&lt;/div&gt;
&lt;div&gt;
tions, what you type into the single-quoted string literal becomes the string’s&lt;/div&gt;
&lt;div&gt;
value.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
In the &lt;b&gt;double-quoted&lt;/b&gt; case, Ruby does more work. First, it looks for substitu-&lt;/div&gt;
&lt;div&gt;
tions—sequences that start with a backslash character—and replaces them&lt;/div&gt;
&lt;div&gt;
with some binary value. The most common of these is \n, which is replaced&lt;/div&gt;
&lt;div&gt;
with a newline character. When you write a string containing a newline to the&lt;/div&gt;
&lt;div&gt;
console, the \n forces a line break.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Second, Ruby performs expression interpolation in double-quoted strings. In&lt;/div&gt;
&lt;div&gt;
the string, the sequence #{expression } is replaced by the value of expression.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
4. Arrays and Hashes&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ruby’s arrays and hashes are indexed collections. Both store collections of&lt;/div&gt;
&lt;div&gt;
objects, accessible using a key. With arrays, the key is an integer, whereas&lt;/div&gt;
&lt;div&gt;
hashes support any object as a key. Both arrays and hashes grow as needed&lt;/div&gt;
&lt;div&gt;
to hold new elements. It’s more efficient to access array elements, but hashes&lt;/div&gt;
&lt;div&gt;
provide more flexibility. Any particular array or hash can hold objects of dif-&lt;/div&gt;
&lt;div&gt;
fering types; you can have an array containing an integer, a string, and a&lt;/div&gt;
&lt;div&gt;
floating-point number, for example.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You can create and initialize a new array object using an array literal—a set&lt;/div&gt;
&lt;div&gt;
of elements between square brackets. Given an array object, you can access&lt;/div&gt;
&lt;div&gt;
individual elements by supplying an index between square brackets, as the&lt;/div&gt;
&lt;div&gt;
next example shows. Ruby array indices start at zero.&lt;br /&gt;
&lt;br /&gt;
In Rails, hashes typically use symbols as keys. Many Rails hashes have been&lt;br /&gt;
subtly modified so that you can use either a string or a symbol interchangeably&lt;br /&gt;
as a key when inserting and looking up values.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;nil&lt;/b&gt; is an object, just like any other, that happens to represent&lt;br /&gt;
nothing. &lt;b&gt;nil&lt;/b&gt; means false when used in conditional expressions.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
5. Regular Expressions&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A regular expression lets you specify a pattern of characters to be matched in&lt;/div&gt;
&lt;div&gt;
a string. In Ruby, you typically create a regular expression by writing /pattern/&lt;/div&gt;
&lt;div&gt;
or %r{pattern}.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
6. Block&lt;br /&gt;
&lt;br /&gt;
Code blocks are just chunks of code between braces or between do...end. A&lt;br /&gt;
common convention is that people use braces for single-line blocks and do/end&lt;br /&gt;
for multiline blocks.&lt;br /&gt;
&lt;br /&gt;
A method can invoke an associated block one or more times using the Ruby&lt;br /&gt;
&lt;b&gt;yield&lt;/b&gt; statement. You can think of yield as being something like a method call&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
that calls out to the block associated with the method containing the yield.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
You can pass values to the block by giving parameters to yield.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
7. Exceptions&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Exceptions are objects (of class Exception or its subclasses). The raise method&lt;/div&gt;
&lt;div&gt;
causes an exception to be raised. This interrupts the normal flow through the&lt;/div&gt;
&lt;div&gt;
code. Instead, Ruby searches back through the call stack for code that says it&lt;/div&gt;
&lt;div&gt;
can handle this exception.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Both methods and blocks of code wrapped between begin and end keywords&lt;/div&gt;
&lt;div&gt;
intercept certain classes of exceptions using rescue clauses.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;rescue&lt;/b&gt; clauses can be directly placed on the outermost level of a method defi-&lt;/div&gt;
&lt;div&gt;
nition without needing to enclose the contents in a begin/end block.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
8. Modules&lt;br /&gt;
&lt;br /&gt;
Modules are similar to classes in that they hold a collection of methods, con-&lt;br /&gt;
stants, and other module and class definitions. Unlike classes, you cannot&lt;br /&gt;
create objects based on modules.&lt;br /&gt;
&lt;br /&gt;
Modules serve two purposes.&lt;br /&gt;
First, they act as a &lt;b&gt;namespace&lt;/b&gt;, letting you define methods whose names will not&lt;br /&gt;
clash with those defined elsewhere.&lt;br /&gt;
Second, they allow you to &lt;b&gt;share functionality between classes&lt;/b&gt;—if a class mixes in a&lt;br /&gt;
module, that module’s instance methods become available as if they had been&lt;br /&gt;
defined in the class. Multiple classes can mix in the same module, sharing the&lt;br /&gt;
module’s functionality without using inheritance. You can also mix multiple&lt;br /&gt;
modules into a single class.&lt;br /&gt;
&lt;br /&gt;
Helper methods are an example of where Rails uses modules. Rails automat-&lt;br /&gt;
ically mixes these helper modules into the appropriate view templates.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
9. YAML&lt;br /&gt;
&lt;br /&gt;
YAML is a recursive acronym which stands for YAML Ain’t Markup Language.&lt;br /&gt;
In the context of Rails, YAML is used as a convenient way to define config-&lt;br /&gt;
uration of things such as databases, test data, and translations.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
10. Marshaling Objects&lt;br /&gt;
&lt;br /&gt;
Ruby can take an object and convert it into a stream of bytes that can be stored&lt;br /&gt;
outside the application. This process is called marshaling. This saved object&lt;br /&gt;
can later be read by another instance of the application (or by a totally separate&lt;br /&gt;
application), and a copy of the originally saved object can be reconstituted.&lt;br /&gt;
&lt;br /&gt;
There are two potential issues when you use marshaling. First, some objects&lt;br /&gt;
cannot be dumped. If the objects to be dumped include bindings, procedure or&lt;br /&gt;
method objects, instances of class IO, singleton objects, or if you try to dump&lt;br /&gt;
anonymous classes or modules, a TypeError will be raised.&lt;br /&gt;
Second, when you load a marshaled object, Ruby needs to know the definition&lt;br /&gt;
of the class of that object (and of all the objects it contains).&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Rails uses marshaling to store session data&lt;/u&gt;. If you rely on Rails to dynam-&lt;br /&gt;
ically load classes, it is possible that a particular class may not have been&lt;br /&gt;
defined at the point it reconstitutes session data. For that reason, you’ll use&lt;br /&gt;
the model declaration in your controller to list all models that are marshaled.&lt;br /&gt;
This preemptively loads the necessary classes to make marshaling work.&lt;br /&gt;
&lt;br /&gt;
11. Ruby Idioms&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
1) lambda&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The lambda operator converts a block into a object of type Proc.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
2) require File.dirname(__FILE__) + ’/../test_helper’&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ruby’s require method loads an external source file into our application.&lt;/div&gt;
&lt;div&gt;
This is used to include library code and classes that our application relies&lt;/div&gt;
&lt;div&gt;
on. In normal use, Ruby finds these files by searching in a list of direc-&lt;/div&gt;
&lt;div&gt;
tories, the LOAD_PATH.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/3837743187331944185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2014/02/learning-notes-about-agile-web_9704.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/3837743187331944185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/3837743187331944185'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2014/02/learning-notes-about-agile-web_9704.html' title='Learning Notes about Agile Web Development with Rails (3)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-1900232682546135099</id><published>2014-02-17T11:00:00.000-08:00</published><updated>2014-02-17T11:00:08.902-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="ORM"/><category scheme="http://www.blogger.com/atom/ns#" term="Ruby on Rails"/><title type='text'>Learning Notes about Agile Web Development with Rails (2)</title><content type='html'>&lt;table cellspacing=&quot;0&quot; class=&quot;sites-layout-name-one-column sites-layout-hbox&quot; style=&quot;background-color: white; color: black; font-family: Arial, Verdana, sans-serif; font-size: 13px; margin: 0px; table-layout: fixed; width: 1183px;&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;sites-layout-tile sites-tile-name-content-1&quot; style=&quot;padding: 10px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot;&gt;
Chapter 3&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1. MVC architecture&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
The&amp;nbsp;&lt;b&gt;model&lt;/b&gt;&amp;nbsp;is responsible for maintaining the state of the application. Some-&lt;/div&gt;
&lt;div&gt;
times this state is transient, lasting for just a couple of interactions with the&lt;/div&gt;
&lt;div&gt;
user. Sometimes the state is permanent and will be stored outside the appli-&lt;/div&gt;
&lt;div&gt;
cation, often in a database.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A&amp;nbsp;&lt;b&gt;model&lt;/b&gt;&amp;nbsp;is more than just data; it enforces all the business rules that apply&lt;/div&gt;
&lt;div&gt;
to that data. (&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;The model acts as&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;both a gatekeeper and a data store.&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;&lt;div&gt;
The&amp;nbsp;&lt;b&gt;view&lt;/b&gt;&amp;nbsp;is responsible for generating a user interface, normally based on&lt;/div&gt;
&lt;div&gt;
data in the model.&amp;nbsp;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;Although the view may present the user with various ways of&lt;/span&gt;&lt;/div&gt;
&lt;/span&gt;&lt;div&gt;
inputting data, the view itself never handles incoming data. The view’s work&lt;/div&gt;
&lt;div&gt;
is done once the data is displayed.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Controllers&lt;/b&gt;&amp;nbsp;orchestrate the application. Controllers receive events from the&lt;/div&gt;
&lt;div&gt;
outside world (normally user input), interact with the model, and display an&lt;/div&gt;
&lt;div&gt;
appropriate view to the user.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
The&amp;nbsp;&lt;b&gt;MVC&lt;/b&gt;&amp;nbsp;architecture was originally intended for conventional GUI applica-&lt;/div&gt;
&lt;div&gt;
tions, where developers found the separation of concerns led to far less cou-&lt;/div&gt;
&lt;div&gt;
pling, which in turn made the code easier to write and maintain.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
2. Rails processing flow&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
1) In a Rails application, an incoming request is first sent to a router, which&lt;/div&gt;
&lt;div&gt;
works out where in the application the request should be sent and how the&lt;/div&gt;
&lt;div&gt;
request itself should be parsed.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
2)&amp;nbsp;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;The routing component receives the incoming request and immediately picks it&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
apart.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
3) Controller interacts with model&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
4) Controller invokes view&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
5) View renders next browser screen&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
3. W&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;hy need a framework such as Ruby on Rails?&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;&amp;nbsp;The&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;answer is straightforward: Rails handles all of the&amp;nbsp;&lt;b&gt;low-level&lt;/b&gt;&amp;nbsp;housekeeping for&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
you—all those messy details that take so long to handle by yourself—and lets&lt;/div&gt;
&lt;div&gt;
you concentrate on your application’s&amp;nbsp;&lt;b&gt;core functionality&lt;/b&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
4.&amp;nbsp;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;&lt;b&gt;Object-Relational Mapping&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;R&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;elational databases are actually designed around mathematical&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
set theory. Although this is good from a conceptual point of view, it makes it&lt;/div&gt;
&lt;div&gt;
difficult to combine relational databases with object-oriented (OO) program-&lt;/div&gt;
&lt;div&gt;
ming languages. Objects are all about data and operations, and databases are&lt;/div&gt;
&lt;div&gt;
all about sets of values. Operations that are easy to express in relational terms&lt;/div&gt;
&lt;div&gt;
are sometimes difficult to code in an OO system. The reverse is also true.&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
So,&amp;nbsp;&lt;u&gt;an ORM layer maps tables to classes, rows to objects, and columns to&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;
&lt;u&gt;attributes of those objects. Class methods are used to perform table-level oper-&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;
&lt;u&gt;ations, and instance methods perform operations on the individual rows.&lt;/u&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Active Record&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Active Record is the ORM layer supplied with Rails. It closely follows the stan-&lt;/div&gt;
&lt;div&gt;
dard ORM model: tables map to classes, rows to objects, and columns to object&lt;/div&gt;
&lt;div&gt;
attributes. It differs from most other ORM libraries in the way it is configured.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
By relying on convention and starting with sensible defaults, Active Record&lt;/div&gt;
&lt;div&gt;
minimizes the amount of configuration that developers perform.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Active Record relieves us of the hassles of dealing with the underlying&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;database, leaving us free to work on business logic.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
But Active Record does more than that.&amp;nbsp;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;Active Record integrates seam-&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
lessly with the rest of the Rails framework. If a web form sends the application&lt;/div&gt;
&lt;div&gt;
data related to a business object, Active Record can extract it into our model.&lt;/div&gt;
&lt;div&gt;
Active Record supports sophisticated validation of model data, and if the form&lt;/div&gt;
&lt;div&gt;
data fails validations, the Rails views can extract and format errors.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;u&gt;Active Record is the solid model foundation of the Rails MVC architecture.&lt;/u&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
5.&amp;nbsp;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;&lt;b&gt;Action Pack&lt;/b&gt;: The View and Controller&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
When you think about it, the view and controller parts of MVC are pretty&lt;/div&gt;
&lt;div&gt;
intimate.&amp;nbsp;&lt;u&gt;The controller supplies data to the view, and the controller receives&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;
&lt;u&gt;events from the pages generated by the views.&lt;/u&gt;&amp;nbsp;Because of these interactions,&lt;/div&gt;
&lt;div&gt;
support for views and controllers in Rails is bundled into a single component,&lt;/div&gt;
&lt;div&gt;
Action Pack.&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
6.&amp;nbsp;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;&lt;b&gt;View Support&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
In Rails, the view is responsible for creating either all or part of a response to&lt;/div&gt;
&lt;div&gt;
be displayed in a browser, processed by an application or sent as an email.&lt;/div&gt;
&lt;div&gt;
At its simplest, a view is a chunk of HTML code that displays some fixed text.&lt;/div&gt;
&lt;div&gt;
More typically you’ll want to include dynamic content created by the action&lt;/div&gt;
&lt;div&gt;
method in the controller.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
In Rails, dynamic content is generated by templates, which come in three&lt;/div&gt;
&lt;div&gt;
flavors.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
1) The most common templating scheme, called Embedded Ruby (ERb),&lt;/div&gt;
&lt;div&gt;
embeds snippets of Ruby code within a view document, in many ways similar&lt;/div&gt;
&lt;div&gt;
to the way it is done in other web frameworks, such as PHP or JSP.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
2)&amp;nbsp;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;XML Builder&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;can also be used to construct XML documents using Ruby code—&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
the structure of the generated XML will automatically follow the structure of&lt;/div&gt;
&lt;div&gt;
the code.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
3)&amp;nbsp;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;Rails also provides RJS views. These allow you to create JavaScript fragments&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
on the server that are then executed on the browser. This is great for creating&lt;/div&gt;
&lt;div&gt;
dynamic Ajax interfaces.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
7.&amp;nbsp;&lt;span style=&quot;background-color: transparent; font-size: 10pt;&quot;&gt;&lt;b&gt;Controller!&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
The Rails controller is the logical center of your application. It coordinates the&lt;/div&gt;
&lt;div&gt;
interaction between the user, the views, and the model. However, Rails handles&lt;/div&gt;
&lt;div&gt;
most of this interaction behind the scenes; the code you write concentrates on&lt;/div&gt;
&lt;div&gt;
application-level functionality. This makes Rails controller code remarkably&lt;/div&gt;
&lt;div&gt;
easy to develop and maintain.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The controller is also home to a number of important ancillary services:&lt;/div&gt;
&lt;div&gt;
• It is responsible for routing external requests to internal actions. It han-&lt;/div&gt;
&lt;div&gt;
dles people-friendly URLs extremely well.&lt;/div&gt;
&lt;div&gt;
• It manages caching, which can give applications orders-of-magnitude&lt;/div&gt;
&lt;div&gt;
performance boosts.&lt;/div&gt;
&lt;div&gt;
• It manages helper modules, which extend the capabilities of the view&lt;/div&gt;
&lt;div&gt;
templates without bulking up their code.&lt;/div&gt;
&lt;div&gt;
• It manages sessions, giving users the impression of ongoing interaction&lt;/div&gt;
&lt;div&gt;
with our applications.&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/1900232682546135099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2014/02/learning-notes-about-agile-web_17.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/1900232682546135099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/1900232682546135099'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2014/02/learning-notes-about-agile-web_17.html' title='Learning Notes about Agile Web Development with Rails (2)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-5346790690566697457</id><published>2014-02-15T09:29:00.002-08:00</published><updated>2014-02-15T09:29:38.298-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Web Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Ruby on Rails"/><title type='text'>Learning Notes about Agile Web Development with Rails</title><content type='html'>Ruby on Rails two philosophy:&lt;br /&gt;
1. DRY, don&#39;t repeat yourself.&lt;br /&gt;
Modulize the program, remove duplication. Ruby does very well basically, Rails was written in Ruby. &lt;br /&gt;
2. Convention over configuration.&lt;br /&gt;
Follow convention, write less code than use XML in Java.&lt;br /&gt;
&lt;br /&gt;
Agile development core ideas:&lt;br /&gt;
1. Individuals and interactions over processes and tools&lt;br /&gt;
2. Working software over comprehensive documentation&lt;br /&gt;
3. Customer collaboration over contract negotiation&lt;br /&gt;
4. Responding to change over following a plan&lt;br /&gt;
&lt;br /&gt;
Rails is agile itself! Elegant, faster, programmer-friendly.</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/5346790690566697457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2014/02/learning-notes-about-agile-web.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5346790690566697457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5346790690566697457'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2014/02/learning-notes-about-agile-web.html' title='Learning Notes about Agile Web Development with Rails'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-5694468679980725546</id><published>2013-05-30T07:53:00.002-07:00</published><updated>2013-05-30T10:35:50.434-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AdaBoost"/><category scheme="http://www.blogger.com/atom/ns#" term="attributes"/><category scheme="http://www.blogger.com/atom/ns#" term="bag-of-words"/><category scheme="http://www.blogger.com/atom/ns#" term="computer vision"/><category scheme="http://www.blogger.com/atom/ns#" term="DPM"/><category scheme="http://www.blogger.com/atom/ns#" term="features"/><category scheme="http://www.blogger.com/atom/ns#" term="HOG"/><category scheme="http://www.blogger.com/atom/ns#" term="k-NN"/><category scheme="http://www.blogger.com/atom/ns#" term="LDA"/><category scheme="http://www.blogger.com/atom/ns#" term="machine learning"/><category scheme="http://www.blogger.com/atom/ns#" term="PCA"/><category scheme="http://www.blogger.com/atom/ns#" term="regression"/><category scheme="http://www.blogger.com/atom/ns#" term="SIFT"/><title type='text'>Basic concepts in Computer Vision and Machine Learning</title><content type='html'>&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; id=&quot;docs-internal-guid-5469b2a8-f5ea-05d5-8744-13c15258f12c&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Attribute: a semantic way to describe objects, human defined most times, like color, type, etc.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Feature:
 a piece of information which is relevant for solving the computational 
task related to a certain application. More specifically, features can 
refer to:&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;1. the result of a general neighborhood operation (feature extractor or feature detector) applied to the image&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;2.
 specific structures in the image itself, ranging from simple structures
 such as points or edges to more complex structures such as objects.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Other
 examples of features are related to motion in image sequences, to 
shapes defined in terms of curves or boundaries between different image 
regions, or to properties of such a region.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;The
 feature concept is very general and the choice of features in a 
particular computer vision system may be highly dependent on the 
specific problem at hand. &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Feature_%28computer_vision%29&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;http://en.wikipedia.org/wiki/Feature_%28computer_vision%29&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Bag-of-words
 (BoW model): can be applied to image classification, by treating image 
features as words. In computer vision, a bag of visual words is a sparse
 vector of occurrence counts of a vocabulary of local image features.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;The first step is to extract features, the second one is to represent features.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;The final step for the BoW model is to convert vector represented patches to &quot;&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 16px; vertical-align: baseline;&quot;&gt;codewords&lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&quot; (analogy to words in text documents), which also produces a &quot;&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 16px; vertical-align: baseline;&quot;&gt;codebook&lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&quot; (analogy to a word dictionary). A codeword can be considered as a representative of several similar patches.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;One
 of notorious disadvantages of BoW is that it ignores the spatial 
relationships among the patches, which is very important in image 
representation. &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Furthermore,
 the BoW model has not been extensively tested yet for view point 
invariance and scale invariance, and the performance is unclear. Also 
the BoW model for object segmentation and localization is not well 
understood. &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Bag-of-words_model_in_computer_vision&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;http://en.wikipedia.org/wiki/Bag-of-words_model_in_computer_vision&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Scale
 Invariant Feature Transform (SIFT) is a feature detector and descriptor
 algorithm notable for incorporating robust scale and rotational 
invariance to feature descriptions.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial; font-size: 15px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: Arial; font-size: 15px; vertical-align: baseline;&quot;&gt;Histogram of Gradient (HOG):&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;k-means clustering: a method of&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Cluster_analysis&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;cluster analysis&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt; which aims to&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Partition_of_a_set&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;partition&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt; observations into &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline;&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt; clusters in which each observation belongs to the cluster with the nearest&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mean&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;mean&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;. This results in a partitioning of the data space into&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Voronoi_cell&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;Voronoi cells&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/K-means_clustering&quot; style=&quot;text-decoration: none;&quot;&gt;http://en.wikipedia.org/wiki/K-means_clustering&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=aiJ8II94qck&quot;&gt;https://www.youtube.com/watch?v=aiJ8II94qck&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=0MQEt10e4NM&quot;&gt;https://www.youtube.com/watch?v=0MQEt10e4NM&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;k-nearest neighbor (k-NN): a&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Non-parametric_statistics&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;non-parametric&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt; method for&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Statistical_classification&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;classifying&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt; objects based on closest training examples in the&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Feature_space&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;feature space&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;regression:
 a statistical technique for estimating the relationships among 
variables. It includes many techniques for modeling and analyzing 
several variables, when the focus is on the relationship between a&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Dependent_variable&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;dependent variable&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt; and one or more&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Independent_variable&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: black; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;independent variables&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;.
 More specifically, regression analysis helps one understand how the 
typical value of the dependent variable changes when any one of the 
independent variables is varied, while the other independent variables 
are held fixed.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://en.wikipedia.org/wiki/Regression_analysis&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; font-size: 16px; text-decoration: underline; vertical-align: baseline;&quot;&gt;https://en.wikipedia.org/wiki/Regression_analysis&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;AdaBoost: several weak classifier to construct strong classifier&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Support Vector Machine (SVM): classifier&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Reduce dimensionality &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Principal Component Analysis (PCA): align data along the directions of greatest variance (retain &lt;/span&gt;&lt;span style=&quot;color: red; font-size: 16px; vertical-align: baseline;&quot;&gt;directions&lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt; of large variance, but large variance is not always best for classification)&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;Linear
 Discriminant Analysis (LDA): project onto a subspace of best 
discrimination by maximizing the separation between classes relative to 
separation within classes &amp;nbsp;(take into account the &lt;/span&gt;&lt;span style=&quot;color: red; font-size: 16px; vertical-align: baseline;&quot;&gt;actual classes&lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 16px; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;ratio about the distance between classes and the one within classes)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial; font-size: 15px; vertical-align: baseline;&quot;&gt;Deformable Part Model (DPM):&amp;nbsp;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/5694468679980725546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2013/05/basic-concepts-in-computer-vision-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5694468679980725546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5694468679980725546'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2013/05/basic-concepts-in-computer-vision-and.html' title='Basic concepts in Computer Vision and Machine Learning'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-5774946022003296012</id><published>2013-05-29T09:09:00.001-07:00</published><updated>2013-05-30T07:52:27.264-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="attributes"/><category scheme="http://www.blogger.com/atom/ns#" term="detection"/><category scheme="http://www.blogger.com/atom/ns#" term="recognition"/><category scheme="http://www.blogger.com/atom/ns#" term="vehicle classification"/><category scheme="http://www.blogger.com/atom/ns#" term="vehicle detection"/><category scheme="http://www.blogger.com/atom/ns#" term="vehicle recognition"/><category scheme="http://www.blogger.com/atom/ns#" term="vehicle tracking"/><title type='text'>Methods about vehicle detection and recognition</title><content type='html'>questions, methods and papers summary in stackoverflow: &lt;a href=&quot;http://stackoverflow.com/questions/15029290/fine-grained-vehicle-classification-in-images-e-g-make-model-etc&quot;&gt;link&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Several papers:&lt;br /&gt;
&lt;br /&gt;
1. &lt;b&gt;Car-Rec: A Real Time Car Recognition System&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This paper talks about the way to check whether or not a car is in the database, which includes employee cars in a certain parking lot. There are four steps in the framework:&lt;br /&gt;
1. feature extraction&lt;br /&gt;
2. word quantization&lt;br /&gt;
3. image database search&lt;br /&gt;
4. structural matching.&lt;br /&gt;
&lt;br /&gt;
If I understood it correctly, the method in this paper cannot recognize the type of vehicles, like sedan, truck, van, SUV and so on.&lt;br /&gt;
&lt;br /&gt;
2. &lt;b&gt;Robust Classification and Tracking of Vehicles in Traffic Video Streams&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;Actually, the method in this paper depends on the bounding box information too much, &quot;long&quot; bounding box for Semi, &quot;short&quot; ones for Sedan and TSV, so the system sometimes recognizes TSV as Sedan. Moreover, it needs background subtraction and completely static background and dynamic objects, static objects would not work like cars in parking lots.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
This paper integrates vehicle tracking and classification (three types, Sedan, Semi, Truck+SUV+Van) together on low resolution traffic video, the technique is also general to be applied to surveillance scenes besides traffic. &lt;br /&gt;
&lt;br /&gt;
It mentioned that model based trackers are robust to illumination and occlusion but require models for all vehicles, limiting its scalability.&lt;br /&gt;
&lt;br /&gt;
Text format accompanying Fig. 4, Track ID, class identifier number ( c0 for TSU, c1 for sedan, c2 for semi), an estimate of speed and direction of travel&lt;br /&gt;
&lt;br /&gt;
The system will have one classifier trained for the entire scene and invariant to the camera pose selected by a remote operator.&lt;br /&gt;
&lt;br /&gt;
The vehicle classifier was built on comparison of different classification schemes using either image based (IB) or image measurement based (IM) features. PCA or LDA was applied to reduce the dimensionality of data, remove redundant information and project the data to a space better suited for classification. A weighted K nearest neighbor classifier achieved classification.&lt;br /&gt;
&lt;br /&gt;
Image Based (IB) features: The image of tracked object is used as a feature vector. To do a proper comparison each object was resized to [64x32] pixels, generating a feature vector with 2048 components.&lt;br /&gt;
&lt;br /&gt;
Image Measurements Based (IM) features: cheaper computationally and storage-wise to maintain a database of features rather than images. The aim is to obtain as many simple measurements as possible and allow a classifier to decide which are best for classification.&lt;br /&gt;
The feature vector consist of:&lt;br /&gt;
~ area&lt;br /&gt;
~ bounding box [width, height]&lt;br /&gt;
~ convex area&lt;br /&gt;
~ ellipse [eccentricity, major axis, minor, axis]&lt;br /&gt;
~ extent - proportion of pixels in bounding box to object&lt;br /&gt;
~ solidity - proportion of pixels in convex hull to region&lt;br /&gt;
~ perimeter&lt;br /&gt;
&lt;br /&gt;
weighted K Nearest Neighbor (wkNN): each sample is assigned to every class by a class weight while NN only gives a binary indication of class membership. The wkNN weight for each class indicates the strength of match and a label is assigned corresponding to the class with the highest weight.&lt;br /&gt;
&lt;br /&gt;
The L2 norm was used as the distance metric to determine the similarity between vectors.&lt;br /&gt;
&lt;br /&gt;
LDA-IM classifier was chosen for integration into tracking software because using LDA-IM generates a simple classifier with low computation complexity and that generalizes well due to scene object independence.&lt;br /&gt;
&lt;br /&gt;
An adaptive background subtraction scheme was used to detect potential vehicles in Object Detection module. Taking the difference between the current video frame and the estimate background produces regions of moving objects. These regions are processed to produce vehicle blob detections.&lt;br /&gt;
&lt;br /&gt;
Tracking is accomplished by using a Kalman filter on the center of mass of the detected object region. The Kalman module outputs a state vector, [x, v]^T, containing the position and velocity of the region. The Kalman filter is a state estimation tool that predicts the position of a vehicle in the next frame.&lt;br /&gt;
&lt;br /&gt;
The track vehicle label is determined by building a histogram of class weights for each frame in a track T and selecting as label with the highest membership.&lt;br /&gt;
&lt;br /&gt;
By binning class the soft class membership into a track histogram the Track Builder is able to recover from mis-classified examples by only assigning a final label as the most likely class along the entire track.&lt;br /&gt;
&lt;br /&gt;
The TSV and Sedan are most often confused because of their proximity the LDA feature space.&lt;br /&gt;
&lt;br /&gt;
Tracking based classification uses the entire track of a vehicle for classification rather than just an individual frame image. Each frame generates an individual example of a vehicle which can be classified more accurately when all occurrences in a track are combined.&lt;br /&gt;
&lt;br /&gt;
The track based classification results are promising and indicate the value of doing classification over spatio-temporal detections.&lt;br /&gt;
&lt;br /&gt;
3. &lt;b&gt;Fine-Grained Entity Recognition&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
Even though this paper proposes a way to define a fine-grained set of 112 tags, formulate the tagging problem as multi-class, multi-label classification, describes an unsupervised method for collecting training data, and presents the FIGER implementation.&lt;br /&gt;
&lt;br /&gt;
In the overview section (2.1), input is a sentence in given plain text, then segment the sentence and find the candidates for tagging. It is a NLP paper, cannot be applied to vehicle recognition.&lt;br /&gt;
&lt;br /&gt;
4. &lt;b&gt;Inducing Fine-Grained Semantic Classes via Hierarchical and Collective Classification&lt;/b&gt;&lt;br /&gt;
Also, this is a NLP paper, cannot help to recognize vehicle types.&lt;br /&gt;
&lt;br /&gt;
5.&amp;nbsp;&lt;b&gt;A Codebook-Free and Annotation-Free Approach for Fine-Grained Image Categorization&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The codebook method often loses subtle image information that are critical for fine-grained classification.&lt;br /&gt;
&lt;br /&gt;
The annotation way takes a tedious process that is also difficult to generalize to new tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although it is talking about birds as example, the method might be applied to vehicle recognition and classification.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/5774946022003296012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2013/05/methods-about-vehicle-detection-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5774946022003296012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5774946022003296012'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2013/05/methods-about-vehicle-detection-and.html' title='Methods about vehicle detection and recognition'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-8007515310086396638</id><published>2013-05-23T14:43:00.000-07:00</published><updated>2013-05-23T14:43:10.732-07:00</updated><title type='text'>Key points in Towards Scalable Representations of Object Categories Learning a Hierarchy of Parts</title><content type='html'>This paper proposes a novel approach to constructing a hierarchical representation of visual input that aims to enable recognition and detection of a large number of object categories.&lt;br /&gt;
&lt;br /&gt;
indexing (bottom-up)&lt;br /&gt;
robust matching (top-down)&lt;br /&gt;
&lt;br /&gt;
Category-independent lower layers&lt;br /&gt;
&lt;br /&gt;
Category-specific higher layers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div data-canvas-width=&quot;315.0811648704529&quot; data-font-name=&quot;g_font_p0_11&quot; dir=&quot;ltr&quot; style=&quot;font-family: serif; font-size: 13.2835px; left: 66.8132px; top: 534.978px; transform-origin: 0% 0% 0px; transform: scale(0.803778, 1);&quot;&gt;
Lower layers&amp;nbsp;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;are learned in a category-independent way to obtain com&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;plex, yet sharable visual building blocks, which is a crucial&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;step towards a scalable representation.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div data-canvas-width=&quot;315.0811648704529&quot; data-font-name=&quot;g_font_p0_11&quot; dir=&quot;ltr&quot; style=&quot;font-family: serif; font-size: 13.2835px; left: 66.8132px; top: 534.978px; transform-origin: 0% 0% 0px; transform: scale(0.803778, 1);&quot;&gt;
&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;Higher layers of the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;hierarchy, on the other hand, are constructed by using spe&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;ci&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;fi&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;c categories, achieving a category representation with a&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;small number of highly generalizable parts that gained their&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;structural&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;fl&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;exibility through composition within the hierar&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;chy.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div data-canvas-width=&quot;93.90746528434752&quot; data-font-name=&quot;g_font_p0_3&quot; dir=&quot;ltr&quot; style=&quot;font-family: serif; font-size: 13.2835px; left: 632.944px; top: 494.256px; transform-origin: 0% 0% 0px; transform: scale(0.776095, 1);&quot;&gt;
This paper  pro&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;poses a much simpler and ef&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;fi&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;cient learning algorithm, and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;introduces additional steps that enable a higher level rep&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;resentation of object categories. Additionally, the proposed&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;method is inherently incremental - new categories can be ef&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;fi&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;ciently and continuously added to the system by adding a&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;small number of parts only in the higher hierarchical layers.&lt;/span&gt;&lt;/div&gt;
&lt;div data-canvas-width=&quot;93.90746528434752&quot; data-font-name=&quot;g_font_p0_3&quot; dir=&quot;ltr&quot; style=&quot;font-family: serif; font-size: 13.2835px; left: 632.944px; top: 494.256px; transform-origin: 0% 0% 0px; transform: scale(0.776095, 1);&quot;&gt;
&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div data-canvas-width=&quot;93.90746528434752&quot; data-font-name=&quot;g_font_p0_3&quot; dir=&quot;ltr&quot; style=&quot;font-family: serif; font-size: 13.2835px; left: 632.944px; top: 494.256px; transform-origin: 0% 0% 0px; transform: scale(0.776095, 1);&quot;&gt;
&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;Each unit in each hierarchical layer is envisioned as a composition defined in terms of spatially flexible local arrangements of units from the previous layers.&lt;/span&gt;&lt;/div&gt;
&lt;div data-canvas-width=&quot;93.90746528434752&quot; data-font-name=&quot;g_font_p0_3&quot; dir=&quot;ltr&quot; style=&quot;font-family: serif; font-size: 13.2835px; left: 632.944px; top: 494.256px; transform-origin: 0% 0% 0px; transform: scale(0.776095, 1);&quot;&gt;
&lt;span style=&quot;font-size: 13.2835px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div data-canvas-width=&quot;93.90746528434752&quot; data-font-name=&quot;g_font_p0_3&quot; dir=&quot;ltr&quot; style=&quot;font-family: serif; font-size: 13.2835px; left: 632.944px; top: 494.256px; transform-origin: 0% 0% 0px; transform: scale(0.776095, 1);&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div data-canvas-width=&quot;93.90746528434752&quot; data-font-name=&quot;g_font_p0_3&quot; dir=&quot;ltr&quot; style=&quot;font-family: serif; font-size: 13.2835px; left: 632.944px; top: 494.256px; transform-origin: 0% 0% 0px; transform: scale(0.776095, 1);&quot;&gt;
Since the learning process is incremental, categories can be efficiently added to the representation by adding a small number of parts only in the higher hierarchical layers.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/8007515310086396638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2013/05/key-points-in-towards-scalable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/8007515310086396638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/8007515310086396638'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2013/05/key-points-in-towards-scalable.html' title='Key points in Towards Scalable Representations of Object Categories Learning a Hierarchy of Parts'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-1021352052413396426</id><published>2012-04-04T18:09:00.000-07:00</published><updated>2012-04-04T18:09:48.599-07:00</updated><title type='text'>Cloud Computing Paper Reading Summary 10</title><content type='html'>&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;In the paper Cloud Computing Architecture for Social Computing - A Comparison Study of Facebook and Google, which is published by Bo Wen Yang, authors compares the architecture between Google and Facebook Cloud Computing Architecture.&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;According to resource scarcity, there is a tradeoff between the application functionality versus future scalability.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;The typical distributed architecture consists of a number of layers:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Application logic ( Ruby on Rails, Scala )&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Caching ( Memcache, SQL query caching )&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Database backend &amp;nbsp;( RDBMS clusters, CouchDB, Google&#39;s BigTable or Amazon&#39;s Dynamo )&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Business model, server hardware, data center and distributed architecture.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/1021352052413396426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/04/cloud-computing-paper-reading-summary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/1021352052413396426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/1021352052413396426'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/04/cloud-computing-paper-reading-summary.html' title='Cloud Computing Paper Reading Summary 10'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-2038319886963297368</id><published>2012-03-28T20:15:00.001-07:00</published><updated>2012-03-28T20:15:30.935-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASST2"/><category scheme="http://www.blogger.com/atom/ns#" term="OS161"/><title type='text'>Stupid faults in ASST2 of OS161</title><content type='html'>1. Only call vfs_chdir() in sys_chdir() implementation.&lt;br /&gt;
&lt;br /&gt;
2. Unclear about using vnode in sys___getcwd() implementation such as extract vnode-&amp;gt;vn_data as cwd.</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/2038319886963297368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/stupid-faults-in-asst2-of-os161.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/2038319886963297368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/2038319886963297368'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/stupid-faults-in-asst2-of-os161.html' title='Stupid faults in ASST2 of OS161'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-6769615198144985310</id><published>2012-03-18T16:00:00.000-07:00</published><updated>2012-03-18T16:00:12.910-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fault-tolerant nodes"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Cloud Computing"/><category scheme="http://www.blogger.com/atom/ns#" term="large-scale clusters"/><category scheme="http://www.blogger.com/atom/ns#" term="Map Reduce"/><title type='text'>Cloud Computing Paper Reading Summary 9</title><content type='html'>In the paper Google Cloud Computing Platform Technology Architecture and the Impact of Its Cost, which is published by Jia Xiaojing, the author compares the architecture between Google Cloud Computing platform and traditional IT system.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Data Storage Technology&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Core technical indicators: storage reliability, I / O throughput and scalability.&lt;br /&gt;
&lt;br /&gt;
Google developed a distributed file system based on several assumptions:&lt;br /&gt;
Hardware failures are the norm.&lt;br /&gt;
Supporting large data sets.&lt;br /&gt;
Processing mode of write once and read many.&lt;br /&gt;
High concurrency.&lt;br /&gt;
&lt;br /&gt;
To ensure reliability of data, Google File System uses a redundant storage means.&lt;br /&gt;
&lt;br /&gt;
GFS&#39;s writing operation separates control signal from data flow.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Data Management Technology &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Google developed a large-scale database system Big Table with the weak consistency requirements.&lt;br /&gt;
&lt;br /&gt;
Big Table system depends on the underlying structure of the cluster system, which includes a distributed cluster task scheduler, the GFS which has been addressed above, and a distributed lock service Chubby.&lt;br /&gt;
&lt;br /&gt;
Big Table&#39;s main server not only manage the metadata but also is responsible to manage remotely and allocate for the Tablet Server.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Programming Model&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Map Reduce is not only the programming model that processes and brings about a large data set but also an efficient task scheduling model. (The programmer can finish the distributed parallel program development that specifies the data processing to each block data in the Map function and how to regress the intermediate results of the block data processing in the Reduce function)&lt;br /&gt;
&lt;br /&gt;
Five steps to implement Map Reduce program:&lt;br /&gt;
1. input file&lt;br /&gt;
2. assign one file to many parallel workers&lt;br /&gt;
3. write intermediate file (local writing)&lt;br /&gt;
4. reduce workers running&lt;br /&gt;
5. output the final result&lt;br /&gt;
&lt;br /&gt;
In Map Reduce model, because data is managed dispersively by each node, there is no separate, centralized database system, and each node can only operate the data managed by it. Consequently it needs the intervention of upper application software to ensure &lt;span style=&quot;color: red;&quot;&gt;consistency&lt;/span&gt; and &lt;span style=&quot;color: red;&quot;&gt;integrity&lt;/span&gt; of across-node data.&lt;br /&gt;
&lt;br /&gt;
The system in the Map Reduce mode increases the map that decomposes the task, the Reduce other processing link about the protocol of results, and parallel processing to support multiple worker node, while need to complete the failure handling about worker node, as well as coordination and communication between the worker nodes and so on.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cost Analysis of Google Cloud Computing Platform&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Due to the distributed data storage and data management, Google reduces the capacity requirements on a single node.&lt;br /&gt;
&lt;br /&gt;
It is easy to achieve standardization of equipment because all nodes are isomorphic.&lt;br /&gt;
&lt;br /&gt;
Google Cloud Computing platform takes hardware failure as the norm and turns to switch automatically between nodes to achieve high availability by means of software fault-tolerant, significantly reducing equipment redundancy.&lt;br /&gt;
&lt;br /&gt;
Based on the unique advantages of parallel computing, Google has developed excellent load balancing technology that enable to ensure business continuity in the means of dynamic load switching in different data centers worldwide.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
3 Basic Characteristics of Google Cloud Computing Platform Architecture&lt;br /&gt;
&lt;br /&gt;
1. system built on large-scale clusters of cheap servers&lt;br /&gt;
2. build synergies between infrastructure and the upper application (to achieve maximum efficiency in utilization of hardware resources)&lt;br /&gt;
3. achieve fault-tolerant nodes through software&lt;br /&gt;
&lt;br /&gt;
Google applies Top-Down design method, namely, from the upper application, the infrastructure is reconstructed based on the operational characteristics about the specific application (rather than the optimization of a general sense)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/6769615198144985310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-9.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/6769615198144985310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/6769615198144985310'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-9.html' title='Cloud Computing Paper Reading Summary 9'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-7559081485968322508</id><published>2012-03-18T13:29:00.001-07:00</published><updated>2012-03-18T13:29:29.916-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASMCC"/><category scheme="http://www.blogger.com/atom/ns#" term="GPMCC"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile cloud computing"/><title type='text'>Cloud Computing Paper Reading Summary 8</title><content type='html'>In the paper Mobile Cloud Computing as Future For Mobile Applications - Implementation Methods and Challenging Issues published by Shahryar S. Qureshi, etc. Authors pointed out that Cloud Computing is expected to bring an innovation in mobile computing, where the mobile devices can use clouds for &lt;span style=&quot;color: red;&quot;&gt;data processing&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;storage&lt;/span&gt; and &lt;span style=&quot;color: red;&quot;&gt;other intensive operations&lt;/span&gt;. In the paper, authors introduce state-of-the-art Mobile Cloud Computing and its implementation methods.&lt;br /&gt;
&lt;br /&gt;
Nowadays we use desktop computer and servers tied together to create a so called Cloud Computing System.&lt;br /&gt;
&lt;br /&gt;
Mobile Cloud Computing is defined as extension of Cloud Computing with &lt;span style=&quot;color: red;&quot;&gt;a new ad-hoc infrastructure based on a mobile device&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Simple viewpoint refers that both data storage and data processing is carried outside the mobile devices. Cloud resources are utilized for processing and storage purpose.&lt;br /&gt;
&lt;br /&gt;
1. The advantage of this concept is that Mobile Cloud Computing applications are not constrained to a certain kind of mobile devices or operation systems. &lt;br /&gt;
&lt;br /&gt;
2. No need to worry for the &lt;span style=&quot;color: red;&quot;&gt;storage capacity&lt;/span&gt; and &lt;span style=&quot;color: red;&quot;&gt;computation speed limitation&lt;/span&gt;. &lt;br /&gt;
&lt;br /&gt;
Mobile device view point refers that both data storage and data processing is that nowadays mobile devices (smart phones, tablets etc) are more intelligent and highly developed.&lt;br /&gt;
&lt;br /&gt;
The advantage of such viewpoint is to provide user an &lt;span style=&quot;color: red;&quot;&gt;ownership&lt;/span&gt; (to store and maintain data on personal mobile device).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Mobile Cloud Computing&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Cloud Computing services in a mobile ecosystems incorporating consumer,&amp;nbsp; enterprise, femtocells, transcoding, end-to-end security, home gateway and mobile broadband-enabled services.&lt;br /&gt;
&lt;br /&gt;
Mobile Cloud Computing is made up of a complex network and relationships of and in between &lt;span style=&quot;color: red;&quot;&gt;Infrastructure Providers&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;Application / Services Providers (ASP)&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;End users and developers&lt;/span&gt; and are connected through &lt;span style=&quot;color: red;&quot;&gt;Internet&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Mobile Cloud Computing exploits user&#39;s information such as location, context, accessed services and network intelligence. Also Mobile Cloud Computing can be a solution to the limitations in Cloud Computing such as &lt;span style=&quot;color: red;&quot;&gt;limited bandwidth capacity&lt;/span&gt; and &lt;span style=&quot;color: red;&quot;&gt;poor network connectivity&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;General purpose Mobile Cloud Computing&lt;/b&gt; (&lt;b&gt;GPMCC&lt;/b&gt;) &lt;br /&gt;
&lt;br /&gt;
Augmented execution for smart phones using clone clouds&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Application specific Mobile Cloud Computing&lt;/b&gt; (&lt;b&gt;ASMCC&lt;/b&gt;)&lt;br /&gt;
&lt;br /&gt;
Mobile service clouds model enables dynamic instantiation, composition, configuration and reconfiguration of services to be used by the mobile user.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Weblets&lt;/b&gt; can be exchanged between mobile devices and clouds. Using &lt;b&gt;elastic computing resources&lt;/b&gt; provides solution for &lt;span style=&quot;color: red;&quot;&gt;authentication&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;secure session management&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;secure migration&lt;/span&gt; between weblets running mobile devices and those on clouds.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;RESTful web services&lt;/b&gt; are to offload &lt;span style=&quot;color: red;&quot;&gt;computational capacity&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;storage&lt;/span&gt; and &lt;span style=&quot;color: red;&quot;&gt;security&lt;/span&gt; (of mobile device) to cloud by utilizing the RESTful web services.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Some Potential Barriers and Issues&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Barriers&lt;br /&gt;
&lt;br /&gt;
1. Only SaaS has been implemented in Mobile Cloud Computing because of mobile devices &#39; insufficient storage capacity, battery, poor display and computing power. (Opportunities for PaaS and IaaS)&lt;br /&gt;
&lt;br /&gt;
2. Absence of standards.&lt;br /&gt;
Limited scalability, unreliable availability of service and service provider lock-in.&lt;br /&gt;
&lt;br /&gt;
Potential Issues&lt;br /&gt;
&lt;br /&gt;
1. Resource poverty of mobile devices&lt;br /&gt;
2. Network bandwidth and latency&lt;br /&gt;
3. Network availability and intermittency&lt;br /&gt;
4. Security concerns&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Future Search&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1. &lt;span style=&quot;color: red;&quot;&gt;Security&lt;/span&gt; issues&lt;br /&gt;
2. The &lt;span style=&quot;color: red;&quot;&gt;mobile cloud architecture&lt;/span&gt; for heterogeneous wireless network should be investigated&lt;br /&gt;
3. A single &lt;span style=&quot;color: red;&quot;&gt;access platform&lt;/span&gt; is required to establish for MCC on the various operating systems platform (e.g. Android, Symbian, Apple iOS, Chrome, MeeGo, Windows Phone)</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/7559081485968322508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/7559081485968322508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/7559081485968322508'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-8.html' title='Cloud Computing Paper Reading Summary 8'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-3563578339540760931</id><published>2012-03-18T12:36:00.000-07:00</published><updated>2012-03-18T12:36:17.782-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="career option"/><category scheme="http://www.blogger.com/atom/ns#" term="Cracking The Coding Interview"/><category scheme="http://www.blogger.com/atom/ns#" term="five algorithm approaches"/><category scheme="http://www.blogger.com/atom/ns#" term="top 10 mistakes candidate make"/><title type='text'>Cracking The Coding Interview reading notes 2</title><content type='html'>&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;At the Interview | Five Algorithm Approaches&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Approach 1: Examplify&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Approach 2: Pattern Matching&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Approach 3: Simplify &amp;amp; Generalize&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Approach 4: Base Case and Build&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Approach 5: Data Structure Brainstorm&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;At the Interview | The Offer and Beyond&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;b&gt;What about your career option?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Career Path&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Promotion Opportunity&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Money and Benefits&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Happiness&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Brand Name&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;At the Interview | Top Ten Mistakes Candidates Make&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;#1 Practicing on a Computer&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;#2 Not Rehearsing Behavioral Questions&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;#3 Not Doing a Mock Interview&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;#4 Trying to Memorize Solutions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;#5 Talking Too Much&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;#6 Talking Too Little&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;#7 Rushing&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;#8 Not Debugging&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;#9 Sloppy Coding&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;#10 Giving Up&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/3563578339540760931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cracking-coding-interview-reading-notes_18.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/3563578339540760931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/3563578339540760931'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cracking-coding-interview-reading-notes_18.html' title='Cracking The Coding Interview reading notes 2'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-726081923276707754</id><published>2012-03-15T09:41:00.005-07:00</published><updated>2012-03-15T09:42:49.615-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mobile cloud computing"/><category scheme="http://www.blogger.com/atom/ns#" term="QoS"/><title type='text'>Cloud Computing Paper Reading Summary 7</title><content type='html'>In the paper A QoS-AWARE System for Mobile Cloud Computing published by Peng Zhang and Zheng Yan, authors put forward a QoS framework for Mobile Cloud Computing and an adaptive QoS management process to manage QoS assurance in Mobile Cloud Computing environment, thus their QoS management model is based on Fuzzy Cognitive Map (FCM).&lt;br /&gt;
&lt;br /&gt;
QoS refers to a set of properties including &lt;span style=&quot;color: red;&quot;&gt;objective&lt;/span&gt; ones such as transmission rate, delay variance, packet loss, cost and reputation, and also &lt;span style=&quot;color: red;&quot;&gt;subjective&lt;/span&gt; ones like user experience, trust, privacy concern and satisfaction degree. &lt;br /&gt;
&lt;br /&gt;
Mobile Cloud Computing are often affected by many specific factors like hardware and software limitations of mobile devices, signal strength of mobile networks, mobility of mobile users and so on.&lt;br /&gt;
&lt;br /&gt;
The research work on Cloud Computing falls in various aspects such as &lt;span style=&quot;color: red;&quot;&gt;Cloud Computing architecture, middle-ware design, cloud services, cloud security and resource management&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
In a mobile device, a QoS agent monitors QoS status at run time, for example, &lt;span style=&quot;color: red;&quot;&gt;percentage of memory and CPU consumption&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;connection speed&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;remaining battery percentage&lt;/span&gt; and&lt;span style=&quot;color: red;&quot;&gt; packet loss rate&lt;/span&gt;, etc.&lt;br /&gt;
&lt;br /&gt;
The QoS management center aggregates and analyzes the huge set of QoS data, and dynamically adjusts resources to meet QoS requirements of each mobile cloud service.&lt;br /&gt;
&lt;br /&gt;
The QoS management supports context awareness by&lt;span style=&quot;color: red;&quot;&gt; adaptively selecting&lt;/span&gt; a proper set of service modes that can always ensure the quality of cloud services.&lt;br /&gt;
&lt;br /&gt;
FCM specifies the interconnections and influences between nodes. It also permits updating the construction of the graph, such as adding or deleting an interconnection or a node. Thus we can utilize it to predict the performance of cloud service modes in order to select the best one.&lt;br /&gt;
&lt;br /&gt;
The adaptive QoS management system for Mobile Cloud Computing facilities QoS &lt;span style=&quot;color: red;&quot;&gt;prediction&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;establishment&lt;/span&gt;, &lt;span style=&quot;color: red;&quot;&gt;assessment&lt;/span&gt; and &lt;span style=&quot;color: red;&quot;&gt;assurance&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Two directions to go ahead:&lt;br /&gt;
1. generating a good model with suitable configurations.&lt;br /&gt;
2. implementing the solution</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/726081923276707754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/726081923276707754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/726081923276707754'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-7.html' title='Cloud Computing Paper Reading Summary 7'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-3378092992670530897</id><published>2012-03-15T09:16:00.000-07:00</published><updated>2012-03-15T09:16:03.906-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mobile cloud computing"/><title type='text'>Cloud Computing Paper Reading Summary 6</title><content type='html'>In the paper Review of Mobile Cloud Computing published by Weiguang Song and Xiaolong Su, they summarized both general Cloud Computing and Mobile Cloud Computing.&lt;br /&gt;
&lt;br /&gt;
They pointed out that Cloud Computing is a kind of distributed computing whose main idea is to disperse data process.&lt;br /&gt;
&lt;br /&gt;
They put forward that Mobile Cloud Computing is the combination of mobile computing, mobile internet and Cloud Computing.&lt;br /&gt;
&lt;br /&gt;
Mobile Cloud Computing is to share resources and transport data of computers or other intelligent terminal equipments like cell phones.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Character of Mobile Cloud Computing&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1. Hardware of handheld equipment and independence of the system.&lt;br /&gt;
&lt;br /&gt;
2. Effectiveness of task processing.&lt;br /&gt;
&lt;br /&gt;
3. Convenience of sharing data.&lt;br /&gt;
&lt;br /&gt;
4. Elimination of regional limitation.&lt;br /&gt;
&lt;br /&gt;
Mobile Cloud Computing System Architecture: access layer (access control layer), basic managing layer, virtual layer and physical layer.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Problems of Mobile Cloud Computing&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1. cell phone platform&lt;br /&gt;
2. cloud end system&lt;br /&gt;
3. stability of bandwidth&lt;br /&gt;
4. input and output interface&lt;br /&gt;
5. service provider&lt;br /&gt;
6. individualization of handheld equipment&lt;br /&gt;
7. loss of battery and network flow&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Mobile Cloud Computing Application&lt;/b&gt;&lt;br /&gt;
1. Android platform&lt;br /&gt;
2. MOTOBLUR (proposed by Motorola in Oct 2009 ) &lt;br /&gt;
3. UCWEB</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/3378092992670530897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-6.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/3378092992670530897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/3378092992670530897'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-6.html' title='Cloud Computing Paper Reading Summary 6'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-5207619869479057673</id><published>2012-03-15T07:51:00.000-07:00</published><updated>2012-03-15T07:51:37.284-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Distributed Computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Grid Computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Load Balance"/><category scheme="http://www.blogger.com/atom/ns#" term="Network Storage"/><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Utility Computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Virtualization"/><title type='text'>Cloud Computing Paper Reading Summary 5</title><content type='html'>In the paper Overview and Analysis of Cloud Computing Research and Application published by Yizeng Chen etc. , authors summarize definition, characteristics, classification and challenges.&lt;br /&gt;
&lt;br /&gt;
They pointed out a definition which has been generally accepted is that Cloud Computing is the developing result of Grid Computing, Distributed Computing, Parallel Computing, Utility Computing, Network Storage technologies, Virtualization, Load Balance etc. traditional computer technology.&lt;br /&gt;
&lt;br /&gt;
There is not too much fresh ideas in this paper, but it reminds me reconsider about the development trend of IaaS, PaaS and SaaS. Move computation processing and storage to the cloud and transfer user client to I/O port in order to reduce users&#39; burden? Or maintain computing and storage in the local? It is a question.</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/5207619869479057673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-5.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5207619869479057673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/5207619869479057673'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-5.html' title='Cloud Computing Paper Reading Summary 5'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-7022118074352953913</id><published>2012-03-13T19:16:00.002-07:00</published><updated>2012-03-15T07:52:16.398-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>PHP Study</title><content type='html'>&lt;br /&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=DAbrJuyEEdU&quot; style=&quot;color: #551a8b;&quot;&gt;&lt;span style=&quot;color: #3d85c6;&quot;&gt;http://www.youtube.com/watch?v=DAbrJuyEEdU&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;b&gt;What is it?&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;Scripting Language&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
Server Side Language&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
EasyPHP Software&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;b&gt;What can it do?&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
Take information from forms and store it in a database&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
Run threaded discussions&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
Serve XML pages&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
Build Web Applications&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;b&gt;Value Data Types&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
PHP is a loosely-typed language. A variable does not need to be a specific type and can freely move between types.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;b&gt;Naming Rules&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
The first character must &amp;nbsp;be the dollar sign ($).&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial,Verdana,sans-serif; font-size: 14px;&quot;&gt;
Variables are case sensitive.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/7022118074352953913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/php-study.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/7022118074352953913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/7022118074352953913'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/php-study.html' title='PHP Study'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-6914545950064916626</id><published>2012-03-13T19:14:00.000-07:00</published><updated>2012-03-13T19:14:06.052-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CSS"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><title type='text'>HTML, CSS and JavaScript study</title><content type='html'>&lt;br /&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;a href=&quot;http://code.google.com/edu/submissions/html-css-javascript/&quot; style=&quot;color: #551a8b;&quot;&gt;&lt;span style=&quot;color: #3d85c6;&quot;&gt;http://code.google.com/edu/submissions/html-css-javascript/&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;&lt;b&gt;HTML -&amp;gt; structure&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
HTML is HyperText Markup Language.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
HTML is a formatting language rather than programming language.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
Data informs markup.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
Recommended (HTML5) DOCTYPE&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;b&gt;CSS&amp;nbsp;-&amp;gt; presentation&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
CSS is Cascading Style Sheets&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
Inline, Embedded and External CSS.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
CSS Semantic:Selector, Declaration, Cascade.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;b&gt;JavaScript -&amp;gt; behavior&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
JavaScript makes pages interactive.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
Embedded JavaScript is easy for maintaining.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
External JavaScript is great.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
JavaScript is a programming language.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
Variables, Operators, Strings, Arrays and Functions,&amp;nbsp;Conditionals, Loops, Objects (Properties and Methods).&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
The DOM (Document Object Model).&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
Events occur whenever actions happen on the page.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
You can attach listener functions to an event on an element.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
Object detection&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
You can change the style.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
You can change the class(es).&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial, Verdana, sans-serif; font-size: 14px;&quot;&gt;
You can alter default events. (Browsers have default events like having default CSS)&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/6914545950064916626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/html-css-and-javascript-study.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/6914545950064916626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/6914545950064916626'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/html-css-and-javascript-study.html' title='HTML, CSS and JavaScript study'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-2465872722216754971</id><published>2012-03-12T14:23:00.000-07:00</published><updated>2012-03-12T14:23:24.773-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="networking"/><category scheme="http://www.blogger.com/atom/ns#" term="online application"/><category scheme="http://www.blogger.com/atom/ns#" term="online contribution"/><title type='text'>The Google Resume reading notes 3</title><content type='html'>Chapter 3 Getting in the Door&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;The Black Hole: Online Job Submission&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Making the Best of the Black Hole&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To increase your chances of getting a call, make sure you follow every instruction&lt;br /&gt;
&lt;br /&gt;
Second, if the job opening is fresh, apply quickly.&lt;br /&gt;
&lt;br /&gt;
Third, put yourself in the shoes of the hiring manager.&lt;br /&gt;
&lt;br /&gt;
Fourth, remember that just because you discover the opening through a job web site doesn&#39;t mean you have to apply through it. (Send a personalized note to the recruiters or hiring mangers) &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Getting a Personal Referral&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Tell Your Friends&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Make Yourself Known&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Blog, LinkedIn, Facebook and Twitter communication &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Informational Interview&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Reach Out to Recruiters&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A quick Internet search with a query like &lt;recruiter *@adobe.com=&quot;&quot;&gt; will turn up recruiters from virtually every major company. &lt;/recruiter&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Alumni Network and Beyond&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Career Fairs&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Do your homework&lt;br /&gt;
Prepare questions&lt;br /&gt;
Prepare answers&lt;br /&gt;
Practice your elevator pitch&lt;br /&gt;
Tailor your resume&lt;br /&gt;
Dress appropriately&lt;br /&gt;
Follow up &lt;br /&gt;
&lt;br /&gt;
a portfolio of projects&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;How did you build it? What did you enjoy? What did you learn? What was the hardest part?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Contract Roles&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A contract role can be a wonderful way to have flexibility in life (nine months on, three months of vacation!) or to experience a company sans commitment.&lt;br /&gt;
&lt;br /&gt;
To transfer to full-time employee (FTE) , you need to &lt;span style=&quot;color: red;&quot;&gt;perform well, build connections, discover open positions, and, yes, interview just like anyone else off the street.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Get Creative&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example, import&amp;nbsp; resume to Google Docs&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Quality, Not Quantity: How to Build a Network that Works&lt;br /&gt;
&lt;br /&gt;
Networking is about what you do when you don&#39;t need a network.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Be giving/ Be open / Be the connector&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Immerse Yourself in Start-ups&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Contributing Online&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Create a web site&lt;br /&gt;
Start a blog&lt;br /&gt;
Write guest blog posts&lt;br /&gt;
Answer questions&lt;br /&gt;
Get involved with GitHub</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/2465872722216754971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/google-resume-reading-notes-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/2465872722216754971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/2465872722216754971'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/google-resume-reading-notes-3.html' title='The Google Resume reading notes 3'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-2017942568585702274</id><published>2012-03-12T13:14:00.000-07:00</published><updated>2012-03-12T13:14:10.591-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GPA"/><category scheme="http://www.blogger.com/atom/ns#" term="project experience"/><category scheme="http://www.blogger.com/atom/ns#" term="quality"/><category scheme="http://www.blogger.com/atom/ns#" term="quantify impact"/><title type='text'>The Google Resume reading notes 2</title><content type='html'>Chapter 2 Advanced Preparation&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What Can You Do: An Overview&lt;/b&gt;&lt;br /&gt;
Develop a track record of achievement&lt;br /&gt;
Learn to write and speak&lt;br /&gt;
Emphasize depth over breadth&lt;br /&gt;
Become a leader&lt;br /&gt;
Find a mentor (or become a mentor)&lt;br /&gt;
Develop a tangible skill&lt;br /&gt;
Learn about technology&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Academics&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Get Project Experience&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Grade Point Average: Does It Matter and What Can You Do?&lt;/b&gt;&lt;br /&gt;
Companies care about what you can actually do, and your interview performance is generally considered a better indication of that than some silly number. &lt;br /&gt;
&lt;br /&gt;
Doctor Who? Getting to Know Professors&lt;br /&gt;
Get involved in their research&lt;br /&gt;
Ask them for help&lt;br /&gt;
Become a teaching assistant&lt;br /&gt;
Lunch, coffee, or office hours&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Work Experience&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Make an Impact&lt;/b&gt;&lt;br /&gt;
Think broadly&lt;br /&gt;
Be really, really good at what you do&lt;br /&gt;
Solicit feedback proactively&lt;br /&gt;
Learn about other teams &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Become a Generalist&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The best program managers, the best markets, and the best developers have something in common: they each understand the others&#39; roles.&lt;br /&gt;
&lt;br /&gt;
Understanding the roles around you will enable you to perform better at your own job by offering greater context, while also offering you transferable skills.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Size Matters: Quantify Your Impact&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
Can you quantify its impact in terms of dollars, hours, or reduced sales calls? Seek out this information when it happens to ensure that you can get the most precise, accurate data. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Part-Time Jobs and Internships &lt;/b&gt;&lt;br /&gt;
Help a professor out with research&lt;br /&gt;
Contact a start-up&lt;br /&gt;
Volunteer for a nonprofit&lt;br /&gt;
&lt;br /&gt;
Remember that experience builds on itself. (Web Development-&amp;gt;Microsoft-&amp;gt;Apple-&amp;gt;Google)</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/2017942568585702274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/google-resume-reading-notes-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/2017942568585702274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/2017942568585702274'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/google-resume-reading-notes-2.html' title='The Google Resume reading notes 2'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-1535237702813831087</id><published>2012-03-12T11:36:00.000-07:00</published><updated>2012-03-12T11:39:13.983-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Amazon"/><category scheme="http://www.blogger.com/atom/ns#" term="Apple"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="Interests"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="Skills"/><category scheme="http://www.blogger.com/atom/ns#" term="Startup vs Big Company"/><category scheme="http://www.blogger.com/atom/ns#" term="Technology Career Plan"/><category scheme="http://www.blogger.com/atom/ns#" term="The Google Resume"/><category scheme="http://www.blogger.com/atom/ns#" term="Work/Life Balance."/><title type='text'>The Google Resume reading notes 1</title><content type='html'>The Google Resume is written by Gayle Laakmann McDowell and it worth reading for the ones who want to join in the field of technology. &lt;br /&gt;
&lt;br /&gt;
Chapter 1 Introduction&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Work/Life Balance &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Moving Up: Individual Contributors&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Differences&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Amazon, many would argue, is more of a retail company than a software company. It is leading in multiple industries (retail, cloud computing,&amp;nbsp; etc.) largely because of its technical innovation.&lt;br /&gt;
&lt;br /&gt;
Apple is just as secretive inside as it is outside.&lt;br /&gt;
&lt;br /&gt;
Microsoft has dabbled (and reasonably successfully) with search and the web, but a large chunk of its earnings come from Windows and Office.&lt;br /&gt;
&lt;br /&gt;
Google is the nerdiest of nerdy.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Big vs. Little: Is a Start-up Right for You?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Good&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: #274e13;&quot;&gt;
Diversity of skills&lt;/div&gt;
&lt;div style=&quot;color: #274e13;&quot;&gt;
Leadership opportunities&lt;/div&gt;
&lt;div style=&quot;color: #274e13;&quot;&gt;
Control and influence &lt;/div&gt;
&lt;div style=&quot;color: #274e13;&quot;&gt;
Rapid results&lt;/div&gt;
&lt;div style=&quot;color: #274e13;&quot;&gt;
High reward&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;The Bad&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;color: red;&quot;&gt;
Long hours&lt;/div&gt;
&lt;div style=&quot;color: red;&quot;&gt;
Unclear job description&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: red;&quot;&gt;
Low pay&lt;/div&gt;
&lt;div style=&quot;color: red;&quot;&gt;
Limited credibility&lt;/div&gt;
&lt;div style=&quot;color: red;&quot;&gt;
Less mentorship&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;The Job Title: What Do You Want to Be When You Grow Up?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What Do You Need?&lt;/b&gt;&lt;br /&gt;
Money&lt;br /&gt;
Recognition and respect&lt;br /&gt;
Work/Life balance&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How Do You Enjoy Working?&lt;/b&gt;&lt;br /&gt;
Teamwork vs. independent work&lt;br /&gt;
Creating vs. maintaining&lt;br /&gt;
Leading vs. joining&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What Are You Good At?&lt;/b&gt;&lt;br /&gt;
Numbers&lt;br /&gt;
Writing and communication&lt;br /&gt;
Creativity&lt;br /&gt;
People skills&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/1535237702813831087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/google-resume-reading-notes-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/1535237702813831087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/1535237702813831087'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/google-resume-reading-notes-1.html' title='The Google Resume reading notes 1'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-521050579018534039</id><published>2012-03-11T17:10:00.000-07:00</published><updated>2012-03-11T17:11:37.112-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="A Berkeley View of Cloud Computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Amazon EC2"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Computing Economics"/><category scheme="http://www.blogger.com/atom/ns#" term="Definition and Classification"/><category scheme="http://www.blogger.com/atom/ns#" term="Google AppEngine"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="Top 10 Obstacles and Opportunities"/><title type='text'>Cloud Computing Paper Reading Summary 4</title><content type='html'>&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;In
 the tech report Above the Clouds: A Berkeley View of Cloud Computing, 
which is published by &lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Reliable Adaptive Distributed 
Systems Laboratory&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt; Professors in UC Berkeley, these authors summarized about almost every aspects of 
Cloud Computing and predict the future of Cloud Computing.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;2. Cloud Computing: An Old Idea Whose Time Has (Finally) Come&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;What is Cloud Computing, and how is it different from previous paradigm shifts such as Software as a Service(SaaS)?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Why is Cloud Computing poised to take off now, whereas previous attempts have foundered?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;What does it take to become a Cloud Computing provider, and why would a company consider becoming one?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;What new opportunities are either enabled by or potential drivers of Cloud Computing?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;How might we classify current Cloud Computing offerings across a spectrum, and how do the technical&amp;nbsp; and business challenges differ depending on where in the spectrum a particular offering lies?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;What, if any, are the new economic models enabled by Cloud Computing, and can a service operator decide whether to move to the cloud or stay in a private datacenter?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;What are the top 10 obstacles to the success of Cloud Computing---and the corresponding top 10 opportunities available for overcoming the obstacles?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;What changes should be made to the design of future applications software, infrastructure software, and hardware to match the needs and opportunities of Cloud Computing?&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;3. What is Cloud Computing?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Cloud Computing refers to both the &lt;span style=&quot;color: red;&quot;&gt;applications delivered as services over the Internet&lt;/span&gt; and&lt;span style=&quot;color: red;&quot;&gt; the hardware and systems software in the datacenters&lt;/span&gt; that provide those services. The services themselves have long been referred to as Software as a Service (SaaS). The datacenter hardware and software is what we will call a Cloud.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Factors might influence these companies to become Cloud Computing providers:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;1. Make a lot of money.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;2. Leverage existing investment.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;3. Defend a franchise.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;4. Attack an incumbent.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;5. Leverage customer relationship.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;6. Becomes a platform.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;b&gt;4. Cloud in a Perfect Storm: Why now, Not Then?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;4.1 New Technology Trends and Business Models. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;4.2 New Application Opportunities&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Mobile interactive applications.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Parallel batch processing.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;The rise of analytics.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Extension of compute-intensive desktop applications&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&quot;Earthbound&quot; applications&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;5. Classes of Utility Computing&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Azure is intermediate between complete application frameworks like Google AppEngine on the one hand, and hardware virtual machines like EC2 on the other.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Different tasks will result in demand for different classes of utility computing.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;b&gt;6. Cloud Computing Economics&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;6.1 Elasticity: Shifting the&amp;nbsp; Risk&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&quot;pay as&amp;nbsp; you go&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;usage-based pricing&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Few users deliberately provision for less than the expected peak.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;6.2 Comparing Costs: Should I Move to the Cloud?&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Pay separately per resource.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Power, cooling and physical plant costs.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Operation costs.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Tasks are shifted to the cloud provider.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Costs will be lower for managed environment than for hardware-level utility computing.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;7. Top 10 obstacles and Opportunities for Cloud Computing&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: red;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Each obstacle is paired with an opportunity.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;#1 Obstacle: Availability of a Service&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Simple Storage Service (S3)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;The only plausible solution to very high availability is multiple Cloud Computing providers. (The best chance for independent software stacks is for them to be provided by different companies.)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Another availability obstacle is Distributed Denial of Service (DDoS) attacks.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;The longer an attack lasts the easier it is to uncover and defend against.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;b&gt;#2 Obstacle: Data Lock-In&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Concern about the difficult of extracting data from the cloud is preventing some organizations from adopting Cloud Computing.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;1. The quality of a service matters as well as the price, so customers will not necessarily jump to the lowest cost service.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;2. In addition to mitigating data lock-in concerns, standardization of APIs enables a new usage model in which the same software infrastructure can be used in a Private Cloud and in a Public Cloud. Such an option could enable &quot;Surge Computing&quot; in which the public Cloud is used to capture the extra tasks that cannot be easily run in the datacenter (or private cloud) due to temporarily heavy workloads.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;b&gt;#3 Obstacle: Data Confidentiality and Auditability&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;b&gt;#4 Obstacle: Data Transfer Bottlenecks&amp;nbsp;&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Applications continue to become more data-intensive. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;One opportunity to overcome the high cost of Internet transfer is to ship disks.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;A second opportunity is to find other reasons to make it attractive to keep data in the cloud.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;A third, more radical opportunity is to try to reduce the cost of WAN bandwidth more quickly.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;#5 Obstacle: Performance Unpredictability &amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;I/O sharing is more problematic.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;One opportunity is to improve architecture and operating systems to efficiently virtualize interrupts and I/O channels.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Another possibility is that flash memory will decrease I/O interference.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Another unpredictability obstacle concerns the scheduling of virtual machines for some classes of batch processing programs, especially for high performance computing.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Many HPC applications need to ensure that all the threads of a program are running simultaneously.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Thus, the opportunity of overcome this obstacle is to offer something like &quot;gang scheduling&quot; for Cloud Computing.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;#6 Obstacle: Scalable Storage&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;The opportunity, which is still an open research problem, is to create a storage system would not only meet these needs but combine them with the cloud advantage of scaling arbitrarily&amp;nbsp; up and down on-demand, as well as meeting programmer expectations in regard to resource management for scalability, data durability, and high availability.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;#7 Obstacle: Bugs in Large-Scale Distributed Systems&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;A common occurrence is that these bugs cannot be reproduced in smaller configurations, so the debugging must at scale in the production datacenters.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;One opportunity may be the reliance on virtual machine in Cloud Computing.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Since VM are de rigueur in Utility Computing, that level of virtualization may make it possible to capture valuable information in ways that are implausible without VMs. (de rigueur: prescribed or required by fashion, etiquette or customer)&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;b&gt;#8 Obstacle: Scaling Quickly&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Google AppEngine automatically scales in response to load increases and decreases, and users are charged by the cycles used. AWS charges by the hour for the number of instance you occupy, even if your machine is idle.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;One RAD Lab focus is the pervasive and aggressive use of &lt;span style=&quot;color: red;&quot;&gt;statistical machine learning&lt;/span&gt; as a diagnostic and predictive tool that would allow dynamic scaling, automatic reaction to performance and correctness problems, and generally automatic management of many aspects of these systems.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Another reason for scaling is to conserve resources as well as money.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;#9 Obstacle: Reputation Fate Sharing&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;b&gt;#10 Obstacle: Software Licensing&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;The primary opportunity is either for open source to remain popular or simply for commercial software companies to change their licensing structure to better fit Cloud Computing.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;8. Conclusion and Questions about the Clouds of Tomorrow&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Application Software&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;The client piece needs to be useful when disconnected from the Cloud, which is not the case for many Web 2.0 applications today.&amp;nbsp; (Evernote?)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Infrastructure Software&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Hardware System&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Change In Technology and Prices Over Time&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Will technology or business innovations accelerate network bandwidth pricing, which is currently the most slowly-improving technology?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Virtualization Level:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;Dominated by low-level hardware virtual machines like &lt;span style=&quot;color: red;&quot;&gt;Amazon EC2&lt;/span&gt;, intermediate language offerings like &lt;span style=&quot;color: red;&quot;&gt;Microsoft Azure&lt;/span&gt; or high-level frameworks like &lt;span style=&quot;color: red;&quot;&gt;Google AppEngine&lt;/span&gt;?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/521050579018534039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/521050579018534039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/521050579018534039'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-4.html' title='Cloud Computing Paper Reading Summary 4'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-2192626403371952332</id><published>2012-03-09T12:47:00.000-08:00</published><updated>2012-03-18T12:23:49.252-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algorithm design"/><category scheme="http://www.blogger.com/atom/ns#" term="ask questions"/><category scheme="http://www.blogger.com/atom/ns#" term="behavioral questions"/><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-code"/><category scheme="http://www.blogger.com/atom/ns#" term="S.A.R."/><category scheme="http://www.blogger.com/atom/ns#" term="technical questions"/><category scheme="http://www.blogger.com/atom/ns#" term="test"/><title type='text'>Cracking The Coding Interview reading notes 1</title><content type='html'>At the Interview | Handling Behavioral Questions&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Structure Answers Using Situation (Scenario) - Action - Result&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Ex: in operating system project a guy struggled and discuss few in emails, then the actor communicated with him and that guy performed better.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;General Advice for Technical Questions&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Interviews are supposed to be difficult. If you don&#39;t get every -or any-answer immediately, that&#39;s ok! According to author&#39;s experience, 10 of 120 people finished right instantly.&lt;br /&gt;
&lt;br /&gt;
So when you get a hard question, don&#39;t panic. Just start talking aloud about how you would solve it.&lt;br /&gt;
&lt;br /&gt;
You&#39;re not done until the interviewer says that you&#39;re done!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Five Steps to a Technical Question&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
1. Ask your interviewer questions to resolve ambiguity.&lt;br /&gt;
2. Design an algorithm.&lt;br /&gt;
3. Write pseudo-code first, but &lt;span style=&quot;color: red;&quot;&gt;make sure to tell your interviewer that you&#39;re writing pseudo-code&lt;/span&gt;!&lt;br /&gt;
4. Write your code, not too slow and not too fast.&lt;br /&gt;
5. Test your code and carefully fix any mistakes.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step 1: Ask Questions&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Good questions might be like: What are the data types? How much data is there? What assumptions do you need to solve the problem? Who is the user?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step 2: Design an Algorithm&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1. What are the space and time complexities?&lt;br /&gt;
2. What happens if there is a lot of data?&lt;br /&gt;
3. Does your design cause other issue? (i.e., if you are creating a modified version of a binary search tree, did you design impact the time for insert/ find/ delete?)&lt;br /&gt;
4. If there are other issues, did you make the right trade-offs?&lt;br /&gt;
5. If they gave you specific data(e.g., mentioned that the data is ages, or in sorted order), have you leveraged that information? There&#39;s probably a reason that you&#39;re given it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step 3: Pseudo-Code&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Writing pseudo-code first can help you outline your thoughts clearly and reduce the number of mistakes you commit.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step 4: Code&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
You don&#39;t need to rush through your code; in fact, it will most likely hurt you. Just go at a nice, slow methodical pace.&lt;br /&gt;
&lt;br /&gt;
1. Use Data Structures Generously: Where relevant, use a good data structure or define your own.&lt;br /&gt;
&lt;br /&gt;
(i.e., what structure used to represent a person, which shows caring about object oriented design)&lt;br /&gt;
&lt;br /&gt;
2. Don&#39;t Crowd Your Coding.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step 5: Test&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1. Extreme case: 0, negative, null, maximum, etc.&lt;br /&gt;
2. User error: What happens if the user passes in null or a negative value?&lt;br /&gt;
3. General cases: Test the normal case.&lt;br /&gt;
&lt;br /&gt;
If the algorithm is complicated or highly numerical(bit shifting, arithmetic, etc.), consider testing while you&#39;re writing the code rather than at the end.&lt;br /&gt;
&lt;br /&gt;
Also, when you find mistakes(which you will), carefully think through &lt;span style=&quot;color: red;&quot;&gt;why&lt;/span&gt; the bug is occurring. Don&#39;t try to make &quot;random&quot; changes to fix the error.&lt;br /&gt;
&lt;br /&gt;
When you notice problems in your code, really think deeply about why your code failed before fixing the mistake.&lt;br /&gt;
&lt;br /&gt;
Before the Interview | Technical Preparation&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Data Structures&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Linked Lists&lt;br /&gt;
Binary Trees&lt;br /&gt;
Tries&lt;br /&gt;
Stacks&lt;br /&gt;
Queues&lt;br /&gt;
Vectors / ArrayLists&lt;br /&gt;
Hash Tables&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Algorithms&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Breadth First Search&lt;br /&gt;
Depth First Search&lt;br /&gt;
Binary Search&lt;br /&gt;
Merge Sort&lt;br /&gt;
Quick Sort&lt;br /&gt;
Tree Insert / Find /etc&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Concepts&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Big Manipulation&lt;br /&gt;
Singleton Design Pattern&lt;br /&gt;
Factory Design Pattern&lt;br /&gt;
Memory (Stack vs Heap)&lt;br /&gt;
Recursion&lt;br /&gt;
Big-O Time</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/2192626403371952332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cracking-coding-interview-reading-notes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/2192626403371952332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/2192626403371952332'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cracking-coding-interview-reading-notes.html' title='Cracking The Coding Interview reading notes 1'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5052484681940626599.post-6604778715419111370</id><published>2012-03-05T16:45:00.000-08:00</published><updated>2012-03-05T16:45:57.006-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Berkeley view of Cloud Computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Executive Summary"/><category scheme="http://www.blogger.com/atom/ns#" term="Private Cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="Public Cloud"/><title type='text'>Cloud Computing Paper Reading Summary 3</title><content type='html'>&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;In the tech report, Above the Clouds: A Berkeley View of Cloud Computing, published by Professors in UC Berkeley Reliable Adaptive Distributed Systems Laboratory, these authors talked about almost every aspects of Cloud Computing and predict the future of Cloud Computing.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;1. Executive Summary&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;The services themselves have long been referred to as Software as a Service(SaaS). The datacenter hardware and software are what we call a Cloud.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;When a Cloud is made available i a pay-as-you-go manner to the general public, we call it a Public Cloud. The service being sold is Utility Computing.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Private Cloud is used to refer to internal datacenters of a business or other organization, not made available to the general public.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Cloud Computing is the sum of SaaS and Utility Computing, but does not include Private Clouds, according to the Berkeley professors.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;From a hardware point of view, three aspects are new in Cloud Computing:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;(1). The illusion of infinite computing resources available on demand.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;(2). The elimination of an up-front commitment by Cloud users.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;(3). The ability to pay for use of computing resources on a short-term basis as needed.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Any application needs a model of computation, a model of storage, and a model of communication.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 20px;&quot;&gt;Google AppEngine is targeted exclusively at traditional web applications, enforcing an application structure of clean separation between a stateless computation tier and a stateful storage tier.&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://yaoli13.blogspot.com/feeds/6604778715419111370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/6604778715419111370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5052484681940626599/posts/default/6604778715419111370'/><link rel='alternate' type='text/html' href='http://yaoli13.blogspot.com/2012/03/cloud-computing-paper-reading-summary-3.html' title='Cloud Computing Paper Reading Summary 3'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/05826675704010615189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>