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.
1. Executive Summary
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.
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.
Private Cloud is used to refer to internal datacenters of a business or other organization, not made available to the general public.
Cloud Computing is the sum of SaaS and Utility Computing, but does not include Private Clouds, according to the Berkeley professors.
From a hardware point of view, three aspects are new in Cloud Computing:
(1). The illusion of infinite computing resources available on demand.
(2). The elimination of an up-front commitment by Cloud users.
(3). The ability to pay for use of computing resources on a short-term basis as needed.
Any application needs a model of computation, a model of storage, and a model of communication.
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.
Monday, March 5, 2012
Saturday, March 3, 2012
Programming Interviews Exposed reading notes 1
Approaches to Programming Problems
(Secrets to Landing Your Next Job)
Take the time to make your code solid and pretty.
Lesson1: These problems are hard! Some of the questions are designed to see how you handle a problem when you don't immediately see the solution.
Lesson2: Brush up on the languages you expect to use, and write your best code.
Lesson3: Keep talking! Always explain what you are doing.
Lesson4: Many questions involve ridiculous restrictions, use obscure feature of languages, and seem silly and contrived. Play within the rules.
Lesson5: Make sure you understand the problem before you start solving it, then start with an example to solidify your understanding.
Lesson6: Explain what you are doing to your interviewer before and while coding the solution. Keep talking!
Lesson7: Try an example, and check all error and special cases.
Lesson8: When all else fails, return to a specific example. Try to move from the specific example to the general case and from there to the solution.
Lesson9: Sometimes a different data structure or advanced language feature is key to the solution. (advanced feature: bit operators, union types, complex pointer casting and advanced keywords )
p.s.
1. One of the shared traits of almost all interview coding questions is that the correct solutions are short. You rarely need to write more than 15 lines of code and almost never more than 30. If you start writing lots of code, it should be a warning that you may be heading in the wrong direction.
2. You often need to compare a value to NULL or 0.
if ( elem != NULL ) { or if ( elem ) {
(Secrets to Landing Your Next Job)
Take the time to make your code solid and pretty.
Lesson1: These problems are hard! Some of the questions are designed to see how you handle a problem when you don't immediately see the solution.
Lesson2: Brush up on the languages you expect to use, and write your best code.
Lesson3: Keep talking! Always explain what you are doing.
Lesson4: Many questions involve ridiculous restrictions, use obscure feature of languages, and seem silly and contrived. Play within the rules.
Lesson5: Make sure you understand the problem before you start solving it, then start with an example to solidify your understanding.
Lesson6: Explain what you are doing to your interviewer before and while coding the solution. Keep talking!
Lesson7: Try an example, and check all error and special cases.
Lesson8: When all else fails, return to a specific example. Try to move from the specific example to the general case and from there to the solution.
Lesson9: Sometimes a different data structure or advanced language feature is key to the solution. (advanced feature: bit operators, union types, complex pointer casting and advanced keywords )
p.s.
1. One of the shared traits of almost all interview coding questions is that the correct solutions are short. You rarely need to write more than 15 lines of code and almost never more than 30. If you start writing lots of code, it should be a warning that you may be heading in the wrong direction.
2. You often need to compare a value to NULL or 0.
if ( elem != NULL ) { or if ( elem ) {
Friday, March 2, 2012
Cloud Computing Paper Reading Summary 2
In paper The Characteristics of Cloud Computing published by Chunye Gong etc. , these authors summarized the characteristics about cloud computing and compared Cloud Computing with High Performance Computing(HPC) and Grid Computing.
There are more than 20 definitions of cloud computing which seem to concentrate on certain aspects of this technology.
According to the provided capability type, cloud computing are divided into 3 classes:
a. Infrastructure as a Service(IaaS): delivery of huge computing resources such as the capacity of processing, storage and network. Also called Hardware as a Service(HaaS).
b. Platform as a Service(PaaS): abstracting the infrastructures and supporting a set of application program interface to cloud applications.
c. Software as a Service(SaaS): aiming at replacing the applications running on PC. A problem about SaaS is that the delay of network is fatal to real time or half real time applications such as 3D online game.
Cloud Computing is divided into 5 layers including clients, applications, platform, infrastructure and servers.
The Cloud Computing has main characteristics like service oriented, loose coupling, strong fault tolerant, business model and ease use. As the paper authors said, the bird's eye about cloud computing or other research areas is the free encyclopedia Wikipedia.
The key characteristics of cloud computing are agility, low cost, device and location independence, multi-tenancy, high reliability, high scalability, security and sustainability. L.M. Vaquero etc. list up to 22 definitions and analyse characteristics of Cloud Computing. They pointed out that the clouds are a large pool of virtualized resources which are ease to use and access. Ten in their summary: user-friendliness, virtualization, Internet centric, variety of resources, automatic adaptation, scalability, resource optimization, pay-per-use, service SLAs(Service-Level-Agreements) and infrastructure SLAs.
Compared with HPC, Cloud Computing balanced powerful processing performance and low delay very well. Moreover, HPC is tight coupling, has too much data dependence or global among computing nodes.
Since abstraction and accessibility are two keys to achieve the service oriented conception. Abstraction reduces both the need for cloud user to learn the detail of cloud architecture and threshold of application development.
With virtualization or other technologies, the infrastructures are separated in logic or physic, they will not affect each other. Whole Cloud Computing runs in a client-server model.
There are mainly four places where faults maybe occur in Cloud Computing: provider-inner, provider-across, provider-user and user-across.
When it comes to User Experience, it belongs to the subject of human computer interaction, which is an important criterion when evaluating whether an application is successful or not.
Cloud Computing performs better than Grid Computing in User Experience for 3 reasons:
a. Most cloud providers offer Internet-based interfaces which are simpler than other application program interfaces(API).
b. User Experience of web application is full studied so that the User Experience are independent from content.
c. The Web 2.0 increases the interactions between web users and providers.
Furthermore, Cloud Computing has characteristics such as TCP/IP based, virtualization and high security. They are all significant because TCP/IP provides reliable delivery, a connection-oriented service between remote applications. Cloud resources are often virtualized as a service over the Internet. High security relies on 3 factors: loose coupling; abstraction, virtualization, privation of cloud provider; technology cooperating with law.
In sum, the conceptional service oriented characteristic abstracts the details of Cloud Computing implementation. The loose coupling and strong fault tolerant stand for the main technical characteristics. Owing business model is the key differentiation compared with other academic researches and helps Cloud Computing flourishing. The ease use user experience helps Cloud Computing being accepted widely by non computer experts.
There are more than 20 definitions of cloud computing which seem to concentrate on certain aspects of this technology.
According to the provided capability type, cloud computing are divided into 3 classes:
a. Infrastructure as a Service(IaaS): delivery of huge computing resources such as the capacity of processing, storage and network. Also called Hardware as a Service(HaaS).
b. Platform as a Service(PaaS): abstracting the infrastructures and supporting a set of application program interface to cloud applications.
c. Software as a Service(SaaS): aiming at replacing the applications running on PC. A problem about SaaS is that the delay of network is fatal to real time or half real time applications such as 3D online game.
Cloud Computing is divided into 5 layers including clients, applications, platform, infrastructure and servers.
The Cloud Computing has main characteristics like service oriented, loose coupling, strong fault tolerant, business model and ease use. As the paper authors said, the bird's eye about cloud computing or other research areas is the free encyclopedia Wikipedia.
The key characteristics of cloud computing are agility, low cost, device and location independence, multi-tenancy, high reliability, high scalability, security and sustainability. L.M. Vaquero etc. list up to 22 definitions and analyse characteristics of Cloud Computing. They pointed out that the clouds are a large pool of virtualized resources which are ease to use and access. Ten in their summary: user-friendliness, virtualization, Internet centric, variety of resources, automatic adaptation, scalability, resource optimization, pay-per-use, service SLAs(Service-Level-Agreements) and infrastructure SLAs.
Compared with HPC, Cloud Computing balanced powerful processing performance and low delay very well. Moreover, HPC is tight coupling, has too much data dependence or global among computing nodes.
Since abstraction and accessibility are two keys to achieve the service oriented conception. Abstraction reduces both the need for cloud user to learn the detail of cloud architecture and threshold of application development.
With virtualization or other technologies, the infrastructures are separated in logic or physic, they will not affect each other. Whole Cloud Computing runs in a client-server model.
There are mainly four places where faults maybe occur in Cloud Computing: provider-inner, provider-across, provider-user and user-across.
When it comes to User Experience, it belongs to the subject of human computer interaction, which is an important criterion when evaluating whether an application is successful or not.
Cloud Computing performs better than Grid Computing in User Experience for 3 reasons:
a. Most cloud providers offer Internet-based interfaces which are simpler than other application program interfaces(API).
b. User Experience of web application is full studied so that the User Experience are independent from content.
c. The Web 2.0 increases the interactions between web users and providers.
Furthermore, Cloud Computing has characteristics such as TCP/IP based, virtualization and high security. They are all significant because TCP/IP provides reliable delivery, a connection-oriented service between remote applications. Cloud resources are often virtualized as a service over the Internet. High security relies on 3 factors: loose coupling; abstraction, virtualization, privation of cloud provider; technology cooperating with law.
In sum, the conceptional service oriented characteristic abstracts the details of Cloud Computing implementation. The loose coupling and strong fault tolerant stand for the main technical characteristics. Owing business model is the key differentiation compared with other academic researches and helps Cloud Computing flourishing. The ease use user experience helps Cloud Computing being accepted widely by non computer experts.
Project Euler 3
First time I thought about generating successive prime numbers to divide the aim number, whose reminder is zero. If the reminder is not zero, then the previous prime number is the largest prime factor of the aim number. But it doesn’t work, Floating Point Exception always displays. Code is following:
long int primegen(long int i)
{
long int temp_num;
temp_num = i;
if( temp_num % 2 == 0)
temp_num = 0;
else
{
int j;
long long int sqrt_result = (long long int)sqrt(temp_num);
for( j = 3; j < sqrt_result; j += 2)
{
if( ( temp_num % j ) == 0 ) temp_num = 0;
}
}
return temp_num;
}
int main()
{
long long int prime, prime_factor;
long long int aim;
aim = 600851475143;
int flag = 0;
long int count = 3;
while( flag == 0 )
{
if ( primegen( count ) > 0 );
{
prime = primegen( count );
if( ( aim % prime == 0 ) && ( prime <= aim ) )
prime_factor = prime;
else if ( prime > aim )
{
flag = 1;
}
}
count+=2;
}
printf(“The largest prime factor of the number 600851475143 is %lld\n”, prime_factor);
return 0;
}
After considering for some time, I cannot help checking solutions with Google. Then I found one solution in http://thetaoishere.blogspot.com/2008/05/largest-prime-factor-of-number.html
FindLargestPrimeFactor(n):
divide the number by successive integers (each denoted by i) upto sqrt(n),
when the remainder is 0, return the maximum among i and FindLargestPrimeFactor(n/i).
But in my eyes, it should be added the termination condition into the function FindLargestPrimeFactor(n):
If the reminder is 0, then return MAX( i , FindLargestPrimeFactor(n/i) ), but if the reminder is not zero until finish the whole loop and obviously, n is a prime number, so the recursion ends when it just returns n. My complete code is like this:
#include
#include
#include
// Find Largest Prime Factor
long long int FLPF(long long int i)
{
long long int aim;
long long int solution;
aim = i;
int counter_sol;
for( counter_sol=3; counter_sol {
if( aim % counter_sol == 0)
{
//printf(“The counter_sol is %d\n”, counter_sol);
solution = aim/counter_sol;
//printf(“The solution is %lld\n”, solution);
if( counter_sol < solution )
return FLPF(solution);
else return counter_sol;
}
}
return aim;
}
int main()
{
long long int aim;
long long int solution;
aim = 600851475143;
solution = 0;
printf(“The aim is %lld\n”, aim);
solution = FLPF(aim);
printf(“The solution is %lld\n”, solution);
return 0;
}
I feel I’m cheating because I borrowed the main idea from the website even though I add termination condition by myself.
I was trapped in the math procedure and the more efficient way is to find the smallest factor first and then find the solution which combine the main two steps into one, wonderful!
Two things learned from problem 3 in Project Euler:
1.C is not very suitable to figure out this kind of math problem. Some other language might be better like Python and Perl. Python is the unique required language in Pattern Recognition so that I will finish learning the syntax within 2 or 3 hours tonight.
2.Sometimes I cannot figure out the problem in Project Euler due to insufficient math knowledge. I will fix it from now on. Now I’m Baby Step now, I will figure out more problems since I enjoy this process.
long int primegen(long int i)
{
long int temp_num;
temp_num = i;
if( temp_num % 2 == 0)
temp_num = 0;
else
{
int j;
long long int sqrt_result = (long long int)sqrt(temp_num);
for( j = 3; j < sqrt_result; j += 2)
{
if( ( temp_num % j ) == 0 ) temp_num = 0;
}
}
return temp_num;
}
int main()
{
long long int prime, prime_factor;
long long int aim;
aim = 600851475143;
int flag = 0;
long int count = 3;
while( flag == 0 )
{
if ( primegen( count ) > 0 );
{
prime = primegen( count );
if( ( aim % prime == 0 ) && ( prime <= aim ) )
prime_factor = prime;
else if ( prime > aim )
{
flag = 1;
}
}
count+=2;
}
printf(“The largest prime factor of the number 600851475143 is %lld\n”, prime_factor);
return 0;
}
After considering for some time, I cannot help checking solutions with Google. Then I found one solution in http://thetaoishere.blogspot.com/2008/05/largest-prime-factor-of-number.html
FindLargestPrimeFactor(n):
divide the number by successive integers (each denoted by i) upto sqrt(n),
when the remainder is 0, return the maximum among i and FindLargestPrimeFactor(n/i).
But in my eyes, it should be added the termination condition into the function FindLargestPrimeFactor(n):
If the reminder is 0, then return MAX( i , FindLargestPrimeFactor(n/i) ), but if the reminder is not zero until finish the whole loop and obviously, n is a prime number, so the recursion ends when it just returns n. My complete code is like this:
#include
#include
#include
// Find Largest Prime Factor
long long int FLPF(long long int i)
{
long long int aim;
long long int solution;
aim = i;
int counter_sol;
for( counter_sol=3; counter_sol
if( aim % counter_sol == 0)
{
//printf(“The counter_sol is %d\n”, counter_sol);
solution = aim/counter_sol;
//printf(“The solution is %lld\n”, solution);
if( counter_sol < solution )
return FLPF(solution);
else return counter_sol;
}
}
return aim;
}
int main()
{
long long int aim;
long long int solution;
aim = 600851475143;
solution = 0;
printf(“The aim is %lld\n”, aim);
solution = FLPF(aim);
printf(“The solution is %lld\n”, solution);
return 0;
}
I feel I’m cheating because I borrowed the main idea from the website even though I add termination condition by myself.
I was trapped in the math procedure and the more efficient way is to find the smallest factor first and then find the solution which combine the main two steps into one, wonderful!
Two things learned from problem 3 in Project Euler:
1.C is not very suitable to figure out this kind of math problem. Some other language might be better like Python and Perl. Python is the unique required language in Pattern Recognition so that I will finish learning the syntax within 2 or 3 hours tonight.
2.Sometimes I cannot figure out the problem in Project Euler due to insufficient math knowledge. I will fix it from now on. Now I’m Baby Step now, I will figure out more problems since I enjoy this process.
Cloud Computing Paper Reading Summary 1
In paper Cloud computing and its key techniques, published by Xu Wang, Beizhan Wang, Jing Huang, these authors summaries several characteristics about cloud computing and cites Google File System as an example.
In the first place, cloud computing has advantages like reducing costs, increasing business flexibility and providing business continuity.
What is cloud? The definition given by a paper is that a cloud is a type of parallel and distributed system consisting of a collection of inter connected and virtualized computers that are dynamically provisioned and presented as one or more unified computing resources based on service-level agreements established through negotiation between the service provider and consumers. In the paper I read, cloud computing refers to both the applications delivered as services over the Internet and the hardware and systems software in the datacenter that provides those services.
From a hardware point of view, three aspects are new in cloud computing:
a. The illusion of infinite computing resources available on demand .
b. The elimination of an up-front commitment by cloud users.
c. The ability to pay for use of computing resources on a short-term basis as needed.
Cloud computing has several styles:
a. SAAS(Software as a service)
b. Utility Computing
c. Network service
d. PAAS(Platform as a service)
e. MSP(management service provider)
f. Commercial service platform
g. Integrating internet
Could computing has characteristics:
a. Ultra large-scale
b. Virtualization
c. High reliability
d. Versatility
e. High extendibility
f. On demand service
g. Extremely inexpensive
Google's cloud computing techniques:
a. Google File System(GFS) as data storage technology
b. Big Table as data management technology
c. Map Reduce as programming model and task scheduling model
Finally, authors point out lot of unsolved issues:
a. Continuously high availability
b. Dealt mechanism of cluster failure in cloud environment
c. Consistency guaranty
d. Synchronization in different clusters in cloud platform
e. Security of cloud platform
My later research will focus on the above issues.
In the first place, cloud computing has advantages like reducing costs, increasing business flexibility and providing business continuity.
What is cloud? The definition given by a paper is that a cloud is a type of parallel and distributed system consisting of a collection of inter connected and virtualized computers that are dynamically provisioned and presented as one or more unified computing resources based on service-level agreements established through negotiation between the service provider and consumers. In the paper I read, cloud computing refers to both the applications delivered as services over the Internet and the hardware and systems software in the datacenter that provides those services.
From a hardware point of view, three aspects are new in cloud computing:
a. The illusion of infinite computing resources available on demand .
b. The elimination of an up-front commitment by cloud users.
c. The ability to pay for use of computing resources on a short-term basis as needed.
Cloud computing has several styles:
a. SAAS(Software as a service)
b. Utility Computing
c. Network service
d. PAAS(Platform as a service)
e. MSP(management service provider)
f. Commercial service platform
g. Integrating internet
Could computing has characteristics:
a. Ultra large-scale
b. Virtualization
c. High reliability
d. Versatility
e. High extendibility
f. On demand service
g. Extremely inexpensive
Google's cloud computing techniques:
a. Google File System(GFS) as data storage technology
b. Big Table as data management technology
c. Map Reduce as programming model and task scheduling model
Finally, authors point out lot of unsolved issues:
a. Continuously high availability
b. Dealt mechanism of cluster failure in cloud environment
c. Consistency guaranty
d. Synchronization in different clusters in cloud platform
e. Security of cloud platform
My later research will focus on the above issues.
Monday, February 20, 2012
Understanding
In this assignment 1, I keep low efficiency as usual until I asked help for Ben. Thanks, Ben, first.
He pointed out freeing lock in lock_acquire() section, kfree(lock->lk_name) and kfree(lock), which were ignored by myself all the time. In the responding email to him, I said that the only reason I do that is having not understood codes completely. Yes, I have no courage to advise codes written by the professor, I’m afraid of the authority.
Understanding is quite significant. Computer Science and coding are good ways to train my understanding capability. Maybe I have to maintain pursuit for PhD in CS.
Work hard. Think hard. Understand hard. Last long!
He pointed out freeing lock in lock_acquire() section, kfree(lock->lk_name) and kfree(lock), which were ignored by myself all the time. In the responding email to him, I said that the only reason I do that is having not understood codes completely. Yes, I have no courage to advise codes written by the professor, I’m afraid of the authority.
Understanding is quite significant. Computer Science and coding are good ways to train my understanding capability. Maybe I have to maintain pursuit for PhD in CS.
Work hard. Think hard. Understand hard. Last long!
Inspired by Programmer Heroes
Actually I wanna implement quick sort in c, then I accessed to the author’s weibo (Chinese Twitter), who wrote the article about how to understand and implement quick sort in CSDN. What a surprise! I walked into an amazing world.
First I read about the article Travelling, Writing, Programming, which describes the author traveled around the world, wrote technical articles and programmed at the same time. It’s extremely cool, isn’t it? It is quite easy for a programmer work and relax at the same time, what’s more, programmers might prefer to work while taking vacation. What a cool thing! I wanna learn swimming and driving first, then make that dream come true, travel all over the world, write and code at the same time.
Then I read about a girl graduated with a Business Administration degree, but could not find a job which enables her satisfied. She had two friends working in Google and they are happy with their job, after some talk, she decide to learn computer techniques, like HTML/ CSS/ Javascript. Finally she found a QA job successfully. A story is that a East Europe miner who worked in a coal in Germany, since he could not touch the future, he quit and learned computer skills at home. During that two years, he had not left his home, no new clothes and shoes, no party, no girlfriend, but parents and brothers and sisters to feed. Potatoes are what he ate most time because they’re cheap. He learned HTML and Photoshop skills, created his first static website without connecting to database, then he was offered a full time job after beating six guys with bachelor degree, obvious, he mastered more than other six guys. Now he works in Phoenix, US, he was into filmmaking some time before, maybe he would start up a company or be a director? Who knows.
But which impressed me most is Jamie Zawinski’s story. He dropped out in high school and participated in developing Netscape and XEmacs. His argument against Michael Arrington, who said that if you work at a startup and you think you’re working too hard and sacrificing too much, find a job somewhere else that will cater to your needs. Jamie said, he’s using my words to try and back up that thesis. I hate this, because it’s not true, and it’s disingenuous. What is true is that for a VC’s business model to work, it’s necessary for you to give up your life in order for him to become richer. He’s telling you the story of, “If you bust your ass and don’t sleep, you’ll get rich” because the only way that people in his line of work get richer is if young, poorly-socialized, naive geniuses believe that story! Without those coat-tails to ride, VCs might have to work for a living. Once that kid burns out, they’ll just slot a new one in. I recommend that you do what you love because you love doing it. If that means long hours, fantastic. If that means leaving the office by 6pm every day for your underwater basket-weaving class, also fantastic. Yes, I really appreciate this sentence because I thought to work for nights in order to be successful, but just like some words in a book, you do need to work smart rather than hard. Jamie’s words in his dairy is filled with intelligence as well, this is the time period that is traditionally referred to as “the good old days,” but time always softens the pain and makes things look like more fun than they really were. But who said everything has to be fun? Pain builds character. (Sometimes it builds products, too.).
First I read about the article Travelling, Writing, Programming, which describes the author traveled around the world, wrote technical articles and programmed at the same time. It’s extremely cool, isn’t it? It is quite easy for a programmer work and relax at the same time, what’s more, programmers might prefer to work while taking vacation. What a cool thing! I wanna learn swimming and driving first, then make that dream come true, travel all over the world, write and code at the same time.
Then I read about a girl graduated with a Business Administration degree, but could not find a job which enables her satisfied. She had two friends working in Google and they are happy with their job, after some talk, she decide to learn computer techniques, like HTML/ CSS/ Javascript. Finally she found a QA job successfully. A story is that a East Europe miner who worked in a coal in Germany, since he could not touch the future, he quit and learned computer skills at home. During that two years, he had not left his home, no new clothes and shoes, no party, no girlfriend, but parents and brothers and sisters to feed. Potatoes are what he ate most time because they’re cheap. He learned HTML and Photoshop skills, created his first static website without connecting to database, then he was offered a full time job after beating six guys with bachelor degree, obvious, he mastered more than other six guys. Now he works in Phoenix, US, he was into filmmaking some time before, maybe he would start up a company or be a director? Who knows.
But which impressed me most is Jamie Zawinski’s story. He dropped out in high school and participated in developing Netscape and XEmacs. His argument against Michael Arrington, who said that if you work at a startup and you think you’re working too hard and sacrificing too much, find a job somewhere else that will cater to your needs. Jamie said, he’s using my words to try and back up that thesis. I hate this, because it’s not true, and it’s disingenuous. What is true is that for a VC’s business model to work, it’s necessary for you to give up your life in order for him to become richer. He’s telling you the story of, “If you bust your ass and don’t sleep, you’ll get rich” because the only way that people in his line of work get richer is if young, poorly-socialized, naive geniuses believe that story! Without those coat-tails to ride, VCs might have to work for a living. Once that kid burns out, they’ll just slot a new one in. I recommend that you do what you love because you love doing it. If that means long hours, fantastic. If that means leaving the office by 6pm every day for your underwater basket-weaving class, also fantastic. Yes, I really appreciate this sentence because I thought to work for nights in order to be successful, but just like some words in a book, you do need to work smart rather than hard. Jamie’s words in his dairy is filled with intelligence as well, this is the time period that is traditionally referred to as “the good old days,” but time always softens the pain and makes things look like more fun than they really were. But who said everything has to be fun? Pain builds character. (Sometimes it builds products, too.).
Labels:
Alex MacCaw,
Jamie Zawinski,
Mircea Goia,
programmer,
programming,
travelling,
writing
Subscribe to:
Posts (Atom)