<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rgschaef</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rgschaef"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Rgschaef"/>
	<updated>2026-06-06T12:02:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89507</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89507"/>
		<updated>2014-10-08T00:26:47Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles of BDD===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Given a 5 by 5 game&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
.....&lt;br /&gt;
When I toggle the cell at (3, 1)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
..X..&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This exhibits the simplicity of the language involved.  Though it is a simple example, it is immediately readable and understandable even by those inexperienced in programming.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Specification: Stack&lt;br /&gt;
&lt;br /&gt;
When a new stack is created&lt;br /&gt;
Then it is empty&lt;br /&gt;
&lt;br /&gt;
When an element is added to the stack&lt;br /&gt;
Then that element is at the top of the stack&lt;br /&gt;
&lt;br /&gt;
When a stack has N elements &lt;br /&gt;
And element E is on top of the stack&lt;br /&gt;
Then a pop operation returns E&lt;br /&gt;
And the new size of the stack is N-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Similarly, this tests a very simple data structure that can be quickly understood by those not well versed in the exact underworkings of how a stack functions; they only need to know the most basic outline of a stack in order to find this Story completely readable.&lt;br /&gt;
&lt;br /&gt;
And finally, a more specific stack testing implementation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Narrative:&lt;br /&gt;
In order to develop an application that requires a stack efficiently&lt;br /&gt;
As a development team&lt;br /&gt;
I would like to use an interface and implementation in Java directly&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Scenario:  Basic functionality of a Stack&lt;br /&gt;
 &lt;br /&gt;
Given an empty stack&lt;br /&gt;
When the string Java is added&lt;br /&gt;
And the string C++ is added&lt;br /&gt;
And the last element is removed again&lt;br /&gt;
Then the resulting element should be Java&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Stack search&lt;br /&gt;
 &lt;br /&gt;
Given an empty stack&lt;br /&gt;
When the string Java is added&lt;br /&gt;
And the string C++ is added&lt;br /&gt;
And the string PHP is added&lt;br /&gt;
And the element Java is searched for&lt;br /&gt;
Then the position returned should be 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|3.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|4.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#1body|5.]]&amp;lt;/span&amp;gt; https://blog.codecentric.de/en/2011/03/automated-acceptance-testing-using-jbehave/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89506</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89506"/>
		<updated>2014-10-08T00:25:40Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles of BDD===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Given a 5 by 5 game&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
.....&lt;br /&gt;
When I toggle the cell at (3, 1)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
..X..&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This exhibits the simplicity of the language involved.  Though it is a simple example, it is immediately readable and understandable even by those inexperienced in programming.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Specification: Stack&lt;br /&gt;
&lt;br /&gt;
When a new stack is created&lt;br /&gt;
Then it is empty&lt;br /&gt;
&lt;br /&gt;
When an element is added to the stack&lt;br /&gt;
Then that element is at the top of the stack&lt;br /&gt;
&lt;br /&gt;
When a stack has N elements &lt;br /&gt;
And element E is on top of the stack&lt;br /&gt;
Then a pop operation returns E&lt;br /&gt;
And the new size of the stack is N-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Similarly, this tests a very simple data structure that can be quickly understood by those not well versed in the exact underworkings of how a stack functions; they only need to know the most basic outline of a stack in order to find this Story completely readable.&lt;br /&gt;
&lt;br /&gt;
And finally, a more specific stack testing implementation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Narrative:&lt;br /&gt;
In order to develop an application that requires a stack efficiently&lt;br /&gt;
As a development team&lt;br /&gt;
I would like to use an interface and implementation in Java directly&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Scenario:  Basic functionality of a Stack&lt;br /&gt;
 &lt;br /&gt;
Given an empty stack&lt;br /&gt;
When the string Java is added&lt;br /&gt;
And the string C++ is added&lt;br /&gt;
And the last element is removed again&lt;br /&gt;
Then the resulting element should be Java&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Stack search&lt;br /&gt;
 &lt;br /&gt;
Given an empty stack&lt;br /&gt;
When the string Java is added&lt;br /&gt;
And the string C++ is added&lt;br /&gt;
And the string PHP is added&lt;br /&gt;
And the element Java is searched for&lt;br /&gt;
Then the position returned should be 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|3.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|4.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#1body|5.]]&amp;lt;/span&amp;gt; https://blog.codecentric.de/en/2011/03/automated-acceptance-testing-using-jbehave/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89505</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89505"/>
		<updated>2014-10-08T00:25:00Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles of BDD===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Given a 5 by 5 game&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
