PageSourceSearch

https://manicprogrammer.net/category/tfs/

html manicprogrammer.net collected 2026-10-07 19:05:42 UTC 101,091 bytes, 1,161 lines download raw bytes

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 &raquo; Feed" href="https://manicprogrammer.net/feed/" />
155<link rel="alternate" type="application/rss+xml" title="if !blogClogged &raquo; Comments Feed" href="https://manicprogrammer.net/comments/feed/" />
156<link rel="alternate" type="application/rss+xml" title="if !blogClogged &raquo; 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&amp;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 &#8211; 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 &#8216;<strong>TFS</strong>&#8217; 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&nbsp;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 &raquo;</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(?&lt;=&lt;Control.*? FieldName=&quot;)(?!System|Microsoft)[^&quot;]+
385</pre>
386</div>
387<p>This regex gets the refname for each defined custom field in a work item definition. It looks for &lt;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 (?&lt;=&lt;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;">?&lt;=</span><span style="color:#0000ff;">&lt;</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 &lt;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 (?&lt;= 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;">?&lt;=</span><span style="color:#0000ff;">&lt;</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 (?&lt;=. 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 &lt; 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;">?&lt;=</span><span style="color:#0000ff;">&lt;</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;">?&lt;</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 (?&lt;! 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 (?&lt;= 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&#038;body=https%3A%2F%2Fmanicprogrammer.net%2F2013%2F06%2F28%2Ftfs-work-item-type-definition-field-name-refname-label-extract-with-regex%2F&#038;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&#039;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&amp;post_id=99&amp;origin=manicprogrammer.wordpress.com&amp;obj_id=32635625-99-6ab4d65c31b4c&amp;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&nbsp;TFSConfig</a></h2>
504			<p class="comments"><a href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/#respond">leave a comment &raquo;</a></p>
505	
506	<div class="main">
507		<p>&#160;</p>
508<p>&#160;</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&#038;body=https%3A%2F%2Fmanicprogrammer.net%2F2012%2F06%2F22%2Fbeware-the-reportingdatasourcepassword-of-tfsconfig%2F&#038;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&#039;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&amp;post_id=97&amp;origin=manicprogrammer.wordpress.com&amp;obj_id=32635625-97-6ab4d65c32cd5&amp;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&nbsp;Regex</a>
612									</li>
613											<li>
614					<a href="https://manicprogrammer.net/2012/06/22/beware-the-reportingdatasourcepassword-of-tfsconfig/">Beware the ReportingDataSourcePassword of&nbsp;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&nbsp;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&nbsp;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 &amp; 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&amp;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="{&quot;logged_in&quot;:&quot;0&quot;,&quot;wptheme&quot;:&quot;pub\/journalist&quot;,&quot;wptheme_is_block&quot;:&quot;0&quot;}"   >
1159		
1159<script defer src="/wp-content/js/bilmur.min.js?i=19&amp;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.