<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8327175718357293050</id><updated>2024-10-05T06:41:00.096+10:00</updated><category term="Software Engineering"/><category term="programming"/><category term="SDLC"/><category term="continuous integration"/><category term="continuous delivery"/><category term="java"/><category term="system design"/><category term="Aikido"/><category term="cooking"/><category term="embedded linux"/><category term="linguistics"/><category term="msii"/><category term="nas"/><category term="raid"/><category term="system architecture"/><category term="Agile"/><category term="JSF"/><category term="games"/><category term="internet"/><category term="localisation"/><category term="mathematics"/><category term="physics"/><category term="poems"/><category term="recipes"/><category term="web application"/><category term="IceFaces"/><category term="WSDL"/><category term="amazon"/><category term="berlusconi"/><category term="causality"/><category term="cloud computing"/><category term="design patterns"/><category term="ec2"/><category term="eclipse"/><category term="euclid"/><category term="g8"/><category term="general"/><category term="geometry"/><category term="glassfish"/><category term="outsourcing"/><category term="pancakes"/><category term="pythagoras"/><category term="quantised space"/><category term="relativity"/><category term="series"/><category term="social sciences"/><category term="web services"/><title type='text'>Marco Scata</title><subtitle type='html'>Just a little bit of space to record experiences, thoughts, anedcdotes, or even plain and simple rants about stuff.&#xa;Just pieces of information on my own learning journeys.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-8377174670788740837</id><published>2018-01-01T03:42:00.000+11:00</published><updated>2018-01-01T04:23:49.918+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cooking"/><category scheme="http://www.blogger.com/atom/ns#" term="recipes"/><title type='text'>Easy Buns</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Ingredients for 12 buns&lt;/h4&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Yeast: 1 sachet dry or 30g fresh&lt;/li&gt;
&lt;li&gt;Sugar: 50g&lt;/li&gt;
&lt;li&gt;Milk: 250ml&lt;/li&gt;
&lt;li&gt;Water: 125g&lt;/li&gt;
&lt;li&gt;Eggs: 2 at room temperature&lt;/li&gt;
&lt;li&gt;Olive Oil: 50g&lt;/li&gt;
&lt;li&gt;Flour: 600g &quot;strong&quot; bread flour&lt;/li&gt;
&lt;li&gt;Salt: 2 teaspoons&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Instructions&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Dissolve the yeast in the water with a tablespoon of the sugar. Place it in the oven with the light on and leave it for about 10 mins, until a thick froth has formed. &lt;b&gt;DO NOT SWITCH THE OVEN ON!&lt;/b&gt;&amp;nbsp;Just leave it with the light on and the door closed.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;In the meantime, beat the eggs and warm up the milk. The milk should be just a little warm to the touch. Not hot. If it&#39;s hot, the yeast will die. I usually blast it for 20s in the microwave straight from the fridge.&lt;/li&gt;
&lt;li&gt;Mix all the dry ingredients in a bowl: the flour, the salt and the remaining sugar.&lt;/li&gt;
&lt;li&gt;Add the beaten eggs, the olive oil, the milk, and the frothy yeast mixture to the last drop.&lt;/li&gt;
&lt;li&gt;Use a wooden spoon to combine everything. You just need to combine all ingredients. It doesn&#39;t matter if it&#39;s lumpy. It should be a thick sticky batter. [see pics 1 and 2]&lt;/li&gt;
&lt;li&gt;Cover with a towel or cling film and put it back in the oven. This should still be &lt;b&gt;SWITCHED OFF&lt;/b&gt;&amp;nbsp;and with the light on. If you have a cooking thermometer, you can play with the oven settings to maintain the temperature at around 30&#39;C.&lt;/li&gt;
&lt;li&gt;Leave to rise for about 2 hours. It should more than double in volume. You should also see bubbles on the dough. [see pic 3]&lt;/li&gt;
&lt;li&gt;Take the bowl out of the oven and squash the dough to get rid of most bubbles. You can give it a gentle stir but try to not to knead it. The dough should still be sticky but very stretchy. [see pic 4]&lt;/li&gt;
&lt;li&gt;Take a baking tray and lay a sheet of baking paper on it. Then brush the paper with olive oil. Do not use a flat cookie tray. It needs to have a little bit of depth. Mine has a depth of 1cm.&lt;/li&gt;
&lt;li&gt;Now you need a well floured worktop and you can start making the buns. This recipe is for 12 buns so you can kind of guess how much of the dough you should use for each bun. Personally, I don&#39;t care if some end up slightly bigger and some others slightly smaller. They all get eaten, regardless. I use a dough ball that is slightly smaller than my fist to make one bun.&lt;/li&gt;
&lt;li&gt;To shape the buns, roll each ball on the floured worktop, then pick it up and let it relax on the palm of your hand. Use the other hand to pinch up the edges to make something that looks like a little money bag, then turn it around and tuck the edges underneath to make a dome-shaped bun and place it on the baking tray. Do this one or two dough balls at a time. If you divide the whole bowl into 12 balls and let them rest on the worktop, they might stick to the worktop and become more difficult to handle. [see pics 5 and 6]&lt;/li&gt;
&lt;li&gt;Gently brush each bun with olive oil and loosely cover them with cling film. Do not seal them tight. They need room to rise. Leave them in a warm part of the kitchen for about an hour. They should just about double in volume and almost start merging into each other. [see pics 7 and 8]&lt;/li&gt;
&lt;li&gt;Bake for about 20 minutes at 180&#39;C. I use a ventilated oven. I also use a water sprayer bottle as soon as I put them in the hot oven. Two or three sprays and quickly close the oven door. It seems to help building a nice crust.&lt;/li&gt;
&lt;li&gt;Keep an eye on the buns. Yours might take more or less than 20 mins. A nice warm golden-brown color will tell you they are ready. [see pics 9 and 10]&lt;/li&gt;
&lt;li&gt;Enjoy.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Pictures&lt;/h3&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXg9wOoFYY_VhomeXheBZjrN1-rs8HL9P4FbForbzfNVh12Qjf03rLBE8hcQ9CwiGfJTEBaDeLeNweftdMtTqJZ26HmKC_VO60XyQS6UopJ8JIfMLiuVeZoqO1IjrtzO7Te_AWtr4tEjE/s1600/20170805_091126.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;900&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXg9wOoFYY_VhomeXheBZjrN1-rs8HL9P4FbForbzfNVh12Qjf03rLBE8hcQ9CwiGfJTEBaDeLeNweftdMtTqJZ26HmKC_VO60XyQS6UopJ8JIfMLiuVeZoqO1IjrtzO7Te_AWtr4tEjE/s320/20170805_091126.jpg&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3oM3qhCG-ySkV7grgc3uyr4gRQ47tPJ4BoW7BmSoQWwCJc3w61gZnHNYm26a4bsxAgcbYD0yQwgAB2HmFIV2oAMwxJyk5P8aO4xdUCrs0-EmUXgl-gD42g3Al4jKN9CDgt4FrEXPUOY/s1600/20170805_091309.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;900&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3oM3qhCG-ySkV7grgc3uyr4gRQ47tPJ4BoW7BmSoQWwCJc3w61gZnHNYm26a4bsxAgcbYD0yQwgAB2HmFIV2oAMwxJyk5P8aO4xdUCrs0-EmUXgl-gD42g3Al4jKN9CDgt4FrEXPUOY/s320/20170805_091309.jpg&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgijTGY_R_OmCefxpGfvJKBekZsQypKBDj-n4anyNtIhk9fg0GwCfkbpEsOcSaM5dpMYt5VN3Hzf_txkogwjIo_C9lkfs0NOKHUXwC35My4IIf1F9dAbLCdjOlPlM2vNXB2x6sHTw35k7k/s1600/20170805_111745.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgijTGY_R_OmCefxpGfvJKBekZsQypKBDj-n4anyNtIhk9fg0GwCfkbpEsOcSaM5dpMYt5VN3Hzf_txkogwjIo_C9lkfs0NOKHUXwC35My4IIf1F9dAbLCdjOlPlM2vNXB2x6sHTw35k7k/s320/20170805_111745.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiesGkZVdA9HgrKw_3ZtpXHRwSAgAIhXW2ykSbf1AkXLnBx6cELChXs4KzYAnuq68GjhP2B8ReeVITXa9ZDyd6DO3PtMXFaIxw4ymuNFekFV0P8ZdgulxS7sDrE_NXeEEjt5NtmKB9jhlc/s1600/20170805_112214.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;900&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiesGkZVdA9HgrKw_3ZtpXHRwSAgAIhXW2ykSbf1AkXLnBx6cELChXs4KzYAnuq68GjhP2B8ReeVITXa9ZDyd6DO3PtMXFaIxw4ymuNFekFV0P8ZdgulxS7sDrE_NXeEEjt5NtmKB9jhlc/s320/20170805_112214.jpg&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_1KrojxfnQerjVi7b4u_6-KLvtOrdWzhYdx_y8g6253uQ8KWDCaxjOQR3f7ZXK_GCzKPrvb7y43j7jmwTY_qXKWcfi3wh1fHKmKW2WIu-bTkdUj9p3wUB9D5tg0PMMaKD5Et4VkqacmE/s1600/20170805_112610.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_1KrojxfnQerjVi7b4u_6-KLvtOrdWzhYdx_y8g6253uQ8KWDCaxjOQR3f7ZXK_GCzKPrvb7y43j7jmwTY_qXKWcfi3wh1fHKmKW2WIu-bTkdUj9p3wUB9D5tg0PMMaKD5Et4VkqacmE/s320/20170805_112610.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9PiHw1FXe_dcDojstoem6bFBTmvwLhJwmQZ_KvY7pRdvc0qOL4XXOneXpBF6fmpXuI9PwyU_D20GWRMnlWQNfHxSsEZz20E5hTBvqbul9RSxvyAYFi78m8KaxDoePNBlQRrOhbeGF-Z4/s1600/20170805_112628.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9PiHw1FXe_dcDojstoem6bFBTmvwLhJwmQZ_KvY7pRdvc0qOL4XXOneXpBF6fmpXuI9PwyU_D20GWRMnlWQNfHxSsEZz20E5hTBvqbul9RSxvyAYFi78m8KaxDoePNBlQRrOhbeGF-Z4/s320/20170805_112628.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjucI8WwQSf6LuJLL7tJIWUk0H5R60yaAY0WZq5-mqnQUGSOSTqd-hLN0h4dDlOu35V4wubcWv_kJvPsmVsobaBYEYBfLyOZYYJyYJV2KTXrTBmln8v5siY4U7LilKEMDOWu8NUKMtzV7U/s1600/20170805_114332.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjucI8WwQSf6LuJLL7tJIWUk0H5R60yaAY0WZq5-mqnQUGSOSTqd-hLN0h4dDlOu35V4wubcWv_kJvPsmVsobaBYEYBfLyOZYYJyYJV2KTXrTBmln8v5siY4U7LilKEMDOWu8NUKMtzV7U/s320/20170805_114332.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVtDQeUw4PGQxXvUIrFhV47yXhCTl_XRwTDapwOV1uPdXnJvsbR-SHpBb3xK0erMGm9cmJtgc3frkspQGQPxfUBIT-HcLxFiuhOvzxV2B_K6vmUaQUNehornAzzUfdgBx2fzcG_VCPuss/s1600/20170805_114421.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVtDQeUw4PGQxXvUIrFhV47yXhCTl_XRwTDapwOV1uPdXnJvsbR-SHpBb3xK0erMGm9cmJtgc3frkspQGQPxfUBIT-HcLxFiuhOvzxV2B_K6vmUaQUNehornAzzUfdgBx2fzcG_VCPuss/s320/20170805_114421.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAlGajOTBHZUPYGR9xrQJCKX1Pi3dHHpLRZF9gbzs8URo8ultDagRaMV1u4QKnnVQQP9q-IohWSN0W9F3wkeJgBbu_rwJVLWIQkhLeo0QnHAIImtzYYE68ALak9K9DXZEZj5ecRjFXw-g/s1600/20170805_134409.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAlGajOTBHZUPYGR9xrQJCKX1Pi3dHHpLRZF9gbzs8URo8ultDagRaMV1u4QKnnVQQP9q-IohWSN0W9F3wkeJgBbu_rwJVLWIQkhLeo0QnHAIImtzYYE68ALak9K9DXZEZj5ecRjFXw-g/s320/20170805_134409.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglmnGc_dWf7GLw7YGF5pg8844p6lGY1zUmp5pE6f7rdEsLA34K4QJ3NqR4R540LAMaUDrejhQNplfcNpT9kqYneonC8vZr1k5ZVyW2i6mWfJ0p6_HhppWIO9v8A9w0oAe6lOsRr1yBf9M/s1600/IMG_20170716_201805.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1600&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglmnGc_dWf7GLw7YGF5pg8844p6lGY1zUmp5pE6f7rdEsLA34K4QJ3NqR4R540LAMaUDrejhQNplfcNpT9kqYneonC8vZr1k5ZVyW2i6mWfJ0p6_HhppWIO9v8A9w0oAe6lOsRr1yBf9M/s320/IMG_20170716_201805.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/8377174670788740837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/8377174670788740837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/8377174670788740837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/8377174670788740837'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2018/01/easy-buns.html' title='Easy Buns'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXg9wOoFYY_VhomeXheBZjrN1-rs8HL9P4FbForbzfNVh12Qjf03rLBE8hcQ9CwiGfJTEBaDeLeNweftdMtTqJZ26HmKC_VO60XyQS6UopJ8JIfMLiuVeZoqO1IjrtzO7Te_AWtr4tEjE/s72-c/20170805_091126.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-2614070538763181327</id><published>2013-12-24T21:26:00.000+11:00</published><updated>2019-10-06T05:18:36.173+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="continuous delivery"/><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration"/><category scheme="http://www.blogger.com/atom/ns#" term="SDLC"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering"/><title type='text'>Trying Continuous Delivery - Part 3</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;i&gt;&lt;span style=&quot;color: red;&quot;&gt;Please note: I am making this stuff up as I go along, so I may have to update each post at a later stage to reflect some changes that I think might make things easier to manage.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In my &lt;a href=&quot;http://marcoscata.blogspot.com.au/2013/05/continuous-delivery-in-practice-part-2.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt; I set up the basic environment that will host my application for Integration work. Now I can start writing the application and put it into a continuous delivery pipeline. The purpose of these posts is only to put into practice some of the principles of continuous delivery, so I will not spend much time writing about the details of the web application. In fact, the application will be a simple noticeboard, where anyone can write a new post and anyone can read all posts in the system.&lt;br /&gt;
&lt;br /&gt;
I set up my application in Eclipse as a Maven project and start writing my acceptance tests right away. I could use behavioral testing frameworks like &lt;a href=&quot;http://www.blogger.com/www.jbehave.org&quot;&gt;JBehave&lt;/a&gt; or &lt;a href=&quot;http://www.blogger.com/www.easyb.org&quot;&gt;easyb&lt;/a&gt;, but I will keep it simple and use plain &lt;a href=&quot;http://www.blogger.com/www.junit.org&quot;&gt;JUnit&lt;/a&gt; tests written in a format that still defines and asserts application behavior. Just as a useful practice, I like separating my tests into packages that reflect their general purpose:&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding=&quot;2&quot; style=&quot;border: 1px solid black; padding: 10px;&quot;&gt;&lt;thead style=&quot;font-weight: bold;&quot;&gt;
&lt;tr&gt; &lt;td&gt;Package Name&lt;/td&gt; &lt;td&gt;Tests Purpose&lt;/td&gt; &lt;/tr&gt;
&lt;/thead&gt; &lt;tbody style=&quot;border: 1px solid black; text-align: left; vertical-align: top;&quot;&gt;
&lt;tr&gt; &lt;td style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;mywebapp.tests.unit&lt;/td&gt; &lt;td&gt;These will test small pieces of functionality. They run very fast and are not supposed to test multiple application layers, so they use test doubles (mocks, stubs, etc) when needed.&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;mywebapp.tests.integration&lt;/td&gt; &lt;td&gt;These will test multiple application layers (e.g. services and data access) and run a bit slower than unit tests.&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;mywebapp.tests.acceptance&lt;/td&gt; &lt;td&gt;Arguably the most important type of tests. These are translated directly from requirements/stories. They are usually the slowest tests to run.&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt; &lt;/table&gt;
&lt;br /&gt;
This separation strategy allows me to do a couple of things that will be very useful once I start shaping my delivery pipeline (which will be the subject of a later post):&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Run individual test suites from Eclipse by right-clicking the relevant package and choose &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;Run As -&amp;gt; JUnit Test&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Separate the test suites in Maven by using simple &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;include&lt;/span&gt; directives for the Surefire Plugin and the FailSafe Plugin&lt;/li&gt;
&lt;li&gt;Run faster tests early in the feedback cycle and slower tests only after all the faster tests have succeeded&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
More packages would eventually emerge as I start to automate other types of tests (performance, capacity,  etc), but these will suffice for now.&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
All my acceptance tests will follow a &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;given-when-then&lt;/span&gt; pattern, and my first acceptance test will check that anyone is able to add a new comment on the noticeboard.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;package mywebapp.tests.acceptance;

import org.junit.Test;

public class AnyVisitorCanWriteNewEntryTest {
 
 /**
  * Loads the noticeboard page.
  */
 private void givenTheNoticeboardPage() {
  ...
 }

 /**
  * Fills the noticeboard form with a new entry.
  */
 private void whenAnonymousUserWritesNewNotice() {
  ...
 }

 /**
  * Submits the noticeboard form.
  */
 private void andSubmitsForm() {
  ...
 }

 /**
  * Examines the noticeboard table and tries to find the
  * unique comment that was used to submit the form.
  */
 private void thenAnonymousUserCanSeeTheNewEntryOnNoticeboardPage() {
  ...
 }

 @Test
 public void anonymousUserCanWriteNewEntry() throws Exception {
  givenTheNoticeboardPage();
  whenAnonymousUserWritesNewNotice();
  andSubmitsForm();
  thenAnonymousUserCanSeeTheNewEntryOnNoticeboardPage();
 }
}
&lt;/pre&gt;
&lt;br /&gt;
The test will clearly fail because I haven&#39;t written any application code yet. It is meant to simulate user actions on a web interface, so it follows a WebUI-centric pattern:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Load a web page&lt;/li&gt;
&lt;li&gt;Find some element on the page, e.g. an input box&lt;/li&gt;
&lt;li&gt;Perform some operation on the element, e.g. change one of its attributes&lt;/li&gt;
&lt;li&gt;Perform some action on the page, e.g. submit a form&lt;/li&gt;
&lt;li&gt;Check the result, e.g. different elements are displayed on the page&lt;/li&gt;
&lt;/ol&gt;
However, this doesn&#39;t necessarily have to be the case for acceptance tests on a web application: if the presentation layer is well decoupled from the business logic (as it should be), then acceptance tests could exercise the business logic directly instead. Either way, there are some important tradeoffs to consider. For example, a UI-centric approach will almost certainly depend on page elements having specific names and/or IDs, which can change many times during the application&#39;s development lifecycle and waste valuable feedback cycles and spend valuable development time maintaining and fixing tests that will seemingly break for no reason. On the other hand, one could argue that exercising the business logic directly and bypassing the presentation layer altogether does not actually simulate any user interaction and is therefore not good enough to be considered a &quot;proper&quot; acceptance test. My purpose here is to provide an example for continuous delivery, so my choice of following a UI-centred approach is irrelevant in this instance, but the main point here is that &lt;b&gt;there must be automated acceptance tests&lt;/b&gt; as part of the continuous delivery feedback cycle. &lt;/div&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
From the acceptance test I can work my way down to more granular tests that eventually translate into application code, using a test-driven approach. I won&#39;t go into any of those details here, but I will introduce some profiles in my &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;pom.xml&lt;/span&gt; in order to neatly separate the different types of tests for my delivery lifecycle.&lt;br /&gt;
&lt;pre&gt;&amp;lt;profile&amp;gt;
    &amp;lt;id&amp;gt;unit-tests&amp;lt;/id&amp;gt;
      &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
          &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;
            ...
            &amp;lt;configuration&amp;gt;
              &amp;lt;includes&amp;gt;
                &amp;lt;include&amp;gt;**/mywebapp/tests/unit/**/*.java&amp;lt;/include&amp;gt;
              &amp;lt;/includes&amp;gt;
            &amp;lt;/configuration&amp;gt;
          &amp;lt;/plugin&amp;gt;
        &amp;lt;/plugins&amp;gt;
      &amp;lt;/build&amp;gt;
    &amp;lt;/profile&amp;gt;
    &amp;lt;profile&amp;gt;
      &amp;lt;id&amp;gt;integration-tests&amp;lt;/id&amp;gt;
      &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
          &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;configuration&amp;gt;
              &amp;lt;skipTests&amp;gt;true&amp;lt;/skipTests&amp;gt;
            &amp;lt;/configuration&amp;gt;
          &amp;lt;/plugin&amp;gt;
          &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-failsafe-plugin&amp;lt;/artifactId&amp;gt;
            ...
            &amp;lt;configuration&amp;gt;
              &amp;lt;includes&amp;gt;
                &amp;lt;include&amp;gt;**/mywebapp/tests/integration/**/*.java&amp;lt;/include&amp;gt;
              &amp;lt;/includes&amp;gt;
            &amp;lt;/configuration&amp;gt;
          &amp;lt;/plugin&amp;gt;
        &amp;lt;/plugins&amp;gt;
      &amp;lt;/build&amp;gt;
    &amp;lt;/profile&amp;gt;
    &amp;lt;profile&amp;gt;
      &amp;lt;id&amp;gt;acceptance-tests&amp;lt;/id&amp;gt;
      &amp;lt;build&amp;gt;
        &amp;lt;plugins&amp;gt;
          &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-surefire-plugin&amp;lt;/artifactId&amp;gt;
            &amp;lt;configuration&amp;gt;
              &amp;lt;skipTests&amp;gt;true&amp;lt;/skipTests&amp;gt;
            &amp;lt;/configuration&amp;gt;
          &amp;lt;/plugin&amp;gt;
          &amp;lt;plugin&amp;gt;
            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;maven-failsafe-plugin&amp;lt;/artifactId&amp;gt;
            ...
            &amp;lt;configuration&amp;gt;
              &amp;lt;includes&amp;gt;
                &amp;lt;include&amp;gt;**/mywebapp/tests/acceptance/**/*.java&amp;lt;/include&amp;gt;
              &amp;lt;/includes&amp;gt;
            &amp;lt;/configuration&amp;gt;
          &amp;lt;/plugin&amp;gt;
        &amp;lt;/plugins&amp;gt;
      &amp;lt;/build&amp;gt;
    &amp;lt;/profile&amp;gt;
