<?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>Miško Hevery</title>
	<atom:link href="http://misko.hevery.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://misko.hevery.com</link>
	<description>Testability Explorer</description>
	<lastBuildDate>Wed, 06 Jan 2010 18:18:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Growing Object-Oriented Software, Guided by Tests</title>
		<link>http://misko.hevery.com/2010/01/06/growing-object-oriented-software-guided-by-tests/</link>
		<comments>http://misko.hevery.com/2010/01/06/growing-object-oriented-software-guided-by-tests/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 18:18:09 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=611</guid>
		<description><![CDATA[Recently I have came across an excellent book on how to develop code with testing in mind, and I wanted to share it with you. The book is called Growing Object-Oriented Software, Guided by Tests and is written by Steve Freeman and Nat Pryce.
The book starts right at the beggining as to why we want [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I have came across an excellent book on how to develop code with testing in mind, and I wanted to share it with you. The book is called <a href="http://www.amazon.com/gp/product/0321503627?ie=UTF8&amp;tag=testabexplor-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321503627">Growing Object-Oriented Software, Guided by Tests</a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=testabexplor-20&amp;l=as2&amp;o=1&amp;a=0321503627" border="0" alt="" width="1" height="1" /> and is written by Steve Freeman and Nat Pryce.</p>
<p>The book starts right at the beggining as to why we want to develop test first and covers advanced topics such as testing persistance, threads, and asynchronous code. I particulary like the style with which the book delivers the message. They start by building a simple application and add new requirements to it, morphing the codebase in the process. As they do so they introduce new classes and walk the reader through the thought process considering alternatives finally choosing a solution. This gives the reader a good understanding as to what to think about when looking at code. Of course all of these changes are driven by tests, and a lot of discussion is spent on explaining why a test was written in a particular way and how to refactor it as it grows with the applications, so that tests do not become a liability.</p>
<p>Reading the book I sometimes felt that I was listening to myself, especially when the authors warned about global state, singletons, overusing mocks, and doing work in constructors among other things. But unlike myself, who draws sharp lines between right and wrong, the authors did a good job of presenting things on the gray scale of benefits and drawbacks. The book shows what a typical code most people will write, and then show how tests point a way towards refactoring.</p>
<p>If you are newbie, or an intermediate to developing with tests than this book is a must for your library!</p>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2010/01/06/growing-object-oriented-software-guided-by-tests/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>There are lots of ways to tests your JavaScript, but there is only one JsTestDriver</title>
		<link>http://misko.hevery.com/2009/12/04/there-are-lots-of-ways-to-tests-your-javascript-but-there-is-only-one-jstestdriver/</link>
		<comments>http://misko.hevery.com/2009/12/04/there-are-lots-of-ways-to-tests-your-javascript-but-there-is-only-one-jstestdriver/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 14:56:54 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=607</guid>
		<description><![CDATA[Difference between JsTestDriver and other testing solution is the difference between flying economy and flying First Class. If you are serious about testing and TDD, than JsTestDriver is for you.
It is not another Assertion Framework
JsTestDriver as the name suggest, is not another assertion framework, but rather test runner. It can easily integrate with other assertion [...]]]></description>
			<content:encoded><![CDATA[<p>Difference between JsTestDriver and other testing solution is the difference between flying economy and flying First Class. If you are serious about testing and TDD, than JsTestDriver is for you.</p>
<p><strong>It is not another Assertion Framework</strong><br />
JsTestDriver as the name suggest, is not another assertion framework, but rather test runner. It can easily integrate with other assertion frameworks out there. There are already adapters for <a href="http://code.google.com/p/js-test-driver/wiki/XUnitCompatibility">QUnit, and Yahoo Testing Frameworks, as well as Ruby autotest runner</a>. We will help you integrate your favorite test runner.</p>
<p><strong>Speed</strong><br />
JsTestDriver is blink of an eye fast. <a href="http://www.getangular.com">&lt;angular/&gt;</a> is no small JavaScript project and it has about 300 unit tests and 10K lines of JavaScript. With JsTestDriver I can execute all of the tests on all major browser in under 400ms. That means that I run all of my tests on every save, giving me instantaneous feedback.</p>
<p><strong>IDE Integration</strong><br />
It is nice to be able to run your unit tests in a browser but it is better to be able to run them from the the IDE. We have integration with <a href="http://code.google.com/p/js-test-driver/wiki/UsingTheEclipsePlugin">Eclipse</a> and InteliJ with instant run on every change. We even marshal the browser console into the IDE console for easier debugging.</p>
<p><strong>Continuos Build Integration</strong><br />
If you are serious about testing, than you are serious about <a href="http://code.google.com/p/js-test-driver/wiki/ContinuousBuild">continuous integration</a>. Because JsTestDriver can be controlled from the command line, it can easily integrate into your continuous build. Single command starts the browsers, runs the tests, and reports the test results in a XML file which is compatible with most continuos integration servers such as Hudson.</p>
<p><strong>Code Coverage Built In</strong><br />
JsTestDriver allows JavaScript instrumentation on the fly, which means that it can instrument your code for <a href="http://code.google.com/p/js-test-driver/wiki/CodeCoverage">coverage and generate LCOV</a> format, which can be easily converted into source annotated report of your code. This is done transparently and works on all browsers.</p>
<p><strong>Remote Test Execution</strong><br />
I develop on Mac, but need to test on IE. I run JsTestDriver on my build machine which can be accessed by HTTP and have IE always captured. No matter where I am in the world, I can run my tests against IE. This allows me to have a small browser farm ready to do my bidding.</p>
<p><strong>Support form Mobile Browsers</strong><br />
Just as I can capture desktop browsers, I can also capture mobile browsers. This allows me to develop in my favorite IDE and have my tests run on every save on the mobile platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2009/12/04/there-are-lots-of-ways-to-tests-your-javascript-but-there-is-only-one-jstestdriver/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>DZone Interview &#8211; Benefits of Testable Code</title>
		<link>http://misko.hevery.com/2009/11/18/dzone-interview-benefits-of-testable-code/</link>
		<comments>http://misko.hevery.com/2009/11/18/dzone-interview-benefits-of-testable-code/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 10:20:48 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=604</guid>
		<description><![CDATA[http://java.dzone.com/articles/benefits-testable-code
]]></description>
			<content:encoded><![CDATA[<p><a href="http://java.dzone.com/articles/benefits-testable-code">http://java.dzone.com/articles/benefits-testable-code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2009/11/18/dzone-interview-benefits-of-testable-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to get Started with TDD</title>
		<link>http://misko.hevery.com/2009/11/17/how-to-get-started-with-tdd/</link>
		<comments>http://misko.hevery.com/2009/11/17/how-to-get-started-with-tdd/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 09:50:12 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=599</guid>
		<description><![CDATA[Best way to learn TDD is to have someone show you while pairing with you. Short of that, I have set up an eclipse project for you where you can give it a try:

hg clone https://bitbucket.org/misko/misko-hevery-blog/
Open project blog/tdd/01_Calculator in Eclipse.
It should be set up to run all tests every time you modify a file.

You may [...]]]></description>
			<content:encoded><![CDATA[<p>Best way to learn TDD is to have someone show you while pairing with you. Short of that, I have set up an eclipse project for you where you can give it a try:</p>
<ol>
<li><span style="font-family: monospace; white-space: pre;">hg clone <a href="https://bitbucket.org/misko/misko-hevery-blog/">https://bitbucket.org/misko/misko-hevery-blog/</a></span></li>
<li>Open project <span style="font-family: monospace, 'Times New Roman', 'Bitstream Charter', Times, serif;"><span style="white-space: pre;">blog/tdd/01_Calculator</span></span> in Eclipse.</li>
<li>It should be set up to run all tests every time you modify a file.
<ul>
<li>You may have to change the path to java if you are not an Mac OS.</li>
<li>Project -&gt; Properties -&gt; Builders -&gt; Test -&gt; Edit</li>
<li>Change location to your java</li>
</ul>
</li>
<li>Right-click on Calculator.java -&gt; Run As -&gt; Java Application to run the calculator</li>
</ol>
<p>Your mission is to make the calculator work using TDD. This is the simplest form of TDD where you don&#8217;t have to mock classes or create complex interactions, so it should be a good start for beginners.</p>
<p>TDD means:</p>
<ol>
<li>write a simple test, and assert something interesting in it</li>
<li> implement just enough to make that tests green (nothing more, or you will get ahead of your tests)</li>
<li>then write another test, rinse, and repeat.</li>
</ol>
<p>I have already done all of the work of separating the behavior from the UI, so that the code is testable and properly Dependency Injected, so you don&#8217;t have to worry about running into testability issues.</p>
<ul>
<li>Calculator.java: This is the main method and it is where all of the wiring is happening.</li>
<li>CalculatorView.java: This is a view and we don&#8217;t usually bother unit testing it has cyclomatic complexity of one, hence there is no logic. It either works or does not. Views are usually good candidates for end-to-end testing, which is not part of this exercise.</li>
<li>CalculatorModel.java: is just a PoJo which marshals data from the Controller to the View, not much to test here.</li>
<li>CalculatorController.java: is where all of your if statements will reside, and we need good tests for it.</li>
</ul>
<p>I have started you off with first &#8216;testItShouldInitializeToZero&#8217; test. Here are some ideas for next tests you may want to write.</p>
<ul>
<li>testItShouldConcatinateNumberPresses</li>
<li>testItShouldSupportDecimalPoint</li>
<li>testItShouldIgnoreSecondDecimalPoint</li>
<li>testItShouldAddTwoIntegers</li>
</ul>
<p>I would love to see what you will come up with and what your thoughts are, after you get the whole calculator working. I would also encourage you to post interesting corner case tests here for others to incorporate. If you want to share your code with others, I would be happy to post your solutions.</p>
<p>Good luck!</p>
<p>PS: I know it is trivial example, but you need to start someplace.</p>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2009/11/17/how-to-get-started-with-tdd/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>GTAC 2009 &#8211; JsTestDriver</title>
		<link>http://misko.hevery.com/2009/11/06/gtac-2009-jstestdriver/</link>
		<comments>http://misko.hevery.com/2009/11/06/gtac-2009-jstestdriver/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 16:58:02 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=595</guid>
		<description><![CDATA[Google Tech Talk
October 22, 2009
ABSTRACT
Presented by Jeremie Lenfant -Engelmann, Google, at the 4th Annual Google Test Automation Conference, October 21st, 22nd, 2009, Zurich, CH
The proliferation of JavaScript unit-testing frameworks in the JavaScript community shows that no one has yet found the magical combination of features to make JavaScript testing a no-brainer. We like to believe [...]]]></description>
			<content:encoded><![CDATA[<p><span style="outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 12px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; padding: 0px; margin: 0px; border: 0px initial initial;">Google Tech Talk<br />
October 22, 2009</p>
<p>ABSTRACT</p>
<p>Presented by Jeremie Lenfant -Engelmann, Google, at the 4th Annual Google Test Automation Conference, October 21st, 22nd, 2009, Zurich, CH</p>
<p>The proliferation of JavaScript unit-testing frameworks in the JavaScript community shows that no one has yet found the magical combination of features to make JavaScript testing a no-brainer. We like to believe that JsTestDriver will change that by redefining JavaScript testing frameworks and as a result will deliver something which at first glance seems impossible. As a developer of JavaScript I want to write my production and test code in my favorite IDE. When I make a code change, I want a save action to trigger a rerun off all of my tests on all browsers and platforms and report the results under 1 second. All of this without ever leaving my favorite IDE. JsTestDriver achieves all of the above by capturing any number of browser slaves from multiple platforms. In order to run at high speed we do not render our results in the browser but report the errors on the command line. JsTestDriver also loads and parses JavaScript files eagerly, only reloading files that have changed. JsTestDriver can execute hundreds of tests per browser and execute them on all of the captured browsers in parallel. Thanks to these practices we achieve extremely high throughput. We want to be a test-runner platform and allow others to build assertion frameworks on top of JsTestDriver. This way the open-source community can focus on building a better way of testing and not worry about how to run the tests across all of the browsers, platforms and in a continuous build environment.<br />
<a style="outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 12px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: #0033cc; text-decoration: none; background-position: initial initial; padding: 0px; margin: 0px; border: 0px initial initial;" title="http://code.google.com/p/js-test-driver" dir="ltr" rel="nofollow" href="http://code.google.com/p/js-test-driver" target="_blank">http://code.google.com/p/js-test-driver</a></p>
<p>Bio: Jeremie Lenfant-Engelmann works for Google and is the lead developer of JsTestDriver.</span></p>
<p><span style="outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 12px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; padding: 0px; margin: 0px; border: 0px initial initial;">Video: <a href="http://www.youtube.com/watch?v=aDKGGZv-T4M">http://www.youtube.com/watch?v=aDKGGZv-T4M</a></span></p>
<p><span style="outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 12px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; background-position: initial initial; padding: 0px; margin: 0px; border: 0px initial initial;"><br />
</span></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/aDKGGZv-T4M&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/aDKGGZv-T4M&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2009/11/06/gtac-2009-jstestdriver/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How To Write Hard To Test Code &amp; What To Look For When Reviewing Other Peoples Hard To Test Code</title>
		<link>http://misko.hevery.com/2009/10/28/how-to-write-hard-to-test-code-what-to-look-for-when-reviewing-other-peoples-hard-to-test-code/</link>
		<comments>http://misko.hevery.com/2009/10/28/how-to-write-hard-to-test-code-what-to-look-for-when-reviewing-other-peoples-hard-to-test-code/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 18:49:26 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=582</guid>
		<description><![CDATA[Here are my slides which Cory Smith and I have presented this morning at OOPSLA 2009.
The ability to write hard to test code is innate in every developer form the moment we have built our first &#8220;Hello World&#8221; application. It is so automatic that we do not even know when we are doing it. On [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;">Here are my slides which Cory Smith and I have presented this morning at <a href="http://www.oopsla.org/oopsla2009/program/tutorials/141-how-to-write-hard-to-test-code-what-to-look-for-when-reviewing-other-peoples-hard-to-test-code">OOPSLA 2009</a>.</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;">The ability to write hard to test code is innate in every developer form the moment we have built our first &#8220;Hello World&#8221; application. It is so automatic that we do not even know when we are doing it. On the other hand writing testable code requires that you un-learn this behavior. In this tutorial you will learn how to recognize the red flags in the code and what are the common solutions for them. We will look at sample code representing common development practices and look into subtleties why this code is hard to test and how to fix it. The goal of the tutorial is to arm you with knowledge of how to write code which can be tested using small focused tests.</p>
<p>Slides: <a href="https://docs.google.com/fileview?id=0B7z6S2TvsDWSYWQ1NGEwOTctYTEwOS00ZTUwLWE2Y2QtZjEwMmE2OTQzNjVh&amp;hl=en">view slides in PDF format here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2009/10/28/how-to-write-hard-to-test-code-what-to-look-for-when-reviewing-other-peoples-hard-to-test-code/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Automatic Dependency Injection In The Land Of Dynamic Languages</title>
		<link>http://misko.hevery.com/2009/10/25/automatic-dependency-injection-in-the-land-of-dynamic-languages/</link>
		<comments>http://misko.hevery.com/2009/10/25/automatic-dependency-injection-in-the-land-of-dynamic-languages/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 18:51:28 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=585</guid>
		<description><![CDATA[Automatic Dependency Injection Frameworks (such as GUICE, PicoContainer, and Spring) are very popular in Java, where they depend heavily on static typing, interfaces, reflection and annotations. But what about languages such as ActionScript, JavaScript, Python and Ruby, where duck-typing and lack of run-time-type-information at first glance make these frameworks impossible? Can a simple Dependency Injection [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;">Automatic Dependency Injection Frameworks (such as GUICE, PicoContainer, and Spring) are very popular in Java, where they depend heavily on static typing, interfaces, reflection and annotations. But what about languages such as ActionScript, JavaScript, Python and Ruby, where duck-typing and lack of run-time-type-information at first glance make these frameworks impossible? Can a simple Dependency Injection Framework framework be built? We&#8217;ll look at how the power of functional programing and functions as first class citizens in these languages can be leveraged to build a simple and effective dependency injection framework. We&#8217;ll also explore the power of using such a framework in dynamic languages. To illustrate these ideas we will convert a JavaScript application which uses manual Dependency Injection into one using Automatic Dependency Injection Framework.</p>
<p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;">The framework implementation can be found here: <a href="http://bitbucket.org/misko/misko-hevery-oopsla-09/overview/">http://bitbucket.org/misko/misko-hevery-oopsla-09/overview/</a></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;">The paper can be found here: <a href="http://misko.hevery.com/wp-content/uploads/2009/10/tut0000021-hevery.pdf">http://misko.hevery.com/wp-content/uploads/2009/10/tut0000021-hevery.pdf</a></p>
<p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;">To get the injection code make sure to switch branches to &#8220;inject&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2009/10/25/automatic-dependency-injection-in-the-land-of-dynamic-languages/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Lowering the price of Web-Apps</title>
		<link>http://misko.hevery.com/2009/10/18/lowering-the-price-of-web-apps/</link>
		<comments>http://misko.hevery.com/2009/10/18/lowering-the-price-of-web-apps/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 04:33:03 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=579</guid>
		<description><![CDATA[The old saying goes: Ideas are a dime a dozen, it&#8217;s the execution that counts.
So you are working on a project and all of a sudden you realize that it would be great to have a web-application which keeps track of something. It is exactly what would hit the spot, but than you think about [...]]]></description>
			<content:encoded><![CDATA[<p>The old saying goes: Ideas are a dime a dozen, it&#8217;s the execution that counts.</p>
<p>So you are working on a project and all of a sudden you realize that it would be great to have a web-application which keeps track of something. It is exactly what would hit the spot, but than you think about it some more and you realize that your choices are</p>
<ul>
<li>Custom app in php/java/ruby/rails/etc&#8230; would take you days to get up and running and than there is the cost of deployment. You have full control of everything but you have to be an expert in everything.</li>
<li>You could use Google docs (spreadsheet) but that does not have the right look and feel, as you can either have form for collecting data or you can have tabular data. You have zero control of the presentation.</li>
</ul>
<p>So you think about it some more and you realize that the benefits are not worth the effort and the application does not get build. How often has this happen to you?</p>
<p>&lt;angular/&gt; is not about making the building of web-applications easier, it is about allowing you to build an application where no application would have been build before.</p>
<p>Let me give you an example. I do a lot of coding and often I get distracted. So I said, I would love to know the reasons why I get distracted. Would it not be great if I could keep a log, which would than draw a chart for me with how often and why I get distracted? I could have opened a spreadsheet, but somehow the act of opening a spreadsheet is a distraction in itself, so I doubt I would have done it every time I got distracted. So instead I took <a href="http://www.getangular.com/screencast">5 minutes to hack together a quick HTML</a> which allowed me to enter the reason why I was distracted in &lt;angular/&gt;. Now I am a mac user, so I click the &#8220;Open in Dashboard&#8221; on my safari and I had a dashboard widget which allows me to keep track of the reasons whenever I get distracted, with very little effort. I stop coding because I need to go to meeting, I activate Dashboard and enter the reason, someone comes over and asks me a question, ditto.</p>
<p>&lt;angular/&gt; allowed me to go from an idea to working app in 5 minutes. If it was not for &lt;angular/&gt; this simple app would simply not get built. It is great when technology makes existing things easier, it is even better when it enables things which simply would not have happened.</p>
<p>Wait! I have an idea, it would be great to get your opinion on what kind of quick and dirty applications you always wanted to build but the effort was not worth the benefit. What if, we could also vote on other peoples ideas too.</p>
<p>Well here it is:</p>
<hr/>
<div ng-entity="idea=Idea:{yes:0, no:0}" ng-init="ideas=Idea.all()" ng-hide="true" style="color:red">If you can see this than you need to go to <a href="http://blog.getangular.com/2009/10/18/lowering-the-price-of-web-apps">http://blog.getangular.com/2009/10/18/lowering-the-price-of-web-apps</a> to get the full effect. </div>
<p><strong>Your Idea:</strong><br />
<textarea name="idea.description"></textarea></p>
<input type="button" value="Submit" ng-action="$save()"/>
<ul>
<li ng-repeat="idea in ideas">
    Votes: <a href="" ng-action="idea.yes = idea.yes +1; idea.$save()">like it</a>:{{idea.yes}};  <a href="" ng-action="idea.no = idea.no + 1; idea.$save()">hate it</a>:{{idea.no}} | {{idea.$audit.created.by}} | {{idea.description}}
  </li>
</ul>
<hr/>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2009/10/18/lowering-the-price-of-web-apps/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Design for Testability Talk</title>
		<link>http://misko.hevery.com/2009/10/07/design-for-testability-talk/</link>
		<comments>http://misko.hevery.com/2009/10/07/design-for-testability-talk/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 00:18:14 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=575</guid>
		<description><![CDATA[Here is may latest presentation on design for testability&#8230;
Slides: Design For Testablity

]]></description>
			<content:encoded><![CDATA[<p>Here is may latest presentation on design for testability&#8230;</p>
<p>Slides: <a href='http://misko.hevery.com/wp-content/uploads/2009/10/Design-For-Testablity.pdf'>Design For Testablity</a></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/acjvKJiOvXw&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/acjvKJiOvXw&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2009/10/07/design-for-testability-talk/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Sweet Spot for &lt;angular/&gt;</title>
		<link>http://misko.hevery.com/2009/10/04/sweet-spot-for-angular/</link>
		<comments>http://misko.hevery.com/2009/10/04/sweet-spot-for-angular/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 04:03:26 +0000</pubDate>
		<dc:creator>misko</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://misko.hevery.com/?p=572</guid>
		<description><![CDATA[Building web-applications is hard! Even the simplest hello world application will take you hours to set up and you have to know a lot about how many different pieces of technologies work together. Here is a quick inventory from the browser to the back end of what a typical web-application developer needs to know about: [...]]]></description>
			<content:encoded><![CDATA[<p><span style="background-color: #ffffff;">Building web-applications is hard! Even the simplest hello world application will take you hours to set up and you have to know a lot about how many different pieces of technologies work together. Here is a quick inventory from the browser to the back end of what a typical web-application developer needs to know about: HTML, CSS, JavaScript, cookies, HTTP, URL encodings, Servlets, web-framework (i.e. web-work), authentication, threading, SQL, ObjectRelational mappers, DB Schema, RDMS, DB indexing. If you know all of that, than you have a good chance that after week of work, you can have a hello world application written which will allow the user to authenticate, and persist some data.</span></p>
<p>But, if you think about it most web-applications are just pretty UI on top of database CRUD (create, read, update, delete). Everything else you do is a constant marshaling of data back and forth. From the HTML input, to URL parameters, to HttpRequest, to BussinessObject, to Value Object, to SQL. Hope you did not make any mistakes, as now you have to do all of this in reverse.</p>
<p>The goal of <a href="http://www.getangular.com">&lt;angular/&gt;</a> is to make CRUD applications easy to build.  &lt;angular/&gt; is not a generic framework where you can build any kind of application, its sweet spot are CRUD web-applications.</p>
<p>We believe that there are many web-application which do not get build because the cost of building them is prohibitive. With  &lt;angular/&gt; the cost of building these simple applications is greatly reduced.</p>
<p>While building &lt;angular/&gt;  we had few goals in mind:</p>
<p><strong>Managed Database</strong></p>
<p>Building a web-applications is just half the battle, deploying them is another. Now you need to rent a host in the data-center where you can deploy the application, where the database can run. I hope you know how to administer and back up your database. &lt;angular/&gt;  provides the database hosting as a service so that your &lt;angular/&gt; application does not have to worry about it.</p>
<p><strong>HTML &amp; CSS</strong></p>
<p>There are a lot more web-designers out there than web-developers. We wanted to make &lt;angular/&gt; simple enough where many of the web-designers, which do not know how to program can now move to the business of building simple web-applications and hence provide a greater value to their customers. In order to build a simple web-application a knowledge of HTML &amp; CSS is all which you need to know. The best way to think about &lt;angular/&gt; is that it is HTML with few extra attributes.</p>
<p><strong>Security/Authentication</strong></p>
<p>The cost of building security and authentication into your web-application is often overlooked when building web-applications. &lt;angular/&gt; offers both out of the box.</p>
<p><strong>Embeddable</strong></p>
<p>There are many ways to get your HTML published. (Blogs, Wikis, Content Management systems, to name a few) &lt;angular/&gt; allows you to enhance all of these pages behavior by adding the power of CRUD to these pages. Embeddability opens up a whole new set of possibilities of enhancing existing web-pages or creating mash ups.</p>
<p><strong>Declarative</strong></p>
<p>I can teach HTML to almost anyone (willing to learn) in just a few minutes. Teaching programming languages such as JavaScript requires weeks of work, and that is if you already know how to program. The difference is that HTML is declarative whereas JavaScript is procedural. You describe how the page looks like, vs instructing the browser how to draw one. This is a huge for the learning curve. Declarative vs procedural is the difference between web-designer and the web-developer.</p>
<p><strong>Rich Widgets</strong></p>
<p>Finally, HTML forms have very limited widgets, you want date-picker?  charts? maps? form validation? barcodes? formatters? well you have to go and integrate some JavaScript library and you have to know how to program (vs declaring what you want). We want to extend the HTML so that you can ask for these widgets in declarative fashion in &lt;angular/&gt;.</p>
<p><a href="http://www.getangular.com">http://www.getangular.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://misko.hevery.com/2009/10/04/sweet-spot-for-angular/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
