tag:blogger.com,1999:blog-8389440991818831672024-03-13T21:32:20.657+00:00My KaizenHabit formation, study tips, technology reviews and general self-improvementsMike Rockehttp://www.blogger.com/profile/02571831173624227333noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-838944099181883167.post-88966644912668630792020-02-03T07:00:00.000+00:002020-02-03T07:00:11.209+00:00Tackling my fear of heightsI am afraid of heights. I am 6 foot 7 inches tall, and afraid of heights.<br />
<br />
I recently realized the extent of this fear, when I gave myself the task of cleaning the rain gutters. My girlfriend and I moved into our first home together, nearly 2 years ago, and it is the first time we have ever had to clean the gutters. Up until then, we lived separately, in middling floor apartments.<br />
<br />
Anyway, here I am, with my ladder propped against the side of the house, determined to clear the debris. I made it to 4 feet from the ground before fear took hold. It felt like an eternity, frozen part-way up a ladder, nowhere near where I need to be. I descend, shaking all the way down. It took me three attempts to climb up the ladder, to then give up. I was defeated.<br />
<br />
A few months have gone by, avoiding any thoughts of trying the ladder again. That was until I came across a podcast episode, Bravery by The Habit Coach. This inspired me to try again, and the perfect job was lined up, to wash the windows.<br />
<br />
The weekend came, time to tackle this fear head-on. Armed with the equipment I needed, I ascended the ladder to victory. Don't get me wrong, I was still afraid and my actions, unsophisticated, but a victory none the less. The difference between this time and the last was my war cry, "1, 2, 3, Go Go Go!" I said over and over in my head.<br />
<br />
Fast forward a few weeks now, and another task requires me to climb the ladder. Same height as the windows, but this time, screwing a small fixture to a wall. This is when I noticed a big difference in my confidence. With a mutterance of "Sod it, let's go", I climbed that ladder first time, no stalling. The ladder felt more natural, like an extension to the rest of me. Climbing back down the ladder felt a little undignified, but that did not worry me.<br />
<br />
What worked here for me is a little inspiration to make me tackle my fear head-on (Thank you to the Habit Coach) and to repeatedly go at it.<br />
<iframe allowfullscreen="" height="90" mozallowfullscreen="" msallowfullscreen="" oallowfullscreen="" scrolling="no" src="https://html5-player.libsyn.com/embed/episode/id/12122858/height/90/theme/custom/thumbnail/yes/direction/backward/render-playlist/no/custom-color/87A93A/" style="border-style: none; border-width: initial;" webkitallowfullscreen="" width="100%"></iframe><br />Mike Rockehttp://www.blogger.com/profile/02571831173624227333noreply@blogger.com0tag:blogger.com,1999:blog-838944099181883167.post-31213439471892784242020-01-27T08:01:00.000+00:002020-01-27T08:01:03.376+00:00Forming a study habit - What to do when stuck<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="margin-left: 1em; margin-right: 1em;">
</div>
With a limited study time per day, I cannot afford to waste it. Here are some techniques I use to be more effective.<br />
<br />
<h3>
Try a different resource</h3>
<br />
One mistake I make is re-reading a section of a book, over and over, hoping that it will stick. Sometimes it can be the explanation doesn't work for me, particularly with some authors. Other times, it can be the "obvious" bits that the reader is presumed to know while I am desperately checking how much of an idiot I am. Either way, it can be a costly and wasted effort to just revisit some material.<br />
<br />
A practice I learned while playing the guitar was to not fixate on the first guitar tab (a less formal version of sheet music) I came across. Some tabs lost the nuances like bending a string here or sliding a finger there, which makes the difference when rocking out to Metallica. I would remedy this, first by playing the song how I think it should be played with the first guitar tab as a guide while making notes on what bits sounded funny. I would then use other guitar tabs, videos and reduced speed versions of the song, to figure out where I am going wrong.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://upload.wikimedia.org/wikipedia/commons/6/6f/Kirk_Hammett_2017.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Image result for kirk hammett" border="0" height="200" src="https://upload.wikimedia.org/wikipedia/commons/6/6f/Kirk_Hammett_2017.jpg" width="143" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Kirk Hammett of Metallica</td></tr>
</tbody></table>
Music is great from all the mediums to learn from, like audio, video and text. Other subjects, like mathematics and science, can be more limiting. That's why we should take advantage of any material we can get a hold of. Luckily the internet has some great resources available, <a href="https://www.youtube.com/">https://www.youtube.com/</a> and <a href="https://www.coursera.org/">https://www.coursera.org/</a> are my first ports of call.<br />
<br />
<h3>
Take a break</h3>
<br />
We have briefly covered the importance of breaks in the Pomodoro Technique (<a href="https://www.mikerocke.co.uk/2020/01/forming-study-habit-pomodoro-technique.html" target="_blank">Forming study habit pomodoro technique</a>), but it is worth reiterating here.<br />
<br />
It may sound counter-intuitive, but stepping away from the problem you are working on for a few minutes can be more productive compared to keep going at it. For me, that break time is when I let my mind wander. I have experienced plenty of eureka moments when making a cup of tea, going for a walk or playing couple stages of Space Invaders. I also use these times to reflect on my work, sometimes discovering unpleasant edge cases.<br />
<br />
The hard bit I find is knowing when to take a break. On problems I love, time flys by. Problems I dislike, I will soldier on until I switch tact, not looking at the problem itself, but thinking how can I make this a problem I do enjoy. A few cues tell me when I need to pause: When the Pomodoro work session ends, when my tummy is grumbling or when I have copied and pasted something on the computer.<br />
<div>
<br /></div>
<br />
<br />
* Photo of Kirk Hammet - From Wikipedia [https://commons.wikimedia.org/wiki/File:Kirk_Hammett_2017.jpg], Ralph Arvesen [CC BY (https://creativecommons.org/licenses/by/2.0)]Mike Rockehttp://www.blogger.com/profile/02571831173624227333noreply@blogger.com0tag:blogger.com,1999:blog-838944099181883167.post-28804506708461944102020-01-20T08:00:00.000+00:002020-01-20T08:00:08.383+00:00Forming a study habit - Measurements<br />
At work, measurements are an important part of my role. I coach my direct reports on their goals and help evaluate their progress. I measure the cycle time of user stories. I try to get the error count to 0 in our production systems.<br />
<br />
<br />
For my habits, I measure them. I want to know how I am progressing and to keep motivation high.<br />
<br />
<i>“If you can’t measure it, you can’t improve it.” - Peter Drucker</i><br />
<br />
<h3>
HabitBull</h3>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-x1DlFnUQfhM/XhoWKo_Ur5I/AAAAAAAAIWo/tUqSvogUiNQHlvkpNlktEzjV4vBg0HpoACKgBGAsYHg/s1600/Screenshot_20200111-182824.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="900" height="320" src="https://1.bp.blogspot.com/-x1DlFnUQfhM/XhoWKo_Ur5I/AAAAAAAAIWo/tUqSvogUiNQHlvkpNlktEzjV4vBg0HpoACKgBGAsYHg/s320/Screenshot_20200111-182824.png" width="180" /></a></div>
<br />
I track most of my habits with an app called HabitBull (<a href="http://www.habitbull.com/">http://www.habitbull.com/</a>). With HabitBull, I mark off each day as a success or failure, based on my criteria. Success varies for each habit: when I study for at least 30 minutes with no distraction, writing at least 5 words on my blog, and a simple yes or no for going to bed before 11pm.<br />
<br />
Habit trackers like these encourage me to keep going. As you can see in my screenshot, 6th of January was a bad day. A disaster with my sleep knocked my whole routine off, and I chose to use my remaining brain cells to struggle through work that day. These issues do happen.<br />
<br />
<h3>
Forecasting</h3>
<div>
I am also looking for other measurements for my habits. Let us take a look at one measurement from my math self-study.</div>
<style type="text/css"><!--td {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}--></style><br />
<table border="1" cellpadding="0" cellspacing="0" dir="ltr" style="border-collapse: collapse; border: none; font-family: Calibri; font-size: 12pt; table-layout: fixed; width: 0px;" xmlns="http://www.w3.org/1999/xhtml"><colgroup><col width="100"></col><col width="205"></col><col width="100"></col></colgroup><tbody>
<tr style="height: 20px;"><td data-sheets-value="{"1":2,"2":"date"}" style="border-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;">date</td><td data-sheets-value="{"1":2,"2":"number of completed exercises"}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-top-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;">number of completed exercises</td><td data-sheets-value="{"1":2,"2":"Comments"}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-top-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;">Comments</td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43829}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2019-12-30</td><td data-sheets-value="{"1":3,"3":2.75}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2.75</td><td style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43830}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2019-12-31</td><td data-sheets-value="{"1":3,"3":7.17}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">7.17</td><td style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43831}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-01</td><td data-sheets-value="{"1":3,"3":4.6}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">4.6</td><td style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43832}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-02</td><td data-sheets-value="{"1":3,"3":1.5}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">1.5</td><td style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43833}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-03</td><td data-sheets-value="{"1":3,"3":0.5}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">0.5</td><td style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43834}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-04</td><td data-sheets-value="{"1":3,"3":1}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">1</td><td data-sheets-value="{"1":2,"2":"Big exercises on geometric progressions, still working at it"}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: transparent; overflow: visible; padding: 0px 3px; vertical-align: bottom;"><div style="left: 3px; overflow: hidden; position: relative; white-space: nowrap; width: 398px;">
<div style="float: left;">
Big exercises on<br />
geometric progressions,<br />
still working at it</div>
</div>
</td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43835}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-05</td><td data-sheets-value="{"1":3,"3":1.666}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">1.666</td><td style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43836}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-06</td><td data-sheets-value="{"1":3,"3":0}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">0</td><td data-sheets-value="{"1":2,"2":"Sleep disturbed"}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: transparent; overflow: visible; padding: 0px 3px; vertical-align: bottom;"><div style="left: 3px; overflow: hidden; position: relative; white-space: nowrap; width: 196px;">
<div style="float: left;">
Sleep disturbed</div>
</div>
</td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43837}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-07</td><td data-sheets-value="{"1":3,"3":2}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2</td><td style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43838}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-08</td><td data-sheets-value="{"1":3,"3":2}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2</td><td style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43839}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-09</td><td data-sheets-value="{"1":3,"3":0.2}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">0.2</td><td data-sheets-value="{"1":2,"2":"One induction proof"}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: transparent; overflow: visible; padding: 0px 3px; vertical-align: bottom;"><div style="left: 3px; overflow: hidden; position: relative; white-space: nowrap; width: 196px;">
<div style="float: left;">
One induction proof</div>
</div>
</td></tr>
<tr style="height: 20px;"><td data-sheets-numberformat="[null,5,"yyyy-mm-dd",1]" data-sheets-value="{"1":3,"3":43840}" style="border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">2020-01-10</td><td data-sheets-value="{"1":3,"3":0}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); overflow: hidden; padding: 0px 3px; text-align: right; vertical-align: bottom;">0</td><td data-sheets-value="{"1":2,"2":"Work in progress on induction proof"}" style="border-bottom-color: rgb(0, 0, 0); border-right-color: transparent; overflow: visible; padding: 0px 3px; vertical-align: bottom;"><div style="left: 3px; overflow: hidden; position: relative; white-space: nowrap; width: 297px;">
<div style="float: left;">
Work in progress on induction proof</div>
</div>
</td></tr>
</tbody></table>
<div>
<br />
<br />
Here I am counting how many math problems I have completed for each day. We've already discussed the 6th of January, but what we can see on the 9th and 10th highlights to me that I need more practice with induction proofs. Another example measurement I use is the number of pages I have read. With this, I can roughly forecast my completion date for the textbook I am working through.<br />
<br /></div>
Mike Rockehttp://www.blogger.com/profile/02571831173624227333noreply@blogger.com1tag:blogger.com,1999:blog-838944099181883167.post-53943523514295613862020-01-13T22:00:00.000+00:002020-01-13T22:00:10.278+00:00Forming a study habit - Study environmentWe have spoken about the 'when' to study (see <a href="http://www.mikerocke.co.uk/2020/01/forming-study-habit-time-of-day.html" target="_blank">Forming a study habit-Time of day</a>) now comes the equally important question of 'where?'<br />
<br />
I feel the most important factor in any study environment is accessibility. I ask myself, "How can I get there?". I am most likely to study in; the kitchen, my bedroom or a tram going to work. You are unlikely to find me in a coffee shop or library, they're just not part of my daily routine.<br />
<br />
The best, by far is the kitchen. It has a table and chairs and no TV. There is not a lot that I can be distracted by, and no worry of being so comfortable that I slack off. The kitchen feels a productive environment, producing great meals that power my day. Every day I am in the kitchen, one way or another.<br />
<br />
The next best is the morning tram, I get this every Monday to Friday. With my recent experiments, the earlier the tram, the quieter it is. The downside to this option is the lack of table space. This is especially problematic when using both a book and my laptop. It requires extra effort, but I have benefitted from typing up the problems first, a few nights before so that I can have a go at solving them on my journey.<br />
<br />
Likelihood of interruption is another major factor. My desk at work can be the least productive environments for me. As part of my role, I am there to support my team and I welcome interruptions. My living room can also be full of distraction. These areas highlight a significant point. When in the presence of family, friends and colleagues, I should give them my whole attention. I believe that relationships require effort and I should invest in these relationships.<br />
<br />
Another example I have around habits and their environments are exercise equipment. When I put the equipment in the spare bedroom, I would go days without using them. The same problem happened when they were in the living room. These rooms weren't part of my daily routine. "Out of sight, out of mind" right?Mike Rockehttp://www.blogger.com/profile/02571831173624227333noreply@blogger.com0tag:blogger.com,1999:blog-838944099181883167.post-46373221226966257232020-01-04T09:43:00.003+00:002020-01-04T09:46:27.797+00:00Forming a study habit - Time of dayWhen is a good time to study? When I ask this question to colleagues, the usual response is "When the kids have gone to bed". I count myself lucky as the only children I have are 5 cats, which are fairly independent nowadays.<br />
<div>
<br /></div>
<h3>
RescueTime</h3>
<div>
<br /></div>
<div>
I use a tool called RescueTime (<a href="https://www.rescuetime.com/">https://www.rescuetime.com/</a>) which monitors everything I get up to while on my phone and laptop. The value of this tool highlights where I am least productive. Productivity is how I define it, so hanging out on facebook.com or browsing amazon.co.uk isn't the best use of my time.</div>
<div>
<br /></div>
<div>
Let's take a look at a typical work week,</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-MzlPDA2dbt4/Xg20YAZQCbI/AAAAAAAAIVE/8wCSiDFX-e8mHkcEGK2eW9QtCcrxguW1QCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-01-02%2Bat%2B09.11.06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="694" data-original-width="1600" height="173" src="https://1.bp.blogspot.com/-MzlPDA2dbt4/Xg20YAZQCbI/AAAAAAAAIVE/8wCSiDFX-e8mHkcEGK2eW9QtCcrxguW1QCLcBGAsYHQ/s400/Screen%2BShot%2B2020-01-02%2Bat%2B09.11.06.png" width="400" /></a></div>
<div>
<br /></div>
<div>
What we can see here is that soon as 5pm comes around, I am distracted. This is the time frame I commute home, a 1-hour window on public transport. Could I slot study into here?</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-baAcJ7GwPj4/Xg21EWSgcyI/AAAAAAAAIVM/Poh1bX36IXEqFhF-cwwaNeWllxan-Y8vwCLcBGAsYHQ/s1600/Screen%2BShot%2B2020-01-02%2Bat%2B09.13.44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="418" data-original-width="1600" height="103" src="https://1.bp.blogspot.com/-baAcJ7GwPj4/Xg21EWSgcyI/AAAAAAAAIVM/Poh1bX36IXEqFhF-cwwaNeWllxan-Y8vwCLcBGAsYHQ/s400/Screen%2BShot%2B2020-01-02%2Bat%2B09.13.44.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
If we break down this overall distracting time, we can see a huge 1-hour 24-minute duration, browsing the web on my phone. Even worse, 20 minutes looking at a blank tab in chrome. That little bit of time, if recouped, could give me more study time. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Typically, I study for 1 Pomodoro, on my commute to work (Please see <a href="http://www.mikerocke.co.uk/2020/01/forming-study-habit-pomodoro-technique.html">http://www.mikerocke.co.uk/2020/01/forming-study-habit-pomodoro-technique.html</a> learn more about Pomodoro). This fits, timewise, quite well and with noise-cancelling headphones, I can go about it with minimal distraction. The commute home is a different story. Unlike the way in, the way out of Manchester at 5pm is noisy and standing room only. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Friday, the 3rd of January, I decided to experiment. If I woke up early, I would get to work early thus leave work early. My hypothesis is, the commute home at 4pm will be quiet, quiet enough that I could fit in study time. To give you an idea what happened that day;</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table>
<tbody>
<tr>
<td>6:00am</td><td>Alarm clock goes off</td>
</tr>
<tr>
<td>6:40am</td><td>Left front door, after showering, breakfast etc.</td>
</tr>
<tr>
<td>6:55am</td><td>Boarded the morning tram</td>
</tr>
<tr>
<td>7:30am</td><td>Arrived at work</td>
</tr>
<tr><td></td></tr>
<tr>
<td>4:00pm</td><td>Left work</td>
</tr>
<tr>
<td>4:05pm</td><td>Boarded the tram</td>
</tr>
<tr>
<td>4:55pm</td><td>Home</td>
</tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In that morning commute, I managed to write my blog for a solid half-hour. On the commute back, 35-minutes of mathematics study. To me, this worked well. I was not tired, not distracted, not feeling the urge to see the latest noise on social media. I felt productive.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h3 style="clear: both; text-align: left;">
Will this work for you?</h3>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I doubt many of you have the same daily schedule as me, some may have longer commutes, some may drive, everyone is different. I also haven't talked about weekends. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
What would work for you is the data-driven approach to optimising your life. You could use; RescueTime, pen & paper, or spreadsheets. Use anything that will give you honest and accurate measurements on what you are up to. Use the data to answer the question "When can I study?" and form experiments to test it. Good luck.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Gn68SZ8z7rE/Xg21Q3pO52I/AAAAAAAAIVQ/sfDfKBjkKBEX3J8ZVvPdhupwKg2lKpP9ACLcBGAsYHQ/s1600/20190901_155222.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="225" src="https://1.bp.blogspot.com/-Gn68SZ8z7rE/Xg21Q3pO52I/AAAAAAAAIVQ/sfDfKBjkKBEX3J8ZVvPdhupwKg2lKpP9ACLcBGAsYHQ/s400/20190901_155222.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
And here is my cat helping me study</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
Mike Rockehttp://www.blogger.com/profile/02571831173624227333noreply@blogger.com0tag:blogger.com,1999:blog-838944099181883167.post-34536708643486319352020-01-01T10:27:00.002+00:002020-01-02T09:18:50.327+00:00Forming a study habit - Pomodoro technique<br />
Hello! I thought I would brain dump some of the things I have tried while self-studying.<br />
<br />
I have a (somewhat) ambitious goal to self-study mathematics to a BSc level in Mathematics, before the year 2025 (plucking that objective and timeframe out of thin air). I am attempting this while working a full-time job as a leader of a software development team.<br />
<br />
Today, I won't be talking about goal formation, as clearly, I need to do better at it. However, I will be covering more day to day problems I have found when forming a study habit.<br />
<br />
<h3>
Pomodoro technique</h3>
For those who don't know, the Pomodoro technique is a focusing hack, whereby you give yourself 25 minutes of uninterrupted, 100% concentration-time, then a 5-minute break. The intuition of this is that Humans have a hard time concentrating after 20 minutes, their attention span breaks down. The importance of this technique lies in these 2 parts,<br />
<br />
<ol>
<li>You apply all your concentration on the task, during the 25 minutes. That means no facebook, no messaging people, no checking news updates or emails. You should be thinking only on the task at hand.</li>
<li>You must have a break. Don't skip the break. Don't do a similar activity in your break time to what you were concentrating on. The value here is to disengage that tunnel vision and replenish your attention span. It's common to find creative solutions by accident at this time, as your brain is free to wander.</li>
</ol>
<br />
I like the Pomodoro technique. It feels nice to carve up your study time in 30-minute blocks and that it acknowledges the limitations of attention. I also use this technique when working on long DIY projects that really test my motivation.<br />
<br />
I first built my study habit around performing 1 Pomodoro per day. This fits well with my daily schedule and did not take too much commitment to do.<br />
<br />
I did find problems with this though. The 25 minutes would be good, but I would usually drop the 5-minute break in favour of responding to work emails/listening to podcasts/reading a book. That 5-minute period would be abused into cramming in another task requiring plenty of attention.<br />
<br />
I still use the Pomodoro technique and I am experimenting with variants on the "1 Pomodoro per day" habit, which I will share in an upcoming post.<br />
<br />
Thanks for reading!<br />
<br />
<br />
<br />Mike Rockehttp://www.blogger.com/profile/02571831173624227333noreply@blogger.com1tag:blogger.com,1999:blog-838944099181883167.post-34642435498348493122017-01-06T19:28:00.001+00:002017-01-06T19:28:50.579+00:00Review of High-Performance Java Persistence by Vlad Mihalcea<span id="goog_200374979"></span><span id="goog_200374980"></span><a href="https://www.blogger.com/"></a><h2>
Summary</h2>
A structured and clear read into Hibernate, JDBC and JOOQ. Plenty of useful tips and common pitfalls that will help you improve the performance of your data access. Heavily focused on relational models, so don't expect much on other types of data stores. Lots of examples to clarify points of discussion.<br />
<br />
<h2>
Why should you read it</h2>
If you are a java developer and have to deal with persistence, you probably have come across Hibernate and JPA. Unfortunately, writing a highly performant data access layer is difficult to get right. Similarly, bad data access patterns are difficult to tease out from an application once they have been implemented. This book describes some intricate details of JDBC, Hibernate and lightly covers JOOQ with the aim of high performance.<br />
<br />
<h2>
Useful topics</h2>
<br />
<ul>
<li>What actually gets executed when you use @OneToMany, @OneToOne, @ManyToOne, @ManyToMany</li>
<li>Which Identifier strategy should you use for your primary keys</li>
<li>How you should fetch entities from the Database and when</li>
<li>Statement batching and reordering</li>
<li>The various caches available, how they work and their problems</li>
<li>Consistency vs Performance with locking</li>
</ul>
<h2>
<br />Evaluation</h2>
<br />
I would highly recommend this book, whether you are new to the topic or have a fair understanding of Hibernate. I plan on using this as a desk reference for any future project.<br />
<br />
Get it here, <a href="https://vladmihalcea.com/books/high-performance-java-persistence/">https://vladmihalcea.com/books/high-performance-java-persistence/</a>Mike Rockehttp://www.blogger.com/profile/02571831173624227333noreply@blogger.com221tag:blogger.com,1999:blog-838944099181883167.post-74919075792616945292014-07-23T08:23:00.002+01:002017-01-25T19:36:13.257+00:00Example of a Continuous delivery pipeline<div class="MsoNormal">
Continuous delivery has become a juicy problem again with
the steer towards Virtual Machines as an Artefact and Operating System
containers as an artefact. To put it short, your Vagrant managed VirtualBox/Docker.io
style applications. I would highly recommend to read about Vagrant with Virtual
Box and Vagrant with Docker.io before we continue.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Firstly I am assuming you have a series of Environments, for
example Development, Staging and Production. I believe in the concept of
Genderless applications where environment specific configuration is provisioned
at deployment, you will see why this will become important! <o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-NIaiK5MMnOw/U89iVJFanTI/AAAAAAAAAGs/TuD6pkBcsQI/s1600/pipeline.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="41" src="https://1.bp.blogspot.com/-NIaiK5MMnOw/U89iVJFanTI/AAAAAAAAAGs/TuD6pkBcsQI/s1600/pipeline.png" width="640" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="Picture_x0020_9" o:spid="_x0000_i1025" type="#_x0000_t75"
style='width:766.9pt;height:51.75pt;visibility:visible;mso-wrap-style:square'>
<v:imagedata src="file:///C:\Users\MICHAE~1.ROC\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]--><o:p></o:p></div>
<div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->1.<span style="font-size: 7pt;">
</span><!--[endif]-->Build<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->a.<span style="font-size: 7pt;">
</span><!--[endif]-->Compile code<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->b.<span style="font-size: 7pt;">
</span><!--[endif]-->Run unit tests<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->c.<span style="font-size: 7pt;">
</span><!--[endif]-->Run component tests / Small integration tests<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->d.<span style="font-size: 7pt;">
</span><!--[endif]-->Build WAR archive (Or similar)<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->2.<span style="font-size: 7pt;">
</span><!--[endif]-->Package<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->a.<span style="font-size: 7pt;">
</span><!--[endif]-->Destroy Virtual Machine<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->b.<span style="font-size: 7pt;">
</span><!--[endif]-->Copy WAR from Build stage to working directory<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->c.<span style="font-size: 7pt;">
</span><!--[endif]-->Initialize new Virtual Machine<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->d.<span style="font-size: 7pt;">
</span><!--[endif]-->Start the Virtual Machine<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->e.<span style="font-size: 7pt;">
</span><!--[endif]-->Provision binary dependencies (e.g. JDK 1.7,
Jetty 9)<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->f.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy WAR to Virtual Machine<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->g.<span style="font-size: 7pt;">
</span><!--[endif]-->Package Virtual Machine<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->3.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy – DEV<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->a.<span style="font-size: 7pt;">
</span><!--[endif]-->Copy packaged Virtual Machine from Package stage<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->b.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy constructive SQL Changes<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->c.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy to inactive Pool (For N number of Boxes)<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>i.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy packaged Virtual Machine<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>ii.<span style="font-size: 7pt;">
</span><!--[endif]-->Provision with DEV Environment configuration <o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>iii.<span style="font-size: 7pt;">
</span><!--[endif]-->Start application<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>iv.<span style="font-size: 7pt;">
</span><!--[endif]-->Smoke test/Query Health check URL of Application<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->d.<span style="font-size: 7pt;">
</span><!--[endif]-->Smoke test pool <o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->e.<span style="font-size: 7pt;">
</span><!--[endif]-->Route traffic to new pool<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->f.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy destructive SQL Changes<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->4.<span style="font-size: 7pt;">
</span><!--[endif]-->System Test – DEV<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->a.<span style="font-size: 7pt;">
</span><!--[endif]-->Run Acceptance tests against deployed pool<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->5.<span style="font-size: 7pt;">
</span><!--[endif]-->Publish<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->a.<span style="font-size: 7pt;">
</span><!--[endif]-->Copy packaged Virtual Machine from Package stage
or Deploy – DEV Stage<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->b.<span style="font-size: 7pt;">
</span><!--[endif]-->Publish packaged Virtual Machine to artefact repository<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->6.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy – Staging<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->a.<span style="font-size: 7pt;">
</span><!--[endif]-->Download packaged Virtual Machine from repository<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->b.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy constructive SQL Changes<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->c.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy to inactive Pool (For N number of Boxes)<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>i.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy packaged Virtual Machine<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>ii.<span style="font-size: 7pt;">
</span><!--[endif]-->Provision with Staging Environment configuration<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>iii.<span style="font-size: 7pt;">
</span><!--[endif]-->Start application<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>iv.<span style="font-size: 7pt;">
</span><!--[endif]-->Smoke test/Query Health check URL of Application<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->d.<span style="font-size: 7pt;">
</span><!--[endif]-->Smoke test pool <o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->e.<span style="font-size: 7pt;">
</span><!--[endif]-->Route traffic to new pool<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->f.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy destructive SQL Changes<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->7.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy – Production<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->a.<span style="font-size: 7pt;">
</span><!--[endif]-->Download packaged Virtual Machine from repository<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->b.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy constructive SQL Changes<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->c.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy to inactive Pool (For N number of Boxes)<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>i.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy packaged Virtual Machine<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>ii.<span style="font-size: 7pt;">
</span><!--[endif]-->Provision with Production Environment configuration <o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>iii.<span style="font-size: 7pt;">
</span><!--[endif]-->Start application<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 108.0pt; mso-add-space: auto; mso-list: l0 level3 lfo1; mso-text-indent-alt: -9.0pt; text-indent: -108.0pt;">
<!--[if !supportLists]--><span style="font-size: 7pt;">
</span>iv.<span style="font-size: 7pt;">
</span><!--[endif]-->Smoke test/Query Health check URL of Application<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->d.<span style="font-size: 7pt;">
</span><!--[endif]-->Smoke test pool <o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->e.<span style="font-size: 7pt;">
</span><!--[endif]-->Route traffic to new pool<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 72.0pt; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]-->f.<span style="font-size: 7pt;">
</span><!--[endif]-->Deploy destructive SQL Changes<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle">
<br /></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; mso-add-space: auto;">
There
is a lot of information to take in here, but most of it is rinse and repeat
deployments! Isn’t that great!<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; mso-add-space: auto;">
<br /></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; mso-add-space: auto;">
Back
to my statement of genderless applications, due to the size of Virtual Machines
are considerably larger than a WAR file, you wouldn’t want to package and
publish the same application per environment. This is a wasteful and slow
process! <o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; mso-add-space: auto;">
<br /></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; mso-add-space: auto;">
If
you haven’t noticed, this process is quite messy. When we re-route traffic in
the deployment stages, we have not cleaned up the old pool. I will leave this
up to you when you wish to do this! Just be cautious on the speed and
effectiveness of your pipeline. To me, a good continuous delivery pipeline
should be reliable, simple, repeatable, and fast. Complex, unstable pipelines
are a significant problem. How much time have you wasted with “Re-run it till
it works”? <o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; mso-add-space: auto;">
Another
important point to make, Application deployments for each environment should be
treated the same way as deploying an application to Production. Your
application should never be unavailable due to deployment. Design your
deployment solution to not break what is currently available. In our example we
utilize Blue-Green application deployment and Constructive-Destructive SQL
deployment. <o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 0cm; mso-add-space: auto;">
<br /></div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 0cm; mso-add-space: auto;">
Constructive-Destructive
SQL deployment is a 2 phase deployment of any changes to your database. What we
want to avoid is making a change to the Database which will make the currently
running applications break as well as making a change to the Database so your new
version will work. Examples of changes in the Constructive phase are; adding
new Table, adding new Column, adding new Index. Destructive changes, as you
might have guessed; deleting a Table, deleting a Column, adding a constraint.<o:p></o:p></div>
<div class="MsoNormal">
You may be wondering why I placed the Publish stage so late
on. If publishing a larger artefact takes a few minutes, it would probably be
worth publishing only when you know it is a suitable release candidate (i.e. when
all your automated tests are happy!). On that note, be aware of the disk spaced
used in your repository. You may wish to have a purging strategy for old versions
of your application.<o:p></o:p></div>
<br />
<div class="MsoNormal">
My final parting words, this is simply an example. This
solution will not fit all applications, but the principles will! Remember <b>reliable</b>, <b>simple</b>, <b>repeatable</b>, and <b>fast</b>!<o:p></o:p></div>
Mike Rockehttp://www.blogger.com/profile/02571831173624227333noreply@blogger.com2