&lt;/pre&gt;
It&#39;s probably worth noting the use of &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;skipTests&lt;/span&gt; in the &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;integration-tests&lt;/span&gt; and &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;acceptance-tests&lt;/span&gt; profiles in order to specifically skip the execution of the Maven &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;surefire&lt;/span&gt; plugin.&lt;br /&gt;
&lt;br /&gt;
Why did I use profiles? Why didn&#39;t I just manage all tests in the main build block? I don&#39;t think there is one single right answer here, but my preference for continuous delivery is to neatly separate the different types of tests into individual jobs in Jenkins. By doing this, I can potentially distribute the load of slow acceptance tests across several Jenkins slaves running in parallel, based on the names of test classes or their sub-packages. &lt;br /&gt;
&lt;br /&gt;
For now, I just need 3 Jenkins jobs to run my tests:&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding=&quot;2&quot; style=&quot;border: 1px solid black; padding: 10px;&quot;&gt;&lt;thead style=&quot;font-weight: bold;&quot;&gt;
&lt;tr&gt; &lt;td&gt;Job Name&lt;/td&gt; &lt;td&gt;Execution&lt;/td&gt; &lt;/tr&gt;
&lt;/thead&gt; &lt;tbody style=&quot;border: 1px solid black; text-align: left; vertical-align: top;&quot;&gt;
&lt;tr&gt; &lt;td&gt;MyWebapp-Unit-Tests&lt;/td&gt; &lt;td style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;mvn clean test -P unit-tests&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;MyWebapp-Integration-Tests&lt;/td&gt; &lt;td style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;mvn verify -P integration-tests&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;MyWebapp-Acceptance-Tests&lt;/td&gt; &lt;td style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;mvn verify -P acceptance-tests&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt; &lt;/table&gt;
&lt;br /&gt;
In particular, the job running acceptance tests will package the application into a &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;war&lt;/span&gt; file and deploy it to Tomcat before executing the tests. This can be accomplished by using the &lt;a href=&quot;http://tomcat.apache.org/maven-plugin.html&quot;&gt;maven tomcat plugin&lt;/a&gt; or &lt;a href=&quot;http://cargo.codehaus.org/Maven2+plugin&quot;&gt;Cargo&lt;/a&gt;. Yes, I could use Jetty just for testing, but I need to make sure that my acceptance tests are run against an environment that is &lt;i&gt;as similar as possible&lt;/i&gt; to my production environment, so I don&#39;t want to test on Jetty if I already know that I&#39;m ultimately going to deploy to Tomcat.  &lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;... TO BE CONTINUED ...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/2614070538763181327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/2614070538763181327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/2614070538763181327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/2614070538763181327'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2013/12/continuous-delivery-in-practice-part-3.html' title='Trying Continuous Delivery - Part 3'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-6262269951218718291</id><published>2013-11-28T23:02:00.000+11:00</published><updated>2016-05-26T20:14:02.929+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linguistics"/><title type='text'>Applying selected principles of effective teaching and learning</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
Applying selected principles of effective teaching and learning to each of the four macroskills of listening and speaking, reading and writing.&lt;/h2&gt;
&lt;span style=&quot;font-size: 16px; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Several authors have tried to extract some fundamental principles of language teaching and learning, intended as fundamental factors that have a positive impact on the effectiveness of teaching and learning languages, supported by research and observation in second language teaching and acquisition. This essay will examine two of these principles &amp;nbsp;- &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;meaningful learning &lt;/span&gt;&lt;span style=&quot;font-size: 16px; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;and &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;motivation &lt;/span&gt;&lt;span style=&quot;font-size: 16px; line-height: 1.5; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;- and how they apply to each of the language learning macro-skills: listening, speaking, reading and writing.&lt;/span&gt;&lt;br /&gt;
&lt;b id=&quot;docs-internal-guid-5c5c475b-9e95-a71c-b3f0-aa8d7d849f0d&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Brown (2000) proposed twelve learning principles divided in three categories (cognitive, affective and linguistic); Savignon (2002) and Brandl (2007) each extracted eight principles from research in Communicative Language Teaching (CLT); Ellis (2008) - also based on CLT research - extended the number of general principles to ten. Aside from the specific linguistics domain, identifying generally applicable principles of learning and teaching has also been an important concern in general education. The OECD, for example, extracted five general teaching principles from a number of case studies on education systems across several countries (2008), while various departments of education at national, state and local level identify and use very similar core principles in their published pedagogical frameworks (Education Queensland, 2011; Education Victoria, 2004).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Even though the above research has been developed in different areas, there seem to be some significant similarities across the principles listed by different authors and organisations, and sometimes the same principles are identified under different labels in different publications. For example, Brandl’s principle of &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;recognising affective factors&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; has a strong connection (although more general in scope) with Brown’s principle of &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;intrinsic motivation.&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;There also appears to be a significant amount of interdependency between various principles, so that their effects on the learning process cannot be examined entirely in isolation from one another. For example, experience suggests that using rich and realistic material for learning (the principle of authenticity) makes it easier to design and carry out meaningful learning activities (the principle of meaningful input), building students’ comfort and familiarity with real-life situations in the second language (the principle of self-confidence), engaging the students’ interest and providing students with a positive stimulus for effective learning (the principle of purpose or motivation). &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;There are two important aspects that should be differentiated with regards to &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;meaningful learning&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;. The first aspect is the intrinsic meaning of the exchanged information (whether it is comprehensible or not). The second is the internalised meaning of such information (whether participants can personally and situationally relate to it or not), and evidence suggests that it is this second aspect that has a stronger, positive impact on language learning. &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;According to Brown (2000), communication acquires meaning when the participants find an association between the information being exchanged and their internal representation of the world as manipulated by activities that are commonly carried out. In other words, there should be a connection between the elements of communication and familiar situations. From a pedagogical perspective based on theoretical principles, it follows that meaningful learning can be addressed by designing and carrying out content-based activities that are purposeful, functional, and relevant to the learning objectives (Raimes, in Richards &amp;amp; Renandya, 2002).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Modern constructionist and communicative approaches place substantial emphasis on constructing and exchanging meaning (Canale &amp;amp; Swain, 1980; Krashen, 1982; Savignon, 2002; Richards, 2006; Ellis, 2008), so even though different authors may use different words and labels, they still refer to the same core ideas: that language teaching and learning should be focused on real goals (Brown, 2000), immediately recognisable references (Savignon, 2002), active construction of meaning, relevant content (Ellis, 2008), purposeful exchanges on information, and engaging activities with content that is relevant to the learners’ experiences (Richards, 2006).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;With regards to &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;motivation,&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; both research and experience support the concept that motivation stems from the anticipation of rewards, which act as a constructive drive in the learning process. Achievement-based (extrinsic) rewards provide positive feedback for correct behavior and answers, but the most powerful rewards are those generated from within the learner (intrinsic) according to his or her needs and desires (Brown, 2000; Ghuman, 2013).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;There is evidence of a positive relationship between motivation and effective language learning (Brown, 2000; Richards &amp;amp; Renandya, 2002). However, it is difficult to see how intrinsic motivation could be taught, because it is by definition an internal state of mind. Nevertheless, research suggests that it is possible to facilitate the emergence and growth of intrinsic motivation by means of various tasks and activities that empower the learner, build up learner autonomy and responsibility for his or her own learning journey (OECD, 2008; Richards &amp;amp; Renandya, 2002), fostering individual accountability (Richards &amp;amp; Rodgers, 2001), providing sufficient opportunities to interact (Ellis, 2008), and engaging learners’ interest (Savignon, 2002).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Researchers seem to agree that both the listening process and the reading process are carried out along two related but very different tracks: bottom-up and top-down processing (Richards &amp;amp; Renandya, 2006). During bottom-up processing, the listener/reader first decodes the language input starting from its basic building blocks (e.g. spoken sounds or written words), using contextual information, inference and prior knowledge to construct meaning. During top-down processing, the listener independently constructs meaning in his or her mind based on prior knowledge and expectations, using and interpreting the language input to track and actively adjust the meaning. Bottom-up and top-down processing are both believed to happen recursively. &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In any case, if we embrace the view that language is an expression of thought and society (Fromkin et al., 2011), then the listener’s ability to construct meaning is greatly influenced by the degree in which the language input matches the listener’s internal representation of the world, which is what makes communication meaningful. Research suggests that the use of schemata and scripts is therefore of great importance in the construction of meaning (Richards &amp;amp; Renandya, 2006).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Applying the principle of meaningful learning to listening involves designing and carrying out activities in which learners can relate prior knowledge to information processing in the form of language input, not only by recalling and activating existing schemata and scripts, but also by facilitating the construction and refinement of new ones (Nunan, in Richards &amp;amp; Renandya, 2006). In order to provide a meaningful listening activity, teachers should also focus on the development of listening strategies like predicting the continuation of sentences ahead of the speaker, or raising awareness of suprasegmental features like stress, tone or word junctures (Van Duzer, 1997).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;With regards to motivation, activities can be designed around songs or games for younger learners at a basic level, for example using a command-action model (Asher, 1977), whereas more mature learners at intermediate level might be more successfully engaged in activities that relate to their day-to-day activities, like a dialog at the family doctor’s office, or the local news.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Listening skills are of paramount importance in the development of speaking skills (Richards &amp;amp; Renandya, 2006), and there seem to be various similarities in the development of speaking skills between first language acquisition and second language learning. In theories of first language acquisition, children learn to speak only after spending sufficient time listening. Through listening, children learn to recognise language patterns and real world associations, which they will try to reproduce through speech at a later stage using various strategies like babbling and imitation (Fromkin &amp;amp; al., 2011). Second language learners also tend to develop listening skills first, going through a silent period before they start to develop their speaking skills (Krashen, 1982).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Brown and Nation (1997) recommend carrying out three types of speaking activities: form-focused (centred on pronunciation, grammar and vocabulary), meaning-focused (centred on communication), and fluency-focused. In particular, they suggest using form-focused activities with learners at basic level, moving on to meaning-focused activities as the learners’ language proficiency increases.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The principle of meaningful learning can be applied to teaching speaking skills by carrying out activities that are authentic and purposeful (Shumin, in Richards &amp;amp; Renandya, 2006), while also addressing the development of more specific linguistic competences: grammar, discourse, sociolinguistic, and strategic (Canale &amp;amp; Swain, 1980; Savignon, 2002). &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In order to foster motivation, speaking activities can be modelled around the students’ real interests. For example, young learners might enjoy singing or telling simple mime stories, in which the students try to recite a story according to actions mimed by the teacher, whereas more mature learners might be more interested in role playing activities.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In the context of listening and speaking, meaningful communication is constructed by all participants using an interactive exchange of information by using various discourse strategies. In the context of reading and writing, meaningful communication is instead built into the text by the writer, and is extracted by the reader in completely independently, so that the text becomes a communication proxy or filter between the reader and the writer.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Grabe (2004) points out that functional discourse structures in a text are interpreted by the reader according to conventions and patterns, and familiarity with those helps the construction of meaning. This might be driven - for example - by similarities between the culture of the writer and that of the reader, or by the reader’s prior knowledge of the subject. In cases where the reader has little or no familiarity with the text, pre-reading activities can be carried out in order to build up awareness in and basic knowledge of the cultural, sociolinguistic, historical, and technical/factual aspects of the text. Pre-reading activities are also useful to build up relevant schemata and scripts that are so beneficial for top-down and bottom-up processing (Van Duzer, 1997).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Since non-verbal elements can make up as much as two thirds of a verbal conversation (Hogan &amp;amp; Stubbs, 2003), one of the biggest challenges in teaching and learning writing skills lies in developing the writer’s ability to produce text that is meaningful to the reader (Byrne, 1988), especially considering the practical impossibility for the reader to interactively and recursively negotiate meaning with the writer to clarify or disambiguate the language being used, which would be a natural discourse strategy in the spoken language.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;One way to help writers in producing meaningful text is to try to develop the ability to visualise an audience and to identify a clear central idea that writers will then wish to convey to that audience (Seow, in Richards &amp;amp; Renandya, 2006). With an audience in mind, the process of writing can also be enriched by the writer taking the role of the reader in order to extend and refine the produced text, iteratively switching between the two roles until the text is complete.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Reppen (in Richards &amp;amp; Renandya, 2006) proposes creating opportunities for free expression as well as carrying out realistic situational writing activities in order to define the potential audience and engage the students’ interest, for example writing letters to relatives in junior classes, or writing cover letters to potential employers in more mature classes. In all cases, focusing on the text instead of its constituent parts (sentences or paragraphs) makes the learning process more meaningful and motivating (Byrne, 1988).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Seow (in Richards &amp;amp; Renandya, 2006) recommends building motivation by encouraging students to evaluate their own and each other’s texts, and potentially presenting their final work to others in the form of interactive post-writing activities like presentations, enactments, or reading aloud and discussing, thereby complementing writing activities with reading acitivities. Ferris (in Richards &amp;amp; Renandya, 2006) points out that the process of editing a text is often neglected when teaching writing skills, and this can lead to poor results. Therefore, building up students’ motivation to engage in the editing process can be beneficial, and Ferris suggests to do so by raising the students’ awareness of the positive effects that editing has on the final writing product, for example by marking the students’ unedited work and compare it against the mark that the students could have received for the edited work.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;Marco Scata&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;References&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Asher, J. J. (1977). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Learning another language through actions: the complete teacher’s guidebook.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Los Gatos, CA: Sky Oaks Productions.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Brandl, K. (2007). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Communicative language teaching in action: putting principles to work.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; New Jersey: Pearson Prentice Hall&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Brown, H. D. (2000). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Teaching by principles: An interactive approach to language pedagogy&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (second edition). New Jersey: Prentice Hall Regents.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Brown, R. S., &amp;amp; Nation, P. (1997). Teaching speaking: suggestions for the classroom. The language teacher online, January 1997. Retrieved from &lt;/span&gt;&lt;a href=&quot;http://jalt-publications.org/old_tlt/files/97/jan/speaking.html&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: white; color: #1155cc; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://jalt-publications.org/old_tlt/files/97/jan/speaking.html&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Byrne, D. (1988). General principles for teaching writing. &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Teaching writing skills&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (pp. 25-29). London: Longman.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Canale, M. &amp;amp; Swain, M. (1980). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Theoretical bases of communicative approaches to second language teaching and testing.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Applied Linguistics, 1, 1-47.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Education Queensland (2011). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Pedagogical framework.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; State of Queensland department of education. Retrieved from &lt;/span&gt;&lt;a href=&quot;http://education.qld.gov.au/curriculum/pdfs/pedagogical-framework.pdf&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: white; color: #1155cc; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://education.qld.gov.au/curriculum/pdfs/pedagogical-framework.pdf&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Education Victoria (2004). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Effective pedagogy: principles of learning and teaching P–12.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; State of Victoria department of education. Retrieved from &lt;/span&gt;&lt;a href=&quot;https://www.eduweb.vic.gov.au/edulibrary/public/teachlearn/student/poltleadchangepedagogy.pdf&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: white; color: #1155cc; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;https://www.eduweb.vic.gov.au/edulibrary/public/teachlearn/student/poltleadchangepedagogy.pdf&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Ellis, R. (2008). Principles of instructed second language Acquisition. &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;CAL Digests&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;. Retireved from &lt;/span&gt;&lt;a href=&quot;http://www.cal.org/resources/digest/instructed2ndlang.html&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: white; color: #1155cc; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://www.cal.org/resources/digest/instructed2ndlang.html&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Fromkin, V., Rodman, R., &amp;amp; Hyams, N. (2011). &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;An&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Introduction to Language&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (ninth edition). Canada: Wadsworth, Cengage Learning.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Grabe, W. (2004). &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Research on teaching reading.&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Annual Review of Applied Linguistics, 24 (1), 44-69. USA: Cambridge University Press. doi:10.1017/S0267190504000030&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Hogan, K., &amp;amp; Stubbs, R. (2003). &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Can’t get through 8 barriers to communication.&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Grenta, LA: Pelican Publishing Company. Retrieved from &lt;/span&gt;&lt;a href=&quot;http://www.kevinhogan.com/downloads/8Mistakesp.pdf&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #000099; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://www.kevinhogan.com/downloads/8Mistakesp.pdf&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Krashen, S., (1982). Second language acquisition theory. In &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Principles and practice in second language learning and acquisition&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (pp. 9–32). Oxford: Pergamon.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;LIN8002 Methodology in teaching a second language: Study Book.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (2013). Toowoomba: University of Southern Queensland.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Mahmood, T., Ahmed, M., Shoaib, H., &amp;amp; Ghuman, M. (2013). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Motivation as pedagogical technique for teachers: a cross comparison between public and private sector.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Mediterranean journal of social sciences, 4 (2), 563-570. Rome: Sapienza University.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;OECD (2008). Assessment for learning. Formative assessment. In OECD/CERI International Conference&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; “Learning in the 21st Century: Research, Innovation and Policy”.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Paris: OECD. Retrieved from &lt;/span&gt;&lt;a href=&quot;http://www.oecd.org/site/educeri21st/40600533.pdf&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: white; color: #1155cc; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://www.oecd.org/site/educeri21st/40600533.pdf&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Richards, J. C. (2006). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Communicative language teaching today&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;. New York: Cambridge University Press.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Richards, J. C. &amp;amp; Renandya, W. A. (2002). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Methodology in language teaching: An anthology of current practice. &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Cambridge: Cambridge University Press.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Richards, J. C. &amp;amp; Rodgers, T. S. (2001). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Approaches and Methods in Language Teaching.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Cambridge: Cambridge University Press.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Savignon, S. J. (2002). Communicative language teaching: Linguistic theory and classroom practice. &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Interpreting communicative language teaching contexts and concerns in teacher education&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (pp. 1–27). New Haven: Yale University Press.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Van Duzer, C. (1997). &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Improving ESL learners’ listening skills: at the workplace and beyond.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; ESL Resources: Centre for Adult English Language Acquisition. Retrieved from &lt;/span&gt;&lt;span style=&quot;background-color: white; color: #1155cc; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;a href=&quot;http://www.cal.org/caela/esl_resources/digests/LISTENQA.html&quot; style=&quot;text-decoration: none;&quot;&gt;http://www.cal.org/caela/esl_resources/digests/LISTENQA.html&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;times new roman&amp;quot;; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/6262269951218718291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/6262269951218718291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/6262269951218718291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/6262269951218718291'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2013/11/applying-selected-principles-of.html' title='Applying selected principles of effective teaching and learning'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-1020618327154304708</id><published>2013-11-28T22:58:00.002+11:00</published><updated>2016-05-26T20:14:25.262+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linguistics"/><title type='text'>Key approaches and methods in second language teaching</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Discuss a range of key approaches/methods in second language teaching that have been identified and gained traction in the literature as best practice. Illustrate how two (2) of those methods can be applied in a contemporary classroom including examples of interactions and written communication among second language learners and with their teacher.&lt;/h3&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-size: 16px; line-height: 1.5; text-align: justify; white-space: pre-wrap;&quot;&gt;Methods of language teaching have evolved rapidly between the late eighteenth century and modern days. Advancements in transportation and technology have been driving people’s mobility to higher levels across geopolitical boundaries, favoring the rise of wider international economies and labor dynamics. This process has also made it easier for people to move across linguistic boundaries, and the resulting pursuit of multilingualism has been a powerful driving factor for approaching language teaching methodologies in pragmatic and systematic ways. This essay will discuss a range of language teaching methods and the approaches they follow, providing examples of how two of them in particular (Communicative Language Teaching and Total Physical Response) can be applied in a contemporary classroom. The distinction between “approach” and “method” in this essay will follow the terminology formulated by Anthony (1963), according to whom an approach is the establishment of a set of assumptions used in the processes of teaching and learning, and a method is the way an approach is used to teach (and learn) a language in a systematic way. Also, this essay will use the terms “target language” and “first language” to indicate, respectively, the language being learnt in the classroom and the language usually spoken outside of the classroom.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The Grammar-Translation method was historically used to learn classical languages like ancient Greek and Latin, and is based on structural linguistic theories. In a Grammar-Translation classroom the teacher is usually in full control of the classroom activities, which are focused predominantly on the target language literature in a highly structure fashion, but taught exclusively in the students’ first language. The primary skills used are therefore reading and writing, with speaking and listening being underdeveloped or even disregarded altogether. Students learn how to translate literary texts of varying complexity, memorising grammar rules, constructs, and vocabulary. Just as in a Latin class students would learn to read and translate classical authors like Cicero and Caesar very early, students in a German class would learn to read and translate Goethe and Schiller. The emphasis is on producing the correct form of the target language through translation, therefore errors are not tolerated and are corrected by the teacher right away. This teaching method is driven by the belief that the most important aspect - the essence - of a language is its structure, and in order to learn and appreciate the language one needs to learn and appreciate its structure above all. Since grammar represents by definition the building blocks of linguistic structure, it is only natural to drive all intellectual efforts towards the understanding and the mastery of grammar and metalinguistic aspects of the language. One of the main criticisms of the Grammar-Translation method falls on the belief that building an encyclopaedic knowledge of linguistic rules and structures is synonymous with mastering a language. François Gouin’s first-hand experience with learning German at the end of the nineteenth century is an evident case to show the exact contrary, in which he was able to translate literary works but was completely unable to understand the spoken language - “not a single word” (1892, p.31).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Given the inability of the Grammar-Translation method to develop the communicative abilities of language students, new teaching methods started to appear. Building on his prior failures in the study of the German language, Gouin devised what came to be known as the Series Method: a way of building up linguistic knowledge through practical examples, transforming “perception into a conception” (1892, p.39). A Series Method class is therefore conducted entirely in the target language, using simple sentences at first in order to introduce an action or a situation. Sentences are then progressively enriched with more linguistic features towards higher and higher levels of complexity. For example, the teacher might start a basic class by walking to the desk and performing a series of simple actions while describing them to the students:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I walk to the desk.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I grab the chair.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I pull the chair.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I sit on the chair.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I grab a book.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I put the book on the desk.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;As sentences are connected, and as complexity increases only in relatively small increments between sentences, meaning is inferred from sensory context and grammar is learnt by induction. The principles of small incremental comprehensible input and learning language through language use were further developed by Krashen in a more comprehensive theory of second language acquisition (Krashen, 1982). The Series Method then evolved into what is known as the Direct Method, based on Gouin’s principle that second language learning should not be much different from first language learning. The fundamental cognitive approach of the Series Method is retained, but the classroom becomes an interactive partnership between teachers and students instead of being entirely teacher-driven. The main belief behind the Direct Method is that students must be able to directly associate language and meaning, focusing primarily on developing speaking and listening skills. Students are therefore encouraged to initiate interaction and to correct themselves and each other when possible. One of the main criticisms of the Series Method and the Direct Method was the lack of solid theoretical foundations (Brown, 2000). Also, it presented a number of practical challenges because teachers needed to develop a new set of skills in order to direct the learning away from structured static study focused on grammar towards interactive dynamic activities focused on meaning.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;As the mobility of people and resources increased dramatically during and after the Second World War, the need arose to find some ways to teach and learn foreign languages in the fastest possible way: from a military perspective, knowing the languages of enemies and allies was a distinct competitive advantage; from a socio-political perspective, masses of migrants fleeing conflict zones needed to be integrated in the host countries; and from a functional-practical perspective it was necessary to cross linguistic boundaries in order to efficiently drive socio-economic and industrial redevelopment, especially in Europe and in Northern America. As a result, the Audio-Lingual Method was developed on the foundations of behavioral psychology and adopted with relative success, focusing on learning specific linguistic structures within predefined practical linguistic domains. A common exercise in the classroom would be to present a situational dialog to the students and direct them to imitate and repeat each part of the dialog multiple times at specific intervals, aiming for accuracy in the language production. Over time, the presented dialogs would exhibit variations and drive the learning of different linguistic patterns. Imitation and repetition would then inevitably build up familiarity and confidence in the production of the target structures and the cultural context inferred by the presentation of those structures. One of the characteristics of the Audio-Lingual Method is overlearning: the process of getting so intimately familiar with a set of linguistic structures and patterns that their usage becomes automatic in circumstances and dialogs that bear similarities to those experienced during the learning process. With such a heavy focus on learning linguistic patterns, attention to grammar and metalinguistics is not a high priority and is often disregarded altogether, in favor of learning it inductively by analogy. Criticisms of the Audio-Lingual Method arose after Chomsky’s reservations on the relevance of behaviorist psychology in language learning (1959), and after all the main assumptions behind this teaching method were analytically dismantled by Rivers (1966).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Given the challenges and criticism found in the earlier mechanical forms of language learning, teaching methods were starting to shift away from heavily mechanical approaches, looking for techniques and strategies that would combine the focus on linguistic patterns with some form of meaningful context. Context is, of course, intended to be meaningful for students, and therefore teaching methodologies needed to be more mindful of the students’ personal characteristics and the ways in which they actually learn. In order to successfully assimilate language, learners need to use it in some practical context, and this context needs to be meaningful. Krashen later developed this and other concepts much further, noting that language acquisition is a subconscious process in which “language acquirers are not usually aware of the fact that they are acquiring the language, but are only aware of the fact that they are using the language” (1982, p.10). Following both cognitive and affective approaches, the Total Physical Response method took shape. In the Total Physical Response method, teachers give commands to students, and students execute those commands by performing physical actions. Teachers may well join in, and commands are carefully modified and recombined in order to provide students with linguistic content that, even though it might be a bit beyond their comprehension (Krashen, 1982), is still understandable by inference or induction. Learners are not expected to engage in language production and they are free to do so whenever they feel ready. It is very important to recognise that, even without writing and speaking, “there is a huge amount of listening, understanding and internalising going on” (Scrivener 2011, p.324). This needs to be considered under the evidence that listening is a skill that children develop long before speaking, and following the approach that learning a target language is cognitively analogous to learning a first language, hence the focus on kinaesthetics and the manipulation of the environment (Asher, 1978).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;It is worth looking at the Total Physical Response method in a little more detail and provide an example in a contemporary classroom. In a basic classroom for children the teacher might be leading in with the topic of “morning activities”. The teacher would introduce a sequence of sentences, one at a time:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Wake up&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Stretch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Sit up&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Stand up&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Scratch your head&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Scratch your belly&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Walk to the bathroom&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Look at the mirror&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Make a funny face&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Make a serious face&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Brush your teeth&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Dress up&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Eat breakfast&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Wash up&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Pick up your school bag&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Pick up your hat&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Open the door&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Go outside&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Turn around&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Close the door&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Turn around&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-left: 29pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Go to school&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The teacher would act each command and encourage all students to do the same. Using different commands that have a common syntactical structure (e.g. “make... ...face”, “pick up...”) helps students infer both lexicon and grammar, while the acting and participation help associating words and sentences with direct experiences that are much more likely to get assimilated into long-term memory than any purely mechanical linguistic exercise. The similarities with the Series Method and the Direct Method are evident, but the Total Physical Response goes much further, building a tight coupling between language, sensory information, and the manipulation of the learner’s environment through actions, in a dynamic interactive setting where students and teachers actually participate in building and reshaping the linguistic context being studied, becoming themselves part of the overall teaching and learning canvas.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;With Total Physical Response, Language learning started to be considered something more than a purely mechanical process leading to the formation of habits, and eventually functional linguistics started to develop. The focus was shifting towards teaching language as a means for communication and expression, under the belief that building communicative competence would then lead to – and ultimately include – linguistic competence (Canale &amp;amp; Swain, 1980). Increased importance was then given to the social and situational contexts in which linguistic interactions were taking place. According to Halliday (1973), language evolved as part of the process of performing specific functions in a social context; it logically follows then that language should be learnt and taught within defined social and functional contexts, rather than being extracted or abstracted from them as a totally independent domain. Communicative Language Teaching follows a functional/communicative approach, aiming at building up the linguistic tools that allow language users to convey meaning through communication. Errors in language production are part of the natural learning process and are therefore accepted, as long as they do not interfere with the exchange and negotiation of meaning. Students are encouraged to interact with each other and to give feedback to each other. The teacher provides the initial setup for classroom activities and loosely manages the classroom dynamics while students tackle the activities in small groups. Activities are usually centred around specific linguistic problems defined by information gaps that exist within a given social context, and students will have to decide how to best fill those gaps, choosing what to say and how to say it, establishing and maintaining the flow of information within their groups, engaging “with text and meaning through language use and discovery” (Savignon 2002, p.22). Linguistic forms are taught relative to the functions being targeted, but are neither emphasised nor strictly enforced, with the focus being on negotiation of meaning and discourse. The role of the teacher is that of facilitator, while students can focus on their own learning process and progress through authentic communication (Brown 2000, p. 43).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Communicative Language Teaching is considered to be the “generally accepted norm in the field” (Brown 2000, p.42), but there is no specific syllabus, as it is more of a generic term to indicate more a philosophy than a defined methodology, and is consequently open to interpretation. It is therefore worth providing an example of how Communicative Language Teaching principles may be applied to a contemporary classroom. Considering an intermediate-level classroom for adults, the teacher might decide to focus on the development of fluency and direct the class to perform some role-playing activities. For example, the teacher would lead in with a presentation of pictures that set the stage at a restaurant. Students would first describe and discuss the pictures in small groups in order to frame the social and linguistic contexts. Each student in a group would then be given a role to play, e.g. customer, waiter, chef, concierge, and a specific situation (or a number of situations) to be developed, like booking a table, suggestions for a meal, dealing with a difficult customer, making a mistake in the order, or handling an expired credit card. Students would improvise throughout the class and continuously provide feedback through discourse, thereby putting them in charge of their own and each other’s learning.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;This essay has examined a number of key methods in second language teaching that have raised interest in linguistic circles and academia. Since the systematic study and analysis of language teaching methodologies started relatively recently in humanistic terms, there is still much to say as to how language teaching methodologies will evolve in the future. The very notion of a language classroom has changed so much over time, from a room with walls and desks to a distributed virtual space that only exists as a stream of digital information. Contemporary teaching methods for languages as well as other subjects seem to have some common aspects, like the encouragement of interaction, the use of varying instructional methods to meet diverse student needs, and the active involvement of students in the learning process (OECD 2008, p.6). As time goes by and societies evolve, new linguistic challenges will emerge and the language teaching profession will have to provide at least some of the means in the social transformation to work on those new challenges, creating valuable personal assets and competitive advantages.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span id=&quot;docs-internal-guid-789697ae-9e91-9299-20cf-fc155fedaaed&quot;&gt;Marco Scata&lt;br /&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;References&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Anthony, E. M. (1963). Approach, method, and technique. &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;English Language Teaching, &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;17(2), 63-67.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Asher, J. J. (1977). &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Learning another language through actions: the complete teacher’s guidebook.&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Los Gatos, CA: Sky Oaks Productions.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Brown, H. D. (2000). &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Principles of language learning and teaching&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (fourth edition). New York: Addison Wesley Longman.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Canale, M. and Swain, M. (1980). Theoretical bases of communicative approaches to second language teaching and testing. &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Applied linguistics&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;, 1, pp. 1-47.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Chomsky, N., (1959). A review of B. F. Skinner&#39;s verbal behavior. &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Language&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;, 35(1), pp. 26-58.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Gouin, F., (1892).&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; The art of learning and studying foreign languages &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;(second edition). London: G. Philip &amp;amp; Son.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Halliday, M. A. K., (1973). &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Explorations in the function of language.&lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; London: Edward Arnolds.&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Krashen, S., (1982). Second language acquisition theory. In &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Principles and practice in second language learning and acquisition&lt;/span&gt;&lt;span style=&quot;font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (pp. 9–32). Oxford: Pergamon.&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;LIN8002 Methodology in teaching a second language: Study Book.&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (2013). Toowoomba: University of Southern Queensland.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Richards, J. C., (2006). &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Communicative language teaching today.&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Cambridge: Cambridge University Press.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Richards, J. C., &amp;amp; Renandya, W. A. (2002). &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Methodology in language teaching: An anthology of current practice.&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; Cambridge: Cambridge University Press.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Rivers, W., (1966). The psychologist and the foreign-language teacher. &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The French review.&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; 39(4), pp. 636-638.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Savignon, S. J., (2002). &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Interpreting communicative language teaching contexts and concerns in teacher education&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;. New Haven: Yale University Press.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.5; margin-bottom: 8pt; margin-left: 28.5pt; margin-top: 0pt; text-align: justify; text-indent: -28.5pt;&quot;&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Scrivener, J. (2011). &lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Learning teaching. The essential guide to English language teaching&lt;/span&gt;&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (third edition). Oxford: MacMillan.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white; font-size: 16px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/1020618327154304708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/1020618327154304708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/1020618327154304708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/1020618327154304708'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2013/11/key-approaches-and-methods-in-second.html' title='Key approaches and methods in second language teaching'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-9084056078047866216</id><published>2013-07-20T15:27:00.001+10:00</published><updated>2013-07-20T15:28:33.962+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="games"/><title type='text'>City Quiz for iPhone</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I liked this little quiz game. Here are the solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Dubai&lt;/li&gt;
&lt;li&gt;London&lt;/li&gt;
&lt;li&gt;Paris&lt;/li&gt;
&lt;li&gt;Amsterdam&lt;/li&gt;
&lt;li&gt;New York&lt;/li&gt;
&lt;li&gt;Los Angeles&lt;/li&gt;
&lt;li&gt;Moscow&lt;/li&gt;
&lt;li&gt;Rome&lt;/li&gt;
&lt;li&gt;Male&lt;/li&gt;
&lt;li&gt;Beijing&lt;/li&gt;
&lt;li&gt;Milan&lt;/li&gt;
&lt;li&gt;Florence&lt;/li&gt;
&lt;li&gt;Chicago&lt;/li&gt;
&lt;li&gt;Athens&lt;/li&gt;
&lt;li&gt;San Francisco&lt;/li&gt;
&lt;li&gt;Toronto&lt;/li&gt;
&lt;li&gt;Sydney&lt;/li&gt;
&lt;li&gt;Barcelona&lt;/li&gt;
&lt;li&gt;Delhi&lt;/li&gt;
&lt;li&gt;Puerto Iguazu&lt;/li&gt;
&lt;li&gt;Miami&lt;/li&gt;
&lt;li&gt;Munich&lt;/li&gt;
&lt;li&gt;Monaco&lt;/li&gt;
&lt;li&gt;San Diego&lt;/li&gt;
&lt;li&gt;Tokyo&lt;/li&gt;
&lt;li&gt;Cairo&lt;/li&gt;
&lt;li&gt;Istanbul&lt;/li&gt;
&lt;li&gt;Lhasa&lt;/li&gt;
&lt;li&gt;Brussels&lt;/li&gt;
&lt;li&gt;Las Vegas&lt;/li&gt;
&lt;li&gt;Hong Kong&lt;/li&gt;
&lt;li&gt;Prague&lt;/li&gt;
&lt;li&gt;Montreal&lt;/li&gt;
&lt;li&gt;Bangkok&lt;/li&gt;
&lt;li&gt;Geneva&lt;/li&gt;
&lt;li&gt;Melbourne&lt;/li&gt;
&lt;li&gt;Shanghai&lt;/li&gt;
&lt;li&gt;Rio de Janerio&lt;/li&gt;
&lt;li&gt;Dublin&lt;/li&gt;
&lt;li&gt;Punta Cana&lt;/li&gt;
&lt;li&gt;Mecca&lt;/li&gt;
&lt;li&gt;Lisbon&lt;/li&gt;
&lt;li&gt;Vatican&lt;/li&gt;
&lt;li&gt;Houston&lt;/li&gt;
&lt;li&gt;Havana&lt;/li&gt;
&lt;li&gt;Venice&lt;/li&gt;
&lt;li&gt;Berlin&lt;/li&gt;
&lt;li&gt;Dallas&lt;/li&gt;
&lt;li&gt;Jerusalem&lt;/li&gt;
&lt;li&gt;Washington&lt;/li&gt;
&lt;li&gt;Madrid&lt;/li&gt;
&lt;li&gt;Taipei&lt;/li&gt;
&lt;li&gt;Atlanta&lt;/li&gt;
&lt;li&gt;Bucharest&lt;/li&gt;
&lt;li&gt;Edinburgh&lt;/li&gt;
&lt;li&gt;Valencia&lt;/li&gt;
&lt;li&gt;Lima&lt;/li&gt;
&lt;li&gt;Luxor&lt;/li&gt;
&lt;li&gt;Copenhagen&lt;/li&gt;
&lt;li&gt;Shenzhen&lt;/li&gt;
&lt;li&gt;Marrakesh&lt;/li&gt;
&lt;li&gt;Petra&lt;/li&gt;
&lt;li&gt;Stockholm&lt;/li&gt;
&lt;li&gt;Zurich&lt;/li&gt;
&lt;li&gt;Auckland&lt;/li&gt;
&lt;li&gt;Ho Chi Minh&lt;/li&gt;
&lt;li&gt;Seattle&lt;/li&gt;
&lt;li&gt;Singapore&lt;/li&gt;
&lt;li&gt;Chiang Mai&lt;/li&gt;
&lt;li&gt;Agra&lt;/li&gt;
&lt;li&gt;Palermo&lt;/li&gt;
&lt;li&gt;Macau&lt;/li&gt;
&lt;li&gt;Mexico City&lt;/li&gt;
&lt;li&gt;Ushuaia&lt;/li&gt;
&lt;li&gt;Buenos Aires&lt;/li&gt;
&lt;li&gt;Bogota&lt;/li&gt;
&lt;li&gt;Boston&lt;/li&gt;
&lt;li&gt;Siem Reap&lt;/li&gt;
&lt;li&gt;Bali&lt;/li&gt;
&lt;li&gt;Oslo&lt;/li&gt;
&lt;li&gt;Budapest&lt;/li&gt;
&lt;li&gt;Orlando&lt;/li&gt;
&lt;li&gt;Seville&lt;/li&gt;
&lt;li&gt;Kiev&lt;/li&gt;
&lt;li&gt;Cancun&lt;/li&gt;
&lt;li&gt;Vienna&lt;/li&gt;
&lt;li&gt;Manila&lt;/li&gt;
&lt;li&gt;Chennai&lt;/li&gt;
&lt;li&gt;Cannes&lt;/li&gt;
&lt;li&gt;Pattaya&lt;/li&gt;
&lt;li&gt;Kathmandu&lt;/li&gt;
&lt;li&gt;Antalya&lt;/li&gt;
&lt;li&gt;Jakarta&lt;/li&gt;
&lt;li&gt;Honolulu&lt;/li&gt;
&lt;li&gt;Warsaw&lt;/li&gt;
&lt;li&gt;Ha Noi&lt;/li&gt;
&lt;li&gt;Santorini&lt;/li&gt;
&lt;li&gt;Sao Paulo&lt;/li&gt;
&lt;li&gt;Seoul&lt;/li&gt;
&lt;li&gt;Riyadh&lt;/li&gt;
&lt;li&gt;Goa&lt;/li&gt;
&lt;li&gt;Phnom Penh&lt;/li&gt;
&lt;li&gt;St Petersburg&lt;/li&gt;
&lt;li&gt;New Orleans&lt;/li&gt;
&lt;li&gt;Kuala Lumpur&lt;/li&gt;
&lt;li&gt;Phuket&lt;/li&gt;
&lt;li&gt;Cape Town&lt;/li&gt;
&lt;li&gt;Vancouver&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Enjoy!&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/9084056078047866216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/9084056078047866216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/9084056078047866216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/9084056078047866216'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2013/07/city-quiz-for-iphone.html' title='City Quiz for iPhone'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-8378284701965421330</id><published>2013-05-23T23:20:00.002+10:00</published><updated>2019-10-06T05:18:36.374+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="continuous delivery"/><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration"/><category scheme="http://www.blogger.com/atom/ns#" term="SDLC"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering"/><title type='text'>Trying Continuous Delivery - Part 2</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;In the &lt;a href=&quot;http://marcoscata.blogspot.com.au/2013/05/continuous-delivery-in-practice-part-1.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt; I set up my development tools and my virtual UAT environment, using Subversion to control configuration changes to UAT. Now I can introduce automation in my setup.&lt;br /&gt;
&lt;br /&gt;
There are several platforms that can help with automation, and they all do pretty much the same thing (execute jobs) in slightly different ways, but my vote goes to Jenkins for a few reasons:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;It&#39;s free.&lt;/li&gt;
&lt;li&gt;It&#39;s a mature platform with a very large user base.&lt;/li&gt;
&lt;li&gt;It is plugin-based, so I can install and configure only the functionality that I actually need.&lt;/li&gt;
&lt;li&gt;I can see fairly easily which plugins are actively maintained and use only those.&lt;/li&gt;
&lt;li&gt;It&#39;s really easy to use.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
I could install Jenkins on my laptop &lt;a href=&quot;http://pkg.jenkins-ci.org/debian/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;using apt-get&lt;/a&gt;, but since I already have a local Tomcat  I will just &lt;a href=&quot;http://mirrors.jenkins-ci.org/war/latest/jenkins.war&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;download the war file&lt;/a&gt; and run it inside my Tomcat container. Later on I will use Tocmat to also run &lt;a href=&quot;http://www.jfrog.com/home/v_artifactory_opensource_download&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Artifactory&lt;/a&gt;, but I shall leave that part for another post.&lt;br /&gt;
&lt;br /&gt;
Jenkins is already a usfeul platform &quot;out of the box&quot;, but for my setup I need to add more functionality. There are many plugins available to add new functionality to Jenkins and integrate with different tools and platforms. However, for the purposes of configuring a job, I want to avoid using plugins as much as possible, relying on shell commands instead. This is not always feasible or practical, but that&#39;s the intention. The reason is that in a contingency situation where Jenkins might be unavailabl e I can always retrieve the shell commands from the Jenkins configuration and execute them by hand if needed. If I had to rely on Jenkins plugins to do the work for me, I wouldn&#39;t be able to keep things going in a contingency scenario. For example, if one of the steps in a Jenkins job was to publish a file to Artifactory, and I used the Artifactory plugin to perform that step, then in the event that Jenkins becomes unavailable I would have to devise a different way to publish the file (for example using Maven, or logging in to Artifactory and using the deployment page). This, however, contravenes one of the principles of continuous delivery: executing a task the same way every time. On the other hand, if I use a sequence of shell commands to achieve the same purpose, then I can always retrieve that sequence of commands from source control and execute it by hand if necessary, thereby operating still within the guidelines of continuous delivery. In many cases I could even temporarily use a cron job until I manage to get Jenkins back online, and nobody would even notice the difference.&lt;br /&gt;
&lt;br /&gt;
Having said that, there are plugins that relate to Jenkins administration activities that I am very fond of. One of them is the &lt;a href=&quot;https://wiki.jenkins-ci.org/display/JENKINS/SCM+Sync+configuration+plugin&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;SCM Sync Plugin&lt;/a&gt;. This plugin allows me to easily store and maintain all the Jenkins configurations (global and job-specific) into source control. Once configured, every change I make to a job&#39;s configuration or to the global configuration will be automatically checked in to source control. I create a new subversion repository, configure the SCM Sync Plugin to hook up to it, and check that the initial import worked before I move on.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; mkdir -p ~/svnrepo/jenkins
&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; svnadmin create ~/svnrepo/jenkins
&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; svnserve -d -r ~/svnrepo --foreground --log-file ~/svnserve.log --listen-host 192.168.56.1
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixVrKqaBHPspmoyydge6SOuxl3W1NxfntISIgxBcrMgSpDOMRPEPrjN3ZrRmuSUjQ_yCYp0K0Wgas6qp49dYabxpvC7FYGpBQJH_-wa-rgzgDEsBIAJYf6Ox9dUq86CjtYoENZYYKQ7YM/s1600/Jenkins-SCMSync.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixVrKqaBHPspmoyydge6SOuxl3W1NxfntISIgxBcrMgSpDOMRPEPrjN3ZrRmuSUjQ_yCYp0K0Wgas6qp49dYabxpvC7FYGpBQJH_-wa-rgzgDEsBIAJYf6Ox9dUq86CjtYoENZYYKQ7YM/s320/Jenkins-SCMSync.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre&gt;&lt;i&gt;(a different shell)&lt;/i&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; svn list svn://192.168.56.1/jenkins/trunk
config.xml
hudson.maven.MavenModuleSet.xml
hudson.scm.CVSSCM.xml
hudson.scm.SubversionSCM.xml
hudson.tasks.Ant.xml
hudson.tasks.Mailer.xml
hudson.tasks.Maven.xml
hudson.tasks.Shell.xml
hudson.triggers.SCMTrigger.xml
scm-sync-configuration.xml
&lt;/pre&gt;&lt;br /&gt;
This helps tremendously in a disaster recovery scenario where I might have to rebuild the Jenkins server from scratch, in which case I would simply check out the configuration from source control before starting up Jenkins. This is a very efficient and effective way of reconstructing the pre-disaster state of Jenkins exactly the way it was. Even in normal circumstances, I will now be able to revert to a previous known good state in case I happen to make some configuration changes and mess it up really bad, or even just if I don&#39;t particularly like the end result for whatever reason.&lt;br /&gt;
&lt;br /&gt;
Now I can create a new Jenkins job that will update the Tomcat configuration on my virtual server whenever an updated configuration exists in source control. As soon as I create the job and hit the save button, its details will automatically be checked into source control thanks to the SCM Sync Plugin. The new job will be called &quot;UAT_Update_Env&quot; and its logical steps are going to be:&lt;br /&gt;
&lt;br /&gt;
1) check Subversion repositories for changes and trigger the job when an update is available&lt;br /&gt;
2) SSH into the virtual server&lt;br /&gt;
3) update Tomcat6 configuration directories&lt;br /&gt;
4) restart Tomcat6 service&lt;br /&gt;
5) test configuration changes and fail the job if the test is unsuccessful&lt;br /&gt;
&lt;br /&gt;
In order to SSH into the virtual server from a non-interactive session, I need first to add the virtual server&#39;s fingerprint to my local known hosts. I can do this by running an SSH session from the terminal on my laptop. On the virtual server I need to set up a user that will be dedicated to continuous delivery operations, and give this user some elevated privileges because it must be able to update the tomcat configuration and restart tomcat. I have chosen a user called &quot;contdel&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; ssh contdel@192.168.56.2 pwd
The authenticity of host &#39;192.168.56.2 (192.168.56.2)&#39; can&#39;t be established.
ECDSA key fingerprint is 91:b2:ec:f9:15:c2:ac:cd:e2:01:d7:23:11:e0:17:db.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added &#39;192.168.56.2&#39; (ECDSA) to the list of known hosts.
contdel@192.168.56.2&#39;s password: 
/home/contdel
&lt;/pre&gt;&lt;br /&gt;
In order to avoid interactive password prompts during the execution of the automated job, I choose to use private/public key authentication with SSH, so I generate the key on the virtual server and scp it to my laptop so that is visible to Jenkins. I could simply store it in Subversion, which is ok for the purposes of writing this series, but in a real production scenario I wouldn&#39;t do that.&lt;br /&gt;
&lt;br /&gt;
There is one more thing I need to do on the virtual server, and it&#39;s to set up the correct access on the configuration files that I will update through automation and the restart script. I have already set up the user &quot;contdel&quot; on the virtual server, which is in the sudoers list. The permissions on the Tomcat configuration folder are set so that the owner (root) has read/write/execute rights, the group (root) has read/execute rights, and everyone else has read/execute rights.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: lime;&quot;&gt;UAT$&lt;/span&gt; ls -lsah /etc/tomcat6
total 100K
4.0K drwxr-xr-x   5 root root    4.0K May  8 22:18 .
4.0K drwxr-xr-x  94 root root     12K May 20 22:30 ..
4.0K drwxrwxr-x   4 root tomcat6 4.0K May  8 22:18 Catalina
4.0K -rw-r--r--   1 root tomcat6 4.0K Jan 11 02:24 catalina.properties
4.0K -rw-r--r--   1 root tomcat6 1.4K Aug  5  2007 context.xml
4.0K -rw-r--r--   1 root tomcat6 2.4K Dec 13  2011 logging.properties
4.0K drwxr-xr-x   3 root tomcat6 4.0K May  8 22:18 policy.d
8.0K -rw-r--r--   1 root tomcat6 6.6K Jan 11 02:24 server.xml
4.0K drwxr-xr-x   6 root root    4.0K May  8 22:18 .svn
4.0K -rw-r-----   1 root tomcat6 1.5K Nov  4  2010 tomcat-users.xml
52K -rw-r--r--   1 root tomcat6  52K Nov 11  2011 web.xml
&lt;/pre&gt;&lt;br /&gt;
As it is, I still need sudo to do an svn update, which is fine from an interactive terminal, but it wouldn&#39;t work from a non-interactive Jenkins ssh session. If I did that, I would get an error similar to this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;sudo: no tty present and no askpass program specified
Sorry, try again.
&lt;/pre&gt;&lt;br /&gt;
This happens because the sudo command prompts for the user&#39;s password, which is obviously not going to work in a non-interactive session. What I can do is change the sudoers configuration to allow the user contdel to restart tomcat using sudo without a password prompt. The instructions on how to do so are on the &lt;a href=&quot;https://help.ubuntu.com/community/RootSudo&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Ubuntu help site&lt;/a&gt;. In the latest version of Ubuntu, the sudoers file will automatically include other configuration files stored in /etc/sudoers.d/ so I can avoid editing /etc/sudoers (which is a good thing) and add my changes to /etc/sudoers.d/contdel, so if I happen to mess up a directive I can easily revert back by removing the new config file and try again.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: lime;&quot;&gt;UAT$&lt;/span&gt; sudo visudo -f /etc/sudoers.d/contdel
...
# Allow user contdel to restart tomcat via sudo without a password prompt
contdel ALL=(ALL:ALL) NOPASSWD:/etc/init.d/tomcat6
...