.....&lt;br /&gt;
When I toggle the cell at (3, 1)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
..X..&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This exhibits the simplicity of the language involved.  Though it is a simple example, it is immediately readable and understandable even by those inexperienced in programming.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Specification: Stack&lt;br /&gt;
&lt;br /&gt;
When a new stack is created&lt;br /&gt;
Then it is empty&lt;br /&gt;
&lt;br /&gt;
When an element is added to the stack&lt;br /&gt;
Then that element is at the top of the stack&lt;br /&gt;
&lt;br /&gt;
When a stack has N elements &lt;br /&gt;
And element E is on top of the stack&lt;br /&gt;
Then a pop operation returns E&lt;br /&gt;
And the new size of the stack is N-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Similarly, this tests a very simple data structure that can be quickly understood by those not well versed in the exact underworkings of how a stack functions; they only need to know the most basic outline of a stack in order to find this Story completely readable.&lt;br /&gt;
&lt;br /&gt;
And finally, a more specific stack testing implementation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Narrative:&lt;br /&gt;
In order to develop an application that requires a stack efficiently&lt;br /&gt;
As a development team&lt;br /&gt;
I would like to use an interface and implementation in Java directly&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Scenario:  Basic functionality of a Stack&lt;br /&gt;
 &lt;br /&gt;
Given an empty stack&lt;br /&gt;
When the string Java is added&lt;br /&gt;
And the string C++ is added&lt;br /&gt;
And the last element is removed again&lt;br /&gt;
Then the resulting element should be Java&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Stack search&lt;br /&gt;
 &lt;br /&gt;
Given an empty stack&lt;br /&gt;
When the string Java is added&lt;br /&gt;
And the string C++ is added&lt;br /&gt;
And the string PHP is added&lt;br /&gt;
And the element Java is searched for&lt;br /&gt;
Then the position returned should be 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89504</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89504"/>
		<updated>2014-10-08T00:13:26Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles of BDD===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Given a 5 by 5 game&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
.....&lt;br /&gt;
When I toggle the cell at (3, 1)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
..X..&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This exhibits the simplicity of the language involved.  Though it is a simple example, it is immediately readable and understandable even by those inexperienced in programming.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Specification: Stack&lt;br /&gt;
&lt;br /&gt;
When a new stack is created&lt;br /&gt;
Then it is empty&lt;br /&gt;
&lt;br /&gt;
When an element is added to the stack&lt;br /&gt;
Then that element is at the top of the stack&lt;br /&gt;
&lt;br /&gt;
When a stack has N elements &lt;br /&gt;
And element E is on top of the stack&lt;br /&gt;
Then a pop operation returns E&lt;br /&gt;
And the new size of the stack is N-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Similarly, this tests a very simple data structure that can be quickly understood by those not well versed in the exact underworkings of how a stack functions; they only need to know the most basic outline of a stack in order to find this Story completely readable.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89503</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89503"/>
		<updated>2014-10-08T00:11:39Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Three Core Principles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles of BDD===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Given a 5 by 5 game&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
.....&lt;br /&gt;
When I toggle the cell at (3, 1)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
..X..&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This exhibits the simplicity of the language involved.  Though it is a simple example, it is immediately readable and understandable even by those inexperienced in programming.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89502</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89502"/>
		<updated>2014-10-08T00:11:20Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Given a 5 by 5 game&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
.....&lt;br /&gt;
When I toggle the cell at (3, 1)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
..X..&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This exhibits the simplicity of the language involved.  Though it is a simple example, it is immediately readable and understandable even by those inexperienced in programming.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89501</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89501"/>
		<updated>2014-10-08T00:09:46Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Given a 5 by 5 game&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
.....&lt;br /&gt;
When I toggle the cell at (3, 1)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
..X..&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This exhibits the three principles of good BDD;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89500</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89500"/>
		<updated>2014-10-08T00:09:17Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Given a 5 by 5 game&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
