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">•</span> 66 <a href="/links/" class="footer-link">Links</a> <span class="separator">•</span> 67 <a href="https://twitter.com/mrmanc" class="footer-link">@mrmanc</a> <span class="separator">•</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="/">« 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 »</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.