&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; ssh contdel@192.168.56.2 sudo /etc/init.d/tomcat6 restart
contdel@192.168.56.2&#39;s password: 
* Stopping Tomcat servlet engine tomcat6
...done.
* Starting Tomcat servlet engine tomcat6
...done.
&lt;/pre&gt;&lt;br /&gt;
Note that the password prompt comes from the local ssh command, not from the remote sudo command.&lt;br /&gt;
&lt;br /&gt;
I can make it a little more secure by doing two things:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Restrict the sudoers directive for contdel so that it only applies when the command comes from the local network.&lt;/li&gt;
&lt;li&gt;Use private/public key authentication for user contdel instead of username/password. This is particularly useful for Jenkins configurations that might or might not expose the password in the logs (or anywhere else).&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
However, I am still more interested in getting the update job going, so I&#39;ll go ahead and create the UAT_Update_Env job. In my &lt;a href=&quot;http://marcoscata.blogspot.com.au/2013/05/continuous-delivery-in-practice-part-1.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt; I set up the directory structure in source control that will hold all the relevant files in my project: not only the application code, but also all configuration files for the environment and the database script. The environment configuration files are in &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$SVN_ROOT/envsetup/[environmentID]&lt;/span&gt;, which for UAT means &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$SVN_ROOT/envsetup/UAT&lt;/span&gt;. This job will therefore look for source control changes in &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;svn://192.168.56.1/mywebapp/trunk/envsetup/UAT&lt;/span&gt; every five minutes, and if any changes are detected it will apply them via SSH to the UAT virtual server.&lt;br /&gt;
&lt;br /&gt;
In terms of how the commands will actually be executed, I have two equally viable options:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;I tell Jenkins to open a local shell and execute remote commands on UAT via SSH.&lt;/li&gt;
&lt;li&gt;I tell Jenkins to start a slave on UAT that will execute shell commands locally&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Just to keep things simple at this point in time, I&#39;ll go for the second option and use the &lt;a href=&quot;https://wiki.jenkins-ci.org/display/JENKINS/SSH+Slaves+plugin&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;SSH Slaves plugin&lt;/a&gt; that comes with the latest Jenkins &quot;out of the box&quot;. I therefore need to create a new Jenkins slave called &quot;UAT&quot; that will run on my virtual server. Under the hood, Jenkins will connect to my virtual server via SSH, upload the slave configuration and binaries, and launch the slave process on the virtual server. When I set up my job in Jenkins, I will configure it to run only on the newly configured slave, and by so doing all commands and script will be executed by the slave on the virtual server. The root Jenkins directory on the new node will receive all files from the Jenkins master. These files will change often and after a job gets executed a number of times they can build up fairly quickly. I don&#39;t want to spend any effort cleaning them up regularly, so I&#39;ll just use &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/tmp&lt;/span&gt; as the root Jenkins directory. All files in there will disappear after each reboot.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1REhISgVPBFlAvjyXyPGpoIgKHybArN9sR3qHj1h95vdi8Jb8pLs5biV4QCA8wxgpD7Pok6ku4tHRqyWQeU0t_t0FYoApJaf9jDu6JDteCTbWQKp_sLRNeBRG0gp0JDYLMeNkDDpRGXE/s1600/Jenkins-UATNode.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1REhISgVPBFlAvjyXyPGpoIgKHybArN9sR3qHj1h95vdi8Jb8pLs5biV4QCA8wxgpD7Pok6ku4tHRqyWQeU0t_t0FYoApJaf9jDu6JDteCTbWQKp_sLRNeBRG0gp0JDYLMeNkDDpRGXE/s320/Jenkins-UATNode.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The UAT_Update_Env job has the following characteristics.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;The job is restricted to run onthe &quot;UAT&quot; node only.&lt;/li&gt;
&lt;li&gt;The job monitors the configuration files in Subversion for changes every 5 minutes.&lt;/li&gt;
&lt;li&gt;The job executes &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;svn update /etc/tomcat6&lt;/span&gt; followed by &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;sudo /etc/init.d/tomcat6 restart&lt;/span&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEfUGNZ1iXx9HGovPGpcLb3LWteggF2jXpOkGjB8oZaBJZWzgOhXNp4-DB3Me8gyBIS_2VMOcgw9_0g0aDVvlHI7obuZlRMYQmowLTOEUclHM5rlOd7JbSy6RGO1NdbsktuNDG0BN7gcs/s1600/Jenkins-RestrictJob.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEfUGNZ1iXx9HGovPGpcLb3LWteggF2jXpOkGjB8oZaBJZWzgOhXNp4-DB3Me8gyBIS_2VMOcgw9_0g0aDVvlHI7obuZlRMYQmowLTOEUclHM5rlOd7JbSy6RGO1NdbsktuNDG0BN7gcs/s320/Jenkins-RestrictJob.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrGzIVY3DqtLOYQFKXGlqPbv5vM3kCpTaGZ3ZbHwH80ODKkTjHDK99R-K-_0cBjmyBp2Vy4OZiyo1YhQf0Naa2U51E3fywHYVjU2u9VPzAN6U_cz5NjKN8f29qELrs9ew_rdtQJdqpw1g/s1600/Jenkins-UATExecute.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrGzIVY3DqtLOYQFKXGlqPbv5vM3kCpTaGZ3ZbHwH80ODKkTjHDK99R-K-_0cBjmyBp2Vy4OZiyo1YhQf0Naa2U51E3fywHYVjU2u9VPzAN6U_cz5NjKN8f29qELrs9ew_rdtQJdqpw1g/s320/Jenkins-UATExecute.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Running the job verifies that it&#39;s all good.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Started by user anonymous
Building remotely on UAT in workspace /tmp/jenkins_slave/workspace/UAT_Update_Env
Cleaning local Directory .
Checking out svn://192.168.56.1/mywebapp/trunk/envsetup/UAT at revision &#39;2013-05-23T16:59:19.322 +1000&#39;
At revision 17
no change for svn://192.168.56.1/mywebapp/trunk/envsetup/UAT since the previous build
[UAT_Update_Env] $ /bin/sh -xe /tmp/hudson603902310922720127.sh
+ svn update /etc/tomcat6
At revision 17.
+ sudo /etc/init.d/tomcat6 restart
* Stopping Tomcat servlet engine tomcat6
...done.
* Starting Tomcat servlet engine tomcat6
...done.
Finished: SUCCESS&lt;/pre&gt;&lt;br /&gt;
In order to test that Tomcat is actually working, I have to fire an HTTP request to the Tomcat server and check that it doesn&#39;t spit out an error. To do this I create a new Jenkins job called UAT_Verify_Env that uses curl to connect to the virtual server on port 8080. If a connection error occurs, curl will return an error and the job will fail. Since I am interested in verifying a successful connection and not in the actual output of the curl command, I can redirect the output to &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;/dev/null&lt;/span&gt;. The UAT_Verify_Env job therefore executes one simple shell command:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;curl http://192.168.56.2:8080 -o /dev/null
&lt;/pre&gt;&lt;br /&gt;
This job will be executed on the Jenkins master, not on the UAT slave, in order to verify external connectivity within the virtual network. Running this job on the UAT slave will only verify connectivity to the local network adapter.&lt;br /&gt;
&lt;br /&gt;
Now I can test the full cycle: check out the tomcat configuration to a local workspace on my laptop, then change the HTTP connector port in server.xml, commit the changes, wait for Jenkins to figure out there are modifications in the source repository and fire the update job, then wait for the job to complete and use curl to check that tomcat is actually now listening on the new port. If I change the port to 8081 I will see the job UAT_Verify_Env fail, which is a good thing because it will prove that I have a way to quickly feed back a wrong environment configuration. &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Started by user anonymous
Building on master in workspace /var/local/jenkins/jobs/UAT_Verify_Env/workspace
[workspace] $ /bin/sh -xe /tmp/tomcat6-tomcat6-tmp/hudson1161186187774233720.sh
+ curl http://192.168.56.2:8080 -o /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) couldn&#39;t connect to host
Build step &#39;Execute shell&#39; marked build as failure
Finished: FAILURE
&lt;/pre&gt;&lt;br /&gt;
Changing the port back to 8080 and checking in the changes to source control will get everything back on a happy path.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Started by user anonymous
Building on master in workspace /var/local/jenkins/jobs/UAT_Verify_Env/workspace
[workspace] $ /bin/sh -xe /tmp/tomcat6-tomcat6-tmp/hudson2858331979742011098.sh
+ curl http://192.168.56.2:8081 -o /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  1887  100  1887    0     0   260k      0 --:--:-- --:--:-- --:--:--  921k
Finished: SUCCESS
&lt;/pre&gt;&lt;br /&gt;
In a similar fashion as for Tomcat, I can extend this process to also update the MySQL configuration. I will skip the detailed description here, but it follows exactly the same principles as above: make sure that user contdel can perform an &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;svn update&lt;/span&gt; on the MySQL configuration folders and files, allow user contdel to restart MySQL via sudo without a password prompt, and add the relevant shell commands to the existing job configuration, then amend the UAT_Update_Env and UAT_Verify_Env jobs in Jenkins to account for canges in MySQL configuration.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/8378284701965421330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/8378284701965421330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/8378284701965421330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/8378284701965421330'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2013/05/continuous-delivery-in-practice-part-2.html' title='Trying Continuous Delivery - Part 2'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixVrKqaBHPspmoyydge6SOuxl3W1NxfntISIgxBcrMgSpDOMRPEPrjN3ZrRmuSUjQ_yCYp0K0Wgas6qp49dYabxpvC7FYGpBQJH_-wa-rgzgDEsBIAJYf6Ox9dUq86CjtYoENZYYKQ7YM/s72-c/Jenkins-SCMSync.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-6205035052905540694</id><published>2013-05-13T22:34:00.001+10:00</published><updated>2019-10-06T05:18:36.288+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="continuous delivery"/><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration"/><category scheme="http://www.blogger.com/atom/ns#" term="SDLC"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering"/><title type='text'>Trying Continuous Delivery - Part 1</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: red;&quot;&gt;Please note: I am making this stuff up as I go along, so I may have to update each post at a later stage to reflect some changes that I think might make things easier to manage.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;In a &lt;a href=&quot;http://marcoscata.blogspot.com.au/2013/04/continuous-delivery-in-practice.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt; I introduced this series looking at continuous delivery from a practical standpoint, taking a simple web application and automating its lifecycle. This post outlines the initial setup of the continuous delivery system. These are the steps I will follow:&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Install VirtualBox, Subversion and Tomcat on my laptop&lt;/li&gt;
&lt;li&gt;Prepare Ubuntu Server virtual machine with Subversion and Tomcat&lt;/li&gt;
&lt;li&gt;Set up SVN repository and user access list on my laptop&lt;/li&gt;
&lt;li&gt;SVN checkin Tomcat settings from virtual server&lt;/li&gt;
&lt;li&gt;SVN checkout Tomcat settings onto my laptop&lt;/li&gt;
&lt;li&gt;SVN checkin modified Tomcat settings from my laptop&lt;/li&gt;
&lt;li&gt;SVN update Tomcat settings on the virtual server&lt;/li&gt;
&lt;li&gt;Restart Tomcat on the virtual server and verify changes&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Installing VirtualBox and Subversion on my Ubuntu laptop is straightforward with &lt;a href=&quot;https://help.ubuntu.com/8.04/serverguide/apt-get.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;apt-get&lt;/a&gt;, &lt;br /&gt;
but the Ubuntu Software Centre makes it even easier.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2lEJpG2enEez5Wg8WAbZvWLqyZVs1XeuqmWLwA2dcLtu_EK44n6J6YPLYVnMlr54enRlXbuhw0BZHUPI0J0iXaTSFQmeygQsN7yzybsxKFnlmeO12NSROs3ax6VrmTJMQXRfb9jReGXw/s1600/UbuntuSoftwareCentre.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;218&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2lEJpG2enEez5Wg8WAbZvWLqyZVs1XeuqmWLwA2dcLtu_EK44n6J6YPLYVnMlr54enRlXbuhw0BZHUPI0J0iXaTSFQmeygQsN7yzybsxKFnlmeO12NSROs3ax6VrmTJMQXRfb9jReGXw/s320/UbuntuSoftwareCentre.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
I can then prepare the virtual server by downloading &lt;a href=&quot;http://www.ubuntu.com/download/server&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;the relevant ISO image&lt;/a&gt; and hooking it up to the virtual DVD of a new virtual machine. After installing Ubuntu Server I have a new environment ready to be configured as my integration box.&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9UbLNXW9ISBrJccHt9pwPODriYcYxjoH0R9hv5G7ljujI0FD7g3H7mLdeu0qstpUxseaZ51gW7GhnYiY1x95ZX88qneyMiorVHnNyGPh0Xo3ACZ6jNX4dhbbmZKosYSCU5VBYqESiBhw/s1600/VirtualBox-NewVM-Summary.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;304&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9UbLNXW9ISBrJccHt9pwPODriYcYxjoH0R9hv5G7ljujI0FD7g3H7mLdeu0qstpUxseaZ51gW7GhnYiY1x95ZX88qneyMiorVHnNyGPh0Xo3ACZ6jNX4dhbbmZKosYSCU5VBYqESiBhw/s320/VirtualBox-NewVM-Summary.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
By default, the virtual machine has a NAT network adapter and later I will configure it to have a host-only connection with a static IP address to my new virtual server, so I can work with it also when I&#39;m not connected to my home network. A host-only connection is also useful to simulate environments that wouldn&#39;t normally be connected to the Internet and that&#39;s ultimately the kind of adapter that I want to be working with. Before I do that, I need to install/update the relevant tools on the virtual machine: SSH Server, Subversion, Tomcat6, and MySQL, plus a few basic packages to facilitate administration and remote view.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; sudo apt-get update
&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; sudo apt-get install openssh-server subversion tomcat6 mysql-server X.org zerofree make gcc linux-headers-$(uname -r)
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;After I got my baseline software on the virtual machine I can create a host-only adapter in VirtualBox (File / Preferences / Network), so I will have two adapters: one NAT adapter (the default) and one host-only adapter. &lt;br /&gt;
After all updates are installed, I won&#39;t need the NAT adapter any more (at least until the next major package upgrade), so I can either disable it in VirtualBox, or disconnect it (untick the &quot;Cable Connected&quot; check box in the VM settings) without actually removing it altogether. If I ever need to install a new package or perform a major upgrade, I just re-enable the NAT adapter very easily and then disable it right away.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhsk0ux7uCnXN0KaLoOlVIA1fksPHEPsIEmJPA2yxpqLivNpI-j7DxvqVILbLzJAzNKUIwqyhEDUSopBLyHui9IJ47jgsSSji9_MMG0RCxXxpAj6ef6d9-ov1saYmcKwszIXMwNlT2fyA/s1600/HostOnlyAdapter.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;281&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhsk0ux7uCnXN0KaLoOlVIA1fksPHEPsIEmJPA2yxpqLivNpI-j7DxvqVILbLzJAzNKUIwqyhEDUSopBLyHui9IJ47jgsSSji9_MMG0RCxXxpAj6ef6d9-ov1saYmcKwszIXMwNlT2fyA/s320/HostOnlyAdapter.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I need my host-only adapter to have a fixed IP address (no DHCP). The reason for using fixed IP addresses is twofold: firstly, because I want my continuous delivery scripts to be simple and deterministic without having to install a name server/DNS just for this system; and secondly, because a production-like infrastructure would most likely use fixed/reserved IP addresses anyway. I don&#39;t want to install DNS or any other name resolution service, and I only need to set up just a few virtual machines, so I&#39;ll just maintain all hostnames and addresses in &lt;code&gt;/etc/hosts&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;127.0.0.1       localhost
192.168.56.1    VM-host      # The VM host
192.168.56.2    UbuntuSRV    # The baseline VM
192.168.56.3    Integration  # The integration VM
192.168.56.4    UAT          # The user acceptance VM
192.168.56.5    PROD         # The production VM
&lt;/pre&gt;&lt;br /&gt;
I decide to assign IP address 192.168.56.1/24 to the host-only adapter in VirtualBox, for no particular reason other &lt;br /&gt;
than because it&#39;s the default address that VirtualBox is using for me. It follows that the IP address on my virtual &lt;br /&gt;
server will have to be in the format 192.168.56.xxx in order to communicate with the host (my laptop).&lt;br /&gt;
&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Change the interface configuration on the VM.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; sudo vi /etc/network/interfaces

