<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>James Ward</title>
	<atom:link href="http://www.jamesward.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jamesward.com</link>
	<description>Typesafe &#124; Java &#124; Scala &#124; Play Framework &#124; Akka &#124; Open Source &#124; Linux</description>
	<lastBuildDate>Wed, 15 May 2013 22:02:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Auto-Refresh for Play Framework Apps</title>
		<link>http://www.jamesward.com/2013/05/15/auto-refresh-for-play-framework-apps?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=auto-refresh-for-play-framework-apps</link>
		<comments>http://www.jamesward.com/2013/05/15/auto-refresh-for-play-framework-apps#comments</comments>
		<pubDate>Wed, 15 May 2013 22:02:02 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[Play Framework]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3719</guid>
		<description><![CDATA[Over this past weekend I built a little tool for Play Framework app developers which auto-refreshes an app in Chrome when the source code or static assets change. Check out a video demonstration: For information on how to set it up, check out the project on GitHub: https://github.com/jamesward/play-auto-refresh Special thanks to Josh Suereth for helping [...]]]></description>
				<content:encoded><![CDATA[<p>Over this past weekend I built a little tool for Play Framework app developers which auto-refreshes an app in Chrome when the source code or static assets change.</p>
<p>Check out a video demonstration:<br />
<iframe width="640" height="360" src="http://www.youtube.com/embed/XsBg2suJR5s?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p>For information on how to set it up, check out the project on GitHub:<br />
<a href="https://github.com/jamesward/play-auto-refresh">https://github.com/jamesward/play-auto-refresh</a></p>
<p>Special thanks to <a href="http://jsuereth.com/" target="_blank">Josh Suereth</a> for helping me figure out the SBT magic.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/05/15/auto-refresh-for-play-framework-apps/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Securing Single Page Apps and REST Services</title>
		<link>http://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=securing-single-page-apps-and-rest-services</link>
		<comments>http://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services#comments</comments>
		<pubDate>Mon, 13 May 2013 15:06:17 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[Play Framework]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3715</guid>
		<description><![CDATA[The move towards Single Page Apps and RESTful services open the doors to a much better way of securing web applications. Traditional web applications use browser cookies to identify a user when a request is made to the server. This approach is fundamentally flawed and causes many applications to be vulnerable to Cross-Site Request Forgery [...]]]></description>
				<content:encoded><![CDATA[<p>The move towards Single Page Apps and RESTful services open the doors to a much better way of securing web applications.  Traditional web applications use browser cookies to identify a user when a request is made to the server.  This approach is fundamentally flawed and causes many applications to be vulnerable to Cross-Site Request Forgery (CSRF) attacks.  When used correctly, RESTful services can avoid this vulnerability altogether.  Before we go into the solution, lets recap the problem.</p>
<p>HTTP is a stateless protocol.  Make a request and get a response.  Make another request and get another response.  There is no correlation (i.e. &#8220;state&#8221;) between these requests.  This poses a problem when you need to identify a user to the system because one request logs the user in and another request needs to tell the server who is making the request.</p>
<p>Web browsers have an automatic way to store some information (i.e. &#8220;state&#8221;) on the user&#8217;s machine and then add that information to every request.  This is called &#8220;cookies&#8221; and they provide a convenient way to create a correlation across HTTP requests.  Most web frameworks have a built-in concept called &#8220;session state&#8221; which uses a unique token for each user.  That token is stored in a cookie and automatically sent to the server on each request.  Now the server knows how to identify a user across requests.</p>
<p>This approach is simple and works great until you realize the dark truth of CSRF.  Usually a user is doing something that tells the browser to make a request to server and because the cookies are sent, everything is good.  But suppose the user gets an email that says &#8220;Check out these funny kittens!&#8221; with a link to a malicious website.  No one can avoid seeing funny kittens, so the user clicks the link.  It turns out that the funny kittens website is a malicious website which now makes some requests to an application that only uses cookies for authentication.  Perhaps the malicious request is to transfer money out of your bank account.  Or perhaps it posts something on a social network.  These requests will be identified AS THE USER because no matter what causes the request, the browser will send the cookies.  This is CSRF and many web apps are vulnerable to it.</p>
<p>The root of the problem is using cookies as the sole method of identifying a user since no matter how the request is initiated, the cookies which include the authentication token are always sent to the server.  One way to protect against this type of attack is to force each request to contain another token which is not automatically sent.  Most web frameworks provide a way to do this but they are error prone because it often requires developers to explicitly enable it and the approach doesn&#8217;t always work well with Single Page Apps.</p>
<h2>The Way Forward</h2>
<p>The easiest way to do authentication without risking CSRF vulnerabilities is to simply avoid using cookies to identify the user.  However each request must still send a token to the server to identify the user.  This requires a token to be somehow &#8220;remembered&#8221; so that each request can manually send it.  Luckily Single Page Apps provide a way to keep a token in memory across requests because the page never reloads.</p>
<p>But what if the page does reload and the authentication token is lost because that in-memory state has been cleared?  Does the user have to log back in to get a new authentication token?  That would not be a very good user experience.  Browsers have a few ways to store data locally across requests.  The easiest is to simply use cookies.  Wait&#8230;  aren&#8217;t cookies the root of the problem?  Cookies themselves are not the cause of CSRF vulnerabilities.  It&#8217;s using the cookies on the server to validate a user that is the cause of CSRF.  Just putting an authentication token into a cookie doesn&#8217;t mean it must be used as the mechanism to identify the user.</p>
<p>When a Single Page App loads it can read the cookies (via JavaScript), grab the authentication token, and then manually send that token on each request through a custom HTTP header.  This is safe because that malicious funny kitten site does not have access to the cookies.  If it did, every website would have a severe security issue.</p>
<p>The flow with this approach may go something like this:</p>
<ol>
<li>The user navigates in their browser to the application</li>
<li>The server returns a basic web page and a JavaScript application</li>
<li>The JavaScript application can&#8217;t find an authentication token in the web site&#8217;s cookies</li>
<li>The JavaScript application displays a login form</li>
<li>The user enters correct login credentials and then submits the form</li>
<li>The server validates the login information and creates an authentication token for the user</li>
<li>The server sets the authentication token in a cookie and returns it to the JavaScript application</li>
<li>The JavaScript application makes a request for some protected data, sending the authentication token in a custom header</li>
<li>The server validates the token and then returns the data</li>
</ol>
<p>At step 3 if the JavaScript application does find an authentication token in a cookie then it can skip ahead to step 8.</p>
<p>At step 9 the server may not be able to validate the token in which case it should return a 401 (Unauthorized) response which the JavaScript application can handle by going to step 4.</p>
<p>There are a variety of ways to implement this approach but the real key is that the server doesn&#8217;t validate a user based on a cookie, it instead validates the user with a customer HTTP header.</p>
<p>This approach can be used over HTTP or HTTPS.  But it is highly recommended that authentication tokens are only passed over encrypted connections which means you should probably only be using this approach over HTTPS connections.  Whenever an application is not being used for local development it should automatically redirect HTTP connections to the corresponding HTTPS connection.  In this setup make sure that the cookie containing the authentication token can&#8217;t be inadvertently transmitted over the HTTP connection by forcing the cookie to only be sent over HTTPS (an option which is typically available in cookie APIs).</p>
<h2>Sample App</h2>
<p>To better explain this approach lets walk through an example application.  You can get the full source for the application from: <a href="http://github.com/jamesward/play-rest-security">http://github.com/jamesward/play-rest-security</a></p>
<p>This application is built using Play Framework, Java, jQuery, and CoffeeScript.</p>
<p>To run the application locally, <a href="http://playframework.com/download">download Play 2.1.1</a>, extract the zip and optionally add the extracted directory to your system&#8217;s path.  Then using a command line, navigate into the <code>play-rest-security</code> directory and run the following (assuming the <code>play</code> command is in your path):</p>
<pre><code>play run</code></pre>
<p>This will start the application which you can connect to in your browser at: <a href="http://localhost:9000/">http://localhost:9000/</a></p>
<p>You should see a login form which you can test out and once logged in, you will see the protected data and can add new data.</p>
<p>There are also a number of <a href="https://github.com/jamesward/play-rest-security/tree/master/test">functional and unit tests</a> for the application which validate the security of the application.  You can run the tests locally by running:</p>
<pre><code>play test</code></pre>
<h3>RESTful JSON Back-End Services</h3>
<p>Starting with <a href="https://github.com/jamesward/play-rest-security/tree/master/app/models/User.java">User.java</a> you will see this is a typical database-backed entity using JPA.  The <code>User</code> class has a property <code>authToken</code> which will store a single authentication token.  In a real-world application you will probably want to allow a user to be logged in from multiple clients (e.g. different browsers).  To enable this you could simply turn this into a list.  You may also want to have some tracking on when authentication tokens are used, what IP address used them, and when they were created.  The tokens could also be encrypted in the database.</p>
<p>The <a href="https://github.com/jamesward/play-rest-security/tree/master/app/models/Todo.java">Todo.java</a> file contains the <code>Todo</code> entity which stores a user&#8217;s Todos.  Access to the <code>Todo</code> objects happen via the <a href="https://github.com/jamesward/play-rest-security/tree/master/app/controllers/TodoController.java">TodoController.java</a> class.  In this case the <code>TodoController</code> only has two methods, <code>getAllTodos()</code> and <code>createTodo()</code>.  These methods are exposed via HTTP through the <a href="https://github.com/jamesward/play-rest-security/tree/master/conf/routes">routes</a> file.  The <code>TodoController</code> has the <code>@With(SecurityController.class)</code> annotation which setups up a request interceptor so that every request made to the controller must go through the <code>call</code> method in the <a href="https://github.com/jamesward/play-rest-security/tree/master/app/controllers/SecurityController.java">SecurityController.java</a> class.</p>
<p>The <code>call</code> method in the <code>SecurityController</code> tries to find an authentication token in a custom HTTP header.  If it finds a token then it tries to find a user with that token.  If found the user is added to the HTTP Context (a place to store data for the duration of the request) and then the original controller method is called.  Otherwise a 401 response is returned.</p>
<p>Both <code>getAllTodos()</code> and <code>createTodo()</code> in the <code>TodoController</code> use the authenticated user that was stored in the HTTP Context to either fetch the user&#8217;s todos or create a new todo.</p>
<p>The <code>SecurityController</code> class also has <code>login</code> and <code>logout</code> request handlers which are mapped to URLs in the <code>routes</code> file.  The <code>login</code> method tries to locate a user by the provided username and password.  If it succeeds then it creates a new authentication token for the user, then creates a cookie containing the token, and returns the token in a JSON response.  The <code>logout</code> method uses the <code>SecurityController</code> interceptor to validate the user and then deletes the cookie that stores the authentication token and set&#8217;s the user&#8217;s <code>authToken</code> to null.</p>
<p>That is the RESTful back-end of the example app.  Now lets explore the front-end.</p>
<h3>CoffeeScript + jQuery Front-End UI</h3>
<p>In the <a href="https://github.com/jamesward/play-rest-security/tree/master/conf/routes">routes</a> file you will see that requests to <code>/</code> are handled by returning <a href="https://github.com/jamesward/play-rest-security/tree/master/public/index.html">public/index.html</a>.  This file doesn&#8217;t do much other than load jQuery and also load the <code>index.min.js</code> file which is compiled and minified by Play&#8217;s asset compiler.  The source for that file is <a href="https://github.com/jamesward/play-rest-security/tree/master/app/assets/javascripts/index.coffee">index.coffee</a> and it provides the whole UI for the application.  This example uses CoffeeScript because it provides a more concise and readable syntax for writing JavaScript applications.</p>
<p>When the page is ready the <code>init</code> function is called and the application attempts to find the authentication token in a cookie.  If it can&#8217;t be found then a login form is displayed.  If the cookie can be found then the <code>displayTodos</code> function is called.  This function tries to fetch the user&#8217;s list of <code>Todo</code> objects and then display them.  The request to fetch the <code>Todo</code> objects is a normal Ajax JSON request except that the user&#8217;s authentication token is sent in a custom HTTP header.  If the server responds with a 401 error then the application calls <code>displayLoginForm</code> otherwise the user&#8217;s <code>Todo</code> objects are displayed.  The <code>createTodo</code> function also sends the authentication token in custom HTTP header and the JSON data for the <code>Todo</code> within an Ajax request.</p>
<p>That is really all there is to the front-end UI.  Most of the code in the CoffeeScript is displaying data and forms in the HTML through jQuery DOM manipulation.  This DOM manipulation could also be done through one of the many client-side templating libraries.</p>
<h2>Further Learning</h2>
<p>The important point to remember is that using cookies for authentication opens up the possibility of CSRF attacks.  Custom HTTP headers provide a more secure method of identifying users than cookies alone do.  The combination of Single Page Apps and REST services provide the perfect opportunity to move away from cookie based authentication.  This simple application illustrates how to implement this approach.</p>
<p>Learn more:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/XSRF">CSRF</a></li>
<li><a href="http://playframework.com">Play Framework</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Intro to Play Framework at Boulder Area Scala Enthusiasts</title>
		<link>http://www.jamesward.com/2013/04/22/intro-to-play-framework-at-boulder-area-scala-enthusiasts?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=intro-to-play-framework-at-boulder-area-scala-enthusiasts</link>
		<comments>http://www.jamesward.com/2013/04/22/intro-to-play-framework-at-boulder-area-scala-enthusiasts#comments</comments>
		<pubDate>Mon, 22 Apr 2013 16:36:41 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[Play Framework]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3709</guid>
		<description><![CDATA[This Wednesday (April 24, 2013) I&#8217;ll be presenting an Intro to Play Framework at the Boulder Area Scala Enthusiasts meetup. Also, Dustin Whitney will be presenting an Intro to Scala. Hopefully see you in Boulder!]]></description>
				<content:encoded><![CDATA[<p>This Wednesday (April 24, 2013) I&#8217;ll be presenting an <a href="http://www.meetup.com/The-Boulder-Area-Scala-Enthusiasts/events/111306962/">Intro to Play Framework at the Boulder Area Scala Enthusiasts</a> meetup.  Also, Dustin Whitney will be presenting an Intro to Scala.</p>
<p>Hopefully see you in Boulder!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/04/22/intro-to-play-framework-at-boulder-area-scala-enthusiasts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presenting Play Framework at Devoxx UK &amp; FR 2013</title>
		<link>http://www.jamesward.com/2013/03/26/presenting-play-framework-at-devoxx-uk-fr-2013?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=presenting-play-framework-at-devoxx-uk-fr-2013</link>
		<comments>http://www.jamesward.com/2013/03/26/presenting-play-framework-at-devoxx-uk-fr-2013#comments</comments>
		<pubDate>Tue, 26 Mar 2013 09:38:39 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[Play Framework]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3700</guid>
		<description><![CDATA[This week I&#8217;m at Devoxx UK and Devoxx FR presenting about Play Framework. Here are the sessions: Tuesday March 26 @ Devoxx UK: Mobile Apps with HTML5 &#038; Play Framework &#8211; With Nicolas Leroux Wednesday March 27 @ Devoxx FR: 6 Minute Apps! Build Your First Modern Web App &#8211; With Nicolas Leroux Thursday March [...]]]></description>
				<content:encoded><![CDATA[<p>This week I&#8217;m at <a href="http://www.devoxx.com/display/UK13/Home">Devoxx UK</a> and <a href="http://www.devoxx.com/display/FR13/Accueil">Devoxx FR</a> presenting about Play Framework.  Here are the sessions:</p>
<ul>
<li>Tuesday March 26 @ Devoxx UK: <a href="http://www.devoxx.com/pages/viewpage.action?pageId=6817656">Mobile Apps with HTML5 &#038; Play Framework</a> &#8211; With <a href="https://twitter.com/nicolasleroux">Nicolas Leroux</a></li>
<li>Wednesday March 27 @ Devoxx FR: <a href="http://www.devoxx.com/display/FR13/6+Minute+Apps%21++Build+Your+First+Modern+Web+App">6 Minute Apps! Build Your First Modern Web App</a> &#8211; With <a href="https://twitter.com/nicolasleroux">Nicolas Leroux</a></li>
<li>Thursday March 28 @ Devoxx FR: <a href="http://www.devoxx.com/display/FR13/Play+Framework+vs.+Grails+Smackdown">Play Framework vs. Grails Smackdown</a> &#8211; With <a href="http://raibledesigns.com/">Matt Raible</a></li>
</ul>
<p>It&#8217;s going to be an awesome week!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/03/26/presenting-play-framework-at-devoxx-uk-fr-2013/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Intro to Play Framework This Week in Toronto, Ottawa, and Montreal</title>
		<link>http://www.jamesward.com/2013/03/19/intro-to-play-framework-this-week-in-toronto-ottawa-and-montreal?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=intro-to-play-framework-this-week-in-toronto-ottawa-and-montreal</link>
		<comments>http://www.jamesward.com/2013/03/19/intro-to-play-framework-this-week-in-toronto-ottawa-and-montreal#comments</comments>
		<pubDate>Tue, 19 Mar 2013 15:07:39 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[Play Framework]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3694</guid>
		<description><![CDATA[This week I&#8217;ll be in Canada presenting an Introduction to Play Framework: Toronto Scala Meetup on Tuesday, March 19 Ottawa Scala Enthusiasts on Wednesday, March 20 Scala Montreal Meetup on Thursday, March 21 I&#8217;m looking forward to meeting our Scala northerly neighbors!]]></description>
				<content:encoded><![CDATA[<p>This week I&#8217;ll be in Canada presenting an Introduction to Play Framework:</p>
<ul>
<li><a href="http://www.meetup.com/Scala/Toronto-CA/893092/">Toronto Scala Meetup on Tuesday, March 19</a></li>
<li><a href="http://www.meetup.com/Ottawa-Scala-Enthusiasts/events/102013922/">Ottawa Scala Enthusiasts on Wednesday, March 20</a></li>
<li><a href="http://scala-montreal-march.eventbrite.ca/">Scala Montreal Meetup on Thursday, March 21</a></li>
</ul>
<p>I&#8217;m looking forward to meeting our Scala northerly neighbors!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/03/19/intro-to-play-framework-this-week-in-toronto-ottawa-and-montreal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Q&amp;A at the Seattle Scala User Group Tonight</title>
		<link>http://www.jamesward.com/2013/03/12/qa-at-the-seattle-scala-user-group-tonight?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=qa-at-the-seattle-scala-user-group-tonight</link>
		<comments>http://www.jamesward.com/2013/03/12/qa-at-the-seattle-scala-user-group-tonight#comments</comments>
		<pubDate>Tue, 12 Mar 2013 16:34:53 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[Akka]]></category>
		<category><![CDATA[Play Framework]]></category>
		<category><![CDATA[Scala]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3689</guid>
		<description><![CDATA[Tonight I will be doing a question and answer session at the Seattle Scala User Group. So bring your Scala, Akka, and Play Framework questions! Hope to see you there.]]></description>
				<content:encoded><![CDATA[<p>Tonight I will be doing <a href="http://www.meetup.com/Seattle-Scala-User-Group/events/99285792/">a question and answer session at the Seattle Scala User Group</a>.  So bring your Scala, Akka, and Play Framework questions!  Hope to see you there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/03/12/qa-at-the-seattle-scala-user-group-tonight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utah JUG: Client/Server Apps with Play Framework, HTML5 and Java</title>
		<link>http://www.jamesward.com/2013/02/21/utah-jug-client-server-apps-with-play-framework-html5-and-java?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=utah-jug-clientserver-apps-with-play-framework-html5-and-java</link>
		<comments>http://www.jamesward.com/2013/02/21/utah-jug-client-server-apps-with-play-framework-html5-and-java#comments</comments>
		<pubDate>Thu, 21 Feb 2013 15:52:26 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Play Framework]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3681</guid>
		<description><![CDATA[Tonight (Feburary 21, 2013) I will be presenting at the Utah JUG about Client/Server Apps with Play Framework, HTML5 and Java. Here is the session description: The web application landscape is rapidly shifting back to a Client/Server architecture. This time around, the Client is JavaScript, HTML, and CSS in the browser. The tools and deployment [...]]]></description>
				<content:encoded><![CDATA[<p>Tonight (Feburary 21, 2013) I will be presenting at the <a href="http://ujug.org/index.php">Utah JUG</a> about <strong>Client/Server Apps with Play Framework, HTML5 and Java</strong>.  Here is the session description:</p>
<blockquote><p>The web application landscape is rapidly shifting back to a Client/Server architecture. This time around, the Client is JavaScript, HTML, and CSS in the browser. The tools and deployment techniques for these types of applications are abundant and fragmented.</p>
<p>This session will teach you how to pull together jQuery, LESS, Twitter, Bootstrap, and some CoffeeScript to build the Client. The Server could be anything that talks HTTP, but this session will use the Play Framework.</p></blockquote>
<p>Hope to see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/02/21/utah-jug-client-server-apps-with-play-framework-html5-and-java/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DevNexus 2013: Architecting Event-Driven Web, Mobile, and RESTful Apps &amp; Introduction to Play Framework</title>
		<link>http://www.jamesward.com/2013/02/18/devnexus-2013-architecting-event-driven-web-mobile-and-restful-apps-introduction-to-play-framework?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=devnexus-2013-architecting-event-driven-web-mobile-and-restful-apps-introduction-to-play-framework</link>
		<comments>http://www.jamesward.com/2013/02/18/devnexus-2013-architecting-event-driven-web-mobile-and-restful-apps-introduction-to-play-framework#comments</comments>
		<pubDate>Mon, 18 Feb 2013 14:07:08 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Play Framework]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3673</guid>
		<description><![CDATA[At DevNexus 2013 I will be giving two talks: Architecting Event-Driven Web, Mobile, and RESTful Apps Non-blocking, asynchronous, and reactive are all the rage today. This session will explore why the patterns are important in modern apps and how to apply them to event-driven web, mobile, and RESTful apps. To illustrate the concepts, Java, Scala, [...]]]></description>
				<content:encoded><![CDATA[<p>At <a href="http://www.devnexus.com/">DevNexus 2013</a> I will be giving two talks:</p>
<p>
<strong>Architecting Event-Driven Web, Mobile, and RESTful Apps</strong></p>
<blockquote><p>Non-blocking, asynchronous, and reactive are all the rage today. This session will explore why the patterns are important in modern apps and how to apply them to event-driven web, mobile, and RESTful apps. To illustrate the concepts, Java, Scala, Akka, and Play Framework will be used as examples.</p></blockquote>
<p>
<strong>Introduction to Play Framework</strong></p>
<blockquote><p>The Play Framework is a lightweight, stateless web framework for Java and Scala applications. With Play you can build traditional page-based web apps or modern web apps using REST, JavaScript, and HTML5. This session will give you an introduction to building web applications with the Play Framework.</p></blockquote>
<p>Hope to see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/02/18/devnexus-2013-architecting-event-driven-web-mobile-and-restful-apps-introduction-to-play-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DeveloperWeek 2013: Modern Web Apps With Scala and Play</title>
		<link>http://www.jamesward.com/2013/02/04/developerweek-2013-modern-web-apps-with-scala-and-play?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=developerweek-2013-modern-web-apps-with-scala-and-play</link>
		<comments>http://www.jamesward.com/2013/02/04/developerweek-2013-modern-web-apps-with-scala-and-play#comments</comments>
		<pubDate>Mon, 04 Feb 2013 19:03:22 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[Play Framework]]></category>
		<category><![CDATA[Scala]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3669</guid>
		<description><![CDATA[Tomorrow (February 5, 2013) I will be presenting about Modern Web Apps With Scala and Play at DeveloperWeek in San Francisco. Here is the session description: The web application architecture is rapidly evolving to accommodate mobile, more interactive experiences, integrated real-time, and service composition. This session will teach you how to build modern web applications [...]]]></description>
				<content:encoded><![CDATA[<p>Tomorrow (February 5, 2013) I will be presenting about <a href="http://www.developerweek.com/index/conferenceschedule/event/3">Modern Web Apps With Scala and Play</a> at DeveloperWeek in San Francisco.  Here is the session description:</p>
<blockquote><p>The web application architecture is rapidly evolving to accommodate mobile, more interactive experiences, integrated real-time, and service composition. This session will teach you how to build modern web applications using Play Framework and Scala. You will learn the end-to-end architecture including: non-blocking service composition, RESTful JSON endpoints, single page UIs, and real-time push.</p></blockquote>
<p>Hope to see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/02/04/developerweek-2013-modern-web-apps-with-scala-and-play/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Video: Create and Run Play Framework Apps in IntelliJ</title>
		<link>http://www.jamesward.com/2013/01/23/video-create-and-run-play-framework-apps-in-intellij?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=video-create-and-run-play-framework-apps-in-intellij</link>
		<comments>http://www.jamesward.com/2013/01/23/video-create-and-run-play-framework-apps-in-intellij#comments</comments>
		<pubDate>Wed, 23 Jan 2013 17:10:35 +0000</pubDate>
		<dc:creator>James Ward</dc:creator>
				<category><![CDATA[IntelliJ]]></category>
		<category><![CDATA[Play Framework]]></category>

		<guid isPermaLink="false">http://www.jamesward.com/?p=3656</guid>
		<description><![CDATA[The Play Framework community voted heavily to add support for Play Framework 2 in IntelliJ IDEA and JetBrains came through! Here is a short (3min) screencast that shows you how to create and run a Play 2 app in IntelliJ 12 (Ultimate Edition) with the Play Framework plugin: If you&#8217;d like to learn more, check [...]]]></description>
				<content:encoded><![CDATA[<p>The Play Framework community <a href="http://youtrack.jetbrains.com/issue/SCL-4600">voted heavily</a> to add support for Play Framework 2 in IntelliJ IDEA and <a href="http://plugins.intellij.net/plugin/index?pr=&#038;pluginId=7080">JetBrains came through</a>!  Here is a short (3min) screencast that shows you how to create and run a Play 2 app in IntelliJ 12 (Ultimate Edition) with the Play Framework plugin:<br />
<iframe width="640" height="360" src="http://www.youtube.com/embed/Tqe8lfF_P7I?rel=0" frameborder="0" allowfullscreen></iframe><br />
If you&#8217;d like to learn more, check out the <a href="http://confluence.jetbrains.com/display/IntelliJIDEA/Play+Framework+2.0">detailed tutorial from JetBrains</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jamesward.com/2013/01/23/video-create-and-run-play-framework-apps-in-intellij/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
