<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>daxmax</title>
	<atom:link href="http://daxmax.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://daxmax.com</link>
	<description>Exploring The Azure Stack</description>
	<lastBuildDate>Mon, 14 Jan 2019 03:56:34 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>

<image>
	<url>https://daxmax.com/wp-content/uploads/2017/04/cropped-caricature-32x32.png</url>
	<title>daxmax</title>
	<link>https://daxmax.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Book :Radical Candor</title>
		<link>https://daxmax.com/book-radical-candor/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=book-radical-candor</link>
					<comments>https://daxmax.com/book-radical-candor/#respond</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Sun, 16 Dec 2018 08:34:25 +0000</pubDate>
				<category><![CDATA[Foundations]]></category>
		<category><![CDATA[Leadership]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=311</guid>

					<description><![CDATA[I recently read  some chapters from Radical Candor, and i wanted to share some thoughts regarding the book. I personally haven&#8217;t read the  whole book but  from what I have read it has some good foundation truths that I  would like to practice and  it makes easier to describe concepts that I also share with &#8230; <p class="link-more"><a href="https://daxmax.com/book-radical-candor/" class="more-link">Read more<span class="screen-reader-text"> "Book :Radical Candor"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>I recently read  some chapters from Radical Candor, and i wanted to share some thoughts regarding the book.</p>
<p>I personally haven&#8217;t read the  whole book but  from what I have read it has some good foundation truths that I  would like to practice and  it makes easier to describe concepts that I also share with the author.</p>
<h2>Build Radically candid relationship</h2>
<ul>
<li>Relationships not Power  ,drive forward success.</li>
<li>The ability to build trusting real connections with your direct reports will determine the quality of effort that follows</li>
<li>Care Personally &#8211; shed the arrogance, be humble and follow a servant leader model</li>
</ul>
<h2>Get,give and encourage guidance</h2>
<p>Radical Candor Care Personally +  Challenging Directly. This breaks out into 4 quadrants</p>
<ul>
<li>Manipulative insincerity  &#8211; tells you</li>
<li>Obnoxious Aggression &#8211; the office jerk, tells you your faults but not invested so you don&#8217;t trust him.</li>
<li>Ruinous Empathy &#8211; the boss that needs to be liked</li>
<li>Radical Candor &#8211; team leader is invested in the team members , so much that he is accountable as if they were one in the same</li>
<li>Worry more about praise giving and less about criticism- always be sincere.</li>
</ul>
<h2>Understand what motivates each person on your team</h2>
<ul>
<li>Rockstars vs Super stars.  Former are rock solid, latter need a path to the next step.</li>
<li>Growth Management &#8211; its necessary to transfer from talent management mindset to a growth management mindset</li>
<li>Find out what motivates  each team member personally.</li>
<li>You aren&#8217;t responsible for finding purpose in their work ,but rather to create a working environment which allows people to discover it. Invest in your</li>
<li>Keep your top performers  moving forward</li>
<li>Gradual Growth Trajectory for rock stars: Find a way to recognize and reward rock stars without necessarily promoting them</li>
<li>Steep Growth Trajectory: don&#8217;t make management the only path to  higher compensation, less the quality of management will suffer and the lives of those who work under them will also suffer.</li>
<li>Identity those that are stuck in the road. Finding a path back to their amazing may take a step or 2 back.</li>
<li>When to Fire? Have you given radically candid guidance? how is this person&#8217;s performance affecting the rest of the team? Have you sought a second opinion , spoekn to someone you trust about the problem? If its time, make sure not to distance yourself from the person you will be firing.</li>
</ul>
<h2>Drive Results Collaboratively</h2>
<p>Telling people what to do doesn&#8217;t work<br />
The Art of getting stuff done is  without implicitly telling people what to do.</p>
<ul>
<li>Listen  &#8211; create an environment where you and others will listen</li>
<li>Clarify -have you and direct reports understand and convey thoughts and ideas more clearly.
<ul>
<li>Become  an editor not an author. Not just in understanding problems &amp; solutions but understanding the people whom we will have to explain the ideas to.</li>
</ul>
</li>
<li>Debate : Debate is necessary to get everyone on the same page and lack of consensus will cause mass dissension.
<ul>
<li>keep conversations focus on ideas</li>
<li>create an obligation to dissent  (<a href="https://hbr.org/2017/01/true-leaders-believe-dissent-is-an-obligation">related</a>)</li>
<li>Pause for emotion\exhaustion;</li>
<li>pick a decision when the debate is over; don&#8217;t pick it because the debate got difficult</li>
</ul>
</li>
<li>Decide: good bosses create a decision-making process that empowers the most knowledgeable people to make as many decisions as possible</li>
<li>Persuade : it is necessary to not only inform but persuade those  invested in your decision that it is the best decision. Find who will have the biggest credibility  in the decision process
<ul>
<li>consider credibility , humility , by showing your work  (share how you came to the idea\decision)  and consider the room ( the people&#8217;s emotion)</li>
</ul>
</li>
<li>Execute:  empower the team by dealing with the colab. tax with other groups .</li>
<li>Learn: don&#8217;t deny failures, learn from them them and improve. be careful with the need to consistent and watch out for signs of burnout.</li>
</ul>
<p><img fetchpriority="high" decoding="async" class="vc_single_image-img attachment-full" src="https://mk0radicalcandov3r1t.kinstacdn.com/wp-content/uploads/2017/02/gsd-wheel.png" sizes="(max-width: 718px) 100vw, 718px" srcset="https://mk0radicalcandov3r1t.kinstacdn.com/wp-content/uploads/2017/02/gsd-wheel.png 718w, https://mk0radicalcandov3r1t.kinstacdn.com/wp-content/uploads/2017/02/gsd-wheel-150x150.png 150w, https://mk0radicalcandov3r1t.kinstacdn.com/wp-content/uploads/2017/02/gsd-wheel-300x300.png 300w, https://mk0radicalcandov3r1t.kinstacdn.com/wp-content/uploads/2017/02/gsd-wheel-50x50.png 50w, https://mk0radicalcandov3r1t.kinstacdn.com/wp-content/uploads/2017/02/gsd-wheel-125x125.png 125w" alt="" width="718" height="718" data-attachment-id="9735" data-permalink="https://www.radicalcandor.com/our-approach/results/gsd-wheel-2/" data-orig-file="https://mk0radicalcandov3r1t.kinstacdn.com/wp-content/uploads/2017/02/gsd-wheel.png" data-orig-size="718,718" data-comments-opened="0" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gsd-wheel" data-image-description="" data-medium-file="https://mk0radicalcandov3r1t.kinstacdn.com/wp-content/uploads/2017/02/gsd-wheel-300x300.png" data-large-file="https://mk0radicalcandov3r1t.kinstacdn.com/wp-content/uploads/2017/02/gsd-wheel.png" /></p>
<p>&nbsp;</p>
<h1>Part 2 : tools &amp; Techniques</h1>
<h2>Relationships: An approach to establishing trust with your direct reports</h2>
<ul>
<li><strong>Centered and Balanced life :</strong> ensure you have a stable life so that you can bring that to work.</li>
<li><strong>Extend to your team</strong>: create the opportunity so they can bring their best selves to work.</li>
<li><strong>Respect individual boundaries:</strong>  be open, and allow them to open up. Each person is an individual and it will be your responsibility to balance between respecting their boundaries and allowing them to be all they are at work.</li>
</ul>
<h2>Guidance</h2>
<ul>
<li>get,give and encourage both praise and criticism</li>
<li>Make sure you are giving them the opportunity to give real  feedback about your self, ask for it.
<ul>
<li>Some ideas to move it forward:    allow yourself to be publicly criticized initially,  listen with the intent of understanding not action. Reward criticism to get more of it.</li>
</ul>
</li>
<li>Give others guidance</li>
<li>Gauge your guidance, create a baseline and track improvements</li>
<li>Radically candid with your boss:  proceed with caution , first allowing them to be candid. A strong leader has the humility to listen, the confidence to challenge, and the wisdom to know when to quit arguing and get on board.</li>
<li>Prevent backstabbing by ensuring communication first happens with the person you having the issue with first.</li>
<li>Peer guidance : encourage your group to gauge their guidance and ensure we are all using the same vocabulary</li>
<li>Skip meetings can be useful to getting feedback directly. (Skip meetings skip 1 level of managers and directly talks to the groups)</li>
</ul>
<p>Well I enjoyed this book quite a bit.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/book-radical-candor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Resharpen &#8211; Domain Driven Design  Chp3.  &#8211; Binding Model and Implementation</title>
		<link>https://daxmax.com/resharpen-domain-driven-design-chp3-binding-model-and-implementation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=resharpen-domain-driven-design-chp3-binding-model-and-implementation</link>
					<comments>https://daxmax.com/resharpen-domain-driven-design-chp3-binding-model-and-implementation/#respond</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Tue, 11 Dec 2018 04:54:09 +0000</pubDate>
				<category><![CDATA[Foundations]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=306</guid>

					<description><![CDATA[Chapter 3: Binding Model and Implementation Chapter Opening: Provides a couple examples of older applications who&#8217;s model while  present, were not usable to really understand nor  continue the work on. as a result the model was scrapped or replaced. Model-Driven Design the astrolabe is used as an example of a mechanical implementation of an object &#8230; <p class="link-more"><a href="https://daxmax.com/resharpen-domain-driven-design-chp3-binding-model-and-implementation/" class="more-link">Read more<span class="screen-reader-text"> "Resharpen &#8211; Domain Driven Design  Chp3.  &#8211; Binding Model and Implementation"</span></a></p>]]></description>
										<content:encoded><![CDATA[<h2>Chapter 3: Binding Model and Implementation</h2>
<ul>
<li><strong>Chapter Opening:</strong>
<ul>
<li>Provides a couple examples of older applications who&#8217;s model while  present, were not usable to really understand nor  continue the work on. as a result the model was scrapped or replaced.</li>
</ul>
</li>
<li>Model-Driven Design
<ul>
<li>the astrolabe is used as an example of a mechanical implementation of an object oriented model.</li>
<li>Analysis on implementation is necessary to avoid  double analysis; and having the management understand that secondary analysis is as important if not even more relevant  then the initial analysis</li>
<li>the model-driven design  should be a single model that servers both the business and the technical needs in one domain. Agnostic but relevant to both.
<ul>
<li>its a model that works both as analysis and design at the same time</li>
<li>It should be iteratively reviewed,  improved and fixed</li>
</ul>
</li>
<li></li>
</ul>
</li>
<li>Modeling Paradigms and Tool Support
<ul>
<li>It is important to have  tooling that supports model concepts; a language like C# that is OO is a good fit.</li>
<li>Example of PCB  where  the concept of a network bus didn&#8217;t exist but had to be implemented as a side item and as a result  didn&#8217;t have the same</li>
</ul>
</li>
<li>Letting the Bones Show: Why Models Matter to Users
<ul>
<li>there is a  divide between  the analysis /design implementation and the user design, however there should only be one model guiding all of these.
<ul>
<li>Example of IE Favorites: why hide away that they are just files and force usage of the files through IE&#8217;s old interface. be clear or  redesign the model to truly show what is behind.</li>
</ul>
</li>
</ul>
</li>
<li>Hands-On Modelers
<ul>
<li>management feels that architects shouldn&#8217;t model and its a waste of time. Problems will arise because the model will be left behind and feedback loop from the tech team back to the architect will be reduced significantly</li>
<li>the people that write the code must feel responsible for the model and if they don&#8217;t understand it , the model is ignored or sidestepped.</li>
<li>Modeling and implementation of the model, must go hand in hand.</li>
<li>Technical contributes to the model must spend time coding, any developers must learn to express the model in code.  Stakeholders must engage the model through Ubiquitous Language.</li>
</ul>
</li>
</ul>
<p id="wqtDVCL"><a href="http://daxmax.com/wp-content/uploads/2018/12/img_5c0df0fa6d274.png"><img decoding="async" width="1032" height="716" class="alignnone size-full wp-image-308 " src="http://daxmax.com/wp-content/uploads/2018/12/img_5c0df0fa6d274.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/12/img_5c0df0fa6d274.png 1032w, https://daxmax.com/wp-content/uploads/2018/12/img_5c0df0fa6d274-300x208.png 300w, https://daxmax.com/wp-content/uploads/2018/12/img_5c0df0fa6d274-768x533.png 768w, https://daxmax.com/wp-content/uploads/2018/12/img_5c0df0fa6d274-1024x710.png 1024w" sizes="(max-width: 1032px) 100vw, 1032px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/resharpen-domain-driven-design-chp3-binding-model-and-implementation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<series:name><![CDATA[Domain Driven Design]]></series:name>
	</item>
		<item>
		<title>Resharpen Domain Driven Design &#8211; Chp. 1 &#038; 2 Notes</title>
		<link>https://daxmax.com/ddd-a-lookback-chp-1-2-notes/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ddd-a-lookback-chp-1-2-notes</link>
					<comments>https://daxmax.com/ddd-a-lookback-chp-1-2-notes/#respond</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Mon, 10 Dec 2018 02:14:01 +0000</pubDate>
				<category><![CDATA[Foundations]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=298</guid>

					<description><![CDATA[As part of resharpening the blade I am looking back at Eric Evans 2003  Domain-Driven Design. You can get the  reference document here: https://domainlanguage.com/ddd/reference/ The original book is still available for purchase https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215 Chapter 1 Ingredients of Effective Modeling Sharing a common Language Developing a knowledge-rich model the model was used both for solving problems &#8230; <p class="link-more"><a href="https://daxmax.com/ddd-a-lookback-chp-1-2-notes/" class="more-link">Read more<span class="screen-reader-text"> "Resharpen Domain Driven Design &#8211; Chp. 1 &#038; 2 Notes"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>As part of resharpening the blade I am looking back at Eric Evans 2003  Domain-Driven Design.</p>
<p>You can get the  reference document here:<br />
<a href="https://domainlanguage.com/ddd/reference/">https://domainlanguage.com/ddd/reference/</a></p>
<p>The original book is still available for purchase<br />
<a href="https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215">https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215</a></p>
<h2>Chapter 1</h2>
<ul>
<li>Ingredients of Effective Modeling
<ul>
<li>Sharing a common Language</li>
<li>Developing a knowledge-rich model
<ul>
<li>the model was used both for solving problems but also for understanding any limitations til current</li>
</ul>
</li>
<li>Reductive Model: as  the model became clearer the scope of the model could also be decreased</li>
<li>Experimentation Lab: The model was used as a testing ground and lab for futher and future review</li>
</ul>
</li>
<li>Knowledge Crunching
<ul>
<li>old style is to tell the developer what to build and they can built it. Maybe even keep it clean but it will not grow past  that and it can&#8217;t add on new powerful  collaborative features.</li>
<li>The process has to be collective and iterative and conjoined ; Dev &amp; business.</li>
</ul>
</li>
<li>Continuous Learning
<ul>
<li>Technical Knowledge, general domain-modeling skills and domain specific knowledge</li>
</ul>
</li>
<li>Knowledge-Rich  Design
<ul>
<li>it is imperative not only to find the nouns and verbs, but have a natural way to express the entire model</li>
</ul>
</li>
</ul>
<h2>Chapter 2</h2>
<ul>
<li>Ubiquitous Language
<ul>
<li>It is necessary to share in one language to describe and describe the domain</li>
<li>use the mode as the backbone of language</li>
</ul>
</li>
<li>Modeling Out Loud
<ul>
<li>Be intentful in describing and using the model in day to day speech to test it out and make it functional</li>
</ul>
</li>
<li>One Team, One Language
<ul>
<li>Don&#8217;t take no for an answer. there must be  common ground to speak on what is being built.</li>
</ul>
</li>
<li>Documents and Diagrams
<ul>
<li>The vital detail about the design is captured in the code</li>
<li>persistent form documents lose their connection from the flow of a project, and are left behind because of the evolution of code and the evolution of the language of the project</li>
<li>Diagrams are not the model</li>
<li>Documents should complement code and speech</li>
</ul>
</li>
<li>Explanatory Models</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/ddd-a-lookback-chp-1-2-notes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<series:name><![CDATA[Domain Driven Design]]></series:name>
	</item>
		<item>
		<title>Clean Code &#8211; Chapter 1 Summary</title>
		<link>https://daxmax.com/clean-code-chapter-1-summary/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=clean-code-chapter-1-summary</link>
					<comments>https://daxmax.com/clean-code-chapter-1-summary/#respond</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Wed, 28 Nov 2018 07:05:21 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=294</guid>

					<description><![CDATA[Robert Greiner a number of years ago posted a trio of books that were a defacto for developers to read. http://robertgreiner.com/2013/09/software-developer-book-recommendations/ I am starting with clean Code Chapter 1. The Qualities of Clean Code Bjarne Stroustrup Elegant Efficient error handling complete performance close to optimal as to avoid temptation to make the code messy does &#8230; <p class="link-more"><a href="https://daxmax.com/clean-code-chapter-1-summary/" class="more-link">Read more<span class="screen-reader-text"> "Clean Code &#8211; Chapter 1 Summary"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>Robert Greiner a number of years ago posted a trio of books that were a defacto for developers to read.</p>
<p><a href="http://robertgreiner.com/2013/09/software-developer-book-recommendations/">http://robertgreiner.com/2013/09/software-developer-book-recommendations/</a></p>
<p>I am starting with clean Code Chapter 1.</p>
<p>The Qualities of Clean Code</p>
<ul>
<li>Bjarne Stroustrup
<ul>
<li>Elegant</li>
<li>Efficient</li>
<li>error handling complete</li>
<li>performance close to optimal
<ul>
<li>as to avoid temptation to make the code messy</li>
</ul>
</li>
<li>does one thing well</li>
</ul>
</li>
<li>Grady Booch
<ul>
<li>is crisp, isn&#8217;t obscure
<ul>
<li>reads well</li>
</ul>
</li>
</ul>
</li>
<li>Dave Thomas  (OTI)
<ul>
<li>Testable</li>
<li>Easy to maintain</li>
</ul>
</li>
<li>Michael Feathers
<ul>
<li>the code looks like it was built by someone that cares about the code</li>
</ul>
</li>
<li>Ron Jefferies
<ul>
<li>Runs all the tets</li>
<li>contains no dups</li>
<li>minimizes the # of entities</li>
<li>expressiveness &#8211; tiny abstractions</li>
</ul>
</li>
<li>Boy Scouts rule: Leave Campground better than it was. Apply to code.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/clean-code-chapter-1-summary/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<series:name><![CDATA[Clean Code - Book Summary]]></series:name>
	</item>
		<item>
		<title>Effective and Reinvention</title>
		<link>https://daxmax.com/effective-and-reinvention/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=effective-and-reinvention</link>
					<comments>https://daxmax.com/effective-and-reinvention/#respond</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Sat, 03 Nov 2018 18:17:27 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=286</guid>

					<description><![CDATA[Effective Executive Need to re-asset want to focus on and need to learn new techniques to help me through this journey. So I am going to watch a few time management and  effectiveness videos. Here are summaries Time Track Track what you are doing , so you can understand what you are spending your time &#8230; <p class="link-more"><a href="https://daxmax.com/effective-and-reinvention/" class="more-link">Read more<span class="screen-reader-text"> "Effective and Reinvention"</span></a></p>]]></description>
										<content:encoded><![CDATA[<h2>Effective Executive</h2>
<p>Need to re-asset want to focus on and need to learn new techniques to help me through this journey. So I am going to watch a few time management and  effectiveness videos. Here are summaries</p>
<p><iframe title="PNTV: The Effective Executive by Peter F. Drucker (#346)" width="950" height="534" src="https://www.youtube.com/embed/3KG7-cr-y78?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<ol>
<li>Time
<ol>
<li>Track
<ol>
<li>Track what you are doing , so you can understand what you are spending your time</li>
</ol>
</li>
<li>Manage
<ol>
<li>1/2 days to 2 weeks of quantum of time</li>
</ol>
</li>
<li>Consolidate</li>
</ol>
</li>
<li>Contribute
<ol>
<li>Who do you need to be to contribute</li>
</ol>
</li>
<li>Strength
<ol>
<li>All strong people have peaks and valleys</li>
<li>People that well rounded ,are going to end up in mediocrity</li>
<li>Only exception is character and integrity you need to resolve that</li>
<li>Example:  Ulysses Grant  and Lincoln,  Grant could fight , Grant would drink</li>
</ol>
</li>
<li>Concentration
<ol>
<li>There will always be more good ideas than there is time to execute them</li>
<li>Stephen Covey &#8211; First things first , Second things &#8221; not at all&#8221;</li>
</ol>
</li>
<li>Decisions
<ol>
<li>they make effective decisions, they make less decisions . But they make big decisions not a ton of little decisions</li>
<li>We need to have boundary conditions
<ol>
<li>what is your routine?</li>
</ol>
</li>
</ol>
</li>
</ol>
<h2>Reinventing Yourself</h2>
<p><iframe loading="lazy" title="PNTV: Reinventing Yourself by Steve Chandler (#373)" width="950" height="534" src="https://www.youtube.com/embed/KH2Or6Gi2hQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p><a href="https://play.google.com/store/books/details?id=T95EDwAAQBAJ&amp;source=productsearch&amp;utm_source=HA_Desktop_US&amp;utm_medium=SEM&amp;utm_campaign=PLA&amp;pcampaignid=MKTAD0930BO1&amp;gclid=Cj0KCQjwjvXeBRDDARIsAC38TP4OuTcvvUY4C00cACnkpjqIMQVhWeEQOwZEpwaSoBIacjqlC8M6JucaAtsYEALw_wcB&amp;gclsrc=aw.ds">https://play.google.com/store/books/details?id=T95EDwAAQBAJ&amp;source=productsearch&amp;utm_source=HA_Desktop_US&amp;utm_medium=SEM&amp;utm_campaign=PLA&amp;pcampaignid=MKTAD0930BO1&amp;gclid=Cj0KCQjwjvXeBRDDARIsAC38TP4OuTcvvUY4C00cACnkpjqIMQVhWeEQOwZEpwaSoBIacjqlC8M6JucaAtsYEALw_wcB&amp;gclsrc=aw.ds</a></p>
<ol>
<li>Victim vs Owner
<ol>
<li>Do you own your destiny</li>
</ol>
</li>
<li>Styrofoam Weights
<ol>
<li>Avoiding Challenges &amp; Problems</li>
<li>Metaphor &#8220;Styrofoam&#8221; weight</li>
<li>Owners look at weights in a gym</li>
<li>they are spiraling up, evolving with errors and failures</li>
</ol>
</li>
<li>Yes + No
<ol>
<li> In order to get a yes, you have to get a lot of nos</li>
<li>Success goes with Failures</li>
<li>Yes&#8217;es goes with no</li>
<li>we need embrace failure</li>
</ol>
</li>
<li>10 things
<ol>
<li>Courage comes in the act of doing something</li>
<li>You can&#8217;t wait until you are doing something</li>
<li>10 things  that you would do if you had no fear</li>
<li>Because we do not dare, we do not do things that are difficult</li>
<li>fear can be like salt in a river, take the jump and feel the exciment and the fear at the same time</li>
</ol>
</li>
<li>Campfire of Life
<ol>
<li>you need to make a new campfire every day</li>
<li>on the material plane, you build a chair and its there but on a spiritual plane you will need to remake it every day</li>
</ol>
</li>
</ol>
<p><strong>What is the best version of you look like?</strong></p>
<p>I am going to spend some time answering that today.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/effective-and-reinvention/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Cli format for environment variables with problematic characters</title>
		<link>https://daxmax.com/azure-cli-format-for-environment-variables-with-problematic-characters/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=azure-cli-format-for-environment-variables-with-problematic-characters</link>
					<comments>https://daxmax.com/azure-cli-format-for-environment-variables-with-problematic-characters/#comments</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Tue, 16 Oct 2018 06:59:10 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=273</guid>

					<description><![CDATA[Was unable to find a good  resource to determine how to format the string when creating azure container instances when  I had characters  in the environment variables that would  cause the cli to incorrectly parse . Example: Was about to go the yml route when I decided to try the  format; az container create   -e &#8230; <p class="link-more"><a href="https://daxmax.com/azure-cli-format-for-environment-variables-with-problematic-characters/" class="more-link">Read more<span class="screen-reader-text"> "Azure Cli format for environment variables with problematic characters"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>Was unable to find a good  resource to determine how to format the string when creating azure container instances when  I had characters  in the environment variables that would  cause the cli to incorrectly parse .<br />
Example:</p>
<p id="SYJWrks"><a href="http://daxmax.com/wp-content/uploads/2018/10/img_5bc58ceaedff7.png"><img loading="lazy" decoding="async" width="972" height="239" class="alignnone size-full wp-image-281 " src="http://daxmax.com/wp-content/uploads/2018/10/img_5bc58ceaedff7.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/10/img_5bc58ceaedff7.png 972w, https://daxmax.com/wp-content/uploads/2018/10/img_5bc58ceaedff7-300x74.png 300w, https://daxmax.com/wp-content/uploads/2018/10/img_5bc58ceaedff7-768x189.png 768w" sizes="(max-width: 972px) 100vw, 972px" /></a></p>
<p>Was about to go the yml route when I decided to try the  format;</p>
<pre class="lang:default decode:true">az container create   -e 'key:"value"'</pre>
<p>and that worked like a charm.<br />
this is useful when  you have problematic characters (&amp; , ! ,etc.)</p>
<p>Example:</p>
<pre class="lang:default decode:true">az container create -g myGroup -n MyContainer--image MyImage 
-e 'YOUR_KEY_URL="jdbc:mysql://databaselocation:3306/sonarqube?useUnicode=true&amp;characterEncoding=utf8&amp;rewriteBatchedStatements=true&amp;useConfigs=maxPerformance&amp;autoReconnect=true&amp;useSSL=false"'</pre>
<p>Results in Azure:</p>
<p id="XpWIRsv"><a href="http://daxmax.com/wp-content/uploads/2018/10/img_5bc58c1eb0310.png"><img loading="lazy" decoding="async" width="1203" height="186" class="alignnone size-full wp-image-278 " src="http://daxmax.com/wp-content/uploads/2018/10/img_5bc58c1eb0310.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/10/img_5bc58c1eb0310.png 1203w, https://daxmax.com/wp-content/uploads/2018/10/img_5bc58c1eb0310-300x46.png 300w, https://daxmax.com/wp-content/uploads/2018/10/img_5bc58c1eb0310-768x119.png 768w, https://daxmax.com/wp-content/uploads/2018/10/img_5bc58c1eb0310-1024x158.png 1024w" sizes="(max-width: 1203px) 100vw, 1203px" /></a></p>
<p id="tZbvfTt">I tried other methods (escaping characters, single quotes, double quotes, ^ sign, double ampersand, and even double quote followed by single) but only this format worked.</p>
<p>I believe this solves this person&#8217;s error:<br />
<a href="https://github.com/Azure/azure-cli/issues/5573">https://github.com/Azure/azure-cli/issues/5573</a><br />
I will also try to cross post it to:<br />
<a href="https://docs.microsoft.com/en-us/azure/container-instances/container-instances-environment-variables">https://docs.microsoft.com/en-us/azure/container-instances/container-instances-environment-variables</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/azure-cli-format-for-environment-variables-with-problematic-characters/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Migrating .Net Core Projects from 2.0 to 2.1</title>
		<link>https://daxmax.com/migrating-net-core-projects-from-2-0-to-2-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=migrating-net-core-projects-from-2-0-to-2-1</link>
					<comments>https://daxmax.com/migrating-net-core-projects-from-2-0-to-2-1/#respond</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Sun, 15 Jul 2018 06:02:33 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=229</guid>

					<description><![CDATA[New features for ASP.net Core 2.1 have been released and a couple features that I am very interested in are  EF Core 2.1 Query Types (  which Julie Lerman recently wrote about in msdn mag ) and SignalR, but I will have to upgrade my existing .net core repository  in order to play with these, so &#8230; <p class="link-more"><a href="https://daxmax.com/migrating-net-core-projects-from-2-0-to-2-1/" class="more-link">Read more<span class="screen-reader-text"> "Migrating .Net Core Projects from 2.0 to 2.1"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>New features for ASP.net Core 2.1 have been released and a couple features that I am very interested in are  EF Core 2.1 Query Types (  which <a href="https://twitter.com/julielerman">Julie Lerman</a> recently wrote about in <a href="https://msdn.microsoft.com/en-us/magazine/mt847184">msdn mag</a> ) and SignalR, but I will have to upgrade my existing .net core repository  in order to play with these, so let&#8217;s get to work.</p>
<p>Going to be following this :<br />
<a href="https://blogs.msdn.microsoft.com/webdev/2018/05/30/asp-net-core-2-1-0-now-available/">https://blogs.msdn.microsoft.com/webdev/2018/05/30/asp-net-core-2-1-0-now-available/</a><br />
and a recently written document for project migration :<br />
<a href="https://docs.microsoft.com/en-us/aspnet/core/migration/20_21?view=aspnetcore-2.1">https://docs.microsoft.com/en-us/aspnet/core/migration/20_21?view=aspnetcore-2.1</a></p>
<p>Steps are:</p>
<ol>
<li>Download  <a href="https://www.microsoft.com/net/learn/apps/web/get-started/windows">ASP.net Core 2.1 SDK </a></li>
<li> replace &lt;TargetFramework&gt;netcoreapp2.0&lt;/TargetFramework&gt; to &lt;TargetFramework&gt;netcoreapp2.1&lt;/TargetFramework&gt;</li>
<li>remove references to <strong>DotNetCliToolReference</strong> in certain Packages</li>
<li>Bonus Round: Getting VSTS to build .net Core  2.1</li>
</ol>
<h3>Install ASP.net Core 2.1 SDK</h3>
<p>Downloaded a file  named <strong>dotnet-sdk-2.1.302-win-gs-x64.exe   </strong>when I clicked on  the &#8220;Download .NET SDK &#8221; with a size of about 135 MB, run the file and accepted the run.</p>
<p id="HvpSrlj"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ad40d60209.png"><img loading="lazy" decoding="async" class="alignnone wp-image-236 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ad40d60209.png" alt="" width="279" height="206" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad40d60209.png 660w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad40d60209-300x222.png 300w" sizes="(max-width: 279px) 100vw, 279px" /></a></p>
<p>Completed,  and that seemed easy enough.</p>
<p id="iHGPBex"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ad45e841a0.png"><img loading="lazy" decoding="async" class="alignnone wp-image-237 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ad45e841a0.png" alt="" width="454" height="336" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad45e841a0.png 660w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad45e841a0-300x222.png 300w" sizes="(max-width: 454px) 100vw, 454px" /></a></p>
<h3>Replace TargetFramework value with netcoreapp2.1</h3>
<p>So I used Notepad&#8217;++&#8217;s  Find in Files, I tend to use this for smaller  text replacements.</p>
<p id="KWgLTYU"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4acd3ec49bf.png"><img loading="lazy" decoding="async" width="585" height="362" class="alignnone size-full wp-image-231 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4acd3ec49bf.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4acd3ec49bf.png 585w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4acd3ec49bf-300x186.png 300w" sizes="(max-width: 585px) 100vw, 585px" /></a></p>
<p>That seemed to find everything I needed to replace:</p>
<p id="vdzaScv"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4acd66b17cc.png"><img loading="lazy" decoding="async" width="759" height="205" class="alignnone size-full wp-image-232 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4acd66b17cc.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4acd66b17cc.png 759w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4acd66b17cc-300x81.png 300w" sizes="(max-width: 759px) 100vw, 759px" /></a></p>
<p>so I ran it a second time this time making the necessary text replacement. I hand checked a few, and it all looked good.</p>
<p>Ok , so step 1 in theory done.</p>
<p>Now I went back to my Project and opened up one of my projects that  other than referencing Core 2.0 had no code ,nuget packages  or dependencies. I built it and it was successful now that it was pointing to Core 2.1.  So that&#8217;s progress.</p>
<p id="bJGIyeN"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ad5d2adbfa.png"><img loading="lazy" decoding="async" width="823" height="266" class="alignnone size-full wp-image-238 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ad5d2adbfa.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad5d2adbfa.png 823w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad5d2adbfa-300x97.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad5d2adbfa-768x248.png 768w" sizes="(max-width: 823px) 100vw, 823px" /></a></p>
<h3>Replace  AspNetCore.All with AspNetCore.App</h3>
<p>So my first step as  a test is to remove the reference from one   project with AspNetCore.All to see how bad it is . I picked 1 project called  WebApi ,and removed the reference. I didn&#8217;t see any other references drop, ok so  far so good.</p>
<p>Now keep in mind at this point  Nuget Package manager is telling me this project has no packages installed because it can&#8217;t build because of it pointing to  <strong><em>netcoreapp2.1</em></strong> which doesn&#8217;t exist as a valid reference.</p>
<p>Now the blow for me was the License Acceptance,  when I went to install  Microsoft.AspNetCore.App it wanted me to accept at  my estimate (got scroll bar  1/4 down with 65  packages counted) about 200+ licenses.</p>
<p id="JmMysth"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ad1220b539.png"><img loading="lazy" decoding="async" width="1813" height="457" class="alignnone size-full wp-image-233 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ad1220b539.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad1220b539.png 1813w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad1220b539-300x76.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad1220b539-768x194.png 768w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4ad1220b539-1024x258.png 1024w" sizes="(max-width: 1813px) 100vw, 1813px" /></a></p>
<p>Also I can&#8217;t copy and paste the license acceptance. With that much to go through it makes it almost impossible for a developer to be  able to review this. Sure we have tooling to  review dependencies issues   and vulnerabilities but who are we even kidding at this point with these type of acceptances?</p>
<p>I hit &#8220;I Accept&#8221; but honestly its the first time I had signed up for 200 plus agreements in one click; feel free to take a look at what was installed.</p>
<pre class="height-set:true lang:default decode:true" title="Everything Installed">Restoring packages for D:\Repository\CSharpRomp\CSharpRomp.WebApi\CSharpRomp.WebApi.csproj...
Installing NuGet package Microsoft.AspNetCore.App 2.1.2.
Committing restore...
Generating MSBuild file D:\Repository\CSharpRomp\CSharpRomp.WebApi\obj\CSharpRomp.WebApi.csproj.nuget.g.props.
Generating MSBuild file D:\Repository\CSharpRomp\CSharpRomp.WebApi\obj\CSharpRomp.WebApi.csproj.nuget.g.targets.
Writing lock file to disk. Path: D:\Repository\CSharpRomp\CSharpRomp.WebApi\obj\project.assets.json
Restore completed in 2.36 sec for D:\Repository\CSharpRomp\CSharpRomp.WebApi\CSharpRomp.WebApi.csproj.
Successfully uninstalled 'Microsoft.Win32.Registry 4.4.0' from CSharpRomp.WebApi
Successfully uninstalled 'System.Data.SqlClient 4.4.3' from CSharpRomp.WebApi
Successfully uninstalled 'System.Security.AccessControl 4.4.0' from CSharpRomp.WebApi
Successfully uninstalled 'System.Security.Principal.Windows 4.4.0' from CSharpRomp.WebApi
Successfully uninstalled 'System.Text.Encoding.CodePages 4.4.0' from CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNet.WebApi.Client 5.2.6' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Antiforgery 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.App 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.Cookies 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.Core 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.Facebook 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.Google 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.JwtBearer 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.MicrosoftAccount 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.OAuth 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.OpenIdConnect 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.Twitter 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authentication.WsFederation 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authorization 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Authorization.Policy 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Connections.Abstractions 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.CookiePolicy 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Cors 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Cryptography.Internal 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Cryptography.KeyDerivation 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.DataProtection 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.DataProtection.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.DataProtection.Extensions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Diagnostics 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Diagnostics.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.HostFiltering 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Hosting 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Hosting.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Hosting.Server.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Html.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Http 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Http.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Http.Connections 1.0.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Http.Connections.Common 1.0.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Http.Extensions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Http.Features 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.HttpOverrides 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.HttpsPolicy 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Identity 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Identity.EntityFrameworkCore 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Identity.UI 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.JsonPatch 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Localization 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Localization.Routing 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.MiddlewareAnalysis 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Analyzers 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.ApiExplorer 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Core 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Cors 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.DataAnnotations 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Formatters.Json 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Formatters.Xml 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Localization 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Razor 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Razor.Extensions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.Razor.ViewCompilation 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.RazorPages 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.TagHelpers 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Mvc.ViewFeatures 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.NodeServices 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Owin 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Razor 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Razor.Design 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Razor.Language 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Razor.Runtime 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.ResponseCaching 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.ResponseCaching.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.ResponseCompression 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Rewrite 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Routing 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Routing.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Server.HttpSys 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Server.IISIntegration 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Server.Kestrel 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Server.Kestrel.Core 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Server.Kestrel.Https 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.Session 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.SignalR 1.0.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.SignalR.Common 1.0.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.SignalR.Core 1.0.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.SignalR.Protocols.Json 1.0.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.SpaServices 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.SpaServices.Extensions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.StaticFiles 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.WebSockets 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.AspNetCore.WebUtilities 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.CodeAnalysis.Analyzers 1.1.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.CodeAnalysis.Common 2.8.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.CodeAnalysis.CSharp 2.8.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.CodeAnalysis.Razor 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.CSharp 4.5.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.DotNet.PlatformAbstractions 2.1.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.EntityFrameworkCore 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.EntityFrameworkCore.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.EntityFrameworkCore.Analyzers 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.EntityFrameworkCore.Design 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.EntityFrameworkCore.InMemory 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.EntityFrameworkCore.Relational 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.EntityFrameworkCore.SqlServer 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.EntityFrameworkCore.Tools 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Caching.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Caching.Memory 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Caching.SqlServer 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.Binder 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.CommandLine 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.EnvironmentVariables 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.FileExtensions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.Ini 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.Json 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.KeyPerFile 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.UserSecrets 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Configuration.Xml 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.DependencyInjection 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.DependencyInjection.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.DependencyModel 2.1.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.DiagnosticAdapter 2.1.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.FileProviders.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.FileProviders.Composite 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.FileProviders.Embedded 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.FileProviders.Physical 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.FileSystemGlobbing 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Hosting 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Hosting.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Http 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Identity.Core 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Identity.Stores 2.1.2' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Localization 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Localization.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Logging 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Logging.Abstractions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Logging.Configuration 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Logging.Console 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Logging.Debug 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Logging.EventSource 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Logging.TraceSource 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.ObjectPool 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Options 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Options.ConfigurationExtensions 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.Primitives 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Extensions.WebEncoders 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.IdentityModel.Logging 5.2.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.IdentityModel.Protocols 5.2.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.IdentityModel.Protocols.OpenIdConnect 5.2.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.IdentityModel.Protocols.WsFederation 5.2.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.IdentityModel.Tokens 5.2.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.IdentityModel.Tokens.Saml 5.2.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.IdentityModel.Xml 5.2.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Net.Http.Headers 2.1.1' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Win32.Primitives 4.3.0' to CSharpRomp.WebApi
Successfully installed 'Microsoft.Win32.Registry 4.5.0' to CSharpRomp.WebApi
Successfully installed 'NETStandard.Library 1.6.1' to CSharpRomp.WebApi
Successfully installed 'Newtonsoft.Json 11.0.2' to CSharpRomp.WebApi
Successfully installed 'Newtonsoft.Json.Bson 1.0.1' to CSharpRomp.WebApi
Successfully installed 'Remotion.Linq 2.2.0' to CSharpRomp.WebApi
Successfully installed 'runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.native.System 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.native.System.IO.Compression 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.native.System.Net.Http 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.native.System.Security.Cryptography.Apple 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.AppContext 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Buffers 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Collections 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Collections.Concurrent 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Collections.Immutable 1.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Collections.NonGeneric 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Collections.Specialized 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.ComponentModel.Annotations 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Console 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Data.SqlClient 4.5.1' to CSharpRomp.WebApi
Successfully installed 'System.Diagnostics.Contracts 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Diagnostics.Debug 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Diagnostics.DiagnosticSource 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Diagnostics.FileVersionInfo 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Diagnostics.StackTrace 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Diagnostics.Tools 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Diagnostics.Tracing 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Dynamic.Runtime 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Globalization 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Globalization.Calendars 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Globalization.Extensions 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.IdentityModel.Tokens.Jwt 5.2.0' to CSharpRomp.WebApi
Successfully installed 'System.Interactive.Async 3.1.1' to CSharpRomp.WebApi
Successfully installed 'System.IO.Compression 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.IO.Compression.ZipFile 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.IO.FileSystem 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.IO.FileSystem.Primitives 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.IO.Pipelines 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Linq 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Linq.Expressions 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Linq.Queryable 4.0.1' to CSharpRomp.WebApi
Successfully installed 'System.Memory 4.5.1' to CSharpRomp.WebApi
Successfully installed 'System.Net.Http 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Net.Primitives 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Net.Sockets 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Net.WebSockets.WebSocketProtocol 4.5.1' to CSharpRomp.WebApi
Successfully installed 'System.Numerics.Vectors 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.ObjectModel 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Private.DataContractSerialization 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Reflection.Emit 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Reflection.Extensions 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Reflection.Metadata 1.6.0' to CSharpRomp.WebApi
Successfully installed 'System.Resources.ResourceManager 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Runtime.CompilerServices.Unsafe 4.5.1' to CSharpRomp.WebApi
Successfully installed 'System.Runtime.Extensions 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Runtime.Handles 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Runtime.InteropServices 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Runtime.InteropServices.RuntimeInformation 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Runtime.Numerics 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Runtime.Serialization.Primitives 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Runtime.Serialization.Xml 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.AccessControl 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Claims 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Cryptography.Algorithms 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Cryptography.Cng 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Cryptography.Csp 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Cryptography.Encoding 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Cryptography.OpenSsl 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Cryptography.Pkcs 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Cryptography.Primitives 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Cryptography.X509Certificates 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Cryptography.Xml 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Permissions 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Principal 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Security.Principal.Windows 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Text.Encoding.CodePages 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Text.Encoding.Extensions 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Text.Encodings.Web 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Text.RegularExpressions 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Threading 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Threading.Channels 4.5.0' to CSharpRomp.WebApi
Successfully installed 'System.Threading.Tasks.Extensions 4.5.1' to CSharpRomp.WebApi
Successfully installed 'System.Threading.Tasks.Parallel 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Threading.Thread 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Threading.Timer 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.ValueTuple 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Xml.ReaderWriter 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Xml.XDocument 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Xml.XmlDocument 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Xml.XmlSerializer 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Xml.XPath 4.3.0' to CSharpRomp.WebApi
Successfully installed 'System.Xml.XPath.XDocument 4.3.0' to CSharpRomp.WebApi
Executing script file 'C:\Users\daxmax\.nuget\packages\microsoft.entityframeworkcore.tools\2.1.1\tools\init.ps1'...
Executing nuget actions took 3.09 sec
Time Elapsed: 00:00:05.7809010
========== Finished ==========
</pre>
<p>Now   keep in mind I have 2 projects that have dependency on AspNetCore.All . So I attempt to rebuild WebApi  and success. Mileage may vary as the document does describe that removing AspNetCore.All will remove any dependent nuget packages ,  but for my little test project that seemed fine. Moving on to  doing the same in the Web UI project.</p>
<p>I got an odd error when trying to install AspNetCore.App , &#8220;Version conflict detected for Microsoft.CodeAnalysis.Common&#8221;, did a couple searches and <a href="https://github.com/fsprojects/Paket/issues/2965">landed on this</a> which suggested some package updates, which  I did do and it seemed to clear up this error for me.</p>
<h3>Remove references to  DotNetCliToolReference</h3>
<p>So I checked for the packages in the list, and I wasn&#8217;t using any of them and that made this step easy. For a 100% assurance I did a scan for that value</p>
<ul>
<li>Microsoft.DotNet.Watcher.Tools</li>
<li>Microsoft.EntityFrameworkCore.Tools.DotNet</li>
<li>Microsoft.Extensions.Caching.SqlConfig.Tools</li>
<li>Microsoft.Extensions.SecretManager.Tools</li>
</ul>
<p>Now there was an optional step to remove DotNetCliTooLReference for CodeGeneration.Tools and that one I did have. Article mentions that can be removed using a  command <code class="">dotnet tool install -g dotnet-aspnet-codegenerator</code>.</p>
<p id="HqsErCp"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ae07cefe70.png"><img loading="lazy" decoding="async" width="968" height="543" class="alignnone size-full wp-image-239 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4ae07cefe70.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4ae07cefe70.png 968w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4ae07cefe70-300x168.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4ae07cefe70-768x431.png 768w" sizes="(max-width: 968px) 100vw, 968px" /></a></p>
<p>I ran it a second time because it ran too fast but sure enough it was already installed. So my project CSharpRomp is upgraded.</p>
<p>Unfortunately , I had  various other items not committed when I started this so the git commit is a mix of various changes, but you are welcome to dissect those changes here.</p>
<p><a href="https://github.com/EstebanSmits/CSharpRomp/commit/dace0e8d9579b1d0eaf5e614a3d3b32bd4ba1136">https://github.com/EstebanSmits/CSharpRomp/commit/dace0e8d9579b1d0eaf5e614a3d3b32bd4ba1136</a></p>
<h3>Bonus Round: VSTS Build</h3>
<p>So if you were following you know we just  installed the 2.1.3 SDK locally but   VSTS doesn&#8217;t know about that. So you will need to include a handy dandy .NET Core Tool Installer which is a task type on build.  This tool will allow  installing the SDK package. Adam Storr  details most of this here:<br />
<a href="https://adamstorr.azurewebsites.net/blog/aspnetcore-2-1-preview-on-vsts">https://adamstorr.azurewebsites.net/blog/aspnetcore-2-1-preview-on-vsts</a></p>
<p>If you need release versions:<br />
<a href="https://github.com/dotnet/core/blob/master/release-notes/releases.csv">https://github.com/dotnet/core/blob/master/release-notes/releases.csv</a></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/migrating-net-core-projects-from-2-0-to-2-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Logic Apps: Webhook driven customer identifier using SQL\Slack</title>
		<link>https://daxmax.com/azure-logic-apps-webhook-driven-customer-identifier-using-sqlslack/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=azure-logic-apps-webhook-driven-customer-identifier-using-sqlslack</link>
					<comments>https://daxmax.com/azure-logic-apps-webhook-driven-customer-identifier-using-sqlslack/#respond</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Sat, 14 Jul 2018 20:31:28 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=191</guid>

					<description><![CDATA[I will be exploring the usage of Azure Logic Apps for the simple creation of a mock application which will receive via web hook a customer id, use SQL to retrieve data on that client, iterate through it, perform some basic business logic and then based on that  notify the client and possibly a slack &#8230; <p class="link-more"><a href="https://daxmax.com/azure-logic-apps-webhook-driven-customer-identifier-using-sqlslack/" class="more-link">Read more<span class="screen-reader-text"> "Azure Logic Apps: Webhook driven customer identifier using SQL\Slack"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>I will be exploring the usage of Azure Logic Apps for the simple creation of a mock application which will receive via web hook a customer id, use SQL to retrieve data on that client, iterate through it, perform some basic business logic and then based on that  notify the client and possibly a slack chat room.  As a bonus I will setup the recently released alerts log and use that to notify me of failings in my app. Here we go.</p>
<p>Azure Logic Apps is a server-less technology. For those not following along , server less means you don&#8217;t worry about the server, Azure will scale it based on your consumption needs. Yay.  Logic Apps also have a ton of pre-built  connectors.</p>
<h3>Functionality Breakout</h3>
<p>Azure Logic apps can be broken out into 4 main types of events.</p>
<ul>
<li><strong>Triggers :</strong>  Can be scheduled,  web hook, or driven by other functions</li>
<li><strong>Actions: </strong> These are internal logic events to perform. Logic checks, statements, business Logic, etc. would be in actions.</li>
<li><strong>Connectors (MS managed) :</strong> these are all the services that Logic Apps connect to. This is probably 80% of what drives the value of using Azure Logic Apps because it makes connecting into various services, very easy. You cannot add your own although there are some basic web hook events you can connect into.</li>
<li><strong>Flow Control: </strong>what to execute next, conditionals, if-else-then, switch and parallel routes</li>
</ul>
<h2>Building A Logic App</h2>
<p>Ok, so I am going to build a logic app that is web triggered. We will pass through a Customer Id , and based on whether the customer has a certain volume of orders we will  also notify a chatroom in a slack chat, otherwise I will just reply back with the findings.</p>
<ol>
<li>Receive a  http request</li>
<li>Verify if  Customer has  a certain number of orders</li>
<li>If # of orders constitutes that he is a big spender, notify slack chat room</li>
<li>Send back general response to service request</li>
</ol>
<h3>Preparation</h3>
<p>I need:</p>
<ol>
<li>SQL Server Database Server and a database with customer information</li>
<li>Slack Channel\user</li>
<li> Something to post the http Request (<a href="https://www.getpostman.com/">Postman</a> installed: check)</li>
<li>Customers that have big orders</li>
<li>Customers that don&#8217;t have big orders</li>
<li>Stored Procedure  to retrieve Customer Order Details</li>
</ol>
<p>Going to be using the AdventureWorksLT database for this one, you can do this in Azure as well ( <a href="https://docs.microsoft.com/en-us/azure/sql-database/sql-database-get-started-portal">link).</a></p>
<p>I created a simple stored proc that retrieves some basic Customer Info ( Id, First,Last, OrderID,  Product Name, Order Quantity, and Line  Amount  ) based on customer ID:</p>
<pre class="lang:tsql decode:true" title="SalesLT.RetrieveSaleDetails">-- =============================================
-- Author:    Esteban Smits
-- =============================================
CREATE PROCEDURE SalesLT.RetrieveSaleDetails
(
    -- Add the parameters for the stored procedure here
    @CustomerID int
)
AS
BEGIN
Select C.CustomerID, C.FirstName, C.LastName, SOH.SalesOrderID, 
P.Name,
SOD.OrderQty, SOD.LineTotal from SalesLT.Customer C
join SalesLT.SalesOrderHeader SOH on SOH.CustomerId =C.CustomerID
join SalesLT.SalesOrderDetail SOD on SOD.SalesOrderId  =  SOH.SalesOrderId
join SalesLT.Product P on P.ProductID = SOD.ProductID
where C.CustomerId  = @CustomerID
End        
GO
</pre>
<p>I also queried the database to find Customers with low and high quantity  orders.</p>
<pre class="lang:default decode:true " title="Query to Find Low and high Quantity Customer Orders">If(OBJECT_ID('tempdb..#tempDB') Is Not Null)
Begin
    Drop Table #tempDB
End 
 Select C.CustomerID, Sum(SOD.OrderQty) as 'NumOrders' into #tempDB  from SalesLT.Customer C
join SalesLT.SalesOrderHeader SOH on SOH.CustomerId =C.CustomerID
join SalesLT.SalesOrderDetail SOD on SOD.SalesOrderId  =  SOH.SalesOrderId
group by C.CUstomerID 
Select * from (Select top 2 * from #tempDB   order by NumOrders DESC) as a1
union
Select * from (Select top 2 * from #tempDB   order by NumOrders ASC) as a2
</pre>
<p>Excellent, results:</p>
<p id="UtiqzAM"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a496a21415.png"><img loading="lazy" decoding="async" width="170" height="102" class="alignnone size-full wp-image-196 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a496a21415.png" alt="" /></a></p>
<p>Onto  setting up the Logic App.</p>
<h3>Setting up a Logic App</h3>
<p><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4a0bf21ff.png"><img loading="lazy" decoding="async" class="wp-image-197 alignleft" src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4a0bf21ff.png" alt="" width="125" height="316" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4a0bf21ff.png 298w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4a0bf21ff-119x300.png 119w" sizes="(max-width: 125px) 100vw, 125px" /></a>Go to the Azure Portal and Type in Logic App.<br />
Give it a name, select your subscription, create or  use an existing Resource and Res. location.</p>
<p>Please note you can add Log Location but only if you have created an OMS Log Storage . I created one in a directory but even though it was shared between my 2 directories I wasn&#8217;t able to select it from the dropdown. Wasn&#8217;t the scope so I am going to leave that one for now.</p>
<p>After hitting &#8220;Create&#8221; ,azure requires time  to deploy the Application (takes 30 seconds).</p>
<p>Refresh the Logic Apps window and a new resource will appear in the list. Click into it. A screen is visualized which reminds me of a Microsoft Workflow, IFTTT, Zapier: (i.e. automation  tooling).</p>
<p id="LiqyQdp"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4b4c88fe8.png"><img loading="lazy" decoding="async" class="alignnone wp-image-198 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4b4c88fe8.png" alt="" width="489" height="244" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4b4c88fe8.png 1240w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4b4c88fe8-300x150.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4b4c88fe8-768x383.png 768w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4b4c88fe8-1024x511.png 1024w" sizes="(max-width: 489px) 100vw, 489px" /></a></p>
<p>For the purposes of my example  scenario above, I clicked on  &#8220;When an HTTP Request is received&#8221; as my initial starter action. Please note you can change this later so its a good idea to start with the easiest trigger for your first app. Now the very first thing I wondered was &#8220;wait.. all the other azure services make having some access token the first step , <em>where is that security in  Logic Apps</em>?&#8221;</p>
<h3>How do logic apps secure access?</h3>
<p>By default  every  Logic App includes a shared access Signature which is built into the URL. the signature is made up of 3 parts,  version id (sv), signature (sig) and permission type (sp).<br />
You can learn mor about logic app and securing them  here:<br />
<a href="https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-securing-a-logic-app">Secure access to your logic apps</a></p>
<h3>Building the App</h3>
<p>First step is to have the starting event &#8220;When a HTTP request is recieved&#8221; , I made that a post event. Make sure you do the same unless you want a get event (which is fine by me).I used the data I was going to send  as the model:<br />
{ &#8220;customerid&#8221;:29796, &#8220;name&#8221;: &#8220;Jack Moneybags&#8221;}</p>
<p id="iVwluDn"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a524929f1c.png"><img loading="lazy" decoding="async" width="497" height="105" class="alignnone size-full wp-image-206 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a524929f1c.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a524929f1c.png 497w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a524929f1c-300x63.png 300w" sizes="(max-width: 497px) 100vw, 497px" /></a></p>
<p>it created this, schema model which was fine. I have heard that sometimes it won&#8217;t set the correct type for integers so be sure to check as mileage may vary.</p>
<pre class="lang:js decode:true" title="JSON Schema">{
    "type": "object",
    "properties": {
        "customerid": {
            "type": "integer"
        },
        "name": {
            "type": "string"
        }
    }
}</pre>
<p>Once you  save, it will create the  HTTP Request  URL but not until you save, so keep that in mind.</p>
<p id="zqoPEcd"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a52b1e7718.png"><img loading="lazy" decoding="async" width="612" height="338" class="alignnone size-full wp-image-207 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a52b1e7718.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a52b1e7718.png 612w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a52b1e7718-300x166.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></a></p>
<p>I decided  on the logic for the order counter to be based on number of  orders that had units purchased  greater than 3 , So I needed a  counter  and I wanted a Boolean . I initialized 2 variables (Click &#8220;add an Action&#8221; and search for initialize variable) , OrderCounter  (integer)and BigOrder (boolean).</p>
<p id="AlVPmpR"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a5188e2771.png"><img loading="lazy" decoding="async" width="628" height="362" class="alignnone size-full wp-image-205 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a5188e2771.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a5188e2771.png 628w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a5188e2771-300x173.png 300w" sizes="(max-width: 628px) 100vw, 628px" /></a></p>
<p>I then needed to get data from SQL server, it was as stored  procedure  so I clicked on &#8220;Add an Action&#8221; and did a search for Stored procedure.</p>
<p>Once added it needs to be able to connect to SQL server , you will need to provide connection string  details plus  a valid credential for that database\stored proc.</p>
<p id="cVwCjzh"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a537392861.png"><img loading="lazy" decoding="async" width="582" height="345" class="alignnone size-full wp-image-209 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a537392861.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a537392861.png 582w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a537392861-300x178.png 300w" sizes="(max-width: 582px) 100vw, 582px" /></a></p>
<p>Once that was setup, it provided a list of possible Stored Procedures that I  had  and based on the selected stored Procedure, it would populate a list of parameters under it , which could be populated.</p>
<p>I assigned the initial data received in the request as the parameter in for customerid .</p>
<p id="LmEbcsQ"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a53e5a1e5b.png"><img loading="lazy" decoding="async" width="930" height="333" class="alignnone size-full wp-image-211 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a53e5a1e5b.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a53e5a1e5b.png 930w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a53e5a1e5b-300x107.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a53e5a1e5b-768x275.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></a></p>
<p>Ok great. now I had data but i had to iterate through it. so I need a loop or something.  A quick search returns that a &#8220;for each Action&#8221; would be the right approach. Added that as an action and used the result set table (it was a dynamic value you could pass through) to iterate through that.</p>
<p id="kLGvMgU"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a56b68e33d.png"><img loading="lazy" decoding="async" width="847" height="164" class="alignnone size-full wp-image-215 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a56b68e33d.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a56b68e33d.png 847w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a56b68e33d-300x58.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a56b68e33d-768x149.png 768w" sizes="(max-width: 847px) 100vw, 847px" /></a></p>
<p>Now that a had an iterator, I added a condition inside of it to check the OrderQty of the results ( it had it available) and checked to see if the value was greater than 3. if it was increment the NumberOfOrders, using an action called &#8220;Increment Variable&#8221;. Which is important because I tried using assign variable of variable +1 and that didn&#8217;t work, so I use increment variable.</p>
<p id="sjNVCRi"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a56d20be2e.png"><img loading="lazy" decoding="async" width="1142" height="540" class="alignnone size-full wp-image-216 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a56d20be2e.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a56d20be2e.png 1142w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a56d20be2e-300x142.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a56d20be2e-768x363.png 768w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a56d20be2e-1024x484.png 1024w" sizes="(max-width: 1142px) 100vw, 1142px" /></a></p>
<p>Next we need to evaluate if the customer has enough orders to be considered a &#8220;Big Order&#8221; customer. For that I need an &#8220;If Condition&#8221;,  a &#8220;set variable action&#8221;, and additionally a new event of  &#8220;Slack Post Message Action&#8221;, because if the  customer is a big Order Customer than we want to send a slack message.</p>
<p><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a54e556672.png"><img loading="lazy" decoding="async" width="1196" height="591" class="alignnone size-full wp-image-213 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a54e556672.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a54e556672.png 1196w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a54e556672-300x148.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a54e556672-768x380.png 768w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a54e556672-1024x506.png 1024w" sizes="(max-width: 1196px) 100vw, 1196px" /></a></p>
<p>The Slack connector will need you to login  for authentication and you  need to have enough administrative grants in Slack to grant authorization .</p>
<p id="EhzvMCJ"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a58683af2b.png"><img loading="lazy" decoding="async" width="1106" height="624" class="alignnone size-full wp-image-221 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a58683af2b.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a58683af2b.png 1106w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a58683af2b-300x169.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a58683af2b-768x433.png 768w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a58683af2b-1024x578.png 1024w" sizes="(max-width: 1106px) 100vw, 1106px" /></a></p>
<p>Finally we need to return the general results, the HTTP output response action.</p>
<p>I created a final action event of response and typed in a basic body JSON message, using the dynamic content menu on the right to plugin  my variables for the response.</p>
<p id="mYgHJGp"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a57db1854a.png"><img loading="lazy" decoding="async" width="646" height="222" class="alignnone size-full wp-image-218 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a57db1854a.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a57db1854a.png 646w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a57db1854a-300x103.png 300w" sizes="(max-width: 646px) 100vw, 646px" /></a></p>
<h3>Results</h3>
<p>John Bodega Customer id 29844  has no high volume orders, so his total count is a big fat goose egg.</p>
<p id="mDjIeLV"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4cecc1f71.png"><img loading="lazy" decoding="async" width="945" height="476" class="alignnone size-full wp-image-200 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4cecc1f71.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4cecc1f71.png 945w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4cecc1f71-300x151.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4cecc1f71-768x387.png 768w" sizes="(max-width: 945px) 100vw, 945px" /></a></p>
<p>with no slack message.</p>
<p>Jack MoneyBags  customer id 29796, has 30 high volume 0rders.</p>
<p id="cWgUZVJ"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d8434913.png"><img loading="lazy" decoding="async" width="939" height="459" class="alignnone size-full wp-image-202 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d8434913.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d8434913.png 939w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d8434913-300x147.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d8434913-768x375.png 768w" sizes="(max-width: 939px) 100vw, 939px" /></a>Yay, slack notification!</p>
<p id="nDBAoKT"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d7a28f41.png"><img loading="lazy" decoding="async" width="1145" height="288" class="alignnone size-full wp-image-201 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d7a28f41.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d7a28f41.png 1145w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d7a28f41-300x75.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d7a28f41-768x193.png 768w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a4d7a28f41-1024x258.png 1024w" sizes="(max-width: 1145px) 100vw, 1145px" /></a></p>
<p>&nbsp;</p>
<h2>Bonus Round : Alert Log</h2>
<p id="nsxiKrm">My app didn&#8217;t work at the beginning so as I was looking into logging ( which Azure Logic Apps don&#8217;t have a great deal of debugging functionality just FYI) and  I noticed that Azure just recently released a new version of their alert logger.</p>
<p>Setup is pretty self explanatory ( and pictured below),  but the results were nice.</p>
<p id="uMoxSnl"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a58495200e.png"><img loading="lazy" decoding="async" width="1374" height="760" class="alignnone size-full wp-image-219 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a58495200e.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a58495200e.png 1374w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a58495200e-300x166.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a58495200e-768x425.png 768w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a58495200e-1024x566.png 1024w" sizes="(max-width: 1374px) 100vw, 1374px" /></a></p>
<p id="AjLWpJR"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a5850b6a29.png"><img loading="lazy" decoding="async" width="908" height="713" class="alignnone size-full wp-image-220 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a5850b6a29.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a5850b6a29.png 908w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a5850b6a29-300x236.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a5850b6a29-768x603.png 768w" sizes="(max-width: 908px) 100vw, 908px" /></a></p>
<p>Notifications (text &amp; email):</p>
<p><img loading="lazy" decoding="async" class="alignleft" src="https://dl2.pushbulletusercontent.com/im5d1yt2fSUtneqntO9HKywjrZZSmrbk/Screenshot_20180714-125448.png" width="202" height="359" /><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a5933e136d.png"><img loading="lazy" decoding="async" class=" wp-image-223 alignleft" src="http://daxmax.com/wp-content/uploads/2018/07/img_5b4a5933e136d.png" alt="" width="342" height="275" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b4a5933e136d.png 833w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a5933e136d-300x241.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b4a5933e136d-768x616.png 768w" sizes="(max-width: 342px) 100vw, 342px" /></a></p>
<p id="OqSRbGv">
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/azure-logic-apps-webhook-driven-customer-identifier-using-sqlslack/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Durable Functions</title>
		<link>https://daxmax.com/azure-durable-functions/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=azure-durable-functions</link>
					<comments>https://daxmax.com/azure-durable-functions/#respond</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Fri, 13 Jul 2018 18:58:23 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=181</guid>

					<description><![CDATA[I will be exploring  Azure Functions and recently with more formal documentation, looking at durable functions , which are starting to make sense to me as valid pieces of a tech stack. So what are Azure functions? They are functions that might look similar  to a micro-service, they work based on some type of trigger &#8230; <p class="link-more"><a href="https://daxmax.com/azure-durable-functions/" class="more-link">Read more<span class="screen-reader-text"> "Azure Durable Functions"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>I will be exploring  Azure Functions and recently with more formal documentation, looking at durable functions , which are starting to make sense to me as valid pieces of a tech stack.</p>
<h3>So what are Azure functions?</h3>
<p>They are functions that might look similar  to a micro-service, they work based on some type of trigger whether its a timer  a queue, or an http request. They can be bound to many data types.</p>
<p>They are server less, so you don&#8217;t need to provision a setup for these functions. Azure will determine the function&#8217;s needs based on how many events run, and its activity,  so it&#8217;s consumption based.</p>
<h3>What are durable functions?</h3>
<p>imagine a chain of events that needs to run, or an event that triggers multiple other events,(Fan out , fan in) and  it needs to have something manage\track\ensure  reliable completion of that process. This  concept of having something orchestrate those multiple activities is what durable functions revolve around. Durable functions will store a state to track its current state, values returned , and completed events.</p>
<p>The key as I mentioned is the orchestrator  or durable function because it defines the workflow, triggers all the activity functions , and put itself to sleep  while it waits for events to complete. In the end it uses Azure storage to store  the current queues , tables to store state and finally uses as concept known as<strong> event sourcing</strong>  to track what events have been worked on; its an append only  list of events that have already been successfully run.</p>
<p>So durable functions store all this in a storage account, which when you set it up in a production environment you would need to provide a connection string  . Durable Functions refer to this persistence layer as a <strong>Task  Hub</strong>.</p>
<h2>Setting up Durable Functions</h2>
<p>Local setup requirements are:</p>
<ol>
<li>Visual Studio  (15.3 or greater )</li>
<li>Include  &#8220;Azure  Developer &#8221; in setup of  Visual Studio 2017</li>
<li>Ensure you have Microsoft Azure  Storage Emulator</li>
</ol>
<h3>Setting up your project for Durable functions</h3>
<ol>
<li>Create a new  Azure Functions Project</li>
<li>in the second screen I selected Azure v1 functions, which has a little more flexibility but you are free to use azure .net core functionality.</li>
<li>Wait for project startup to completed.</li>
<li>Install Azure.WebJobs.Extensions.DurableTask (or if .net core there is a <a href="https://www.nuget.org/packages/DurableTask.Core/">Core package</a>).</li>
<li>
<p id="JdOIhZe"><a href="http://daxmax.com/wp-content/uploads/2018/07/img_5b484a6bb0958.png"><img loading="lazy" decoding="async" width="1540" height="497" class="alignnone size-full wp-image-182 " src="http://daxmax.com/wp-content/uploads/2018/07/img_5b484a6bb0958.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/07/img_5b484a6bb0958.png 1540w, https://daxmax.com/wp-content/uploads/2018/07/img_5b484a6bb0958-300x97.png 300w, https://daxmax.com/wp-content/uploads/2018/07/img_5b484a6bb0958-768x248.png 768w, https://daxmax.com/wp-content/uploads/2018/07/img_5b484a6bb0958-1024x330.png 1024w" sizes="(max-width: 1540px) 100vw, 1540px" /></a></p>
</li>
</ol>
<h3>Orchestrator Function Rules &amp; Constraints</h3>
<div><strong>Durable orchestrators functions  must be deterministic</strong> (i.e . the function must produce the same results provided the same parameters always) , so don&#8217;t :<br />
use random numbers,  use current date time, access data , or run events within the function based on any non-deterministic data.<br />
The main reason  and need  for this  is because of the way Orchestrator functions restarts; it will start the entire function over again, however, it  uses the event source  list  to determine what functions have already run . It first checks the event source storage to see if the event has already been processed and if so retrieves the previously return value\objects  and if so moves on  to the next event. But all code in the orchestrator function will be re-run again .<br />
<strong>Sidenote:</strong>There is one method you can call for  Date\time called <em><strong>DurableOrchestrationContext.CurrentUtcDateTime</strong></em> which  can be used if you need dateTime, but make sure you look at your patterns to ensure it makes sense within the Orchestrator itself.</div>
<p>The recommended\prescribed solution for durable functions is to prep the data you need and pass it through to the function.</p>
<p><strong>Durable Orchestrator Functions must be non-blocking.<br />
</strong>So don&#8217;t block  the thread, or perform operations which you would normally have to await for, you should do those in your activity functions and then wait on them.</p>
<p><strong>Don&#8217;t create infinite loops.</strong><br />
The easiest way to avoid this is to use the orchestrator function as a run through process  (which can be run infinite # of times independent of each other) but if you need something to continue to run  a workflow forever  and infinitely looped that could be done using <em><strong>ContinueAsNew</strong></em>.</p>
<h3>Logging  in a Function Orchestrator</h3>
<p>Recommended that you should use the built-in TraceWriter.  Consider that every Log can be rewritten because of how an orchestrator is re-run each time so you can use the attribute <em><strong>DurableOrchestrationContext.IsReplaying </strong></em>to see if its replaying  this specific line.</p>
<h2>Application Creation</h2>
<p>I created  a Orchestrator Starter, an Orchestrator, and then I created a class with mock Activity Functions I  wanted to run. It is a good idea to have an orchestrator starter as this can do all the preliminary work to prepare the data for the orchestrator.</p>
<pre class="lang:c# decode:true " title="Orchestrator Function">using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Threading.Tasks;

namespace DurableFunctions
{
    public static class ProcessVideoOrchestrator
    {
        [FunctionName("O_ProcessVideo")]
        public static async Task&lt;object&gt; ProcessVideo(
            [OrchestrationTrigger] DurableOrchestrationContext context, /* tells azure runtime that this is an orchestrator function */
            TraceWriter log 
            )
        {
            var videoLocation = context.GetInput&lt;string&gt;();
            if (!context.IsReplaying) { 
                log.Info("Start A_TranscodeVideo");
            }
            var transcodeLocation   = await context.CallActivityAsync&lt;string&gt;("A_TranscodeVideo", videoLocation); // will put process to sleep while it waits
            if (!context.IsReplaying)
            {
                log.Info("Start A_getThumbnail");
            }

            var thumbnailLocation =  await context.CallActivityAsync&lt;string&gt;("A_getThumbnail", transcodeLocation);
            if (!context.IsReplaying)
            {
                log.Info("Start A_prependIntro");
            }
            var introLocation = await context.CallActivityAsync&lt;string&gt;("A_prependIntro", transcodeLocation);
            return new {transcodeLocation, thumbnailLocation,introLocation};
        }
    }
}
</pre>
<pre class="lang:default decode:true" title="Basic Activity Triggers">using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace DurableFunctions
{
    public static class ProcessorActivities
    {
        [FunctionName("A_TranscodeVideo")]
        public static async Task&lt;string&gt; TranscodeVideo( [ActivityTrigger] string inputVideo, TraceWriter log)
        {
            log.Info($" Transcoding {inputVideo}" );
            await Task.Delay(5000);
            return "transcoded.mp4";
        }
        [FunctionName("A_getThumbnail")]
        public static async Task&lt;string&gt; GetThumbnail([ActivityTrigger] string transcoded, TraceWriter log)
        {
            log.Info($" generating Thumbnail for {transcoded}");
            await Task.Delay(5000);
            return "thumbnail.jpg";
        }
        [FunctionName("A_prependIntro")]
        public static async Task&lt;string&gt; PrependIntro([ActivityTrigger] string transcoded, TraceWriter log)
        {
            log.Info($" generating prepended intro for {transcoded}");
            await Task.Delay(5000);
            return "prependedvideo.mp4";
        }

    }
}
</pre>
<h3>Output</h3>
<pre class="lang:js decode:true" title="Orchestrator Direct Output">{
id: "d96145604927468ba7fb747582d3e49a",
statusQueryGetUri: "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/d96145604927468ba7fb747582d3e49a?taskHub=DurableFunctionsHub&amp;connection=Storage&amp;code=dsYv5U1Rjw6IaQUBMEtEYiGGfhEWjMW8iPcre7QS0aub3GjL6LFnbw==",
sendEventPostUri: "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/d96145604927468ba7fb747582d3e49a/raiseEvent/{eventName}?taskHub=DurableFunctionsHub&amp;connection=Storage&amp;code=dsYv5U1Rjw6IaQUBMEtEYiGGfhEWjMW8iPcre7QS0aub3GjL6LFnbw==",
terminatePostUri: "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/d96145604927468ba7fb747582d3e49a/terminate?reason={text}&amp;taskHub=DurableFunctionsHub&amp;connection=Storage&amp;code=dsYv5U1Rjw6IaQUBMEtEYiGGfhEWjMW8iPcre7QS0aub3GjL6LFnbw=="
}</pre>
<pre class="lang:default decode:true" title="statusQueryGetUri Returned Value">{
instanceId: "d96145604927468ba7fb747582d3e49a",
runtimeStatus: "Completed",
input: "this.mp4",
customStatus: null,
output: {
transcodeLocation: "transcoded.mp4",
thumbnailLocation: "thumbnail.jpg",
introLocation: "prependedvideo.mp4"
},
createdTime: "2018-07-13T18:31:42Z",
lastUpdatedTime: "2018-07-13T18:32:00Z"
}</pre>
<p>So its important to understand that the function will return a traceable response, but you still need to get the data from the statusQueryGetUri.</p>
<p>In my next post I am going to explore into Durable Function rest API function.</p>
<p>Please note the information provided here was heavily based on  <a href="https://app.pluralsight.com/profile/author/mark-heath">Mark Heath</a>&#8216;s excellent   <a href="https://app.pluralsight.com/library/courses/azure-durable-functions-fundamentals/table-of-contents">Durable Functions Fundamentals </a> in Pluralsight.</p>
<h3>Valuable Links</h3>
<p><a href="https://github.com/Azure/azure-functions-durable-extension">Durable Functions Repository</a><br />
<a href="https://docs.microsoft.com/en-us/azure/azure-functions/durable-functions-overview">Durable Functions Documentation</a><br />
<a href="https://github.com/EstebanSmits/DurableFunctions">Durable Functions  Project</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/azure-durable-functions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<series:name><![CDATA[Durable Functions]]></series:name>
	</item>
		<item>
		<title>Setting up a .NET Cloud Service Bus</title>
		<link>https://daxmax.com/setting-up-a-net-cloud-service-bus/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=setting-up-a-net-cloud-service-bus</link>
					<comments>https://daxmax.com/setting-up-a-net-cloud-service-bus/#respond</comments>
		
		<dc:creator><![CDATA[Esteban Smits]]></dc:creator>
		<pubDate>Mon, 18 Jun 2018 05:59:16 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Architecture]]></category>
		<guid isPermaLink="false">http://daxmax.com/?p=166</guid>

					<description><![CDATA[So  I was watching this Plurasight course: https://app.pluralsight.com/library/courses/microsoft-azure-developers-what-to-use/table-of-contents &#8230; and it talks about all the different Azure enabled services . IaaS, PaaS, and even LaaS (i.e. server-less).  I was following the instructor when I realize that I personally hadn&#8217;t setup an azure  service bus app from scratch myself, so I decided to venture through. I will &#8230; <p class="link-more"><a href="https://daxmax.com/setting-up-a-net-cloud-service-bus/" class="more-link">Read more<span class="screen-reader-text"> "Setting up a .NET Cloud Service Bus"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>So  I was watching this Plurasight course:<br />
<a href="https://app.pluralsight.com/library/courses/microsoft-azure-developers-what-to-use/table-of-contents">https://app.pluralsight.com/library/courses/microsoft-azure-developers-what-to-use/table-of-contents</a> &#8230; and it talks about all the different Azure enabled services . IaaS, PaaS, and even LaaS (i.e. server-less).  I was following the instructor when I realize that I personally hadn&#8217;t setup an azure  service bus app from scratch myself, so I decided to venture through.</p>
<p>I will be following these directions loosely as always:<br />
<a href="https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-authentication-and-authorization">https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-authentication-and-authorization</a></p>
<h2><strong>Azure Service Bus Setup</strong></h2>
<p>Logging to your azure portal, search for Service bus and give it a name, select a subscription type, location and hit create.</p>
<p id="ZShwGFF"><a href="http://daxmax.com/wp-content/uploads/2018/06/img_5b2702702eeeb.png"><img loading="lazy" decoding="async" width="293" height="511" class="alignnone size-full wp-image-168 " src="http://daxmax.com/wp-content/uploads/2018/06/img_5b2702702eeeb.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/06/img_5b2702702eeeb.png 293w, https://daxmax.com/wp-content/uploads/2018/06/img_5b2702702eeeb-172x300.png 172w" sizes="(max-width: 293px) 100vw, 293px" /></a></p>
<p>Once that is done , create your queue. You can select  Message TTL, Lock duration,  enable dup. detection, <a href="https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues">enable dead letter queue</a>,  and <a href="https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sessions">message sessions.</a></p>
<p id="sOSIiHa"><a href="http://daxmax.com/wp-content/uploads/2018/06/img_5b2703880907f.png"><img loading="lazy" decoding="async" width="404" height="563" class="alignnone size-full wp-image-169 " src="http://daxmax.com/wp-content/uploads/2018/06/img_5b2703880907f.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/06/img_5b2703880907f.png 404w, https://daxmax.com/wp-content/uploads/2018/06/img_5b2703880907f-215x300.png 215w" sizes="(max-width: 404px) 100vw, 404px" /></a></p>
<h2>Console Application Setup</h2>
<p>So we have a bus started and a queue that can manage incoming messages. Now we make  an app that can run the process.</p>
<p>Start up a project for a .net core console App, nuget install <a href="https://www.nuget.org/packages/Microsoft.Azure.ServiceBus/">Microsoft.Azure.ServiceBus, </a>and then I just copy \pasted the code from the linked reference above.  I adjusted the configuration and looked up why the article&#8217;s code was using <a href="https://blog.stephencleary.com/2014/12/a-tour-of-task-part-6-results.html">GetAwaiter().GetResult()</a> ( I don&#8217;t recall using it before), and turns it out its because when Task is only returned in order to wait for it, you can only  call it this way.</p>
<p>Ran the program as is.</p>
<p>Ok so now my queue has 10 messages in it:</p>
<p id="FHJTpkX"><a href="http://daxmax.com/wp-content/uploads/2018/06/img_5b272005d870f.png"><img loading="lazy" decoding="async" width="494" height="312" class="alignnone size-full wp-image-171 " src="http://daxmax.com/wp-content/uploads/2018/06/img_5b272005d870f.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/06/img_5b272005d870f.png 494w, https://daxmax.com/wp-content/uploads/2018/06/img_5b272005d870f-300x189.png 300w" sizes="(max-width: 494px) 100vw, 494px" /></a></p>
<p>I found a page that has all the information for the attributes that should be in the message payload,<br />
<a href="https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messages-payloads">https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messages-payloads</a> as I wanted to see more details.</p>
<p>I also adapted the code slightly so that it can send , receive\abandon  or receive\complete .</p>
<p>Now keep in mind I was tempted to use the queue&#8217;s PeekLock\Abandon  functionality to get all messages and parse the ones I wanted, but that technology is for topics and  I wasn&#8217;t trying to create a topic so  I will link you here in case you are interested. This is when found an interesting issue which probably isn&#8217;t really an issue. The  Queue client Register Message Handler will continue to retrieve the same messages over and over unless you complete them; abandoning them does not pull them out of the list. It also increases the  delivery attempt count and if it goes past the queue&#8217;s max, it throws them into the dead letter count.</p>
<p id="SPfWEkM"><a href="http://daxmax.com/wp-content/uploads/2018/06/img_5b273dc8a2fa4.png"><img loading="lazy" decoding="async" width="495" height="343" class="alignnone size-full wp-image-174 " src="http://daxmax.com/wp-content/uploads/2018/06/img_5b273dc8a2fa4.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/06/img_5b273dc8a2fa4.png 495w, https://daxmax.com/wp-content/uploads/2018/06/img_5b273dc8a2fa4-300x208.png 300w" sizes="(max-width: 495px) 100vw, 495px" /></a></p>
<p>The DLQ (dead letter Queue) is interesting because its a subset  of the parent queue, in order to call it you call the original queue name plus $DeadLetterQueue, but then  also found that there is a <a href="https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.servicebus.entitynamehelper.formatdeadletterpath?view=azure-dotnet#Microsoft_Azure_ServiceBus_EntityNameHelper_FormatDeadLetterPath_System_String_">EntityNameHelper.FormatDeadLetterPath </a>, which is going to be the better way to get these messages. These messages have some interesting data like why they failed:</p>
<p id="gXCcSzx"><a href="http://daxmax.com/wp-content/uploads/2018/06/img_5b2743d56dbcd.png"><img loading="lazy" decoding="async" width="783" height="211" class="alignnone size-full wp-image-176 " src="http://daxmax.com/wp-content/uploads/2018/06/img_5b2743d56dbcd.png" alt="" srcset="https://daxmax.com/wp-content/uploads/2018/06/img_5b2743d56dbcd.png 783w, https://daxmax.com/wp-content/uploads/2018/06/img_5b2743d56dbcd-300x81.png 300w, https://daxmax.com/wp-content/uploads/2018/06/img_5b2743d56dbcd-768x207.png 768w" sizes="(max-width: 783px) 100vw, 783px" /></a></p>
<p>You can complete them to officially close them out.<br />
Dominic Buford helped me out<br />
<a href="https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-fundamentals-hybrid-solutions">https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-fundamentals-hybrid-solutions</a></p>
<p>You can find my base work here:<br />
<a href="https://github.com/EstebanSmits/ServiceBusConsole">https://github.com/EstebanSmits/ServiceBusConsole</a></p>
<h2>Relevant links</h2>
<p id="choose-between-azure-services-that-deliver-messages"><a href="https://docs.microsoft.com/en-us/azure/event-grid/compare-messaging-services?toc=%2fazure%2fservice-bus-messaging%2ftoc.json&amp;bc=%2fazure%2fservice-bus-messaging%2fbreadcrumb%2ftoc.json">Choose between Azure services that deliver messages</a></p>
<p><a href="https://azure.microsoft.com/en-us/blog/azure-service-bus-net-standard-client-ga/">Service Bus .NET Samples</a></p>
<p><a href="https://github.com/Azure/azure-service-bus/tree/master/samples/DotNet/GettingStarted/Microsoft.Azure.ServiceBus/BasicSendReceiveUsingQueueClient">https://github.com/Azure/azure-service-bus/tree/master/samples/DotNet/GettingStarted/Microsoft.Azure.ServiceBus/BasicSendReceiveUsingQueueClient</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://daxmax.com/setting-up-a-net-cloud-service-bus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