...
auto eth0
iface eth0 inet static
address 192.168.56.2
netmask 255.255.255.0
gateway 192.168.56.1
...
&lt;/pre&gt;&lt;br /&gt;
Restart the network interface on the VM.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; sudo ifdown eth0
&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; sudo ifup eth0
ssh stop/waiting
ssh start/running, process 1234
&lt;/pre&gt;&lt;br /&gt;
Test communication from virtual machine to laptop host.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; ping -c 3 VM-host
PING VM-host (192.168.56.1) 56(84) bytes of data.
64 bytes from 192.168.56.1: icmp_req=1 ttl=64 time=0.828 ms
64 bytes from 192.168.56.1: icmp_req=2 ttl=64 time=1.03 ms
64 bytes from 192.168.56.1: icmp_req=3 ttl=64 time=1.893 ms

--- VM-host ping statistics ---
3 packets trasmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.828/0.919/1.037/0.090 ms
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; ping -c 3 UbuntuSRV
PING UbuntuSRV (192.168.56.2) 56(84) bytes of data.
64 bytes from 192.168.56.2: icmp_req=1 ttl=64 time=1.54 ms
64 bytes from 192.168.56.2: icmp_req=2 ttl=64 time=0.760 ms
64 bytes from 192.168.56.2: icmp_req=3 ttl=64 time=0.737 ms

--- UbuntuSRV ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.737/1.012/1.540/0.374 ms
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Now we can use the NAT adapter for internect connections, and the host-only adapter for connections to &lt;code&gt;192.168.56.xxx&lt;/code&gt; addresses , so the routing table needs to reflect this separation.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.56.1    0.0.0.0         UG    100    0        0 eth1
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; ping -c 3 www.google.com
PING www.google.com (74.125.237.178) 56(84) bytes of data.

--- www.google.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2014ms
&lt;/pre&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;It looks like the default route is through the host-only adapter, and no route leads to the Internet. I need to change that, so I&#39;m going to use the VirtualBox NAT adapter &lt;code&gt;10.0.2.2&lt;/code&gt; as a gateway for the default route. This way I can have a host-only connection and a NAT connection, both working, and with Internet access. &lt;br /&gt;
When I want a strict host-only connection, all I have to do is untick the &quot;Cable Connected&quot; box in the VirtualBox settings for my virtual server&#39;s NAT adapter.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; sudo route del default
&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; sudo route add default gw 10.0.2.2 dev eth0
&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG    100    0        0 eth1
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; ping -c 3 www.google.com
PING www.google.com (74.125.237.178) 56(84) bytes of data.
64 bytes from 74.125.237.178: icmp_req=1 ttl=64 time=19.9 ms
64 bytes from 74.125.237.178: icmp_req=2 ttl=64 time=10.7 ms
64 bytes from 74.125.237.178: icmp_req=3 ttl=64 time=12.6 ms

&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; ping -c 3 VM-host
PING VM-host (192.168.56.1) 56(84) bytes of data.
64 bytes from 192.168.56.1: icmp_req=1 ttl=64 time=0.834 ms
64 bytes from 192.168.56.1: icmp_req=2 ttl=64 time=1.11 ms
64 bytes from 192.168.56.1: icmp_req=3 ttl=64 time=1.876 ms
&lt;/pre&gt;Looks good, so I&#39;ll just make this route persistent and move on.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; sudo vi /etc/network/interfaces

...
...
up route add default gw 10.0.2.2 dev eth0
...
...

&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; sudo service networking restart
&lt;/pre&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;So far so good. Let&#39;s get Subversion running and test connectivity from the virtual machine. We&#39;ll need a local repository first of all, then run the standalone Subversion server listening on the adapter used for the &lt;br /&gt;
VirtualBox host-only connection.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; mkdir -p ~/svnrepo/mywebapp
&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; svnadmin create ~/svnrepo/mywebapp
&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; svnserve -d -r ~/svnrepo --foreground --log-file ~/svnserve.log --listen-host 192.168.56.1

&lt;span style=&quot;background-color: lime;&quot;&gt;VM$&lt;/span&gt; svn info svn://VM-host/mywebapp
Path: mywebapp
URL: svn://VM-host/mywebapp
Repository Root: svn://VM-host/mywebapp
Repository UUID: cbcda313-59ce-438c-844d-f6a9db7a4d30
Revision: 0
Node Kind: directory
Last Changed Rev: 0
Last Changed Date: 2013-05-13 12:57:36 +1000 (Mon, 13 May 2013)
&lt;/pre&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;It looks like I have a good baseline virtual server that I can use as a template to create my other virtual environment. Let&#39;s start with the Integration environment (INT). I only have to clone the baseline VM in VirtualBox using the &#39;linked clone&#39; option, also making sure I reinitialise the MAC address of all network cards.&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEVk03-75MuHJF6LMvUS1SZBK4DSnR8aQzYE7luq1dwnWDB5wWf96nFY0gcnYqy0s1lqJ4TA5MRokht0NyuB15q0CheYw0Sm8UehdgzsxIXsGwy4r7Z10BxWWjNwEmfqS1P2Ydh6zsJVE/s1600/VirtualBox-CloneVM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEVk03-75MuHJF6LMvUS1SZBK4DSnR8aQzYE7luq1dwnWDB5wWf96nFY0gcnYqy0s1lqJ4TA5MRokht0NyuB15q0CheYw0Sm8UehdgzsxIXsGwy4r7Z10BxWWjNwEmfqS1P2Ydh6zsJVE/s320/VirtualBox-CloneVM.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA5Vj-8xiDcE5sJ4TNmeMieBrw7HpBi-Tnsh5bAHfQaeWLYvSPIi09TpdUtxU_KEuUbVfs666buw-UfffFlYxTPIQMhgFq0viHckiXx-UXPsZ8DQL08CSJ6jxYGRhs3K70JvYLZzFfpMk/s1600/VirtualBox-CloneVM-LinkedClone.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA5Vj-8xiDcE5sJ4TNmeMieBrw7HpBi-Tnsh5bAHfQaeWLYvSPIi09TpdUtxU_KEuUbVfs666buw-UfffFlYxTPIQMhgFq0viHckiXx-UXPsZ8DQL08CSJ6jxYGRhs3K70JvYLZzFfpMk/s320/VirtualBox-CloneVM-LinkedClone.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;What I want to do now is to import the existing Tomcat configuration from the INT virtual machine into Subversion. This way I will be able to control any modifications to these settings from my development laptop. When I check in new versions of the settings, I will shut down the relevant services on the virtual machine, update the settings&#39; working copies, and restart the services in order to pick up the new settings. In fact, I can even manage these changes from Eclipse, together with the application source code. It is easy to create an empty folder structure in Eclipse on my laptop host and then commit it to Subversion. I can then checkout the relevant folders in my virtual machine, svn add the relevant configuration, and check it all in.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: cyan;&quot;&gt;INT$&lt;/span&gt; svn import /etc/tomcat6 svn://VM-host/mywebapp/trunk/envsetup/INT/tomcat6 -m &quot;Initial import for tomcat6 config&quot;
&lt;span style=&quot;background-color: cyan;&quot;&gt;INT$&lt;/span&gt; sudo svn co svn://VM-host/mywebapp/trunk/envsetup/INT/tomcat6 /etc/tomcat6 --force
&lt;/pre&gt;&lt;br /&gt;
I need to sudo these commands because these directories are usually owned by root, and adding them to Subversion is an operation that needs write access because it will automatically generate some synchronisation metadata files and folders in the working copy directory. Back on the laptop host, I now need to update the Eclipse project and I will be able to manage configuration changes from there.&lt;br /&gt;
&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;To test that this arrangement actually works, I can use Eclipse to change the Tomcat HTTP port on the guest virtual machine. I&#39;ll change it back afterwards.&lt;br /&gt;
&lt;pre&gt;[server.xml (snippet)]
...
    &amp;lt;!-- changed from port 8080 to port 8081 --&amp;gt;
    &amp;lt;Connector port=&quot;8081&quot; protocol=&quot;HTTP/1.1&quot;
               connectionTimeout=&quot;20000&quot;
               URIEncoding=&quot;UTF-8&quot;
               redirectPort=&quot;8443&quot; /&amp;gt;
