There are three different acronyms for Cloud Computing, the 3 faces,
SaaS applications are run from your browser. Usually you do not have to install something to run them. Email services like Yahoo or Gmail are SaaS applications. Google search is a SaaS application. Using these services you do not care on what type of servers are run, who makes the OS (operation system) updates, who writes the code, where your data is stored, how the vendor load balances the traffic to the application. You only care on the availability of the service and the security of your data.
IaaS gives companies or individuals the opportunity to move their computers or servers on the cloud. Why you may choose to do that? Because of cost benefits, space benefits, stuff benefits, scale benefits etc.Infrastructure means that the provider of the service (Amazon, Google, Rackspace and many others) provides the tools to create a virtualization platform with storage and networking services. To give you an example, assume that you have two servers running your applications and sharing files / information at you premisses . When you decide to move them to the cloud you have the ability to create two virtual servers on a stronger physical machine. You can do it on your premisses too, but by putting them on the Cloud gives you more advantages like you will stop worrying about hardware issues, bandwidth, network infrastructure and scalability issues.
PaaS is a great way to create distributed applications that can have 99.999% availability. To leverage the benefits of a PaaS you have to architect your solution to take advantages of the platform offerings in queues, blobs, storage and other areas. Why to choose PaaS to develop your application? You have numerous benefits such as scalability, reliability, no OS administration time and costs and many other advantages. I will discuss in another blog post how to architect such solutions.
You have to remember that by just putting your application on a cloud server you do not transform them to a PaaS application or to a SaaS application. In almost all the cases you will need to rewrite parts of your application.
Which of the 3 faces of Cloud computing is suitable for you?
]]>Have lots of fun! Happy coding!
]]>
Code review or software inspections are used to spot software errors, omissions and anomalies. The code review as the name implies is to look at the source code for errors and defects. To successful perform a code review a team of at least four people must be formed. The roles are:
It is very important to keep any questions or comment to the code and not to criticize the developer. When done correctly code review is a positive experience for the team and a learning tool for all levels of developers.
In order to initiate a code review you must:
During one hour of inspection about 120 lines of code are reviewed. It is not recommended for the code inspection to last more than one and a half hours.
It is very important during the inspection to read and translate the code in plain English, based on the specifications. This way everyone can examine the logic and validity of the code.
Why should somebody prefer code reviews from testing?
An advice to software project managers:
I would recommend planning time for code reviews in every project. Code reviews is a great way to mitigate code related risks during the early stages of development.
References and useful links
The benefits are:
As a conclusion, I believe that this Microsoft move is a great help for the startups. They have the tools and the opportunity to create new and innovative software solutions without the initial cost of an MSDN subscription. If you qualify get that opportunity.
]]>From the braindump blog I saw that there is a fast growing noSQL community that talks about how distributed non relational databases work.
A very interesting paper is the presentation of Amazon’s Dynamo highly available key-value storage system. From Amazon’s experience we learn that the reliability and scalability of a system is dependent on how its application state is managed.
For some quick links:
Hypertable is designed to manage the storage and processing of information on a large cluster of commodity servers, providing resilience to machine and component failures.
Cassandra is a highly scalable, eventually consistent, distributed, structured key-value store.
Voldemort is a distributed key-value storage system. In the “Build and Break” blog there is a nice post about the Voldemort project.
CouchDB is a document database server, accessible via a RESTful JSON API.
Mongo (from “humongous”) is a high-performance, open source, schema-free document-oriented database.
]]>This may sound like science fiction but the tools already exist to monitor and interpret brain activity. As stated by Alois Schlogl and Clemens Brunner in their article at October 2008 issue of Computer magazine, BCI’s purpose is to identify the user’s intention by analyzing only brain activity. In the article is presented the BIOSIG library which is a free and open source library of biomedical processing tools.
Recent research has revealed that Brain wave patterns can predict blunders. Neuroscientist Ole Jensen, Ali Mazaheri and colleagues Institute at the University of California, Davis, in collaboration with the Donders Institute in the Netherlands, has found a distinct electric signature in the brain which predicts that an error is about to be made.
By analyzing the recorded magnetoencephalography (MEG) data, the research team found that about a second an error were committed, brain waves in two regions were stronger than when the subjects correctly refrained from hitting the button. In the back of the head (the occipital region), alpha wave activity was about 25 percent stronger, and in the middle region, the sensorimotor cortex, there was a corresponding increase in the brain’s mu wave activity.
“The alpha and mu rhythms are what happen when the brain runs on idle,” Mazaheri explained. “Say you’re sitting in a room and you close your eyes. That causes a huge alpha rhythm to rev up in the back of your head. But the second you open your eyes, it drops dramatically, because now you’re looking at things and your neurons have visual input to process.”
Wireless EKG can help identify errors before they happen. If the technology is limited on these areas then it is used for something serving the common good. If the technology is used to monitor brain activity and spot “deviant” activity then we are not far from a thought police as described by George Orwell’s novel Nineteen Eighty-Four. In my opinion is in our hands to produce a manifest that will clearly state that Computer professionals and Software engineers should not consent into the use of this technology in general population but only on specific beneficial situations. (Air traffic control)
]]>We can perform an initial cut on the deck of cards before applying GUID or the shuffling algorithm. The cut is done by swapping the first 26 cards with the last 26 cards.
The card class
public class Card {
//This card represents a single deck Card
//It will be used to construct a complete deck of cards (52 cards in total)
private string face; // face of card 13 ranks (A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K)
private string suit; // suit of card (“Hearts”, “Diamonds”, “Clubs, “Spades”)
// constructor
public Card(string cardFace, string cardSuit) {
face = cardFace;
suit = cardSuit;
}
// return string representation of Card
public override string ToString() {
return face + ” of ” + suit;
}
} // end class Card
And this is the shuffling implementation
// shuffle deck of Cards
//This is a one pass algorithm for shuffling N elements O(n)
public void Shuffle() {
currentCard = 0;
for (int first = 0; first < deck.Length; first++) {
// select a random number between 0 and 51
int second = randomNumbers.Next(NUMBER_OF_CARDS);
// swap current Card with randomly selected Card
Card temp = deck[first];
deck[first] = deck[second];
deck[second] = temp;
}
}
Several variable definitions are missing but are very easy to declare them.
]]>