<?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>NewtonsIT - Cutting edge cloud software developers</title>
	<atom:link href="http://www.newtonsit.com.au/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.newtonsit.com.au</link>
	<description></description>
	<lastBuildDate>Mon, 30 Nov 2015 22:28:50 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.4</generator>
	<item>
		<title>Tom&#8217;s Fifteen Minute Ruby on Rails</title>
		<link>http://www.newtonsit.com.au/information/toms-fifteen-minute-ruby-on-rails/</link>
		<comments>http://www.newtonsit.com.au/information/toms-fifteen-minute-ruby-on-rails/#comments</comments>
		<pubDate>Fri, 27 Nov 2015 00:59:45 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web framework]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1714</guid>
		<description><![CDATA[<p>Most of the information that I&#8217;m presenting here is just from the simple introductory Ruby on Rails tutorial.  I&#8217;d encourage you to follow that official introduction should your interest be piqued, this is only an introduction from a developer who is still learning about the framework (i.e. there are likely to be inaccuracies peppered throughout). RVM The first [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/information/toms-fifteen-minute-ruby-on-rails/">Tom&#8217;s Fifteen Minute Ruby on Rails</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div id="attachment_1715" style="width: 446px" class="wp-caption aligncenter"><a href="http://www.newtonsit.com.au/wp-content/uploads/2014/10/rubyrails.png"><img class=" wp-image-1715" src="http://www.newtonsit.com.au/wp-content/uploads/2014/10/rubyrails-300x150.png" alt="Source: tech.co" width="436" height="218" /></a><p class="wp-caption-text">Source: tech.co</p></div>
<p class="p1"><span class="s1">Most of the information that I&#8217;m presenting here is just from the </span><span class="s1">simple <a href="http://guides.rubyonrails.org/getting_started.html">introductory Ruby on Rails</a> </span><span class="s2">tutorial</span><span class="s1">.<span class="Apple-converted-space">  </span>I&#8217;d encourage you to </span><span class="s1">follow that official introduction should your interest be piqued, this is only an introduction from a developer who is <em>still learning</em> about the framework (i.e. there are likely to be inaccuracies peppered throughout).</span></p>
<h2 class="p1">RVM</h2>
<p class="p1"><span class="s1">The first thing we want to do is install the <a href="http://rvm.io">Ruby EnVironment Manager</a> </span><span class="s1">(RVM)</span><span class="s1">.<span class="Apple-converted-space">  </span>The RVM is just a bash script that wraps around </span><span class="s1">some </span><span class="s3"><var>curl</var></span><span class="s1"> and </span><var>git </var><span class="s1">commands.<span class="Apple-converted-space">  </span>This allows us to have independent </span><span class="s1">ruby binaries for distinct applications (you might have one per </span><span class="s1">project), and the binaries may have their own associated gemset (Ruby </span><span class="s1">libraries).<span class="Apple-converted-space">  </span>There is a similar utility in Python called <var>virtualenv </var></span><span class="s1">(though I have to say the </span><span class="s3"><var>virtualenv</var></span><span class="s1"> seems to be superior).</span></p>
<p class="p1"><span class="s1">We use the RVM to install a Ruby binary (we can give it a name to </span><span class="s1">identify it with some function) </span></p>
<p class="p1"><span class="s1"><var>rvm install ruby-newtonsit</var></span></p>
<p class="p3"><span class="s1"><var>rvm use ruby-newtonsit</var></span></p>
<p class="p1"><span class="s1">There are various implementations of the Ruby language; when we </span><span class="s1">perform an installation as detailed above we are installing Ruby MRI </span><span class="s1">(Matz&#8217;s Ruby Interpreter, named after the creator of Ruby Yukihiro </span><span class="s1">Matsumoto); this is the mainstream C implementation of Ruby.<span class="Apple-converted-space">  </span>Another </span><span class="s1">implementation that I have experimented with is JRuby (written in </span><span class="s1">Java).<span class="Apple-converted-space">  </span>We can run our Ruby on Rails instance using JRuby, which some </span><span class="s1">say has better performance under certain instances (the reasons get </span><span class="s1">into threading and the like; I&#8217;ve not really fully investigated it).  </span><span class="s1">JRuby also lets us use the &#8216;java&#8217; module, which more or less allows us </span><span class="s1">to access and use Java (including any Java classes we might define) </span><span class="s1">inside of Ruby.<span class="Apple-converted-space">  </span>It&#8217;s quite incredible!</span></p>
<p class="p1"><span class="s1">I&#8217;m touching on this mostly because it is interesting, but I would </span><span class="s1">also mention that when we install the &#8220;rails&#8221; gem using JRuby and then </span><span class="s1">create a Rails project, Rails takes account automatically of the </span><span class="s1">slightly different dependencies of JRuby (as compared to MRI Ruby).</span></p>
<h2 class="p1"><span class="s1">Creating a Project</span></h2>
<p class="p2"><span class="s1">We can now proceed to create a Rails project. There are all kinds of </span><span class="s1">command line flags available (most of which I haven&#8217;t explored), but </span><span class="s1">in the simplest instance we enter a command like so:</span></p>
<p class="p4"><span class="s1"><var>rails new newtonsit</var></span></p>
<p class="p2"><span class="s1">This creates a project directory populated by the standard Rails </span><span class="s1">folder structure and files, and installs required dependencies.<span class="Apple-converted-space">  </span>Here </span><span class="s1">we observe one of the core characteristics of Rails.<span class="Apple-converted-space">  </span>The Rails </span><span class="s1">documentation notes that Rails is &#8220;opinionated&#8221; when it comes to web </span><span class="s1">development.<span class="Apple-converted-space">  </span>What this means is that Rails sets up what its </span><span class="s1">developers feel to be the optimal environment for web development. </span><span class="s1">The folder structure, the location of files, everything is tailored </span><span class="s1">specifically by Rails&#8217; developers to follow what they have agreed to </span><span class="s1">be ideal.<span class="Apple-converted-space">  </span>Therefore we more or less stick with it.<span class="Apple-converted-space">  </span>This is a </span><span class="s1">feature of Rails.<span class="Apple-converted-space">  </span>Apparently it </span><em><span class="s2">is</span></em><span class="s1"> possible to deviate from this </span><span class="s1">structure and move things around in unorthodox ways, but this is </span><span class="s1">against the Rails way of doing things.<span class="Apple-converted-space">  </span>By having this &#8220;opinionated&#8221; </span><span class="s1">view on how to do things, a lot of potential complexity in </span><span class="s1">configuration is done away with.</span></p>
<h2 class="p1"><span class="s1">Utilities</span></h2>
<p class="p2"><span class="s1">We can now <var>cd</var></span><span class="s1"> into the new project directory.<span class="Apple-converted-space">  </span>Inside the &#8220;bin&#8221;</span><span class="s1">folder we have a few different useful binaries.<span class="Apple-converted-space">  </span>We have </span><span class="s2"><var>bundle</var></span><span class="s1"> (I </span><span class="s1">believe this is a wrapper around Ruby&#8217;s </span><span class="s2"><var>gem</var></span><span class="s1">) which parses the </span><span class="s1">Gemfile at the root of the project and uses it to install </span><span class="s1">dependencies.<span class="Apple-converted-space">  </span>Any time we alter the Gemfile we can call </span><span class="s2"><var>./bin/bundle</var></span><span class="s1"> to install new packages; there are intricacies to </span><span class="s1">Bundler (its full name), but I&#8217;ve not delved into them.<span class="Apple-converted-space">  </span>We also have </span><span class="s2"><var>rake</var></span><span class="s1"> (Ruby&#8217;s </span><span class="s2"><var>make</var></span><span class="s1">) which is used to perform various tasks; you&#8217;ll most often be </span><span class="s1">using it to perform database functions (&#8220;migrations&#8221;).  </span><span class="s1">We can actually specify the exact Ruby binary we wish to use in our </span><span class="s1">project inside the Gemfile, and RVM is intelligent enough to select </span><span class="s1">the binary we specify:</span></p>
<p class="p2"><span class="s1"><var>ruby &#8216;2.2.1&#8217;</var></span></p>
<p class="p2">(To be honest, I have not fully ironed out the kinks in this system; this is what led me to say I prefer Python&#8217;s <var>virtualenv</var>)</p>
<h2 class="p2">Scaffolds</h2>
<p class="p1"><span class="s1">Let&#8217;s create a blog (this seems to be the Canonical Method for introducing </span><span class="s1">web frameworks).</span></p>
<p class="p3"><span class="s1"><var>rails generate scaffold Post title:string body:text published:boolean user:references</var></span></p>
<p class="p1"><span class="s1">This will set up a Post model for us; most of what is going on is </span><span class="s1">clear here, save except for the last clause: </span><span class="s2"><var>user:references</var></span><span class="s1">.<span class="Apple-converted-space">  </span>This </span><span class="s1">is where we declare a relationship between the User model (which we </span><span class="s1">are yet to establish) and the Post model.<span class="Apple-converted-space">  </span>We are establishing the </span><span class="s1">foreign key so that users may have many posts.<span class="Apple-converted-space">  </span>Let&#8217;s now set up the User model.</span></p>
<p class="p3"><span class="s1"><var>rails g scaffold User name:string:uniq password:digest</var></span></p>
<p class="p1"><span class="s1">Note that we can use &#8220;g&#8221; as a shorthand for &#8220;generate&#8221; in the above </span><span class="s1">statement.<span class="Apple-converted-space">  </span>We use </span><span class="s2"><var>rails generate foo</var></span><span class="s1"> to generate all kinds of </span><span class="s1">things, from scaffolds to model to controllers.  </span><span class="s1">We then go into our User model file and declare the many-to-one </span><span class="s1">relationship between posts and users;<span class="Apple-converted-space"> this can be done</span> at any </span><span class="s1">stage.  We want something like the following:</span></p>
<p class="p1"><var>class User &lt; ActiveRecord::Base</var></p>
<p class="p1"><span class="s1"><span class="Apple-converted-space">  </span><var>has_many :posts, :dependent =&gt; :destroy</var></span></p>
<p class="p1"><span class="s1"><span class="Apple-converted-space">  </span><var>has_secure_password</var></span></p>
<p class="p1"><span class="s1"><span class="Apple-converted-space">  </span><var>validates_uniqueness_of :username</var></span></p>
<p class="p1"><span class="s1"><span class="Apple-converted-space">  </span><var>def to_s</var></span></p>
<p class="p1"><span class="s1"><span class="Apple-converted-space">        </span><var>&#8220;&lt;User ##{self.id}: #{self.name}&gt;&#8221;</var></span></p>
<p class="p1"><span class="s1"><span class="Apple-converted-space">  </span><var>end</var></span></p>
<p class="p1"><span class="s1"><var><var>end</var></var></span></p>
<p class="p1"><span class="s1">Note also that we need to go into the Gemfile for the project and </span><span class="s1">uncomment the &#8216;bcrypt&#8217; gem so it can be used in hashing passwords for </span><span class="s1">storage in the database.  Notice that the uniqueness of usernames is being enforced at the code level <em>and</em> the database level.  For large applications with many concurrent database connections this can introduce race condition issues&#8230; another thing I&#8217;ve only really heard mention of and not delved into.</span></p>
<h2 class="p1">Migrations</h2>
<p class="p1"><span class="s1">We have generated controllers and Ruby models, but we have not in fact </span><span class="s1">done anything yet with the database.<span class="Apple-converted-space">  </span>We have generated <em>migration </em></span><span class="s1"><em>files</em>, present in &#8216;db/migrate&#8217;.<span class="Apple-converted-space">  </span>We can go ahead and edit these to our </span><span class="s1">heart&#8217;s content; they&#8217;re just Ruby scripts. </span></p>
<p class="p1"><span class="s1">We perform the migration </span><span class="s1">(modifying the database) by calling </span><span class="s2"><var>./bin/rake db:migrate</var></span><span class="s1">.<span class="Apple-converted-space">  </span>By </span><span class="s1">default Rails is set up to interact with a SQLite3 database for </span><span class="s1">development purposes.<span class="Apple-converted-space">  </span>The database interaction is abstracted away via </span><span class="s1">Active Records (what amounts to Rails&#8217; ORM).</span></p>
<p class="p1"><span class="s1">We can also use the &#8216;db/seeds.rb&#8217; file to &#8220;seed&#8221; the database with </span><span class="s1">data.<span class="Apple-converted-space">  </span>This is useful if we wish to quickly reset the database to some </span><span class="s1">default state.</span></p>
<h2 class="p1">config/routes.rb</h2>
<p class="p1"><span class="s1">&#8216;config/routes.rb&#8217; defines the routing for the application.<span class="Apple-converted-space">  </span>If we </span><span class="s1">take a look now we can see that we have Users and Posts declared as </span><span class="s1">resources.<span class="Apple-converted-space">  </span>This will mean that interactions with User and Post </span><span class="s1">objects adhere to the Representational State Transfer (REST) web </span><span class="s1">standard for interacting with information on a server.<span class="Apple-converted-space">  </span>Rails uses </span><span class="s1">those funny obscure HTTP methods such as DELETE, PATCH, PUT, etc. in a </span><span class="s1">natural way to help us with managing our objects. </span><span class="s1">We also use the &#8216;root&#8217; method in &#8216;config/routes.rb&#8217; to declare the </span><span class="s1">root action of the application.</span></p>
<p class="p1"><span class="s1">We can use </span><span class="s2"><var>rails s</var></span><span class="s1"> (shorthand for </span><span class="s2"><var>rails server</var></span><span class="s1">) to quickly run the </span><span class="s1">rails built in development server, then point a browser at the address </span><span class="s1">specified in little server startup message to see the fruits of our </span><span class="s1">labour.<span class="Apple-converted-space">  </span>If you put in a silly non-existent route you can get a nice </span><span class="s1">page displaying all the routes available in the application and the </span><span class="s1">various associated route names and HTTP methods.</span></p>
<h2 class="p1">Further</h2>
<p class="p1"><span class="s1">There is much more to be said; it is best to go through the extremely </span><span class="s1">informative introductory tutorials available on the Ruby on Rails </span><span class="s1">website.<span class="Apple-converted-space">  </span>The only things that I have done here that are not present </span><span class="s1">there are using the </span><span class="s2"><var>rails generate scaffold</var></span><span class="s1"> command (the tutorial </span><span class="s1">takes you through manually creating controllers, models, etc.) and </span><span class="s1">using the RVM.</span></p>
<p class="p1"><span class="s1">Inside the view files you use Ruby to interact with models passed to </span><span class="s1">the view in a similar fashion to PhpRenderer objects in the Zend </span><span class="s1">Framework 2.<span class="Apple-converted-space">  </span>I was able to easily roll my own multi-user login system </span><span class="s1">with a few simple lines of code, and I&#8217;m yet to even really properly </span><span class="s1">delve into the gems that are available to help with standard web </span><span class="s1">development activities (like Composer packages in PHP). </span><span class="s1">I know that </span><span class="s2"><var>rake</var></span><span class="s1"> provides all kinds of cool features and allows you </span><span class="s1">to define custom activities that will perform more or less whatever </span><span class="s1">action you wish to help you in development, in much the same fashion </span><span class="s1">as the traditional </span><span class="s2"><var>make</var></span><span class="s1"> utility.<span class="Apple-converted-space">  </span>You can generate documentation, </span><span class="s1">track &#8220;TODOs&#8221; and the like in comments throughout your code, reverse </span><span class="s1">database migrations, and a whole bunch of other things.</span></p>
<p class="p1"><span class="s1">The next things I will probably be looking at is the automatically </span><span class="s1">generated unit testing scaffold and Apache integration.<span class="Apple-converted-space">  </span>It is my </span><span class="s1">understanding that there is an Apache module for Ruby.</span></p>
<h2 class="p1">Conclusion</h2>
<p class="p1"><span class="s1">Ruby on Rails is known for the incredible pace with which it allows </span><span class="s1">developers to implement the core functionalities of a web application. </span><span class="s1">By doing away with unnecessarily obscure configuration and using </span><span class="s1">powerful yet simple command line utilities, as well as by using </span><span class="s1">the famously well designed and throughly object oriented language of </span><span class="s1">Ruby, Ruby on Rails has become somewhat of a darling for progressive </span><span class="s1">web developers.<span class="Apple-converted-space">  </span>If nothing else it is great fun!</span></p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/information/toms-fifteen-minute-ruby-on-rails/">Tom&#8217;s Fifteen Minute Ruby on Rails</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/information/toms-fifteen-minute-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hooray!  Rich UI Design!</title>
		<link>http://www.newtonsit.com.au/uncategorized/hooray-rich-ui-design/</link>
		<comments>http://www.newtonsit.com.au/uncategorized/hooray-rich-ui-design/#comments</comments>
		<pubDate>Mon, 13 Jul 2015 01:45:32 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1705</guid>
		<description><![CDATA[<p>We have looked at poorly designed user interfaces; let&#8217;s now take a look at current user interface trends and see how they stack up in their functionality and aesthetics. Flat Design Flat design is the current go-to in user interface design. Flat design is in a way a rebellion against the skeuomorphism paradigm, where what you see on screen [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/hooray-rich-ui-design/">Hooray!  Rich UI Design!</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>We have looked at <a href="http://www.newtonsit.com.au/uncategorized/danger-poor-ui-design/">poorly designed user interfaces</a>; let&#8217;s now take a look at current user interface trends and see how they stack up in their functionality and aesthetics.</p>
<h3>Flat Design</h3>
<p>Flat design is the current go-to in user interface design. Flat design is in a way a rebellion against the skeuomorphism paradigm, where what you see on screen is deliberately designed to in some way imitate a &#8216;real world&#8217; object. For example, for a guitar-tuning app a designer who favours skeuomorphism might have a little needle bobbing back and forth on screen to indicate the tuning, in a similar way to how the old style analogue guitar tuners are designed.</p>
<div id="attachment_1706" style="width: 220px" class="wp-caption aligncenter"><a href="http://www.newtonsit.com.au/wp-content/uploads/2014/10/gibsonapp.jpg"><img class="size-medium wp-image-1706" src="http://www.newtonsit.com.au/wp-content/uploads/2014/10/gibsonapp-210x300.jpg" alt="An example of skeuomorphism.  Source: bluegrasstoday.com" width="210" height="300" /></a><p class="wp-caption-text">An example of skeuomorphism. Source: bluegrasstoday.com</p></div>
<p>Flat design eschews such an approach in favour of using the digital display as its own entity, distinct from analogue interfaces. Flat design plays to the strengths of the digital format, organising information in uniquely <em>digital</em> ways and ditching the verisimilitude of skeuomorphism. The simplified design has added benefits, increasing the performance of software that needs to display content (e.g. websites) and most importantly facilitating responsiveness.  This is what makes the transition from a desktop display to, say, a mobile display, seamless.</p>
<div id="attachment_1707" style="width: 310px" class="wp-caption aligncenter"><a href="http://www.newtonsit.com.au/wp-content/uploads/2014/10/Awesome-examples-of-flat-UI-design-Webapp-Dashboard-by-Ben-Garratt.jpg"><img class="size-medium wp-image-1707" src="http://www.newtonsit.com.au/wp-content/uploads/2014/10/Awesome-examples-of-flat-UI-design-Webapp-Dashboard-by-Ben-Garratt-300x263.jpg" alt="An example of flat design.  Source: designskilz.com" width="300" height="263" /></a><p class="wp-caption-text">An example of flat design. Source: designskilz.com</p></div>
<h3>The Next Step?</h3>
<p>In characteristic Google style, Google has already opted for their own re-imagining of flat design to&#8230; semi-flat design. They call it <em>material design</em>, and at NewtonsIT we are big fans. Where flat design might recommend eliminating all shadowing effects, material design uses the somewhat skeuomorphic approach of shadowing to indicate items that a user might interact with, like buttons or sliders. This mid-ground between skeuomorphism and flat design represents a good, functional compromise and progress towards the next innovation in design principles.</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/hooray-rich-ui-design/">Hooray!  Rich UI Design!</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/uncategorized/hooray-rich-ui-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous Integration</title>
		<link>http://www.newtonsit.com.au/uncategorized/continuous-integration/</link>
		<comments>http://www.newtonsit.com.au/uncategorized/continuous-integration/#comments</comments>
		<pubDate>Thu, 09 Jul 2015 01:36:54 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1701</guid>
		<description><![CDATA[<p>Let&#8217;s take a look at another agile trend: Continuous Integration (CI). CI is a great way to eliminate technical debt and supercharge productivity.  Let&#8217;s get a couple of definitions out of the way first: Definitions Technical debt: If you don&#8217;t put in upfront effort, for example in planning out the structure of a codebase, later [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/continuous-integration/">Continuous Integration</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Let&#8217;s take a look at another <a href="http://www.newtonsit.com.au/information/agile-agile-agile-agile-agile/">agile</a> trend: Continuous Integration (CI). CI is a great way to eliminate technical debt and supercharge productivity.  Let&#8217;s get a couple of definitions out of the way first:</p>
<h3>Definitions</h3>
<p><strong>Technical debt</strong>: If you don&#8217;t put in upfront effort, for example in planning out the structure of a codebase, later down the track you are more than likely doing to have to perform a painful overhaul.  You have accrued <em>technical debt</em> and would have been better off putting in the upfront effort, because now the task you face is drastically more challenging and potentially overwhelming.<br />
<strong>Atomic commit</strong>: Committing a small, self-contained change to the code, rather than a larger change that might for example represent an entirely new feature.</p>
<div id="attachment_1702" style="width: 234px" class="wp-caption aligncenter"><a href="http://www.newtonsit.com.au/wp-content/uploads/2014/10/Series_of_build_lights.jpg"><img class="size-medium wp-image-1702" src="http://www.newtonsit.com.au/wp-content/uploads/2014/10/Series_of_build_lights-224x300.jpg" alt="Build lights, a quick visual indication of the build status as determined by the build server. Source: Dushan Hanuska - http://www.flickr.com/photos/hanuska/5931613961/in/photostream/" width="224" height="300" /></a><p class="wp-caption-text">Build lights, a quick visual indication of the build status as determined by the build server.<br />Source: Dushan Hanuska &#8211; http://www.flickr.com/photos/hanuska/5931613961/in/photostream/</p></div>
<h3>The Idea</h3>
<p>The fundamental precept of CI is that developers working on a shared codebase integrate their development efforts continuously into the mainline of the code repository. Rather than working on code for days or weeks and then making a large commit for some new feature, developers make a conscious effort to commit more <em>atomically</em>.</p>
<p>Beyond this core idea comes the two main helpers in the continuous integration cause: test driven development/test suites and build servers. The test suite written as the software is developed is used by a build server to ensure the integrity of the code as developers make their continual integrations into the mainline codebase. The build server then builds the software, generating the latest bleeding-edge build and any documentation written in the code (think <em><a href="https://en.wikipedia.org/wiki/Javadoc">javadoc</a> </em>or<em> <a href="https://en.wikipedia.org/wiki/Pydoc">pydoc</a></em>) and useful indicators of the code quality.</p>
<p>The continuous nature of CI means that developers know more-or-less immediately if their contributions are breaking the build. Any scope for build-breaking code to be committed and then accrue technical debt is eliminated. Ideally this will eliminate the <em>Integration Hell</em> that is the bane of software projects. With the builds automatically tested and approved by build servers CI goes hand-in-hand with <em>continuous deployment</em>, where bleeding edge builds can be released rapidly to users for them to enjoy the benefits of the latest features as soon as possible.</p>
<h3>Build server software: Buildbot</h3>
<p><a href="http://buildbot.net/">Buildbot</a>, the &#8220;continuous integration framework&#8221; written in Python is just one of many build servers. With Buildbot trained on your code repository, testing, building, deploying and notifying can all be automated. As I said only a few days ago, such <a href="http://www.newtonsit.com.au/information/automation/">automations</a> can astronomically improve productivity and serve to remove the lumbering human from the loop.</p>
<p>Newtons IT are always looking for new ways to broaden our methodology horizons; CI is the next thing we want to check out. Leave your comments in the comment section, let us know what you think of continuous integration!</p>
<p>Sources:</p>
<p>[1] http://www.thoughtworks.com/continuous-integration</p>
<p>[2] https://en.wikipedia.org/wiki/Continuous_integration</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/continuous-integration/">Continuous Integration</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/uncategorized/continuous-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Danger! Poor UI Design!</title>
		<link>http://www.newtonsit.com.au/uncategorized/danger-poor-ui-design/</link>
		<comments>http://www.newtonsit.com.au/uncategorized/danger-poor-ui-design/#comments</comments>
		<pubDate>Wed, 08 Jul 2015 01:46:47 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1695</guid>
		<description><![CDATA[<p>A recent post by technology blogger Lauren Weinstein following an extensive survey regarding experiences that older users have had with modern Web systems, with an emphasis on possible problems and frustrations was a stark warning on the importance of good design in user interfaces. Particularly for older users, unintuitive user interfaces or sudden changes from established norms can have a devastating effect. [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/danger-poor-ui-design/">Danger! Poor UI Design!</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>A <a href="http://lauren.vortex.com/archive/001112.html">recent post</a> by technology blogger Lauren Weinstein following an extensive survey regarding <em>experiences that older users have had with modern </em><em>Web systems, with an emphasis on possible problems and frustrations </em>was a stark warning on the importance of good design in user interfaces.</p>
<div id="attachment_1697" style="width: 879px" class="wp-caption aligncenter"><a href="http://www.newtonsit.com.au/wp-content/uploads/2014/10/o_filematrix.png"><img class="wp-image-1697 size-full" src="http://www.newtonsit.com.au/wp-content/uploads/2014/10/o_filematrix.png" alt="Poor UI Design.  Source: http://weblogs.asp.net/alex_papadimoulis/146784" width="869" height="680" /></a><p class="wp-caption-text">Poor UI Design. Source: http://weblogs.asp.net/alex_papadimoulis/146784</p></div>
<p>Particularly for older users, unintuitive user interfaces or sudden changes from established norms can have a devastating effect. Users will often simply give up in frustration; for elderly users this can mean a withdrawal back into isolation as they are unable to use web-mail or social media accounts. <strong>For businesses, this means that the &#8216;older&#8217; demographic gets entirely removed from the potential customer base.</strong></p>
<p>Low contrast interfaces, hidden interfaces and buttons requiring supernatural dexterity were identified as the bane of older users. It wouldn&#8217;t be too far of a stretch to also say that there is much cross-over between &#8220;older&#8221; users and those that identify as &#8220;non-computer people&#8221;. Web designers need to pay careful consideration to the needs of such people, not just those up-to-date on the latest bleeding edge web interface trends.</p>
<p>Lauren suggests that a solution to this problem might be the provision of <em>simplified</em> versions of websites. This would go far in remedying the issues that &#8220;non-computer people&#8221; and older users face. Good design coupled perhaps with a simplified option will attract and retain a large demographic of customers, resulting in boosted business and happier customers.</p>
<p>Newtons IT pay keen attention to the needs of everyday users, so that tasks can be accomplished using clean, intuitive interfaces. Nobody wants to use a bloated and poorly designed website; now is the time to ditch your tired old confusing site and opt for a carefully thought out and designed web solution, courtesy of Newtons IT.</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/danger-poor-ui-design/">Danger! Poor UI Design!</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/uncategorized/danger-poor-ui-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automation</title>
		<link>http://www.newtonsit.com.au/information/automation/</link>
		<comments>http://www.newtonsit.com.au/information/automation/#comments</comments>
		<pubDate>Tue, 07 Jul 2015 00:33:23 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[backups]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1691</guid>
		<description><![CDATA[<p>It&#8217;s the menial manual tasks involved in running your business that can add up to costing you a lot of time and money. Things like sitting down and making manual backups of your data onto an old hard drive, sending out information to all your staff on what you need them to be doing, crunching the numbers on how [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/information/automation/">Automation</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s the menial manual tasks involved in running your business that can add up to costing you a lot of time and money. Things like sitting down and making manual backups of your data onto an old hard drive, sending out information to all your staff on what you need them to be doing, crunching the numbers on how your business has been faring and where you need to pick up your game.</p>
<p>It&#8217;s exactly areas such as these that you need to start thinking about automation.</p>
<div id="attachment_1692" style="width: 1010px" class="wp-caption aligncenter"><a href="http://www.newtonsit.com.au/wp-content/uploads/2014/10/rubegoldberg_photo_gal_4156_photo_909168941_lr.jpg"><img class="wp-image-1692 size-full" src="http://www.newtonsit.com.au/wp-content/uploads/2014/10/rubegoldberg_photo_gal_4156_photo_909168941_lr.jpg" alt="Automation... perhaps things could be made more efficient though." width="1000" height="836" /></a><p class="wp-caption-text">Automation&#8230; perhaps things could be made more efficient though.</p></div>
<p>Top IT executives were <a href="https://enterprisersproject.com/article/2015/5/7-it-leaders-urge-automation-these-key-areas">recently asked</a> about areas they consider ripe for automation. For your everyday business, the main focus should be on removing the human from the loop on the manual processes; as one IT exec. said,</p>
<blockquote><p>I want the least number of people touching things so they can focus on their jobs and driving value for the company.</p></blockquote>
<p>In particular data archiving and analytics are areas where the computer can and should do it all for you. You shouldn&#8217;t even have to think about backups of your mission critical data. Newtons IT staff are experts when it comes to setting up automated backup routines, giving you peace of mind in knowing that you&#8217;ll never be subjected to the devastation of mass data loss.</p>
<p>Analytics is also an area where computers frankly do it better. Computers can record data for you (sales data, website access data, any kind of data you can think of) and crunch it all for you to spit out useful indicators of your business success or areas you need to work on.</p>
<p>An investment in automation will pay off almost immediately, slashing labour costs and boosting productivity. Engaging Newtons IT in automating processes in the right way is an investment you can&#8217;t afford <em>not</em> to make as we move into the Big Data age.</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/information/automation/">Automation</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/information/automation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Edge</title>
		<link>http://www.newtonsit.com.au/uncategorized/microsoft-edge/</link>
		<comments>http://www.newtonsit.com.au/uncategorized/microsoft-edge/#comments</comments>
		<pubDate>Mon, 06 Jul 2015 00:29:08 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1687</guid>
		<description><![CDATA[<p>Windows 10 is coming, and with it Microsoft&#8217;s latest efforts in a modern web browser: Microsoft Edge. For a while now Microsoft&#8217;s offerings on the browser front have been somewhat lack-lustre and unfashionable. There was a time when Internet Explorer ruled the browser world, battering out the likes of Netscape Navigator. From the ashes of Netscape Navigator came Mozilla Phoenix, later [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/microsoft-edge/">Microsoft Edge</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div id="attachment_1688" style="width: 310px" class="wp-caption aligncenter"><a href="http://www.newtonsit.com.au/wp-content/uploads/2014/10/Microsoft-Edge-techopticom.jpg"><img class="size-medium wp-image-1688" src="http://www.newtonsit.com.au/wp-content/uploads/2014/10/Microsoft-Edge-techopticom-300x164.jpg" alt="Source: techopti.com" width="300" height="164" /></a><p class="wp-caption-text">Source: techopti.com</p></div>
<p><a href="https://www.microsoft.com/en-au/windows/features">Windows 10</a> is coming, and with it Microsoft&#8217;s latest efforts in a modern web browser: <a href="https://www.microsoft.com/en-us/windows/microsoft-edge">Microsoft Edge</a>. For a while now Microsoft&#8217;s offerings on the browser front have been somewhat lack-lustre and unfashionable. There was a time when Internet Explorer ruled the browser world, <a href="https://en.wikipedia.org/wiki/Browser_wars">battering out</a> the likes of Netscape Navigator. From the ashes of Netscape Navigator came Mozilla Phoenix, later renamed to <em>Firefox</em>, and thus began the decline of Internet Explorer. Nowadays, there are browsers galore and the battle still rages: Internet Explorer, Firefox, Chrome, Opera, Safari&#8230; the list goes on.  Chrome has swept the world with its lightweight offerings and integration with the Google ecosystem (it is made by Google, after all), and the once all powerful Firefox is more slow and bloated with every release.</p>
<p>Microsoft is hoping to regain dominance with its brand new Microsoft Edge, making a break from the Internet Explorer line to build a modern web browser deeply integrated with its new Windows 10 operating system. Microsoft has emphasised its built in support for social use of the world wide web; for example, a new feature called &#8216;inking&#8217; will allow users to mark up pages as they like and send the page with the mark-ups they have made to friends.</p>
<p>Edge is still evolving and we are yet to see how it will look in the end, but at Newtons IT we are certainly looking forward to trying out the new features it will offer us as developers. More than anything else we look forward to using Microsoft Edge&#8217;s new features to <em>wow</em> our clients and give them an <em>Edge</em> over their competitors in web presentation and presence.  Get in contact with Newtons IT to see how we can use the next generation of browsers to boost your business today!</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/microsoft-edge/">Microsoft Edge</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/uncategorized/microsoft-edge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django</title>
		<link>http://www.newtonsit.com.au/information/django/</link>
		<comments>http://www.newtonsit.com.au/information/django/#comments</comments>
		<pubDate>Wed, 01 Jul 2015 00:41:24 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web framework]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1682</guid>
		<description><![CDATA[<p>How could I write a blog post about Flask and not write one about the elephant in the Python web development room? Django! Newtons IT is serious about staying abreast of new technologies and exposing ourselves to different development methods and paradigms.  Already I have written about Agile, about Zend Framework 2 and about Flask. Django is the [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/information/django/">Django</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>How could I write a blog post about <a href="http://www.newtonsit.com.au/information/flask-my-experience/">Flask</a> and not write one about the elephant in the Python web development room? <a href="https://www.djangoproject.com/">Django</a>!</p>
<p>Newtons IT is serious about staying abreast of new technologies and exposing ourselves to different development methods and paradigms.  Already I have written about <a href="http://www.newtonsit.com.au/information/agile-agile-agile-agile-agile/">Agile</a>, about <a href="http://www.newtonsit.com.au/uncategorized/zend-framework-ii/">Zend Framework 2</a> and about <a href="http://www.newtonsit.com.au/information/flask-my-experience/">Flask</a>. Django is the next in line, but at this stage this developer has not even developed a simple <a href="https://en.wikipedia.org/wiki/%22Hello,_World!%22_program">&#8220;Hello World!&#8221;</a>-type website using Django.</p>
<p>So, from the outside looking in, what is there to be said about Django and what recommends it to me as the next thing to check out?</p>
<h3>The Python Dictatorship</h3>
<p><a href="https://en.wikipedia.org/wiki/Guido_van_Rossum">Guido Van Rossum</a>, Python&#8217;s author, is known as the &#8220;Benevolent Dictator for Life&#8221; in Python circles. As a reference to this, Jacob Kaplan-Moss (co-creator of Django) called himself the Co-Benevolent Dictator for Life of Django. He has spoken of its explosive growth, from its infancy in a fast-moving newsroom to its current application in&#8230; any web application you could think of! &#8220;Scripting languages&#8221;, perhaps previously looked upon as only for small applications and prototyping, are now taking their place beside the old guard of Java and .NET.</p>
<p>Kaplan-Moss, as one of the co-benevolent dictators, and with a degree in literature (the other has a degree in journalism) has made a point of ensuring Django has documentation of the highest quality. This is a point that cannot be understated. <em>The quality of documentation is often a proxy for the quality of the software itself</em>. Well thought out and logical documentation is often indicative of well thought out and logical software.</p>
<p>For this developer, perhaps even more so than the simple fact of the meteoric and exponential growth in Django usage, the superlative documentation has convinced me to dive in and check it out. You should too!</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/information/django/">Django</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/information/django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy 1.0 GitHub Atom!</title>
		<link>http://www.newtonsit.com.au/information/happy-1-0-github-atom/</link>
		<comments>http://www.newtonsit.com.au/information/happy-1-0-github-atom/#comments</comments>
		<pubDate>Mon, 29 Jun 2015 00:15:18 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Information]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[text editors]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1678</guid>
		<description><![CDATA[<p>The bond between developer and text editor is one of the strongest in all of nature. Holy Wars have been waged between Vim and Emacs proponents but between such terminal-based text editors (yes, I know, there are GUI versions also) and fully fledged integrated development environments we have the lightweight GUI based editors. For a while now Sublime has been [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/information/happy-1-0-github-atom/">Happy 1.0 GitHub Atom!</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>The bond between developer and text editor is one of the strongest in all of nature. <a href="https://en.wikipedia.org/wiki/Editor_war">Holy Wars</a> have been waged between Vim and Emacs proponents but between such terminal-based text editors (yes, I know, there are GUI versions also) and fully fledged integrated development environments we have the lightweight GUI based editors. For a while now Sublime has been the darling of many a developer, but there&#8217;s a new kid on the block, and that kid has just hit 1.0.</p>
<h3>GitHub Atom</h3>
<p>It is clear that Atom took a lot of inspiration from Sublime. In this blogger&#8217;s opinion the two most crucial differences are that Atom is web-based (built on top of Google&#8217;s open source <a href="https://www.chromium.org/">Chromium</a> browser), and has the backing of GitHub, a company that (at present) can do no wrong. Atom has gone through extensive beta testing and is fully free and extensible, so why not download it now and give it a whirl?</p>
<p>Lightweight text-editors such as Atom allow a developer to easily and rapidly navigate between project files in all kinds of different languages, with lovely syntax highlighting and other helpful features. Even amongst Newtons IT staff there is controversy regarding the &#8216;best&#8217; text editor, but all agree that GitHub Atom is worth a try. <a href="https://atom.io/">Check it out now</a>!</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/information/happy-1-0-github-atom/">Happy 1.0 GitHub Atom!</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/information/happy-1-0-github-atom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobilegeddon?  Not really.</title>
		<link>http://www.newtonsit.com.au/uncategorized/mobilegeddon-not-really/</link>
		<comments>http://www.newtonsit.com.au/uncategorized/mobilegeddon-not-really/#comments</comments>
		<pubDate>Fri, 05 Jun 2015 00:57:15 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1674</guid>
		<description><![CDATA[<p>There&#8217;s no getting around it: Google has unparalleled control over what people see when they use the world wide web.  It&#8217;s not uncommon for web users to have Google set as their home page, and to even use the Google search box instead of their browser&#8217;s address bar to navigate to a desired website.  Instead [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/mobilegeddon-not-really/">Mobilegeddon?  Not really.</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>There&#8217;s no getting around it: Google has unparalleled control over what people see when they use the world wide web.  It&#8217;s not uncommon for web users to have Google set as their home page, and to even use the Google search box instead of their browser&#8217;s address bar to navigate to a desired website.  Instead of typing &#8220;http://www.facebook.com&#8221; many opt to just type &#8220;f&#8221; into Google and click the first result.</p>
<p>If your website is not optimised for Google&#8217;s search algorithms, you are virtually consigned to the oblivion that is&#8230; the second page of results!  When is the last time you went to the bottom of the Google search results page and clicked the next button?  How about the last time you skipped over to page eleven of the search results?</p>
<p>It&#8217;s definitely worth spending some time thinking about how your website ranks in Google&#8217;s search results, and on April 21 this year things changed dramatically.</p>
<h3>Mobilegeddon</h3>
<p>On April 21, Google upended the way it ranks mobile searches.  When the Googlebot crawls through and assesses your website now, it will determine how mobile-friendly your website is and this will contribute towards page ranking.  If your website is not responsive or does not have a mobile version, your page ranking is going to take a hit.  If your website it lovely and mobile-friendly, you&#8217;re going to see a nice uptick in your page ranking.  Now more than ever before it is important that you make the move to make your site more mobile-friendly.</p>
<p>Google&#8217;s decision to change the page ranking algorithm is based on current trends.  Many people are doing the bulk of their web browsing using mobile devices these days.  Emailing, reading the news, buying products, banking&#8230; all of these activities and more are now done using mobile devices.  This means that the user experience on mobile devices has become far more important.  Should the user experience on mobile devices for your website be suboptimal, your page ranking will now reflect this.</p>
<h3>What can I do?</h3>
<p>Talk to Newtons IT about creating a responsive website.  The Google decision has been somewhat controversial, but in the end the central thesis is that user experience is king.  Google wants to see people using mobile devices presented with something that is pleasant to use on a mobile; this is in everyone&#8217;s interest, and a pleasant, responsive website means happy customers and better business!</p>
<p>For an FAQ from Google on the change, check out:</p>
<p>http://googlewebmastercentral.blogspot.com.au/2015/04/faqs-april-21st-mobile-friendly.html</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/mobilegeddon-not-really/">Mobilegeddon?  Not really.</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/uncategorized/mobilegeddon-not-really/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing Manually</title>
		<link>http://www.newtonsit.com.au/uncategorized/testing-manually/</link>
		<comments>http://www.newtonsit.com.au/uncategorized/testing-manually/#comments</comments>
		<pubDate>Tue, 02 Jun 2015 05:46:35 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.newtonsit.com.au/?p=1672</guid>
		<description><![CDATA[<p>There is an ever-present tension between producing immediate value or producing longer term, more slow-burning value.  Much has been said about the value of automated testing, and to ignore such commentary would be a grave misstep; however there comes a time when push comes to shove and theory must be turned into practice. I have [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/testing-manually/">Testing Manually</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>There is an ever-present tension between producing immediate value or producing longer term, more slow-burning value.  Much has been said about the value of automated testing, and to ignore such commentary would be a grave misstep; however there comes a time when push comes to shove and theory must be turned into practice.</p>
<p>I have personal experience in dealing with projects inherited from third parties that required testing and did not come with a skerrick of test code.  At times like this I have been forced to make a decision: do I try to implement test code, or do I jump in and test things by hand?  Yes, ideally we will end up with a nice set of test code that can be run with the click of a button any time we make a change, but with deadlines looming someone has to roll up their sleeves and start testing manually.</p>
<p>Code being tested can often times be unfamiliar, using technology foreign to the tester or being poorly structured.  Through the testing process a tester is able to tease apart the code, understanding it better and refactoring it.  In the process an automated test framework can slowly be written.</p>
<p>But when things need to be tested now, here is what has worked in the past:</p>
<h3>Damage Control</h3>
<p>Fire up your favourite text editor and make a table with the following columns:</p>
<p style="text-align: center;">| If | Then | Actual | Notes | Status |</p>
<ul>
<li>If: These are the actions that we will perform.  Some examples might be <em>if</em> I click on the arrow or <em>if</em> I receive an email.</li>
<li>Then: These are the results that we want to see when the <em>if</em> is performed.  For example, to accompany &#8220;<em>if</em> I click on the arrow&#8221; we might have &#8220;<em>then</em> I will be presented with a dropdown menu.&#8221;</li>
<li>Actual: These are the results of performing the <em>if</em>.  This is what actually happened, and if it differs from the <em>then</em> that we pre-wrote we have a failing test case.</li>
<li>Notes: Any additional notes.  If, for example, we do not get the expected outcome when we perform the <em>if </em>but we get something close to it, we might make a note to check with the client if the behaviour is acceptable.</li>
<li>Status: A one or two word descriptor for the state of the test case.  For example, &#8220;failing&#8221;, &#8220;passing&#8221;, &#8220;on hold&#8221;, &#8220;indeterminate&#8221;, etc.</li>
</ul>
<p>It is also a good idea to separate out the test cases in a logical fashion; we might have a group of test cases that address a certain module of a program, accompanied by some prose about what the module ought to be doing overall.</p>
<p>The test cases need to be gone through as often as possible.  This can take a fair amount of time, but sometimes this is unavoidable in the face of looming deadlines.  If time permits we will be refactoring and writing test cases as we become more familiar with the code, but under these damage control conditions we always look to provide the greatest value to the client that we can in the time we have.</p>
<p>Having said all this, please don&#8217;t put testers in a position where this has to be done.  A well written automated test framework will outperform a lumbering human every time, and driving development through testing will produce higher quality code that can be maintained into the future.</p>
<p>The post <a rel="nofollow" href="http://www.newtonsit.com.au/uncategorized/testing-manually/">Testing Manually</a> appeared first on <a rel="nofollow" href="http://www.newtonsit.com.au">NewtonsIT - Cutting edge cloud software developers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newtonsit.com.au/uncategorized/testing-manually/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