...


&lt;span style=&quot;background-color: cyan;&quot;&gt;INT$&lt;/span&gt; sudo /etc/init.d/tomcat6 stop
 * Stopping Tomcat servlet engine tomcat6 [OK]

&lt;span style=&quot;background-color: cyan;&quot;&gt;INT$&lt;/span&gt; sudo svn update /etc/tomcat6
U   /etc/tomcat6/server.xml
Updated to revision 6

&lt;span style=&quot;background-color: cyan;&quot;&gt;INT$&lt;/span&gt; sudo /etc/init.d/tomcat6 start
 * Starting Tomcat servlet engine tomcat6 [OK]
&lt;/pre&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Now pointing my browser from the laptop host to the guest address &lt;code&gt;http://Integration:8081&lt;/code&gt; shows the Tomcat welcome page.  &lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD-Osrfk0KtVKTDlX_6vnwEovI32vyDRcLQDyaj7qa3snMlkOFEFlhWb7Sgtug9xrzEjH8Cf3Rb8oMcByPSLi2FQGo9p-nN54pwIiuIWXDq0H6ci24I9vtjplpOUgu-KiELvzDFSsO2x4/s1600/Tomcat+Welcome+Page.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD-Osrfk0KtVKTDlX_6vnwEovI32vyDRcLQDyaj7qa3snMlkOFEFlhWb7Sgtug9xrzEjH8Cf3Rb8oMcByPSLi2FQGo9p-nN54pwIiuIWXDq0H6ci24I9vtjplpOUgu-KiELvzDFSsO2x4/s320/Tomcat+Welcome+Page.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;This means that now I can successfully drive any Tomcat configuration changes from my development environment. &lt;br /&gt;
Also, it means that I can safely revert to any previous revision of the Tomcat configuration if something goes wrong. &lt;br /&gt;
In fact, I&#39;ll just test that now.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;[in my workspace folder]
&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; svn merge -r COMMITTED:PREV .
--- Reverse-merging r16 into &#39;.&#39;:
U    envsetup/INT/tomcat6/server.xml

&lt;span style=&quot;background-color: yellow;&quot;&gt;laptop$&lt;/span&gt; svn commit -m &quot;Reverting previous commit&quot;
--- Reverse-merging r16 into &#39;.&#39;:
U    envsetup/INT/tomcat6/server.xml

&lt;span style=&quot;background-color: cyan;&quot;&gt;INT$&lt;/span&gt; sudo svn update /etc/tomcat6
U    /etc/tomcat6/server.xml
Updated to revision 17.

&lt;span style=&quot;background-color: cyan;&quot;&gt;INT$&lt;/span&gt; sudo /etc/init.d/tomcat6 restart
 * Stopping Tomcat servlet engine tomcat6 [OK]
 * Starting Tomcat servlet engine tomcat6 [OK]
