tag:blogger.com,1999:blog-82002852357578923842024-03-05T11:30:52.152+00:00Folding Air, Software Development With Damian StangerSharing knowledge is like lighting a candle from another's flame, it does not cause that flame to burn any less brightly.Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.comBlogger126125tag:blogger.com,1999:blog-8200285235757892384.post-31301244675401886072023-07-02T21:57:00.001+01:002023-09-01T15:10:56.887+01:00Exploring Python and OpenAI: Unveiling Strengths, Limitations, and Collaborative Potential<p><i> <b>Disclaimer</b>: The following code and text was written in part by AI, OpenAI to be precise</i><br /></p><h2 style="text-align: left;">Title: Exploring Python and OpenAI: Unveiling Strengths, Limitations, and Collaborative Potential</h2><p></p><h3 style="text-align: left;">Introduction:</h3><p>In this blog post, we delve into the realms of Python programming and the intriguing capabilities of OpenAI as a programming companion. Our objective is to understand the effectiveness of OpenAI in assisting with Python programming while also uncovering its limitations. By exploring this intersection between human programming skills and AI-powered assistance, we aim to gain insights into the collaborative potential of AI in programming.<br /></p><h3 style="text-align: left;">Learning Python and Assessing AI's Capabilities:</h3><p>The primary goal of this exercise was to gain proficiency in Python, a widely-used and versatile programming language. Concurrently, we sought to evaluate the effectiveness of OpenAI as a tool for programming guidance. With an open mind and an eagerness to understand the interplay between AI and programming, we embarked on this exploration.<br /></p><h3 style="text-align: left;">Understanding OpenAI's Strengths and Limitations:</h3><p>As we engaged with OpenAI, we discovered its value in providing general assistance and suggestions, particularly for beginners. However, we also encountered limitations when faced with more complex coding challenges. These instances highlighted the need for human intervention and expertise, underlining the fact that OpenAI cannot fully replace the role of human programmers.<br /></p><h3 style="text-align: left;">The Collaborative Potential:</h3><p>Despite its limitations, OpenAI showcased its potential as a collaborative tool. We completed coding challenges more efficiently compared to relying solely on conventional internet-based resources. This experience led us to recognize the value of combining human programming skills with AI assistance, harnessing the strengths of both to achieve optimal results.<br /><br />As we conclude our exploration, we remain intrigued by the future possibilities of AI in programming. Tools like OpenAI and GitHub Copilot hint at the promising direction of collaboration between humans and AI. However, it is crucial to acknowledge that AI should be seen as a tool to enhance programming skills, rather than a substitute for foundational knowledge and experience.<br /><br />Through this exploration, we hope to provide valuable insights for those curious about the capabilities of AI in programming, as well as the importance of human expertise in this evolving landscape.<br /><br /></p><h2 style="text-align: left;">The real conclusion</h2><p> </p><p style="font-family: Calibri; font-size: 11pt; margin: 0in;">It's Damo again, no
it really is, but I guess you can't entirely trust it given I've just used AI
to help me write a blog post and prior to that I used it to help complete a
coding challenge. The code challenge is here: <a href="https://github.com/DamianStanger/PythonPlayground">https://github.com/DamianStanger/PythonPlayground</a>
it's a simple calculator. The chat GPT session on open ai can be found here: <a href="https://chat.openai.com/share/fea96f69-70ab-4e11-822c-b79ec8503547">https://chat.openai.com/share/fea96f69-70ab-4e11-822c-b79ec8503547</a>
and the session I used to write the above blog post is here: <a href="https://chat.openai.com/share/806903cf-c8d1-40f3-842c-362e5af8499d">https://chat.openai.com/share/806903cf-c8d1-40f3-842c-362e5af8499d</a></p>
<p style="font-family: Calibri; font-size: 11pt; margin: 0in;">How long these
sessions will live on the internet I don't know, I'm sure they will eventually
get deleted, please don't complain when they do, I'm not going to keep a copy
of them.</p>
<p style="font-family: Calibri; font-size: 11pt; margin: 0in;"> </p>
<p style="font-family: Calibri; font-size: 11pt; margin: 0in;">This is the first
time I've used AI to help either with coding or with writing a blog post, all
in all, it's been a positive experience, the coding was quicker as my knowledge
of python is not up to much, I have read some chapters from books watched some
videos targeted at experienced developers learning python but I've never
actually written any, although I have reviewed others code (a strange concept
in a way given I've never written it).</p>
<p style="font-family: Calibri; font-size: 11pt; margin: 0in;">Like I said I found
the help in writing the code really useful and for sure speeded me up in that
coding challenge, i took about 90 minutes to do that with help. I had installed
and set up python prior to starting so that’s 90 minutes just to complete toe
code. But the writing of the blog post would have been better/quicker if i had
just done it myself, i found it hard to get it to sound authentic and to say
what I wanted, how I wanted it said, it was a short blog post it would have
been quicker to write it myself.</p>
<p style="font-family: Calibri; font-size: 11pt; margin: 0in;"> </p>
<p style="font-family: Calibri; font-size: 11pt; margin: 0in;">I will use AI in the
future to help me write code, I am keen to try out copilot but it's worth
emphasising again i see this as another aid to learning a new language, not a
way to learn programming. Other than code correctness my main concern is that
I'm writing idiomatic python, using best practices, and I don't want to learn
from the worst/average of the internet, imagine learning to code solely by
reading answers in stack overflow or GitHub snippets, no one does that right?</p>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.33237822.921968163821155 -35.488628 79.542435836178839 34.823872tag:blogger.com,1999:blog-8200285235757892384.post-86587270012883720522018-03-25T20:54:00.003+01:002018-03-25T20:57:52.260+01:00Understanding the node stream API, through examples and practiceWe utilise node streams extensively in my day job. Making extensive use of the competing consumers pattern to process messages from AWS queues. We pull messages off SQS, then using the node stream API we process the messages through various stages, until, we write to a mongo DB and/or issue events that land on other SQS queues usually via SNS.<br />
<br />
I've been looking into how we gain more performance out of our existing codebase, looking into what can be tweaked, and what needs rewriting, its forced me to become quite intimate with nodes stream API, how buffers really work and what effect the highWaterMark has on them. I've also looked at how we could use event emitters rather than streams to make better use of nodes asynchronous nature.<br />
<br />
In this post I aim to impart some of my recent knowledge, for my own future reference but also because, having polled many devs on the subject, there are a number of misconceptions about how streams in node actually work.<br />
<br />
<h2>Analogies</h2>Analogies are useful. I have always thought of streams as a pipe that data flows through, like a hosepipe with water. As with most analogies it is useful but will only take you so far.<br />
<br />
<code>__-0_<br />
_____==========|====================|==========<br />
Tap Reader Transformer Writer<br />
</code><br />
<br />
A hose has a tap connected at one end (a reader), some length of pipe in the middle (transformers) and an opening at the other to let the water out of the pipe (a writer). A hosepipe will fill with water when you turn on the tap until it is full with water and then will start to issue water from the open end. If a real tap is switched off the water stops flowing at the open end with water still in the tap. So imagine a hose that is dangling vertically, still attached to the tap but if the water is switched off the water in the pipe will all drain out due to gravity, this is more like a stream in node.<br />
<br />
<h2>Buffers</h2><code>__-0_ _<br />
_____==========|==========|x|==========|==========<br />
Tap Reader Transformer Writer<br />
</code><br />
<br />
But the water in the hose is not all being processed at the same time. Imagine 3 parts to the hose all connected together, each one capable of holding a certain amount of water, this is analogous to buffers. In the centre of the middle pipe (the transformer) you have a box, a unit of water flows into the box, then out, but only one unit of water can pass through at once. This is in fact how a transform stream works. Take a compression stream for example, one piece of data goes in, its compressed and the compressed data comes out ready to be written by the writer.<br />
<br />
So you now have 4 sections of pipe, each capable of containing some water, these are the buffers. The reader has a buffer on its outgoing side, the transformer has 2 buffers, one read buffer and one write buffer, and the writer has one incoming buffer. If the highWatermark is set to 5 for all streams you have room for 20 units of water (this is not the whole story as I will explain later but like I said it’s a useful analogy).<br />
<br />
The streams highWaterMark setting governs the desired amount of data to be in the buffer at any one time. It is not a limit as we will show later but more a guide to tell the stream when to pause the streaming of data into the buffer. <br />
<br />
<h2>Classes and functions of the stream API</h2><br />
<code> _ _ _<br />
|R|==========|==========|T|==========|==========|W|<br />
Reader Transformer Writer<br />
</code><br />
<br />
When you implement streams you need to implement a function in each of the Reader, Transformer and the Writer. The function names are quite self-explanatory _read, _transform and _write respectively. These functions are called when data flow through the pipe, it all happens once the streams are piped together thus:<br />
<br />
<code>readStream.pipe(transformStream).pipe(writeStream);</code><br />
<br />
Once the streams are pipped together any data flowing into the read stream will be pulled down the pipe by the stream API which will handle any buffering needed but what is key right now is that only one piece of information can flow through any given function at once, they are 'NOT' asynchronous out of the box. This makes sense as you would not want a transform stream that is compressing or encrypting data to process multiple chunks simultaneously and potentially get the zipped chunks mixed up in the write buffer.<br />
<br />
Now because there can be only one piece of data flowing through the functions at once the buffers will fill up if the rate of data coming into the pipe is greater than the rate of data flowing out of the pipe. Usually this is true, for example reading from a file is generally quicker than writing to another.<br />
<br />
<h2>Data flow</h2><br />
If we look at what happens when a single message is inserted into the pipe you will see it do this <br />
<code> _ _ _<br />
|1|=========|=========| |=========|========| |<br />
_ _ _<br />
| |=========|=========|1|=========|========| |<br />
_ _ _<br />
| |=========|=========| |=========|========|1|<br />
</code><br />
<br />
If the write is slow and 1 more message was to be read this is what would happen (for the sake of this example the buffer (highWaterMark) is set to 1 for all streams).<br />
<br />
<code> _ _ _<br />
| |====-====|====-====| |====2====|===x===|1|<br />
</code><br />
<br />
Notice how both the writers buffer and the transformers write buffer are both full (the writer as a whole can only have one message within it, the buffer was full but it's now processing that message). If a 3rd message was to go down the pipe it would get stuck in the transformers read buffer, it has nowhere to go so will not go into the _transform function until there is room in the next buffer.<br />
<br />
<code> _ _ _<br />
| |====-====|====3====| |====2====|===x===|1|<br />
</code><br />
<br />
Finally if the reader pumped a 4th message into the pipe it would go into the readers buffer.<br />
<br />
<code> _ _ _<br />
| |====4====|====3====| |====2====|===x===|1|<br />
</code><br />
<br />
In this state nothing can flow down the pipe until the writer is finished processing message number one. This is called backpressure, messages back up behind the slowest stream (in this case the writer but it could equally be a transformer).<br />
<br />
<h2>Backpressure, drain and resume</h2><br />
That was a bit of a simplistic example, let's say the buffers are set to a high watermark of 2 rather than one. A slow write would result in the following situation (again note that the write stream can only have 2 messages in it as a whole, with only one in its buffer).<br />
<br />
<code> _ _ _<br />
| |===8==7===|===6==5===| |===4==3===|====2====|1|<br />
</code><br />
<br />
At this point technically speaking the transform stream and the read stream are paused and will not resume until their buffers are emptied when a drain event occurs. Let's see what happens when the writer finishes writing [1]<br />
<br />
<code> _ _ _<br />
| |===8==7===|===6==5===| |===4==3===|====-====|2|<br />
</code><br />
<br />
Notice that more data is not pulled from the transform write buffer yet.<br />
<br />
Only when [2] finishes processing will a drain event on the write stream occur causing it fill again. There is enough room for 2 pieces of data in the writer, 1 in the buffer and one in the slow write operation. So as soon as [2] finishes being written 3 will be pulled into the write stream<br />
<br />
<code> _ _ _<br />
| |===8==7===|===6==5===| |===-==4===|====3====| |<br />
</code><br />
<br />
There is now room in the transforms write buffer so 5 will get pulled through the transform<br />
<br />
<code> _ _ _<br />
| |===8==7===|===-==6===|5|===-==4===|====3====| |<br />
</code><br />
<br />
3 will then go into the writer and 4 will go into the writers buffer<br />
<code> _ _ _<br />
| |===8==7===|===-==6===|5|===-==-===|====4====|3|<br />
</code><br />
<br />
When 5 finishes its transform 6 will also go through the transform causing the transforms read buffer to drain<br />
<code> _ _ _<br />
| |===8==7===|===-==-===| |===6==5===|====4====|3|<br />
</code><br />
7 and 8 will then flow into the transforms read buffer <br />
<code> _ _ _<br />
| |===-==-===|===8==7===| |===6==5===|====4====|3|<br />
</code><br />
This causes the readers buffer to drain which will then pull 2 more messages in through the reader<br />
<code> _ _ _<br />
| |==10==9===|===8==7===| |===6==5===|====4====|3|<br />
</code><br />
And we are back to the state we had originally, we are now waiting for the slow write operation to occur on message #3<br />
<br />
<h2>Buffering</h2>So what you can see from the above example is a pulsing action when messages sort of get pulled through in pairs (the current high watermark) once 2 slow writes have occurred. This is due to the way that the backpressure gets released and the buffers fully empty before fully filling up again. Obviously this gets more complex if you have transformers that are also slow but you will always see messages flowing through the buffers in pairs (when all the streams high watermarks are set to 2).<br />
<br />
<br />
<h2>Some demos</h2>Firstly I'd like to introduce you to the repo that contains the examples. You can see there are a number or index files each one is designed to be run with node indexFileName.js and will give a coloured output to the terminal.<br />
<br />
<a href="https://github.com/DamianStanger/streams101">https://github.com/DamianStanger/streams101</a><br />
<br />
I aim to produce and demo some simple code that you can then play with, change the high watermark settings and the numbers of messages with a view to allowing you to gain a better understanding of how streams work yourselves.<br />
<br />
<h3>Object mode</h3>First a quick note that all the examples given below use streams in object mode. This is because in my case I'm investigating how I can get more performance out of my streams when pulling messages off an SQS queue. So to use object mode makes sense but all the concepts will be similar if you're dealing with chunked streams. The exception here is writing in an asynchronous manner, for example you would not want to write multiple chunks to a file stream asynchronously as your chunks would get all mixed up in the resultant file.<br />
<br />
<h2>Demo - Fast reading, fast writing</h2>Execute: <code>node <a href="https://github.com/DamianStanger/streams101/blob/master/01_indexSync.js">01_indexSync.js</a></code><br />
Example results: <a href="https://github.com/DamianStanger/streams101/blob/master/results/01_indexSync.log">./results/01_indexSync.log</a><br />
<br />
The firstly simple demo that shows what happens when the reader and the writer are not IO bound, they are totally synchronous and there are no callbacks or promises involved. The results can be seen in indexSync.log.<br />
<br />
Even though the high watermark is set to 2 in each stream there is only ever one message in any of the streams at once. This is because the processing of the message within each stream is CPU bound and so gives the event loop no time to do some other work, including pulling the next message into a buffer.<br />
<br />
Notice that it’s the reader that ends the process by sending a null message through the system when it is finished the set number of reads. If you were to comment the push(null) statement out, then the transform and write streams will not know when to finish and so wont execute the _final method.<br />
<br />
<h2>Demo - Back pressure</h2>Execute: <code>node <a href="https://github.com/DamianStanger/streams101/blob/master/02_indexBackPressure.js">02_indexBackPressure.js</a></code><br />
Example results: <a href="https://github.com/DamianStanger/streams101/blob/master/results/02_indexBackPressure.log">./results/02_indexBackPressure.log</a><br />
<br />
Here the writer has not been wired into the pipe and so this gives the opportunity to see what occurs when the reader reads until all the buffers are full. The high watermark is set to 5 for each stream so you can see that 15 messages are read, 5 of which are transformed to fill the write buffer of the transform stream. 5 will be stuck in the read buffer of the transform stream and 5 will be in the outgoing buffer of the read stream. At this point all the streams are paused and since there is no writer to trigger a drain then there are no more callbacks to process and the process ends. <br />
<br />
A selection of the log is shown below with a little removed to make for a clearer example, see the full log in the repo. Notice how on lines 23 and 33 a zero is returned indicating that the stream is going to pause.<br />
<br />
<code>++ 1 Read <----+<br />
++ 2 Read |<br />
++++ 1 Transform |<br />
++ 3 Read | These 5 messages went straight <br />
++++ 2 Transform | through the _transform method<br />
++ 4 Read | and into the write buffer of<br />
++++ 3 Transform | the transform stream<br />
++ 5 Read |<br />
++++ 4 Transform |<br />
++ 6 Read <----+<br />
++++ 5 Transform <----+ |<br />
++ 7 Read |<br />
++ 8 Read | These 5 messages are in the <br />
++ 9 Read | Transform streams read buffer<br />
++ 10 Read <------+<br />
++ 11 Read <----+<br />
++ 12 Read | These messages are in the<br />
++ 13 Read | read streams outgoing buffer<br />
++ 14 Read | <br />
++ 15 Read <----+<br />
</code><br />
<br />
<h2>Demo - Slow writing</h2>Execute: <code>node <a href="https://github.com/DamianStanger/streams101/blob/master/03_indexSyncSlow.js">03_indexSyncSlow.js</a></code><br />
Example results: <a href="https://github.com/DamianStanger/streams101/blob/master/results/03_indexSyncSlow.log">./results/03_indexSyncSlow.log</a><br />
<br />
Here I have added a slow write operation to the writer, this now operates in the same manner as the walk through I did above titled 'Backpressure drain and resume'. The highwatermark is set to 2 for all streams, and we are processing 10 messages. The results of running this can be seen here (again I've removed some log lines for brevity).<br />
<br />
<code>++++++++++ READ Start - Tue Mar 06 2018 18:00:46 GMT+0000 (STD)<br />
++ 1 Read<br />
++ 2 Read<br />
++++ 1 Transform<br />
++++++ 1 Write <-- 1st message goes into the _write method and starts slow processing<br />
++ 3 Read<br />
++++ 2 Transform <-- 2nd message goes into the write streams buffer<br />
++ 4 Read<br />
++++ 3 Transform <-- 3rd message goes into the transforms stream write buffer<br />
++ 5 Read <-- 5th message goes into the transform stream read buffer<br />
++++ 4 Transform <-- 4th message goes into the transforms stream write buffer<br />
++ 6 Read <-- 6th message goes into the transform stream read buffer<br />
++ 7 Read <-- Stuck in outgoing the read stream buffer<br />
++ 8 Read <-- Stuck in outgoing the read stream buffer<br />
<br />
At this point all the buffers are full until the writer finishes<br />
<br />
------ 1 Write finished<br />
++++++ 2 Write<br />
------ 2 Write finished <-- Write stream is now empty, there is room for 2 <br />
messages in its buffer. Calling drain will result <br />
in 2 messages pushed in from the transform buffer.<br />
++++ 5 Transform <-- The transform streams write buffer is now empty, so <br />
a drain event is called causing 2 messages to be pulled <br />
through the _transform method<br />
++++++ 3 Write<br />
++++ 6 Transform <-- Both the messages that were in the transform stream read buffer have<br />
been processed, drain causes the 2 messages in the read stream<br />
buffer to be pulled into the transform read buffer.<br />
++ 9 Read<br />
++ 10 Read<br />
------ 3 Write finished <-- From here the whole process will start again<br />
++++++ 4 Write<br />
------ 4 Write finished<br />
...<br />
...<br />
</code><br />
<br />
<h2>Demo - Batch reading</h2>Execute: <code>node <a href="https://github.com/DamianStanger/streams101/blob/master/04_indexBatchRead.js">04_indexBatchRead.js</a></code><br />
Example results: <a href="https://github.com/DamianStanger/streams101/blob/master/results/04_indexBatchRead.log">./results/04_indexBatchRead.log</a><br />
<br />
I've been implying that the buffers in the streams are finite in nature, that they can only hold a given number of messages, this is not correct and is where the hosepipe analogy starts to breakdown. In the example 03_ a high watermark of 2 was used, when the buffer becomes full any message pushed into the stream will result in a result of false being issued back to the origin that is pushing data into the stream, this back pressure resulted in exactly the 'correct' number of messages in each of the buffers.<br />
<br />
When you run this example you will see a long output that I have include below with many parts cut out. The interesting parts are denoted with a number and referenced below:<br />
<br />
<code>++ 1 Read <---- #001<br />
++ 1.01 Read Batch push:1<br />
++ 1.02 Read Batch push:1<br />
++ 1.03 Read Batch push:1<br />
++ 1.04 Read Batch push:0<br />
++ 1.05 Read Batch push:0<br />
++ 2 Read <---- #002<br />
++ 2.01 Read Batch push:0<br />
...<br />
++ 2.05 Read Batch push:0<br />
++++ 1.01 Transform <---- #003<br />
++++++ 1.01 Write - SLOW <---- #004<br />
++++ 1.01 Transform - push:1<br />
++++ 1.01 Transform - next:0<br />
...<br />
++++ 2.01 Transform - next:0 <---- #005<br />
++ 3 Read <---- #006<br />
++ 3.01 Read Batch push:0<br />
...<br />
++ 3.05 Read Batch push:0<br />
++++ 2.02 Transform <---- #007<br />
++++ 2.03 Transform<br />
++ 4 Read <---- #008<br />
++ 4.01 Read Batch push:0<br />
...<br />
++ 4.05 Read Batch push:0<br />
------ 1.01 - 1:1 Write finished <---- #009<br />
++++++ 1.02 Write<br />
...<br />
------ 1.04 - 1:4 Write finished<br />
++++ 2.04 Transform<br />
++++++ 1.05 Writ++++ 2.05 Transform<br />
++++ 3.01 Transform<br />
++++ 3.02 Transform<br />
------ 1.05 - 1:5 Write finished<br />
...<br />
------ 2.03 - 1:8 Write finished<br />
++++ 3.03 Transform<br />
++++++ 2.04 Write<br />
++++ 3.04 Transform<br />
++++ 3.05 Transform<br />
++++ 4.01 Transform<br />
++ 5 Read<br />
++++++++++ READ End - Wed Mar 07 2018 08:06:17 GMT+0000 (STD)<br />
++++ 4.01 Transform - next:0<br />
------ 2.04 - 1:9 Write finished<br />
...<br />
++++ 4.05 Transform<br />
++++++++++ TRANSFORM Final - Wed Mar 07 2018 08:06:19 GMT+0000 (STD)<br />
------ 3.03 - 1:13 Write finished<br />
...<br />
------ 4.05 - 1:20 Write finished<br />
++++++++++ WRITE Final - Wed Mar 07 2018 08:06:28 GMT+0000 (STD)<br />
</code><br />
<br />
#001<br />
When the program starts a read event is fired causing the first batch of 5 messages to be sent into the read buffer, 4 of these immediately go into the transform streams read buffer and the next batch of 5 is read #002. Now 7 messages are in the read buffer.<br />
#003<br />
Next the transform stream processes one message which flows immediately into the slow write operation #004.<br />
#005<br />
Then 5 messages flow through the transform stream filling the write buffer and the partly filling the transform stream outgoing buffer (remember the buffers have a high watermark set to 4. So now we have 4 messages in the write stream (of which one is currently processing) and 1 in the transform stream out buffer. In the meantime all the remaining 4 messages in the read buffer have now moved to the transform streams read buffer. The outgoing buffer in the read stream is now empty.<br />
#006<br />
Another 5 messages are sent into the read streams buffer<br />
#007<br />
Another 2 go through the transform stream. This now makes 4 messages in the write stream, 4 in the out buffer of the transform stream, 4 messages in the input buffer of the transform stream and 3 in the read streams buffer making 15 messages<br />
#008<br />
Given there the writer is taking a long time and all buffers are almost full the only thing left to do is fill the read streams outgoing buffer, so another batch of 5 are pulled in making 8 in the read stream buffer. There are now 20 messages in the system but not one has been written yet. And remember the high watermarks are set to 4, there are 4 buffers so technically room for 16 messages.<br />
#009<br />
Finally the slow write finishes and so messages flow through the system. The write buffer is the first to be emptied one message at a time, only then do messages move between the queues.<br />
<br />
I will leave it as an exercise for the reader to walk through the remaining log but do note the position of the 'READ End' log message. It is a long way down the list. Only after all the messages have been drained from the read queue. Message 4.01 is the 16th message so the transform read buffer now has 4 messages in it. The read stream buffer is empty and so it tries to read again but the code sends in a null message indicating there is nothing left to read and so the read stream ends.<br />
<br />
<h2>Demo - Asynchronous writing</h2>Alright lets finally get to the point, how do we make our synchronous stream processing faster? Well for this exercise we have a slow write so let's look at parallelising that by allowing multiple messages to be processed at any one time. <br />
<br />
Execute: <code>node <a href="https://github.com/DamianStanger/streams101/blob/master/05_indexAsync.js">05_indexAsync.js</a></code><br />
Example results: <a href="https://github.com/DamianStanger/streams101/blob/master/results/05_indexAsync.log">./results/05_indexAsync.log</a><br />
<br />
In this code base we are going to send 20 messages through the system, the buffers are all set to 2 but the maximum concurrency of the write operations is set to 10. and if you look at the code inside the file writeItAsync.js you will see that for every write that is performed a callback is setup on a given interval. This callback ultimately calls nextCallBack() which makes a decision based on a closure on a nextUsed flag and the maxConcurrency value as to whether or not next should be called yet. Next is only called if there are currently less than 10 callbacks waiting on the event loop.<br />
<br />
Once there are 10 on the loop only the completion of the last callback will result in the unblocking of the next loop. This is because for any given processing of a _write you can only call next() once. <br />
<br />
I appreciate that this can look a bit complicated in writing, let's look at the log.<br />
<br />
<code>++ 1 Read push:1 <---- #001<br />
++ 2 Read push:0<br />
++++ 1 Transform<br />
++++++ 1 Write<br />
1 - 1:0 Write, Calling next()<br />
++ 3 Read push:0<br />
++++ 2 Transform<br />
...<br />
++++ 9 Transform<br />
++++++ 9 Write<br />
9 - 9:0 Write, Calling next()<br />
++ 11 Read push:0<br />
++++ 10 Transform<br />
++++++ 10 Write<br />
10 - 10:0 Write, Max concurrency reached <---- #002<br />
++ 12 Read push:0<br />
++++ 11 Transform<br />
++ 13 Read push:0<br />
++++ 12 Transform<br />
++ 14 Read push:0<br />
++++ 13 Transform<br />
++ 15 Read push:0<br />
++ 16 Read push:0<br />
++ 17 Read push:0 <---- #003<br />
------ 3 - 9:1 Write finished in 176 <---- #004<br />
3 - 9:1 Write, Next used<br />
... <---- #005<br />
------ 10 - 5:5 Write finished in 660<br />
10 - 5:5 Write, Calling next() <---- #006<br />
++++++ 11 Write<br />
11 - 6:5 Write, Calling next()<br />
++++ 14 Transform<br />
++++++ 12 Write<br />
12 - 7:5 Write, Calling next()<br />
++++ 15 Transform<br />
++ 18 Read push:0<br />
++ 19 Read push:0<br />
++++++ 13 Write - SLOW<br />
13 - 8:5 Write, Calling next()<br />
++++ 16 Transform<br />
++++++ 14 Write<br />
14 - 9:5 Write, Calling next()<br />
++++ 17 Transform<br />
++ 20 Read push:0<br />
++++++++++ READ End - Thu Mar 08 2018 08:40:25 GMT+0000 (STD)<br />
++++++ 15 Write<br />
15 - 10:5 Write, Max concurrency reached <---- #007<br />
++++ 18 Transform<br />
------ 7 - 9:6 Write finished in 699 <---- #008<br />
...<br />
14 - 3:12 Write, Next used<br />
------ 15 - 2:13 Write finished in 808 <---- #009<br />
15 - 2:13 Write, Calling next()<br />
++++++ 16 Write<br />
16 - 3:13 Write, Calling next()<br />
...<br />
++++++++++ TRANSFORM Final - Thu Mar 08 2018 08:40:26 GMT+0000 (STD)<br />
++++++++++ WRITE Final - Thu Mar 08 2018 08:40:26 GMT+0000 (STD)<br />
------ 6 - 6:14 Write finished in 1518<br />
...<br />
</code><br />
<br />
#001 - #002<br />
In the first part of the log messages are read from the queue and flow straight through the transformer into the writer. 10 messages make this journey before the max concurrency limit in the writer is hit at which point we have 10 messages in the writer all being processed.<br />
<br />
#002 - #003<br />
Message 11 will flow into the write buffers incoming buffer (message 10 is the one currently being 'tracked' by the writer, its message 10 that is occupying the other position in the buffer).<br />
Messages 12 and 13 go through the transformer and sit in the outgoing queue of the transform stream.<br />
Messages 14 and 15 move into the transform stream incoming buffer and finally messages 16 and 17 are in the outgoing buffer of the read stream.<br />
<br />
#004<br />
The process now waits until a write completes, in this case it could be any of the 10 messages currently being processed but it it is message 3 that finishes first. Notice that this message being completed does not cause any movement in the buffers, and does not cause a new message to be pulled into the _write method of the write stream.<br />
<br />
#005 - #006<br />
In this particular run 4 messages complete before message 10 does leaving 5 in the event loop (check the full logs for details). This is because of the random processing time in the writer async processing. When message 10 finishes the next function is called #006, remember that the processing of each message can only call next once so only on completion of the last message into the queue can next be called which causes more messages to be pulled into the _write function.<br />
<br />
#007 <br />
Between #006 and #007 5 more messages are pulled through the buffers and sent for processing in the write stream. You can see messages 14, 15, 16 and 17 are pulled through the transform stream. Messages 10, 11, 12, 13, 14, 15 are now processing in the write stream. Messages 18, 19 and 20 are all read from the read stream. <br />
<br />
At this point we have the following situation (you will need to look at the full logs to see this in detail):<br />
<ul><li>Finished processing: 3, 1, 5, 9, 10</li>
<li>Currently Processing in the Write stream: 2, 4, 6, 7, 8, 11, 12, 13, 14, 15</li>
<li>Write stream incoming buffer: 16</li>
<li>Transform stream outgoing buffer: 17, 18</li>
<li>Transform stream incoming buffer: 19, 20</li>
<li>Read stream outgoing buffer: <empty></li>
</ul>This can be seen by the 2 logs for 17 and 18 showing that they have gone through the transform stream<br />
<br />
#008<br />
We can see its message 7 that completes next but again this does not cause more messages to move, we need to wait for message 15 to complete for next to be called as that is the last into the write stream. <br />
<br />
#008 - #009<br />
8 messages then finish processing with message 15 being the last. You can see that when message 15 completes next() is called causing more messages to go into the write stream for processing.<br />
<br />
<h3>Analysis</h3>This is better than the other situations, we have multiple messages being processed at the same time here, but there is a strange pulsing to the messages going through the writer. Only when the last message into the write completes do more messages start to be processed by the writer. Using this technique we will have 5 or fewer messages currently being processed, but if that last message into the writer takes a long time to complete the overall throughput will slow until that message completes.<br />
<br />
This method was the best I could manage whilst still using the class based stream API to pipe messages into the slow writer. But is there another way? Maybe yes there is.<br />
<br />
<h2>Demo - Event emitters in the writer</h2>The problem with the previous async model was that it only allowed a certain number of messages to be pulled in to the writer from the transformer, and only when the last message completes can more messages be pulled in. This pull system has limitations as we have seen. There is another way, rather than pull messages, let them be pushed as they become available. <br />
<br />
This leads us to utilise the built in capabilities of event emitters. We will listen to the 'data' event of the transformer, then kick off an async event every time data is available. But we only want to process so much at once otherwise if the reader is slower than the writer (which it is) resource consumption will go through the roof and eventually overwhelm the limits on the process (ask us how we know). To do this we will pause and resume the transform stream as the limits inside the writer are met.<br />
<br />
Execute: <code>node <a href="https://github.com/DamianStanger/streams101/blob/master/06_indexEventEmitters.js">06_indexEventEmitters.js</a></code><br />
Example results: <a href="https://github.com/DamianStanger/streams101/blob/master/results/06_indexEventEmitters.log">./results/06_indexEventEmitters.log</a><br />
<br />
<code>++ 1 Read<br />
++ 2 Read<br />
++++ 1 Transform<br />
++++++ 1 Write<br />
1:0 Write resumed <---- #001<br />
++ 3 Read<br />
...<br />
++ 11 Read<br />
++++ 10 Transform<br />
++++++ 10 Write<br />
10:0 Write pausing <---- #002<br />
++ 12 Read<br />
++++ 11 Transform<br />
++ 13 Read<br />
++++ 12 Transform<br />
++ 14 Read<br />
++ 15 Read<br />
++ 16 Read <---- #003<br />
------ 6 - 9:1 Write finished in 150, resumed<br />
++++ 13 Transform<br />
++++++ 11 Write<br />
10:1 Write pausing<br />
------ 8 - 9:2 Write finished in 209, resumed<br />
++++ 14 Transform<br />
++ 17 Read<br />
++ 18 Read<br />
++++++ 12 Write<br />
10:2 Write pausing<br />
------ 10 - 9:3 Write finished in 335, resumed<br />
...<br />
++++++ 17 Write - SLOW<br />
10:7 Write pausing<br />
------ 11 - 9:8 Write finished in 624, resumed<br />
++++ 20 Transform<br />
++++++ 18 Write<br />
10:8 Write pausing<br />
++++++++++ TRANSFORM Final - Thu Mar 15 2018 17:33:44<br />
------ 1 - 9:9 Write finished in 840, resumed<br />
++++++ 19 Write<br />
10:9 Write pausing<br />
------ 3 - 9:10 Write finished in 842, resumed<br />
++++++ 20 Write<br />
10:10 Write pausing<br />
++++++++++ WRITE Final - Thu Mar 15 2018 17:33:44<br />
------ 5 - 9:11 Write finished in 889, resumed <---- #004<br />
------ 15 - 8:12 Write finished in 420, resumed<br />
...<br />
------ 14 - 1:19 Write finished in 1405, resumed<br />
------ 17 - 0:20 Write finished in 1758, resumed<br />
</code><br />
<br />
#001<br />
Every time we see 'write resumed' or 'write paused' there are two numbers preceding it. This is the number currently in progress and the number finished processing. If the number processing is less than 10 (the concurrency) then resume is called on the transform stream making sure that more messages are pushed into the writer. You can see looking through the logs that the number 'in progress' (the first number) climbs to ten then oscillates between nine and ten until there are no more messages in the transform queue (#004) at which point it start to drop to zero when it is finished processing all the messages.<br />
<br />
#002 - #003<br />
There are now ten messages being processed by the writer. Another 6 are pulled in to fill the 3 buffers (2 messages in each of the read buffer, incoming and outgoing transform stream buffers) <br />
<br />
#003<br />
From here on messages are pushed into the writer as it pause and resumes the transform stream. The number of messages in process in the async write process will remain as nine or ten for the remainder of the run until all messages have been pushed through the system.<br />
<br />
<h3>Code</h3>If you were to analyse the code and the differences between 05_indexAsync and 06_indexEventEmitters you will see that 06 does not have a class as a write stream, rather it uses event emitters and listens to these events coming from the transform stream. For each message it will kick off an async processing block.<br />
<br />
The effect of this model is that the completion of any write message can cause more messages to flow into the write functions, where as in the previous code only the last message into the write stream could do that.<br />
<br />
<h2>Comparing the relative speed of the different approaches</h2>I've done some comparisons for the different approaches I have gone through above. Each test processes messages with a high watermark set to 10. I've varied the number of messages processed and the maximum write concurrency to give some comparison.<br />
<br />
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #eeeeee;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #eeeeee;
}
</style><br />
<br />
<table><tr><th>Run #</th><th>File name</th><th>Async</th><th>Time taken</th><th># messages</th><th>Write concurrency</th></tr>
<tr><td>3.1</td><td>03_indexSyncSlow</td><td>N</td><td>69s</td><td>100</td><td>1</td></tr>
<tr><td>4.1</td><td>04_indexBatchRead</td><td>N</td><td>68s</td><td>100</td><td>1</td></tr>
<tr><td>5.1</td><td>05_indexAsync</td><td>N</td><td>67s</td><td>100</td><td>1</td></tr>
<tr><td>5.2</td><td>05_indexAsync</td><td>Y</td><td>10s</td><td>100</td><td>10</td></tr>
<tr><td>5.3</td><td>05_indexAsync</td><td>Y</td><td>95s</td><td>1000</td><td>10</td></tr>
<tr><td>5.4</td><td>05_indexAsync</td><td>Y</td><td>14s</td><td>1000</td><td>100</td></tr>
<tr><td>6.1</td><td>06_indexEventEmitters</td><td>N</td><td>68s</td><td>100</td><td>1</td></tr>
<tr><td>6.2</td><td>06_indexEventEmitters</td><td>Y</td><td>8s</td><td>100</td><td>10</td></tr>
<tr><td>6.3</td><td>06_indexEventEmitters</td><td>Y</td><td>72s</td><td>1000</td><td>10</td></tr>
<tr><td>6.4</td><td>06_indexEventEmitters</td><td>Y</td><td>9s</td><td>1000</td><td>100</td></tr>
</table><br />
Clearly the async versions were going to be quicker than the synchronous versions and it's interesting to see that when write concurrency is set to 1 pretty much all of them take the same 68 seconds. I'm attributing the deviation to the randomised wait time within the writers.<br />
<br />
The results that interest me the most though are the comparisons between 5.3 and 6.3 asynchronously processing 1000 messages with a concurrency of 10, and then 5.4 and 6.4 processing 1000 messages with a concurrency of 100. Using event emitters (6.3 and 6.4) were 25% and then 35% quicker than using stream pipes (5.3 and 5.4). Again this is not too surprising given the concurrency in the event emitter version is maintained at 100 for the length of the entire run where as in the piped version the number of messages being processed by the writer only gets topped up when the last message in completes. <br />
<br />
If you run the same tests yourself pay attention to the logs of 05_indexAsync which show the number of messages currently being processed, and see how it pulses up and down as the last message finishes (especially when the concurrency is high, try 100 or more).<br />
<br />
<h2>Conclusion</h2>Like I said at the beginning of this article, I didn't really set out to prove anything with this exercise, more just to get a fuller understanding of how the mechanics of streams work in node. I did this with a view to getting better performance out of the node processes that we employ to process messages off queues, perform business logic on that data and load data in to database. During this investigation/journey there have been lots of learnings, these have proved that we were using streams correctly but inefficiently. We operate our server side processing on a model similar to 04_indexBatchRead batching the read from sqs but processing messages in the writer one at a time. I've tried to capture these learnings in code on the github repo found at <a href="https://github.com/DamianStanger/streams101">https://github.com/DamianStanger/streams101</a> <br />
<br />
I hope that I managed to impart some of my learnings on to you in the process.<br />
<br />
<h2>Appendix / references</h2>My code and results - <a href="https://github.com/DamianStanger/streams101">https://github.com/DamianStanger/streams101</a><br />
Node stream API - <a href="https://nodejs.org/dist/latest-v9.x/docs/api/stream.html">https://nodejs.org/dist/latest-v9.x/docs/api/stream.html</a><br />
Back pressure - <a href="https://nodejs.org/en/docs/guides/backpressuring-in-streams/">https://nodejs.org/en/docs/guides/backpressuring-in-streams/</a><br />
Lifecycle of a pipe - <a href="https://nodejs.org/en/docs/guides/backpressuring-in-streams/#lifecycle-of-pipe">https://nodejs.org/en/docs/guides/backpressuring-in-streams/#lifecycle-of-pipe</a><br />
Node event emitters - <a href="https://nodejs.org/dist/latest-v9.x/docs/api/events.html">https://nodejs.org/dist/latest-v9.x/docs/api/events.html</a><br />
<br />
<h2>Footnote</h2>I would really appreciate any feedback on this article, positive comments and constructive feedback are equally welcome as I'm still learning, and would hate it if there are conclusions drawn that are inaccurate or just plain wrong. Thanks in advance. Do try out he code examples it will help cement the concepts described in this article.<br />
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-10257664353158679962018-02-28T20:31:00.001+00:002018-02-28T20:31:59.031+00:00Converting CRLF to LF for all files in a git repositoryAt work we currently have people who do their dev on linux laptops, linux VMs, windows and the WSL which means that we need to be careful about the compatibility of files in git. We deploy to centos in all our production and pre-prod environments so we always check-in linux line endings. <br />
<br />
But recently when I was looking through some codez I found a bit of a mix of files with LF and CRLF line endings and so wanted make them all consistent with the LF linux standard.<br />
<br />
<h2>git config</h2><br />
I don’t know how this happened exactly and didn’t narrow it down to any one commit but just wanted it fixed. We should all have our git clients set to convert and check in linux line endings which you can check with the command:<br />
<br />
<code>git config --list --global<br />
git config --list</code><br />
<br />
You are looking for the setting core.autocrlf. This can take three values: true, false and input. Depending on the OS that you are using you need to ensure that you use the correct setting.<br />
<br />
On windows it should be set to true. That is check out windows style (CRLF) but check in linux style (LF).<br />
<br />
On linux it needs to set to false or input as you don’t want files to contain windows line endings during development so you chekout with LF. You can also leave as default which is false.<br />
<br />
I make heavy use of WSL (windows subsystem for linux) as well as centos VMs running on virtualbox. WSL behaves like linux so I have the default set which is not to change the line endings going in or out. But you do have to be careful. If you change the files or create files using a windows editor (I use webstorm and sublime) then you could inadvertently check in windows line endings, so it might be best to use input. Input will checkout as is from the repo but on check in will convert all line endings to LF, just in case a CRLF file was introduced. <br />
<br />
By the way I love the WSL I use it every day and do prefer it to using a VM running linux, it works great for node dev. <br />
<br />
<h2>Converting CRLF to LF</h2><br />
Anyway back to the main point of this post. We have some files with windows line endings mixed in with files with linux line endings. How to make them consistent? In particular how to make them all have linux line endings?<br />
<br />
The difference is \r\n (windows) vs \n (linux) the tool sed is very good at finding strings in a file and replacing them with another<br />
<br />
sed is a stream editor for filtering and transforming text it takes we can make it take a regex replacement and run that against a file to remove any carriage returns from it '\r'<br />
<br />
<code>sed -i 's/\r//g' myfilename.js</code><br />
<br />
-i tells sed to do an in place substitution, 's/\r//g' is a regex that searches for carriage return '\r' and replaces them with nothing '//' globally for that file.<br />
<br />
But we have hundreds of files across tens of nested directories. So we need to find all the files we want to 'fix' using the find command.<br />
<br />
<code>find . -type f -not -path './.git*' -not -path './node_modules*'</code><br />
<br />
This will recursively list all files from the current directory excluding any files in the .git or node_modules folders. Do remember to exclude your .git folders as you will corrupt it if you run the substitution against files in there. Also remove any package folders or binary folders, this depends on the environment you are working in, I'm currently doing node dev so excluding the node_modules is good enough for me.<br />
<br />
All that remains is to put them together using the standard unix pipe operator and the xargs command which allows you to build and execute command lines, it will take the output of the find space separate the file names and append them to the next command, we would use it thus:<br />
<br />
<code>find . -type f -not -path './.git*' -not -path './node_modules*' | xargs sed -i 's/\r//g'</code><br />
<br />
If the folder contained 2 files xargs would build a command that looked like this:<br />
<br />
<code>sed -i 's/\r//g' ./file1.js ./file2.js</code><br />
<br />
<h2>Voila!</h2>All CRLF line endings are replaced with LF. You should be able to check this by using git diff to see the changes. You should see all line endings in the unified diff like this:<br />
<br />
<code>diff --git a/file1.js b/file1.js<br />
index 01ce825..f5f8e58 100644<br />
--- a/file1.js<br />
+++ b/file1.js<br />
-old line with windows line endings^M<br />
+old line with windows line endings</code><br />
<br />
If you don’t see the ^M but just two lines that look the same then there are a couple of tricks you can try. <br />
<code>git diff -R</code> This reverses the output, apparently git does not always highlight removed white space, but will highlight added white space.<br />
<code>git diff | cat -v</code> This will pipe the raw patch output from the git diff to cat. cat with a -v echoes the input including all non-display characters (like a carriage return) to the console.<br />
<br />
<h2>Appendix</h2><a href="https://git-scm.com/docs/git-config">https://git-scm.com/docs/git-config</a><br />
<a href="https://git-scm.com/docs/git-diff">https://git-scm.com/docs/git-diff</a><br />
<a href="https://manpages.debian.org/stretch/sed/sed.1.en.html">https://manpages.debian.org/stretch/sed/sed.1.en.html</a><br />
<a href="https://manpages.debian.org/stretch/findutils/xargs.1.en.html">https://manpages.debian.org/stretch/findutils/xargs.1.en.html</a><br />
<a href="https://manpages.debian.org/stretch/findutils/find.1.en.html">https://manpages.debian.org/stretch/findutils/find.1.en.html</a>Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-67584019857070064482018-01-27T18:13:00.000+00:002018-03-04T18:20:13.141+00:00git shortcutsI've just recently had to set up my git environment again. One thing came to my attention, that I've not got them all written down anywhere. This post is documentation so next time I have to do this I will have them easily to hand.<br />
<br />
<code>$git config --global --list<br />
<br />
alias.cm=commit -m<br />
alias.co=checkout<br />
alias.d=diff<br />
alias.ds=diff --staged<br />
alias.l=log --oneline --decorate --graph --all<br />
alias.s=status --short<br />
</code><br />
<br />
This can be set up by either adding it to your git config ~/.gitconfig<br />
<code>[alias]<br />
cm = commit -m<br />
co = checkout<br />
d = diff<br />
ds = diff --staged<br />
l = log --oneline --decorate --graph --all<br />
s = status --short</code><br />
<br />
Or you can use the console to set the alias' <br />
<br />
<code>git config --global alias.cm commit -m<br />
git config --global alias.co checkout<br />
git config --global alias.d diff<br />
git config --global alias.ds diff --staged<br />
git config --global alias.l log --oneline --decorate --graph --all<br />
git config --global alias.s status --short<br />
</code><br />
<br />
Also I use ZSH as my console of choice which has many built in shortcuts for practically all git commands. But to be honest I find them a little cryptic even for me. Be my guest to check it out https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-42013700566149665402017-09-30T23:41:00.000+01:002017-10-08T21:41:37.917+01:00Damo's September 2017 Podcast HighlightsI subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a>. I'm keeping a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">podcast blog here</a> of the episodes that I find interesting or useful in some way.<br />
<br />
<h2>Programming and Testing</h2>[HansleMinutes] Maybe just use Vanilla Javascript with Chris Ferdinandi <a href="https://hanselminutes.com/598/maybe-just-use-vanilla-javascript-with-chris-ferdinandi">https://hanselminutes.com/598/maybe-just-use-vanilla-javascript-with-chris-ferdinandi</a><br />
<ul><li>There's a new JavaScript created every few seconds. If you pick up any noun there's probably a JavsScript library named after that noun. </li>
<li>What if you just used Vanilla JavaScript? Chris helps Scott answer that question, and more in this episode.</li>
</ul><br />
[JavaScript Jabber] Web Apps on Linux with Jeremy Likness and Michael Crump <a href="https://dev.to/jsjabber/jsj-bonus-web-apps-on-linux-with-jeremy-likness-and-michael-crump">https://dev.to/jsjabber/jsj-bonus-web-apps-on-linux-with-jeremy-likness-and-michael-crump</a><br />
<ul><li>Web application as a service offering from Microsoft. I don't need to worry about the platform.</li>
<li>Web Apps has traditionally been on Windows. Web Apps on Linux is in preview.</li>
<li>Web Apps on Linux supports Node, PHP, Ruby, and .NET Core.</li>
</ul><br />
<h2>Agile</h2>[Developer Tea] Growth Mindset <a href="https://developertea.simplecast.fm/58bc17f1">https://developertea.simplecast.fm/58bc17f1</a><br />
<ul><li>In this episode, we're talking about having a Growth Mindset.</li>
</ul><br />
[Elite Man Magazine] How To Use The 80/20 Rule To Work Less And Achieve Much More In Your Life <a href="http://elitemanmagazine.com/80-20-rule-perry-marshall/">http://elitemanmagazine.com/80-20-rule-perry-marshall/</a><br />
<ul><li>In today’s episode Perry talks about how apply the 80/20 rule into your life to work less and achieve much more. </li>
<li>In this fantastic interview we cover everything from The Butterfly Effect, to the 80/20 rule in real-life action, to finding out what your super powers are, and how to make yourself infinitely more productive. </li>
<li>If you’re wondering what you can do right now to work less, get more done, and put the 80/20 rule into action, check this episode out now!</li>
</ul><br />
[2000 Books] 3 Key mindsets that will make you more productive <a href="https://2000books.libsyn.com/99productivityideas-getting-things-done-david-allen-3-key-mindsets-that-will-make-you-more-productive">https://2000books.libsyn.com/99productivityideas-getting-things-done-david-allen-3-key-mindsets-that-will-make-you-more-productive</a><br />
<ul><li>3 Key mindsets that will make you more productive</li>
</ul><br />
<h2>Architecture and Devops</h2>[NDC 2017] Confusion In The Land Of The Serverless: - Sam Newman <a href="https://www.youtube.com/watch?v=CrS0HVQZiQI">https://www.youtube.com/watch?v=CrS0HVQZiQI</a><br />
<ul><li>Serverless computing is the hot new thing. Like any hyped technology, it promises a lot. However questions remain around concept and implementation, especially when you start to compare how we've built systems in the past, and what serverless offers us now. Is Serverless the future, or just the emperor's new clothes?</li>
<li>This talk will very briefly introduce serverless computing, but will then dive into some of the questions that aren't always asked in conjunction with this technology. Topics will include:</li>
<li>How does your attitude to security change?</li>
<li>Is it easier, or harder, to create reliable, resilient systems?</li>
<li>Do patterns like Circuit breakers and connection pools make sense any more?</li>
<li>Is vendor lock-in a problem?</li>
<li>Is serverless computing only for microservice architectures?</li>
<li>Which problems fit serverless computing?</li>
</ul><br />
[The New Stack] How Serverless Is Shaping the Future of Software Development <a href="https://thenewstack.io/serverless-shaping-future-software-development/">https://thenewstack.io/serverless-shaping-future-software-development/</a><br />
<ul><li>Serverless architectures are often positioned as the next big thing in cloud computing, but what exactly is serverless, who is utilizing these tools and services, and how is this ecosystem maturing? </li>
<li>In this episode of The New Stack Makers podcast, we spoke to Mike Roberts, co-founder of Symphonia.io, about all things serverless</li>
</ul><br />
[Software Architecture Radio] The New Normal with Mike Nygard <a href="http://www.softwarearchitecturerad.io/episodes/2017/9/6/episode-4-the-new-normal-with-mike-nygard">http://www.softwarearchitecturerad.io/episodes/2017/9/6/episode-4-the-new-normal-with-mike-nygard</a><br />
<ul><li>Complex Systems</li>
<li>Continuous Partial Failure and Looking at Microservices</li>
<li>“Agile”: Why?</li>
<li>Antifragility</li>
<li>Evolutionary Design</li>
<li>Evolutionary Architecture</li>
<li>Redundancy and DRY (Don’t Repeat Yourself)</li>
<li>YAGNI (You Aren’t Gonna Need It)</li>
<li>What services should I actually have?</li>
<li>Contracts Between Services</li>
<li>Advice for Someone Getting Started as an Architect:</li>
</ul><br />
[Software Architecture Radio] Mark Richards on the Evolution of Software Architecture <a href="http://www.softwarearchitecturerad.io/episodes/2017/1/20/episode-3-mark-richards-on-the-evolution-of-software-architecture">http://www.softwarearchitecturerad.io/episodes/2017/1/20/episode-3-mark-richards-on-the-evolution-of-software-architecture</a><br />
<ul><li>After Mark provides us with some interesting aspects of his background (he started his career as an astronomer!), we start by discussing the horizontal and vertical aspects of the evolution of software architecture</li>
<li>Some of these drivers are technical - especially often hardware taking some time to catch up with the needs of newer ideas and software - but other times these changes are driven by changes in the business.</li>
</ul><br />
[DevOps Days] Lessons Learned From Detroit To Deming <a href="https://devopsdays.libsyn.com/podcast/devops-lessons-learned-from-detroit-to-deming-devopsdays-dc-2017">https://devopsdays.libsyn.com/podcast/devops-lessons-learned-from-detroit-to-deming-devopsdays-dc-2017</a><br />
<ul><li>This session aims to enlighten DevOps teams, security and development professionals by sharing results from the 2017 State of the Software Supply Chain Report -- a blend of public and proprietary data with expert research and analysis. </li>
<li>The presentation will also reveal findings from the 2017 DevSecOps Community survey where over 2,000 professionals shared their experiences blending DevOps and security practices together. </li>
<li>Throughout the discussion, lessons are discussed that Deming employed decades ago to help us accelerate adoption of the right DevSecOps culture, practices, and measures today.</li>
</ul><br />
<br />
[O'Reilly Programming Podcast] Sam Newman on moving from monolith systems to microservices <a href="https://www.oreilly.com/ideas/sam-newman-on-moving-from-monolith-systems-to-microservices">https://www.oreilly.com/ideas/sam-newman-on-moving-from-monolith-systems-to-microservices</a><br />
<ul><li>For organizations considering migrating from monolith systems to microservices, Neman suggests moving gradually, by starting with one or two services at the beginning, getting them deployed, and assessing the outcome.</li>
<li>Newman identifies independent deployability as one of the key principles for doing microservices well. “If you create a system architecture with independent deployability, so many benefits flow from that,” he says.</li>
<li>He recommends a “consumers first” focus for microservices, with designs based on how software will be implemented by customers.</li>
<li>How microservices can enable cost-effective scaling</li>
<li>In discussing modularity, Newman says “If you want to look at a system that gets modules right, look at Erlang, which was built from the ground up to be a language and a runtime for building distributed systems.”</li>
</ul><br />
<br />
[Static Void Podcast] Real-World DevOps with Andy Schwam <a href="https://www.staticvoidpodcast.com/real-world-devops-with-andy-schwam">https://www.staticvoidpodcast.com/real-world-devops-with-andy-schwam</a><br />
<ul><li>Discussions about the concepts of "DevOps" in the real world. </li>
<li>What's myth and what works? </li>
<li>What's hard and what's easy? </li>
<li>Andy takes us behind the scenes and tells us what it takes to transform an existing error-prone manual deployment to a highly-reliable, repeatable, and automated process.</li>
</ul><br />
<h2>/stuff</h2>[99% Invisible] The Age of the Algorithm <a href="http://99percentinvisible.prx.org/2017/09/05/274-the-age-of-the-algorithm/">http://99percentinvisible.prx.org/2017/09/05/274-the-age-of-the-algorithm/</a><br />
<ul><li>Computer algorithms now shape our world in profound and mostly invisible ways:</li>
<li>They predict if we’ll be valuable customers and whether we’re likely to repay a loan. </li>
<li>They filter what we see on social media, sort through resumes, and evaluate job performance. </li>
<li>They inform prison sentences and monitor our health. Most of these algorithms have been created with good intentions. </li>
<li>The goal is to replace subjective judgments with objective measurements. But it doesn’t always work out like that.</li>
</ul><br />
<br />
[Software Engineering Daily] Brave Browser with Jonathan Sampson <a href="https://softwareengineeringdaily.com/2017/09/20/brave-browser-with-jonathan-sampson/">https://softwareengineeringdaily.com/2017/09/20/brave-browser-with-jonathan-sampson/</a><br />
<ul><li>Online advertising enables free content and services of the Internet. One of the free services that is powered by advertising is the browser. 60% of web browsing is done through Chrome, which is owned by Google, which is powered by advertising.</li>
<li>The application that most of us use to explore the web is made by a company that relies on ads, so it is unsurprising that the default of that browser is to allow close tracking of user behavior. When you hit a website, a variety of trackers are logging your data for the purpose of serving you better ads.</li>
<li>Brave is a web browser built with a modern view of advertising, privacy, and economics. Brave users can pay for content with their money OR by paying attention to ads. This system is formalized through the Basic Attention Token (BAT), a cryptocurrency that can be used to purchase user attention.</li>
</ul><br />
<br />
[TED] Tim ferris - Why you should define your fears instead of your goals <a href="https://www.ted.com/talks/tim_ferriss_why_you_should_define_your_fears_instead_of_your_goals">https://www.ted.com/talks/tim_ferriss_why_you_should_define_your_fears_instead_of_your_goals</a><br />
<ul><li>The hard choices -- what we most fear doing, asking, saying -- are very often exactly what we need to do. </li>
<li>How can we overcome self-paralysis and take action? Tim Ferriss encourages us to fully envision and write down our fears in detail, in a simple but powerful exercise he calls "fear-setting." </li>
<li>Learn more about how this practice can help you thrive in high-stress environments and separate what you can control from what you cannot.</li>
</ul><br />
<br />
BBC - More or Less] The 10,000 Hours Rule <a href="http://www.bbc.co.uk/programmes/p01sqly1">http://www.bbc.co.uk/programmes/p01sqly1</a><br />
<ul><li>If you practised anything for long enough, would you become a pro? Author Malcolm Gladwell popularised the idea that if you devote yourself to anything from chess to playing an instrument for 10,000 hours, you will become an expert.</li>
<li>But where did the idea come from, and is it true? More or Less tells the story of how a paper published in 1993 went on to spark a debate – is practice enough, or do you need innate talent as well?</li>
<li>David Epstein, author of The Sports Gene and Malcolm Gladwell explain their views.</li>
</ul><br />
<br />
[TED] How the US government spies on people who protest — including you <a href="https://www.ted.com/talks/jennifer_granick_how_the_us_government_spies_on_people_who_protest_including_you">https://www.ted.com/talks/jennifer_granick_how_the_us_government_spies_on_people_who_protest_including_you</a><br />
<ul><li>What's stopping the American government from recording your phone calls, reading your emails and monitoring your location? Very little, says surveillance and cybersecurity counsel Jennifer Granick. </li>
<li>The government collects all kinds of information about you easily, cheaply and without a warrant -- and if you've ever participated in a protest or attended a gun show, you're likely a person of interest.</li>
</ul><br />
<br />
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-78932428379101703942017-08-31T22:13:00.000+01:002017-09-29T22:43:19.092+01:00Damo's August 2017 Podcast HighlightsI subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a>. I'm keeping a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">podcast blog here</a> of the episodes that I find interesting or useful in some way.<br />
<br />
<h2>
Programming and Testing</h2>
[Crosscutting Concerns] Jeremy Clark Convincing Your Boss on Unit Testing <a href="http://crosscuttingconcerns.com/Podcast-056-Jeremy-Clark-Convincing-Your-Boss-on-Unit-Testing">http://crosscuttingconcerns.com/Podcast-056-Jeremy-Clark-Convincing-Your-Boss-on-Unit-Testing</a><br />
<br />
<ul>
<li>Regression tests - Change Code Without Fear</li>
<li>Code coverage (NCover is a tool that reports on code coverage for .NET code)</li>
<li>TDD and BDD and ATDD</li>
<li>WPF and XML, MVVM</li>
</ul>
<br />
<br />
[Crosscutting Concerns] J Wolfgang Goerlich on Encryption Frameworks <a href="http://crosscuttingconcerns.com/Podcast-054-J-Wolfgang-Goerlich-on-Encryption-Frameworks">http://crosscuttingconcerns.com/Podcast-054-J-Wolfgang-Goerlich-on-Encryption-Frameworks</a><br />
<br />
<h2>
Agile</h2>
[Scrum Master Toolbox] Vasco Duarte discusses #NoEstimates <a href="http://scrum-master-toolbox.org/2017/08/podcast/2017-first-6-months-top-episodes-5-vasco-duarte-discusses-noestimates/">http://scrum-master-toolbox.org/2017/08/podcast/2017-first-6-months-top-episodes-5-vasco-duarte-discusses-noestimates/</a><br />
<br />
<ul>
<li>What is #NoEstimates about for the author of the first #NoEstimates book? </li>
<li>What can we learn from Vasco’s journey that led him to find #NoEstimates?</li>
</ul>
<br />
<br />
[Mastering Business Analysis] Lightning Cast: Requirements Quality <a href="http://masteringbusinessanalysis.com/lightning-cast-requirements-quality/">http://masteringbusinessanalysis.com/lightning-cast-requirements-quality/</a><br />
<br />
<ul>
<li>There’s a lot of talk about producing high-quality requirements but what does it really mean? Quality is a standard against which something is measured. It’s a degree of excellence or the ability to satisfy a need or expectation.</li>
<li>When it comes requirements, people often talk about the characteristics of good requirements. The most common characteristics mentioned are: complete, concise, correct, clear, testable, traceable, and prioritized.</li>
</ul>
<br />
<br />
<h2>
Architecture and Devops</h2>
[Software Engineering Daily] Serverless Continuous Delivery with Robin Weston <a href="https://softwareengineeringdaily.com/2017/08/07/serverless-continuous-delivery-with-robin-weston/">https://softwareengineeringdaily.com/2017/08/07/serverless-continuous-delivery-with-robin-weston/</a><br />
<br />
<ul>
<li>Serverless computing reduces the cost of using the cloud. Serverless also makes it easy to scale applications. </li>
<li>The downside: building serverless apps requires some mindset shift. </li>
<li>Serverless functions are deployed to transient units of computation that are spun up on demand. This is in contrast to the typical model of application delivery–the deployment of an application to a server or a container that stays running until you shut it down.</li>
</ul>
<br />
<br />
[Pipeline conf 2017] Serverless Architectures and Continuous Delivery <a href="https://vimeo.com/channels/pipelineconf/209686484">https://vimeo.com/channels/pipelineconf/209686484</a><br />
<br />
<ul>
<li>Serverless architectures have been touted as the next evolution of cloud-hosted software. Indeed, the promise of resiliency and scalability without the need for infrastructure management sounds too good to be true!</li>
<li>But how well do serverless architectures play with the patterns and practises of continuous delivery? Do they help or hinder us in our goal of delivering frequent and low risk software changes to production? What are the trade-offs to weigh up when considering using a serverless architecture on your next project?</li>
</ul>
<br />
<br />
[O'Reilly podcast] Mike Roberts on serverless architectures <a href="https://www.oreilly.com/ideas/mike-roberts-on-serverless-architectures">https://www.oreilly.com/ideas/mike-roberts-on-serverless-architectures</a><br />
<br />
<ul>
<li>Why Roberts calls serverless “the next evolution of cloud systems,” as individual process deployment and the resource allocation of servers are increasingly outsourced to vendors</li>
<li>How serverless architectures use backend-as-a-service (BaaS) products and functions-as-a-service (FaaS) platforms</li>
<li>The similarities and differences between a serverless architecture and microservices, and how microservices ideas can be applied to serverless</li>
<li>Roberts explains that serverless is “not an all-or-nothing approach,” and that often “the best architecture for a company is going to be a hybrid architecture between serverless and non-serverless technologies.”</li>
<li>Recent advances in serverless tooling, including progress in distributed system monitoring tools, such as Amazon’s X-Ray</li>
</ul>
<br />
<br />
[O'Reilly podcast] Neal Ford on evolutionary architecture <a href="https://www.oreilly.com/ideas/neal-ford-on-evolutionary-architecture">https://www.oreilly.com/ideas/neal-ford-on-evolutionary-architecture</a><br />
<br />
<ul>
<li>Software architecture’s increasing popularity over the last few years; Ford says that “companies such as Netflix and Amazon showed that if you do software architecture really well, you build a competitive advantage over everybody else.”</li>
<li>The non-functional requirements and soft skills needed to successfully implement software architecture.</li>
<li>How evolutionary architecture enables you to adapt to the future rather than predict it; Ford notes the pitfalls of “trying to do predictive planning against an incredibly dynamic ecosystem.”</li>
<li>Why guided change and incremental change are the two characteristics of an evolutionary architecture.</li>
<li>The difference between evolutionary and adaptive systems.</li>
</ul>
<br />
<br />
[Infoq] Security Considerations and the State of Microservices with Sam Newman <a href="https://www.infoq.com/podcasts/sam-newman-security-microservices-state">https://www.infoq.com/podcasts/sam-newman-security-microservices-state</a><br />
<br />
<ul>
<li>Wesley Reisz talks with Sam Newman about microservices. </li>
<li>They explore the current state of the art with regards to the architectural style and corresponding tooling and deployment platforms. </li>
<li>They then discuss how microservices increase the surface area of where sensitive information can be read or manipulated, but also have the potential to create systems that are more secure.</li>
</ul>
<br />
<br />
[Devops Radio] From Docker to DevOps with John Willis <a href="https://devopsradio.libsyn.com/episode-21-from-docker-to-devops-with-john-willis">https://devopsradio.libsyn.com/episode-21-from-docker-to-devops-with-john-willis</a><br />
<br />
<ul>
<li>In this episode of DevOps Radio, John Willis, former Director of Ecosystems at Docker, shares everything from his experience in the early days of DevOps to his predictions of what the future holds</li>
</ul>
<br />
<br />
<h2>
/stuff</h2>
[TED] The era of blind faith in big data must end <a href="https://www.ted.com/talks/cathy_o_neil_the_era_of_blind_faith_in_big_data_must_end">https://www.ted.com/talks/cathy_o_neil_the_era_of_blind_faith_in_big_data_must_end</a><br />
<br />
<ul>
<li>Algorithms decide who gets a loan, who gets a job interview, who gets insurance and much more -- but they don't automatically make things fair. </li>
<li>Mathematician and data scientist Cathy O'Neil coined a term for algorithms that are secret, important and harmful: "weapons of math destruction." </li>
<li>Learn more about the hidden agendas behind the formulas.</li>
</ul>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-4222653885886684742017-07-31T22:33:00.000+01:002017-09-29T13:32:06.289+01:00Damo's July 2017 Podcast HighlightsI subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a>. I'm keeping a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">podcast blog here</a> of the episodes that I find interesting or useful in some way.<br />
<h2>
Programming and Testing</h2>
[Functional Geekery] Robert C. Martin <a href="https://www.functionalgeekery.com/episode-1-robert-c-martin/">https://www.functionalgeekery.com/episode-1-robert-c-martin/</a><br />
<br />
<ul>
<li>In this episode I talk with Robert C. Martin, better known as Uncle Bob. about: </li>
<li>Structure and Interpretation of Computer Programs</li>
<li>Introducing children to programming</li>
<li>TDD and the REPL</li>
<li>Compatibility of Functional Programming and Object Oriented Programming</li>
</ul>
<br />
<br />
[Cross Cutting Concerns] Jesse Riley sucks at unit testing <a href="http://crosscuttingconcerns.com/Podcast-031-Jesse-Riley-sucks-at-unit-testing">http://crosscuttingconcerns.com/Podcast-031-Jesse-Riley-sucks-at-unit-testing</a><br />
<br />
<ul>
<li>Jesse Riley and I discuss unit testing and how to do it better</li>
</ul>
<br />
<br />
[Channel 9] A Broad View of Machine Learning <a href="https://www.msn.com/en-us/movies/trailer/codechat-068-a-broad-view-of-machine-learning-codechat/vp-BBE9hLv">https://www.msn.com/en-us/movies/trailer/codechat-068-a-broad-view-of-machine-learning-codechat/vp-BBE9hLv</a><br />
<br />
<ul>
<li>Rick Barraza (@rickbarraza) works in the AI space at Microsoft, and is particularly good at communicating the concepts of the seemingly (and actually) complex world of machine learning.</li>
<li>In this interview, Rick clarifies the terms machine learning (ML), deep neural networks (DNN), and artificial intelligence (AI), and attempts to cast a vision for this technology in the near and distant future. And an exciting future it is!</li>
</ul>
<br />
<h2>
Agile</h2>
[Mastering Business Analysis] Lightning Cast: The Agile BA Mindset <a href="http://masteringbusinessanalysis.com/agile-business-analyst-mindset/">http://masteringbusinessanalysis.com/agile-business-analyst-mindset/</a><br />
<br />
<ul>
<li>How can a Business Analyst be successful in an Agile environment? We can use a lot of the same tools, techniques, and approaches that we would use in a traditional environment. By adopting a different mindset, we apply those tools in a different way.</li>
<li>Using lean and Agile approaches, we’re able to iterate by delivering smaller chunks and get feedback along the way so that we can adapt to changing customer needs.</li>
</ul>
<br />
<br />
[Deliver It] #NoEstimates <a href="https://ryanripley.com/afh-073-noestimates-deliver-cast/">https://ryanripley.com/afh-073-noestimates-deliver-cast/</a><br />
<br />
<ul>
<li>What is #NoEstimates</li>
<li>How #NoEstimates impacts the work of Product Owners</li>
<li>Why data (not guesses) help teams make better decisions and deliver value sooner</li>
</ul>
<br />
<h2>
/stuff</h2>
[Becoming Superhuman] David Heinemeier Hansson: An Interview With A Real-world Superlearner <a href="https://becomingasuperhuman.com/david-heinemeier-hansson-interview-real-life-superlearner/">https://becomingasuperhuman.com/david-heinemeier-hansson-interview-real-life-superlearner/</a><br />
<br />
<ul>
<li>Strip out of your brain that there are speed limits to learning… You can compress most learning trajectories into a much, much shorter amount of time…</li>
<li>In this episode, I wanted to deconstruct David’s thinking process and figure out how he learns so much so effectively. I wanted to understand how he has managed to be so successful in two entirely different worlds, and see what tips he had to offer to anyone looking to live a life as diverse as his.</li>
</ul>
<br />
<br />
[TED] How a handful of tech companies control billions of minds every day <a href="https://www.ted.com/talks/tristan_harris_the_manipulative_tricks_tech_companies_use_to_capture_your_attention">https://www.ted.com/talks/tristan_harris_the_manipulative_tricks_tech_companies_use_to_capture_your_attention</a><br />
<br />
<ul>
<li>A handful of people working at a handful of tech companies steer the thoughts of billions of people every day, says design thinker Tristan Harris. </li>
<li>From Facebook notifications to Snapstreaks to YouTube autoplays, they're all competing for one thing: your attention. </li>
<li>Harris shares how these companies prey on our psychology for their own profit and calls for a design renaissance in which our tech instead encourages us to live out the timeline we want.</li>
</ul>
<br />
<br />
[Blinkist] GTD - David Allen Says Your Brain Is Not A Hard Drive <a href="https://www.blinkist.com/magazine/posts/simplify-productivity-david-allen">https://www.blinkist.com/magazine/posts/simplify-productivity-david-allen</a><br />
<br />
<ul>
<li>we talk to productivity guru David Allen about how to keep things simple while still taking advantage of every opportunity.</li>
<li>if you ever get the feeling that there simply aren’t enough hours in a day for all you want to get done, or that you’re prioritizing the wrong things, Allen’s method is an essential tool for achieving the goals that are most important to you. </li>
<li>By the end of the episode, you’ll understand exactly what next actions you should take to work more effectively.</li>
</ul>
<br />
[2000 Books] 120[Execution] Power of Habit - Change your negative habits in 3 weeks <a href="http://2000books.libsyn.com/120execution-power-of-habit-1-precise-exercise-to-change-your-negative-habits-in-3-weeks-flat">http://2000books.libsyn.com/120execution-power-of-habit-1-precise-exercise-to-change-your-negative-habits-in-3-weeks-flat</a><br />
<br />
<ul>
<li>One PRECISE Exercise to change your -ve habits in 3 weeks flat!</li>
</ul>
<br />
[Radiolab] Breaking News <a href="http://www.radiolab.org/story/breaking-news/">http://www.radiolab.org/story/breaking-news/</a><br />
<br />
<ul>
<li>Simon Adler takes us down a technological rabbit hole of strangely contorted faces and words made out of thin air. And a wonderland full of computer scientists, journalists, and digital detectives forces us to rethink even the things we see with our very own eyes.</li>
<li>Oh, and by the way, we decided to put the dark secrets we learned into action, and unleash this on the internet.</li>
</ul>
<br />
[TEDx] The art of memory: Daniel Kilov <a href="https://www.youtube.com/watch?v=VQKt58kuEnk">https://www.youtube.com/watch?v=VQKt58kuEnk</a><br />
<br />
<ul>
<li>Having struggled with organizational skills as a symptom of his poor memory all through high school, Daniel sought out methods to improve his memory. </li>
<li>It was then that he discovered the "Art of Memory", a loosely associated group of mnemonic principles and techniques used to organize memory impressions, improve recall, and assist in the combination and 'invention' of ideas. </li>
<li>These techniques are sometimes referred to as mnemotechnics, and are employed by memory athletes to perform remarkable feats of learning.</li>
</ul>
<br />
[TED] JOSHUA FOER - Feats of memory anyone can do <a href="https://www.ted.com/talks/joshua_foer_feats_of_memory_anyone_can_do">https://www.ted.com/talks/joshua_foer_feats_of_memory_anyone_can_do</a><br />
<br />
<ul>
<li>There are people who can quickly memorize lists of thousands of numbers, the order of all the cards in a deck (or ten!), and much more. </li>
<li>Science writer Joshua Foer describes the technique -- called the memory palace -- and shows off its most remarkable feature: anyone can learn how to use it, including him</li>
</ul>
<br />
[Elite Man Magazine] How To Win Every Negotiation with Chris Voss <a href="http://elitemanmagazine.com/chris-voss-win-every-negotiation/">http://elitemanmagazine.com/chris-voss-win-every-negotiation/</a><br />
<br />
<ul>
<li>Chris Voss, former FBI Lead International Kidnapping Negotiator, joins our show in this special episode of the Elite Man Podcast! </li>
<li>Chris talks about his experience successfully negotiating some of the most intense and pressure-cooker situations imaginable and the lessons he learned from this. </li>
<li>He shares with us his best tips and strategies for negotiating in any type of environment including buying a car, asking your boss for a raise, or making a business deal. If you’re wondering how to win every negotiation that comes your way, check this episode out now!</li>
</ul>
<br />
[Elite Man Magazine] Persuasion, Influence, And Mind Control with Chase Hughes <a href="http://elitemanmagazine.com/persuasion-influence-mind-control-chase-hughes/">http://elitemanmagazine.com/persuasion-influence-mind-control-chase-hughes/</a><br />
<br />
<ul>
<li>Chase Hughes, world-renowned behavioral scientist and the #1 body language expert in the country, joins our show in this special episode of the Elite Man Podcast! </li>
<li>Chase talks about persuasion, influence, and even using real-life mind control to get others to do whatever you want! </li>
<li>He shares with us his innovative techniques and tactics for manipulating others to get them to do what you want.</li>
</ul>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-78423267271185418132017-06-30T22:10:00.000+01:002017-07-07T22:06:14.600+01:00Damo's June 2017 Podcast HighlightsI subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a>. I'm keeping a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">podcast blog here</a> of the episodes that I find interesting or useful in some way.<br />
<br />
<h2>
Architecture and Devops</h2>
[The Changelog] The Serverless Revolution for javascript programmers <a href="https://changelog.com/podcast/253">https://changelog.com/podcast/253</a><br />
<br />
<ul>
<li>Pam Selle at OSCON about the serverless revolution happening for JavaScript developers <a href="https://conferences.oreilly.com/oscon/oscon-tx/public/schedule/detail/56876">https://conferences.oreilly.com/oscon/oscon-tx/public/schedule/detail/56876</a></li>
<li><a href="https://www.youtube.com/watch?v=vYkdj1fXOHI">https://www.youtube.com/watch?v=vYkdj1fXOHI</a></li>
<li>Gain a general understanding of serverless and possible architectures</li>
<li>Serverless computing—using platforms like AWS Lambda, Google Cloud Functions, or Azure Functions—takes your microservices architecture and brings it into a new age of operations. Why maintain a server when you can run your code on-demand? Combine this power with Node.js and JavaScript-powered applications, and you have an amazing combination in your hands.</li>
<li>Pam Selle offers an overview of serverless computing, including why it’s so revolutionary and where to get started, and explains how you can use it to power your apps at a fraction of the usual cost of compute using a JavaScript-dominant architecture.</li>
</ul>
<br />
<br />
[Run As Radio] DevOps in 2017 <a href="https://www.runasradio.com/Shows/Show/537">https://www.runasradio.com/Shows/Show/537</a><br />
<br />
<ul>
<li>How is DevOps evolving? While at the DevOps Enterprise Summit in London, Richard sat down with Nicole Forsgren to talk about her latest data finding and analysis on DevOps. </li>
<li>The conversation starts with a discussion about making good reports, including who the data is collected from. Ideally you'd want a fully random data set, but as Nicole explains, that's not possible - you have to go with as large a set as possible. In the case of the 2017 report, that's 3200 survey responses</li>
<li><a href="https://puppet.com/resources/whitepaper/2017-state-of-devops-report">https://puppet.com/resources/whitepaper/2017-state-of-devops-report</a></li>
</ul>
<br />
<br />
[arrested devops] When The Levee Breaks With Jeff Smith And Mark Imbriaco <a href="https://www.arresteddevops.com/disaster-communication/">https://www.arresteddevops.com/disaster-communication/</a><br />
<br />
<ul>
<li>Who owns your availability?</li>
</ul>
<br />
<h2>
Programming and Testing</h2>
[Developing Up] The Art of the Code Review <a href="http://www.developingup.com/19">http://www.developingup.com/19</a><br />
<br />
<ul>
<li>Great developers continually seek to improve the code they work on and write. In this episode we discuss how you can use code reviews to help yourself and your team become better developers.</li>
<li>Types of code reviews</li>
<ul>
<li>Formal “Code Review”</li>
<li>Part of the QA process</li>
<li>Automated reviews</li>
<li>Pair programming</li>
<li>PR reviews</li>
</ul>
<li>Benefits of code reviews</li>
<ul>
<li>Project benefits</li>
<li>Team benefits</li>
<li>Reviewee benefits</li>
<li>Reviewer benefits</li>
</ul>
<li>Guidelines</li>
<ul>
<li>No bad attitudes</li>
<li>Set goals</li>
<li>Less is more</li>
<li>Annotate</li>
<li>Document</li>
</ul>
</ul>
<br />
<br />
[Programming Throwdown] Code Reviews <a href="http://www.programmingthrowdown.com/2017/05/episode-66.html">http://www.programmingthrowdown.com/2017/05/episode-66.html</a><br />
<br />
<ul>
<li>Why?</li>
<ul>
<li>Get another pair of eyes</li>
<li>Teach others about what you do</li>
</ul>
<li>What Not to do</li>
<ul>
<li>Become a road block to work</li>
<li>Let reviews linger</li>
<li>Let it become about only style</li>
<li>Have only some people do reviews</li>
</ul>
<li>How?</li>
<ul>
<li>Email</li>
<li>In-person</li>
<li>Web tools</li>
<li>Phabricator</li>
<li>Gerrit</li>
<li>Gitlab/github</li>
</ul>
<li>Rules</li>
<ul>
<li>All changes must be approved by someone</li>
<li>Readability</li>
<li>+1 vs +2 or similar</li>
<li>To push anyways, there's an emergency mode</li>
<li>Keep line count down</li>
</ul>
</ul>
<br />
<br />
[Hansel Minutes] Inside WebAssembly with Mozilla Fellow David Bryant <a href="https://www.hanselminutes.com/581/inside-webassembly-with-mozilla">https://www.hanselminutes.com/581/inside-webassembly-with-mozilla</a><br />
<br />
<ul>
<li>the last few decades of the web and how it's all about to change with the advent of WebAssembly.</li>
<li>Is JavaScript the new "metal?"</li>
</ul>
<br />
<br />
[CodeChat] The Latest, Greatest Features of C# 7.0 <a href="https://channel9.msdn.com/Shows/codechat/067">https://channel9.msdn.com/Shows/codechat/067</a><br />
<br />
<ul>
<li>C# version 7.0 is totally a thing and with it come a number of cool features like tuples and deconstruction. According to Mark, none of the enhancements are earth shattering or code breaking, but they will eventually change the way you author your project.</li>
</ul>
<br />
<br />
[JavaScript Jabber] NPM 5.0 with Rebecca Turner <a href="https://devchat.tv/js-jabber/jsj-266-npm-5-0-rebecca-turner">https://devchat.tv/js-jabber/jsj-266-npm-5-0-rebecca-turner</a><br />
<br />
<ul>
<li>Rebecca Turner, tech lead for NPM, a popular Javascript package manager with the worlds largest software registry.</li>
<li>Learn about the newly released NPM 5 including a few of the updated features.</li>
</ul>
<br />
<br />
[Complete Developer Podcast] Laws of Programming <a href="http://completedeveloperpodcast.com/episode-96/">http://completedeveloperpodcast.com/episode-96/</a><br />
<br />
<ul>
<li>In any field, there is a lot of hard-won knowledge that the more experienced attempt to impart to those with less experience. Depending on the field, these things may be expressed as old sayings, or laws. They typically aren’t really hard and fast rules, but rather are general tendencies that have been observed over time. Programming, like any other field, has those and many of them are well worth learning.</li>
<li>Amongst others:</li>
<li>Pareto Principle - For many phenomena, 80% of consequences come from 20% of the causes.</li>
<li>Brook’s Law - Adding manpower to a software project will make it later.</li>
<li>Conway’s Law - Any piece of software reflects the organizational structure that produced it.</li>
<li>Moore’s Law - The power of computers doubles every 24 months OR The number of transistors on an integrated circuit board will double in about 18 months.</li>
<li>Knuth’s Optimization Principle - Premature optimization is the root of all evil.</li>
<li>Hofstadter’s Law - It always takes longer than you expect, even when you take into account Hofstadter’s law</li>
<li>Law of Demeter - This is also known as the law of least coupling.</li>
<li>Hanlon’s Razor - Never ascribe to malice that which can adequately be explained by stupidity.</li>
<li>Dunning-Kruger Effect - Unskilled persons tend to mistakenly assess their own abilities as being much more competent than they actually are.</li>
<li>Postel’s Law - Be conservative in what you do, be liberal in what you accept from others.</li>
</ul>
<br />
<br />
[Cucumber Podcast] Fast Tests <a href="https://cucumber.io/blog/2017/06/29/fast-tests">https://cucumber.io/blog/2017/06/29/fast-tests</a><br />
<br />
<ul>
<li>Everyone knows fast tests are valuable, so why do so many companies abide slow ones?</li>
<li>What is 'fast'?</li>
<li>how to make them so?</li>
</ul>
<br />
<br />
[Cucumber Podcast] BDD in Banking <a href="https://cucumber.io/blog/2017/05/25/bdd-in-banking">https://cucumber.io/blog/2017/05/25/bdd-in-banking</a><br />
<br />
<ul>
<li>Simon was approached by the global investment bank BNP Paribas to review several product teams and to find out why the teams could not complete stories at the end of each sprint and why there was so many defects coming into the sprint.</li>
<li>In just 9 months the defect rate decreased from 34% to 4% and they avoided a very costly rewrite. Listen to this podcast to hear how they did it and the lessons learned along the way.</li>
<li><a href="https://www.adventureswithagile.com/2015/08/27/a-case-study-for-bdd-in-improving-throughput-and-collaboration/">https://www.adventureswithagile.com/2015/08/27/a-case-study-for-bdd-in-improving-throughput-and-collaboration/</a></li>
</ul>
<br />
<h2>
Agile</h2>
[scrum master toolbox] Vasco Duarte on what #NoEstimates means for Agile <a href="http://scrum-master-toolbox.org/2017/06/podcast/vasco-duarte-on-what-noestimates-means-for-agile/">http://scrum-master-toolbox.org/2017/06/podcast/vasco-duarte-on-what-noestimates-means-for-agile/</a><br />
<br />
<ul>
<li>What is #NoEstimates about for the author of the first #NoEstimates book?</li>
<li>What can we learn from Vasco’s journey that led him to find #NoEstimates</li>
</ul>
<br />
<br />
[Agile in 3 minutes] Do <a href="https://agilein3minut.es/36/">https://agilein3minut.es/36/</a><br />
<br />
<ul>
<li>Special guest Lanette Creamer asks: When the word “Agile” implies action, why is there still so much talk?</li>
</ul>
<br />
<br />
[Agile in 3 minutes] Pace <a href="https://agilein3minut.es/14/">https://agilein3minut.es/14/</a><br />
<br />
<ul>
<li>Amitai asks: How much do you demand of yourself and others?</li>
<li>SustainablePace</li>
<li>FortyHourWeek</li>
<li>OverTime</li>
</ul>
<br />
<br />
[Agile in 3 minutes] Influence <a href="https://agilein3minut.es/15/">https://agilein3minut.es/15/</a><br />
<br />
<ul>
<li>Amitai asks: How often do people do as you suggest?</li>
<li>Power (social and political)</li>
<li>Social influence</li>
<li>Power Versus Authority</li>
</ul>
<br />
<br />
[developing up] Task Estimation Techniques <a href="http://www.developingup.com/18">http://www.developingup.com/18</a><br />
<br />
<ul>
<li>Estimating is hard. In fact, estimating is sometimes considered one of the hardest aspects of development. </li>
<li>While for reasons beyond your control you can never guarantee the accuracy of our estimates, you can control how well you deliver and defend the estimates you provide.</li>
</ul>
<br />
<br />
[cross cutting concerns] Arthur Doler on Retrospectives <a href="http://crosscuttingconcerns.com/Podcast-042-Arthur-Doler-on-Retrospectives">http://crosscuttingconcerns.com/Podcast-042-Arthur-Doler-on-Retrospectives</a><br />
<br />
<ul>
<li>Retrospectives and how to make them better.</li>
</ul>
<br />
<h2>
/stuff</h2>
[Eat Sleep Code] How Your Brain Works Against You <a href="http://developer.telerik.com/content-types/podcast/how-your-brain-works-against-you/">http://developer.telerik.com/content-types/podcast/how-your-brain-works-against-you/</a><br />
<br />
<ul>
<li>How do our brains interpret cause and effect</li>
<li>The ways in which your brain wants to think of things as narratives</li>
<li>All the tricks it does to save itself from having to think</li>
<li>Arthur shares his perspective on cognitive bias and how it effects the software development process.</li>
</ul>
<br />
<br />
[Noah Kagan Presents] Arnold Schwarzenegger's Total Recall - Book Report <a href="http://okdork.com/arnold-schwarzenegger-total-recall-book-report/">http://okdork.com/arnold-schwarzenegger-total-recall-book-report/</a><br />
<br />
<ul>
<li>Have a crystal clear vision and intention.</li>
<li>Remove all distractions.</li>
<li>Write down your goals.</li>
<li>Surround yourself with the best.</li>
<li>Reps Reps Reps Discipline.</li>
<li>Don't limit yourself.</li>
<li>You have to sell.</li>
<li>Attitude.</li>
<li>Make opportunities happen.</li>
<li>Stay hungry.</li>
<li>Listen to feedback.</li>
<li>Be naïve and follow your curiosity.</li>
</ul>
<br />
<br />
[Decrypted] This Man’s Murder Might Get Solved by Amazon’s Alexa <a href="https://www.bloomberg.com/news/audio/2017-06-12/this-man-s-murder-might-get-solved-by-amazon-s-alexa">https://www.bloomberg.com/news/audio/2017-06-12/this-man-s-murder-might-get-solved-by-amazon-s-alexa</a><br />
<br />
<ul>
<li>As we surround ourselves with more and more of these internet-connected devices, Nico and Aki will discuss how our data should be used and why consumers should care. </li>
<li>Its as scary as you think it might be.</li>
</ul>
<br />
<br />Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-71082845014335854752017-05-31T21:00:00.000+01:002017-06-13T20:11:00.469+01:00Damo's May 2017 Podcast HighlightsI subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a>. I'm keeping a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">podcast blog here</a> of the episodes that I find interesting or useful in some way.<br />
<h2>
Architecture and Devops</h2>
[GOTO 2017] The Many Meanings of Event-Driven Architecture <a href="https://martinfowler.com/videos.html#many-meanings-event">https://martinfowler.com/videos.html#many-meanings-event</a><br />
<ul>
<li><a href="https://www.youtube.com/watch?v=STKCRSUsyP0">https://www.youtube.com/watch?v=STKCRSUsyP0</a></li>
<li>Event notification: components communicating via events</li>
<li>Event-based State Transfer: allowing components to access data without calling the source.</li>
<li>Event Sourcing: using an event log as the primary record for a system</li>
<li>CQRS: having a separate component for updating a store from any readers of the store</li>
</ul>
<br />
[The Cloudcast] The ServerlessCast - Event-Driven Design Thinking <a href="http://www.thecloudcast.net/2017/05/the-serverlesscast-6-events-vs-functions.html">http://www.thecloudcast.net/2017/05/the-serverlesscast-6-events-vs-functions.html</a><br />
<ul>
<li>How to run a company entirely on serverless, the on-going benefits of not maintaining servers, new application patterns with events, and the potentials of serverless in the future.</li>
<li>3-tier applications and architectures vs. event-driven architectures?</li>
<li>What is a "bulky function"? How to evolve from procedural thinking to event or asynchronous thinking?</li>
<li>How to optimize the many functions that make up an application</li>
</ul>
<br />
[InfoQ] Daniel Bryant on Microservices and Domain Driven Design <a href="https://www.infoq.com/podcasts/daniel-bryant">https://www.infoq.com/podcasts/daniel-bryant</a><br />
<ul>
<li>Moving from monoliths to micro-services, covering bounded contexts, when to break up micro-services, event storming, practices like observability and tracing, and more.</li>
<li>Migrating a monolith to micro-services is best done by breaking off a valuable but not critical part first.</li>
<li>Designing a greenfield application as micro-services requires a strong understanding of the domain.</li>
<li>When a request enters the system, it needs to be tagged with a correlation id that flows down to all fan-out service requests.</li>
<li>Observability and metrics are essential parts to include when moving micro-services to production.</li>
<li>A service mesh allows you to scale services and permit binary transports without losing observability.</li>
</ul>
<br />
[DockerCon 2016] Making friendly micro services <a href="https://www.youtube.com/watch?v=zRg7pIS3TjM">https://www.youtube.com/watch?v=zRg7pIS3TjM</a><br />
<ul>
<li>Small is the new big, and for good reason. The benefits of microservices and service-oriented architecture have been extolled for a number of years, yet many forge ahead without thinking of the impact the users of the services. </li>
<li>Consuming micro services can be enjoyable as long as the developer experience has been crafted as finely as the service itself. But just like with any other product, there isn’t a single kind of consumer. </li>
<li>Together we will walk through some typical kinds of consumers, what their needs are, and how we can create a great developer experience using brains and tools like Docker.</li>
<li>Helpful docs are always up to date</li>
<li>Revision history - what changed and why</li>
<li>Trouble shooting built in, monitoring</li>
<li>Easy to deploy and scale</li>
<li>Easy to consume, how to consume and when</li>
<li>Must co-exist in a larger eco system, don’t be the biggest tree in the forest. </li>
</ul>
<br />
<h2>
Programming and Testing</h2>
[funfunfunction - youtube] Functional programming in JavaScript <a href="https://www.youtube.com/playlist?list=PL0zVEGEvSaeEd9hlmCXrk5yUyqUag-n84">https://www.youtube.com/playlist?list=PL0zVEGEvSaeEd9hlmCXrk5yUyqUag-n84</a><br />
<ul>
<li>Some really good fun overviews of functional programming concepts in javascript</li>
</ul>
<br />
[InfoQ] Lisa Crispin and Justin Searls on Testing and Innovation in Front End Technology <a href="https://www.infoq.com/podcasts/crispin-searls">https://www.infoq.com/podcasts/crispin-searls</a><br />
<ul>
<li>Pair testers to write production code with the programmers.</li>
<li>Developers have to be focused on right now, testers have freedom to look at more of the big picture</li>
<li>People know testing is good and there a lot of tools for it, but some tools are ill-conceived.</li>
<li>We need a better language for talking about good QA and full stack testing.</li>
</ul>
<br />
[Simple programmer] The Future of Software Development (With Erik Dietrich) <a href="http://simpleprogrammer.libsyn.com/449-the-future-of-software-development-with-erik-dietrich-simple-programmer-podcast">http://simpleprogrammer.libsyn.com/449-the-future-of-software-development-with-erik-dietrich-simple-programmer-podcast</a><br />
<ul>
<li>What could the future of software development look like and how should you prepare for it</li>
</ul>
<br />
<h2>
Agile</h2>
[Youtube] Agile Product Ownership in a Nutshell <a href="https://www.youtube.com/watch?v=502ILHjX9EE">https://www.youtube.com/watch?v=502ILHjX9EE</a><br />
<ul>
<li>15 minutes to understand the role of a PO with regards to an agile team</li>
<li><a href="http://blog.crisp.se/2012/10/25/henrikkniberg/agile-product-ownership-in-a-nutshell">http://blog.crisp.se/2012/10/25/henrikkniberg/agile-product-ownership-in-a-nutshell</a></li>
<li><a href="https://dl.dropboxusercontent.com/u/1018963/Articles/PO-in-a-nutshell.png">https://dl.dropboxusercontent.com/u/1018963/Articles/PO-in-a-nutshell.png</a></li>
</ul>
<br />
[Deliver it] Back to Basics <a href="http://deliveritcast.com/ep50-back-to-basics">http://deliveritcast.com/ep50-back-to-basics</a><br />
<ul>
<li>Episode 50 is an overview of the last 50 episodes revisiting many of them and giving a taste of what past episodes you might like to catch up on</li>
<li>A common theme for Product Owners is how do I get better? The best answer is to get better at the basics. Inspired by another show that looks at its core purpose every so often, this episode looks at what the basics are since our initial podcast, what might have changed, and also serves as a reflection point for what we’ve covered in our first 50 shows. If you’re a PO who’s new to the show, this is a great place to start.</li>
</ul>
<br />
[Deliver it] DevOps for Product Owners <a href="http://deliveritcast.com/ep49-devops-for-product-owners">http://deliveritcast.com/ep49-devops-for-product-owners</a><br />
<ul>
<li>In order for Product Owners to help teams deliver value to our customers, the product has to actually be delivered. The teams must perform some level of effort to get the code deployed and out the door. For that to be easy for everyone, DevOps is a set of skills and practices that allow that process to be automated, error-free, and turn delivery into a routine event. </li>
<li>In this episode, Lee Eason joins to discuss what a PO needs to know about DevOps, why you should insist on it, and what you can do to help the teams achieve it. </li>
</ul>
<br />
[Agile uprising] Agile Architecture with Martin Fowler and Rebecca Wirfs-Brock <a href="http://agileuprising.libsyn.com/agile-architecture-with-martin-fowler-and-rebecca-wirfs-brock">http://agileuprising.libsyn.com/agile-architecture-with-martin-fowler-and-rebecca-wirfs-brock</a><br />
<ul>
<li><a href="https://www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf">https://www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf</a></li>
<li>Martin and Rebecca provide a very clear definition of what architecture is to start the conversation which then leads into an honest conversation about how architecture is defined in the product’s unique context. They also provide great insight into the dynamics of what can be and cannot be considered architecture, and how the definition is fluid based on the engineering context.</li>
<li>We discuss the impact of unit tests on architecture, and to what degree tests and emergence define architecture, vs. up front design.</li>
<li>We also discuss the importance of domain models, and who should be involved in the definition of the domain model – specifically the requirement that the business folks be in the conversation.</li>
<li>As the interview draws to a close, we discuss the importance of documentation in agile architecture. The discussion covers the “the code is the documentation” stance to more comprehensive documentation stances.</li>
</ul>
<br />
<h2>
/Stuff</h2>
[Tim Ferriss] Accelerated Learning and Mentors – My Personal Story <a href="http://tim.blog/2017/05/17/meta-learning/">http://tim.blog/2017/05/17/meta-learning/</a><br />
<ul>
<li>An episode on education and accelerated learning amongst other things</li>
<li>Want to learn something fast? Listen to this reverse interview.</li>
</ul>
<br />
[The school of greatness] Nelson Dellis is training your brain to do the impossible <a href="https://lewishowes.com/podcast/e-nelson-dellis/">https://lewishowes.com/podcast/e-nelson-dellis/</a><br />
<ul>
<li>Not only does Nelson compete in memory championships around the world, he also has created great courses, videos, and soon a book to teach others his techniques.</li>
<li>it’s important to train our brains as much as we train our bodies.</li>
</ul>
<br />
[TED] The future we are building — and boring <a href="https://www.ted.com/talks/elon_musk_the_future_we_re_building_and_boring">https://www.ted.com/talks/elon_musk_the_future_we_re_building_and_boring</a><br />
<ul>
<li>Elon Musk discusses his new project digging tunnels under LA, the latest from Tesla and SpaceX and his motivation for building a future on Mars in conversation with TED's Head Curator, Chris Anderson.</li>
</ul>
<br />
[Decrypted] Fake News in the French Elections <a href="http://pca.st/iErg">http://pca.st/iErg</a><br />
<ul>
<li>What is fake news and why does it matter?</li>
</ul>
<br />
[Code and cast] publishing content on Pluralsight and some javascript <a href="http://codeand.us/podcast/episode-16-pluralsight-and-javascript/">http://codeand.us/podcast/episode-16-pluralsight-and-javascript/</a><br />
<ul>
<li>On Pluralsight and presenting</li>
<li>Javascript and Architecture questions and answers</li>
</ul>
<br />
<h2>
Other interesting blog posts</h2>
“I have nothing to hide. Why should I care about my privacy?” <a href="https://medium.com/@FabioAEsteves/i-have-nothing-to-hide-why-should-i-care-about-my-privacy-f488281b8f1d">https://medium.com/@FabioAEsteves/i-have-nothing-to-hide-why-should-i-care-about-my-privacy-f488281b8f1d</a><br />
<br />Privacy Protects Bothersome People <a href="https://martinfowler.com/articles/bothersome-privacy.html">https://martinfowler.com/articles/bothersome-privacy.html</a><div>
<br />
Facebook users unwittingly revealing intimate secrets <a href="http://www.theguardian.com/technology/2013/mar/11/facebook-users-reveal-intimate-secrets">http://www.theguardian.com/technology/2013/mar/11/facebook-users-reveal-intimate-secrets</a><br />
Facebook users are unwittingly revealing intimate secrets – including their sexual orientation, drug use and political beliefs – using only public "like" updates, according to a study of online privacy<br />
<br />Get your loved ones off Facebook <a href="http://www.salimvirani.com//facebook/">http://www.salimvirani.com//facebook/</a></div>
<div>
<br />
Why I Can’t/Won’t Point to Facebook Blog Posts <a href="http://scripting.com/2017/05/31.html#a110526">http://scripting.com/2017/05/31.html#a110526</a><br />
A reply to not posting on facebook <a href="https://daringfireball.net/2017/06/fuck_facebook">https://daringfireball.net/2017/06/fuck_facebook</a><br />
<div>
<br /></div>
</div>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-66785824908091008342017-04-30T09:40:00.000+01:002017-05-02T20:29:47.980+01:00Damo's April 2017 Podcast HighlightsI subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a>. I'm keeping a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">podcast blog here</a> of the episodes that I find interesting or useful in some way.<br />
<br />
<h2>
Devops</h2>
[Continuous Discussions] Value Stream Mapping and DevOps <a href="https://electric-cloud.com/blog/2017/02/continuous-discussions-c9d9-podcast-episode-63-value-stream-mapping-devops/">https://electric-cloud.com/blog/2017/02/continuous-discussions-c9d9-podcast-episode-63-value-stream-mapping-devops/</a><br />
<br />
<ul>
<li>Value Stream Mapping helps organizations streamline their DevOps adoption</li>
<li>Accelerate releases, optimize pipelines and toolchains, and even transform culture</li>
<li>In the IT value stream, success is all about the left-to-right flow of value to the customer — from development to IT Operations</li>
</ul>
<br />
<h2>
Agile</h2>
[Agile for humans] Agile Musings with GeePaw Hill <a href="http://ryanripley.com/afh-061-agile-musings-with-geepaw-hill-podcast/">http://ryanripley.com/afh-061-agile-musings-with-geepaw-hill-podcast/</a><br />
<br />
<ul>
<li>A nice flowing wide ranging discussion about all things agile</li>
<li>Optimisation of programs vs optimising programming</li>
<li>Internal quality vs external quality</li>
<li>Generating insights about software</li>
<li>The dangers of dogma in agile software development</li>
<li>How to debunk the quality vs quantity myth</li>
<li>Why maximizing your insights per hour is important</li>
<li>What is hurting the agile industry today</li>
</ul>
<br />
<br />
[Agile for humans] Lessons from #NoEstimates Critics <a href="http://ryanripley.com/007-agile-for-humans/">http://ryanripley.com/007-agile-for-humans/</a><br />
<br />
<ul>
<li>What is the critic’s view against #NoEstimates?</li>
<li>Discuss the many areas of agreement that we have with some of the #NoEstimates critics</li>
<li>The remaining time was spent on systems thinking, pre-conditions necessary to question estimation processes and value, and the role of excellent engineering practices in reducing the role of estimates in a software delivery system</li>
</ul>
<br />
<br />
[Agile for humans] Product Mastery with Geoff Watts <a href="http://ryanripley.com/afh-059-product-mastery-with-geoff-watts-podcast/">http://ryanripley.com/afh-059-product-mastery-with-geoff-watts-podcast/</a><br />
<br />
<ul>
<li>How difficult the role of Product Owner is to do well</li>
<li>The tools, mindset, and techniques necessary to be a successful Product Owner</li>
<li>Why the Product Owner needs the support of the whole team in order to get their job done</li>
</ul>
<br />
<h2>
Architecture</h2>
[Software Engineering Radio] Success Skills for Architects with Neil Ford <a href="http://www.se-radio.net/2017/04/se-radio-episode-287-success-skills-for-architects-with-neil-ford/">http://www.se-radio.net/2017/04/se-radio-episode-287-success-skills-for-architects-with-neil-ford/</a><br />
<br />
<ul>
<li>What skills are required to be a successful software architect</li>
<li>how to create and maintain them</li>
<li>how to transition from other roles, such as software engineering</li>
<li>Those looking to make the transition should focus especially on learning “soft skills” before making the move, and exploring the idea of taking an architectural role temporarily to see if it suites you. He also discusses problem solving skills, why understanding history is so important, and how to recognize and avoid increasing complexity</li>
</ul>
<br />
<br />
[The InfoQ Podcast] Chris Richardson on Domain-Driven Microservices Design <a href="https://www.infoq.com/podcasts/chris-richardson">https://www.infoq.com/podcasts/chris-richardson</a><br />
<br />
<ul>
<li>Discussion on how to use DDD and CQRS concepts as a guide for implementing a robust microservices architecture</li>
<li>"Microservice architecture" is a better term than "microservices". The latter suggests that a single microservice is somehow interesting</li>
<li>The concepts discussed in Domain-Driven Design are an excellent guide for how to implement a microservices architecture</li>
<li>Bounded Contexts correspond well to individual microservices</li>
<li>Event sourcing and CQRS provide patterns for how to implement loosely coupled servicesWhen converting a monolith to microservices, avoid a big bang rewrite, in favor of an iterative approach</li>
</ul>
<br />
<br />
[Docker cast] Microservices + Events + Docker = A Perfect Trio - Docker Captain Chris Richardson <a href="https://www.youtube.com/watch?v=pD0rEtEEwck">https://www.youtube.com/watch?v=pD0rEtEEwck</a><br />
<br />
<ul>
<li><a href="https://blog.eventuate.io/2016/08/01/microservices-events-docker-perfect-trio/">https://blog.eventuate.io/2016/08/01/microservices-events-docker-perfect-trio/</a></li>
<li>Microservices are an essential enabler of agility but developing and deploying them is a challenge</li>
<li>In order for microservices to be loosely coupled, each service must have its own datastore, this makes it difficult to maintain data consistency across services</li>
<li>Deploying microservices is also a complex problem since an application typically consists of 10s or 100s of services, written in a variety of languages and frameworks</li>
<li>In this presentation, you will learn how to solve these problems by using an event-driven architecture to maintain data consistency and by using Docker to simplify deployment.</li>
</ul>
<br />
<h2>
Programming and testing</h2>
[JavaScript Jabber] Clean Code JavaScript with Ryan McDermott <a href="https://devchat.tv/js-jabber/clean-code-javascript-with-ryan-mcdermott">https://devchat.tv/js-jabber/clean-code-javascript-with-ryan-mcdermott</a><br />
<br />
<ul>
<li>Ryan converted the principles in Clean code to apply to javascript</li>
<li>Software engineering principles, from Robert C. Martin's book Clean Code, adapted for JavaScript. This is not a style guide. It's a guide to producing readable, reusable, and refactorable software in JavaScript.</li>
<li><a href="https://github.com/ryanmcdermott/clean-code-javascript">https://github.com/ryanmcdermott/clean-code-javascript</a></li>
</ul>
<br />
<br />
[Cucumber Podcast] Property-Based Testing <a href="https://cucumber.io/blog/2017/04/27/property-based-testing">https://cucumber.io/blog/2017/04/27/property-based-testing</a><br />
<br />
<ul>
<li>The programmer provides a specification of the program, in the form of properties which functions, methods or objects should satisfy, the framework then tests that the properties hold in a large number of randomly generated cases</li>
<li>The core idea is that instead of enumerating expected input and output for unit tests, you write properties about your function that should hold true for all inputs. This lets you write concise, powerful tests.</li>
</ul>
<br />
<h2>
Others</h2>
[The Changelog] How We Got Here with Cory Doctorow <a href="https://changelog.com/podcast/221">https://changelog.com/podcast/221</a><br />
<br />
<ul>
<li>How science fiction shapes the future, laws and tech</li>
<li>EFF - Electronic Frontier Foundation - <a href="https://www.eff.org/">https://www.eff.org/</a></li>
<li>The abuse of DRM (Digital rights management) and how it makes the internet less secure</li>
<li>Open source licences and the dark side of open source</li>
<li><a href="http://conferences.oreilly.com/oscon/open-source-eu/public/schedule/detail/54548">http://conferences.oreilly.com/oscon/open-source-eu/public/schedule/detail/54548</a></li>
</ul>
<br />
<br />
[Complete Developer Podcast] Salary Negotiations with Josh Doody <a href="http://completedeveloperpodcast.com/episode-85/">http://completedeveloperpodcast.com/episode-85/</a><br />
<br />
<ul>
<li>In the episode they talk about some of the common questions developers have about negotiating as well as covering some mistakes that we all make when negotiating for a higher salary.</li>
</ul>
<br />
<br />
[This Agile Life] Cat Killed the WiFi <a href="http://www.thisagilelife.com/126">http://www.thisagilelife.com/126</a><br />
<br />
<ul>
<li>Are interviews and the interview progress broken?</li>
</ul>
<br />
<br />
[TED Talks] To raise brave girls, encourage adventure <a href="https://www.ted.com/talks/caroline_paul_to_raise_brave_girls_encourage_adventure">https://www.ted.com/talks/caroline_paul_to_raise_brave_girls_encourage_adventure</a><br />
<br />
<ul>
<li>Gutsy girls skateboard, climb trees, clamber around, fall down, scrape their knees, get right back up — and grow up to be brave women.</li>
<li>Learn how to spark a little productive risk-taking and raise confident girls with stories and advice from firefighter, paraglider and all-around adventurer Caroline Paul.</li>
</ul>
<br />
<br />Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-28738203787103013332017-03-31T22:30:00.000+01:002017-04-07T23:18:12.557+01:00Damo's March 2017 Podcast HighlightsI subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a>. I'm keeping a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">podcast blog here</a> of the episodes that I find interesting or useful in some way.<br />
<br />
<h2>
Devops</h2>
[AWS Podcast] Security in Serverless Architectures <a href="https://aws.amazon.com/podcasts/aws-podcast/#178">https://aws.amazon.com/podcasts/aws-podcast/#178</a><br />
<ul>
<li>In this special episode, Bryan Liston, Developer Advocate for AWS Serverless, speaks with Mark Nunnikhoven, Vice President, Cloud Research, TrendMicro and Adam Johnson, Cofounder at IOpipes. The discuss considerations for security in serverless architectures, with plenty of “war stories”!</li>
</ul>
<br />
[Pivotal Podcasts] Beyond "Survival Is Not Mandatory" <a href="https://content.pivotal.io/podcasts/beyond-survival-is-not-mandatory-the-cloud-native-cookbook-ep-54">https://content.pivotal.io/podcasts/beyond-survival-is-not-mandatory-the-cloud-native-cookbook-ep-54</a><br />
<ul>
<li>Tactical advice for organizations who are finding it difficult to do all the right things that DevOps and cloud-native think are prescriptive.</li>
</ul>
<br />
[The Cloudcast] Monoliths and Microservices <a href="http://www.thecloudcast.net/2016/12/the-cloudcast-281-monoliths-and.html">http://www.thecloudcast.net/2016/12/the-cloudcast-281-monoliths-and.html</a><br />
<ul>
<li>Chat about evolving technology and organizational culture</li>
<li>How to think about monolithic applications in today’s business context</li>
<li>The challenges of microservices</li>
<li>Lessons learned from good CI practices</li>
<li>Emerging patterns to evolve existing applications.</li>
</ul>
<br />
[DevOps Chat] The 7 Habits of Successful DevOps <a href="https://devops.com/11626/">https://devops.com/11626/</a><br />
<ul>
<li>Lessons learned building visual studio online</li>
<li>Team autonomy and enterprise alignment</li>
<li>Rigorous management of technical debt. </li>
<li>Focus on the flow of customer value</li>
<li>Hypothesis driven development or a backlog that gets groomed with learning</li>
<li>Gather evidence in production</li>
<li>A production first mindset</li>
<li>Manage infrastructure as a flexible resource </li>
</ul>
<br />
<h2>
Agile</h2>
[oredev] 7 minutes, 26 seconds, and the Fundamental Theorem of Agile Software Development <a href="https://vimeo.com/79106557">https://vimeo.com/79106557</a><br />
<ul>
<li>Fred Brooks' essay "No Silver Bullet" taught us that no single technique can bring us an order-of-magnitude improvement within a single decade. In spite of this, from his ideas of essential and accidental complication, we can conclude something stunning about the nature of agile software development.</li>
<li>A quick interesting talk about Agile, TDD, Refactoring and why your estimates suck</li>
<li>Accidental complexity vs essential complexity</li>
<li>And how if you want to be consistent in your estimates you need to refactor out all accidental complexity</li>
<li>Effort = f(g(e ), h(a)) == g(e) + h(a)</li>
<li>Effort is a function of the essential complexity plus accidental complexity. Or in other words effort required is roughly equal to essesial plus accidental complexity</li>
<li>http://blog.thecodewhisperer.com/permalink/the-eternal-struggle-between-business-and-programmers/</li>
</ul>
<br />
[Agile for Humans] A Panel Discussion on #NoEstimates <a href="http://ryanripley.com/005-agile-for-humans/">http://ryanripley.com/005-agile-for-humans/</a><br />
<ul>
<li>#NoEstimates means many different things to many different people. The group defined #NoEstimates as a conversation around when estimates are appropriate and to which level of precision teams should target. </li>
<li>We noted that the hashtag can lead to more “heat than light”, but also acknowledged that a rich conversation has formed around the questions that #NoEstimates poses.</li>
<li>To some this did not go far enough and we continued to highlight other benefits of estimating such as:</li>
<ul>
<li>Conversations that occur when estimating</li>
<li>Shared understand of programming activities</li>
<li>Enabling decision making at the executive level</li>
<li>Validating project/program/product assumptions</li>
<li>Indication of possible issues when reality and the estimate do not match</li>
</ul>
</ul>
<br />
[Agile for Humans] Mob Programming with Woody Zuill <a href="http://ryanripley.com/afh-027-mob-programming-with-woody-zuill-podcast/">http://ryanripley.com/afh-027-mob-programming-with-woody-zuill-podcast/</a><br />
<ul>
<li>Mob programming involves the whole team working on the same thing, at the same time, in the same space, and at the same computer. You can think of it as pair programming turned up to eleven.</li>
<li>What are the benefits that mob programming can bring to a team, how it can simplify the hiring and on-boarding process, and what to do when the mob needs some alone time.</li>
</ul>
<br />
[Hanselminutes] Lean Customer Development with Cindy Alvarez <a href="https://hanselminutes.com/572/lean-customer-development-with-cindy-alvarez">https://hanselminutes.com/572/lean-customer-development-with-cindy-alvarez</a><br />
<ul>
<li>Cindy Alvarez is the author of Lean Customer Development. How do you develop products that people will actually use and buy? She shows Scott how to validate product and company ideas through customer development research—before we waste months and millions on a product or service that no one needs or wants</li>
</ul>
<br />
<h2>
Programming and Testing</h2>
[StrangeLoop] Rich Hickey Simple Made Easy <a href="https://www.infoq.com/presentations/Simple-Made-Easy">https://www.infoq.com/presentations/Simple-Made-Easy</a> <br />
<ul>
<li>Rich
Hickey emphasizes simplicity’s virtues over easiness’, showing that
while many choose easiness they may end up with complexity, and the
better way is to choose easiness along the simplicity path.</li>
<li>We should aim for simplicity because simplicity is a prerequisite for reliability.</li>
<li>Simple
is often erroneously mistaken for easy. "Easy" means "to be at hand",
"to be approachable". "Simple" is the opposite of "complex" which means
"being intertwined", "being tied together". Simple != easy.</li>
</ul>
<br />
[Toolsday] Git <a href="http://www.toolsday.io/episodes/git.html">http://www.toolsday.io/episodes/git.html</a><br />
<ul>
<li>Git is something we use every day</li>
<li>Discussions about some tools, tips, and tricks to make using git better.</li>
</ul>
<br />
[Software Engineering Radio] Developer Testing <a href="http://www.se-radio.net/2017/03/se-radio-episode-283-alexander-tarlinder-on-developer-testing/">http://www.se-radio.net/2017/03/se-radio-episode-283-alexander-tarlinder-on-developer-testing/</a><br />
<ul>
<li>Developer testing is more than unit testing. In most cases, developers need to supplement their unit tests with higher-level tests, such as integration tests and end-to-end tests.</li>
<li>Topics include Developer Testing, Agile Testing, Programming by Contract, Specification Based Testing,</li>
</ul>
<br />
[Software Engineering Daily] Cloudbleed and SHA-1 Collision <a href="https://softwareengineeringdaily.com/2017/03/04/cloudbleed-and-sha-1-collision-with-max-burkhardt/">https://softwareengineeringdaily.com/2017/03/04/cloudbleed-and-sha-1-collision-with-max-burkhardt/</a><br />
<ul>
<li>Discussion about the Cloudbleed bug, which leaked tons of plaintext requests from across the Internet into plain view. </li>
<li>And the first collision attack against SHA-1 demonstrated by researchers at Google, foretelling the demise of SHA-1 as a safe hashing function.</li>
<li>What does this mean for the average engineer? What are the implications for regular internet users? Haseeb Qureshi interviews Max Burkhardt, a security researcher at Airbnb, to get to the bottom of what exactly happened, what it means, and how it affects the security of web applications.</li>
</ul>
<br />
[JS Party] Security on the web, Node async/await, and AR.js <a href="https://changelog.com/jsparty/1">https://changelog.com/jsparty/1</a><br />
<ul>
<li>Security on the web</li>
<li>SHA-1 is broken</li>
<li>Node.js v7.6 gets async/await</li>
</ul>
<br />
[JavaScript Jabber] The 20th Anniversary of Visual Studio <a href="https://devchat.tv/js-jabber/visual-studio-2017-rtm-with-bowden-kelly">https://devchat.tv/js-jabber/visual-studio-2017-rtm-with-bowden-kelly</a><br />
<ul>
<li>Bowden Kelly is currently working on the Typescript language and Javascript dev tools across Visual Studio VS code and other editing environments in preparation for Visual Studio 2017 release coming soon.</li>
<li>When to use VS for Javascript?</li>
<li>New features for Javascript in the new Visual Studio</li>
<li>Features Bowden likes</li>
<li>What is the relationship with the angular team</li>
<li>What can you expect in future</li>
<li>The reality of types in javascript</li>
</ul>
<br />
[Angular Air] The Importance of Learning JavaScript <a href="http://audio.angularair.com/e/41-ngair-the-importance-of-learning-javascript-with-kyle-simpson/">http://audio.angularair.com/e/41-ngair-the-importance-of-learning-javascript-with-kyle-simpson/</a><br />
<br />
[.NET Rocks!] Beyond Legacy Code with David Bernstein <a href="https://www.dotnetrocks.com/?show=1426">https://www.dotnetrocks.com/?show=1426</a><br />
<ul>
<li>How do you manage legacy code? </li>
<li>The conversation starts out talking about what legacy code is - and David brings up the idea that code is legacy if you don't have confidence in it. Now how do you get confidence? This is where the rewrite behavior comes from: You're naturally more confident in your own code. But is it a good idea? David talks about nine practices that are most effective at getting your application under control and out of legacy!</li>
<li>Say What, Why, and for Whom Before How excerpt</li>
<li>Build in Small Batches</li>
<li>Integrate Continuously</li>
<li>Collaborate</li>
<li>Create CLEAN Code</li>
<li>Write the Test First</li>
<li>Specify Behaviors with Tests</li>
<li>Implement the Design Last</li>
<li>Refactor Legacy Code excerpt</li>
</ul>
<br />
[Cucumber Podcast] Approval Testing <a href="https://cucumber.io/blog/2017/01/26/approval-testing">https://cucumber.io/blog/2017/01/26/approval-testing</a><br />
<ul>
<li>Approval testing is a test technique which compares the current output of your code with an "approved" version. The approved version is created by initially examining the test output and approving the result. </li>
<li>You can revisit the approved version and easily update it when the requirements change.</li>
</ul>
<br />
[Software Engineering Daily] WebAssembly with Brendan Eich <a href="https://softwareengineeringdaily.com/2017/03/31/webassembly-with-brendan-eich/">https://softwareengineeringdaily.com/2017/03/31/webassembly-with-brendan-eich/</a><br />
<ul>
<li>Brendan Eich created the first version of JavaScript in 10 days</li>
<li>Today Brendan Eich is still pushing the web forward across the technology stack with his involvement in the WebAssembly specification and the Brave browser.</li>
<li>For all of its progress, JavaScript struggles to run resource-intensive programs like complex video games. With JavaScript falling short on its charge to be the “assembly language for the web” the four major browser vendors started collaborating on the WebAssembly project to allow programming languages a faster, lower level compile target when deploying to the web.</li>
</ul>
<br />
<br />
<h2>
Others</h2>
[Simple Programmer Podcast] 7 Habits That Ruin Your Technical Team <a href="http://simpleprogrammer.libsyn.com/416-7-habits-that-ruin-your-technical-team-with-marcus-blankenship-simple-programmer-podcast">http://simpleprogrammer.libsyn.com/416-7-habits-that-ruin-your-technical-team-with-marcus-blankenship-simple-programmer-podcast</a><br />
<ul>
<li>Technical
leads and managers work hard to hire the best people, choose the best
tools, implement the best process, and deliver great software.
Unfortunately, our actions too often sabotage our best efforts,
producing frustrated teams, poor software quality and driving away our
best developers.</li>
<li>What are the habits that ruin a technical team and how you can avoid them, based on his new book, with the same name.</li>
</ul>
<br />
[On Books] 10 Life-Changing Spring Cleaning Tips from the life changing magic of tidying up <a href="http://onbooks.libsyn.com/10-life-changing-spring-cleaning-tips-from-the-life-changing-magic-of-tidying-up">http://onbooks.libsyn.com/10-life-changing-spring-cleaning-tips-from-the-life-changing-magic-of-tidying-up</a> <a href="http://castig.org/the-life-changing-magic-of-tidying-up-10-spring-cleaning-tips/">http://castig.org/the-life-changing-magic-of-tidying-up-10-spring-cleaning-tips/</a><br />
<ul>
<li>10. Discard all at once</li>
<li>9. Collect everything in one spot</li>
<li>8. Discard first, before you put things back</li>
<li>7. Visualize a clutter-free space</li>
<li>6. Choose what you want to keep, not what you want to get rid of</li>
<li>5. The order of discarding matters</li>
<li>4. Avoid attachment anxiety</li>
<li>3. Learn how to fold clothes (aka. I was doing it wrong)</li>
<li>2. Ask yourself, “Does this spark joy?”</li>
<li>1. Make space for your mission in life</li>
</ul>
<br />
[Focus 53] Stop Making Excuses, Fix Your Excuses & Grow Your Business - Cameron Herold <a href="http://focus53.libsyn.com/f53-082-stop-making-excuses-fix-your-excuses-grow-your-business-cameron-herold">http://focus53.libsyn.com/f53-082-stop-making-excuses-fix-your-excuses-grow-your-business-cameron-herold</a><br />
<ul>
<li>Cameron Herold, the mastermind behind the exponential growth of hundreds of companies. Cameron built a dynamic consultancy and his current clients include a Big Four wireless carrier and a monarchy. </li>
<li>His clients say what they like the most about him is that he isn't a "theory" guy. He speaks from experience. He's actually done the things he talks about doing.</li>
</ul>
<br />
[Freakonomics Radio] Why Is My Life So Hard? <a href="http://freakonomics.com/podcast/why-is-my-life-so-hard/">http://freakonomics.com/podcast/why-is-my-life-so-hard/</a><br />
<ul>
<li>Most of us feel we face more headwinds and obstacles than everyone else — which breeds resentment. We also undervalue the tailwinds that help us — which leaves us ungrateful and unhappy. How can we avoid this trap?</li>
<li>This is just human nature, if you could objectively look at your life you would see you don't have it so bad.</li>
<li>May the road rise up to meet you. May the wind always be at your back.</li>
</ul>
<br />
[Focus 53] Put Me In The Rafters | Strive To Be A Champion <a href="http://focus53.libsyn.com/f53-083-put-me-in-the-rafters-strive-to-be-a-champion">http://focus53.libsyn.com/f53-083-put-me-in-the-rafters-strive-to-be-a-champion</a><br />
<ul>
<li>There's a lot of great people in business and in the sports world that are not in the rafters but still live epic lives.</li>
<li>Are you working hard to get into the rafters? Or are you just going with the flow and drifting? Are you fulfilling your destiny and using your God-given skills to better yourself and the world, to better your family, to better your life, and to better your circumstances? Are you getting up everyday letting your feet up the ground, getting fired up to be the best you can be? </li>
</ul>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-67267380581469128592017-02-28T00:00:00.000+00:002017-03-05T19:25:41.026+00:00Damo's Febuary 2017 Podcast HighlightsI subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a>. I'm keeping a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">podcast blog here</a> of the episodes that I find interesting or useful in some way.<br />
<h2>
Devops</h2>
[.NET Rocks!] Ops and Operability with Dan North <a href="https://www.dotnetrocks.com/?show=1412">https://www.dotnetrocks.com/?show=1412</a><br />
<ul>
<li>Dig into the challenges of operating modern applications and how a constant demand for new features can be destabilizing to software. </li>
<li>The conversation explores getting to the root of concerns in systems so that everyone understands what is hard and what is easy. </li>
<li>When people are misunderstood, fear and resistance almost always follow. </li>
</ul>
<br />
[RunAs Radio] The MongoDB Exploit with Niall Merrigan <a href="http://runasradio.com/Shows/Show/519">http://runasradio.com/Shows/Show/519</a><br />
<ul>
<li>Are your noSQL stores safe? While at NDC London, Richard chatted with Niall Merrigan about the latest wave of exploits targeting MongoDB, ElasticSearch and others. </li>
<li>As Niall explains, the challenge is that the default security models for many of these products leaves them vulnerable to outside attack. As these attacks have progressed, they have presented themselves as ransomware - data is removed and a bitcoin account offered up to restore the data. However, to date, even when the ransoms are paid, no data is restored. </li>
<li>Apparently there is no honour among thieves.</li>
</ul>
<h2>
Programming and testing</h2>
[Coding Blocks] Clean Code – How to Write Amazing Unit Tests <a href="http://www.codingblocks.net/podcast/how-to-write-amazing-unit-tests/">http://www.codingblocks.net/podcast/how-to-write-amazing-unit-tests/</a><br />
<ul>
<li>When and why should you write unit tests, and just how important are they? </li>
</ul>
<br />
[DevOps Interviews - Channel 9] Interview with Gopinath <a href="https://channel9.msdn.com/Blogs/DevOps-Interviews/Interview-with-Gopinath-Chigakkagari">https://channel9.msdn.com/Blogs/DevOps-Interviews/Interview-with-Gopinath-Chigakkagari</a><br />
<ul>
<li>In this interview, Senior DevOps Program Manager Donovan Brown interviews Principal PM Manager Gopinath Chigakkagari about Testing.</li>
</ul>
<br />
[Herding Code] Richard Campbell on Humanitarian Toolbox <a href="http://herdingcode.com/herding-code-220-richard-campbell-on-humanitarian-toolbox/">http://herdingcode.com/herding-code-220-richard-campbell-on-humanitarian-toolbox/</a><br />
<ul>
<li>Humanitarian Toolbox is a collection of open source projects, and they’re initially focused on the allReady project. </li>
<li>allReady started to help the Red Cross organize and coordinate smoke detector installation efforts to prevent home fire disasters. </li>
<li>Software can help through things like mapping, mobile apps, and Twilio based notifications. </li>
<li>Just the simple addition of reminder notifications before going out to install smoke detectors has raised their install rate from about 30% to about 80%.</li>
</ul>
<br />
[LDNUG - London .net user group] February meetup (12 factor apps) <a href="https://www.meetup.com/London-NET-User-Group/events/237160739">https://www.meetup.com/London-NET-User-Group/events/237160739</a><br />
<ul>
<li>The buzz is all around Cloud Native: continuous deployment and easy scaling of your server side code. You have heard about Docker and Microservices, but what are 12-factor apps?</li>
<li>The Twelve-Factor App methodology (<a href="https://12factor.net/">https://12factor.net/</a>), was created by engineers with experience of delivering apps on Heroku, and is a "recipe for success" when authoring code for cloud native scenarios. </li>
<li>In this presentation we will look at what a Twelve-Factor App is, and demonstrate how to meet the requirements when creating .NET applications. We will show examples using ASP.NET Core, Brighter and Darker of authoring code to meet these requirements, and show its deployment to containers.</li>
<li>Presentation is now online - <a href="https://skillsmatter.com/skillscasts/9275-londondot-net-february-meetup">https://skillsmatter.com/skillscasts/9275-londondot-net-february-meetup</a> </li>
</ul>
<br />
[The Changelog] 99 Practical Bottles of OOP with Sandi Metz <a href="https://changelog.com/podcast/225">https://changelog.com/podcast/225</a><br />
<ul>
<li>Sandi Metz joined the show to talk about her beginnings on a mainframe, her 30+ years of programming experience, the ins and outs of OOP, her book Practical Object-Oriented Design in Ruby (aka POODR), as well as her latest book 99 Bottles of OOP which she co-authored with Katrina Owen</li>
</ul>
<h2>
Architecture</h2>
[.NET Rocks!] Conway`s Law with Mark Seemann <a href="http://www.dotnetrocks.com/?show=1418">http://www.dotnetrocks.com/?show=1418</a><br />
<ul>
<li>What is Conway's Law and how does it apply to your organization? </li>
<li>How organization structure affects the structure of software. </li>
<li>That is the essence of Conway's Law, going all the way back to the 1960s, where he talked about how committees designing software end up making software that reflects the structure of the committees themselves. This leads to a broad conversation about how virtually every company today is actually a software company, and that software represents a vital asset to most businesses, but they may not recognize it yet. </li>
<li>Getting your organization into shape to build great software can be the difference between success and bankruptcy!</li>
</ul>
<h2>
Agile, Teams and Business analysis</h2>
[Agile For Humans] #NoEstimates with Vasco Duarte <a href="http://ryanripley.com/noestimates-with-vasco-duarte/">http://ryanripley.com/noestimates-with-vasco-duarte/</a><br />
<ul>
<li>One of the staring points of #NoEstimates is: “We as an industry are not able to estimate well.”</li>
<li>With that starting point, alternatives are necessary. #NoEstimates seeks to explore those alternatives.</li>
</ul>
<br />
[Agile in 3 Minutes] Mob programming <a href="https://agilein3minut.es/32/">https://agilein3minut.es/32/</a><br />
<br />
[Agile Weekly] Episode #107 – Is Agile Faster? <a href="http://integrumtech.com/2013/04/episode-107-is-agile-faster/">http://integrumtech.com/2013/04/episode-107-is-agile-faster/</a><br />
<ul>
<li>Is agile faster?</li>
<li>Why is agile faster?</li>
</ul>
<br />
[Agile for humans] 5 Base Patterns to Guide Agile Teams <a href="http://ryanripley.com/5-base-patterns-to-guide-agile-teams/">http://ryanripley.com/5-base-patterns-to-guide-agile-teams/</a><br />
<ul>
<li>Measure economic progress</li>
<li>Experiment</li>
<li>Limit work in progress</li>
<li>Embrace collective responsibility</li>
<li>Solve systemic problems</li>
<li>Top down vs. bottom up agile transformations</li>
<li>Some discussions about no estimates and the limitations of such a technique</li>
</ul>
<h2>
Other interests and stuff</h2>
[Developer Tea] The Einstellung Effect <a href="https://spec.fm/podcasts/developer-tea/59037">https://spec.fm/podcasts/developer-tea/59037</a><br />
<ul>
<li>Einstellung is the development of a mechanized state of mind. Often called a problem solving set, Einstellung refers to a person's predisposition to solve a given problem in a specific manner even though better or more appropriate methods of solving the problem exist. The Einstellung effect is the negative effect of previous experience when solving new problems.</li>
<li>Thus older and more experienced developers are more prone to the Einstellung effect than younger less experienced ones.</li>
</ul>
<br />
[The Ruby Rogues] The Future of Work in Web Development <a href="https://devchat.tv/ruby-rogues/rr-296-the-future-of-work-in-web-development-with-erik-dietrich">https://devchat.tv/ruby-rogues/rr-296-the-future-of-work-in-web-development-with-erik-dietrich</a><br />
<ul>
<li>Erik is currently working on a book which he titled “Developer Hegemony”. It centres around the idea of software developers and the future of software development. </li>
<li>In its broadest sense, software developers would leave big enterprise organizations and shift to more freelance work. They would unite and create firms that focus on application development. These firms would then be in contract with large enterprises. </li>
</ul>
<br />
[On Books] Kevin Kelly on The Inevitable, 60s Counterculture, and How to Read Better <a href="http://castig.org/kevin-kelly-on-the-inevitable-60s-counterculture-and-how-to-read-better/">http://castig.org/kevin-kelly-on-the-inevitable-60s-counterculture-and-how-to-read-better/</a><br />
<ul>
<li>The Counterculture movement of the 60s</li>
<li>Travelling as an act of rebellion</li>
<li>Kevin’s latest book The Inevitable in which he writes that, “Much of what will happen in the next thirty years is inevitable, driven by technological trends that are already in motion.” He’ll share some of those predictions with us.</li>
<li>Lessons on how to read better</li>
</ul>
<br />
[On Books] Book Summary: The Inevitable by Kevin Kelly <a href="http://castig.org/the-inevitable-by-kevin-kelly/">http://castig.org/the-inevitable-by-kevin-kelly/</a><br />
<ul>
<li>The Inevitable: Understanding the 12 Technological Forces That Will Shape Our Future, by Kevin Kelly.</li>
<li>The Inevitable is driven by the idea that the technological trends of the next 30 years can be predicted. Over 336 pages the book breaks down the Top 12 technological forces at work such as: “Becoming, Cognifying, Flowing, Screening, Accessing, Sharing, Filtering, Remixing, Interacting, Tracking, Questioning, and Beginning.”</li>
</ul>
<br />
[LSE] Politics: between the extremes <a href="http://www.lse.ac.uk/website-archive/newsAndMedia/videoAndAudio/channels/publicLecturesAndEvents/player.aspx?id=3576">http://www.lse.ac.uk/website-archive/newsAndMedia/videoAndAudio/channels/publicLecturesAndEvents/player.aspx?id=3576</a><br />
<ul>
<li>A cautionary tale. An exposé. A defence of the centre-ground. An appeal to reason. A call to arms. An honest account from the top and bottom of British politics. </li>
<li>Come along to this public conversation with former Deputy Prime Minister Nick Clegg who will be speaking about his new book, Politics: Between the Extremes. </li>
</ul>
<br />
[LSE] Politics after Brexit and Trump <a href="http://www.lse.ac.uk/website-archive/newsAndMedia/videoAndAudio/channels/publicLecturesAndEvents/player.aspx?id=3718">http://www.lse.ac.uk/website-archive/newsAndMedia/videoAndAudio/channels/publicLecturesAndEvents/player.aspx?id=3718</a><br />
<ul>
<li>A year of unpredictable political upheavals in the industrialised world promises an interesting period ahead. What are the lessons from Brexit and the Trump election for our democracy? </li>
<li>Richard H. Pildes is the Sudler Family Professor of Constitutional Law at the New York University Law School. He is one of the nation's leading scholars of constitutional law and a specialist in legal issues affecting democracy. </li>
<li>Mervyn King was Governor of the Bank of England from 2003 to 2013, and is currently School Professor at the London School of Economics and Political Science. Lord King was made a life peer in 2013, and appointed by the Queen a Knight of the Garter in 2014. </li>
</ul>
<br />Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-11698236958123666572017-01-31T22:33:00.000+00:002017-02-01T22:55:31.690+00:00Damo's January 2017 Podcast HighlightsI subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a>. I'm keeping a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">podcast blog here</a> of the episodes that I find interesting or useful in some way.<br />
<br />
<h2>Devops</h2>[RunAs Radio] The DevOps Handbook with Gene Kim <a href="http://runasradio.com/Shows/Show/510">http://runasradio.com/Shows/Show/510</a><br />
<ul><li>The DevOps Handbook is finally released! Richard chats with the one-and-only Gene Kim about the five years of effort that have gone into making the DevOps handbook. Gene talks about how the Handbook was supposed to come out before the Phoenix project, but as the scope of the book grew, they realized it needed more time. The benefit of time has been a ton of case studies and great detailed evidence of how automating workflows, instrumenting systems deeply and a culture of experimentation leads to better applications, happier employees and customers, and a better business all around. You need to read this book! </li>
</ul><br />
[Radio TFS] A New Year with Donovan Brown <a href="http://www.radiotfs.com/Show/129/ANewYearwithDonovanBrown">http://www.radiotfs.com/Show/129/ANewYearwithDonovanBrown</a><br />
<ul><li>Donovan is a Principal Program Manager for DevOps in the Developer Division at Microsoft, focusing on developer tools including Visual Studio Team Services and Team Foundation Server.</li>
<li>In this episode Greg, Martin, Josh and Angela are joined by Donovan Brown to talk TFS, VSTS and, of all things, DevOps!</li>
</ul><br />
<h2>Programming and Testing</h2>[No Fluff Just Stuff] REST is Dead, Long Live the Web! <a href="http://blog.nofluffjuststuff.com/2015/12/28/podcast-rest-is-dead-long-live-the-web/">http://blog.nofluffjuststuff.com/2015/12/28/podcast-rest-is-dead-long-live-the-web/</a><br />
<ul><li>REST is dead, long live the Web</li>
</ul><br />
[Full Stack Radio] Toran Billups - Test Driving the Front-end <a href="http://www.fullstackradio.com/49">http://www.fullstackradio.com/49</a><br />
<br />
[No Fluff Just Stuff] Professional Git with Brent Laster <a href="http://blog.nofluffjuststuff.com/2016/12/28/professional-git-brent-laster/">http://blog.nofluffjuststuff.com/2016/12/28/professional-git-brent-laster/</a><br />
<ul><li>He talks and trains in-depth on not only in Git and source control, but continuous delivery concepts, and a variety of different topics. He’s just published his book, “Professional Git,” by Brent Laster. It’s available on Amazon. We sat down to dive deep and talk all things Git</li>
</ul><br />
[Software Engineering Daily] Bots Podcast with Jon Bruner <a href="https://softwareengineeringdaily.com/2016/12/15/bots-podcast-with-jon-bruner/">https://softwareengineeringdaily.com/2016/12/15/bots-podcast-with-jon-bruner/</a><br />
<ul><li>Over the next few years, bots will pervade our lives more and more. These smart, conversational text interfaces provide a new way of engaging with the computer systems that we have been mostly interacting with through web and mobile app interfaces for the last decade.</li>
<li>Bots are a necessary complement to the voice interfaces of the future, because we don’t always want to talk to the computer, and natural language processing is not yet good enough to always translate our vocal request accurately. Bots are not toys, they aren’t trivial, and they aren’t going away any time soon.</li>
</ul><br />
[Complete Developer Podcast] Learning A Second Language <a href="http://completedeveloperpodcast.com/episode-67/">http://completedeveloperpodcast.com/episode-67/</a><br />
<ul><li>Before starting to learn a new programming language you should take a few considerations. How different is the new language from your current one? Compare the envivornment, paradigm, syntax, and level of automatic operations between the languages.</li>
<li>Tim Ferris wrote up twelve rules for learning a a new language. His rules were for a spoken language but they can also be applied to programming languages.</li>
<li>Learn the right words, the right way.</li>
<li>Learn cognates, things that are the same across languages.</li>
<li>Interact daily in the language through spaced repetition in a controlled environment.</li>
<li>Daily spoken practice.</li>
<li>Look for free resources.</li>
<li>Realize that experience makes it easier to infer rules.</li>
<li>Learn to effectively use mnemonics.</li>
<li>Embrace mistakes.</li>
<li>Create Smart goals (Specific, Measurable, Attainable, Relevant, Time-Bound).</li>
<li>Jump from conversational to mastery.</li>
<li>Learn to sound more native through the use of idioms.</li>
<li>Keep going until you actually get things down.</li>
</ul><br />
[Software Engineering Radio] Peter Hilton on Naming <a href="http://www.se-radio.net/2016/12/se-radio-episode-278-peter-hilton-on-naming/">http://www.se-radio.net/2016/12/se-radio-episode-278-peter-hilton-on-naming/</a><br />
<ul><li>why naming is much harder than we think, why naming matters in programming and program comprehension, how to create good names, and recognize bad names, and how to improve your naming skills.</li>
</ul><br />
[Cucumber Podcast] Cucumber Anti-Patterns <a href="https://cucumber.io/blog/2016/05/09/cucumber-antipatterns">https://cucumber.io/blog/2016/05/09/cucumber-antipatterns</a><br />
<ul><li>Matt, Steve, and Aslak from the core Cucumber team discuss writing good gherkin and avoiding common pitfalls.</li>
<li>We’ll unpick why it’s important to write your gherkin before you write the code, consider if you should ever delete scenarios, and give tips on incorporating your team’s different perspectives into maintainable, predictable cukes!</li>
</ul><br />
[Software Engineering Radio] Gerald Weinberg on Bugs Errors and Software Quality <a href="http://www.se-radio.net/2017/01/se-radio-episode-280-gerald-weinberg-on-bugs-errors-and-software-quality/">http://www.se-radio.net/2017/01/se-radio-episode-280-gerald-weinberg-on-bugs-errors-and-software-quality/</a><br />
<ul><li>Gerald Weinberg about software errors, the fallacy of perfection, how languages and process can reduce errors, and the attitude great programmers have about their work. Gerald’s new book, Errors: Bugs, Boo-boos, and Blunders, focuses on why programmers make errors, how teams can improve their software, and how management should think of and discuss errors. We learn why all programs are perfect (for something), quality can be judged only by the end user of the software, and computers act as “error amplifiers” for our own human imperfections.</li>
</ul><br />
<h2>Architecture</h2>[Software Engineering Daily] Reactive Microservices with Jonas Boner <a href="https://softwareengineeringdaily.com/2016/12/19/reactive-microservices-with-jonas-boner/">https://softwareengineeringdaily.com/2016/12/19/reactive-microservices-with-jonas-boner/</a><br />
<ul><li>For many years, software companies have been breaking up their applications into individual services for the purpose of isolation and maintainability. In the early 2000s, we called this pattern “service-oriented architecture”. Today we call it “microservices”. </li>
<li>The reactive manifesto is a collection of principles for how to build applications. When the reactive manifesto is applied to the idea of microservices, we get reactive microservices, which Jonas and I discuss in today’s episode.</li>
</ul><br />
[Software Engineering Daily] Self-Contained Systems with Eberhard Wolff <a href="https://softwareengineeringdaily.com/2017/01/03/self-contained-systems-with-eberhard-wolff/">https://softwareengineeringdaily.com/2017/01/03/self-contained-systems-with-eberhard-wolff/</a><br />
<ul><li>Self-contained systems is an architectural approach that separates the functionality of a system into many independent systems. Each self-contained system is an autonomous web application, and is owned by one team. Communication with other self-contained systems or 3rd party systems is asynchronous where possible.</li>
<li>As Eberhard Wolff explains in this episode, self-contained systems is not the same thing as microservices, but they are not mutually exclusive. Organizations often adopt a mix of architectural ideas, and it is worth understanding these different models so you can decide which of them to apply to your own projects.</li>
</ul><br />
[Software Engineering Daily] Evolutionary Architecture with Neal Ford <a href="https://softwareengineeringdaily.com/2017/01/05/evolutionary-architecture-with-neal-ford/">https://softwareengineeringdaily.com/2017/01/05/evolutionary-architecture-with-neal-ford/</a><br />
<ul><li>Evolutionary architecture supports incremental, guided change as a first principle along multiple dimensions. A company with an evolutionary architecture is structured to evolve in response to changes inside the company (such as a decision to change the product) or outside the company (such as the emergence of Docker). Neal Ford is an architect at ThoughtWorks and one the creators of the evolutionary architecture concept.</li>
</ul><br />
[AWS Podcast] Serverless Special <a href="https://aws.amazon.com/podcasts/aws-podcast/#171">https://aws.amazon.com/podcasts/aws-podcast/#171</a><br />
<ul><li>Bryan Liston, Developer Advocate for AWS Serverless, speaks with Matt Weagle, Ant Stanley & Ben Kehoe. They discuss server less architectures, testing and other fun topics!</li>
</ul><br />
<h2>Agile, Teams and Business analysis</h2>[Mastering Business Analysis] Split Your Stories! <a href="https://www.acast.com/masteringbusinessanalysis/mba101-split-your-stories">https://www.acast.com/masteringbusinessanalysis/mba101-split-your-stories</a><br />
<ul><li>The problems big user stories can cause</li>
<li>How big your user stories should be</li>
<li>Why splitting stories helps create a shared understanding</li>
<li>How just four splitting techniques apply to almost all stories</li>
</ul><br />
[Agile for Humans] Agile is a cancer <a href="http://ryanripley.com/003-agile-for-humans/">http://ryanripley.com/003-agile-for-humans/</a><br />
<ul><li>Zach is an independent consultant who recently posted a provocative article called: “The Subversion of Agile: Agile is a Cancer”. We discussed his post, talked about what the cancer is in the community that needs to be removed about posts from others in the community about the “death of Agile”.</li>
</ul><br />
[Developing Up] The Four Attributes of a Great Development Team <a href="http://www.developingup.com/7">http://www.developingup.com/7</a><br />
<ul><li>The four attributes of a great development team:</li>
<li>Communication</li>
<li>Responsibility</li>
<li>Positive attitudes</li>
<li>Collaboration</li>
</ul><br />
[Developing Up] The Importance of one-on-ones <a href="http://www.developingup.com/8">http://www.developingup.com/8</a><br />
<ul><li>Great developers need great support, feedback and communication. In today's episode we talk about the importance of regular one-on-one meetings for both developers and managers. We discuss how managers can establish and maintain successful one-on-one meetings. We then discuss how as a developer you can take ownership of and benefit from these meetings.</li>
</ul><br />
[Mastering Business Analysis] Using Behavior Driven Development for Better User Stories <a href="http://masteringbusinessanalysis.com/episode-023-using-behavior-driven-development-for-better-user-stories-interview-with-jeffrey-davidson/">http://masteringbusinessanalysis.com/episode-023-using-behavior-driven-development-for-better-user-stories-interview-with-jeffrey-davidson/</a><br />
<ul><li>Better understand how to get better at user stories and how behavior driven development (BDD) helps create a shared understanding. We also discuss how to create the nirvana state of living requirements. </li>
</ul><br />
[.NET Rocks!] Punishment Driven Development with Louise Elliott <a href="https://www.dotnetrocks.com/?show=1406">https://www.dotnetrocks.com/?show=1406</a><br />
<ul><li>The beatings will continue until morale improves!</li>
<li>Louise talks about getting rid of blame and punishment, whether self-inflicted or team-inflicted, so that the individual unique contributions and capabilities of every member of the team are valued. The conversation also dives into creating constructive incentives - not pitting team members or separate teams against each other, actually making sure everyone is focused on making sure the business is successful. </li>
</ul><br />
<h2>Other interests and stuff</h2>[Revisionist History] Blame Game <a href="http://revisionisthistory.com/episodes/08-blame-game">http://revisionisthistory.com/episodes/08-blame-game</a><br />
<ul><li>How can we all make human error </li>
<li>The simplest solution often is</li>
<li>Cars with runaway acceleration. And what to do if it does. It can happen to you, honestly</li>
<li>In the summer and fall of 2009, hundreds of Toyota owners came forward with an alarming allegation: Their cars were suddenly and uncontrollably accelerating. Toyota was forced to recall 10 million vehicles, pay a fine of more than $1 billion, and settle countless lawsuits. The consensus was that there was something badly wrong with the world’s most popular cars. Except that there wasn’t.</li>
<li>“Blame Game” looks under the hood at one of the strangest public hysterias in recent memory. What really happened in all those Camrys and Lexuses? And how did so many drivers come to misunderstand so profoundly what was happening to them behind the wheel? The answer touches on our increasingly fraught relationship to technology and the dishonesty and naiveté of many in the media.</li>
</ul><br />
[TED Talks] How to gain control of your free time <a href="https://www.ted.com/talks/laura_vanderkam_how_to_gain_control_of_your_free_time">https://www.ted.com/talks/laura_vanderkam_how_to_gain_control_of_your_free_time</a><br />
<ul><li>There are 168 hours in each week. How do we find time for what matters most? Time management expert Laura Vanderkam studies how busy people spend their lives, and she's discovered that many of us drastically overestimate our commitments each week, while underestimating the time we have to ourselves. She offers a few practical strategies to help find more time for what matters to us, so we can "build the lives we want in the time we've got."</li>
</ul><br />
[TED Talks] Bring on the female superheroes! <a href="https://www.ted.com/talks/christopher_bell_bring_on_the_female_superheroes">https://www.ted.com/talks/christopher_bell_bring_on_the_female_superheroes</a><br />
<ul><li>Why is it so hard to find female superhero merchandise? In this passionate, sparkling talk, media studies scholar (and father of a Star Wars-obsessed daughter) Christopher Bell addresses the alarming lack of female superheroes in the toys and products marketed to kids — and what it means for how we teach them about the world. </li>
</ul><br />
[Developer On Fire] Neal Ford - Architecting Appreciation <a href="http://developeronfire.com/podcast/episode-197-neal-ford-architecting-appreciation">http://developeronfire.com/podcast/episode-197-neal-ford-architecting-appreciation</a><br />
<br />
[No Fluff Just Stuff] Lifelong Learning with Venkat Subramaniam <a href="http://blog.nofluffjuststuff.com/2016/11/16/lifelong-learning-venkat-subramaniam/">http://blog.nofluffjuststuff.com/2016/11/16/lifelong-learning-venkat-subramaniam/</a><br />
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-26436087547996636732017-01-24T21:57:00.000+00:002017-01-25T09:19:37.752+00:00Using beyond compare with Git on Linux (and windows)EDIT - See footer for more info and an alternative to the main body of this post.<br />
<br />
<br />
I'm a massive fan of Beyond compare, I use it a lot. It's brilliant for all the tasks related to file and folder diffs, either on the file system or in source control when viewing changes between revisions or branches.<br />
<br />
Using git diff is ok when you are looking at a small set of changes but if there are many changes across many files I much prefer to use beyond compare to visualise the change set.<br />
<h3>
Git / Beyond Compare integration</h3>
The following code snippets are taken from a centos linux build, but there is no reason that with a little tweak this wont work on a windows machine. (In fact the little tweak is shown in the appendix at the bottom).<br />
<br />
Edit your ~/.gitconfig (c:/users/UserName on windows) by adding the following:<br />
<br />
<code>[diff]<br />
tool = bcompare<br />
[difftool "bcompare"]<br />
cmd = bcompare \"$LOCAL\" \"$REMOTE\"<br />
prompt = false<br />
[merge]<br />
tool = bcompare<br />
[mergetool "bcompare"]<br />
cmd = bcompare \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"<br />
keepBackup = false<br />
trustExitCode = false<br />
[alias]<br />
diffdir = difftool -dir-diff -tool=bcompare -no-prompt</code><br />
<br />
The above assumes that you have installed beyond compare and it is now accessible from the terminal as bcompare. In fact you can see how I install beyond compare in my vagrant bash scripts here: <a href="https://github.com/DamianStanger/centos-node-developer-build/blob/master/scripts/beyondcompare.sh">https://github.com/DamianStanger/centos-node-developer-build/blob/master/scripts/beyondcompare.sh</a><br />
<br />
Usage - launching beyond compare from the git command line:<br />
<br />
<code>#View all un-staged differences one by one<br />
git difftool<br />
<br />
#View all committed differences between the current HEAD and the penultimate commit one by one<br />
git difftool HEAD HEAD~1<br />
<br />
#View all differences between master branch and bugfix branch in beyond compares directory view<br />
git diffdir master bugfix<br />
<br />
#View all differences between two change sets (SHA-1 ) in beyond compares directory view<br />
git diffdir 6b6aa87 4f7d15d<br />
<br />
#View the diff of one un-staged file, note the use of -no-prompt to stop the prompt on the terminal<br />
git difftool -no-prompt myfile.txt<br />
<br />
#View all changes both staged and modified one by one. <br />
#As soon as you close beyond compare the next change will pop open (due to the -no-prompt flag)<br />
git difftool HEAD -no-prompt</code><br />
<br />
You might notice that when you use the diffdir command that the files are not editable, where as if you use the more interactive difftool command that the local files are available for changing and saving in beyond compare. This is because behind the scenes when you use the -dir-diff flag, git copies the modified files to a temporary location and then performs a directory diff on them. So if you do want to modify the files as you do a comparison you must use the more interactive difftool command.<br />
<br />
<h3>
references:</h3>
<a href="https://git-scm.com/docs/git-config">https://git-scm.com/docs/git-config</a><br />
<a href="https://git-scm.com/docs/git-diff">https://git-scm.com/docs/git-diff</a><br />
<a href="https://git-scm.com/docs/git-difftool">https://git-scm.com/docs/git-difftool</a><br />
<a href="https://git-scm.com/docs/git-mergetool">https://git-scm.com/docs/git-mergetool</a><br />
<h3>
Windows</h3>
On windows its just as easy. The users gitconfig is located at c:\users\UserName\.gitconfig<br />
<br />
Just replace the difftool and mergetool commands from the above code snippets with the following:<br />
<code>cmd = "'c:\\Program Files\\Beyond Compare 4\\BCompare.exe' $LOCAL $REMOTE"<br />
cmd = "'c:\\Program Files\\Beyond Compare 4\\BCompare.exe' $LOCAL $REMOTE $BASE $MERGED"</code><br />
<br />
<h2>
EDIT</h2>
Since writing this post I’ve done more playing with git, difftool and beyond compare and have made the following revelations. Which I've only tested on linux centos 7.0 with git 1.8.3.1:<br />
<ul>
<li>Out of the box you can use beyond compare as your difftool</li>
<ul>
<li>Use <span style="font-family: "courier new" , "courier" , monospace;">'git difftool -tool-help'</span> to show all the options you have, do you see bc3 in the list? if so you are set to go.</li>
</ul>
<ul>
<li>Use <span style="font-family: "courier new" , "courier" , monospace;">'git difftool -tool bc3' </span>to open your diffs in beyond compare</li>
</ul>
<li>Same with the mergetool</li>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;">git mergetool --tool-help</span></li>
</ul>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;">git mergetool --tool bc3</span></li>
</ul>
</ul>
I’ve also found that you can actually edit and save files whilst using the diffdir commaand, here’s how/why:<br />
<br />
As I said before when using the -dir-diff command git makes copies of the files into a temp location. Well if one of the sides contains the modified (current working directory) files then the copy is not a hard file copy it’s a simlink to the file in the working directory. So, that means that if you have the option ‘Handling -> follow symbolic links’ in the ‘session settings – folder compare’ dialogue of beyond compare (I recommend that you save this as a session default) then any editing of files that you do WILL be in the working folder of your git repo. Bonza.<br />
<h3>
So what does all this mean to me? Do I actually need to edit my .gitconfig then?</h3>
Well, no, and yes. Beyond compare integration is there out of the box but I would create some alias entries so you don’t have to type in the full command as that would be painful.<br />
<code>[alias]<br />
bc3 = difftool -tool=bc3<br />
bc33 = difftool -no-prompt -tool=bc3<br />
bc3dir = difftool -dir-diff -tool=bc3</code><br />
<br />
You now can issue the same commands as outlines above but with '<span style="font-family: "Courier New",Courier,monospace;">git bc3'</span> or <span style="font-family: "Courier New",Courier,monospace;">'git bc3dir'</span> rather than <span style="font-family: "Courier New",Courier,monospace;">'git difftool'</span> and <span style="font-family: "Courier New",Courier,monospace;">'git diffdir'</span><br />
<br />
Notice that I’ve made a distinction between bc3 and bc33. bc33 will not prompt you for opening the changes and so if you use it with a large change set you will have to cancel through a lot of files until the process ends. But I guess you could always ctrl+c on the terminal to kill the process, either way I find the distinction useful for just one extra character to type.Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-19744703511858598762016-12-18T22:17:00.005+00:002016-12-18T22:17:40.868+00:00Damo's Podcast Highlights 2016 #50I subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a> but I thought I would start to keep a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">weekly log</a> of the episodes that I found interesting or useful in some way.<br />
<br />
[No Fluff Just Stuff] The Challenges facing Software Architects <a href="http://blog.nofluffjuststuff.com/2016/11/02/challenges-software-architect/">http://blog.nofluffjuststuff.com/2016/11/02/challenges-software-architect/</a><br />
<ul>
<li>The title of “Software Architect” is often an ill-defined role. In the pursuit of a software architect role many critical facets of the skill set are frequently overlooked. </li>
<li>It is also increasingly difficult to gain necessary experience as a software architect when most software architects focus on an average of one architecture a year-and frequently never see the full lifecycle of their work.</li>
</ul>
<br />
[Scale Your Code Podcast] JavaScript best practices, Node.js and ending poverty <a href="https://scaleyourcode.com/interviews/interview/8">https://scaleyourcode.com/interviews/interview/8</a><br />
<ul>
<li>Take your JavaScript projects and turn them into more maintainable and scalable applications. Eric has a background of building apps that scale, and I asked him to teach us how. </li>
<li>We also talk about Node.js use cases and how to get started with it. If you've been interested in trying Node out, time to dive in!</li>
</ul>
<br />
[No Fluff Just Stuff] Reflections on Agile in 2016 - What's Wrong and how to fix it <a href="http://blog.nofluffjuststuff.com/2016/09/21/reflections-agile-john-borys/">http://blog.nofluffjuststuff.com/2016/09/21/reflections-agile-john-borys/</a><br />
<ul>
<li>The agile manifesto was written 15 years ago and many agree the principles reflect the true nature of software development. Despite that, we continue to face challenges in making and maintaining the transition. </li>
<li>The low-level details of the implementation are often poorly understood, the organizational buy-in can be challenging and the result is a sort of “worst of both worlds” mashup of waterfall and agile; “Scrummerfall” as our guest John Borys like to call it.</li>
</ul>
<br />
[Software Engineering Daily] Distributed Tracing with Reshmi Krishna <a href="https://softwareengineeringdaily.com/2016/08/24/distributed-tracing-with-reshmi-krishna/">https://softwareengineeringdaily.com/2016/08/24/distributed-tracing-with-reshmi-krishna/</a><br />
<ul>
<li>In a microservices architecture, a user request will often make its way through several different services before it returns a result to the end user. If a user experiences a failed request, the root cause could be in any of the services along that request path. Even more problematic is the challenge of debugging latency in this kind of request chain.</li>
<li>What is distributed tracing </li>
<li>Why use ir</li>
<li>What is zipkin</li>
<li>How it works</li>
</ul>
<br />
[Software Engineering Daily] Algorithms to Live By with Brian Christian <a href="https://softwareengineeringdaily.com/2016/12/05/algorithms-to-live-by-with-brian-christian/">https://softwareengineeringdaily.com/2016/12/05/algorithms-to-live-by-with-brian-christian/</a><br />
<ul>
<li>When you are deciding who to marry, you are using an algorithm. The same is true when you are looking for a parking space, playing a game of poker, or deciding whether or not to organize your closet. Algorithms To Live By is a book about the computer science of human decisions. It offers strategies for how to think through everyday life like a computer scientist.</li>
<li>Done in a book review style</li>
<li>Time management </li>
<li>Sorting vs searching </li>
<li>Decision making, optimal stopping</li>
</ul>
<br />
[Developing Up] Six ways you can be a more productive developer <a href="http://www.developingup.com/5">http://www.developingup.com/5</a><br />
<ul>
<li>Be smart about your time and remove time waste</li>
<li>Prioritize what you need to get done and focus on the MVP.</li>
<li>Use goals and set milestones for yourself.</li>
<li>Plan backwards, start with your end result.</li>
<li>Be active in your progression and learn deliberately</li>
<li>Remove distractions and enter the zone.</li>
</ul>
<br />
[Mastering Business Analysis] Episode 016 – User Story Mapping with Jeff Patton <a href="http://masteringbusinessanalysis.com/episode-016-user-story-mapping-with-jeff-patton/">http://masteringbusinessanalysis.com/episode-016-user-story-mapping-with-jeff-patton/</a><br />
<ul>
<li>Why Jeff believes the word “requirements” means “shut up”</li>
<li>What User Story Maps are and how they can create a shared understanding within your team</li>
<li>How to use Story Maps to create slices of functionality and break a large effort into smaller pieces</li>
<li>How to avoid the common pitfalls with User Story Mapping</li>
<li>Why User Stories aren’t a different way of writing requirements</li>
</ul>
<br />
[Mastering Business Analysis] MBA081: User Story Mapping with David Hussman <a href="http://masteringbusinessanalysis.com/mba081-user-story-mapping-david-hussman/">http://masteringbusinessanalysis.com/mba081-user-story-mapping-david-hussman/</a><br />
<ul>
<li>Why story maps are a powerful tool</li>
<li>How to create a user story map</li>
<li>What to do with the story map</li>
<li>How to avoid building solutions people don’t want</li>
</ul>
<br />
[The Tim Ferriss Show] Testing the "Impossible": 17 Questions that changed my life <a href="http://fourhourworkweek.com/2016/12/07/testing-the-impossible-17-questions-that-changed-my-life/">http://fourhourworkweek.com/2016/12/07/testing-the-impossible-17-questions-that-changed-my-life/</a><br />
<ul>
<li>“Whenever you find yourself on the side of the majority, it is time to pause and reflect.” — Mark Twain</li>
<li>What would happen if i did the opposite for 48 hours</li>
<li>How do i scratch my own itch</li>
<li>whats my real target monthly income</li>
<li>can i get back to where i am now</li>
<li>Empower people</li>
<li>You dont need to make it back in the same way</li>
<li>What if i could only subtract to solve problems</li>
<li>Am i hunting antelope or field mice</li>
<li>'Waste' money to improve quality of life</li>
<li>Non hurry, no pause</li>
</ul>
<br />
[London DevOps] DevOps Transformation in a Large Bank - Nic Ferrier <a href="https://youtu.be/JcZOCoUqjBo?list=PL-JvSFEhoWGdv_Cs8c9hY2cYaD1pGXGDZ">https://youtu.be/JcZOCoUqjBo?list=PL-JvSFEhoWGdv_Cs8c9hY2cYaD1pGXGDZ</a><br />
<ul>
<li>From a release every 3 months to > 4000 a year</li>
</ul>
<br />
[Developer Tea] How We Spend Our Days Is How We Spend Our Lives <a href="http://developertea.simplecast.fm/episodes/10038-how-we-spend-our-days-how-we-spend-our-lives-and-one-way-to-get-a-better-grasp-on-time">http://developertea.simplecast.fm/episodes/10038-how-we-spend-our-days-how-we-spend-our-lives-and-one-way-to-get-a-better-grasp-on-time</a><br />
<ul>
<li>How we spend our days is, of course, how we spend our lives. But how can we get a better grasp on time? </li>
<li>In this episode, I share a simple tip that exploits our brain's natural tendency to take shortcuts to help you better experience time and avoid the feeling of "time flying by" faster than you'd like.</li>
</ul>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-63698571997508188982016-12-11T20:08:00.000+00:002016-12-18T21:14:04.853+00:00Damo's Podcast Highlights 2016 #49I subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a> but I thought I would start to keep a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">weekly log</a> of the episodes that I found interesting or useful in some way.<br />
<br />
[Software Engineering Daily] Database as a Service with Eliot Horowitz <a href="https://softwareengineeringdaily.com/2016/12/01/database-as-a-service-with-eliot-horowitz/">https://softwareengineeringdaily.com/2016/12/01/database-as-a-service-with-eliot-horowitz/</a><br />
<ul>
<li>History of mongoDB</li>
<li>Current versions</li>
<li>Future</li>
<li>Competitors</li>
<li>Running in the cloud</li>
<li>How they do it</li>
<li>Document Vs relational</li>
</ul>
<br />
[Software Engineering Daily] AWS Open Guide with Joshua Levy <a href="https://softwareengineeringdaily.com/2016/11/14/aws-guide-with-joshua-levy/">https://softwareengineeringdaily.com/2016/11/14/aws-guide-with-joshua-levy/</a><br />
<ul>
<li>As AWS has grown to be a gigantic platform, the documentation about how to use cloud infrastructure has become insufficient. As an answer to this, Joshua Levy initiated The Open Guide to Amazon Web Services, an open-source collection of resources available on github</li>
</ul>
<br />
[Hello techpros] The Second Dysfunction of a Software Team: Social Anxiety <a href="http://hellotechpros.com/social-anxiety-leadership/">http://hellotechpros.com/social-anxiety-leadership/</a><br />
<ul>
<li>An overview of Patrick Lencioni’s second dysfunction of a team: fear of conflict.</li>
<li>Why software developers want to think, work and socialize like Commander Spock.</li>
<li>How a technical lead or architect can derail a healthy debate by stating their position.</li>
<li>Why we need to combine empathy and love with a fierce desire to get our message across.</li>
<li>How to foster an environment of healthy conflict in your software development team.</li>
</ul>
<br />
[Freakonomics Radio] How to Make a Bad Decision <a href="http://freakonomics.com/podcast/make-bad-decision/">http://freakonomics.com/podcast/make-bad-decision/</a><br />
<ul>
<li>Some of our most important decisions are shaped by something as random as the order in which we make them. The gambler’s fallacy, as it’s known, affects loan officers, federal judges — and probably you too. How to avoid it? The first step is to admit just how fallible we all are.</li>
</ul>
<br />
[Agile for Humans] The Agile Mindset with Gil Broza <a href="http://ryanripley.com/afh-043-the-agile-mindset-with-gil-broza-podcast/">http://ryanripley.com/afh-043-the-agile-mindset-with-gil-broza-podcast/</a><br />
<ul>
<li>How to foster an agile mindset</li>
<li>The impediments to adopting an agile mindset</li>
<li>What it means to value the human side of agile</li>
<li>How change can happen on an agile team</li>
</ul>
<br />
[Agile for Humans] The Grows Method for Adopting Agile Software Develpoment <a href="http://ryanripley.com/afh-042-the-grows-method-for-adopting-agile-software-development-podcast/">http://ryanripley.com/afh-042-the-grows-method-for-adopting-agile-software-development-podcast/</a><br />
What is the Grows Method for Agile Adoption<br />
<ul>
<li>How to gradually grow agile in an organization</li>
<li>What is essential to be agile</li>
<li>How to get alignment between executives and agile teams</li>
</ul>
<br />
[The Cloudcast] DevOps from the Enterprise <a href="http://www.thecloudcast.net/2016/11/the-cloudcast-280-devops-from-enterprise.html">http://www.thecloudcast.net/2016/11/the-cloudcast-280-devops-from-enterprise.html</a><br />
<ul>
<li>All about the DevOps Enterprise Summit (#DOES16), DevOps success stories, how companies manage the evolution, common DevOps failures and any models that can be reused by other companies. </li>
<li>Topic 1 - Let’s talk about your experiences at DOES in UK vs. DOES in US.</li>
<li>Topic 2 - What stories of successful DevOps implementations did you hear about, and were there any commonalities in those stories?</li>
<li>Topic 3 - Are you seeing the successful companies focus more on people/process or cultural changes or automation/CI/CD or on application transformation as part of their DevOps journey?</li>
<li>Topic 4 - Have any models emerged that are showing companies how to move DevOps from greenfield environments or POCs or Centers of Excellence (COEs) to wider-scale adoption?</li>
<li>Topic 5 - How are people managing the distributed nature of “two pizza teams” and the overhead of keeping projects in sync?</li>
<li>Topic 6 - What are the common pitfalls or mistakes that companies need to avoid if they are moving down the path towards DevOps?</li>
</ul>
<br />
[Fight Mediocrity] The 7 habits of highly effective people by stephen covey - animated book review <a href="https://www.youtube.com/watch?v=ktlTxC4QG8g&feature=youtu.be">https://www.youtube.com/watch?v=ktlTxC4QG8g&feature=youtu.be</a><br />
<ul>
<li>be proactive</li>
<li>begin with the end in mind</li>
<li>put first things first</li>
<li>think win win</li>
<li>seek first to understand then be understood</li>
<li>synergyse</li>
<li>sharpen the saw</li>
</ul>
<br />
[<a href="https://www.youtube.com/channel/UC7z0nOE8ITfrGnXJgNzYaEQ">Nodevember</a>] Staying Sane (dot) JS <a href="https://www.youtube.com/watch?v=WP8oEhFXhZs&feature=youtu.be">https://www.youtube.com/watch?v=WP8oEhFXhZs&feature=youtu.be</a><br />
<ul>
<li>how not to go crazy whilst writing JS</li>
<li>How it feels to learn JavaScript in 2016 - <a href="https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f#.8i5g054y4">https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f#.8i5g054y4</a></li>
<li>Developing apps with JavaScript is fun and scary in this day and age. It feels like every application we write will outlive the libraries used to write the app in... and that's not a fun feeling. Sometimes we get the impression that anything written in JavaScript today is so volatile because smart people will come up with smarter ways of solving problems, that will render solutions I write outdated about two minutes after writing it.</li>
</ul>
<br />Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-58858798159902243192016-12-03T21:01:00.000+00:002016-12-03T21:01:51.765+00:00Damo's Podcast Highlights 2016 #48I subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a> but I thought I would start to keep a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">weekly log</a> of the episodes that I found interesting or useful in some way.<br />
<br />
[<a href="https://aws.amazon.com/podcasts/aws-podcast">AWS Podcast</a>] Re:Invent 2016 Day 1-2 Announcements <a href="https://soundcloud.com/amazon-web-services-306355661/163-reinvent-2016-day-1-announcements">https://soundcloud.com/amazon-web-services-306355661/163-reinvent-2016-day-1-announcements</a> <a href="https://soundcloud.com/amazon-web-services-306355661/164-reinvent-announcements-day-2">https://soundcloud.com/amazon-web-services-306355661/164-reinvent-announcements-day-2</a><br />
<ul>
<li>In this special episode Simon summarises all the announcements from Re:Invent 2016 - Day 1-2</li>
<li>Athena - search and analyse data in S3</li>
<li>Snowmobile - want to move a large amount of data?</li>
<li>personal health dashboard</li>
<li>DDoS mitigation</li>
<li>C# in AWS Lambda</li>
<li>AWS Batch</li>
<li><a href="https://aws.amazon.com/codebuild/">AWS CodeBuild</a> - managed build service, only pay for the time you use</li>
<li><a href="https://aws.amazon.com/xray/">AWS X-Ray</a> - analyse and debug production, distributed applications, such as those built using a microservices architecture</li>
<li>Lambda at edge</li>
</ul>
<br />
<br />
[Software Engineering Daily] Microservices with Rafi Schloming <a href="https://softwareengineeringdaily.com/2016/11/22/microservices-with-rafi/">https://softwareengineeringdaily.com/2016/11/22/microservices-with-rafi/</a><br />
<ul>
<li>Microservices are a widely adopted pattern for breaking an application up into pieces that can be well-understood by the individual teams within the company </li>
<li>Microservices also allow these individual pieces to be scaled independently and updated in isolation</li>
<li>Rafael Schloming, who is building tools for microservices at Datawire</li>
</ul>
<br />
[The Tim Ferriss Show] Tools of Titans: Josh Waitzkin Distilled <a href="https://player.fm/series/the-tim-ferriss-show/204-tools-of-titans-josh-waitzkin-distilled">https://player.fm/series/the-tim-ferriss-show/204-tools-of-titans-josh-waitzkin-distilled</a><br />
<ul>
<li>Josh has written the book 'the art of learning'</li>
<li>Considered a chess prodigy, Josh has perfected learning strategies that can be applied to anything, including his other loves of Brazilian jiu-jitsu (he's a black belt under phenom Marcelo Garcia) and Tai Chi push hands (he's a world champion)</li>
<li>These days, he spends his time coaching the world's top athletes and investors, working to revolutionize education, and tackling his new passion for paddle surfing</li>
</ul>
<br />
[<a href="https://www.youtube.com/user/oreillymedia?sub_confirmation=1">O'Reilly Software architecture conference</a>] Reactive architecture, design, and programming with Duncan Devore <a href="https://youtu.be/nZ1NucpEyxM">https://youtu.be/nZ1NucpEyxM</a><br />
<ul>
<li>What is reactive architecture, design and programming</li>
</ul>
<br />
[<a href="https://reactivesummit2016.sched.org/event/7geD/bla-bla-microservices-bla-bla-directors-cut">Reactive summit 2016</a>] Bla Bla Microservices Bla Bla <a href="https://youtu.be/DRK7WYNh6AA">https://youtu.be/DRK7WYNh6AA</a><br />
<ul>
<li>Everyone is talking about microservices, but there is more confusion than ever about what the promise of microservices really means and how to deliver on it. In this talk we will explore microservices from first principles, distilling their essence and putting them in their true context: distributed systems</li>
<li>Core traits of isolation, single responsibility, autonomy, exclusive state, asynchronous message-passing, and mobility</li>
<li>It is in between the microservices that the most interesting and rewarding, but also challenging, problems arise—here we are entering the world of distributed systems</li>
<li>Slicing an existing system into various REST services and wiring them back together again with synchronous protocols and traditional enterprise tools—designed for monolithic architectures—will set you up for failure</li>
<li>What we need in order to build resilient, elastic, and responsive microservices-based systems is to embrace microservices as systems and re-architect them from the ground up using reactive principles</li>
</ul>
<br />
[JavaScript Jabber] Visual Studio Code with Chris Dias <a href="https://devchat.tv/js-jabber/199-jsj-visual-studio-code-with-chris-dias-and-erich-gamma">https://devchat.tv/js-jabber/199-jsj-visual-studio-code-with-chris-dias-and-erich-gamma</a><br />
<ul>
<li>Whats new with VSCode</li>
</ul>
<br />
[Agile for humans] System Thinking and #NoEstimates with Chris Chapman <a href="http://ryanripley.com/afh-045-system-thinking-and-noestimates-with-chris-chapman-podcast/">http://ryanripley.com/afh-045-system-thinking-and-noestimates-with-chris-chapman-podcast/</a><br />
<ul>
<li>How a #NoEstimates mindset brings value to a team</li>
<li>What lean thinking can do for executives</li>
<li>Coaching techniques for when you’re learning about a team</li>
<li>Where we learned about lean and system thinking</li>
</ul>
<br />
[This Agile Life] Trust, Transparency and Truth <a href="http://www.thisagilelife.com/119/">http://www.thisagilelife.com/119/</a><br />
<ul>
<li>Presentation recorded at Agile Gravy 2016 - Trust Transparency Truth</li>
</ul>
<br />
[Developer Tea] Addictions <a href="https://spec.fm/podcasts/developer-tea/6531">https://spec.fm/podcasts/developer-tea/6531</a><br />
<ul>
<li>How do you use technology?</li>
<li>Could we be more intentional in the time we spend with screens?</li>
</ul>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0tag:blogger.com,1999:blog-8200285235757892384.post-41244632049388504592016-11-27T20:57:00.001+00:002016-11-27T20:58:51.958+00:00Damo's Podcast Highlights 2016 #47I subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a> but I thought I would start to keep a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">weekly log</a> of the episodes that I found interesting or useful in some way.<br />
<br />
[Adventures in Angular] Back end and front end teams versus cross functional teams <a href="https://devchat.tv/adv-in-angular/120-aia-back-end-and-front-end-teams-versus-cross-functional-teams">https://devchat.tv/adv-in-angular/120-aia-back-end-and-front-end-teams-versus-cross-functional-teams</a><br />
<ul>
<li>Issues and concerns with working on back end/front end teams</li>
<li>Measuring success with split and cross-functional teams</li>
<li>Benefits of full-stack teams</li>
<li>Hiring experts and specialists</li>
</ul>
<br />
[Reactive summit] Monolith to reactive - it's all about architecture <a href="https://www.youtube.com/watch?v=ofxbypDz4h8&feature=youtu.be">https://www.youtube.com/watch?v=ofxbypDz4h8&feature=youtu.be</a><br />
<ul>
<li>There are plenty of reactive technologies out there, but these are only the building blocks for building reactive systems, using these technologies to build a system does not necessarily make the system reactive. A reactive system will have a fundamentally different architecture to the traditional monolith found in the enterprise. </li>
<li>In this presentation we take a hands on look at how the architecture of a system, including the flow of data, the types of communication used, and the way the system is broken down into components, will need to change as you decompose a monolith into a reactive microservice based system.</li>
</ul>
<br />
[Soft Skills Engineering] Attracting Talent <a href="https://softskills.audio/2016/11/15/episode-35-attracting-talent-and-quitting-without-burning-bridges/">https://softskills.audio/2016/11/15/episode-35-attracting-talent-and-quitting-without-burning-bridges/</a><br />
<ul>
<li>How to attract top talent to your team</li>
<li>How to sell the company from a technical perspective</li>
</ul>
<br />
[Agile for Humans] How Project Managers Can Fit on Agile Teams <a href="http://ryanripley.com/afh-048-how-project-managers-can-fit-on-agile-teams-podcast/">http://ryanripley.com/afh-048-how-project-managers-can-fit-on-agile-teams-podcast/</a><br />
<ul>
<li>Discussions on how project managers and developers can find common ground on Agile teams</li>
</ul>
<br />
[JavaScript Air] End to End Testing with Julie Ralph <a href="http://audio.javascriptair.com/e/014-jsair-end-to-end-testing-with-julie-ralph/">http://audio.javascriptair.com/e/014-jsair-end-to-end-testing-with-julie-ralph/</a><br />
<ul>
<li>End-to-End testing is among the various forms of testing that is critical for the development and quality assurance of your applications. Join us with a subject matter expert to chat about this important part of application development</li>
</ul>
<br />
[Software Engineering Daily] You Are Not A Commodity <a href="https://softwareengineeringdaily.com/2016/08/07/you-are-not-a-commodity/">https://softwareengineeringdaily.com/2016/08/07/you-are-not-a-commodity/</a><br />
<ul>
<li>Why big companies usually underpay engineers and offer unrewarding work</li>
<li>Suggests strategies for engineers looking to escape the role of the commodity developer</li>
</ul>
<br />
[The Tim Ferriss Show] The choice minimal lifestyle, 6 Formulas for More Output and less overwhelm <a href="http://fourhourworkweek.com/2008/02/06/the-choice-minimal-lifestyle-6-formulas-for-more-output-and-less-overwhelm/">http://fourhourworkweek.com/2008/02/06/the-choice-minimal-lifestyle-6-formulas-for-more-output-and-less-overwhelm/</a><br />
<ol>
<li>Set rules for yourself so you can automate as much decision-making as possible</li>
<li>Don’t provoke deliberation before you can take action</li>
<li>Don’t postpone decisions or open “loops,” to use GTD parlance, just to avoid uncomfortable conversations</li>
<li>Learn to make non-fatal or reversible decisions as quickly as possible</li>
<li>Don’t strive for variation—and thus increase option consideration—when it’s not needed. Routine enables innovation where it’s most valuable</li>
<li>Regret is past-tense decision making. Eliminate complaining to minimize regret</li>
</ol>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0tag:blogger.com,1999:blog-8200285235757892384.post-16949615851598615112016-11-20T18:35:00.000+00:002016-11-27T20:38:24.652+00:00Damo's Podcast Highlights 2016 #46I subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a> but I thought I would start to keep a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">weekly log</a> of the episodes that I found interesting or useful in some way.<br />
<br />
[Toolsday] State of Javascript <a href="https://www.podcastchart.com/podcasts/toolsday/episodes/state-of-javascript">https://www.podcastchart.com/podcasts/toolsday/episodes/state-of-javascript</a><br />
<ul>
<li>The abundance of tools in web development</li>
</ul>
<br />
[Hanselminutes] Mob Programming with Woody Zuill <a href="http://hanselminutes.com/553/mob-programming-with-woody-zuill">http://hanselminutes.com/553/mob-programming-with-woody-zuill</a><br />
<ul>
<li>You've pair programmed but have you tried Mob Programming? </li>
<li>Woody Zuill and his team "discovered" programming as a group and it changed their whole process. </li>
<li>Woody joins Scott and explains how they stumbled on this, how they refined it, and how Mob Programming may make your programming life better.</li>
</ul>
<br />
[Scrum Master Toolbox Podcast] Successful Agile adoption is about people and their goals <a href="http://scrum-master-toolbox.org/2016/11/podcast/stefan-wolpers-reminds-us-that-people-are-the-most-important-part-of-any-success-story/">http://scrum-master-toolbox.org/2016/11/podcast/stefan-wolpers-reminds-us-that-people-are-the-most-important-part-of-any-success-story/</a><br />
<ul>
<li>Many organisations want to adopt Agile because it supports some part of their world view that existed before Agile was there </li>
<li>In fact we adapt easily to changes that support our world view, so the first question in our mind when joining a new organization should be “why exactly do you think Agile is a good approach for his company?”.</li>
</ul>
<br />
[Cucumber Podcast] How XP Can Improve the Experiences of Female Developers <a href="https://cucumber.io/blog/2016/09/21/how-xp-can-improve-the-experiences-of-female-software-developers">https://cucumber.io/blog/2016/09/21/how-xp-can-improve-the-experiences-of-female-software-developers</a><br />
<ul>
<li>Clare feels many of the difficulties associated with being a minority have subsided since working in an XP environment</li>
<li>"My belief is that XP creates a more conducive environment for women and other minorities within the industry. I believe that XP can – and should – pave the way to making the tech industry a more welcoming and attractive place for women."</li>
</ul>
<br />
[Mastering Business Analysis] The Art and Science of Influence <a href="http://masteringbusinessanalysis.com/mba098-the-art-and-science-of-influence/">http://masteringbusinessanalysis.com/mba098-the-art-and-science-of-influence/</a><br />
<ul>
<li>Why influence is a key skill for any project professional</li>
<li>How to build trust within your organization</li>
<li>Why knowing yourself and emotional intelligence are vital to your ability to influence</li>
</ul>
<br />
[Software Engineering Daily] Slack Bots with Amir Shevat <a href="https://softwareengineeringdaily.com/2016/11/16/slack-bots-with-amir-shevat/">https://softwareengineeringdaily.com/2016/11/16/slack-bots-with-amir-shevat/</a><br />
<ul>
<li>The rise of Slack has coincided with the rise of chatbots</li>
<li>A chatbot is a simple, conversational interface into a computer program that may have simple functionality, like telling you some simple statistics, or more complex functionality, like helping you manage your continuous integration pipeline</li>
</ul>
<br />
[.NET Rocks] Connect Debrief with Scott Hunter <a href="http://www.dotnetrocks.com/?show=1376">http://www.dotnetrocks.com/?show=1376</a><br />
<ul>
<li>So many amazing things announced at Connect! Important announcements including:</li>
<li>new support in Visual Studio for containers</li>
<li>cool new integration with SQL Server 2016</li>
<li>the on-going evolution of .NET Core and it's tooling</li>
</ul>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0tag:blogger.com,1999:blog-8200285235757892384.post-71737793566296392822016-11-14T21:36:00.001+00:002016-11-14T21:38:11.869+00:00Damo's Podcast Highlights 2016 #45I subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a> but I thought I would start to keep a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">weekly log</a> of the episodes that I found interesting or useful in some way.<br />
<br />
[Cucumber Podcast] Agile Anarchy <a href="https://cucumber.io/blog/2016/02/16/agile-anarchy">https://cucumber.io/blog/2016/02/16/agile-anarchy</a><br />
<ul>
<li>The wide adoption of agile has produced practices and tools that help teams communicate and deliver software effectively. But many activities we assume we must use don't add the value we hoped.</li>
<li>What happens when you throw out the rulebook and start at zero - will we see a marked improvement or just a Hobbesian mess?</li>
</ul>
<br />
[ThoughtWorks Beacon] Evolutionary Architecture <a href="https://player.fm/series/thoughtworks/evolutionary-architecture-thoughtworks-beacon">https://player.fm/series/thoughtworks/evolutionary-architecture-thoughtworks-beacon</a><br />
<ul>
<li>Go deep into the definition of evolutionary architecture and discuss fitness functions</li>
<li>More at <a href="https://www.thoughtworks.com/insights/blog/microservices-evolutionary-architecture">https://www.thoughtworks.com/insights/blog/microservices-evolutionary-architecture</a></li>
</ul>
<br />
[Software Engineering Radio] Rebecca Parsons on Evolutionary Architecture <a href="http://www.se-radio.net/2015/08/se-radio-episode-236-rebecca-parsons-on-evolutionary-architecture/">http://www.se-radio.net/2015/08/se-radio-episode-236-rebecca-parsons-on-evolutionary-architecture/</a><br />
<ul>
<li>The practice of evolutionary software architecture means making decisions as late as possible (last responsible moment) and setting up cross-functional requirements that the architecture has to meet (architectural fitness function)</li>
<li>Last responsible moment</li>
<li>Architect for testability</li>
<li>Postals law</li>
<li>Architect for evolveability </li>
<li>Conways law</li>
</ul>
<br />
[JavaScript Jabber] Interview with Mads Kristensen from Microsoft Ignite <a href="https://devchat.tv/js-jabber/236-jsj-interview-with-mads-kristensen-from-microsoft-ignite">https://devchat.tv/js-jabber/236-jsj-interview-with-mads-kristensen-from-microsoft-ignite</a><br />
<ul>
<li>Things that make web development more difficult</li>
<li>Creating accessible javascript tools that aren’t immediately outdated</li>
</ul>
<br />
[Software Engineering Daily] Ad Industry with Bob Hoffman <a href="https://softwareengineeringdaily.com/2016/11/01/ad-industry-with-bob-hoffman/">https://softwareengineeringdaily.com/2016/11/01/ad-industry-with-bob-hoffman/</a><br />
<ul>
<li>Online advertising is heavily affected by a set of delusions and fraudulent practices that few people in the adtech industry have an interest in stopping. This is the curious, perverse nature of the world of online media</li>
<li>Some of the online advertising we see fulfills its job, when an ad successfully conveys a meaningful message from a marketer to a consumer</li>
<li>But there are reasons to be extremely skeptical of the way that online advertising works</li>
</ul>
<br />
[Software Engineering Daily] Ad Tracking with Larry Furr <a href="https://softwareengineeringdaily.com/2016/11/03/ad-tracking-with-larry-furr/">https://softwareengineeringdaily.com/2016/11/03/ad-tracking-with-larry-furr/</a><br />
<ul>
<li>When you visit a web page, that web page can write data to a file on your computer, known as a cookie. Scripts on that page can also read from your cookie file to understand where you have been in the past. All of this data about you is getting shared between advertising companies like Google, Facebook, and AppNexus.</li>
<li>Ghostery is a browser extension that allows you to limit what you share with these online tracking companies. Larry Furr develops products at Ghostery, and on this episode he takes us through the process of how we are tracked through the Internet.</li>
<li>We also explore the topic of ad fraud, which is a theme we will continue to explore on SE Daily</li>
</ul>
<br />
[<a href="https://www.mongodb.com/blog/post/mongodb-radio-our-new-podcast-project">MongoDB Radio</a>] The MEAN Stack with Jason Zucchetto <a href="https://soundcloud.com/mongodb/the-mean-stack-with-jason-zucchetto">https://soundcloud.com/mongodb/the-mean-stack-with-jason-zucchetto</a><br />
<ul>
<li>Jason Zucchetto, Product Manager at MongoDB, explains what the MEAN stack is and how it can be leveraged to make GIANT ideas into GIANT realities.</li>
</ul>
<br />
[.NET Rocks!] Data Lakes with Michael Rys <a href="http://www.dotnetrocks.com/default.aspx?ShowNum=1370">http://www.dotnetrocks.com/default.aspx?ShowNum=1370</a><br />
<ul>
<li>Azure Data Lakes - a place to store your data "as is" so that you can easily query and organize the data for further analysis</li>
<li>Michael discusses the problems of data warehouses, with their Extract-Transform-Load (ETL) processes that manipulate the data into a particular shape for the warehouse - and make it harder to ask new questions of the data</li>
<li>Leave the data as it is in the data lake and then build mechanism to extract on demand for the various data marts you have</li>
</ul>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.232202 -0.33237800000006246 51.232202 -0.33237800000006246tag:blogger.com,1999:blog-8200285235757892384.post-41291324448259313432016-11-14T20:59:00.002+00:002016-11-14T20:59:37.649+00:00Connecting to a mongod instance from a different VMI've got two CentOS installations running within Virtual Box. I want to run mongodb on one which will be optimised for this purpose, the other for developing and running my node apps.<br />
<h3>VM1. CentOS full desktop install as documented <a href="https://foldingair.blogspot.co.uk/2016/10/node-development-on-centos-for-net-devs.html">here</a></h3>This is the environment that I'm doing my development, running node etc.<br />
<h3>VM2. CentOS minimal install, command line only</h3>I've followed the instructions as documented in my other post to install mongod here.<br />
<h3>Connect</h3>Now I want to connect from VM1 to the mongod service running in VM2.<br />
<br />
First change the network adapter of VM2 away from 'NAT' (the default) to 'Bridged Adapter' this will make this VM a full citizen of the network, it will get its own IP address and can be accessed on it from any other machine on the network.<br />
Next amend the mongod.conf file in /ect/ by adding in the new IP address.<br />
<br />
<code>$ ip addr show<br />
1: lo: <loopback> mtu 65536 qdisc noqueue state UNKNOWN<br />
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br />
inet 127.0.0.1/8 scope host lo<br />
valid_lft forever preferred_lft forever<br />
inet6 ::1/128 scope host<br />
valid_lft forever preferred_lft forever<br />
2: enp0s3: <broadcast> mtu 1500 qdisc pfifo_fast state UP qlen 1000<br />
link/ether 08:00:27:5c:41:9c brd ff:ff:ff:ff:ff:ff<br />
inet 192.168.0.10/24 brd 10.0.2.255 scope global dynamic enp0s3<br />
valid_lft 85748sec preferred_lft 85748sec<br />
inet6 fe80::a00:27ff:fe5c:419c/64 scope link<br />
valid_lft forever preferred_lft forever</broadcast></loopback><br />
<br />
$ su -c 'vi /etc/mongod.conf'<br />
<br />
# Listen to local and LAN interface.<br />
bind_ip = 127.0.0.1,192.168.0.10</code><br />
<br />
This will allow remote access to the service as documented <a href="http://www.mkyong.com/mongodb/mongodb-allow-remote-access/">here</a><br />
<br />
once this is done restart the mongod service on VM1 and connect from the remote VM thus:<br />
<code>$ mongo 192.168.0.10</code><br />
<br />
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-10275331130847153342016-11-06T21:31:00.001+00:002016-11-06T21:34:06.344+00:00Damo's Podcast Highlights 2016 #44I subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a> but I thought I would start to keep a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">weekly log</a> of the episodes that I found interesting or useful in some way.<br />
<br />
[Software Engineering Daily] ChatOps with Jason Hand <a href="https://softwareengineeringdaily.com/2016/11/02/chatops-with-jason-hand/">https://softwareengineeringdaily.com/2016/11/02/chatops-with-jason-hand/</a><br />
<ul>
<li>Chat bots are your newest co-worker. Slack, HipChat, and other chat clients allow developers and other team members to communicate more dynamically than the limits of email. </li>
<li>Companies have started to add bots to their chat rooms. These bots can give you technical information, restart a server, or notify you that a build has finished.</li>
</ul>
<br />
[Full Stack Radio] Building the Right Thing with BDD <a href="http://www.fullstackradio.com/51">http://www.fullstackradio.com/51</a><br />
<ul>
<li>What exactly is BDD?</li>
<li>Is BDD a technical or non-technical practice?</li>
<li>How do you get started with BDD?</li>
<li>How do you keep the number of system tests low to keep your test suite fast?</li>
<li>What's your strategy for dealing with external services in acceptance tests?</li>
<li>What are the advantages of using Cucumber even as a solo developer working on a side project?</li>
</ul>
<br />
[Cucumber Podcast] Mob Programming <a href="https://cucumber.io/blog/2016/04/19/mob-programming">https://cucumber.io/blog/2016/04/19/mob-programming</a><br />
<ul>
<li>“All the brilliant people working on the same thing, at the same time, in the same space, and on the same computer.” That’s how Woody Zuill - who coined the term Mob Programming - describes it. He is our esteemed guest on the podcast, and we spend some time digging into his own experiences mobbing.</li>
<li>This is a fun episode for folks looking for novel ways to improve the certainty of their software.</li>
</ul>
<br />
[Azure Friday - Channel 9] What's new in Azure DocumentDB? <a href="https://channel9.msdn.com/Shows/Azure-Friday/AzureFridayNewinDocumentDB">https://channel9.msdn.com/Shows/Azure-Friday/AzureFridayNewinDocumentDB</a><br />
<ul>
<li>Get up to speed with what documentDb is and what is new</li>
</ul>
<br />
[Microsoft Cloud Show] DocumentDB's recent Improvement <a href="http://www.microsoftcloudshow.com/podcast/Episodes/131-microsoft-s-andrew-liu-on-documentdb-s-improvements-on-pricing-scale-and-mongodb-support">http://www.microsoftcloudshow.com/podcast/Episodes/131-microsoft-s-andrew-liu-on-documentdb-s-improvements-on-pricing-scale-and-mongodb-support</a><br />
<ul>
<li>New support for MongoDB, </li>
<li>Performance and scale, specifically some new capabilities that the DocumentDB team has added like partitioned collections and planet scale with global databases. </li>
<li>Pricing changes announced in April 2016 </li>
<li>Support for automatically expiring data with TTL settings. </li>
</ul>
<br />
[JavaScript Air] (Rerun) The past, present, and future or javascript <a href="https://javascriptair.com/episodes/2016-10-05/">https://javascriptair.com/episodes/2016-10-05/</a><br />
<ul>
<li>A rerun of the very first show: Kicking off JavaScript Air with the first guest Brendan Eich (original creator of JavaScript) to talk about the past, present, and future of JavaScript.</li>
</ul>
<br />
[JavaScript Air] JavaScript and the Web Platform with Brendan Eich <a href="https://javascriptair.com/episodes/2016-11-02/">https://javascriptair.com/episodes/2016-11-02/</a><br />
<ul>
<li>The history of ad networks and how add tracking works</li>
<li>Why this is not a good thing for anyone</li>
<li>What can we all do to stop the madness</li>
<li>Use the <a href="https://www.brave.com/">brave browser</a> </li>
</ul>
<br />
[Simple Programmer Podcast] People Don't Take Action <a href="http://simpleprogrammer.libsyn.com/265-people-dont-take-action-they-only-hear-good-ideas-simple-programmer-podcast">http://simpleprogrammer.libsyn.com/265-people-dont-take-action-they-only-hear-good-ideas-simple-programmer-podcast</a><br />
<ul>
<li>Hear good ideas, gotta take action</li>
</ul>
<br />
[<a href="https://aws.amazon.com/podcasts/aws-podcast/">AWS Podcast</a>] AWS Quickstarts <a href="https://soundcloud.com/amazon-web-services-306355661/aws-podcast-episode-155">https://soundcloud.com/amazon-web-services-306355661/aws-podcast-episode-155</a><br />
<br />
[TEDTalks] Your smartphone is a civil rights issue <a href="https://www.ted.com/talks/christopher_soghoian_your_smartphone_is_a_civil_rights_issue">https://www.ted.com/talks/christopher_soghoian_your_smartphone_is_a_civil_rights_issue</a><br />
<ul>
<li>The smartphone you use reflects more than just personal taste ... it could determine how closely you can be tracked, too. </li>
<li>Privacy expert and TED Fellow Christopher Soghoian details a glaring difference between the encryption used on Apple and Android devices and urges us to pay attention to a growing digital security divide. </li>
<li>"If the only people who can protect themselves from the gaze of the government are the rich and powerful, that's a problem," he says. "It's not just a cybersecurity problem — it's a civil rights problem." </li>
</ul>
<br />
<br />
<br />Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-14101355370319771682016-10-30T19:47:00.000+00:002016-10-30T19:47:34.563+00:00Damo's Podcast Highlights 2016 #43I subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a> but I thought I would start to keep a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">weekly log</a> of the episodes that I found interesting or useful in some way.<br />
<br />
[Software Engineering Radio] Barry O’Reilly on Lean Enterprise <a href="http://www.se-radio.net/2015/08/se-radio-episode-234-barry-oreilly-on-lean-enterprise/">http://www.se-radio.net/2015/08/se-radio-episode-234-barry-oreilly-on-lean-enterprise/</a><br />
<ul>
<li>A lean enterprise is a large organization that manages to keep innovating while keeping its existing products in the market. </li>
<li>O’Reilly talks about the idea of scientific experiments and the build-measure-learn loop popularized by the lean-startup method. He shares his experiment of an online wine seller using Twitter. He further discusses the challenges for enterprises trying to do something similar and introduce the three-horizon model, to manage innovative, growing, and new products. </li>
<li>As an example of a successful lean enterprise, O’Reilly talks about GOV.UK, the British government’s new website.</li>
</ul>
<br />
[Parent Programming] Episode 1 - Kent C. Dodds <a href="http://parentprogramming.libsyn.com/episode-1-kent-c-dodds">http://parentprogramming.libsyn.com/episode-1-kent-c-dodds</a><br />
<ul>
<li>Kent talks about what it's like to raise two young kids, going over the highs and lows of parenting. </li>
<li>He also mixes in a little bit of "leaky abstraction" humor in regards to figuring out how to work with his children.</li>
</ul>
<br />
[Developer On Fire] The learning mindset with Linda Rising <a href="http://developeronfire.com/episode-176-linda-rising-and-kendall-rael-learning-and-mindset">http://developeronfire.com/episode-176-linda-rising-and-kendall-rael-learning-and-mindset</a><br />
<ul>
<li>Linda Rising, Kendall Rael, and Dave Rael have a conversation about the pitfalls of talent and the importance of effort and share an empowering message</li>
<li>Falling down, getting back up and the frustrations of learning</li>
</ul>
<br />
[Software Engineering Daily] Monitoring Architecture <a href="http://softwareengineeringdaily.com/2016/10/11/monitoring-architecture-with-theo-schlossnagle/">http://softwareengineeringdaily.com/2016/10/11/monitoring-architecture-with-theo-schlossnagle/</a> <br />
<ul>
<li>Building a monitoring system is a complex distributed systems problem</li>
<li>Events are produced from different points in an application and must be aggregated in order to form metrics </li>
<li>These events are often ingested by a time series database, which forms the backbone of the monitoring system</li>
</ul>
<br />Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-36265487182694895832016-10-26T21:32:00.000+01:002016-10-26T21:32:19.861+01:00Node development on CentOS for .Net devsI'm about to start a new role which entails Node, Angular, Mongo and linux (CentOS) so ive set about learning the above. Quite a bit of a shift from the previous number of years which have been pretty much exclusively Microsoft and .Net. But im really excited about it and the new learning I need to embark upon. Today it was the turn of getting a CentOS development environment up and running on virtual box with npm, node and webstorm. <br />
<br />
<h2>
Creating the development environment </h2>
Install virtual box (5.1 at time of writing)<br />
<a href="https://www.virtualbox.org/">https://www.virtualbox.org/</a><br />
download the dvd image of centOS (7 at time of writing)<br />
<a href="https://www.centos.org/download/">https://www.centos.org/download/</a><br />
<br />
Create a VM of the image,<br />
On software selection i used KDE Plasma with internet tools and <br />
i used the KDE desktop with internet and KDE applications and development Tools<br />
enable the network<br />
create a user as well as set the super user password <br />
<br />
To enable higher resolution <br />
once set up, from the VM menu: device > insert guest additions CD image<br />
this will act as if a cd was inserted into the VM<br />
in the VBOXADDITIONS drive double click autorun.sh and enter your superuser password<br />
reboot<br />
<br />
<h2>
Installing npm, node and webstorm</h2>
Within a terminal window<br />
<code>su - <br />
yum install epel-release<br />
yum install npm<br />
npm --version<br />
3.10.3 <br />
node --version<br />
v6.7.0<br />
exit</code><br />
Download webstorm<br />
<a href="http://www.jetbrains.com/webstorm/">http://www.jetbrains.com/webstorm/</a><br />
Extract the folder to the place you want to install webstorm<br />
double click webstorm.sh to install<br />
remember to chose a dark theme ;-)<br />
<br />
<h2>
Create your first hello world node app with express</h2>
In a terminal (not as root)<br />
<code>cd /home/username/<br />
mkdir code<br />
cd code <br />
mkdir express01<br />
cd express01<br />
<br />
npm init<br />
take all the defaults<br />
npm install express --save</code><br />
Im not going to go into the the how to create a basic express app to echo something to the console and to the browser, there are so many tutorials about that out there.<br />
<br />
Enjoy your new development environment.<br />
<br />
<h2>
Major learnings. I.e. Don't do this at work...</h2>
<br />
When you enter sudo for the first time you get the apt warning:<br />
<br />
<code>We trust you have received the usual lecture from the local System<br />
Administrator. It usually boils down to these three things:<br />
<br />
#1) Respect the privacy of others.<br />
#2) Think before you type.<br />
#3) With great power comes great responsibility.</code><br />
<br />
The first time I created the hello world app from the guide above I used su for everything, including creating the folders and npm init. This resulted in files and folders that i could not write to from webstorm so i tried to fix the permissions with chmod. But I used it very very wrongly and the interwebs advised me to reinstall everything. Which as it happens, this time was not a big deal for me.<br />
So what did i do?<br />
Whilst i was su i think i ran:<br />
<code>chmod 777 /. -R</code><br />
In powershell .\ is the current directory, I thought ./ would be the same in linux but i did a typo and so i ended up making all the files and folders (on the whole VM) 777 rather than just the new code folders. Apparently this is very hard to fix.<br />
The symptom is you type the command su - you get the error:<br />
<code>su -<br />
su: cannot set groups: Operation not permitted</code><br />
It can make things rather difficult if you cant get root access anymore.<br />
<br />
Should it be this easy to screw your entire VM? or was there actually an easy fix? if you know id love to hear about it. <br />
<br />
<br />
<br />
<br />Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247tag:blogger.com,1999:blog-8200285235757892384.post-8250752964348874012016-10-23T20:48:00.000+01:002016-10-23T20:48:21.382+01:00Damo's Podcast Highlights 2016 #42I subscribe to many podcasts, you can see the list as it was in 2015 here: <a href="https://foldingair.blogspot.co.uk/2015/11/developer-podcasts-v2.html">Developer podcasts v2</a> but I thought I would start to keep a <a href="https://foldingair.blogspot.co.uk/search/label/podcasts">weekly log</a> of the episodes that I found interesting or useful in some way.<br />
<br />
[Software Engineering Daily] DevOps Handbook with Gene Kim <a href="http://softwareengineeringdaily.com/2016/10/13/devops-handbook-with-gene-kim/">http://softwareengineeringdaily.com/2016/10/13/devops-handbook-with-gene-kim/</a><br />
<ul>
<li>The intent of the DevOps movement is to get organizations moving faster and more effectively by breaking down siloes, and improving communication. Gene Kim’s book The Phoenix Project illustrated this by telling the fictional story of a company adopting a DevOps mentality. Although that book was fiction, Gene is an experienced engineer, having worked as founder and CTO of Tripwire, a software company that makes security and compliance automation software.</li>
<li>In his new book The DevOps Handbook, Gene presents a practical companion to The Phoenix Project. Together with his co-authors, Gene has written a guide for how to move an organization toward DevOps, and in this episode we explore some of the topics from his book</li>
</ul>
<br />
[Hanselminutes] Orchestrating and automating deployments with Octopus Deploy <a href="http://www.hanselminutes.com/549/orchestrating-and-automating-deployments-with-octopus-deploy-and-damian-brady">http://www.hanselminutes.com/549/orchestrating-and-automating-deployments-with-octopus-deploy-and-damian-brady</a><br />
<ul>
<li>We first interviewed Paul Stovell a few years back when he started a micro-ISV he was calling "Octopus Deploy." Now it's a fully formed and successful company whose flagship product Octopus Deploy is used all over. Damian Brady joins Scott and explains why deployment is more subtle then you think.</li>
</ul>
<br />
[TEDx] Surprising Lessons From 100 Days of Rejection: Jia Jiang <a href="http://tedxtalks.ted.com/video/Surprising-Lessons-From-100-D-2">http://tedxtalks.ted.com/video/Surprising-Lessons-From-100-D-2</a> & <a href="http://tedxtalks.ted.com/video/The-hidden-opportunity-behind-e">http://tedxtalks.ted.com/video/The-hidden-opportunity-behind-e</a><br />
<ul>
<li>Jia Jiang knows first-hand how the fear of rejection can hold us back. The tendency to avoid it at all costs can be detrimental to our lives, our careers, our dreams</li>
<li>Chasing your dream requires you put everything out there and deal with the consequences. When aspiring entrepreneur Jia Jiang left corporate life to build his dream company, he had no idea it also meant facing crushing rejection. The best way to recover? 100 Days of Rejection Therapy</li>
</ul>
<br />
[CodingBlocks] Clean Code – Writing Meaningful Names <a href="http://www.codingblocks.net/podcast/episode-47-clean-code-writing-meaningful-names/">http://www.codingblocks.net/podcast/episode-47-clean-code-writing-meaningful-names/</a><br />
<ul>
<li>In this episode, we take our first dive into the book Clean Code by Robert Martin and specifically we talk about writing meaningful names for all things code related. You’ll be amazed at how following some decent rules that you can start naming things that will help you and fellow coders understand your code at a glance. </li>
<li>As always with coding blocks skip skip skip all the news and chit chat to get to the meat of the conversation</li>
<li>Lots of good show notes</li>
</ul>
<br />
[YOW! 2015] Adrian Cockcroft - It's Complicated... <a href="https://www.youtube.com/watch?v=iMJymSrKqF4">https://www.youtube.com/watch?v=iMJymSrKqF4</a><br />
<ul>
<li>What does it mean to be complicated? </li>
<li>How can we manage complexity when we scale up systems? </li>
<li>Why do people find it horrifying when the internal complexity of monolithic apps is replaced by a “death star” diagram of the relationships between microservices? </li>
<li>Are many microservices less complicated than one monolith?</li>
<li>Why do people expect complex adaptive systems to behave predictably? </li>
<li>How does complicated relate to intuitive? </li>
<li>How can small fast release processes reduce risk, speed up teams and reduce costs?</li>
</ul>
<br />
<br />
[Rocky Mountain Ruby 2016] Kill "Microservices" before its too late by Chad Fowler <a href="https://www.youtube.com/watch?v=-UKEPd2ipEk">https://www.youtube.com/watch?v=-UKEPd2ipEk</a><br />
<ul>
<li>Keep changing things, even if you don’t need to</li>
<li>Microservices make it easier to replace than to change</li>
<li>Unit tests are a design smell (tests optimise for permanence, creates coupling) </li>
<li>Use metrics instead , esp business metrics. Use alerting around the metrics to perform true testing of the system</li>
<li>Small projects vs large projects, success vs failure, stay small, go for impermanence</li>
<li>Microservices is not an architecture and small is not the goal, its health longevity</li>
<li>Systems that survive are made of components that can change</li>
<li>If it hurts do it more often</li>
</ul>
<br />
[<a href="https://angularair.com/">Angular Air</a>] 01 ngAir - Hitting the Ground Running with Angular <a href="https://plus.google.com/events/cg90utbgkqg89fg43k62kav02v4">https://plus.google.com/events/cg90utbgkqg89fg43k62kav02v4</a><br />
<br />
[Hanselminutes] Infrastructuralism with Truss <a href="https://www.hanselminutes.com/550/infrastructuralism-with-truss">https://www.hanselminutes.com/550/infrastructuralism-with-truss</a><br />
<ul>
<li>What is Infrastructuralism and how can it help you think differently about software and large problems? Scott sits down with Everett Harper, CEO of Truss. They talk about how applying some old ideas in new ways helped them fix healthcare.gov.</li>
<li>How we should avoid succumbing to the Black swan theory</li>
</ul>
Damohttp://www.blogger.com/profile/08902572365040420975noreply@blogger.com0Dorking, UK51.232202 -0.3323780000000624651.1526485 -0.49373950000006245 51.311755500000004 -0.17101650000006247