.....&lt;br /&gt;
When I toggle the cell at (3, 1)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
..X..&lt;br /&gt;
When I toggle the cell at (3, 2)&lt;br /&gt;
Then the grid should look like&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
.....&lt;br /&gt;
..X..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89499</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89499"/>
		<updated>2014-10-08T00:08:18Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Stories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89498</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89498"/>
		<updated>2014-10-08T00:07:58Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Three Core Principles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89497</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89497"/>
		<updated>2014-10-08T00:07:39Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* JBehave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89496</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89496"/>
		<updated>2014-10-08T00:07:00Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* JBehave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
JBehave is the first ever created Behavior Driven Design platform, completed by Dan North.  &lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Three Core Principles===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour&lt;br /&gt;
&amp;lt;li&amp;gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue&lt;br /&gt;
&amp;lt;li&amp;gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
BDD relies on the use of a small vocabulary to minimize miscommunication and to ensure that everyone involved (business, developers, testers, analysts and managers)  are not only on the same page but using the same words. &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://behaviour-driven.org/ &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89495</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89495"/>
		<updated>2014-10-07T23:59:55Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Integrating with Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
When writing tests, a story is the text that encompasses many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Step3eclipse.png&amp;diff=89494</id>
		<title>File:Step3eclipse.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Step3eclipse.png&amp;diff=89494"/>
		<updated>2014-10-07T23:59:26Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Step2eclipse.png&amp;diff=89493</id>
		<title>File:Step2eclipse.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Step2eclipse.png&amp;diff=89493"/>
		<updated>2014-10-07T23:58:33Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89492</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89492"/>
		<updated>2014-10-07T23:58:16Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Integrating with Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
When writing tests, a story is the text that encompasses many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2eclipse.png]]&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3eclipse.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89491</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89491"/>
		<updated>2014-10-07T23:57:59Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Integrating with Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
When writing tests, a story is the text that encompasses many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2.png]]&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89490</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89490"/>
		<updated>2014-10-07T23:56:22Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Integrating with Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
When writing tests, a story is the text that encompasses many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
[[File:step2.jpg]]&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
[[File:step3.jpg]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89489</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89489"/>
		<updated>2014-10-07T23:55:11Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Integrating with Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
When writing tests, a story is the text that encompasses many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:step1.jpg]]&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89488</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89488"/>
		<updated>2014-10-07T23:54:43Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Integrating with Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
When writing tests, a story is the text that encompasses many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&lt;br /&gt;
[[File:1.jpg]]&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89487</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89487"/>
		<updated>2014-10-07T23:51:09Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Integrating with Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
When writing tests, a story is the text that encompasses many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using the Eclipse Installer:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Help &amp;gt; Install New Software...&lt;br /&gt;
&amp;lt;li&amp;gt;Add the new site location http://jbehave.org/reference/eclipse/updates/&lt;br /&gt;
&amp;lt;li&amp;gt;Select JBehave Eclipse feature and follow standard Eclipse installation procedure&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89486</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89486"/>
		<updated>2014-10-07T23:43:01Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
When writing tests, a story is the text that encompasses many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given, When, and Then are keywords utilized when writing JBehave scenarios.  A scenario can have any number of steps and a story can contain many scenarios.  &lt;br /&gt;
&lt;br /&gt;
Given details the premises of the test, When details the exact incident, and Then details the expected outcome.  To re-emphasize, the english readability is a novelty of BDD concepts.  &lt;br /&gt;
&lt;br /&gt;
Example of general story format:&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89485</id>
		<title>CSC/ECE 517 Fall 2014/ch1a 25 rs</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_25_rs&amp;diff=89485"/>
		<updated>2014-10-07T23:38:14Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: Created page with &amp;quot;=JBehave=   ==Behavior Driven Development== ===Overview=== Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=JBehave=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Behavior Driven Development==&lt;br /&gt;
