1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 3<head profile="http://gmpg.org/xfn/11"> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 5<title>TFS | if !blogClogged</title> 6<link rel="pingback" href="https://manicprogrammer.net/xmlrpc.php" /> 7<meta name='robots' content='max-image-preview:large' /> 8 9<!-- Async WordPress.com Remote Login -->
10<script id="wpcom_remote_login_js"> 11var wpcom_remote_login_extra_auth = ''; 12function wpcom_remote_login_remove_dom_node_id( element_id ) { 13 var dom_node = document.getElementById( element_id ); 14 if ( dom_node ) { dom_node.parentNode.removeChild( dom_node ); } 15} 16function wpcom_remote_login_remove_dom_node_classes( class_name ) { 17 var dom_nodes = document.querySelectorAll( '.' + class_name ); 18 for ( var i = 0; i < dom_nodes.length; i++ ) { 19 dom_nodes[ i ].parentNode.removeChild( dom_nodes[ i ] ); 20 } 21} 22function wpcom_remote_login_final_cleanup() { 23 wpcom_remote_login_remove_dom_node_classes( "wpcom_remote_login_msg" ); 24 wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" ); 25 wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_validate" ); 26 wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_js" ); 27 wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_iframe" ); 28 wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_styles" ); 29} 30 31// Watch for messages back from the remote login 32window.addEventListener( "message", function( e ) { 33 if ( e.origin === "https://r-login.wordpress.com" ) { 34 var data = {}; 35 try { 36 data = JSON.parse( e.data ); 37 } catch( e ) { 38 wpcom_remote_login_final_cleanup(); 39 return; 40 } 41 42 if ( data.msg === 'LOGIN' ) { 43 // Clean up the login check iframe 44 wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" ); 45 46 var id_regex = new RegExp( /^[0-9]+$/ ); 47 var token_regex = new RegExp( /^.*|.*|.*$/ ); 48 if ( 49 token_regex.test( data.token ) 50 && id_regex.test( data.wpcomid ) 51 ) { 52 // We have everything we need to ask for a login 53 var script = document.createElement( "script" ); 54 script.setAttribute( "id", "wpcom_remote_login_validate" ); 55 script.src = '/remote-login.php?wpcom_remote_login=validate' 56 + '&wpcomid=' + data.wpcomid 57 + '&token=' + encodeURIComponent( data.token ) 58 + '&host=' + window.location.protocol 59 + '//' + window.location.hostname 60 + '&postid=99' 61 + '&is_singular='; 62 document.body.appendChild( script ); 63 } 64 65 return; 66 } 67 68 // Safari ITP, not logged in, so redirect 69 if ( data.msg === 'LOGIN-REDIRECT' ) { 70 window.location = 'https://wordpress.com/log-in?redirect_to=' + window.location.href; 71 return; 72 } 73 74 // Safari ITP, storage access failed, remove the request 75 if ( data.msg === 'LOGIN-REMOVE' ) { 76 var css_zap = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } @media screen and ( max-width: 782px ) { html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } }'; 77 var style_zap = document.createElement( 'style' ); 78 style_zap.type = 'text/css'; 79 style_zap.appendChild( document.createTextNode( css_zap ) ); 80 document.body.appendChild( style_zap ); 81 82 var e = document.getElementById( 'wpcom_request_access_iframe' ); 83 e.parentNode.removeChild( e ); 84 85 document.cookie = 'wordpress_com_login_access=denied; path=/; max-age=31536000'; 86 87 return; 88 } 89 90 // Safari ITP 91 if ( data.msg === 'REQUEST_ACCESS' ) { 92 console.log( 'request access: safari' ); 93 94 // Check ITP iframe enable/disable knob 95 if ( wpcom_remote_login_extra_auth !== 'safari_itp_iframe' ) { 96 return; 97 } 98 99 // If we are in a "private window" there is no ITP. 100 var private_window = false; 101 try { 102 var opendb = window.openDatabase( null, null, null, null ); 103 } catch( e ) { 104 private_window = true; 105 } 106 107 if ( private_window ) { 108 console.log( 'private window' ); 109 return; 110 } 111 112 var iframe = document.createElement( 'iframe' ); 113 iframe.id = 'wpcom_request_access_iframe'; 114 iframe.setAttribute( 'scrolling', 'no' ); 115 iframe.setAttribute( 'sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin allow-top-navigation-by-user-activation' ); 116 iframe.src = 'https://r-login.wordpress.com/remote-login.php?wpcom_remote_login=request_access&origin=' + encodeURIComponent( data.origin ) + '&wpcomid=' + encodeURIComponent( data.wpcomid ); 117 118 var css = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 46px !important; } * html body { margin-top: 46px !important; } @media screen and ( max-width: 660px ) { html { margin-top: 71px !important; } * html body { margin-top: 71px !important; } #wpcom_request_access_iframe { display: block; height: 71px !important; } } #wpcom_request_access_iframe { border: 0px; height: 46px; position: fixed; top: 0; left: 0; width: 100%; min-width: 100%; z-index: 99999; background: #23282d; } '; 119 120 var style = document.createElement( 'style' ); 121 style.type = 'text/css'; 122 style.id = 'wpcom_request_access_styles'; 123 style.appendChild( document.createTextNode( css ) ); 124 document.body.appendChild( style ); 125 126 document.body.appendChild( iframe ); 127 } 128 129 if ( data.msg === 'DONE' ) { 130 wpcom_remote_login_final_cleanup(); 131 } 132 } 133}, false ); 134 135// Inject the remote login iframe after the page has had a chance to load 136// more critical resources 137window.addEventListener( "DOMContentLoaded", function( e ) { 138 var iframe = document.createElement( "iframe" );
139 iframe.style.display = "none"; 140 iframe.setAttribute( "scrolling", "no" ); 141 iframe.setAttribute( "id", "wpcom_remote_login_key" ); 142 iframe.src = "https://r-login.wordpress.com/remote-login.php" 143 + "?wpcom_remote_login=key" 144 + "&origin=aHR0cHM6Ly9tYW5pY3Byb2dyYW1tZXIubmV0" 145 + "&wpcomid=32635625" 146 + "&time=" + Math.floor( Date.now() / 1000 ); 147 document.body.appendChild( iframe ); 148}, false ); 149</script>
149 150<link rel='dns-prefetch' href='//s1.wp.com' /> 151<link rel='dns-prefetch' href='//s2.wp.com' /> 152<link rel='dns-prefetch' href='//s0.wp.com' /> 153<link rel='dns-prefetch' href='//af.pubmine.com' /> 154<link rel="alternate" type="application/rss+xml" title="if !blogClogged » Feed" href="https://manicprogrammer.net/feed/" /> 155<link rel="alternate" type="application/rss+xml" title="if !blogClogged » Comments Feed" href="https://manicprogrammer.net/comments/feed/" /> 156<link rel="alternate" type="application/rss+xml" title="if !blogClogged » TFS Category Feed" href="https://manicprogrammer.net/category/tfs/feed/" /> 157
157<script type="text/javascript"> 158 /* <![CDATA[ */ 159 function addLoadEvent(func) { 160 var oldonload = window.onload; 161 if (typeof window.onload != 'function') { 162 window.onload = func; 163 } else { 164 window.onload = function () { 165 oldonload(); 166 func(); 167 } 168 } 169 } 170 /* ]]> */ 171 </script>
171 172 <style id="wp-img-auto-sizes-contain-inline-css"> 173img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 174/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 175</style> 176<link crossorigin='anonymous' rel='stylesheet' id='all-css-2-1' href='/_static/??-eJx9jEEOwjAMBD9EsKpWohfEW0IwxYnjRNhR1N83cEYcVzOz0KsLRQzFIDdXuW0kCp0eG5oCtkFLInTsOxjmyt5QQW1nPAfVE/w+YEpDi2jVh+S+659O8iQh28FemEdY2x1iaW/xTGqf8pav02WZ13VepiUeAShEFg==&cssminify=yes' type='text/css' media='all' /> 177<style id="wp-emoji-styles-inline-css"> 178 179 img.wp-smiley, img.emoji { 180 display: inline !important; 181 border: none !important; 182 box-shadow: none !important; 183 height: 1em !important; 184 width: 1em !important; 185 margin: 0 0.07em !important; 186 vertical-align: -0.1em !important; 187 background: none !important; 188 padding: 0 !important; 189 } 190/*# sourceURL=wp-emoji-styles-inline-css */ 191</style> 192<style id="wp-block-library-inline-css"> 193:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
193--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 194 195/*# sourceURL=/wp-content/plugins/gutenberg-core/v24.0.0/build/styles/block-library/common.min.css */ 196</style> 197<style id="wp-block-library-inline-css-extra"> 198.has-text-align-justify { 199 text-align:justify; 200} 201.has-text-align-justify{text-align:justify;} 202/*# sourceURL=wp-block-library-inline-css */ 203</style> 204 205<style id="classic-theme-styles-inline-css"> 206.wp-block-button__link{background-color:#32373c;border-radius:9999px;box-shadow:none;color:#fff;font-size:1.125em;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-file__button{background:#32373c;color:#fff}.wp-block-accordion-heading{margin:0}.wp-block-accordion-heading__toggle{background-color:inherit!important;color:inherit!important}.wp-block-accordion-heading__toggle:not(:focus-visible){outline:none}.wp-block-accordion-heading__toggle:focus,.wp-block-accordion-heading__toggle:hover{background-color:inherit!important;border:none;box-shadow:none;color:inherit;padding:var(--wp--preset--spacing--20,1em) 0;text-decoration:none}.wp-block-accordion-heading__toggle:focus-visible{outline:auto;outline-offset:0}.wp-block-tab:not(.has-text-color){color:inherit!important}.wp-block-tab:not(.has-background){background-color:inherit!important}.wp-block-tab:focus,.wp-block-tab:hover{text-decoration:none}.wp-block-tab:focus-visible{outline:auto;outline-offset:0} 207/*# sourceURL=/wp-content/plugins/gutenberg-core/v24.0.0/build/styles/block-library/classic.min.css */ 208</style> 209 210<style id="coblocks-inline-format-inline-css"> 211.uppercase{text-transform:uppercase} 212/*# sourceURL=coblocks-inline-format-inline-css */ 213</style> 214<link crossorigin='anonymous' rel='stylesheet' id='all-css-12-1' href='/_static/??-eJx9jEEOAiEQBD/kQECjeDC+ZWEnijIwYWA3/l72op689KFTVXplCCU3zE1z6reYRYfiUwlP0VYZpwxIJE4IFRd10HOU9iFA2iuhCiI7/ROiDt9WxfETT20jCOc4YUIa2D9t5eGA91xRBMZS7ATtPkTZvCtdzNEZt7f2fHq8Afl7R7w=&cssminify=yes' type='text/css' media='all' /> 215<style id="global-styles-inline-css"> 216:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
2160) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--albert-sans: 'Albert Sans', sans-serif;--wp--preset--font-family--alegreya: Alegreya, serif;--wp--preset--font-family--arvo: Arvo, serif;--wp--preset--font-family--bodoni-moda: 'Bodoni Moda', serif;--wp--preset--font-family--bricolage-grotesque: 'Bricolage Grotesque', sans-serif;--wp--preset--font-family--cabin: Cabin, sans-serif;--wp--preset--font-family--chivo: Chivo, sans-serif;--wp--preset--font-family--commissioner: Commissioner, sans-serif;--wp--preset--font-family--cormorant: Cormorant, serif;--wp--preset--font-family--courier-prime: 'Courier Prime', monospace;--wp--preset--font-family--crimson-pro: 'Crimson Pro', serif;--wp--preset--font-family--dm-mono: 'DM Mono', monospace;--wp--preset--font-family--dm-sans: 'DM Sans', sans-serif;--wp--preset--font-family--dm-serif-display: 'DM Serif Display', serif;--wp--preset--font-family--domine: Domine, serif;--wp--preset--font-family--eb-garamond: 'EB Garamond', serif;--wp--preset--font-family--epilogue: Epilogue, sans-serif;--wp--preset--font-family--fahkwang: Fahkwang, sans-serif;--wp--preset--font-family--figtree: Figtree, sans-serif;--wp--preset--font-family--fira-sans: 'Fira Sans', sans-serif;--wp--preset--font-family--fjalla-one: 'Fjalla One', sans-serif;--wp--preset--font-family--fraunces: Fraunces, serif;--wp--preset--font-family--gabarito: Gabarito, system-ui;--wp--preset--font-family--ibm-plex-mono: 'IBM Plex Mono', monospace;--wp--preset--font-family--ibm-plex-sans: 'IBM Plex Sans', sans-serif;--wp--preset--font-family--ibarra-real-nova: 'Ibarra Real Nova', serif;--wp--preset--font-family--instrument-serif: 'Instrument Serif', serif;--wp--preset--font-family--inter: Inter, sans-serif;--wp--preset--font-family--josefin-sans: 'Josefin Sans', sans-serif;--wp--preset--font-family--jost: Jost, sans-serif;--wp--preset--font-family--libre-baskerville: 'Libre Baskerville', serif;--wp--preset--font-family--libre-franklin: 'Libre Franklin', sans-serif;--wp--preset--font-family--literata: Literata, serif;--wp--preset--font-family--lora: Lora, serif;--wp--preset--font-family--merriweather: Merriweather, serif;--wp--preset--font-family--montserrat: Montserrat, sans-serif;--wp--preset--font-family--newsreader: Newsreader, serif;--wp--preset--font-family--noto-sans-mono: 'Noto Sans Mono', sans-serif;--wp--preset--font-family--nunito: Nunito, sans-serif;--wp--preset--font-family--open-sans: 'Open Sans', sans-serif;--wp--preset--font-family--overpass: Overpass, sans-serif;--wp--preset--font-family--pt-serif: 'PT Serif', serif;--wp--preset--font-family--petrona: Petrona, serif;--wp--preset--font-family--piazzolla: Piazzolla, serif;--wp--preset--font-family--playfair-display: 'Playfair Display', serif;--wp--preset--font-family--plus-jakarta-sans: 'Plus Jakarta Sans', sans-serif;--wp--preset--font-family--poppins: Poppins, sans-serif;--wp--preset--font-family--raleway: Raleway, sans-serif;--wp--preset--font-family--roboto: Roboto, sans-serif;--wp--preset--font-family--roboto-slab: 'Roboto Slab', serif;--wp--preset--font-family--rubik: Rubik, sans-serif;--wp--preset--font-family--rufina: Rufina, serif;--wp--preset--font-family--sora: Sora, sans-serif;--wp--preset--font-family--source-sans-3: 'Source Sans 3', sans-serif;--wp--preset--font-family--source-serif-4: 'Source Serif 4', serif;--wp--preset--font-family--space-mono: 'Space Mono', monospace;--wp--preset--font-family--syne: Syne, sans-serif;--wp--preset--font-family--texturina: Texturina, serif;--wp--preset--font-family--urbanist: Urbanist, sans-serif;--wp--preset--font-family--work-sans: 'Work Sans', sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
216.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-albert-sans-font-family{font-family: var(--wp--preset--font-family--albert-sans) !important;}.has-alegreya-font-family{font-family: var(--wp--preset--font-family--alegreya) !important;}.has-arvo-font-family{font-family: var(--wp--preset--font-family--arvo) !important;}.has-bodoni-moda-font-family{font-family: var(--wp--preset--font-family--bodoni-moda) !important;}.has-bricolage-grotesque-font-family{font-family: var(--wp--preset--font-family--bricolage-grotesque) !important;}.has-cabin-font-family{font-family: var(--wp--preset--font-family--cabin) !important;}.has-chivo-font-family{font-family: var(--wp--preset--font-family--chivo) !important;}.has-commissioner-font-family{font-family: var(--wp--preset--font-family--commissioner) !important;}.has-cormorant-font-family{font-family: var(--wp--preset--font-family--cormorant) !important;}.has-courier-prime-font-family{font-family: var(--wp--preset--font-family--courier-prime) !important;}.has-crimson-pro-font-family{font-family: var(--wp--preset--font-family--crimson-pro) !important;}.has-dm-mono-font-family{font-family: var(--wp--preset--font-family--dm-mono) !important;}.has-dm-sans-font-family{font-family: var(--wp--preset--font-family--dm-sans) !important;}.has-dm-serif-display-font-family{font-family: var(--wp--preset--font-family--dm-serif-display) !important;}.has-domine-font-family{font-family: var(--wp--preset--font-family--domine) !important;}.has-eb-garamond-font-family{font-family: var(--wp--preset--font-family--eb-garamond) !important;}.has-epilogue-font-family{font-family: var(--wp--preset--font-family--epilogue) !important;}.has-fahkwang-font-family{font-family: var(--wp--preset--font-family--fahkwang) !important;}.has-figtree-font-family{font-family: var(--wp--preset--font-family--figtree) !important;}.has-fira-sans-font-family{font-family: var(--wp--preset--font-family--fira-sans) !important;}.has-fjalla-one-font-family{font-family: var(--wp--preset--font-family--fjalla-one) !important;}.has-fraunces-font-family{font-family: var(--wp--preset--font-family--fraunces) !important;}.has-gabarito-font-family{font-family: var(--wp--preset--font-family--gabarito) !important;}.has-ibm-plex-mono-font-family{font-family: var(--wp--preset--font-family--ibm-plex-mono) !important;}.has-ibm-plex-sans-font-family{font-family: var(--wp--preset--font-family--ibm-plex-sans) !important;}.has-ibarra-real-nova-font-family{font-family: var(--wp--preset--font-family--ibarra-real-nova) !important;}.has-instrument-serif-font-family{font-family: var(--wp--preset--font-family--instrument-serif) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-josefin-sans-font-family{font-family: var(--wp--preset--font-family--josefin-sans) !important;}.has-jost-font-family{font-family: var(--wp--preset--font-family--jost) !important;}.has-libre-baskerville-font-family{font-family: var(--wp--preset--font-family--libre-baskerville) !important;}.has-libre-franklin-font-family{font-family: var(--wp--preset--font-family--libre-franklin) !important;}.has-literata-font-family{font-family: var(--wp--preset--font-family--literata) !important;}.has-lora-font-family{font-family: var(--wp--preset--font-family--lora) !important;}.has-merriweather-font-family{font-family: var(--wp--preset--font-family--merriweather) !important;}.has-montserrat-font-family{font-family: var(--wp--preset--font-family--montserrat) !important;}.has-newsreader-font-family{font-family: var(--wp--preset--font-family--newsreader) !important;}.has-noto-sans-mono-font-family{font-family: var(--wp--preset--font-family--noto-sans-mono) !important;}.has-nunito-font-family{font-family: var(--wp--preset--font-family--nunito) !important;}.has-open-sans-font-family{font-family: var(--wp--preset--font-family--open-sans) !important;}.has-overpass-font-family{font-family: var(--wp--preset--font-family--overpass) !important;}.has-pt-serif-font-family{font-family: var(--wp--preset--font-family--pt-serif) !important;}.has-petrona-font-family{font-family: var(--wp--preset--font-family--petrona) !important;}.has-piazzolla-font-family{font-family: var(--wp--preset--font-family--piazzolla) !important;}.has-playfair-display-font-family{font-family: var(--wp--preset--font-family--playfair-display) !important;}.has-plus-jakarta-sans-font-family{font-family: var(--wp--preset--font-family--plus-jakarta-sans) !important;}.has-poppins-font-family{font-family: var(--wp--preset--font-family--poppins) !important;}.has-raleway-font-family{font-family: var(--wp--preset--font-family--raleway) !important;}.has-roboto-font-family{font-family: var(--wp--preset--font-family--roboto) !important;}.has-roboto-slab-font-family{font-family: var(--wp--preset--font-family--roboto-slab) !important;}.has-rubik-font-family{font-family: var(--wp--preset--font-family--rubik) !important;}.has-rufina-font-family{font-family: var(--wp--preset--font-family--rufina) !important;}.has-sora-font-family{font-family: var(--wp--preset--font-family--sora) !important;}.has-source-sans-3-font-family{font-family: var(--wp--preset--font-family--source-sans-3) !important;}.has-source-serif-4-font-family{font-family: var(--wp--preset--font-family--source-serif-4) !important;}.has-space-mono-font-family{font-family: var(--wp--preset--font-family--space-mono) !important;}.has-syne-font-family{font-family: var(--wp--preset--font-family--syne) !important;}.has-texturina-font-family{font-family: var(--wp--preset--font-family--texturina) !important;}.has-urbanist-font-family{font-family: var(--wp--preset--font-family--urbanist) !important;}.has-work-sans-font-family{font-family: var(--wp--preset--font-family--work-sans) !important;} 217/*# sourceURL=global-styles-inline-css */ 218</style> 219 220<link crossorigin='anonymous' rel='stylesheet' id='all-css-14-1' href='/wp-content/themes/pub/journalist/style.css?m=1741693332i&cssminify=yes' type='text/css' media='all' /> 221<link crossorigin='anonymous' rel='stylesheet' id='all-css-16-1' href='/_static/??-eJzTLy/QTc7PK0nNK9HPLdUtyClNz8wr1i9KTcrJTwcy0/WTi5G5ekCujj52Temp+bo5+cmJJZn5eSgc3bScxMwikFb7XFtDE1NLExMLc0OTLACohS2q&cssminify=yes' type='text/css' media='all' /> 222<link crossorigin='anonymous' rel='stylesheet' id='print-css-17-1' href='/wp-content/mu-plugins/global-print/global-print.css?m=1465851035i&cssminify=yes' type='text/css' media='print' /> 223<style id="jetpack-global-styles-frontend-style-inline-css"> 224:root { --font-headings: unset; --font-base: unset; --font-headings-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif; --font-base-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;} 225/*# sourceURL=jetpack-global-styles-frontend-style-inline-css */ 226</style> 227<link crossorigin='anonymous' rel='stylesheet' id='all-css-20-1' href='/_static/??-eJyNjcsKAjEMRX/ImhmUURfip0inLW3GNCmmQfx7H7gRN+7ugcs5cGsuCPfEHaq5RpaRFZbUmw+XD4MaQ5VolBS0+GuKPsb7eyLndVBdwd+iM3KA2ZAiqAT05Eiy6Bf8KHtJ9RkvW8gks6fX4VSP426/mQ7TMA7LA38FSqA=&cssminify=yes' type='text/css' media='all' />
228<script id="wpcom-actionbar-placeholder-js-extra"> 229var actionbardata = {"siteID":"32635625","postID":"0","siteURL":"https://manicprogrammer.net","xhrURL":"https://manicprogrammer.net/wp-admin/admin-ajax.php","nonce":"8d3428c4ce","isLoggedIn":"","statusMessage":"","subsEmailDefault":"instantly","proxyScriptUrl":"https://s0.wp.com/wp-content/js/wpcom-proxy-request.js?m=1513050504i&ver=20211021","i18n":{"followedText":"New posts from this site will now appear in your \u003Ca href=\"https://wordpress.com/reader\"\u003EReader\u003C/a\u003E","foldBar":"Collapse this bar","unfoldBar":"Expand this bar","shortLinkCopied":"Copied to clipboard."}}; 230//# sourceURL=wpcom-actionbar-placeholder-js-extra 231</script>
vendor: 1 bytes, line 231
231
232<script id="jetpack-mu-wpcom-settings-js-before"> 233var JETPACK_MU_WPCOM_SETTINGS = {"assetsUrl":"https://s1.wp.com/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/sun/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/"}; 234//# sourceURL=jetpack-mu-wpcom-settings-js-before 235</script>
vendor: 1 bytes, line 235
235
236<script crossorigin='anonymous' type='text/javascript' src='/_static/??/wp-content/js/rlt-proxy.js,/wp-content/blog-plugins/wordads-classes/js/cmp/v2/cmp-non-gdpr.js?m=1780567333j'></script>
vendor: 1 bytes, line 236
236
237<script id="rlt-proxy-js-after"> 238 rltInitialize( {"token":null,"iframeOrigins":["https:\/\/widgets.wp.com"]} ); 239//# sourceURL=rlt-proxy-js-after 240</script>
240 241<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://manicprogrammer.wordpress.com/xmlrpc.php?rsd" /> 242<meta name="generator" content="WordPress.com" /> 243 244<!-- Jetpack Open Graph Tags --> 245<meta property="og:type" content="website" /> 246<meta property="og:title" content="TFS – if !blogClogged" /> 247<meta property="og:url" content="https://manicprogrammer.net/category/tfs/" /> 248<meta property="og:site_name" content="if !blogClogged" /> 249<meta property="og:image" content="https://s0.wp.com/i/blank.jpg?m=1383295312i" /> 250<meta property="og:image:width" content="200" /> 251<meta property="og:image:height" content="200" /> 252<meta property="og:image:alt" content="" /> 253<meta property="og:locale" content="en_US" /> 254<meta name="twitter:creator" content="@michaelruminer" /> 255<meta name="twitter:site" content="@michaelruminer" /> 256 257<!-- End Jetpack Open Graph Tags --> 258<link rel="shortcut icon" type="image/x-icon" href="https://s1.wp.com/i/favicon.ico?m=1713425267i" sizes="16x16 24x24 32x32 48x48" /> 259<link rel="icon" type="image/x-icon" href="https://s1.wp.com/i/favicon.ico?m=1713425267i" sizes="16x16 24x24 32x32 48x48" /> 260<link rel="apple-touch-icon" href="https://s2.wp.com/i/webclip.png?m=1713868326i" /> 261<link rel='openid.server' href='https://manicprogrammer.net/?openidserver=1' /> 262<link rel='openid.delegate' href='https://manicprogrammer.net/' /> 263<link rel="search" type="application/opensearchdescription+xml" href="https://manicprogrammer.net/osd.xml" title="if !blogClogged" /> 264<link rel="search" type="application/opensearchdescription+xml" href="https://s1.wp.com/opensearch.xml" title="WordPress.com" /> 265 <style id="wpcom-hotfix-masterbar-style"> 266 @media screen and (min-width: 783px) { 267 #wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { 268 margin-top: 5px; 269 } 270 } 271 </style> 272 <meta name="description" content="Posts about TFS written by Michael Ruminer" />
273<script> 274var wa_client = {}; wa_client.cmd = []; wa_client.config = { 'blog_id': 32635625, 'blog_language': 'en', 'is_wordads': false, 'hosting_type': 0, 'afp_account_id': null, 'afp_host_id': 5038568878849053, 'theme': 'pub/journalist', '_': { 'title': 'Advertisement', 'privacy_settings': 'Privacy Settings' }, 'formats': [ 'belowpost', 'bottom_sticky', 'sidebar_sticky_right', 'sidebar', 'gutenberg_rectangle', 'gutenberg_leaderboard', 'gutenberg_mobile_leaderboard', 'gutenberg_skyscraper' ] }; 275</script>
275 276
276<script type="text/javascript"> 277 278 window.doNotSellCallback = function() { 279 280 var linkElements = [ 281 'a[href="https://wordpress.com/?ref=footer_blog"]', 282 'a[href="https://wordpress.com/?ref=footer_website"]', 283 'a[href="https://wordpress.com/?ref=vertical_footer"]', 284 'a[href^="https://wordpress.com/?ref=footer_segment_"]', 285 ].join(','); 286 287 var dnsLink = document.createElement( 'a' ); 288 dnsLink.href = 'https://wordpress.com/advertising-program-optout/'; 289 dnsLink.classList.add( 'do-not-sell-link' ); 290 dnsLink.rel = 'nofollow'; 291 dnsLink.style.marginLeft = '0.5em'; 292 dnsLink.textContent = 'Do Not Sell or Share My Personal Information'; 293 294 var creditLinks = document.querySelectorAll( linkElements ); 295 296 if ( 0 === creditLinks.length ) { 297 return false; 298 } 299 300 Array.prototype.forEach.call( creditLinks, function( el ) { 301 el.insertAdjacentElement( 'afterend', dnsLink ); 302 }); 303 304 return true; 305 }; 306 307 </script>
307 308
308<script type="text/javascript"> 309 window.google_analytics_uacct = "UA-52447-2"; 310</script>
310 311
312<script type="text/javascript"> 313 var _gaq = _gaq || []; 314 _gaq.push(['_setAccount', 'UA-52447-2']); 315 _gaq.push(['_gat._anonymizeIp']); 316 _gaq.push(['_setDomainName', 'none']); 317 _gaq.push(['_setAllowLinker', true]); 318 _gaq.push(['_initData']); 319 _gaq.push(['_trackPageview']); 320 321 (function() { 322 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 323 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 324 (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga); 325 })(); 326</script>
326 327<style id="jetpack-subscriptions-inline-css"> 328#subscribe-email input { 329 width: 95%; 330} 331 332.comment-subscription-form { 333 margin-bottom: 1em; 334} 335 336.comment-subscription-form .subscribe-label { 337 display: inline !important; 338} 339 340/* 341Text meant only for screen readers. 342Provides support for themes that do not bundle this CSS yet. 343@see https://make.wordpress.org/accessibility/2015/02/09/hiding-text-for-screen-readers-with-wordpress-core/ 344***********************************/ 345.screen-reader-text { 346 border: 0; 347 clip-path: inset(50%); 348 height: 1px; 349 margin: -1px; 350 overflow: hidden; 351 padding: 0; 352 position: absolute !important; 353 width: 1px; 354 overflow-wrap: normal !important; 355} 356 357/*# sourceURL=/wp-content/mu-plugins/jetpack-plugin/sun/_inc/build/subscriptions/subscriptions.min.css */ 358</style> 359 360</head> 361 362<body class="archive category category-tfs category-342877 wp-theme-pubjournalist customizer-styles-applied jetpack-reblog-enabled"> 363<div id="container" class="group"> 364 365<h1><a href="https://manicprogrammer.net/">if !blogClogged</a></h1> 366<div id="bubble"><p>Software development and other stuff.</p></div> <!-- erase this line if you want to turn the bubble off --> 367 368<div id="content"> 369 370<h2 class="archive">Archive for the ‘<strong>TFS</strong>’ Category</h2> 371 372<div class="post-99 post type-post status-publish format-standard hentry category-tfs tag-regex tag-tfs tag-work-item-fields tag-work-item-type-definition"> 373 <h2 id="post-99"><a href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/" rel="bookmark">TFS Work Item Type Definition Field Name, RefName, Label Extract with Regex</a></h2> 374 <p class="comments"><a href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/#respond">leave a comment »</a></p> 375 376 <div class="main"> 377 <p>Iâm no whiz at Regular Expressions (Regex) which you will see later in this entry where I post some regex commands. A number of times I have wanted to extract field information from the TFS Work Item Type Definition (WITD) that can exported as XML. Usually it is with a client and I am wanting to find a list of custom or standard field names and perhaps also a list of the same or subset of fields used in the form. I like to compare the latter with the former to see which fields may be defined but not exposed.</p> 378<p>More times than not my WITD file layout is nicely consistent with every other time I have exported a WITD. Naturally Iâd like to use an xslt or a regex to extract the data I want. Actually, Iâd really like to use an xslt so I could reformat the output of the values I want into a tab delimited file so I could easy load into Excel or other table like structures. My xslt is even worse than my regex. So each time I end up with regex commands and the next time I canât recall where I put the file that I stored the regex in for future use. So I recreate them. I think I do get better at the regex every time I have to recreate them. When you look at the regex below youâll get an idea of how horrible I was if these are better. Maximum performance is not a concern. Iâm running each regex on demand against a handful of files.</p> 379<p>With all that said the caveats are that do to the use of the Lookahead and Lookbehind constructs and likely some other constructs these regex will not work with every editor, regex engine and probably not even C# regex. I have not tried them in Cygwin but I believe I tried them and they failed in Windows findstr command. They did work superbly well in <a title="Link to Edit Pad Pro website" href="http://www.editpadpro.com/" target="_blank">EditPad Pro</a> 7. This product comes from Just Great Software which is owned by Jan Goyvaerts (<a title="Jan Goyvaerts' Blog" href="http://www.regexguru.com/" target="_blank">blog</a>). Just Great Software makes not only EditPad Pro but Regex Buddy, PowerGrep, Regex Magic and some other tools I am not as familiar with. ***This is just a personal comment on EditPad Pro â I get nothing for saying this***. Since Notepad++ uses POSIX regex they most certainly donât work there. If you are wanting to use an editor and regex you should really check out EditPad Pro. Not only does it handle regex it handles crazy regex like mine which include lookbehinds containing multiple [0-n] character references. Most engines donât like indeterminate regex such as wildcard characters as part of a lookbehind. Other engines also usually donât like much more than the most rudimentary regex expression within a lookbehind. The one inside EditPad Pro handled lookbehinds with a non-collecting group containing text values separated by logical or e.g. (?:Microsoft|System) and multiple wildcard character references in the same lookbehind and didnât complain a bit. When EditPad Pro has highlighted the matching portions of the lines you can cut the highlighted parts from the document or you can copy the results. When copying the results you get a nice list with a line of results for each line of the parsed document. The copy will paste perfectly into Excel.</p> 380<p>Now for the regex. This is as much for me to be able to remember as it is for you to reference.</p> 381<div class="wlWriterEditableSmartContent" id="scid:C89E2BDB-ADD3-4f7a-9810-1B7EACF446C1:582b05f7-72d2-43e2-b493-bded0a61e39e" style="float:none;margin:0;display:inline;padding:0;"> 382<pre class="brush: perl; gutter: false;
382 pad-line-numbers: true; title: ; notranslate" title=""> 383#extract control custom field names 384(?<=<Control.*? FieldName=")(?!System|Microsoft)[^"]+ 385</pre> 386</div> 387<p>This regex gets the refname for each defined custom field in a work item definition. It looks for <Field (set for not case sensitive), some characters followed by name=â, some more characters followed by refname=â. All of that should come before (lookbehind) some characters that cannot be have the word System or Microsoft in it (the refname we are interested in for the line) and those characters of interest end with a â, but we donât select the ending quotation mark. The description is not exactly how the regex engine finds the text for a good understanding check out <a title="Link to regex internal operations" href="http://www.regular-expressions.info/lookaround.html" target="_blank">Regular-Expressions.info</a>. I wonât explain it correctly if I try and the explanations at Regular-Expressions.info are much better. This is also a website by Jan Goyvaerts.</p> 388<p>The above regex can break down in any number of ways. The most notable is that I used finding the token System or Microsoft as would be used in the refname of out-of-the-box fields. If you happened to use System or Microsoft as the leading name for your refname in a custom field then it will exclude it. The fix for that is to stop using one of those words as the starting of your refname. Frankly, I canât imagine anyone hitting that issue. Note that instead of having (?<=<Field.*?refname=â)*** ,where *** represents the regex shown just before the *** is partial and continues on, I included a name=â as part of the lookbehind. The inclusion of the name token is to differentiate the field nodes that make up the basic field definition and field nodes that may appear under state nodes, transition nodes and link column definitions. Without the name token being added in as a criteria for a match duplicate field names will appear as they are picked up from those other nodes.</p> 389<div id="codeSnippetWrapper" style="overflow:auto;cursor:text;font-size:8pt;border-top:silver 1px solid;"> 390<div id="codeSnippet" style="overflow:visible;font-size:10pt;"> 391<pre style="overflow:visible;font-size:10pt;"><span style="color:#008000;">#extract only custom field names</span></pre> 392<p><!--CRLF--></p> 393<pre style="overflow:visible;font-size:10pt;">(<span style="color:#0000ff;">?!</span><span style="color:#ff0000;">.</span><span style="color:#cc6633;">*</span>refname="(<span style="color:#0000ff;">?:</span>System|Microsoft))(<span style="color:#0000ff;">?<=</span><span style="color:#0000ff;"><</span>Field<span style="color:#ff0000;">.</span><span style="color:#cc6633;">*</span><span style="color:#cc6633;">?</span><span style="color:#ff0000;">\s</span>name=")[<span style="color:#cc6633;">^</span>"]+</pre> 394<p><!--CRLF--></p> 395</div> 396</div> 397<p>In this regex above I am extracting the field names for the custom field entries. This would be the value of the name attribute in the defining Field nodes and should match in order and in result count the custom field extract. This time to determine if the this is a potential matching node it will look at each line and do a lookforward. It will be searching for 0-n characters followed by refname=â and that followed by either System or Microsoft. The lookforward begins from the main expression not necessarily from the beginning of the line. In this instance it would look for the first quotation mark and each subsequent quotation mark. If on a quotation mark it looked forward and found it matched then it would then try the lookbehind criteria. It will see if the quotation mark is immediately preceded by some amount of characters that are immediately preceded by the name=â token preceded by a space \s preceded by 0-n characters, preceded by the text <Field. Once it can meet the look behind criteria and has already met the lookforward criteria then the text between name=â and the following quotation mark would be selected for the result set. (My standard caveats apply on my description of how it resolves the matches). The big thing to notice in this instance is that the lookforward matching expression is actually a negative criteria. (?= would indicate a look forward and a matching portion would meet the search criteria but in the case the (! indicates that if the text meets the matching criteria then the match is a success but the negative nature of the lookahead means that the lookahead failed then the match doesnât count. In this case that is how refnames starting with System or Microsoft are excluded from the results and the lookahead allows us to check those values that come after the actual text we wish to match for a result.</p> 398<p>One thing to note on the regex to extract custom field names. Notice in the lookbehind group (?<= that .*?\sname=â was used instead of .*?name=â . The difference is that instead of letting the expected space just before the name attribute be matched via the wildcard character token .*? an intentional space \s was used. Without the intentional space the name=â portion would have matched the attribute ref<span style="background-color:#ffff00;">name=â</span> . Due to the structure of the text word boundaries are not used in the matching. This allows for a search to be successful anytime it finds the correct sequence of characters together and [space]name=â matches .*?name=â as well as refname=â does. For this reason the intentional space was put in so that it could no longer match refname=â.</p> 399<div id="codeSnippetWrapper" style="overflow:auto;cursor:text;font-size:8pt;border-top:silver 1px solid;"> 400<div id="codeSnippet" style="overflow:visible;font-size:10pt;"> 401<pre style="overflow:visible;font-size:10pt;"><span style="color:#008000;">#extract control custom field names</span></pre> 402<p><!--CRLF--></p> 403<pre style="overflow:visible;font-size:10pt;">(<span style="color:#0000ff;">?<=</span><span style="color:#0000ff;"><</span>Control<span style="color:#ff0000;">.</span><span style="color:#cc6633;">*</span><span style="color:#cc6633;">?</span> FieldName=")(<span style="color:#0000ff;">?!</span>System|Microsoft)[<span style="color:#cc6633;">^</span>"]+</pre> 404<p><!--CRLF--></p> 405</div> 406</div> 407<p>I often like to extract out of the WITD the FieldNames for the form control entries. I do this to bump up against the refnames of the fields extracted in the prior regex examples so that I can see if any custom fields are declared but not surfaced onto the form. I do this because if I find such fields it means that most likely either the field is used for integration or some backend process or that the field is not val
407id. In this case itâs fairly straight forward. I have a regex with a lookbehind (?<=. The lookbehind will occur when it finds a â preceded by some text which cannot have the words System or Microsoft in them (Microsoft123 or System123 would qualify). If that criteria is found then it starts the lookbehind using FieldName and Control and an < among other potential characters in the string.</p> 408<div id="codeSnippetWrapper" style="overflow:auto;cursor:text;font-size:8pt;border-top:silver 1px solid;"> 409<div id="codeSnippet" style="overflow:visible;font-size:10pt;"> 410<pre style="overflow:visible;font-size:10pt;"><span style="color:#008000;">#extract control custom field labels</span></pre> 411<p><!--CRLF--></p> 412<pre style="overflow:visible;font-size:10pt;">(<span style="color:#0000ff;">?<=</span><span style="color:#0000ff;"><</span>Control<span style="color:#ff0000;">.</span><span style="color:#cc6633;">*</span><span style="color:#cc6633;">?</span>FieldName<span style="color:#ff0000;">.</span><span style="color:#cc6633;">*</span><span style="color:#cc6633;">?</span>Label=")(<span style="color:#0000ff;">?<</span>!FieldName="(<span style="color:#0000ff;">?:</span>System|Microsoft)<span style="color:#ff0000;">.</span>+<span style="color:#cc6633;">?</span>)[<span style="color:#cc6633;">^</span>"]+</pre> 413<p><!--CRLF--></p> 414</div> 415</div> 416<p>I often like to pull the custom field label used on the control as that name is often more informative to the meaning of the field than the fields name or refname. The regex shown just prior to this paragraph allows for the label to be extracted. The result order and result row count should match with the output from the regex to extract the control custom field names. In this instance the regex uses two lookbehind groups. One lookbehind is the normal positive lookbehind that is a success on a match while the other is a negative lookbehind that is a success when there is no match. In this case the negative lookbehind (?<! is trying to match to FieldName=âSystem or FieldName=âMicrosoft plus some additional characters. If it matches it fails the lookbehind which is what allows the regex to only extract the labels for custom fields. The positive lookbehind (?<= is defining the expression that should be matched for a success by the lookbehind which when found just prior to some text followed by a â will yield a result of the desired text not including the â [^â]+</p> 417<p>Without doubt these regular expressions can be improved upon. Iâm lucky to get them built at all it often seems. This may be of value to some folks like myself that have a desire to extract out specific information from the TFS work item type definition file without a lot of hassle. Oh and yes there are other ways to do these things without using regex but none are likely as fun.</p> 418<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"><div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-twitter"><a rel="nofollow noopener noreferrer" 419 data-shared="sharing-twitter-99" 420 class="share-twitter sd-button share-icon" 421 href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/?share=twitter" 422 target="_blank" 423 aria-labelledby="sharing-twitter-99" 424 > 425 <span id="sharing-twitter-99" hidden>Share on X (Opens in new window)</span> 426 <span>X</span> 427 </a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer" 428 data-shared="sharing-linkedin-99" 429 class="share-linkedin sd-button share-icon" 430 href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/?share=linkedin" 431 target="_blank" 432 aria-labelledby="sharing-linkedin-99" 433 > 434 <span id="sharing-linkedin-99" hidden>Share on LinkedIn (Opens in new window)</span> 435 <span>LinkedIn</span> 436 </a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer" 437 data-shared="sharing-facebook-99" 438 class="share-facebook sd-button share-icon" 439 href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/?share=facebook" 440 target="_blank" 441 aria-labelledby="sharing-facebook-99" 442 > 443 <span id="sharing-facebook-99" hidden>Share on Facebook (Opens in new window)</span> 444 <span>Facebook</span> 445 </a></li><li class="share-email"><a rel="nofollow noopener noreferrer" 446 data-shared="sharing-email-99" 447 class="share-email sd-button share-icon" 448 href="mailto:?subject=%5BShared%20Post%5D%20TFS%20Work%20Item%20Type%20Definition%20Field%20Name%2C%20RefN
448ame%2C%20Label%20Extract%20with%20Regex&body=https%3A%2F%2Fmanicprogrammer.net%2F2013%2F06%2F28%2Ftfs-work-item-type-definition-field-name-refname-label-extract-with-regex%2F&share=email" 449 target="_blank" 450 aria-labelledby="sharing-email-99" 451 data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you're having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="ec61420a5f" data-email-share-track-url="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/?share=email"> 452 <span id="sharing-email-99" hidden>Email a link to a friend (Opens in new window)</span> 453 <span>Email</span> 454 </a></li><li class="share-print"><a rel="nofollow noopener noreferrer" 455 data-shared="sharing-print-99" 456 class="share-print sd-button share-icon" 457 href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/?share=print" 458 target="_blank" 459 aria-labelledby="sharing-print-99" 460 > 461 <span id="sharing-print-99" hidden>Print (Opens in new window)</span> 462 <span>Print</span> 463 </a></li><li><a href="#" class="sharing-anchor sd-button share-more"><span>More</span></a></li><li class="share-end"></li></ul><div class="sharing-hidden"><div class="inner" style="display: none;"><ul><li class="share-reddit"><a rel="nofollow noopener noreferrer" 464 data-shared="sharing-reddit-99" 465 class="share-reddit sd-button share-icon" 466 href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/?share=reddit" 467 target="_blank" 468 aria-labelledby="sharing-reddit-99" 469 > 470 <span id="sharing-reddit-99" hidden>Share on Reddit (Opens in new window)</span> 471 <span>Reddit</span> 472 </a></li><li class="share-tumblr"><a rel="nofollow noopener noreferrer" 473 data-shared="sharing-tumblr-99" 474 class="share-tumblr sd-button share-icon" 475 href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/?share=tumblr" 476 target="_blank" 477 aria-labelledby="sharing-tumblr-99" 478 > 479 <span id="sharing-tumblr-99" hidden>Share on Tumblr (Opens in new window)</span> 480 <span>Tumblr</span> 481 </a></li><li class="share-pinterest"><a rel="nofollow noopener noreferrer" 482 data-shared="sharing-pinterest-99" 483 class="share-pinterest sd-button share-icon" 484 href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/?share=pinterest" 485 target="_blank" 486 aria-labelledby="sharing-pinterest-99" 487 > 488 <span id="sharing-pinterest-99" hidden>Share on Pinterest (Opens in new window)</span> 489 <span>Pinterest</span> 490 </a></li><li class="share-end"></li></ul></div></div></div></div></div><div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='like-post-wrapper-32635625-99-6ab4d65c31b4c' data-src='//widgets.wp.com/likes/index.html?ver=20260924#blog_id=32635625&post_id=99&origin=manicprogrammer.wordpress.com&obj_id=32635625-99-6ab4d65c31b4c&domain=manicprogrammer.net' data-name='like-post-frame-32635625-99-6ab4d65c31b4c' data-title='Like or Reblog'><div class='likes-widget-placeholder post-likes-widget-placeholder' style='height: 55px;'><span class='button'><span>Like</span></span> <span class='loading'>Loading...</span></div><span class='sd-text-color'></span><a class='sd-link-color'></a></div></div> </div> 491 492 <div class="meta group"> 493 <div class="signature"> 494 <p>Written by Michael Ruminer <span class="edit"></span></p> 495 <p>June 28, 2013 at 2:06 am</p> 496 </div> 497 <div class="tags"> 498 <p>Posted in <a href="https://manicprogrammer.net/category/tfs/" rel="category tag">TFS</a></p> 499 <p>Tagged with <a href="https://manicprogrammer.net/tag/regex/" rel="tag">regex</a>, <a href="https://manicprogrammer.net/tag/tfs/" rel="tag">TFS</a>, <a href="https://manicprogrammer.net/tag/work-item-fields/" rel="tag">work item fields</a>, <a href="https://manicprogrammer.net/tag/work-item-type-definition/" rel="tag">Work Item Type Definition</a></p>
499 </div> 500 </div> 501</div> 502<div class="post-97 post type-post status-publish format-standard hentry category-tfs"> 503 <h2 id="post-97"><a href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/" rel="bookmark">Beware the ReportingDataSourcePassword of TFSConfig</a></h2> 504 <p class="comments"><a href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/#respond">leave a comment »</a></p> 505 506 <div class="main"> 507 <p> </p> 508<p> </p> 509<p>More later⦠but beware the /ReportingDataSourcePassword:PASSWORD flag of TFSConfig RebuildWarehouse /all .</p> 510<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"><div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-twitter"><a rel="nofollow noopener noreferrer" 511 data-shared="sharing-twitter-97" 512 class="share-twitter sd-button share-icon" 513 href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/?share=twitter" 514 target="_blank" 515 aria-labelledby="sharing-twitter-97" 516 > 517 <span id="sharing-twitter-97" hidden>Share on X (Opens in new window)</span> 518 <span>X</span> 519 </a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer" 520 data-shared="sharing-linkedin-97" 521 class="share-linkedin sd-button share-icon" 522 href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/?share=linkedin" 523 target="_blank" 524 aria-labelledby="sharing-linkedin-97" 525 > 526 <span id="sharing-linkedin-97" hidden>Share on LinkedIn (Opens in new window)</span> 527 <span>LinkedIn</span> 528 </a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer" 529 data-shared="sharing-facebook-97" 530 class="share-facebook sd-button share-icon" 531 href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/?share=facebook" 532 target="_blank" 533 aria-labelledby="sharing-facebook-97" 534 > 535 <span id="sharing-facebook-97" hidden>Share on Facebook (Opens in new window)</span> 536 <span>Facebook</span> 537 </a></li><li class="share-email"><a rel="nofollow noopener noreferrer" 538 data-shared="sharing-email-97" 539 class="share-email sd-button share-icon" 540 href="mailto:?subject=%5BShared%20Post%5D%20Beware%20the%20ReportingDataSourcePassword%20of%20TFSConfig&body=https%3A%2F%2Fmanicprogrammer.net%2F2012%2F06%2F22%2Fbeware-the-reportingdatasourcepassword-of-tfsconfig%2F&share=email" 541 target="_blank" 542 aria-labelledby="sharing-email-97" 543 data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you're having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="0760c3ebf6" data-email-share-track-url="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/?share=email"> 544 <span id="sharing-email-97" hidden>Email a link to a friend (Opens in new window)</span> 545 <span>Email</span> 546 </a></li><li class="share-print"><a rel="nofollow noopener noreferrer" 547 data-shared="sharing-print-97" 548 class="share-print sd-button share-icon" 549 href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/?share=print" 550 target="_blank" 551 aria-labelledby="sharing-print-97" 552 > 553 <span id="sharing-print-97" hidden>Print (Opens in new window)</span> 554 <span>Print</span> 555 </a></li><li><a href="#" class="sharing-anchor sd-button share-more"><span>More</span></a></li><li class="share-end"></li></ul><div class="sharing-hidden"><div class="inner" style="display: none;"><ul><li class="share-reddit"><a rel="nofollow noopener noreferrer" 556 data-shared="sharing-reddit-97" 557 class="share-reddit sd-button share-icon" 558 href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/?share=reddit" 559 target="_blank" 560 aria-labelledby="sharing-reddit-97" 561 > 562 <span id="sharing-reddit-97" hidden>Share on Reddit (Opens in new window)</span> 563 <span>Reddit</span> 564 </a></li><li class="share-tumblr"><a rel="nofollow noopener noreferrer" 565 data-shared="sharing-tumblr-97" 566 class="share-tumblr sd-button share-icon" 567 href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/?share=tumblr" 568 target="_blank" 569 aria-labelledby="sharing-tumblr-97" 570 > 571 <span id="sharing-tumblr-97" hidden>Share on Tumblr (Opens in new window)</span> 572 <span>Tumblr</span> 573 </a></li><li class="share-pinterest"><a rel="nofollow noopener noreferrer" 574 data-shared="sharing-pinterest-97" 575 class="share-pinterest sd-button share-icon" 576 href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/?share=pinterest" 577 target="_blank" 578 aria-labelledby="sharing-pinterest-97" 579 > 580 <span id="sharing-pinterest-97" hidden>Share on Pinterest (Opens in new window)</span> 581 <span>Pinterest</span> 582 </a></li><li class="share-end"></li></ul></div></div></div></div></div><div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='like-post-wrapper-32635625-97-6ab4d65c32cd5' data-src='//widgets.wp.com/likes/index.html?ver=20260924#blog_id=32635625&post_id=97&origin=manicprogrammer.wordpress.com&obj_id=32635625-97-6ab4d65c32cd5&domain=manicprogrammer.net' data-name='like-post-frame-32635625-97-6ab4d65c32cd5' data-title='Like or Reblog'><div class='likes-widget-placeholder post-likes-widget-placeholder' style='height: 55px;'><span class='button'><span>Like</span></span> <span class='loading'>Loading...</span></div><span class='sd-text-color'></span><a class='sd-link-color'></a></div></div> </div> 583 584 <div class="meta group"> 585 <div class="signature"> 586 <p>
586Written by Michael Ruminer <span class="edit"></span></p> 587 <p>June 22, 2012 at 3:59 pm</p> 588 </div> 589 <div class="tags"> 590 <p>Posted in <a href="https://manicprogrammer.net/category/tfs/" rel="category tag">TFS</a></p> 591 </div> 592 </div> 593</div> 594 595<div class="navigation group"> 596 <div class="alignleft"></div> 597 <div class="alignright"></div> 598</div> 599 600</div> 601 602<div id="sidebar"> 603 604 605 <h3>Recent Posts</h3> 606 <ul> 607 <li> 608 <a href="https://manicprogrammer.net/2016/09/23/must-blog-soon/">Must blog soon</a> 609 </li> 610 <li> 611 <a href="https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/">TFS Work Item Type Definition Field Name, RefName, Label Extract with Regex</a> 612 </li> 613 <li> 614 <a href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/">Beware the ReportingDataSourcePassword of TFSConfig</a> 615 </li> 616 <li> 617 <a href="https://manicprogrammer.net/2012/05/31/list-of-ie-settings-for-better-resilience-during-coded-ui-playback/">List of IE Settings for Better Resilience During Coded UI Playback</a> 618 </li> 619 <li> 620 <a href="https://manicprogrammer.net/2012/04/24/sharepoint-2010-users-cannot-check-out-documents-with-ie/">SharePoint 2010 Users Cannot Check Out Documents With IE</a> 621 </li> 622 </ul> 623 624 <h3>Archives</h3> 625 <ul> 626 <li><a href='https://manicprogrammer.net/2016/09/'>September 2016</a></li> 627 <li><a href='https://manicprogrammer.net/2013/06/'>June 2013</a></li> 628 <li><a href='https://manicprogrammer.net/2012/06/'>June 2012</a></li> 629 <li><a href='https://manicprogrammer.net/2012/05/'>May 2012</a></li> 630 <li><a href='https://manicprogrammer.net/2012/04/'>April 2012</a></li> 631 <li><a href='https://manicprogrammer.net/2012/02/'>February 2012</a></li> 632 </ul> 633 634 <h3>Tags</h3><a href="https://manicprogrammer.net/tag/alm/" class="tag-cloud-link tag-link-393437 tag-link-position-1" style="font-size: 8pt;" aria-label="ALM (1 item)">ALM</a> 635<a href="https://manicprogrammer.net/tag/consulting/" class="tag-cloud-link tag-link-2253 tag-link-position-2" style="font-size: 8pt;" aria-label="Consulting (1 item)">Consulting</a> 636<a href="https://manicprogrammer.net/tag/dev-11/" class="tag-cloud-link tag-link-60643341 tag-link-position-3" style="font-size: 8pt;" aria-label="Dev 11 (1 item)">Dev 11</a> 637<a href="https://manicprogrammer.net/tag/issue/" class="tag-cloud-link tag-link-102753 tag-link-position-4" style="font-size: 8pt;" aria-label="Issue (1 item)">Issue</a> 638<a href="https://manicprogrammer.net/tag/issues/" class="tag-cloud-link tag-link-629 tag-link-position-5" style="font-size: 8pt;" aria-label="Issues (1 item)">Issues</a> 639<a href="https://manicprogrammer.net/tag/microsoft-agile-v6/" class="tag-cloud-link tag-link-86909225 tag-link-position-6" style="font-size: 8pt;" aria-label="Microsoft Agile V6 (1 item)">Microsoft Agile V6</a> 640<a href="https://manicprogrammer.net/tag/regex/" class="tag-cloud-link tag-link-54025 tag-link-position-7" style="font-size: 8pt;" aria-label="regex (1 item)">regex</a> 641<a href="https://manicprogrammer.net/tag/scrum-for-team-system/" class="tag-cloud-link tag-link-85667661 tag-link-position-8" style="font-size: 8pt;" aria-label="Scrum for Team System (1 item)">Scrum for Team System</a> 642<a href="https://manicprogrammer.net/tag/sharepoint-2010/" class="tag-cloud-link tag-link-16434198 tag-link-position-9" style="font-size: 8pt;" aria-label="SharePoint 2010 (1 item)">SharePoint 2010</a> 643<a href="https://manicprogrammer.net/tag/testing/" class="tag-cloud-link tag-link-12 tag-link-position-10" style="font-size: 8pt;" aria-label="Testing (1 item)">Testing</a> 644<a href="https://manicprogrammer.net/tag/tfs/" class="tag-cloud-link tag-link-342877 tag-link-position-11" style="font-size: 8pt;" aria-label="TFS (1 item)">TFS</a> 645<a href="https://manicprogrammer.net/tag/tfs-integration-platform/" class="tag-cloud-link tag-link-54115818 tag-link-position-12" style="font-size: 8pt;" aria-label="TFS Integration Platform (1 item)">TFS Integration Platform</a> 646<a href="https://manicprogrammer.net/tag/visual-studio/" class="tag-cloud-link tag-link-6678 tag-link-position-13" style="font-size: 8pt;" aria-label="Visual Studio (1 item)">Visual Studio</a> 647<a href="https://manicprogrammer.net/tag/work-item-fields/" class="tag-cloud-link tag-link-179041982 tag-link-position-14" style="font-size: 8pt;" aria-label="work item fields (1 item)">work item fields</a> 648<a href="https://manicprogrammer.net/tag/work-item-type-definition/" class="tag-cloud-link tag-link-179041980 tag-link-position-15" style="font-size: 8pt;" aria-label="Work Item Type Definition (1 item)">Work Item Type Definition</a><h3>Categories</h3> 649 <ul> 650 <li class="cat-item cat-item-94123195"><a href="https://manicprogrammer.net/category/coded-ui-testing/">Coded UI Testing</a> 651</li> 652 <li class="cat-item cat-item-86909216"><a href="https://manicprogrammer.net/category/dev-11-tfs/">Dev 11 TFS</a> 653</li> 654 <li class="cat-item cat-item-54"><a href="https://manicprogrammer.net/category/general/">General</a> 655</li> 656 <li class="cat-item cat-item-16434198"><a href="https://manicprogrammer.net/category/sharepoint-2010/">SharePoint 2010</a> 657</li> 658 <li class="cat-item cat-item-342877 current-cat"><a aria-current="page" href="https://manicprogrammer.net/category/tfs/">TFS</a> 659</li> 660 <li class="cat-item cat-item-54479206"><a href="https://manicprogrammer.net/category/tfs-migration/">TFS Migration</a> 661</li> 662 <li class="cat-item cat-item-1"><a href="https://manicprogrammer.net/category/uncategorized/">Uncategorized</a> 663</li> 664 </ul> 665 666 <h3>Meta</h3> 667 <ul> 668 <li><a class="click-register" href="https://wordpress.com/start?ref=wplogin">Create account</a></li> <li>
668<a href="https://manicprogrammer.wordpress.com/wp-login.php">Log in</a></li> 669 <li><a href="https://manicprogrammer.net/feed/">Entries feed</a></li> 670 <li><a href="https://manicprogrammer.net/comments/feed/">Comments feed</a></li> 671 672 <li><a href="https://wordpress.com/" title="Powered by WordPress, state-of-the-art semantic personal publishing platform.">WordPress.com</a></li> 673 </ul> 674 675 <h3><label for="subscribe-field">Follow Blog via Email</label></h3> 676 677 <div class="wp-block-jetpack-subscriptions__container"> 678 <form 679 action="https://subscribe.wordpress.com" 680 method="post" 681 accept-charset="utf-8" 682 data-blog="32635625" 683 data-post_access_level="everybody" 684 id="subscribe-blog" 685 > 686 <p>Enter your email address to follow this blog and receive notifications of new posts by email.</p> 687 <p id="subscribe-email"> 688 <label 689 id="subscribe-field-label" 690 for="subscribe-field" 691 class="screen-reader-text" 692 > 693 Email Address: </label> 694 695 <input 696 type="email" 697 name="email" 698 autocomplete="email" 699 700 style="width: 95%; padding: 1px 10px" 701 placeholder="Email Address" 702 value="" 703 id="subscribe-field" 704 required 705 /> </p> 706 707 <p id="subscribe-submit" 708 > 709 <input type="hidden" name="action" value="subscribe"/> 710 <input type="hidden" name="blog_id" value="32635625"/> 711 <input type="hidden" name="source" value="https://manicprogrammer.net/category/tfs/"/> 712 <input type="hidden" name="sub-type" value="widget"/> 713 <input type="hidden" name="redirect_fragment" value="subscribe-blog"/> 714 <input type="hidden" id="_wpnonce" name="_wpnonce" value="0e475efbbe" /> <button type="submit" 715 class="wp-block-button__link" 716 > 717 Follow </button> 718 </p> 719 </form> 720 </div> 721 722 723 724</div> 725 726</div> 727 728<div id="footer"> 729 <p><a href="https://wordpress.com/?ref=footer_blog" rel="nofollow">Blog at WordPress.com.</a> </p> 730</div> 731<!-- -->
732<script type="speculationrules"> 733{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/files/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/pub/journalist/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 734</script>
vendor: 1 bytes, line 734
734
735<script id="grofiles-cards-js" src="//0.gravatar.com/js/hovercards/hovercards.min.js?ver=202639d1133547e8a1f2801609f51cef12522abe7f6647d869e9fbc974fe356a37e613"></script>
vendor: 1 bytes, line 735
735
736<script id="wpgroho-js-extra"> 737var WPGroHo = {"my_hash":""}; 738//# sourceURL=wpgroho-js-extra 739</script>
vendor: 1 bytes, line 739
739
740<script crossorigin='anonymous' type='text/javascript' src='/wp-content/mu-plugins/gravatar-hovercards/wpgroho.js?m=1610363240i'></script>
740 741 742
742<script> 743 // Initialize and attach hovercards to all gravatars 744 ( function() { 745 function init() { 746 if ( typeof Gravatar === 'undefined' ) { 747 return; 748 } 749 750 if ( typeof Gravatar.init !== 'function' ) { 751 return; 752 } 753 754 Gravatar.profile_cb = function ( hash, id ) { 755 WPGroHo.syncProfileData( hash, id ); 756 }; 757 758 Gravatar.my_hash = WPGroHo.my_hash; 759 Gravatar.init( 760 'body', 761 '#wp-admin-bar-my-account', 762 { 763 i18n: { 764 'Edit your profile â': 'Edit your profile â', 765 'View profile â': 'View profile â', 766 'Contact': 'Contact', 767 'Send money': 'Send money', 768 'Sorry, we are unable to load this Gravatar profile.': 'Sorry, we are unable to load this Gravatar profile.', 769 'Gravatar not found.': 'Gravatar not found.', 770 'Too Many Requests.': 'Too Many Requests.', 771 'Internal Server Error.': 'Internal Server Error.', 772 'Is this you?': 'Is this you?', 773 'Claim your free profile.': 'Claim your free profile.', 774 'Email': 'Email', 775 'Home Phone': 'Home Phone', 776 'Work Phone': 'Work Phone', 777 'Cell Phone': 'Cell Phone', 778 'Contact Form': 'Contact Form', 779 'Calendar': 'Calendar', 780 }, 781 } 782 ); 783 } 784 785 if ( document.readyState !== 'loading' ) { 786 init(); 787 } else { 788 document.addEventListener( 'DOMContentLoaded', init ); 789 } 790 } )(); 791 </script>
791 792 793 <div style="display:none"> 794 </div> 795 <!-- CCPA [start] --> 796
796<script type="text/javascript"> 797 ( function () { 798 799 var setupPrivacy = function() { 800 801 // Minimal Mozilla Cookie library 802 // https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework 803 var cookieLib = window.cookieLib = {getItem:function(e){return e&&decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null},setItem:function(e,o,n,t,r,i){if(!e||/^(?:expires|max\-age|path|domain|secure)$/i.test(e))return!1;var c="";if(n)switch(n.constructor){case Number:c=n===1/0?"; expires=Fri, 31 Dec 9999 23:59:59 GMT":"; max-age="+n;break;case String:c="; expires="+n;break;case Date:c="; expires="+n.toUTCString()}return"rootDomain"!==r&&".rootDomain"!==r||(r=(".rootDomain"===r?".":"")+document.location.hostname.split(".").slice(-2).join(".")),document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(o)+c+(r?"; domain="+r:"")+(t?"; path="+t:"")+(i?"; secure":""),!0}}; 804 805 // Implement IAB USP API. 806 window.__uspapi = function( command, version, callback ) { 807 808 // Validate callback. 809 if ( typeof callback !== 'function' ) { 810 return; 811 } 812 813 // Validate the given command. 814 if ( command !== 'getUSPData' || version !== 1 ) { 815 callback( null, false ); 816 return; 817 } 818 819 // Check for GPC. If set, override any stored cookie. 820 if ( navigator.globalPrivacyControl ) { 821 callback( { version: 1, uspString: '1YYN' }, true ); 822 return; 823 } 824
825 // Check for cookie. 826 var consent = cookieLib.getItem( 'usprivacy' ); 827 828 // Invalid cookie. 829 if ( null === consent ) { 830 callback( null, false ); 831 return; 832 } 833 834 // Everything checks out. Fire the provided callback with the consent data. 835 callback( { version: 1, uspString: consent }, true ); 836 }; 837 838 // Initialization. 839 document.addEventListener( 'DOMContentLoaded', function() { 840 841 // Internal functions. 842 var setDefaultOptInCookie = function() { 843 var value = '1YNN'; 844 var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; 845 cookieLib.setItem( 'usprivacy', value, 365 * 24 * 60 * 60, '/', domain ); 846 }; 847 848 var setDefaultOptOutCookie = function() { 849 var value = '1YYN'; 850 var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; 851 cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain ); 852 }; 853 854 var setDefaultNotApplicableCookie = function() { 855 var value = '1---'; 856 var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; 857 cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain ); 858 }; 859 860 var setCcpaAppliesCookie = function( applies ) { 861 var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; 862 cookieLib.setItem( 'ccpa_applies', applies, 24 * 60 * 60, '/', domain ); 863 } 864 865 var maybeCallDoNotSellCallback = function() { 866 if ( 'function' === typeof window.doNotSellCallback ) { 867 return window.doNotSellCallback(); 868 } 869 870 return false; 871 } 872 873 // Look for usprivacy cookie first. 874 var usprivacyCookie = cookieLib.getItem( 'usprivacy' ); 875 876 // Found a usprivacy cookie. 877 if ( null !== usprivacyCookie ) { 878 879 // If the cookie indicates that CCPA does not apply, then bail. 880 if ( '1---' === usprivacyCookie ) { 881 return; 882 } 883 884 // CCPA applies, so call our callback to add Do Not Sell link to the page. 885 maybeCallDoNotSellCallback(); 886 887 // We're all done, no more processing needed. 888 return; 889 } 890 891 // We don't have a usprivacy cookie, so check to see if we have a CCPA applies cookie. 892 var ccpaCookie = cookieLib.getItem( 'ccpa_applies' ); 893 894 // No CCPA applies cookie found, so we'll need to geolocate if this visitor is from California. 895 // This needs to happen client side because we do not have region geo data in our $SERVER headers, 896 // only country data -- therefore we can't vary cache on the region. 897 if ( null === ccpaCookie ) { 898 899 var request = new XMLHttpRequest(); 900 request.open( 'GET', 'https://public-api.wordpress.com/geo/', true ); 901 902 request.onreadystatechange = function () { 903 if ( 4 === this.readyState ) { 904 if ( 200 === this.status ) { 905 906 // Got a geo response. Parse out the region data. 907 var data = JSON.parse( this.response ); 908 var region = data.region ? data.region.toLowerCase() : ''; 909 var ccpa_applies = ['california', 'colorado', 'connecticut', 'delaware', 'indiana', 'iowa', 'montana', 'new jersey', 'oregon', 'tennessee', 'texas', 'utah', 'virginia'].indexOf( region ) > -1; 910 // Set CCPA applies cookie. This keeps us from having to make a geo request too frequently. 911 setCcpaAppliesCookie( ccpa_applies ); 912 913 // Check if CCPA applies to set the proper usprivacy cookie. 914 if ( ccpa_applies ) { 915 if ( maybeCallDoNotSellCallback() ) { 916 // Do Not Sell link added, so set default opt-in. 917 setDefaultOptInCookie(); 918 } else { 919 // Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe. 920 setDefaultOptOutCookie(); 921 } 922 } else { 923 // CCPA does not apply. 924 setDefaultNotApplicableCookie(); 925 } 926 } else { 927 // Could not geo, so let's assume for now that CCPA applies to be safe. 928 setCcpaAppliesCookie( true ); 929 if ( maybeCallDoNotSellCallback() ) { 930 // Do Not Sell link added, so set default opt-in. 931 setDefaultOptInCookie(); 932 } else { 933 // Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe. 934 setDefaultOptOutCookie(); 935 } 936 } 937 } 938 }; 939 940 // Send the geo request. 941 request.send(); 942 } else { 943 // We found a CCPA applies cookie. 944 if ( ccpaCookie === 'true' ) { 945 if ( maybeCallDoNotSellCallback() ) { 946 // Do Not Sell link added, so set default opt-in. 947 setDefaultOptInCookie(); 948 } else { 949 // Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe. 950 setDefaultOptOutCookie(); 951 } 952 } else { 953 // CCPA does not apply. 954 setDefaultNotApplicableCookie(); 955 } 956 } 957 } ); 958 }; 959 960 // Kickoff initialization. 961 if ( window.defQueue && defQueue.isLOHP && defQueue.isLOHP === 2020 ) { 962 defQueue.items.push( setupPrivacy ); 963 } else { 964 setupPrivacy(); 965 } 966 967 } )(); 968 </script>
968 969 970 <!-- CCPA [end] --> 971 <div class="widget widget_eu_cookie_law_widget"> 972<div 973 class="hide-on-button ads-active" 974 data-hide-timeout="30" 975 data-consent-expiration="180" 976 id="eu-cookie-law" 977 style="display: none" 978> 979 <form method="post"> 980 <input type="submit" value="Close and accept" class="accept" /> 981 982 Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use. <br /> 983To find out more, including how to control cookies, see here: 984 <a href="https://automattic.com/cookies/" rel="nofollow"> 985 Cookie Policy </a> 986 </form> 987</div> 988</div> <div id="actionbar" dir="ltr" style="display: none;" 989 class="actnbr-pub-journalist" role="region" aria-label="Site actions"> 990 <span class="actnbr-live" aria-live="polite"></span> 991 <ul> 992 <li class="actnbr-btn actnbr-hidden"> 993 <a class="actnbr-action actnbr-actn-follow " href="" role="button" aria-haspopup="dialog" aria-expanded="false"> 994 <svg class="actnbr-icon actnbr-icon-bell" width="20" height="20" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M17 11.5c0 1.353.17 2.368.976 3 .266.209.602.376 1.024.5v1H5v-1c.422-.124.757-.291 1.024-.5.806-.632.976-1.647.976-3V9c0-2.8 2.2-5 5-5s5 2.2 5 5v2.5ZM15.5 9v2.5c0 .93.066 1.98.515 2.897l.053.103H7.932a4.018 4.018 0 0 0 .053-.103c.449-.917.515-1.967.515-2.897V9c0-1.972 1.528-3.5 3.5-3.5s3.5 1.528 3.5 3.5Zm-5.492 9.008c0-.176.023-.346.065-.508h3.854A1.996 1.996 0 0 1 12 20c-1.1 0-1.992-.892-1.992-1.992Z"/></svg> <span>Subscribe</span> 995 </a> 996 <a class="actnbr-action actnbr-actn-following no-display" href="" role="button"> 997 <svg class="actnbr-icon actnbr-icon-check" width="20" height="20" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" style="fill: none" stroke="currentColor" stroke-width="1.5"><path d="M7 12L10 15L17 8" vector-effect="non-scaling-stroke"/></svg> <span>Subscribed</span> 998 </a> 999 <div class="actnbr-popover actnbr-panel actnbr-notice" id="follow-bubble" role="dialog" aria-label="Subscribe to if !blogClogged"> 1000 <div class="actnbr-follow-bubble"> 1001 <div class="actnbr-panel__group"><a class="actnbr-menu__item actnbr-sitename" href="https://manicprogrammer.net"><img loading='lazy' alt='' src='https://s-ssl.wordpress.com/i/logo/wpcom-gray-white.png?m=1479929237i' srcset='https://s-ssl.wordpress.com/i/logo/wpcom-gray-white.png 1x' class='avatar avatar-50' height='50' width='50' /><span class="actnbr-menu__label">if !blogClogged</span></a></div> <div class="actnbr-panel__group"> 1002 <div class="actnbr-message no-display" aria-live="polite"></div> 1003 <form method="post" action="https://subscribe.wordpress.com" accept-charset="utf-8" class="no-display"> 1004 <input type="email" name="email" placeholder="Want updates? Enter your email" class="actnbr-email-field" aria-label="Email address" /> 1005 <input type="hidden" name="action" value="subscribe" /> 1006 <input type="hidden" name="blog_id" value="32635625" /> 1007 <input type="hidden" name="source" value="https://manicprogrammer.net/category/tfs/" /> 1008 <input type="hidden" name="sub-type" value="actionbar-follow" /> 1009 <input type="hidden" id="_wpnonce" name="_wpnonce" value="0e475efbbe" /> <button type="submit" class="actnbr-button">Sign me up</button> 1010 </form> 1011 <p class="actnbr-login-nudge"> 1012 Have a WordPress.com account? <a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fmanicprogrammer.net%252F2013%252F06%252F28%252Ftfs-work-item-type-definition-field-name-refname-label-extract-with-regex%252F">Log in now.</a> </p> 1013 </div> 1014 </div> 1015 </div> 1016 </li> 1017 <li class="actnbr-ellipsis actnbr-hidden"> 1018 <button type="button" class="actnbr-more-toggle" aria-haspopup="true" aria-expanded="false" aria-label="More options"> 1019 <svg class="actnbr-icon actnbr-icon-more-horizontal" width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path d="M11 13h2v-2h-2v2zm-6 0h2v-2H5v2zm12-2v2h2v-2h-2z"/></svg> </button> 1020 <div class="actnbr-popover actnbr-menu" role="menu" aria-label="Site options"> 1021 <div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-sitename" href="https://manicprogrammer.net"><img loading='lazy' alt='' src='https://s-ssl.wordpress.com/i/logo/wpcom-gray-white.png?m=1479929237i' srcset='https://s-ssl.wordpress.com/i/logo/wpcom-gray-white.png 1x' class='avatar avatar-50' height='50' width='50' /><span class="actnbr-menu__label">if !blogClogged</span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-reader" href="https://wordpress.com/reader/feeds/1658455"><span class="actnbr-menu__label">View site in Reader</span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-subs" href="https://subscribe.wordpress.com/"><span class="actnbr-menu__label">Manage subscriptions</span></a><a role="menuitem" class="actnbr-menu__item actnbr-signup" href="https://wordpress.com/start/"><span class="actnbr-menu__label">Sign up</span></a><a role="menuitem" class="actnbr-menu__item actnbr-login" href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fmanicprogrammer.net%252F2013%252F06%252F28%252Ftfs-work-item-type-definition-field-name-refname-label-extract-with-regex%252F"><span class="actnbr-menu__label">Log in</span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item flb-report" href="https://wordpress.com/abuse/?report_url=https://manicprogrammer.net" target="_blank" rel="noopener noreferrer"><span class="actnbr-menu__label">Report this content</span><span class="actnbr-menu__icon"><svg class="actnbr-icon actnbr-icon-external" width="18" height="18" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" fill="currentColor"><path d="M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"/></svg></span></a></div><div class="actnbr-menu__group" role="group"><a role="menuitem" class="actnbr-menu__item actnbr-fold" href=""><span class="actnbr-menu__label">Collapse this bar</span></a></div> </div> 1022 </li> 1023 </ul> 1024 </div> 1025
1025<script> 1026window.addEventListener( "DOMContentLoaded", function () { 1027 var link = document.createElement( "link" ); 1028 link.href = "\/wp-content\/mu-plugins\/jetpack-plugin\/sun\/jetpack_vendor\/automattic\/jetpack-newsletter\/src\/..\/build\/action-bar.css?ver=9e2715140ce0af99d983"; 1029 link.rel = "stylesheet"; 1030 document.head.appendChild( link ); 1031 1032 var script = document.createElement( "script" ); 1033 script.src = "\/wp-content\/mu-plugins\/jetpack-plugin\/sun\/jetpack_vendor\/automattic\/jetpack-newsletter\/src\/..\/build\/action-bar.js?ver=9e2715140ce0af99d983"; 1034 document.body.appendChild( script ); 1035 } ); 1036</script>
1036 1037 1038
1038<script type="text/javascript"> 1039 window.WPCOM_sharing_counts = {"https://manicprogrammer.net/2013/06/28/tfs-work-item-type-definition-field-name-refname-label-extract-with-regex/":99,"https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/":97}; 1040 </script>
1040 1041
1041<script crossorigin='anonymous' type='text/javascript' src='/_static/??-eJzTLy/QTc7PK0nNK9EvyClNz8wr1i+uzCtJrMjITM/IAeKS1CJMEWP94uSizIISoOIM5/yiVL2sYh19yo1yKiotzghILcoBmmefa2toam5gZGBiaWGaBQDSOUAZ'></script>
vendor: 1 bytes, line 1041
1041
1042<script type='text/javascript'> 1043 (function(){ 1044 var corecss = document.createElement('link'); 1045 var themecss = document.createElement('link'); 1046 var corecssurl = "/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0.9b"; 1047 if ( corecss.setAttribute ) { 1048 corecss.setAttribute( "rel", "stylesheet" ); 1049 corecss.setAttribute( "type", "text/css" ); 1050 corecss.setAttribute( "href", corecssurl ); 1051 } else { 1052 corecss.rel = "stylesheet"; 1053 corecss.href = corecssurl; 1054 } 1055 document.head.appendChild( corecss ); 1056 var themecssurl = "/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shThemeDefault.css?m=1363304414i&ver=3.0.9b"; 1057 if ( themecss.setAttribute ) { 1058 themecss.setAttribute( "rel", "stylesheet" ); 1059 themecss.setAttribute( "type", "text/css" ); 1060 themecss.setAttribute( "href", themecssurl ); 1061 } else { 1062 themecss.rel = "stylesheet"; 1063 themecss.href = themecssurl; 1064 } 1065 document.head.appendChild( themecss ); 1066 })(); 1067 SyntaxHighlighter.config.strings.expandSource = '+ expand source'; 1068 SyntaxHighlighter.config.strings.help = '?'; 1069 SyntaxHighlighter.config.strings.alert = 'SyntaxHighlighter\n\n'; 1070 SyntaxHighlighter.config.strings.noBrush = 'Can\'t find brush for: '; 1071 SyntaxHighlighter.config.strings.brushNotHtmlScript = 'Brush wasn\'t configured for html-script option: '; 1072 SyntaxHighlighter.defaults['pad-line-numbers'] = false; 1073 SyntaxHighlighter.defaults['toolbar'] = false; 1074 SyntaxHighlighter.all(); 1075 1076 // Infinite scroll support 1077 document.addEventListener( 'is.post-load', function () { 1078 SyntaxHighlighter.highlight(); 1079 } ); 1080</script>
1080 1081 1082
1082<script type="text/javascript"> 1083 (function () { 1084 var wpcom_reblog = { 1085 source: 'toolbar', 1086 1087 toggle_reblog_box_flair: function (obj_id, post_id) { 1088 1089 // Go to site selector. This will redirect to their blog if they only have one. 1090 const postEndpoint = `https://wordpress.com/post`; 1091 1092 // Ideally we would use the permalink here, but fortunately this will be replaced with the 1093 // post permalink in the editor. 1094 const originalURL = `${ document.location.href }?page_id=${ post_id }`; 1095 1096 const url = 1097 postEndpoint + 1098 '?url=' + 1099 encodeURIComponent( originalURL ) + 1100 '&is_post_share=true' + 1101 '&v=5'; 1102 1103 const redirect = function () { 1104 if ( 1105 ! window.open( url, '_blank' ) 1106 ) { 1107 location.href = url; 1108 } 1109 }; 1110 1111 if ( /Firefox/.test( navigator.userAgent ) ) { 1112 setTimeout( redirect, 0 ); 1113 } else { 1114 redirect(); 1115 } 1116 }, 1117 }; 1118 1119 window.wpcom_reblog = wpcom_reblog; 1120 })(); 1121 </script>
vendor: 1 bytes, line 1121
1121
1122<script id="sharing-js-js-extra"> 1123var sharing_js_options = {"lang":"en","counts":"1","is_stats_active":"1"}; 1124//# sourceURL=sharing-js-js-extra 1125</script>
vendor: 1 bytes, line 1125
1125
1126<script crossorigin='anonymous' type='text/javascript' src='/_static/??-eJx9T9sKwjAM/SFrUAbTB/FTJGtDly5t59I6/HuLCIoPewicnBscWGdjcyqUCgySvZmlek4Ka14cOjVWUJUUQqOwiHkc90F38BOL9Rti56koUG1qnpiM4AqF4ixY6I/f6BGemvteqdKIyQktG+ZAZUY7fX7QmuDGycJQWRzoiAu1Je75hpz8PnJqddd4OfSn/tx17cILdGxh7Q=='></script>
vendor: 1 bytes, line 1126
1126
1127<script id="sharing-js-js-after"> 1128window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {}; 1129window.WPCOM_sharing_popups[ "twitter" ] = "menubar=1,resizable=1,width=600,height=350"; 1130window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {}; 1131window.WPCOM_sharing_popups[ "linkedin" ] = "menubar=1,resizable=1,width=580,height=450"; 1132window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {}; 1133window.WPCOM_sharing_popups[ "facebook" ] = "menubar=1,resizable=1,width=600,height=400"; 1134window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {}; 1135window.WPCOM_sharing_popups[ "tumblr" ] = "menubar=1,resizable=1,width=450,height=450"; 1136//# sourceURL=sharing-js-js-after 1137</script>
vendor: 1 bytes, line 1137
1137
1138<script id="wp-emoji-settings" type="application/json"> 1139{"baseUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/","ext":".png","svgUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/svg/","svgExt":".svg","source":{"concatemoji":"/wp-includes/js/wp-emoji-release.min.js?m=1783090810i&ver=7.1.1-alpha-63587"}} 1140</script>
vendor: 1 bytes, line 1140
1140
1141<script type="module"> 1142/*! This file is auto-generated */ 1143var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); 1144//# sourceURL=/wp-includes/js/wp-emoji-loader.min.js 1145</script>
1145 1146 <iframe src='https://widgets.wp.com/likes/master.html?ver=20260924#ver=20260924' scrolling='no' id='likes-master' name='likes-master' style='display:none;'></iframe> 1147 <div id='likes-other-gravatars' role="dialog" aria-hidden="true" tabindex="-1"><div class="likes-text"><span>%d</span></div><ul class="wpl-avatars sd-like-gravatars"></ul></div> 1148
1148<script src="//stats.wp.com/w.js?69" defer></script>
1148
1148<script type="text/javascript"> 1149_tkq = window._tkq || []; 1150_stq = window._stq || []; 1151_tkq.push(['storeContext', {'blog_id':'32635625','blog_tz':'-4','user_lang':'en','blog_lang':'en','user_id':'0'}]); 1152 // Prevent sending pageview tracking from WP-Admin pages. 1153 _stq.push(['view', {'blog':'32635625','v':'wpcom','tz':'-4','user_id':'0','arch_cat':'tfs','arch_results':'2','subd':'manicprogrammer'}]); 1154 _stq.push(['extra', {'crypt':'UE5XaGUuOTlwaD85flAmcm1mcmZsaDhkV11YdWtpP0NsWnVkPS9sL0ViLndld3BuVT01Uj14Ti1yYTBnX3xuYUQ3Qz1oblZbVHV3MTZ6aj0wcy01aFV6Y1RhRDhuPzkwMncsNm1ad0EldTZtNXh1JSxyYW44MzAxMFBndmg2Wy16eVsyMS1CX1JPdG58TnFKXWcxSmtYeUltSXZIMnFjdHxiS2luWWVVS3ZUU285JmVCTlE1UmNnSXctUEZaTC1iLGF8ckxxfHlfVVhbSGJ1W0JwS1RkMmMmZ2wxNnRsaUQxXzZDXUYsen5nbHh5K2Zrekd1TEtYOUVbJkw9PTQ/MjN6ZmM2LWxEMUwsXVdfL01oYUZEOC54U2swdEJrc10sekE1ZW9UTVR1ZTYxZ3p+QT9ybHJaUH4wMXBwWGZWS2lQOVtvaC9rVk1wNVJwaT9acT1fUFMmWGZJWU5tUjdnb29OcjQla213Lg=='}]); 1155_stq.push([ 'clickTrackerInit', '32635625', '0' ]); 1156</script>
1156 1157<noscript><img src="https://pixel.wp.com/b.gif?v=noscript" style="height:1px;width:1px;overflow:hidden;position:absolute;bottom:1px;" alt="" /></noscript> 1158<meta id="bilmur" property="bilmur:data" content="" data-provider="wordpress.com" data-service="simple" data-site-tz="America/New_York" data-custom-props="{"logged_in":"0","wptheme":"pub\/journalist","wptheme_is_block":"0"}" > 1159
1159<script defer src="/wp-content/js/bilmur.min.js?i=19&m=202639"></script>
1159 1160</body> 1161</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.