PageSourceSearch

https://markcrossfield.co.uk/page2/

html markcrossfield.co.uk collected 2026-10-07 19:02:07 UTC 22,214 bytes, 416 lines download raw bytes

1<!DOCTYPE html>
2<html>
3  <head>
4      <meta charset="utf-8">
5      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
6      <meta name="viewport" content="width=device-width">
7
8      <!-- syntax highlighting CSS -->
9      <link rel="stylesheet" href="/css/syntax.css">
10
11      <!-- Custom CSS -->
12      <link rel="stylesheet" href="/css/main.css">
13
14      <!-- Responsive CSS -->
15      <link rel="stylesheet" href="/css/responsive.css">
16
17      <!-- Google Fonts -->
18      <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700' rel='stylesheet' type='text/css'>
19      <link href='http://fonts.googleapis.com/css?family=Raleway:300,400,700' rel='stylesheet' type='text/css'>
20      <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
21
22    
22<script>
vendor: 359 bytes, lines 22-28
22
23      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
24      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
25      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
26      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
27
28      ga('create', '
28UA-352611-12
vendor: 34 bytes, lines 28-29
28', 'markcrossfield.co.uk');
29      
29ga('require', 'linkid', 'linkid.js');
30      ga('send', 'pageview');
31
32    </script>
32
33    <!-- Begin Jekyll SEO tag v2.8.0 -->
34<title>Page 2 of 3 for Home | Mark Crossfield</title>
35<meta name="generator" content="Jekyll v3.10.0" />
36<meta property="og:title" content="Home" />
37<meta name="author" content="mrmanc" />
38<meta property="og:locale" content="en_US" />
39<meta name="description" content="Writings about software development, Devops and technology" />
40<meta property="og:description" content="Writings about software development, Devops and technology" />
41<link rel="canonical" href="http://markcrossfield.co.uk//page2/" />
42<meta property="og:url" content="http://markcrossfield.co.uk//page2/" />
43<meta property="og:site_name" content="Mark Crossfield" />
44<meta property="og:type" content="website" />
45<link rel="prev" href="http://markcrossfield.co.uk//" />
46<link rel="next" href="http://markcrossfield.co.uk//page3" />
47<meta name="twitter:card" content="summary" />
48<meta property="twitter:title" content="Home" />
49<meta name="twitter:site" content="@mrmanc" />
50<meta name="twitter:creator" content="@mrmanc" />
51<script type="application/ld+json">
52{"@context":"https://schema.org","@type":"WebPage","author":{"@type":"Person","name":"mrmanc"},"description":"Writings about software development, Devops and technology","headline":"Home","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"http://markcrossfield.co.uk//images/logo.png"},"name":"mrmanc"},"url":"http://markcrossfield.co.uk//page2/"}</script>
52
53<!-- End Jekyll SEO tag -->
54
55  </head>
56  <body>
57    <div class="site">
58      <div class="sidebar" id="sidebar">
59        <div class="header">
60          <a href="/"><img id="logo" src="/images/logo.png" width="128" height="99"></a>
61          <span class="tagline">Developer, engineer, trouble maker</span>
62        </div>
63        <div class="footer">
64          <span id="footer-links">
65            <a href="/about/" class="footer-link">About Mark</a> <span class="separator">&bull;</span>
66            <a href="/links/" class="footer-link">Links</a> <span class="separator">&bull;</span>
67            <a href="https://twitter.com/mrmanc" class="footer-link">@mrmanc</a> <span class="separator">&bull;</span>
68            <a href="https://github.com/mrmanc" class="footer-link">GitHub</a>
69          </span>
70        </div>
71        <div class="posts">
72          <ul class="posts-list">
73            
74              <li class="post-link">
75                <a class="post-title" href="/2017-05-14-developing-your-career.html">
76                  <span class="post-date">14 May 2017</span>
77                  Developing Your Career
78                </a>
79              </li>
80            
81              <li class="post-link">
82                <a class="post-title" href="/2017-02-05-links-to-useful-learning-for-engineers.html">
83                  <span class="post-date">05 Feb 2017</span>
84                  Links to Useful Learning (for Engineers)
85                </a>
86              </li>
87            
88              <li class="post-link">
89                <a class="post-title" href="/2016-05-12-agile-manchester-what-we-learned-whilst-handing-control-of-deployments-to-developers-at-auto-trader.html">
90                  <span class="post-date">12 May 2016</span>
91                  Agile Manchester—What we learned whilst handing control of deployments to developers at Auto Trader
92                </a>
93              </li>
94            
95              <li class="post-link">
96                <a class="post-title" href="/2015-12-07-devops-edinburgh-how-we-put-developers-in-control-of-deployments-at-auto-trader.html">
97                  <span class="post-date">07 Dec 2015</span>
98                  DevOps Edinburgh—How We Put Developers In Control of Deployments at Auto Trader
99                </a>
100              </li>
101            
102              <li class="post-link">
103                <a class="post-title" href="/2015-08-22-spectro-adventures-in-go.html">
104                  <span class="post-date">22 Aug 2015</span>
105                  spectro… adventures in Go (lang)
106                </a>
107              </li>
108            
109              <li class="post-link">
110                <a class="post-title" href="/2014-10-29-devopsdays-belgium-ghent-write-up.html">
111                  <span class="post-date">29 Oct 2014</span>
112                  DevOpsDays Ghent, Belgium 2014
113                </a>
114              </li>
115            
116              <li class="post-link">
117                <a class="post-title" href="/2014-10-22-devops-manchester-auto-trader-from-continuous-integration-to-continuous-delivery.html">
118                  <span class="post-date">22 Oct 2014</span>
119                  DevOps Manchester—Auto Trader… From Continuous Integration to Continuous Delivery
120                </a>
121              </li>
122            
123              <li class="post-link">
124                <a class="post-title" href="/2014-05-01-devops-manchester-monitoring-graphite-and-friends.html">
125                  <span class="post-date">01 May 2014</span>
126                  DevOps Manchester—Graphite and Friends
127                </a>
128              </li>
129            
130              <li class="post-link">
131                <a class="post-title" href="/2014-04-07-quality-shell-scripting-static-analysis.html">
132                  <span class="post-date">07 Apr 2014</span>
133                  Static Analysis of Shell Scripts
134                </a>
135              </li>
136            
137              <li class="post-link">
138                <a class="post-title" href="/2014-03-28-bad-interpreter-use-svn-autoprops-to-stop-committing-windows-line-endings-in-shell-scripts.html">
139                  <span class="post-date">28 Mar 2014</span>
140                  Bad Interpreter—SVN autoprops save the day
141                </a>
142              </li>
143            
144              <li class="post-link">
145                <a class="post-title" href="/2014-03-27-bash-shell-unit-testing.html">
146                  <span class="post-date">27 Mar 2014</span>
147                  Test Driven Development in Bash
148                </a>
149              </li>
150            
151              <li class="post-link">
152                <a class="post-title" href="/2014-03-25-bash-dotfiles-bindle.html">
153                  <span class="post-date">25 Mar 2014</span>
154                  Take your scripts with you
155                </a>
156              </li>
157            
158              <li class="post-link">
159                <a class="post-title" href="/2014-03-17-using-os-x-at-work-behind-a-proxy.html">
160                  <span class="post-date">17 Mar 2014</span>
161                  Using OS X at work behind a proxy
162                </a>
163              </li>
164            
165              <li class="post-link">
166                <a class="post-title" href="/2014-03-16-free-hosting-with-github-pages.html">
167                  <span class="post-date">16 Mar 2014</span>
168                  Free hosting with Github Pages
169                </a>
170              </li>
171            
172              <li class="post-link">
173                <a class="post-title" href="/2014-02-16-thats-no-moon-visualising-go-delivery-pipelines-using-d3-js.html">
174                  <span class="post-date">16 Feb 2014</span>
175                  That’s no moon: Visualising Go Delivery Pipelines Using D3.js
176                </a>
177              </li>
178            
179              <li class="post-link">
180                <a class="post-title" href="/2013-05-22-saving-the-world-one-dashboard-at-a-time-using-task-scheduler-and-nircmd-and-powercfg.html">
181                  <span class="post-date">22 May 2013</span>
182                  Saving the world, one dashboard at a time
183                </a>
184              </li>
185            
186              <li class="post-link">
187                <a class="post-title" href="/2012-06-26-ascii-distribution-histogram-pivot-your-standard-out.html">
188                  <span class="post-date">26 Jun 2012</span>
189                  Ascii Distribution Histogram—pivot your standard out
190                </a>
191              </li>
192            
193              <li class="post-link">
194                <a class="post-title" href="/2012-06-25-simply-measure-anything-with-metriclogster.html">
195                  <span class="post-date">25 Jun 2012</span>
196                  Simply Measure Anything with MetricLogster
197                </a>
198              </li>
199            
200              <li class="post-link">
201                <a class="post-title" href="/2012-05-10-meet-graphite.html">
202                  <span class="post-date">10 May 2012</span>
203                  Meet Graphite
204                </a>
205              </li>
206            
207              <li class="post-link">
208                <a class="post-title" href="/2012-02-15-fast-feedback.html">
209                  <span class="post-date">15 Feb 2012</span>
210                  Fast Feedback
211                </a>
212              </li>
213            
214              <li class="post-link">
215                <a class="post-title" href="/2011-07-31-are-your-pairs-rotating-enough-generate-a-pairing-heat-map.html">
216                  <span class="post-date">31 Jul 2011</span>
217                  Are your pairs rotating enough? Generate a pairing heat map
218                </a>
219              </li>
220            
221              <li class="post-link">
222                <a class="post-title" href="/2011-07-30-automating-vuze-with-dropbox-in-os-x.html">
223                  <span class="post-date">30 Jul 2011</span>
224                  Automating Vuze with Dropbox (in OS X)
225                </a>
226              </li>
227            
228              <li class="post-link">
229                <a class="post-title" href="/2011-06-05-hello.html">
230                  <span class="post-date">05 Jun 2011</span>
231                  Hello!
232                </a>
233              </li>
234            
235          </ul>
236        </div>
237        <div class="footer">
238          <p>Hosted on <a href="http://pages.github.com/">Github Pages</a> using <a href="http://jekyllrb.com/">Jekyll</a> and <a href="http://the-development.github.io/flex/">Flex</a>
239        </div>
240      </div>
241      <div class="content" id="home">
242        
243  
244    <div id="info-container">
245      <h2 id="title"><a href="/2014-03-27-bash-shell-unit-testing.html">Test Driven Development in Bash</a></h2>
246      <span id="date">27 March 2014</a>
247    </div>
248    <div class="post">
249      <p>I’ve found myself wanting the convenience of some Bash unit testing for the third time, and not wanting to develop yet another set of assertion functions I thought it was about time to find something reusable. I’m looking to do the basic asserts, with some regular expression matching and a sprinkling of <a href="http://c2.com/cgi/wiki?SelfShuntPattern">self shunt</a> (with command interactions intercepted by replacing commands like echo with functions within the scope of the test). I should credit <a href="https://twitter.com/be4zley/">Ross Beazley</a> for starting me off on this approach. This time I’m resisting the temptation to start a new project and thought I’d find something to fork and improve. So here are a few of the projects I found and a bit of analysis.</p>
250
251
252    </div>
253    <p><a data-disqus-identifier="/bash-shell-unit-testing" href="/2014-03-27-bash-shell-unit-testing.html" class="read-full">Read full post</a></p>
254  
255
256  
257    <div id="info-container">
258      <h2 id="title"><a href="/2014-03-25-bash-dotfiles-bindle.html">Take your scripts with you</a></h2>
259      <span id="date">25 March 2014</a>
260    </div>
261    <div class="post">
262      <p>I often feel quite nomadic when using Bash. I’m somewhat a hobo developer, moving from home to home. Recently I’ve been working with OS X at work, and I’ve been on OS X at home for years. Yet still I had some machines where my bash history would drop off quickly, and where aliases I use a lot didn’t exist. When I worked out how to get hostname completion working with ssh I decided it was time to have a dotfiles project.</p>
263
264
265    </div>
266    <p><a data-disqus-identifier="/bash-dotfiles-bindle" href="/2014-03-25-bash-dotfiles-bindle.html" class="read-full">Read full post</a></p>
267  
268
269  
270    <div id="info-container">
271      <h2 id="title"><a href="/2014-03-17-using-os-x-at-work-behind-a-proxy.html">Using OS X at work behind a proxy</a></h2>
272      <span id="date">17 March 2014</a>
273    </div>
274    <div class="post">
275      <p>Here are some tools I’ve found useful recently to work effectively using OS X behind a proxy at work.</p>
276
277
278    </div>
279    <p><a data-disqus-identifier="/using-os-x-at-work-behind-a-proxy" href="/2014-03-17-using-os-x-at-work-behind-a-proxy.html" class="read-full">Read full post</a></p>
280  
281
282  
283    <div id="info-container">
284      <h2 id="title"><a href="/2014-03-16-free-hosting-with-github-pages.html">Free hosting with Github Pages</a></h2>
285      <span id="date">16 March 2014</a>
286    </div>
287    <div class="post">
288      <p>I’ve made the move from Wordpress to <a href="http://jekyllrb.com/">Jekyll</a>, and Wordpress.com for hosting, to <a href="http://pages.github.com/">Github Pages</a> which has Jekyll support built in. Combined with Github Pages (which is an awesome way to host HTML sites for free), this is a very powerful way to get an easy to manage blog with complete control and no sales pitch for extras.</p>
289
290
291    </div>
292    <p><a data-disqus-identifier="/free-hosting-with-github-pages" href="/2014-03-16-free-hosting-with-github-pages.html" class="read-full">Read full post</a></p>
293  
294
295  
296    <div id="info-container">
297      <h2 id="title"><a href="/2014-02-16-thats-no-moon-visualising-go-delivery-pipelines-using-d3-js.html">That’s no moon: Visualising Go Delivery Pipelines Using D3.js</a></h2>
298      <span id="date">16 February 2014</a>
299    </div>
300    <div class="post">
301      <p>We’ve been doing quite a bit of work improving our Go environment recently, and correcting one or two continuous integration anti patterns we’d introduced. I wanted to find a way to see the effect of these changes, and it occurred to me that it might be possible to use D3.js to build the view. I have had good use cases for graph diagrams in the past but got bored looking for a good way to draw them programatically. I’d even lazily fallen back on the <a href="http://console.neo4j.org/">Neo4J console</a> to program the graph and then visualise it (and amusingly I now see that that page is using D3.js behind the scenes).</p>
302
303
304    </div>
305    <p><a data-disqus-identifier="/thats-no-moon-visualising-go-delivery-pipelines-using-d3
305-js" href="/2014-02-16-thats-no-moon-visualising-go-delivery-pipelines-using-d3-js.html" class="read-full">Read full post</a></p>
306  
307
308  
309    <div id="info-container">
310      <h2 id="title"><a href="/2013-05-22-saving-the-world-one-dashboard-at-a-time-using-task-scheduler-and-nircmd-and-powercfg.html">Saving the world, one dashboard at a time</a></h2>
311      <span id="date">22 May 2013</a>
312    </div>
313    <div class="post">
314      <p>A colleague asked us recently to make sure we turn our monitors off overnight to save power. That’s all very well, but what should we do about our dashboard? We purposefully disable power saving to make sure that the display doesn’t turn off during the day, and since we never actually use it there would be nothing to wake it up! It turns out you can easily script this using Task Scheduler, which comes with Windows. You will need to download a tool called <a href="http://www.nirsoft.net/utils/nircmd.html">NirCmd</a>, which allows you to control your monitor from the command line (amongst many other things). You already have a command called powercfg to configure the other Power Saving options from the command line.</p>
315
316
317    </div>
318    <p><a data-disqus-identifier="/saving-the-world-one-dashboard-at-a-time-using-task-scheduler-and-nircmd-and-powercfg" href="/2013-05-22-saving-the-world-one-dashboard-at-a-time-using-task-scheduler-and-nircmd-and-powercfg.html" class="read-full">Read full post</a></p>
319  
320
321  
322    <div id="info-container">
323      <h2 id="title"><a href="/2012-06-26-ascii-distribution-histogram-pivot-your-standard-out.html">Ascii Distribution Histogram—pivot your standard out</a></h2>
324      <span id="date">26 June 2012</a>
325    </div>
326    <div class="post">
327      <p><strong>Update: I’ve rewritten this with more features and better code—<a href="https://github.com/mrmanc/log-ninja#distribution">take a look</a>!</strong><br />
328I spend literally hours a week just trawling logs, often wanting to visualise what I’m seeing. Yes, I could faff with Splunk or something else expensive (yes, I know there is a free version), but sometimes I just want to know what a column of response times looks like.</p>
329
330
331    </div>
332    <p><a data-disqus-identifier="/ascii-distribution-histogram-pivot-your-standard-out" href="/2012-06-26-ascii-distribution-histogram-pivot-your-standard-out.html" class="read-full">Read full post</a></p>
333  
334
335  
336    <div id="info-container">
337      <h2 id="title"><a href="/2012-06-25-simply-measure-anything-with-metriclogster.html">Simply Measure Anything with MetricLogster</a></h2>
338      <span id="date">25 June 2012</a>
339    </div>
340    <div class="post">
341      <p>Okay, so my <a href="2012-05-10-meet-graphite.html">previous post</a> is a long overdue summary of how we are visualising application metrics using Graphite. We are writing custom Logster parsers which scan our log files and push interesting things into Graphite. This means that to get a new metric into Graphite we need to add it to our log files (unless it already exists), and adapt or create a python Logster parser to understand whatever we’ve logged. This parser then needs to be deployed to our server running logster and a graph built. The biggest blocker we’ve seen with this approach is the necessity for the engineer to understand how to write Python, where to find and test the Logster parsers, and how to deploy the parser to the Logster server. Personally, this means either doing the work myself or explaining the peculiarities of Python white space handling to yet another person. There must be a better way.</p>
342
343
344    </div>
345    <p><a data-disqus-identifier="/simply-measure-anything-with-metriclogster" href="/2012-06-25-simply-measure-anything-with-metriclogster.html" class="read-full">Read full post</a></p>
346  
347
348  
349    <div id="info-container">
350      <h2 id="title"><a href="/2012-05-10-meet-graphite.html">Meet Graphite</a></h2>
351      <span id="date">10 May 2012</a>
352    </div>
353    <div class="post">
354      <p>Last year i was fascinated by a <a href="http://velocityconf.com/velocity2011/public/schedule/detail/17776">presentation</a> <a href="http://www.slideshare.net/mikebrittain/metrics-driven-engineering-at-etsy">[slides]</a> by Etsy about their approach of metrics driven engineering - see their blog post - <a href="http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/">Measure Anything, Measure Everything</a>. They started with some questions: how many of us had access to our production logs (a reassuringly high amount), and how many of us could tell them how many hits our application was getting right now / how many hits it got this time last year.</p>
355
356
357    </div>
358    <p><a data-disqus-identifier="/meet-graphite" href="/2012-05-10-meet-graphite.html" class="read-full">Read full post</a></p>
359  
360
361  
362    <div id="info-container">
363      <h2 id="title"><a href="/2012-02-15-fast-feedback.html">Fast Feedback</a></h2>
364      <span id="date">15 February 2012</a>
365    </div>
366    <div class="post">
367      <p>My relationship with Ant has had its ups and downs. I hate writing a build file in a language that I’m unfamiliar with, and finding that the language seems designed to encourage and hideous result. Recently however I felt I achieved something, successfully reducing the duration of our teams pre check in task task from three and a half minutes to only 24 seconds.</p>
368
369
370    </div>
371    <p><a data-disqus-identifier="/fast-feedback" href="/2012-02-15-fast-feedback.html" class="read-full">Read full post</a></p>
372  
373
374
375<div class="pagination">
376  
377    <a href="/">&laquo; Newer posts</a>
378  
379
380  
381    
382      <a href="/index.html">1</a>
383    
384  
385    
386      <em>2</em>
387    
388  
389    
390      <a href="/page3">3</a>
391    
392  
393
394  
395    <a href="/page3">Older posts &raquo;</a>
396  
397</div>
398
399
400      </div>
401    </div>
402    
402<script src="/scripts/responsive.js" type="text/javascript"></script>
402
403    
403<script type="text/javascript">
404    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
405    var disqus_shortname = 'markcrossfield'; // required: replace example with your forum shortname
406
407    /* * * DON'T EDIT BELOW THIS LINE * * */
408    (function () {
409        var s = document.createElement('script'); s.async = true;
410        s.type = 'text/javascript';
411        s.src = '//' + disqus_shortname + '.disqus.com/count.js';
412        (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
413    }());
414    </script>
414
415  </body>
416</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.