===Overview===&lt;br /&gt;
Behavior driven design (BDD) exists as an extension to Test Driven Development(TDD). Overall, BDD can be thought of as a specialized form of TDD that utilizes specialized tools (such as JBehave) to accomplish similar tasks with more emphasis on the accessibility of the program tests as opposed to the rigid, structured format of conventional acceptance tests.  &lt;br /&gt;
===Comparison to Test Driven Development===&lt;br /&gt;
The language used for test cases immediately distinguishes BDD from TDD.  Also, in BDD, the test cases emcompass both the specification for the program as well as the actual test case. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
JBehave is a Java-based framework that aims to function as a fully fledged development paradigm, utilizing communication and automation while using behavior based language in its descriptors.  &lt;br /&gt;
&lt;br /&gt;
==Concepts==&lt;br /&gt;
===Stories===&lt;br /&gt;
A story is fundamentally defined as an &amp;quot;automatically executable increment of business functionality.&amp;quot;  We can think of this as a single component of functionality.  Stories are further comprised of scenarios, which are defined as  concrete examples of the behavior of the system.  In other words, a specific instance of an implementation of a story.  Scenarios are further broken down into steps, which are single statements that detail (step by step, if you will) exactly how a scenario will play out.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Narrative:&lt;br /&gt;
In order to communicate effectively to the business some functionality&lt;br /&gt;
As a development team&lt;br /&gt;
I want to use Behaviour-Driven Development&lt;br /&gt;
     &lt;br /&gt;
Scenario:  A scenario is a collection of executable steps of different type&lt;br /&gt;
 &lt;br /&gt;
Given step represents a precondition to an event&lt;br /&gt;
When step represents the occurrence of the event&lt;br /&gt;
Then step represents the outcome of the event&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Another scenario exploring different combination of events&lt;br /&gt;
 &lt;br /&gt;
Given a precondition&lt;br /&gt;
When a negative event occurs&lt;br /&gt;
Then a the outcome should be captured  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Keywords===&lt;br /&gt;
&lt;br /&gt;
==Five Step Overview==&lt;br /&gt;
&lt;br /&gt;
==Integrating with Eclipse==&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://jbehave.org/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Behavior-driven_development &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.ryangreenhall.com/articles/bdd-by-example.html &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014&amp;diff=89484</id>
		<title>CSC/ECE 517 Fall 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014&amp;diff=89484"/>
		<updated>2014-10-07T23:11:00Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE_517_Fall_2014/sample_page]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1a 22 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 19 mx]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 3 zq]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 4 lf]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 4 wl]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a a7 ch]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 25 rs]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 25 jf]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 8 os]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 8 sn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 15 gs]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 10 hu]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 20 kv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 21 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 24 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 26 sn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 6 rl]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 2 ss]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 16 av]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 1 rm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 1 sj]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 23 ss]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 20 rn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 22 sp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 26 gn]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 13 va]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 9 aa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 9 kn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 11 ap]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 25 ks]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1a 7 kz]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1a_6_bn]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1a 10 zz]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1a 16 va]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1a F1415 rv]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1a_3_cp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2014/ch1b 26 sa]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1b_28_cg]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1b 29 ry]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1b 30 cs]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1b_33_jy]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2014/ch1b_27_js]]&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=88888</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=88888"/>
		<updated>2014-09-30T02:46:48Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Comparison to other Frameworks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