&lt;/pre&gt;Now pointing my browser from the laptop host to the guest address &lt;code&gt;http://Integration:8081&lt;/code&gt; spits out a browser connection error, but &lt;code&gt;http://Integration:8080&lt;/code&gt; shows the Tomcat welcome page as expected. &lt;br /&gt;
&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;To recap, this is what I have so far:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;a physical host (my laptop) with Tomcat, Eclipse, and VirtualBox&lt;/li&gt;
&lt;ii&gt;a Subversion server running on the physical host, using a local directory as a repository&lt;/li&gt;
&lt;li&gt;a virtual server (my baseline) with Tomcat, Subversion and MySQL, connected with the physical host using a host-only adapter&lt;/li&gt;
&lt;li&gt;a virtual server (my integration server) cloned from my baseline, with its Tomcat configuration in the Subversion repository&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
and this is what I can do with the current setup:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;change the Tomcat configuration of the virtual server from my development IDE on the physical host&lt;/li&gt;
&lt;li&gt;easily pick up the latest Tomcat configuration changes on the virtual server&lt;/li&gt;
&lt;li&gt;easily revert to any previous revision of the Tomcat configurations&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;a href=&quot;http://marcoscata.blogspot.com.au/2013/05/continuous-delivery-in-practice-part-2.html&quot; target=&quot;_blank&quot;&gt;Next post&lt;/a&gt; will introduce the element of automation in configuration changes.&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/6205035052905540694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/6205035052905540694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/6205035052905540694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/6205035052905540694'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2013/05/continuous-delivery-in-practice-part-1.html' title='Trying Continuous Delivery - Part 1'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2lEJpG2enEez5Wg8WAbZvWLqyZVs1XeuqmWLwA2dcLtu_EK44n6J6YPLYVnMlr54enRlXbuhw0BZHUPI0J0iXaTSFQmeygQsN7yzybsxKFnlmeO12NSROs3ax6VrmTJMQXRfb9jReGXw/s72-c/UbuntuSoftwareCentre.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-1065071529940252589</id><published>2013-04-21T22:57:00.002+10:00</published><updated>2013-12-24T20:48:50.861+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="continuous delivery"/><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration"/><category scheme="http://www.blogger.com/atom/ns#" term="SDLC"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering"/><title type='text'>Continuous Delivery in Practice - Introduction</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;I am a big fan of automation, and this passion of mine has taken me to become also a big fan of &lt;a href=&quot;http://continuousdelivery.com/&quot;&gt;Continuous Delivery&lt;/a&gt;. I may have not searched hard enough, but I can&#39;t seem to come across some practical examples of Continuous Delivery, so I decided to make my own for two reasons:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;to help myself in learning more about the pratical applications of Continuous Delivery&lt;/li&gt;
&lt;li&gt;to hopefully help others in doing the same&lt;/li&gt;
&lt;/ol&gt;So this post is to start a multipart series on the practical implementation of Continuous Delivery for a very simple web application. I will not write much about the application itself because my main focus is to put together and describe the infrastructure and the mechanisms that keep the system always in a releasable state.&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;It is worth noting that Continuous Delivery &lt;b&gt;does not&lt;/b&gt; imply Continuous Release. The idea is to make sure that the &lt;u&gt;system as a whole&lt;/u&gt; (not just the application) is &lt;b&gt;always&lt;/b&gt; in a releasable state. This way, a release becomes purely a business task that doesn&#39;t require lots of coordination efforts with a number of technical teams.&lt;/div&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;This post series is going to be loosely based on the book &quot;Continuous Delivery&quot; by Jez Humble and David Farley, which is (needless to say) a must read for anyone interested in this topic. The book outlines some fundamental principles of Continuous Delivery:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Create a repetable, reliable process for releasing software&lt;/li&gt;
&lt;li&gt;Automate (almost) everything&lt;/li&gt;
&lt;li&gt;Keep everything in version control&lt;/li&gt;
&lt;li&gt;If it hurts, do it more frequently and bring the pain forward&lt;/li&gt;
&lt;li&gt;Build quality in, right from the start&lt;/li&gt;
&lt;li&gt;Done means released&lt;/li&gt;
&lt;li&gt;Everybody is responsible for the delivery process&lt;/li&gt;
&lt;li&gt;Continuous improvement&lt;/li&gt;
&lt;/ol&gt;I will explicitly refer to most of these principles as this post series evolves. It is worth noting that, because of principle n.3, I will make right away a critical decision: if it can&#39;t be source-controlled, it won&#39;t be part of my technology stack. In other words, I will only use tools/packages/platforms driven by (mostly) text-based configuration (properties files, xml files, etc).&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;In the &lt;a href=&quot;http://marcoscata.blogspot.co.uk/2013/05/continuous-delivery-in-practice-part-1.html&quot;&gt;first post&lt;/a&gt; I will be setting up some virtual environments right from the start before any code is written, and by driving environment changes through source control.&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Finally, the obligatory disclaimer:&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;color: red;&quot;&gt;Please note: I am making this stuff up as I go along, so I may have to update each post at a later stage to reflect some changes that I think might make things easier to manage.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/1065071529940252589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/1065071529940252589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/1065071529940252589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/1065071529940252589'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2013/04/continuous-delivery-in-practice.html' title='Continuous Delivery in Practice - Introduction'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-4412416167136314128</id><published>2013-04-20T15:17:00.001+10:00</published><updated>2013-04-20T15:17:14.261+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="localisation"/><title type='text'>Useful Online Help</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The point of this short post is that including some help tool with your product is not enough. Help tools are supposed to be helpful, and in order to be helpful it must be easily understood. I think that&#39;s common sense.&lt;br /&gt;
&lt;br /&gt;
So why, oh, why do so many vendors, even the big names, avoid investing that little bit extra effort in proof-reading instructions and documentation? This is a classic example. The equipment is a Cisco EPC3925 EuroDocsis 3.0 2-PORT Voice Gateway.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&quot;IP Flood Detection is hacker intrusion method when massive amount of packets are send to the networking equipment with a purpose to overwhelm it.This can expose weaknesses or cause failures.Enabling this future is essential part if intrusion prevention.&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This is just one example. The rest of the documentation runs along the same standards.&lt;br /&gt;
&lt;br /&gt;
I mean... really... Cisco... come on... Yes, I can understand what the statement actually means, but is this English? I can appreciate that translation into English from other languages might not be straightforward, I know, that&#39;s fine, but are you really unable to find one... ONE... English native-like speaker that can proof-read this stuff? I&#39;m pretty sure you can afford it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/4412416167136314128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/4412416167136314128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4412416167136314128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4412416167136314128'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2013/04/useful-online-help.html' title='Useful Online Help'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-3673757409958017050</id><published>2013-01-09T19:50:00.002+11:00</published><updated>2013-01-09T19:52:34.782+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="poems"/><title type='text'>Ossessione</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
fredde stelle&lt;br /&gt;
di una tremante sera&lt;br /&gt;
mi parlano&lt;br /&gt;
di cieli gialli e tempeste eterne&lt;br /&gt;
nell&#39;ombra di un tetto di luce&lt;br /&gt;
&lt;br /&gt;
mura che abbagliano&lt;br /&gt;
di una tenebra infinita&lt;br /&gt;
dentro scatole viventi che respirano bugie&lt;br /&gt;
nelle strade dell&#39;uomo senza occhi&lt;br /&gt;
&lt;br /&gt;
un bastone fiammeggiante&lt;br /&gt;
una carta dipinta di lacrime&lt;br /&gt;
un gioco che brucia il mondo&lt;br /&gt;
un mondo che brucia me&lt;br /&gt;
&lt;br /&gt;
lasciamoci&amp;nbsp;sfinire&amp;nbsp;da noi stessi&lt;br /&gt;
&lt;br /&gt;
O-S-S-E-S-S-I-O-N-E&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/3673757409958017050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/3673757409958017050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/3673757409958017050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/3673757409958017050'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2013/01/ossessione.html' title='Ossessione'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-3842990725192412145</id><published>2012-06-29T00:00:00.000+10:00</published><updated>2016-05-26T20:14:51.331+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linguistics"/><title type='text'>The relationship between language and gender and the implications for language planning.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
The relationship between language and gender and the implications for language planning.&lt;/h2&gt;
&lt;br /&gt;
This essay will discuss the relationship between language and gender, and argue that some of the differences between men’s speech and women’s speech contribute to build and maintain a power imbalance between the two sexes. A summary will first be given of some generalizations about gender-language association, followed by an outline of the main sociolinguistic approaches used in the study of gender-related language variations. Some consideration will then be given to the influence of language on establishing and maintaining social structures and social divides, with some implications for language planning.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;One of the study areas of Sociolinguistics is articulated around language varieties that are associated with one gender or the other. Since their distinguishing element is the association with gender, these varieties are also known as genderlects and their characteristics vary across countries, cultures, generations, religions, and social groups. For example, speech patterns associated with male western-European youth cultures are different from those associated with male eastern-European youth cultures, or male western-European adult cultures. Commonly, there are numerous stereotypes associated with male and female speech that give rise to generalizations about men and women, like the perception that women are more empathetic and polite while men are more factual and “dry”.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Initial interest in gender-related speech patterns arose in the 1960s, when Labov published a study on the social motivation of sound changes (1963) and another one on the social stratification of language (1966). The objective of Labov’s studies was to examine the contexts in which certain phonological patterns would apply in relation to a set of social variables, among which were status, ethnic group, and sex. Among his findings there was a tendency of women to adopt standard variants and to “follow an extreme pattern of stylistic variation” (1966, p. 312), or to “hypercorrect”, in an effort to emulate other linguistic patterns that are perceived to be somewhat superior or set the benchmark. The systematic study of genderlects, however, seems to have started in the early 1970s, when Lakoff published a study on the frequency in which a number of linguistic features occurred in women’s speech compared to men’s speech (1973). Lakoff’s approach was labelled the “deficit approach”, because it alleged that women’s speech was characterized by “uncertainty” and “lack of confidence on the part of women” (Fromkin et al. 2011, p. 449).  This view was supported by the notion (at the time) that male speech was considered to represent the unmarked standard form; therefore any variation from the unmarked form (like the variation brought by female speech) was - by definition - a marked form. As a result, with the male speech setting the benchmark by convention, any variation from it would automatically be perceived somewhat inferior.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;Moving in a similar direction was the “dominance approach”, according to which male speech was dominant over the subordinate female speech, probably as a result of traditional western patriarchal social structures (Spender, 1985). Even though the dominance approach does not overtly assume female genderlects to be substandard or inadequate, it still reflects a concentration of power and authority in male speech, placing male society in a status of supremacy.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The “difference approach” removes the ideas of “better” and “dominant” and looks at male and female genderlects as manifestations of two different sub-cultures: there is no differentiation in terms of power, but there is differentiation in terms of cultural contexts. Tannen (1990) looked at genderlect differences from a pragmatic point of view, looking at meta-messages: what is really being communicated as opposed to what is actually being said. For example, an offer for help might convey a meta-message that the person offering help is more capable and competent than the person being helped. This way, meta-messages can cause the listener to perceive either a difference or an equality in status between the conversation participants. Tannen’s findings show different areas of differentiation between male and female speech. For example, Tannen claims that women tend to focus more on intimacy and connection with their interlocutors, while men tend to shape their conversation around meta-messages of competition and independence. Also, men tend to be more comfortable than women when talking in public, while women are generally more comfortable than men when talking in private settings.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;Cameron (2007) argues that historical approaches to the study of genderlects may be incomplete, especially with reference to both the dominance approach and the difference approach. One aspect of Cameron’s argument is that male genderlects are usually considered to be unmarked dialect forms, whilst female genderlects by reflection become the deviant forms. However, this is just an artificial benchmark, since there is no evidence to suggest that it could not be the reverse: female genderlects providing the unmarked form and male genderlects being deviant. Another aspect of the argument against the difference approach is that, although it tries to offer a more egalitarian or levelling perspective on genderlects by focusing on contextual differences rather than power and submission, it seems to miss the idea that those differences are still actual manifestations of relative two-way dominance. For example, conversational dominance is not just about the behaviour of certain participants of the conversation in the establishment of hierarchical prestige: it is also about the conscious choice of the other participants to allow that to happen. In general, Cameron argues, there seems to be no evidence to support the relationship between the roles of men and women in society, and their language use.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;More recently, the social constructionist approach has developed a dynamic study of language and genders, following the principle that language is an expression of culture and, as a result, social constructs are directly linked to speech constructs. Speech constructs, however, go beyond being simply a projected expression of an underlying “fixed” social structure and become tools that the participants actively use to dynamically shape and maintain the social structure (Zimmermann and West, 1975). The use of different language varieties across specific social structures was examined in detail by Eckert and McConnell-Ginet (1999), who introduced the concept of Communities of Practice, in which groups of people are connected by common tasks or projects and over time construct a set of shared practices. As such communities are established and maintained, linguistic patterns and speech strategies are also established and maintained therein. When single-sex communities of practice come to exist, whether by coincidence or by some form of social or institutional barrier, it is easy to mistake for gender identity the linguistic identity that those communities build and develop for themselves. In other words, the association between a language form and a community of practice whose member just happen coincidentally to belong to the same sex, over time can transform into an association between that language form and a specific gender, according to some kind of social projection where community of practice and gender are two faces of the same sociolinguistic coin.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;As theories of language and gender developed, attention seems to have shifted away from physical and biological variables towards social, cultural, and historical variables. The deficit approach considered sex to be one of the variables that shaped and influenced language patterns, while the dynamic approach completely reverted the cause-effect relationship and considered linguistic variables to shape and influence the expression of gender.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;In general, modern approaches look at linguistic patterns and conversational styles, and some generalizations have become popularized with various degrees of accuracy. For example, minimal responses are paralinguistic features in the form of vocal expressions that can be used for different purposes by men (showing agreement) and women (building collaborative discourse). Questioning is usually a strategy adopted by men to request information and without further motive; it is however adopted by women to build participation, elicit contributions, and generally engage in collaborative discourse. Disclosure of personal information is perceived by men as a sign of weakness and strongly avoided, but it is a subtle strategy used by women to connect and build intimacy and trust with other discourse participants. Attentiveness and listening are two important factors in the construction of meaning, because meaning is shaped in the mind of the listener thanks also to other types of input than just what is being said. Women’s tendency to build intimacy and trust makes them also “good listeners”, while men’s tendency to build up status through turn dominance makes them “bad listeners”.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;While all the above strategies and tendencies may be verifiable in certain contexts and cultures, there seems to be no consensus on their universality. There appears to be, however, agreement on the notion that gender is one of the identity traits expressed through language. Language is used by individuals not only to negotiate meaning but also to negotiate identity, so gender is something that people “do” or construct through language. If it were true that standard forms were perceived as being more prestigious and desirable than non-standard forms, then there should be very little motivation for individuals to keep using non-standard forms. However, ordinary life experiences present strong evidence not only of the existence of numerous social groups that use non-standard forms, but also of their conscious effort to keep those forms instead of aiming at the adoption of standard forms. According to Labov (1966), this is due to group members perceiving and receiving covert prestige in the establishment and maintenance of group identity, instead of pursuing more standardized dialect variants.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;There are two main areas of concern about genderlects that have emerged thus far in this essay: the first one pertains to their initial development (how genderlects came to exist and separate in the first place), and the second concerns their preservation (how or why they still exist in modern societies). In terms of their initial development, genderlects may find the roots of their differentiation in the establishment and perpetuated existence of single-sex communities of practice in the past. For example, in many societies war used to be an activity reserved to men alone, while women would engage in “safer” activities like socializing and nurturing, and so it was for many centuries. It seems therefore logical to suppose that most dialects that developed in the communities of practice directly related to war activities eventually became male genderlects. With time, the establishment of numerous single-sex communities of practice contributed to the reinforcement of genderlects (and gender) differentiation in what Eckert and McConnell-Ginet (1999) call “institutionalization of gender” (p. 189). In terms of genderlects preservation, Labov’s explanation that group identity is more prestigious than the adoption standard forms of language seems to be very logical. It is important to stress that individuals can and do belong to multiple communities of practice, and that is why group identity is not simply adopted or built unilaterally: it is negotiated according to the prevailing context. Following a social constructionist view, it is important to consider the notion that humans participate in the construction of a dynamic society with multiple aspects or facets, and the construction of individual identity and group identity is part of the process. Since social facets are not natural constructs they need to be continuously maintained, and humans do this through the institutionalization of social phenomena and the construction of traditions which, when applied to single-sex communities of practice, serve to also maintain gender separation and relative dominance.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;There is also a third area of concern about genderlect differentiation: the rise of discriminatory attitudes towards sex (as a biological trait) and gender (as a component of identity). Linguistic discrimination happens when people are treated differently based on the language they use. If certain linguistic forms are distinctly associated with one gender or the other, then linguistic discrimination can become a form of sex discrimination. The preservation of genderlects as instruments used to assert individual identities therefore may become (perhaps thanks to the popular “law of unintended consequences”) a mechanism to also preserve sex discrimination. Also, if the standard form of a language has a bias towards the use of male-specific or female-specific lexicon and constructs, this may well have an influence on the perception that one gender has a higher prestige than the other, shaping social attitudes accordingly and maintaining unequal states in society. For example, the Italian language is gender-biased in many ways, one of which is that there is no neutral grammatical gender, so all nouns are either masculine or feminine, and pronouns in a sentence are assumed to refer to masculine entities unless specifically intended otherwise. In modern societies there seems to be widespread acceptance of gender-discriminatory constructs even in languages that are not perceived to be gender-biased. For example, the English language is grammatically gender-unbiased (nouns can be masculine, feminine, or neuter),  but it is not uncommon to find tiles like “stewardess”, “fireman”, or “waitress” on job adverts in English-speaking countries, maintaining the historical gender connotations of various communities of practice.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;Wardhaugh’s views on the development and preservation of gender-specific constructs are that&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div style=&quot;margin: 0cm 30pt 0cm 27pt;&quot;&gt;
&lt;br /&gt;
&lt;span lang=&quot;EN-GB&quot; style=&quot;background-color: white; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 150%;&quot;&gt;“[...] men’s and women’s speech differ because boys and girls are brought up differently and men and women often fill different roles in society. Moreover, most men and women know this and behave accordingly” &lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;EN-GB&quot; style=&quot;background-color: white; font-family: inherit; line-height: 150%;&quot;&gt;(2006, p. 354).&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
In other words, there seems to be a strong traditional attitude in the sense that the social development of new generations has always been accomplished in a certain gender-biased way, and unless something is done to disrupt this attitudinal inertia it will endure in exactly the same way. Wardhaugh continues by proposing that less sexist child-rearing practices and role differentiation would reflect into less sexist language practices and bring a “greater freedom of choice”. &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;According to Wardhaugh, language planning is “an attempt to interfere deliberately with a language or one of its varieties” (p. 379) and there are different ways in which it operates. Corpus planning is a form of structural engineering for a language: it involves processes that are aimed at altering linguistic constructs through graphization (the prescription of orthographic conventions), standardization (the elevation to standard form of one variety over the others) and modernization (the extension of a variety to meet new functions). Status planning aims at influencing the perceived status of a language variety with respect to other varieties, by means of association with specific functional domains, so that the language variety acquires the same status as the functional domain in which it is commonly used. It is perhaps thanks to a combination of both, channeled through the education system and the media, that progress can be made in the mitigation and control of sex discrimination.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;This is in some ways an application of the Sapir-Whorf hypothesis of linguistic relativity: if the language we use influences thought and society, and if linguistic constructs determine cognitive constructs, then any changes in the language we use will determine some changes also in our social attitudes, so by carefully crafting a series of structural linguistic alterations around sexist dialectal forms we should be able to induce favourable changes in society’s sexist attitudes towards a higher degree of gender equality. If that is the case, then these principles can be used by language planners in the formulation of appropriate policies to reduce or even eliminate sex discrimination in society.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;Marco Scata&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt; &lt;b&gt;References&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;MsoCommentReference&quot;&gt;&lt;span lang=&quot;EN-GB&quot; style=&quot;font-size: 8pt; line-height: 150%;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Cameron, D. (2007). &lt;i&gt;The Myth of Mars and Venus&lt;/i&gt;. &lt;st1:city w:st=&quot;on&quot;&gt;Oxford&lt;/st1:city&gt;: &lt;st1:place w:st=&quot;on&quot;&gt;&lt;st1:placename w:st=&quot;on&quot;&gt;Oxford&lt;/st1:placename&gt; &lt;st1:placetype w:st=&quot;on&quot;&gt;University&lt;/st1:placetype&gt;&lt;/st1:place&gt; Press.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Eckert, P., and McConnell-Ginet, S. (1999). New generalizations and explanations in language and gender research, &lt;i&gt;Language in Society&lt;/i&gt;, 28 (2), 185-201.&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Cambridge: Cambridge University Press&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Fromkin, V. et al. (2011). An &lt;i&gt;Introduction to Language&lt;/i&gt; (9th ed, international). &lt;st1:place w:st=&quot;on&quot;&gt;&lt;st1:city w:st=&quot;on&quot;&gt;Wadsworth&lt;/st1:city&gt;&lt;/st1:place&gt;: Cengage Learning.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Kaplan, B., &amp;amp; Baldauf, B. (1997). A framework for planning: who does what to whom?. In &lt;i&gt;Language planning from practice to theory&lt;/i&gt; (pp. 28-58). &lt;st1:place w:st=&quot;on&quot;&gt;&lt;st1:city w:st=&quot;on&quot;&gt;Philadelphia&lt;/st1:city&gt;,  &lt;st1:state w:st=&quot;on&quot;&gt;PA&lt;/st1:state&gt;&lt;/st1:place&gt;: Multilingual Matters.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Labov, W. (1963). &lt;i&gt;The social motivation of a sound change&lt;/i&gt;. Word 19, 273-309&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Labov, W. (1966). &lt;i&gt;The social stratification of English in &lt;st1:place w:st=&quot;on&quot;&gt;&lt;st1:city w:st=&quot;on&quot;&gt;New York   city&lt;/st1:city&gt;&lt;/st1:place&gt;&lt;/i&gt;. &lt;st1:place w:st=&quot;on&quot;&gt;&lt;st1:city w:st=&quot;on&quot;&gt;Washington&lt;/st1:city&gt;,  &lt;st1:state w:st=&quot;on&quot;&gt;D.C.&lt;/st1:state&gt;&lt;/st1:place&gt;: Center for Applied Linguistics.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27pt; text-indent: -27pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Lakoff, R. (1973). Language and woman&#39;s place.&amp;nbsp;&lt;i&gt;Language in Society,&lt;/i&gt;&amp;nbsp;2 (1), 45-80. Cambridge: Cambridge University Press&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27pt; text-indent: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Spender, D, (1985). &lt;i&gt;Man made language&lt;/i&gt;. (2nd ed.) &lt;st1:place w:st=&quot;on&quot;&gt;&lt;st1:city w:st=&quot;on&quot;&gt;London&lt;/st1:city&gt;&lt;/st1:place&gt;: Routledge &amp;amp; Kegan&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Tannen, D. (1990). You &lt;i&gt;just don’t understand. Women and men in conversation&lt;/i&gt;. &lt;st1:place w:st=&quot;on&quot;&gt;&lt;st1:state w:st=&quot;on&quot;&gt;New York&lt;/st1:state&gt;&lt;/st1:place&gt;: William Morrow.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Wardhaugh, R. (2006). &lt;i&gt;An introduction to sociolinguistics&lt;/i&gt; (6th ed.). &lt;st1:place w:st=&quot;on&quot;&gt;&lt;st1:city w:st=&quot;on&quot;&gt;Oxford&lt;/st1:city&gt;&lt;/st1:place&gt;: Blackwell Publishers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-left: 27.0pt; text-indent: -27.0pt;&quot;&gt;
&lt;span lang=&quot;EN-GB&quot;&gt;Zimmermann, D.H., and West, C. (1975). “Sex roles, interruptions and silences in conversation”.&amp;nbsp; In Thorne, B. and Henly, N. (1975). &lt;i&gt;Language and Sex: Difference and Dominance&lt;/i&gt;, 105-29. &lt;st1:place w:st=&quot;on&quot;&gt;&lt;st1:city w:st=&quot;on&quot;&gt;Rowley&lt;/st1:city&gt;,  &lt;st1:state w:st=&quot;on&quot;&gt;Massachusetts&lt;/st1:state&gt;&lt;/st1:place&gt;: Newbury.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div class=&quot;msocomtxt&quot; id=&quot;_com_1&quot; language=&quot;JavaScript&quot;&gt;
&lt;div class=&quot;MsoCommentText&quot;&gt;
&lt;span style=&quot;font-size: 11px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;msocomtxt&quot; id=&quot;_com_4&quot; language=&quot;JavaScript&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/3842990725192412145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/3842990725192412145' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/3842990725192412145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/3842990725192412145'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2012/06/relationship-between-language-and.html' title='The relationship between language and gender and the implications for language planning.'/><author><name>Marco</name><uri>http://www.blogger.com/profile/13503225500619216956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-1025866756295777095</id><published>2012-06-02T20:18:00.000+10:00</published><updated>2013-07-20T15:28:52.841+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="games"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering"/><category scheme="http://www.blogger.com/atom/ns#" term="system design"/><title type='text'>Boken design series: Gamevil&#39;s Fantasy War</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
With this post I will start a series dedicated to broken design.
What&#39;s broken design? It&#39;s about things that we use that are fundamentally flawed. It&#39;s about stuff that seems obvious to some people but not to product designers.
&lt;br /&gt;
I will start the series with a post about a game for the iPhone that I recently tried.
The game is called Fantasy War, produced by Gamevil, and can be found on the &lt;a href=&quot;http://iphone.gamevil.com/detail.php?gid=87&quot;&gt;Gamevil website&lt;/a&gt; and on &lt;a href=&quot;http://itunes.apple.com/app/id511020963?mt=8&quot;&gt;iTunes&lt;/a&gt;.
&lt;br /&gt;
The purpose of the game is to become the leader of a fantasy realm. You can be human, orc or elf, and you progress through the game by completing some quests, battling the forces of evil in some dungeon, and waging war against other players.
As you accumulate experience and resources, you can improve the infrastructure (gold mine and lumber mill), learn new skills (cloth making, leatherworking, etc), upgrade your weapons, and hire stronger and more powerful armies.
The graphics resembles some 1990s arcade games, but it&#39;s still not bad for a mobile game. The rules are fairly quick to learn without explicit instructions and the level progression gradually unlocks more interesting content.
The developers make money selling &quot;runestones&quot;, which allow you to do a lot more stuff and get really powerful armies.
&lt;br /&gt;
Sounds ok, right? Well I actually like the game. It&#39;s very easy to play and the content is not bad at all. So where&#39;s the problem? What&#39;s the broken design?
&lt;br /&gt;
Well, the problem is that this is not an iPhone game, or at least it&#39;s not meant to be. When you install the game, you actually install a simplified internet browser with little or no content. Every time you interact with the game, you actually navigate through a web page. All commands, all icons, all images, are just hyperlinks on a web page. Hang on, so where&#39;s the problem? I use internet all the time with my iPhone, and I have a lot of games on my iPhone that need an internet connection to work. No big deal.
No, indeed, it wouldn&#39;t be a big deal... if the game wasn&#39;t so connection greedy! There is no content on the iPhone. Everything needs to be downloaded from the internet, including all the images (and there are a LOT of images!).
In other words, this game assumes that it is running on a permanently connected device on broadband speeds... which is exactly the opposite of what an iPhone is. My user experience with this game goes something like this:
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;start the game&lt;/li&gt;
&lt;li&gt;watch the rotating &quot;loading...&quot; icon for a few seconds&lt;/li&gt;
&lt;li&gt;watch a dark screen behind the &quot;loading...&quot; icon&lt;/li&gt;
&lt;li&gt;watch the text labels of the home screen appear behind the &quot;loading...&quot; icon&lt;/li&gt;
&lt;li&gt;watch the graphic background appear behind the &quot;loading...&quot; icon&lt;/li&gt;
&lt;li&gt;watch the images loading in chunks behind the &quot;loading...&quot; icon&lt;/li&gt;
&lt;li&gt;home screen fully loaded&lt;/li&gt;
&lt;li&gt;tap on any activity&lt;/li&gt;
&lt;li&gt;watch the rotating &quot;loading...&quot; icon for a few seconds&lt;/li&gt;
&lt;li&gt;repeat from point 3&lt;/li&gt;
&lt;/ol&gt;
In the end, I spend more time watching the rotating &quot;loading...&quot; icon that actually playing the game.
Add to this the fact that there is no fault tolerance built in this simple browser, and you also get to build familiarity with the &quot;check your internet connection&quot; error, after which you can only shut down the game and start it again.
&lt;br /&gt;
Also add to this the fact that dungeons are time limited (you need to kill the boss within &#39;N&#39; minutes, or you have to wait for an hour or more before you can try again) and you can see how you can quickly build up frustration.
&lt;br /&gt;
The cherry on the cake is that if something goes wrong with the game you get some Korean error message popping up, which is ok if you can read and understand Korean (I can&#39;t do either).
&lt;br /&gt;
The verdict: &lt;b&gt;broken design!&lt;/b&gt;
&lt;br /&gt;
This is a basic architectural requirement for anything that is supposed to run on an iPhone: it must (please note, &quot;must&quot;, not &quot;should&quot;) be built for a seldom connected environment with less-than-broadband speeds. If that&#39;s not the case, then don&#39;t bother.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/1025866756295777095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/1025866756295777095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/1025866756295777095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/1025866756295777095'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2012/06/boken-design-series-gamevils-fantasy.html' title='Boken design series: Gamevil&#39;s Fantasy War'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-5552197417242071996</id><published>2012-05-05T21:10:00.000+10:00</published><updated>2012-06-07T08:23:58.339+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering"/><title type='text'>Quality Control</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 15px;&quot;&gt;There seems to (still) exist a great deal of confusion in many teams about the concept of continuous integration (CI).&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;The mighty Martin Fowler explains it in one of his seminal articles (&lt;a href=&quot;http://martinfowler.com/articles/continuousIntegration.html&quot;&gt;http://martinfowler.com/articles/continuousIntegration.html&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;Wikipedia defines CI as the principle of implementing &quot;continuous process of applying quality control&quot; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Continuous_integration&quot;&gt;http://en.wikipedia.org/wiki/Continuous_integration&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;Just googling up the term produces nearly 6 million references (&lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=continuous+integration&amp;amp;btnG=Google+Search&amp;amp;meta=&quot;&gt;http://www.google.com/search?hl=en&amp;amp;q=continuous+integration&amp;amp;btnG=Google+Search&amp;amp;meta=&lt;/a&gt;) so one might infer at least two things out of this:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;1) that the topic is well covered&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;2) that the topic is very popular&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;Why, then, have I found it so difficult to find a proper implementation of continuous integration?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;Perhaps it depends on what I mean by &quot;proper implementation&quot;, so I thought about what I would really expect to receive from a &quot;proper&quot; CI implementation. In other words, what is the quantifiable value that a good CI process adds to my team?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;My concept is very much in tune with the Wikipedia definition, in that CI is one of the many means to an end: quality control.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11pt;&quot;&gt;The value of a CI process is in quality control, so it is useless if it does not deliver the means to check the quality of the deliverables.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/5552197417242071996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/5552197417242071996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/5552197417242071996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/5552197417242071996'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2012/05/quality-control.html' title='Quality Control'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-690494821665784880</id><published>2012-03-18T13:01:00.001+11:00</published><updated>2012-03-23T14:37:22.622+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mathematics"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>Primal Noise</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;script src=&quot;http://code.jquery.com/jquery-1.7.1.min.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
 // array must already sorted in ascending order
 var primes = [
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527,3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617,3623,3631,3637,3643,3659,3671,3673,3677,3691,3697,3701,3709,3719,3727,3733,3739,3761,3767,3769,3779,3793,3797,3803,3821,3823,3833,3847,3851,3853,3863,3877,3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947,3967,3989,4001,4003,4007,4013,4019,4021,4027,4049,4051,4057,4073,4079,4091,4093,4099,4111,4127,4129,4133,4139,4153,4157,4159,4177,4201,4211,4217,4219,4229,4231,4241,4243,4253,4259,4261,4271,4273,4283,4289,4297,4327,4337,4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4447,4451,4457,4463,4481,4483,4493,4507,4513,4517,4519,4523,4547,4549,4561,4567,4583,4591,4597,4603,4621,4637,4639,4643,4649,4651,4657,4663,4673,4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,4787,4789,4793,4799,4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4937,4943,4951,4957,4967,4969,4973,4987,4993,4999,5003,5009,5011,5021,5023,5039,5051,5059,5077,5081,5087,5099,5101,5107,5113,5119,5147,5153,5167,5171,5179,5189,5197,5209,5227,5231,5233,5237,5261,5273,5279,5281,5297,5303,5309,5323,5333,5347,5351,5381,5387,5393,5399,5407,5413,5417,5419,5431,5437,5441,5443,5449,5471,5477,5479,5483,5501,5503,5507,5519,5521,5527,5531,5557,5563,5569,5573,5581,5591,5623,5639,5641,5647,5651,5653,5657,5659,5669,5683,5689,5693,5701,5711,5717,5737,5741,5743,5749,5779,5783,5791,5801,5807,5813,5821,5827,5839,5843,5849,5851,5857,5861,5867,5869,5879,5881,5897,5903,5923,5927,5939,5953,5981,5987,6007,6011,6029,6037,6043,6047,6053,6067,6073,6079,6089,6091,6101,6113,6121,6131,6133,6143,6151,6163,6173,6197,6199,6203,6211,6217,6221,6229,6247,6257,6263,6269,6271,6277,6287,6299,6301,6311,6317,6323,6329,6337,6343,6353,6359,6361,6367,6373,6379,6389,6397,6421,6427,6449,6451,6469,6473,6481,6491,6521,6529,6547,6551,6553,6563,6569,6571,6577,6581,6599,6607,6619,6637,6653,6659,6661,6673,6679,6689,6691,6701,6703,6709,6719,6733,6737,6761,6763,6779,6781,6791,6793,6803,6823,6827,6829,6833,6841,6857,6863,6869,6871,6883,6899,6907,6911,6917,6947,6949,6959,6961,6967,6971,6977,6983,6991,6997,7001,7013,7019,7027,7039,7043,7057,7069,7079,7103,7109,7121,7127,7129,7151,7159,7177,7187,7193,7207,7211,7213,7219,7229,7237,7243,7247,7253,7283,7297,7307,7309,7321,7331,7333,7349,7351,7369,7393,7411,7417,7433,7451,7457,7459,7477,7481,7487,7489,7499,7507,7517,7523,7529,7537,7541,7547,7549,7559,7561,7573,7577,7583,7589,7591,7603,7607,7621,7639,7643,7649,7669,7673,7681,7687,7691,7699,7703,7717,7723,7727,7741,7753,7757,7759,7789,7793,7817,7823,7829,7841,7853,7867,7873,7877,7879,7883,7901,7907,7919
 ];
 
 function createRow(n, maxSpan) {
  var row = document.createElement(&#39;TR&#39;);
  $(row).attr(&#39;id&#39;, &#39;row_&#39; + n);

  var digits = n.toString(2); // converts decimal to binary
  var span = maxSpan - digits.length + 1; // calculate initial colspan

  // create left padding
  var cell = document.createElement(&#39;TD&#39;);
  $(cell).attr(&#39;colspan&#39;, span);
  $(cell).addClass(&#39;0&#39;);
  $(cell).append(&#39;&amp;nbsp;&#39;);
  $(row).append(cell);

  // create other cells
  for (var charPos = 0; charPos &lt; digits.length ; charPos++)
  {
   digit = digits.charAt(charPos);
   cell = document.createElement(&#39;TD&#39;);
   $(cell).addClass(digit);
   $(cell).append(&#39;&amp;nbsp;&#39;);
   $(row).append(cell);
  }

  return row;
 }

 function createTable() {
  var maxSpan = primes[primes.length - 1].toString(2).length;
  for (var ctr = 0; ctr &lt; primes.length; ctr++)
  {
   $(&#39;#resultTable&#39;).append(createRow(primes[ctr], maxSpan));
  }
  $(&#39;#resultTable&#39;).css(&#39;font-size&#39;, &#39;2px&#39;);
  $(&#39;#resultTable&#39;).css(&#39;text-align&#39;, &#39;center&#39;);
  $(&#39;#resultTable&#39;).css(&#39;border-collapse&#39;, &#39;collapse&#39;);
  $(&#39;#resultTable&#39;).css(&#39;border-spacing&#39;, &#39;0px&#39;);
  $(&#39;#resultTable&#39;).css(&#39;border&#39;, &#39;0px&#39;);
  $(&#39;#resultTable&#39;).css(&#39;padding&#39;, &#39;0px&#39;);
  $(&#39;#resultTable&#39;).css(&#39;empty-cells&#39;, &#39;show&#39;);
  $(&#39;.0&#39;).css(&#39;border&#39;, &#39;none&#39;);
  $(&#39;.0&#39;).css(&#39;background&#39;, &#39;none&#39;);
  $(&#39;.1&#39;).css(&#39;border&#39;, &#39;1px solid black&#39;);
  $(&#39;.1&#39;).css(&#39;background&#39;, &#39;black&#39;);
 }

 $(document).ready(function() {
  createTable();
 });
  
&lt;/script&gt;

&lt;strong&gt;You need to &lt;u&gt;enable JavaScript&lt;/u&gt; to see this post.&lt;/strong&gt;
&lt;p/&gt;
This is what the &lt;a href=&quot;https://www.google.com.au/search?hl=en&amp;q=list+of+primes+as+csv&amp;btnG=Google+Search&amp;meta=&quot; target=&quot;_blank&quot;&gt;first 1000 prime numbers&lt;/a&gt; look like when you plot them using their binary representation, one after the other. Are there fractal patterns in this image, like noise on a phone line? I don&#39;t know. Maybe I&#39;ll discuss it in another post.
&lt;p/&gt;
This image is created by first translating each number in its binary string (e.g. decimal 53 to binary &lt;code&gt;110101&lt;/code&gt;), then converting each &#39;&lt;code&gt;1&lt;/code&gt;&#39; into a little black square and each &#39;&lt;code&gt;0&lt;/code&gt;&#39; into a blank space.
&lt;p/&gt;
The image is produced using simple JavaScript scode. Have a look at the page source if you&#39;re interested. Search for &#39;&lt;code&gt;var primes&lt;/code&gt;&#39;, &#39;&lt;code&gt;function createRow&lt;/code&gt;&#39; and &#39;&lt;code&gt;function createTable&lt;/code&gt;&#39;. I used &lt;a href=&quot;http://jquery.com/&quot; target=&quot;_blank&quot;&gt;jQuery &lt;/a&gt;to simplify it a little bit.
&lt;p/&gt;
&lt;table id=&quot;resultTable&quot;&gt;
&lt;/table&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/690494821665784880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/690494821665784880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/690494821665784880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/690494821665784880'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2012/03/primal-noise.html' title='Primal Noise'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-4178351783764302101</id><published>2011-05-27T21:32:00.001+10:00</published><updated>2011-05-28T22:07:37.237+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering"/><title type='text'>What&#39;s in a number?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;Imagine this discussion.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;Developer 1:&lt;/i&gt; In the past week our code coverage raised from x% to y%&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;Developer 2:&lt;/i&gt; That&#39;s pretty good. There was is still quite a bit of dead code after the recent refactoring so I think we&#39;ll get to z% by next week.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;Developer 3:&lt;/i&gt; I still think we should aim for 100%.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;User/Analyst/Sponsor:&lt;/i&gt; What does that mean?&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;Developer 1:&lt;/i&gt; It shows how much of the whole code base we can actually test as part of our build process.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;User/Analyst/Sponsor: &lt;/i&gt;Ok, and why is that important?&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;Developer 2:&lt;/i&gt; It&#39;s important to know how much is not covered.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;User/Analyst/Sponsor:&lt;/i&gt; Oh, so you know how much more you have to work before you get to 100%&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px;&quot;&gt;&lt;i&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;Developer 3: &lt;/i&gt;Well, not exactly. Our policy is to aim for z%&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;User/Analyst/Sponsor: &lt;/i&gt;Hmmm, and what&#39;s the use of z%? What does that mean to us?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;i&gt;Developers:&lt;/i&gt;&amp;nbsp;What does it mean to you? Well it means that... hmm... that you know... it means... well... er...&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;That&#39;s not quite my direct experience, but I recently had to explain code coverage to non-coders and I realised how little thought some developers have put into the practical importance of code coverage outside the developers&#39; domain.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 11pt;&quot;&gt;I think most developers should be familiar with the concept of code coverage, which is simply the number of lines of code that get executed as part of the test suite expressed as a percentage of the total number of lines of code written. Full coverage (100%) means that my tests manage to execute (cover) all of my code. Less than full coverage means that there is some code that is not being tested. I&#39;m not just talking about unit tests: I am also including integration tests and automated UI tests into the picture.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 11pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;There have been countless debates on how much coverage is good coverage, including various tools and methodologies, so I won&#39;t go into a lot of detail here and I don&#39;t want to entertain anyone with yet another post on the miracles of test-driven development (TDD). T&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px;&quot;&gt;he main concern here is that we cannot measure how &quot;important&quot; a line of code is with respect to another line of code. If we could, we would be able to come up with an &quot;ideal&quot; coverage target and be happy with that. Unfortunately in practice when I have anything less than full coverage I cannot tell whether the &quot;uncovered&quot; code is going to eventually bite me with a vengeance, or whether it will ever get noticed at all. It all depends on usage.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;What&#39;s the meaning of an x% code coverage to me &lt;i&gt;as a developer?&lt;/i&gt; In all practical terms, if it&#39;s less than 100%, then it means nothing. So either I strive for full coverage, or why should I bother? That is the basis upon which code coverage sometimes is ignored altogether, or is used only to produce colorful block charts for project status reports.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;Now what does that mean to testers? Testers usually understand the concept of code coverage and many are wise enough to avoid taking code coverage as a measure of quality of deliverables. Why is that? Well, quite simply, my automated tests might well test 100% of my code base, but that doesn&#39;t mean they actually test the right thing in the correct way.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: &#39;Times New Roman&#39;; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 11pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &#39;Times New Roman&#39;; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 11pt;&quot;&gt;So what does code coverage means to me &lt;i&gt;as a tester?&lt;/i&gt; In general terms, a code coverage of x% means that, for every new feature I add to the product, or every bug I fix, I have roughly an x% degree of confidence that I am not going to break existing features or resurrect old bugs (provided my tests actually test behavior - not just classes and methods - and that each new bug is reproduced with a test before it gets fixed).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &#39;Times New Roman&#39;; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &#39;Times New Roman&#39;; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;But what&#39;s the meaning of it to users and analysts? When they see the regular progress report on the system being developed, what information does code coverage convey to them?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 11pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 11pt;&quot;&gt;The meaning of code coverage to me &lt;i&gt;as a user&lt;/i&gt; is actually more important than one might think. Roughly speaking, a code coverage of x% means that with every action I perform on the system, there is roughly a (1-x)% probability that something will go wrong.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 11pt;&quot;&gt;To put it slightly differently (or perhaps more precisely), an x% code coverage means&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;there is roughly an x% probability that my interaction with the system produces the expected result because that&#39;s what it was programmed to do. Conversely,&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: 15px;&quot;&gt;there is roughly a (1-x)% probability that my interaction with the system produces the expected result &lt;i&gt;by chance&lt;/i&gt;. &amp;nbsp; The degree of criticality of the system then dictates the degree of acceptance or tolerance for failure (or tolerance to chance), which we can match against code coverage.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/4178351783764302101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/4178351783764302101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4178351783764302101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4178351783764302101'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2011/05/whats-in-number.html' title='What&#39;s in a number?'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-2968643449974509011</id><published>2010-12-12T23:00:00.000+11:00</published><updated>2010-12-13T11:43:43.093+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cooking"/><title type='text'>Paste di Mandorla (Almond Biscuits)</title><content type='html'>&lt;div dir=&quot;LTR&quot;&gt;&lt;span lang=&quot;en-au&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir=&quot;LTR&quot;&gt;&lt;span lang=&quot;en-au&quot;&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;&lt;b&gt;Ingredients&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;2 egg whites&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;200g caster sugar&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;a few spoonfuls of icing sugar (for coating)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;400g almond meal&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;1 teaspoon of almond essence&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;1 teaspoon of honey (preferably orange honey)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;1 tablespoon of lemon juice&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;half a teaspoon of baking powder&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;half a teaspoon of sodium bicarbonate&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;1 teaspoon of vanilla paste&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;pinch of salt&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div dir=&quot;LTR&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;&lt;b&gt;Preparation&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir=&quot;LTR&quot;&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;Whisk the egg whites until stiff&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;Add the lemon juice, the honey, the vanilla paste and the almond essence.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;Whisk vigorously. The mixture will become much softer, but it should still be fluffy.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;Add the caster sugar, the baking power, the sodium bicarbonate and the salt.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span lang=&quot;en-au&quot;&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;Whisk&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;en-au&quot;&gt; &lt;span style=&quot;color: #1f497d; font-family: Calibri;&quot;&gt;vigorously&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;en-au&quot;&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;Add the almond meal.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;No more whisking. This time use a spoon to mix everything. The result should be a soft and somewhat loose cookie dough that will hold whatever shape you want to give it.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;Make small balls of about 4cm and roll them in the icing sugar. Then shape them however you like and put on a baking tray lined with baking paper (no need to grease it up).&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;div dir=&quot;LTR&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;&lt;b&gt;Cooking&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;en-au&quot;&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;Bake at 180&#39;C for 15 mins. The aim is to make thick cookies that are somewhat crunchy outside and soft and sligthly chewy on the inside, so bear in mind that any shape less than 2cm thick will cook quickly and get crunchy quickly. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir=&quot;LTR&quot;&gt;&lt;span lang=&quot;en-au&quot;&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;After baking, you can use any leftover icing sugar to dust the lot, or you can just enjoy them &#39;au naturel&#39;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;en-au&quot;&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;en-au&quot;&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;Enjoy!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;en-au&quot;&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;M.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Calibri;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/2968643449974509011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/2968643449974509011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/2968643449974509011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/2968643449974509011'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2010/12/paste-di-mandorla-almond-biscuits.html' title='Paste di Mandorla (Almond Biscuits)'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-6305304670083928545</id><published>2010-05-22T10:00:00.002+10:00</published><updated>2010-05-22T10:05:37.322+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cooking"/><category scheme="http://www.blogger.com/atom/ns#" term="pancakes"/><category scheme="http://www.blogger.com/atom/ns#" term="recipes"/><title type='text'>Marco&#39;s Pancakes</title><content type='html'>M&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;akes 6-8 hand-sized pancakes.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;b&gt;Ingredients&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;1 cup of self-raising flour&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;1 cup of semi-skimmed milk&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;1/2 cup of almond meal&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;1 egg&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;2 tablespoons of sugar&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;1 teaspoon of margarine&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;1 tablespoon of lemon juice&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;1/2 teaspoon of baking powder&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;pinch of salt&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;b&gt;Preparation&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;Put the margarine and the milk in a pan and warm them up slowly. The milk must be just warm, not hot, and the margarine should be all melted. Stir gently if needed.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;While the milk is warming up, sift the flour and almond meal in a bowl, then add the sugar, the salt and the baking powder.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;Beat the egg and the lemon juice lightly and leave it on the side.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;When the milk is warm and the margarine has melted, add the beaten egg to the flour, then the warm milk and start whisking. If the milk is hot, the egg will start cooking immediately and the mixture will get lumpy. Whisk until you get a smooth dense mixture . If it&#39;s too liquid, sift more flour into it while whisking.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;Leave the pancake mix to rest for a minute or two.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;b&gt;Cooking&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;While the pancake mix is resting, you can use this time to start heating up a frying pan on a medium-high heat. If the heat is too high the pancakes will burn easily on the outside without cooking properly, so this might take a little bit of experimenting.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;I use olive oil to cook the pancakes, but some people prefer butter or margarine. With olive oil, I use a few drops in the middle of the pan and then shake the pan vigorously so that lots of tiny droplets roughly cover the whole surface.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;Gently pour the pancake mix in the middle of the pan and let it cook for just over a minute. You should see lots of little bubbles being produced, covering pretty much the whole pancake. After a minute, check the bottom of the pancake: if it&#39;s a bit brown it&#39;s time to turn it over and let it cook for another minute or less.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px;&quot;&gt;The size of the bubbles depends on how much baking powder you put in the mix, so if few or no bubbles appear you can try adding a quarter of a teaspoon of baking powder to the mix and whisk again throughly.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;Enjoy.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/6305304670083928545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/6305304670083928545' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/6305304670083928545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/6305304670083928545'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2010/05/marcos-pancakes.html' title='Marco&#39;s Pancakes'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-424790572523135758</id><published>2010-04-02T22:13:00.004+11:00</published><updated>2010-05-22T10:04:56.184+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="embedded linux"/><category scheme="http://www.blogger.com/atom/ns#" term="msii"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="raid"/><title type='text'>RAIDers of the Lost Disk (again)</title><content type='html'>Here we go again. The NAS is not happy.&lt;br /&gt;
Just out of curiosity, I see if there is a hacked firmware based on a more recent image, and I find &lt;a href=&quot;http://www.openmss.org/forum/viewtopic.php?f=10&amp;amp;t=1026#p4842&quot;&gt;one based on version 3.4.90&lt;/a&gt;, with SSH of course.&lt;br /&gt;
So here we go. Let&#39;s check the RAID device...&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~ # mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.01
  Creation Time : Sat May  5 06:30:50 2007
     Raid Level : raid1
     Array Size : 487106752 (464.54 GiB 498.80 GB)
    Device Size : 487106752 (464.54 GiB 498.80 GB)
   Raid Devices : 2
  Total Devices : 1
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Fri May 22 15:20:30 2009
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           UUID : 7ff7415e:4719112d:d63dd33d:40ff685f
         Events : 0.525126

    Number   Major   Minor   RaidDevice State
       0       0        0        -      removed
       1       8        6        1      active sync   /dev/sda6
&lt;/pre&gt;&lt;br /&gt;
Again only one drive out of two.&lt;br /&gt;
Let&#39;s see what happened to /dev/sdb.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~ # /usr/sbin/smartctl -l selftest /dev/sdb
smartctl version 5.1-14 Copyright (C) 2002-3 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Self-test log, version number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended off-line   Completed                     00%      7474         -
# 2  Off-line            Interrupted (host reset)      50%      7466         -
# 3  Off-line            Interrupted (host reset)      50%      7379         -
# 4  Short off-line      Completed: read failure       50%      7334         0x00032141
# 5  Off-line            Interrupted (host reset)      00%      7334         -
# 6  Short off-line      Completed                     00%      7330         -
# 7  Off-line            Interrupted (host reset)      00%      7330         -
# 8  Off-line            Interrupted (host reset)      00%      5973         -
# 9  Off-line            Interrupted (host reset)      00%      5396         -
#10  Off-line            Interrupted (host reset)      00%      5393         -
#11  Off-line            Interrupted (host reset)      00%      5376         -
#12  Short off-line      Completed                     00%      4687         -
#13  Off-line            Interrupted (host reset)      00%      4687         -
#14  Off-line            Interrupted (host reset)      00%      4003         -
#15  Off-line            Interrupted (host reset)      00%      3819         -
#16  Short off-line      Completed                     00%      3659         -
#17  Short off-line      Completed                     00%      3659         -
#18  Short off-line      Completed                     00%      3655         -
#19  Off-line            Interrupted (host reset)      70%      3652         -
#20  Short off-line      Aborted by host               70%      3652         -
#21  Off-line            Interrupted (host reset)      00%      3651         -
&lt;/pre&gt;&lt;br /&gt;
Ouch! LBA_of_first_error = 0x32141 (= 205121 in base 10)&lt;br /&gt;
Let&#39;s check also the SMART attributes.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~ # /usr/sbin/smartctl -A /dev/sdb
smartctl version 5.1-14 Copyright (C) 2002-3 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 32
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  3 Spin_Up_Time            0x0027   168   162   063    Pre-fail  Always       -       18676
  4 Start_Stop_Count        0x0032   210   210   000    Old_age   Always       -       20884
  5 Reallocated_Sector_Ct   0x0033   253   253   063    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000a   253   252   000    Old_age   Always       -       0
  8 Seek_Time_Performance   0x0027   247   243   187    Pre-fail  Always       -       41160
  9 Power_On_Hours          0x0032   232   232   000    Old_age   Always       -       7559
 10 Spin_Retry_Count        0x002b   253   252   157    Pre-fail  Always       -       0
 11 Calibration_Retry_Count 0x002b   253   252   223    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   253   253   000    Old_age   Always       -       76
189 Unknown_Attribute       0x003a   100   100   000    Old_age   Always       -       0
190 Unknown_Attribute       0x0022   056   039   000    Old_age   Always       -       959119404
192 Power-Off_Retract_Count 0x0032   253   253   000    Old_age   Always       -       0
193 Load_Cycle_Count        0x0032   253   253   000    Old_age   Always       -       0
194 Temperature_Celsius     0x0032   046   253   000    Old_age   Always       -       44
195 Hardware_ECC_Recovered  0x000a   252   210   000    Old_age   Always       -       37129
196 Reallocated_Event_Count 0x0008   253   253   000    Old_age   Offline      -       0
197 Current_Pending_Sector  0x0008   253   253   000    Old_age   Offline      -       0
198 Offline_Uncorrectable   0x0008   253   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0008   199   199   000    Old_age   Offline      -       0
200 Multi_Zone_Error_Rate   0x000a   253   252   000    Old_age   Always       -       0
201 Soft_Read_Error_Rate    0x000a   253   252   000    Old_age   Always       -       0
202 Unknown_Attribute       0x000a   253   252   000    Old_age   Always       -       0
203 Unknown_Attribute       0x000b   253   252   180    Pre-fail  Always       -       11
204 Unknown_Attribute       0x000a   253   252   000    Old_age   Always       -       0
205 Unknown_Attribute       0x000a   253   252   000    Old_age   Always       -       0
207 Unknown_Attribute       0x002a   253   252   000    Old_age   Always       -       0
208 Unknown_Attribute       0x002a   253   252   000    Old_age   Always       -       0
210 Unknown_Attribute       0x0032   253   252   000    Old_age   Always       -       0
211 Unknown_Attribute       0x0032   253   252   000    Old_age   Always       -       0
212 Unknown_Attribute       0x0032   253   252   000    Old_age   Always       -       0
&lt;/pre&gt;&lt;br /&gt;
Not too bad after all, since&lt;br /&gt;
Current_Pending_Sector = 0&lt;br /&gt;
Offline_Uncorrectable = 0&lt;br /&gt;
&lt;br /&gt;
Now let&#39;s find which partition has the problem.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~ # fsck.ext3 -nv /dev/sdb1
e2fsck 1.38 (30-Jun-2005)
/dev/sdb1: clean, 3045/64256 files, 24511/64252 blocks

~ # fsck.ext3 -nv /dev/sdb2
e2fsck 1.38 (30-Jun-2005)
Warning!  /dev/sdb2 is mounted.
Warning: skipping journal recovery because doing a read-only filesystem check.
/dev/sdb2 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found.  Create? no

Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (39452, counted=39449).
Fix? no

Free inodes count wrong (61113, counted=61112).
Fix? no


/dev/sdb2: ********** WARNING: Filesystem still has errors **********


    2887 inodes used (4%)
      13 non-contiguous inodes (0.5%)
         # of inodes with ind/dind/tind blocks: 156/0/0
   24548 blocks used (38%)
       0 bad blocks
       1 large file

    2309 regular files
     175 directories
      47 character device files
      40 block device files
       0 fifos
       8 links
     308 symbolic links (308 fast symbolic links)
       0 sockets
--------
    2887 files

&lt;/pre&gt;&lt;br /&gt;
/dev/sdb3 is a swap partition, so we can skip that.&lt;br /&gt;
/dev/sdb4 is an extended partition, so we can skip that too.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~ # fsck.ext3 -nv /dev/sdb5
e2fsck 1.38 (30-Jun-2005)
Warning!  /dev/sdb5 is mounted.
Warning: skipping journal recovery because doing a read-only filesystem check.
/dev/sdb5 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found.  Create? no

Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (118269, counted=118286).
Fix? no

Free inodes count wrong (126523, counted=126537).
Fix? no


/dev/sdb5: ********** WARNING: Filesystem still has errors **********


      69 inodes used (0%)
       4 non-contiguous inodes (5.8%)
         # of inodes with ind/dind/tind blocks: 0/0/0
    8235 blocks used (6%)
       0 bad blocks
       1 large file

      32 regular files
      14 directories
       0 character device files
       0 block device files
       0 fifos
       0 links
       0 symbolic links (0 fast symbolic links)
       0 sockets
--------
      46 files

~ # fsck.ext3 -nv /dev/sdb6
e2fsck 1.38 (30-Jun-2005)
/dev/sdb6: clean, 93575/60899328 files, 56875141/121776688 blocks
&lt;/pre&gt;&lt;br /&gt;
So the errors are on /dev/sdb2 and /dev/sdb5&lt;br /&gt;
Let&#39;s see where they mount to.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~ # mount | grep /sdb
/dev/sdb1 on /mnt/__mxo_sdb1 type ext3 (rw)

~ # cat /proc/mounts | grep /sdb
/dev/sdb5 /tmp ext3 rw 0 0

~ # cat /proc/cmdline
console=ttyS0,115200 root=/dev/sdb2 rw
&lt;/pre&gt;&lt;br /&gt;
Are we booting from /dev/sdb2?&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~ # mxoparam -h

Maxtor mxoparam version 1.0
-a         show all maxtor params
-b         get wait for button status
-c [0-1]        set wait for button 0 = Off 1 = On
-d         show max number of drives
-e         enable watchdog in uboot
-f         disable watchdog in uboot
-g         set led solid green
-h         show help
-k         kick watchdog
-p         get boot partition
-q [part]  set boot partition
           0 = drive 0 partition 1
           1 = drive 0 partition 2
           2 = drive 1 partition 1
           3 = drive 1 partition 2
-r         reset partion fail count
-s         get serial number
-t [sn]    set serial number
-v         show version
-x         disable watchdog now
-w         enable watchdog now
-y         set led solid yellow

~ # mxoparam -p
Boot partition is 3

&lt;/pre&gt;Looks like the system is booting from the second disk, second partition (/dev/sdb2)&lt;br /&gt;
This means we can&#39;t unmount it, and we need to unmount it before we can fix it.&lt;br /&gt;
Therefore, we need to make the system boot from /dev/sda2 otherwise we won&#39;t be able to fix /dev/sdb*&lt;br /&gt;
&lt;br /&gt;
First of all, let&#39;s make sure /dev/sda2 is exactly the same as /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~ # dd if=/dev/sdb2 of=/dev/sda2

~ # mount -n /dev/sda2 /mnt/__mxo_sda2 -t ext3

~ # cp -a /mnt/__mxo_sdb2 /mnt/__mxo_sda2


Now let&#39;s set the new boot partition





&lt;pre&gt;~ # mxoparam -q 1
&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;REBOOT!
...
Let&#39;s check it&#39;s booting up from the right place now.





&lt;pre&gt;~ # cat /proc/cmdline
console=ttyS0,115200 root=/dev/sda2 rw
&lt;/pre&gt;Right! We&#39;re ready to fix /dev/sdb2 and /dev/sdb5 now!





&lt;pre&gt;~ # fsck -v /dev/sdb2
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sdb2 has gone 384 days without being checked, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found.  Create&lt;y&gt;? yes

Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/sdb2: ***** FILE SYSTEM WAS MODIFIED *****

    3157 inodes used (4%)
      14 non-contiguous inodes (0.4%)
         # of inodes with ind/dind/tind blocks: 159/0/0
   24622 blocks used (38%)
       0 bad blocks
       1 large file

    2317 regular files
     179 directories
     246 character device files
      84 block device files
       0 fifos
       7 links
     321 symbolic links (321 fast symbolic links)
       0 sockets
--------
    3154 files


~ # fsck -v /dev/sdb5
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sdb5: recovering journal
/dev/sdb5 has been mounted 35 times without being checked, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found.  Create&lt;y&gt;? yes

Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/sdb5: ***** FILE SYSTEM WAS MODIFIED *****

    2939 inodes used (2%)
      28 non-contiguous inodes (1.0%)
         # of inodes with ind/dind/tind blocks: 159/0/0
   26690 blocks used (21%)
       0 bad blocks
       1 large file

    2345 regular files
     189 directories
      47 character device files
      40 block device files
       0 fifos
       8 links
     308 symbolic links (308 fast symbolic links)
       0 sockets
--------
    2937 files
&lt;/y&gt;&lt;/y&gt;&lt;/pre&gt;Now we can rebuild the RAID array.







&lt;pre&gt;~ # mdadm --manage --add /dev/md0 /dev/sdb6
mdadm: hot added /dev/sdb6
NAS:~ # mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.01
  Creation Time : Sat May  5 06:30:50 2007
     Raid Level : raid1
     Array Size : 487106752 (464.54 GiB 498.80 GB)
    Device Size : 487106752 (464.54 GiB 498.80 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat May 23 14:39:50 2009
          State : clean, degraded, recovering
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1

 Rebuild Status : 0% complete

           UUID : 7ff7415e:4719112d:d63dd33d:40ff685f
         Events : 0.541445

    Number   Major   Minor   RaidDevice State
       0       0        0        -      removed
       1       8        6        1      active sync   /dev/sda6

       2       8       22        0      spare rebuilding   /dev/sdb6

~ # cat /proc/mdstat
Personalities : [linear] [raid1]
md0 : active raid1 sdb6[2] sda6[1]
      487106752 blocks [2/1] [_U]
      [&amp;gt;....................]  recovery =  1.5% (7396736/487106752) finish=145.1min speed=55092K/sec
unused devices: [none]
&lt;/pre&gt;Good... 
2.5 hours later...






&lt;pre&gt;~ # cat /proc/mdstat
Personalities : [linear] [raid1]
md0 : active raid1 sdb6[0] sda6[1]
      487106752 blocks [2/2] [UU]

unused devices: [none]
&lt;/pre&gt;Reboot again and we&#39;re done!&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/424790572523135758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/424790572523135758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/424790572523135758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/424790572523135758'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2010/04/raiders-of-lost-disk-again.html' title='RAIDers of the Lost Disk (again)'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-4364171919899331128</id><published>2010-04-02T08:05:00.004+11:00</published><updated>2010-05-22T10:06:16.224+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="embedded linux"/><category scheme="http://www.blogger.com/atom/ns#" term="msii"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="raid"/><title type='text'>Maxtor Shared Storage II - LED Codes</title><content type='html'>I just want to write this for future reference, since the &lt;a href=&quot;https://seagate.custkb.com/seagate/crm/selfservice/portalhome.jsp?DocId=195891&amp;amp;Hilite=&quot;&gt;relevant link&lt;/a&gt; on the Seagate support website has already changed a couple of times and I don&#39;t want to keep wasting time looking for it next time it changes.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRLgNoTkUCwfOVTjD2-UM90kVJUHQslDLlqWpxEWNt1SCL3iLo2NMz468ovjtvCH26aUq8sU9hB4P0ojHoKQHasmMBXmaegimtVNnBfu6l9n6Ig0G3M3Rvc6kKiADEnqNECX2PYIIPkieb/s1600/BackPanel.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRLgNoTkUCwfOVTjD2-UM90kVJUHQslDLlqWpxEWNt1SCL3iLo2NMz468ovjtvCH26aUq8sU9hB4P0ojHoKQHasmMBXmaegimtVNnBfu6l9n6Ig0G3M3Rvc6kKiADEnqNECX2PYIIPkieb/s320/BackPanel.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Back Panel LED Codes&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;thead&gt;
&lt;tr&gt; &lt;td&gt;LED&lt;/td&gt;  &lt;td&gt;Definition&lt;/td&gt;  &lt;td&gt;Status&lt;/td&gt;  &lt;/tr&gt;
&lt;/thead&gt; &lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Power LED&lt;br /&gt;
&lt;br /&gt;
(located in center of the power button)&lt;/td&gt;  &lt;td&gt;Power Switch&lt;/td&gt;  &lt;td&gt;Illuminated &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power On  &lt;br /&gt;
Not Illuminated &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power Off&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Ethernet LED &lt;br /&gt;
&lt;br /&gt;
(located on bottom side of Ethernet connector)&lt;/td&gt;   &lt;td&gt;Shows if the drive is connected through a 10/100 or a 1 Gb Ethernet connection.&lt;br /&gt;
Left Green &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - 10/100 Mbps Ethernet connectivity&lt;br /&gt;
Left Amber &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - 1 Gbps Ethernet connectivity&lt;/td&gt;   &lt;td rowspan=&quot;2&quot;&gt;Illuminated &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power On&lt;br /&gt;
Blinking &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Network communication is occurring&lt;br /&gt;
Not Illuminated &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power Off&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Activity LED &lt;br /&gt;
&lt;br /&gt;
(located on top side of Ethernet connector)&lt;/td&gt;    &lt;td&gt;A flashing Activity LED indicates that the network connection is functional and that packets are being transmitted or received.&lt;/td&gt;    &lt;/tr&gt;
&lt;/tbody&gt;  &lt;/table&gt;&lt;b&gt;Front Panel LED Codes&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;thead&gt;
&lt;tr&gt; &lt;td&gt;LED&lt;/td&gt;  &lt;td&gt;Definition&lt;/td&gt;  &lt;td&gt;Status&lt;/td&gt;  &lt;/tr&gt;
&lt;/thead&gt; &lt;tbody&gt;
&lt;tr&gt; &lt;td&gt;Top&lt;/td&gt;  &lt;td&gt;Power Activity&lt;/td&gt;  &lt;td&gt;Illuminated &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power On Blinking &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Drive is either powering up or shutting down  &lt;br /&gt;
Not Illuminated &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power Off&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Center&lt;/td&gt;   &lt;td&gt;Hard Disk Activity&lt;/td&gt;   &lt;td&gt;Illuminated &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power On Blinking &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Data is being transferred to/from the drive &lt;br /&gt;
Not Illuminated &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power Off&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Bottom&lt;/td&gt;    &lt;td&gt;Network Activity&lt;/td&gt;    &lt;td&gt;Illuminated &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power On Blinking &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Network communication is occurring &lt;br /&gt;
Not Illuminated &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Power Off&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt; &lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVImplqYKVixJCPBozqTEc5sQjcJp2E7GBsWhynlXMln2zplN_wILFIl9L65BW73zrBYWeJOunKaSa3aq4nGhIkhUFznGhOLflrgLFZ_Vc7HWlAFTZqBdYNqcVadwu1uxVtc0RqV6Xpmqk/s1600/FrontPanel.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVImplqYKVixJCPBozqTEc5sQjcJp2E7GBsWhynlXMln2zplN_wILFIl9L65BW73zrBYWeJOunKaSa3aq4nGhIkhUFznGhOLflrgLFZ_Vc7HWlAFTZqBdYNqcVadwu1uxVtc0RqV6Xpmqk/s320/FrontPanel.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Front Panel LED Error Codes&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;thead&gt;
&lt;tr&gt; &lt;td&gt;Green LED - Number of Blinks&lt;/td&gt;  &lt;td&gt;Amber LED - Number of Blinks&lt;/td&gt;  &lt;td&gt;Status&lt;/td&gt;  &lt;/tr&gt;
&lt;/thead&gt; &lt;tbody&gt;
&lt;tr&gt; &lt;td&gt;1&lt;/td&gt;  &lt;td&gt;4&lt;/td&gt;  &lt;td&gt;/share file system error&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;1&lt;/td&gt;  &lt;td&gt;3&lt;/td&gt;  &lt;td&gt;Boot Error - Attempting to boot from disk 0&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;2&lt;/td&gt;  &lt;td&gt;3&lt;/td&gt;  &lt;td&gt;Boot Error - Attempting to boot from disk 1&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;1&lt;/td&gt;  &lt;td&gt;2&lt;/td&gt;  &lt;td&gt;HDD S.M.A.R.T. Error - Attempting to boot from disk 0&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;2&lt;/td&gt;  &lt;td&gt;2&lt;/td&gt;  &lt;td&gt;HDD S.M.A.R.T. Error - Attempting to boot from disk 1&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;1&lt;/td&gt;  &lt;td&gt;1&lt;/td&gt;  &lt;td&gt;RAID Error&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;  &lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/4364171919899331128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/4364171919899331128' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4364171919899331128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4364171919899331128'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2010/04/maxtor-shared-storage-ii-led-codes.html' title='Maxtor Shared Storage II - LED Codes'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRLgNoTkUCwfOVTjD2-UM90kVJUHQslDLlqWpxEWNt1SCL3iLo2NMz468ovjtvCH26aUq8sU9hB4P0ojHoKQHasmMBXmaegimtVNnBfu6l9n6Ig0G3M3Rvc6kKiADEnqNECX2PYIIPkieb/s72-c/BackPanel.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-4299952044255902747</id><published>2010-03-19T22:07:00.005+11:00</published><updated>2016-05-26T20:19:14.482+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="SDLC"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering"/><title type='text'>Software Engineering Wishlist #1</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
This is just the beginning of a wishlist for my software engineering and development world. Things I would like to be able to do, technology trends etc. I expect this wishlist to be continuously expanding, so this is only part 1. &lt;br /&gt;
&lt;br /&gt;
I want to be able to... &lt;br /&gt;
...check my continuous integration status and logs from FaceBook. &lt;br /&gt;
...get my continuous integration results via SMS. &lt;br /&gt;
...update Bugzilla/Jira/whatever discussion threads via Twitter &lt;br /&gt;
...do some pair programming with something like Google Docs &lt;br /&gt;
...do some pair programming with a some kind of real-time plugin for Eclipse &lt;br /&gt;
...bring online and shut down continuous integration nodes with Google App Engine &lt;br /&gt;
...bring online and shut down full QA stacks with Amazon EC2 &lt;br /&gt;
...manage user stories with my smartphone&lt;br /&gt;
...write actual code with my smartphone on the train and upload/synchronise it later &lt;br /&gt;
...use my smartphone as a code repository for small projects &lt;br /&gt;
...use my smartphone&#39;s voice recognition capabilities to actually &lt;i&gt;dictate&lt;/i&gt; code to it &lt;br /&gt;
...perform code reviews with some kind of real-time plugin for Bugzilla/Jira/whatever &lt;br /&gt;
&lt;br /&gt;
More to come.&lt;br /&gt;
M.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/4299952044255902747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/4299952044255902747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4299952044255902747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4299952044255902747'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2010/03/software-engineering-wishlist-1.html' title='Software Engineering Wishlist #1'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-51800893156345644</id><published>2010-03-15T11:37:00.006+11:00</published><updated>2010-05-22T10:10:07.714+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="embedded linux"/><category scheme="http://www.blogger.com/atom/ns#" term="msii"/><category scheme="http://www.blogger.com/atom/ns#" term="nas"/><category scheme="http://www.blogger.com/atom/ns#" term="raid"/><title type='text'>RAIDers of the Lost Disk</title><content type='html'>A few years ago I decided it was a good idea to have a dedicated file server in my home. After a bit of looking around, I set my mind on a &lt;a href=&quot;http://www.seagate.com/ww/v/index.jsp?locale=en-US&amp;amp;name=shared-storage&amp;amp;vgnextoid=f834004f9f650110VgnVCM100000f5ee0a0aRCRD&quot;&gt;Maxtor Shared Storage II - 1TB&lt;/a&gt;. This has 2 drives of 500GB each inside, and it can be set up as a Raid-0 or Raid-1 device. It is configured via a simple web interface. &lt;br /&gt;
I bought one and configured it as a Raid-1 device. After a short while, I also decided to update the firmware with a version based on &lt;a href=&quot;http://www.openmss.org/forum/viewtopic.php?f=10&amp;amp;t=787#p3883&quot;&gt;OpenMSS&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Shortly after the warranty expired, one of the drives failed badly. The clicking that was coming out of it was pretty loud but in a twisted way also quite pleasant, somehow clicking along with Bob Marley&#39;s &quot;Redemption Songs&quot;. Anyway, I managed to replace the faulty drive and rebuild the array, and my file server has been living happily ever since... until yesterday. &lt;br /&gt;
&lt;br /&gt;
It was either a power failure or a loose PSU connector, or both. As a result, the power light started flashing alternatively green (once) and amber (once). I went to the diagnostics page only to find that my device was functioning &quot;within normal parameters&quot;. Hmmm... that can&#39;t be right. &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;~ # mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.01
  Creation Time : Sat May  5 06:30:50 2007
     Raid Level : raid1
     Array Size : 487106752 (464.54 GiB 498.80 GB)
    Device Size : 487106752 (464.54 GiB 498.80 GB)
   Raid Devices : 2
  Total Devices : 1
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue May  5 11:18:29 2009
          State : active, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           UUID : 7ff7415e:4719112d:d63dd33d:40ff685f
         Events : 0.515034

    Number   Major   Minor   RaidDevice State
       0       8       22        0      active sync   /dev/sdb6
       1       0        0        -      removed
&lt;/pre&gt;&lt;br /&gt;
What??? Removed??? How??? &lt;br /&gt;
&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;~ # mdadm --examine /dev/sda6
mdadm: cannot open /dev/sda6: No such file or directory
mdadm: cannot find device size for /dev/sda6: No such file or directory
&lt;/pre&gt;&lt;br /&gt;
Hmmm...  &lt;br /&gt;
&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;~ # ls /dev/sd*
/dev/sda   /dev/sda3  /dev/sda6  /dev/sdb1  /dev/sdb4  /dev/sdb7
/dev/sda1  /dev/sda4  /dev/sda7  /dev/sdb2  /dev/sdb5
/dev/sda2  /dev/sda5  /dev/sdb   /dev/sdb3  /dev/sdb6

~ # cat /proc/partitions
major minor  #blocks  name

   8    16  488386584 sdb
   8    17     257008 sdb1
   8    18     257040 sdb2
   8    19     257040 sdb3
   8    20          1 sdb4
   8    21     506016 sdb5
   8    22  487106833 sdb6
   8     0  488386584 sdc
   8     1     257008 sdc1
   8     2     257040 sdc2
   8     3     257040 sdc3
   8     4          1 sdc4
   8     5     506016 sdc5
   8     6  487106833 sdc6
  31     0        256 mtdblock0
   9     0  487106752 md0
&lt;/pre&gt;&lt;br /&gt;
How exactly did my sd&lt;b&gt;&lt;u&gt;a&lt;/u&gt;&lt;/b&gt; partitions become sd&lt;b&gt;&lt;u&gt;c&lt;/u&gt;&lt;/b&gt;? Reboot? Yes, reboot! &lt;br /&gt;
... [reboot] ... &lt;br /&gt;
&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;~ # cat /proc/partitions
major minor  #blocks  name

   8     0  488386584 sda
   8     1     257008 sda1
   8     2     257040 sda2
   8     3     257040 sda3
   8     4          1 sda4
   8     5     506016 sda5
   8     6  487106833 sda6
   8    16  488386584 sdb
   8    17     257008 sdb1
   8    18     257040 sdb2
   8    19     257040 sdb3
   8    20          1 sdb4
   8    21     506016 sdb5
   8    22  487106833 sdb6
  31     0        256 mtdblock0
   9     0  487106752 md0
&lt;/pre&gt;&lt;br /&gt;
That&#39;s better, but how... ??? Anyway, let&#39;s check sda6. &lt;br /&gt;
&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;~ # mdadm --query /dev/sda6
/dev/sda6: is not an md array
/dev/sda6: device 1 in 2 device mismatch raid1 md0.  Use mdadm --examine for more detail.

~ # mdadm --examine /dev/sda6
/dev/sda6:
          Magic : a92b4efc
        Version : 00.90.01
           UUID : 7ff7415e:4719112d:d63dd33d:40ff685f
  Creation Time : Sat May  5 06:30:50 2007
     Raid Level : raid1
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0

    Update Time : Fri May  1 20:10:03 2009
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 34c79134 - correct
         Events : 0.513042


      Number   Major   Minor   RaidDevice State
this     1       8        6        1      active sync   /dev/sda6

   0     0       8       22        0      active sync   /dev/sdb6
   1     1       8        6        1      active sync   /dev/sda6
&lt;/pre&gt;&lt;br /&gt;
Mismatched, as I would expect, but it&#39;s clean. Good. &lt;br /&gt;
&lt;pre&gt;~ # mdadm --manage --add /dev/md0 /dev/sda6
mdadm: hot added /dev/sda6

~ # mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.01
  Creation Time : Sat May  5 06:30:50 2007
     Raid Level : raid1
     Array Size : 487106752 (464.54 GiB 498.80 GB)
    Device Size : 487106752 (464.54 GiB 498.80 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue May  5 11:22:02 2009
          State : clean, degraded, recovering
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1

 Rebuild Status : 0% complete

           UUID : 7ff7415e:4719112d:d63dd33d:40ff685f
         Events : 0.515210

    Number   Major   Minor   RaidDevice State
       0       8       22        0      active sync   /dev/sdb6
       1       0        0        -      removed

       2       8        6        1      spare rebuilding   /dev/sda6
&lt;/pre&gt;&lt;br /&gt;
Rebuilding. Good sign, but why do I stil have device 1 - removed - in the list? &lt;br /&gt;
&lt;pre&gt;~ # cat /proc/mdstat
Personalities : [linear] [raid1]
md0 : active raid1 sda6[2] sdb6[0]
      487106752 blocks [2/1] [U_]
      [=&amp;gt;...................]  recovery =  9.8% (47870464/487106752) finish=114.8min speed=63713K/sec
unused devices: none
&lt;/pre&gt;&lt;br /&gt;
Under 2 hours to sync up. Time for coffee. &lt;br /&gt;
... [coffee] ... &lt;br /&gt;
&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;~ # cat /proc/mdstat
Personalities : [linear] [raid1]
md0 : active raid1 sda6[1] sdb6[0]
      487106752 blocks [2/2] [UU]
unused devices: none

~ # mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.01
  Creation Time : Sat May  5 06:30:50 2007
     Raid Level : raid1
     Array Size : 487106752 (464.54 GiB 498.80 GB)
    Device Size : 487106752 (464.54 GiB 498.80 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue May  5 14:05:25 2009
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 7ff7415e:4719112d:d63dd33d:40ff685f
         Events : 0.515939

    Number   Major   Minor   RaidDevice State
       0       8       22        0      active sync   /dev/sdb6
       1       8        6        1      active sync   /dev/sda6
&lt;/pre&gt;&lt;br /&gt;
One last reboot and we&#39;re back on track.&lt;br /&gt;
Sorted.</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/51800893156345644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/51800893156345644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/51800893156345644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/51800893156345644'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2010/03/raiders-of-lost-disk.html' title='RAIDers of the Lost Disk'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-5418831688706749116</id><published>2010-02-18T22:02:00.004+11:00</published><updated>2010-05-22T10:11:39.916+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="glassfish"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering"/><title type='text'>Eclipsed by an Ant</title><content type='html'>I&#39;ve been stuck on a web project for a while. Well, not really on the project itself, I&#39;ve actually been stuck on running it with the &lt;a href=&quot;http://download.java.net/glassfish/eclipse/&quot;&gt; GlassFish Tools Bundle for Eclipse v1.2&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
The bundle comes with two version of GlassFish: v2.1 and v3 Prelude. I never had problems running the project on v3, but every time I tried to use to v2.1 my Eclipse would get stuck during the publishing phase with this message: &lt;b&gt;&quot;Publishing to Bundled GlassFish, waiting for virtual machine to exit...&quot;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
It turns out that the difference in the publishing phase between the bundled GlassFish v2.1 and v3 is that the former uses &lt;a href=&quot;http://ant.apache.org/&quot;&gt;Apache Ant&lt;/a&gt;. So I checked the Ant runtime home entries on Eclipse and found out they were messed up, pointing at the Axis2 plugin! I must have happened during the installation of the &lt;a href=&quot;http://ws.apache.org/axis2/tools/1_0/eclipse/wsdl2java-plugin.html&quot;&gt;Axis2 Code Generator Wizard&lt;/a&gt;. Fixing the Ant home entries finally allowed me to publish the project to the bundled GlassFish v2.1 &lt;br /&gt;
&lt;br /&gt;
Here are the steps in Eclipse 3.4 (Ganymede): &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Click on Windows -&amp;gt; Preferences&lt;/li&gt;
&lt;li&gt;Expand the Ant node and select the Runtime child node&lt;/li&gt;
&lt;li&gt;In the Classpath tab, select Ant Home Entries from the list&lt;/li&gt;
&lt;li&gt;Click the Ant Home button to bring up the folder browser&lt;/li&gt;
&lt;li&gt;In the folder browser, navigate to the folder where Ant was installed&lt;/li&gt;
&lt;li&gt;Click OK to go back to the Eclipse preferences dialog&lt;/li&gt;
&lt;li&gt;Click Apply, then click OK&lt;/li&gt;
&lt;/ol&gt;Done.&lt;br /&gt;
M.</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/5418831688706749116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/5418831688706749116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/5418831688706749116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/5418831688706749116'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2010/02/eclipsed-by-ant.html' title='Eclipsed by an Ant'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-4677865462629294024</id><published>2009-10-27T00:33:00.002+11:00</published><updated>2010-05-22T10:14:12.317+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="euclid"/><category scheme="http://www.blogger.com/atom/ns#" term="geometry"/><category scheme="http://www.blogger.com/atom/ns#" term="pythagoras"/><category scheme="http://www.blogger.com/atom/ns#" term="quantised space"/><title type='text'>Pythagoras On Screen</title><content type='html'>&lt;a href=&quot;http://en.wikipedia.org/wiki/Euclides&quot;&gt;Euclid of Alexandria&lt;/a&gt; &quot;invented&quot; geometry. Before him, there was no squares or circles. Everything was just a collection of messy shapes. One even wonders how they managed to build houses without straight lines and triangles. &lt;br /&gt;
&lt;br /&gt;
Ok, just kidding...&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Pythagoras&quot;&gt;Pythagoras of Samos&lt;/a&gt; actually did know a thing or two about triangles before Euclid ever did, so much so that he discovered the mathematical relationship between the sides of right-angled triangles. &lt;br /&gt;
How are these two gentlemen related? Well, they lived a couple of centuries apart, so they are not directly related to each other as such, but in terms of mathematics they are very closely related: the pythagorean theorem only &quot;works properly&quot; in euclidean spaces. &lt;br /&gt;
&lt;br /&gt;
What are euclidean spaces? They are those spaces that satisfy the axioms of &lt;a href=&quot;http://en.wikipedia.org/wiki/Euclidean_geometry&quot;&gt;Euclidean geometry&lt;/a&gt;. Most of us have studied Euclidean geometry at school: we learn that the shortest path between two points is the straight line, that the sum of the angles of a triangle is 180 degrees, and other wonderful rules. &lt;br /&gt;
A lot of these rules, however, start falling apart when we try to apply them to &lt;a href=&quot;http://en.wikipedia.org/wiki/Non-Euclidean_geometry&quot;&gt;non-Euclidean geometries&lt;/a&gt;. In general, though, if we stick to flat 2-D surfaces (like a piece of paper), Euclid&#39;s rules will survive just fine. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Let&#39;s test this. &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If we draw on a piece of paper a right-angled triangle, with one leg being 300mm long and the other being 400mm long, Pythagoras taught us that the hypotenuse should be 500mm long, and indeed it is. In general, the hypotenuse will always be longer than either of the two legs. &lt;br /&gt;
What else do we have, apart from a piece of paper resting on a desk, that is a flat 2-D surface? Well, there&#39;s the flat LCD screen on which I&#39;m writing this article, of course. So if I draw a segment that is 300 pixels long, at a right angle with another segment that is 400 pixels long, then I should be able to join the two open ends of each segment with a third segment that is 500 pixels long, right? &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Wrong. &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Why? The reason is not that difficult to find: the computer screen is not a continuous surface: it&#39;s made out of &quot;tiles&quot; called pixels, and each pixel is either turned on or off. There is no such thing as a fractionary pixel, so you can&#39;t draw half a pixel, or two-third of a pixel: you either draw it entirely or you don&#39;t. In other words, the surface of my LCD screen is &lt;i&gt;quantised&lt;/i&gt;. So when the two legs of my right-angled triangle on screen are 12 and 8 pixels long, the hypotenuse cannot possibly be 14.42 pixels. So how long is it? 14 pixels? 15 pixels? Does it round up by eccess or by defect? &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Well... Neither. &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that it depends on how you want to draw the line so that it appears continuous to the average person looking at the screen. I think two pixels can be considered contiguous if they touch each other one way or another, even if only by one corner. Sticking to this constraint, the minimum number of pixels required to draw the hypotenuse of the above triangle would be 12, which is the same number of pixels required to draw the longest leg of the triangle. &lt;br /&gt;
&lt;br /&gt;
In my head, this means two very important things: &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;quantised surfaces are not Euclidean in nature, even though they may intuitively appear to be so&lt;/li&gt;
&lt;li&gt;the concept of &quot;distance&quot; between two points on a quantised surface is very, very funny&lt;/li&gt;
&lt;/ol&gt;M.</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/4677865462629294024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/4677865462629294024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4677865462629294024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/4677865462629294024'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2009/10/pythagoras-on-screen.html' title='Pythagoras On Screen'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-3855117273206612458</id><published>2009-09-10T19:28:00.003+10:00</published><updated>2010-05-22T10:15:02.693+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mathematics"/><category scheme="http://www.blogger.com/atom/ns#" term="series"/><title type='text'>To Infinity and Beyond</title><content type='html'>Here&#39;s a thought... &lt;br /&gt;
&lt;br /&gt;
Let&#39;s take two &lt;a href=&quot;http://en.wikipedia.org/wiki/Series_(mathematics)&quot;&gt;series&lt;/a&gt;, call them A and B.&lt;br /&gt;
Let&#39;s say each term in A is &lt;b&gt;less than or equal to&lt;/b&gt; the corresponding term in B.&lt;br /&gt;
Logic would suggest that, if B is convergent, then A is convergent too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So how about this... &lt;br /&gt;
&lt;br /&gt;
Let B be the geometric series 1 + 2/3 + 4/9 + 8/27 + ... + (2/3)^N + ... &lt;br /&gt;
This series converges to 3. &lt;br /&gt;
&lt;br /&gt;
Let A be the series 1 + 1/2 + 1/3 + 1/4 + ... + (1/N) + ... &lt;br /&gt;
This series is not convergent. &lt;br /&gt;
&lt;br /&gt;
However, each term of A is &lt;b&gt;less than or equal to&lt;/b&gt; the corresponding term in B, i.e.&lt;br /&gt;
1 &amp;lt;= 1 1/2 &amp;lt;= 2/3 1/3 &amp;lt;= 4/9 1/4 &amp;lt;= 8/27 ... 1/N &amp;lt;= (2/3)^N ... &lt;br /&gt;
&lt;br /&gt;
If B is convergent, doesn&#39;t this mean that A should be convergent too?&lt;br /&gt;
Hmmmm...&lt;br /&gt;
M.</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/3855117273206612458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/3855117273206612458' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/3855117273206612458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/3855117273206612458'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2009/09/to-infinity-and-beyond.html' title='To Infinity and Beyond'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8327175718357293050.post-1022007471515261686</id><published>2009-08-21T06:08:00.001+10:00</published><updated>2009-09-11T00:45:52.409+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Aikido"/><title type='text'>Ushiro Irimi Nage</title><content type='html'>No, there&#39;s no such thing as ushiro irimi nage, as far as I know... or is there?
&lt;p/&gt;
I was training as usual on Thursday, starting with one hour of aiki-jo (time to brush up the 13 jo kata), then off to tai jutsu.
Without fail, we start with some tai no henko and morote dori kokkyu nage, and that&#39;s when I had the idea.
&lt;p/&gt;
After years of kokkyu nage, I never cease to find inspiration from this technique. It&#39;s difficult to explain the technique in words, as most aikidokas will know, but I&#39;ll try, so here are the basic concepts (in my opinion) of the morote dori kokkyu nage basic form:
&lt;ol&gt;
&lt;li&gt;Engage kokkyu.&lt;/li&gt;
&lt;li&gt;Slight step on the side, just enough to misalign the direction of attack.&lt;/li&gt;
&lt;li&gt;Lower the centre while keeping an upright posture, to break a potential arm lock.&lt;/li&gt;
&lt;li&gt;Turn and change hanmi while cutting upwards as if with aiki-ken.&lt;/li&gt;
&lt;li&gt;Enter uke&#39;s space while extending kokkyu up and to the rear (this breaks uke&#39;s balance).&lt;/li&gt;
&lt;li&gt;Rotate upper body (this starts the nage as uke starts falling backwards).&lt;/li&gt;
&lt;li&gt;Settle extending kokkyu down and to the rear (this completes the nage).&lt;/li&gt;
&lt;/ol&gt;
...and there was my revelation: steps 5, 6, and 7 are also the steps that complete all irimi nage techniques (at least in my head they are). Here&#39;s what I see happening in the irimi nage basic form, independently of the attack:
&lt;ol&gt;
&lt;li&gt;Enter uke&#39;s space while extending kokkyu up and at the front (this breaks uke&#39;s balance).&lt;/li&gt;
&lt;li&gt;Rotate upper body as in the fourth jo subury (this starts the nage as uke starts falling backwards).&lt;/li&gt;
&lt;li&gt;Settle extending kokkyu downwards (this completes the nage).&lt;/li&gt;
&lt;/ol&gt;
There are technical differences, of course. For example, the nage in irimi nage is always performed to the front, and it uses aiki-jo movements instead of aiki-ken, but both techniques are about entering uke&#39;s space strongly, extending kokkyu through uke&#39;s space, rotating the upper body and completing the nage by settling the body weight and extending kokkyu downwards.
&lt;p/&gt;Now, every time I think of the basic form of kokkyu nage I think of &quot;ushiro irimi nage&quot;, or &quot;irimi nage to the rear&quot;, and that changes the whole perspective of this technique. Is it right? Is it wrong? It doesn&#39;t matter. Every so often in aikido I find something that turns all my understandings upside down, or even throw them out of the window to start again from scratch, and that&#39;s why I love it.&lt;br&gt;
M.
&lt;p/&gt;</content><link rel='replies' type='application/atom+xml' href='http://marcoscata.blogspot.com/feeds/1022007471515261686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/8327175718357293050/1022007471515261686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/1022007471515261686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8327175718357293050/posts/default/1022007471515261686'/><link rel='alternate' type='text/html' href='http://marcoscata.blogspot.com/2009/08/ushiro-irimi-nage.html' title='Ushiro Irimi Nage'/><author><name>Marco</name><uri>http://www.blogger.com/profile/15753758394447795005</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzcxzvGSlgyyAM4fqv9ljXMHE_sGPWcZCImVTPGJuRVlWv8uon2iqUV3Mayx0cOjWSQetX9LFXTvWWXhBamI_4atfWbbA7P_RtB19eLqgbEVOkgp4NLkDAnrw8bJiDw/s220/face_neg.jpg'/></author><thr:total>0</thr:total></entry></feed>