&lt;br /&gt;
Overall, web2py can be viewed as less encompassing than Ruby on Rails and is directed towards a less advanced audience.  It does not implement Active-Record or dependency injection and relies on a simplified database scheme.  Because it relies on Python, it is a compiled language with more basic versioning, encryption, and custom queries and covers a less broad coding style (no imperative programming or aspect-oriented programming).  &lt;br /&gt;
&lt;br /&gt;
Django and web2py share a lot of common ground and many common features.  They both are pre-compiled, Python-based, and have nearly identical database schemes (object-relational and document-relational).  Django uses a unique template system called (wait for it) the Django Template System, supports a wide variety of version control, and has greater support for cloud hosting solutions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== Getting Started in web2py ==&lt;br /&gt;
Hosting your own Debian/Ubuntu installation:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the 'unzip' package if you do not have it&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install unzip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the framework from the website and unzip it&lt;br /&gt;
&amp;lt;pre&amp;gt;wget http://www.web2py.com/examples/static/web2py_src.zip&lt;br /&gt;
unzip web2py_src.zip&lt;br /&gt;
cd web2py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run the web interface&lt;br /&gt;
&amp;lt;pre&amp;gt;python web2py.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If all goes well, you should be see your local web2py server running in the terminal window.  Ctrl + C will terminate it.&lt;br /&gt;
[[File:web2pyserver.png]]&lt;br /&gt;
&amp;lt;li&amp;gt;To create SSL certificates for remote access, generate an RSA key and then output the file with the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;openssl genrsa -out server.key 2048&lt;br /&gt;
openssl req -new -key server.key -out server.csr&lt;br /&gt;
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:rsa.png]]&lt;br /&gt;
&amp;lt;li&amp;gt;Now you can enable remote access by passing in a few parameters when you start up your server:&lt;br /&gt;
&amp;lt;pre&amp;gt;python web2py.py -a 'admin_password' -c server.crt -k server.key -i 0.0.0.0 -p 8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can access your IDE through most browsers at https://your_ip:8000  (e.g. 127.0.0.1:8000 if accessing locally)&lt;br /&gt;
[[File:ide.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;7foot&amp;quot;&amp;gt;[[#7body|7.]]&amp;lt;/span&amp;gt; https://www.digitalocean.com/community/tutorials/how-to-use-the-web2py-framework-to-quickly-build-your-python-app&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Ide.png&amp;diff=86647</id>
		<title>File:Ide.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Ide.png&amp;diff=86647"/>
		<updated>2014-09-18T19:07:56Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86646</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86646"/>
		<updated>2014-09-18T19:07:40Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Getting Started in web2py */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== Getting Started in web2py ==&lt;br /&gt;
Hosting your own Debian/Ubuntu installation:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the 'unzip' package if you do not have it&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install unzip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the framework from the website and unzip it&lt;br /&gt;
&amp;lt;pre&amp;gt;wget http://www.web2py.com/examples/static/web2py_src.zip&lt;br /&gt;
unzip web2py_src.zip&lt;br /&gt;
cd web2py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run the web interface&lt;br /&gt;
&amp;lt;pre&amp;gt;python web2py.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If all goes well, you should be see your local web2py server running in the terminal window.  Ctrl + C will terminate it.&lt;br /&gt;
[[File:web2pyserver.png]]&lt;br /&gt;
&amp;lt;li&amp;gt;To create SSL certificates for remote access, generate an RSA key and then output the file with the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;openssl genrsa -out server.key 2048&lt;br /&gt;
openssl req -new -key server.key -out server.csr&lt;br /&gt;
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:rsa.png]]&lt;br /&gt;
&amp;lt;li&amp;gt;Now you can enable remote access by passing in a few parameters when you start up your server:&lt;br /&gt;
&amp;lt;pre&amp;gt;python web2py.py -a 'admin_password' -c server.crt -k server.key -i 0.0.0.0 -p 8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can access your IDE through most browsers at https://your_ip:8000  (e.g. 127.0.0.1:8000 if accessing locally)&lt;br /&gt;
[[File:ide.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;7foot&amp;quot;&amp;gt;[[#7body|7.]]&amp;lt;/span&amp;gt; https://www.digitalocean.com/community/tutorials/how-to-use-the-web2py-framework-to-quickly-build-your-python-app&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86644</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86644"/>
		<updated>2014-09-18T19:04:27Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Getting Started in web2py */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== Getting Started in web2py ==&lt;br /&gt;
Hosting your own Debian/Ubuntu installation:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the 'unzip' package if you do not have it&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install unzip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the framework from the website and unzip it&lt;br /&gt;
&amp;lt;pre&amp;gt;wget http://www.web2py.com/examples/static/web2py_src.zip&lt;br /&gt;
unzip web2py_src.zip&lt;br /&gt;
cd web2py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run the web interface&lt;br /&gt;
&amp;lt;pre&amp;gt;python web2py.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If all goes well, you should be see your local web2py server running in the terminal window.  Ctrl + C will terminate it.&lt;br /&gt;
[[File:web2pyserver.png]]&lt;br /&gt;
&amp;lt;li&amp;gt;To create SSL certificates for remote access, generate an RSA key and then output the file with the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;openssl genrsa -out server.key 2048&lt;br /&gt;
openssl req -new -key server.key -out server.csr&lt;br /&gt;
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:rsa.png]]&lt;br /&gt;
&amp;lt;li&amp;gt;Now you can enable remote access by passing in a few parameters when you start up your server:&lt;br /&gt;
&amp;lt;pre&amp;gt;python web2py.py -a 'admin_password' -c server.crt -k server.key -i 0.0.0.0 -p 8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;7foot&amp;quot;&amp;gt;[[#7body|7.]]&amp;lt;/span&amp;gt; https://www.digitalocean.com/community/tutorials/how-to-use-the-web2py-framework-to-quickly-build-your-python-app&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Rsa.png&amp;diff=86643</id>
		<title>File:Rsa.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Rsa.png&amp;diff=86643"/>
		<updated>2014-09-18T19:04:12Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Web2pyserver.png&amp;diff=86219</id>
		<title>File:Web2pyserver.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Web2pyserver.png&amp;diff=86219"/>
		<updated>2014-09-18T00:00:01Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86218</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86218"/>
		<updated>2014-09-17T23:59:51Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Getting Started in web2py */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== Getting Started in web2py ==&lt;br /&gt;
Debian/Ubuntu installation:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the 'unzip' package if you do not have it&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install unzip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the framework from the website and unzip it&lt;br /&gt;
&amp;lt;pre&amp;gt;wget http://www.web2py.com/examples/static/web2py_src.zip&lt;br /&gt;
unzip web2py_src.zip&lt;br /&gt;
cd web2py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run the web interface&lt;br /&gt;
&amp;lt;pre&amp;gt;python web2py.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If all goes well, you should be see your local web2py server running in the terminal window.  Ctrl + C will terminate it.&lt;br /&gt;
[[File:web2pyserver.png]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;7foot&amp;quot;&amp;gt;[[#7body|7.]]&amp;lt;/span&amp;gt; https://www.digitalocean.com/community/tutorials/how-to-use-the-web2py-framework-to-quickly-build-your-python-app&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86217</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86217"/>
		<updated>2014-09-17T23:59:02Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Getting Started in web2py */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== Getting Started in web2py ==&lt;br /&gt;
Debian/Ubuntu installation:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the 'unzip' package if you do not have it&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install unzip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the framework from the website and unzip it&lt;br /&gt;
&amp;lt;pre&amp;gt;wget http://www.web2py.com/examples/static/web2py_src.zip&lt;br /&gt;
unzip web2py_src.zip&lt;br /&gt;
cd web2py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run the web interface&lt;br /&gt;
&amp;lt;pre&amp;gt;python web2py.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If all goes well, you should be see your local web2py server running in the terminal window.  Ctrl + C will terminate it.&lt;br /&gt;
[[File:web2pyserver.jpg]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;7foot&amp;quot;&amp;gt;[[#7body|7.]]&amp;lt;/span&amp;gt; https://www.digitalocean.com/community/tutorials/how-to-use-the-web2py-framework-to-quickly-build-your-python-app&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86215</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86215"/>
		<updated>2014-09-17T23:54:30Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== Getting Started in web2py ==&lt;br /&gt;
Debian/Ubuntu installation:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the 'unzip' package if you do not have it&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install unzip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the framework from the website and unzip it&lt;br /&gt;
&amp;lt;pre&amp;gt;wget http://www.web2py.com/examples/static/web2py_src.zip&lt;br /&gt;
unzip web2py_src.zip&lt;br /&gt;
cd web2py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;7foot&amp;quot;&amp;gt;[[#7body|7.]]&amp;lt;/span&amp;gt; https://www.digitalocean.com/community/tutorials/how-to-use-the-web2py-framework-to-quickly-build-your-python-app&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86214</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86214"/>
		<updated>2014-09-17T23:53:33Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Getting Started in web2py */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== Getting Started in web2py ==&lt;br /&gt;
Debian/Ubuntu installation:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the 'unzip' package if you do not have it&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install unzip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the framework from the website and unzip it&lt;br /&gt;
&amp;lt;pre&amp;gt;wget http://www.web2py.com/examples/static/web2py_src.zip&lt;br /&gt;
unzip web2py_src.zip&lt;br /&gt;
cd web2py&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86209</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86209"/>
		<updated>2014-09-17T23:51:12Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== Getting Started in web2py ==&lt;br /&gt;
Debian/Ubuntu installation:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the 'unzip' package if you do not have it&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install unzip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86208</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86208"/>
		<updated>2014-09-17T23:46:08Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Distinguishing Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86207</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86207"/>
		<updated>2014-09-17T23:45:53Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: /* Distinguishing Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
=== Model/Controller Execution ===&lt;br /&gt;
In web2py, the Model and Controller code is not modual; rather, they are executed in a global environment with each individual HTTP request.  This is different from most web development frameworks and presents a unique set of advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
*Simplifies development - no need to import &lt;br /&gt;
*Provides a clean reset of objects with every HTTP request - no need to worry about object states, overriding requests, conflicting HTTP, etc.  &lt;br /&gt;
*Multiple applications can exist within the same instance without conflicting with one another&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
*Models and Controllers are not class based - code sometimes must be frequently repeated &lt;br /&gt;
*Inability to inherit &lt;br /&gt;
*Non-modular; the developer must be mindful of the order of execution&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Online IDE ===&lt;br /&gt;
web2py is fully supported by an online IDE.  This covers the full development spectrum, including debugging, testing, maintenance, databases, internationalization, etc.  This makes it simple to begin developement without setting up any kind of environment or even installing an IDE.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86203</id>
		<title>CSC/ECE 517 Fall 2014/ch1a a7 ch</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2014/ch1a_a7_ch&amp;diff=86203"/>
		<updated>2014-09-17T23:30:51Z</updated>

		<summary type="html">&lt;p&gt;Rgschaef: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web2py Framework =&lt;br /&gt;
Web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications written in Python.&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;1body&amp;quot;&amp;gt;[[#1foot|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
== Background ==&lt;br /&gt;
Web2py was originally introduced as a teaching tool to used to demonstrate ease of use and deployment. It was modeled after [http://en.wikipedia.org/wiki/Ruby_on_Rails Ruby on Rails] and [http://en.wikipedia.org/wiki/Django_(web_framework) Django], and as such focuses on rapid development and adheres to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller] architecture pattern.&lt;br /&gt;
&lt;br /&gt;
Here are some of the features of Web2py&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[2]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;4body&amp;quot;&amp;gt;[[#4foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;:&lt;br /&gt;
* Web2py runs on Windows, Mac, Unix/Linux, Google App Engine, Amazon EC2, and almost any web hosting via Python 2.5/2.6/2.7/pypy, or Java with Jython.&lt;br /&gt;
* Accessible anywhere, without any installation required&lt;br /&gt;
* Open source licensed under the [http://www.gnu.org/licenses/lgpl.html GNU LGPL v3.0 License]&lt;br /&gt;
* Support for mutiple databases including: SQLite, PostgreSQL, MySQL, MSSQL, FireBird, Oracle, IBM DB2, Informix, Ingres, and Google App Engine&lt;br /&gt;
* Equipped with a Data Abstraction Layer that removes the requirement of knowing how to write SQL by doing it for you in real-time&lt;br /&gt;
* Role-based authorization of resources&lt;br /&gt;
* Error logging and ticketing system&lt;br /&gt;
* An web-based administrative interface for ease of interaction&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
There are [http://web2py.com/poweredby several websites] currently powered by Web2py, including a [http://pymines.appspot.com/ website] hosting the ever-popular game [http://en.wikipedia.org/wiki/Minesweeper_(video_game) Minesweeper].&lt;br /&gt;
&lt;br /&gt;
As previously mentioned, Web2py doesn't require that you install anything, you may access and demo the capabilities online through their [http://www.web2py.com/demo_admin/default/site demo administrative interface]. At the time of this article's writing, the save demo is not fully-functional.&lt;br /&gt;
&lt;br /&gt;
You may download and run web2py by following the instructions on [http://www.web2py.com/init/default/download this page].&lt;br /&gt;
&lt;br /&gt;
===Code Examples===&lt;br /&gt;
&lt;br /&gt;
A complete list web2py-provided examples can be found [http://www.web2py.com/init/default/examples here].&lt;br /&gt;
&lt;br /&gt;
====Hello World====&lt;br /&gt;
Creating a web2py application can be as simple as writing a few lines in a single controller file (default.py):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Upload&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;3body&amp;quot;&amp;gt;[[#3foot|[3]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db=DAL('sqlite://storage.db')&lt;br /&gt;
db.define_table('image', &lt;br /&gt;
    Field('name', notnull=True),&lt;br /&gt;
    Field('file','upload'))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index():&lt;br /&gt;
    form = SQLFORM(db.image).process()&lt;br /&gt;
    if form.accepted:&lt;br /&gt;
        response.flash = 'image uploaded'&lt;br /&gt;
    return locals()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{extend 'layout.html'}}&lt;br /&gt;
&amp;lt;h1&amp;gt;Image upload form&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ImageUpload.PNG]]&lt;br /&gt;
&lt;br /&gt;
====Forms&amp;lt;sup&amp;gt;&amp;lt;span id=&amp;quot;5body&amp;quot;&amp;gt;[[#5foot|[5]]]&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
In the Model:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db = DAL('sqlite://webform.sqlite')&lt;br /&gt;
db.define_table('register',&lt;br /&gt;
    Field('first_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('last_name', requires=IS_NOT_EMPTY()),&lt;br /&gt;
    Field('email', requires=IS_NOT_EMPTY()))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Controller:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def display_your_form():&lt;br /&gt;
    form = SQLFORM(db.register)&lt;br /&gt;
    return dict(form=form)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the View:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Web Form&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Inputs:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=form}}&lt;br /&gt;
&amp;lt;h2&amp;gt;Submitted variables:&amp;lt;/h2&amp;gt;&lt;br /&gt;
{{=BEAUTIFY(request.vars)}}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Webform.png]]&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
&lt;br /&gt;
Web2py follows a Model-View-Controller (MVC) architecture.&lt;br /&gt;
&lt;br /&gt;
* '''Model''' - The data&lt;br /&gt;
* '''View''' - Presents the data in a user-friendly way.&lt;br /&gt;
* '''Controller''' - Acts as the glue between the model and view and handles the logic for displaying the data.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC-Process.png]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows an example of how web2py handles requests and renders the request to the browser:&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Comparison to other Frameworks==&lt;br /&gt;
Since web2py was inspiried by Rails and Django, it draws ideas from each.&lt;br /&gt;
&lt;br /&gt;
The creators of web2py borrowed the Ruby on Rails approach of convention over configuration and Django's approach of generating forms from database tables and including a large amount of validators out of the box.&lt;br /&gt;
===&amp;lt;u&amp;gt;Controllers&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyTestController &amp;lt; ApplicationController&lt;br /&gt;
 def index&lt;br /&gt;
 render_text “Hello World”&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&lt;br /&gt;
Django requires the user to specify all of his/her imports in the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from django.http import HttpResponse&lt;br /&gt;
def index(request):&lt;br /&gt;
 return HttpResponse(&amp;quot;Hello World”)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def index(): &lt;br /&gt;
 return &amp;quot;Hello World&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Models&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article &amp;lt; ActiveRecord::Migration&lt;br /&gt;
 def self.up&lt;br /&gt;
 create_table :articles do |t|&lt;br /&gt;
 t.column :name, :string&lt;br /&gt;
 t.column :description, :text&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Article(models.Model):&lt;br /&gt;
 name = models.StringField()&lt;br /&gt;
 description = models.TextField()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Article=db.define_table(‘Article’,&lt;br /&gt;
 SQLField(‘email’,’string’),&lt;br /&gt;
 SQLField(‘description’,’text’)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;u&amp;gt;Views&amp;lt;/u&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;% @recipes.each do |recipe| %&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;&amp;lt;%= recipe.name %&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
{% for recipe in recipes %}&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
{% endfor %} &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Web2py====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 {{for recipe in recipes:}}&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;{{=recipe.name}}&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 {{pass}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Distinguishing Features ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;span id=&amp;quot;1foot&amp;quot;&amp;gt;[[#1body|1.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/index &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;2foot&amp;quot;&amp;gt;[[#2body|2.]]&amp;lt;/span&amp;gt; http://en.wikipedia.org/wiki/Web2py &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;3foot&amp;quot;&amp;gt;[[#3body|3.]]&amp;lt;/span&amp;gt; http://www.web2py.com/init/default/what &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;4foot&amp;quot;&amp;gt;[[#4body|4.]]&amp;lt;/span&amp;gt; http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2013/oss_SocialMediaFeeds &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;5foot&amp;quot;&amp;gt;[[#5body|5.]]&amp;lt;/span&amp;gt; http://mherman.org/blog/2012/12/01/crash-course-in-web2py-part-2-web-forms/#.VBT9d_ldVuJ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;6foot&amp;quot;&amp;gt;[[#6body|6.]]&amp;lt;/span&amp;gt; http://www.web2py.com/examples/static/web2py_vs_others.pdf/ Web2py vs other frameworks &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rgschaef</name></author>
	</entry>
</feed>