<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
>

<channel>
	<title>PeterKellner.net</title>
	<atom:link href="http://peterkellner.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://peterkellner.net</link>
	<description>Software Technology Consultant, Pluralsight Author, JavaScript, React and Node</description>
	<lastBuildDate>Tue, 25 Jun 2019 16:57:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.2.2</generator>
<site xmlns="com-wordpress:feed-additions:1">35196393</site>	<item>
		<title>Chrome Extension for Viewing Static Data in NextJS</title>
		<link>http://peterkellner.net/2019/06/16/a-chrome-extension-for-viewing-serialized-data-in-nextjs/</link>
				<pubDate>Sun, 16 Jun 2019 23:12:07 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[NextJS]]></category>
		<category><![CDATA[SPA]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4782</guid>
				<description><![CDATA[Chrome Extension to view that static data associated with a NextJS Server-side React app to help make smaller and increase web performance.]]></description>
								<content:encoded><![CDATA[
<p><strong>TLDR;</strong> Install the Google Chrome extension Utilities Extension&#8221; and quickly see both the size and data associated with your <a href="https://nextjs.org/">Next.js</a> server side rendered <a href="https://reactjs.org/">React </a>app.  That is, the static data included in your first page download. Using this information, you can reduce the size of that static data downloaded and make your web pages load faster for your users.</p>



<ul class="wp-block-gallery columns-2 is-cropped"><li class="blocks-gallery-item"><figure><img src="http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/BlogPost2.png" alt="" data-id="4789" data-link="http://peterkellner.net/2019/06/16/a-chrome-extension-for-viewing-serialized-data-in-nextjs/blogpost2/" class="wp-image-4789" srcset="http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/BlogPost2.png 424w, http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/BlogPost2-283x300.png 283w" sizes="(max-width: 424px) 100vw, 424px" /><figcaption>Showing Size of __NEXT_DATA__ as 304K</figcaption></figure></li><li class="blocks-gallery-item"><figure><img src="http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/BlogPost5-1.png" alt="" data-id="4797" data-link="http://peterkellner.net/2019/06/16/a-chrome-extension-for-viewing-serialized-data-in-nextjs/blogpost5-2/" class="wp-image-4797"/><figcaption>Right-mouse Button, View __NEXT_DATA_JS Results</figcaption></figure></li></ul>



<h2>Installing and Using This Chome Extension</h2>



<ul class="wp-block-gallery columns-1 is-cropped"><li class="blocks-gallery-item"><figure><img src="http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/chrome-web-store.png" alt="" data-id="4812" data-link="http://peterkellner.net/2019/06/16/a-chrome-extension-for-viewing-serialized-data-in-nextjs/chrome-web-store/" class="wp-image-4812" srcset="http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/chrome-web-store.png 635w, http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/chrome-web-store-300x158.png 300w" sizes="(max-width: 635px) 100vw, 635px" /><figcaption>Install<a href="https://chrome.google.com/webstore/detail/nextjs-utilities-extensio/ffcogmoganomoabikgmcmckdgojnpldo">https://chrome.google.com/webstore/detail/nextjs-utilities-extensio/ffcogmoganomoabikgmcmckdgojnpldo</a> From Chrome Extensions Store<br></figcaption></figure></li></ul>



<p>All you need to do to use this extension is go to the Chrome Extension Store and search for &#8220;NextJS&#8221; or click on this <a href="https://chrome.google.com/webstore/detail/nextjs-utilities-extensio/ffcogmoganomoabikgmcmckdgojnpldo">URL</a>.</p>



<p>You&#8217;ll now have a purple icon on your toolbar as shown above with the letter &#8220;N&#8221; in it.  If you are on a page that is generated with Next.js (like my example page https://svcc.mobi, the next thing is to click on the &#8220;N&#8221; toolbar icon.  Immediately, the size of the Next.js static <strong>window.__NEXT_DATA__</strong> will be down (that&#8217;s the 384K shown in the above image). Just FYI, K means kilobytes, M means megabytes and b means bytes.  If your page was not generated by a Next.js app, &#8220;n/a&#8221; will be shown for not applicable.</p>



<p>If you want to see the actual data, right mouse button on the toolbar icon and click the context menu choice &#8220;View NextJS Data&#8221;. That way, if your __NEXT_DATA__ is large, you can visually see where the problem is.  Notice in my example, it&#8217;s 384K.  That&#8217;s huge!  What I need to do is go back to my application and reduce the size by downloading only the session data I need to display and not a lot of other data I don&#8217;t use.</p>



<h2>First Page Download Problem With SPA&#8217;s</h2>



<p>The Achilles heel of Single Page Apps (SPA&#8217;s) is that the first time a web page that is viewed, there is a long delay between when a the user lands on the page and the browser user sees any data. This problem is known as &#8220;the first page download problem&#8221;.  You can read an authoritative post on this topic by Guillermo Raunch titled &#8220;<a href="https://rauchg.com/2014/7-principles-of-rich-web-applications/#server-rendered-pages-are-not-optional">7 Principles of Rich Web Applications &#8211; Server Rendered Pages Are  Not Optional</a>&#8220;.</p>



<p>To mitigate this problem in <a href="https://reactjs.org/">React</a>, the most popular single page app (SPA) framework out there, written and used by <a href="https://www.facebook.com/">Facebook</a>, is to first run the app inside of the server before the response from the first request is made, and then download all that HTML on the first request.  Since the JavaScript can all be run inside the server with <a href="https://nodejs.org/en/">Node.JS</a>, and, React has built in support for doing that through a method named <a href="https://reactjs.org/docs/react-dom-server.html#rendertostring">renderToString</a>, this is easy, but with one caveat.  </p>



<p>What happens if the web page you are rendering includes data that is asynchronously loaded on it such as data that is retrieved from an external service (like a REST service for example).  Now, when the Node server figures out all your HTML to download, it must also complete those REST service calls synchronously before responding with the full HTML. Not only that, That REST data now represents the &#8220;State&#8221; of the SPA, and so that REST data must also be downloaded along with the the HTML so that after the page downloads, it can be &#8220;re-hydrated&#8221; with that State data to continue working like a normal web page.</p>



<h2>How The Chrome Extension Works</h2>



<p>Chrome extensions that do this kind of thing can be tricky to write because they don&#8217;t easily interact with the JavaScript execution context running on any give web page.  They are good at reading the static HTML and running JavaScript in their own isolated execution context, but getting to the actual execution context of the page is tricky. Luckily (and hopefully), for you it will just work.</p>



<p>You can think of what this extension does is no more complex than opening up chrome debug tools and going to the console window on a page generated by an app written in Next.js.  Then, typing at the command prompt:  <strong>JSON.stringify(window.__NEXT_DATA__)</strong>.  This chrome extension just gives you a short cut to this as well as a nice way to see the actual data formatted in JSON.</p>



<ul class="wp-block-gallery columns-1 is-cropped"><li class="blocks-gallery-item"><figure><img src="http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/BlogPost6.png" alt="" data-id="4802" data-link="http://peterkellner.net/2019/06/16/a-chrome-extension-for-viewing-serialized-data-in-nextjs/blogpost6/" class="wp-image-4802" srcset="http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/BlogPost6.png 959w, http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/BlogPost6-300x188.png 300w, http://peterkellner.net/wp/wp/wp-content/uploads/2019/06/BlogPost6-768x481.png 768w" sizes="(max-width: 959px) 100vw, 959px" /><figcaption>Viewing __NEXT_DATA__ in the Chrome Dev Tools console<br></figcaption></figure></li></ul>



<h2>What Could Go Wrong?</h2>



<p>I&#8217;m writing this because even though I wrote this extension and use it heavily to keep my first page download size down to a reasonable size, over and over again, I make the same mistake.</p>



<p>I first browse to a page like https://svcc.mobi and then click on the &#8220;sessions&#8221; menu choice.  Following that, I click on the Chrome Extension toolbar icon.  I see 2K when I think I should be seeing a much large number (like 304K).  The reason is I did a &#8220;client side&#8221; link to my sessions page and the original page downloaded was from the home page which indeed, only had a 2K __NEXT_DATA__ object. </p>



<p>What I need to do is reload that page I&#8217;m on by positioning my cursor to the URL bar, selecting the current URL (https://svcc.mobi/sessions), and then pressing enter to get a new request sent to the server.  Now, pressing the Chrome extension icon will show the correct size of 304K that I expected.</p>



<h2>Looking for Feedback</h2>



<p>I&#8217;d love feedback on this extension as well as suggestions for how to enhance.  Please post issues to the GitHub repo where this extension lives with that.  </p>



<p><a href="https://github.com/pkellner/nextjs-utils-chromium-extension">https://github.com/pkellner/nextjs-utils-chromium-extension</a></p>



<p>Want To Know More About Developing Apps with Next.js?</p>



<p>You can head over to the awesome <a href="https://nextjs.org/learn/basics/getting-started">getting started docs</a> on the Next.js site or even better, you can watch my two hour course on <a href="https://pluralsight.pxf.io/4xezM">Pluralsight</a> titled <a href="http://pluralsight.pxf.io/6Qb0V">&#8220;Building Server-side Rendered React Apps&#8221;</a>. If you don&#8217;t have a Pluralsight account, you can click on <a href="//pluralsight.pxf.io/c/1196644/503634/7490">this link</a> and get a free trial and watch my full course before committing any money. You could also watch <a href="https://app.pluralsight.com/profile/author/peter-kellner">my other 8 courses</a> and I would not complain about that  <img src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Thanks for reading.</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">4782</post-id>	</item>
		<item>
		<title>Should You Comment Your Code When You Program?</title>
		<link>http://peterkellner.net/2018/12/25/should-you-comment-your-code-when-you-program/</link>
				<pubDate>Tue, 25 Dec 2018 17:52:09 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[ASP.NET 2.0]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4753</guid>
				<description><![CDATA[When to Comment Your Code (and not be made fun of)]]></description>
								<content:encoded><![CDATA[<p>I&#8217;ve read a lot about this and of course have my own personal opinions.  Basically, I think it depends, but don&#8217;t overdue it. I just published on Medium a short post explaining what I think and have a good example of when commenting makes sense.</p>
<p>Enjoy!  <a href="https://medium.com/@pkellner/when-you-should-comment-your-code-2fea26e7517a">https://medium.com/@pkellner/when-you-should-comment-your-code-2fea26e7517a</a></p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">4753</post-id>	</item>
		<item>
		<title>MacBook Pro 2018 vs 2015 Keyboard Head to Head</title>
		<link>http://peterkellner.net/2018/07/14/macbook-pro-2018-vs-2015-keyboard-head-to-head/</link>
				<comments>http://peterkellner.net/2018/07/14/macbook-pro-2018-vs-2015-keyboard-head-to-head/#comments</comments>
				<pubDate>Sun, 15 Jul 2018 03:57:07 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[Apple MacBook Pro]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4732</guid>
				<description><![CDATA[TLDR; The new 2018 revision 3 MacBook Pro seems to be a winner. A Little Background Hidden behind my MacWinGuy.com alias, I wrote a few block posts about the &#8220;new&#8221; 2016 and 2017 MacBooks. Bottom line, I did not like them and returned them.  The main reason was the keyboard though I did have some [&#8230;]]]></description>
								<content:encoded><![CDATA[<h2><a href="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/combined.png"><img class="alignnone size-full wp-image-4738" src="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/combined.png" alt="" width="600" height="279" srcset="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/combined.png 600w, http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/combined-300x140.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></a></h2>
<h2></h2>
<p><strong>TLDR;</strong> The new 2018 revision 3 MacBook Pro seems to be a winner.</p>
<h2>A Little Background</h2>
<p>Hidden behind my <a href="http://macwinguy.com/2016/11/why-i-returned-my-macbook-pro-15-with-the-touch-bar/">MacWinGuy.com</a> alias, I wrote a few block posts about the &#8220;new&#8221; 2016 and 2017 MacBooks. Bottom line, I did not like them and returned them.  The main reason was the keyboard though I did have some other problems (which did get solved).  I abandoned because of the keyboard.  Without going into too many details, I switched to an awesome Dell XPS 15 (top of the line) and just could not love it.  Ultimately, I went back and got a used MacBook Pro 2015 with the previous and loved keyboard.</p>
<h2>Typing Test, Head to Head, 2015 keyboard vs 2018 keyboard</h2>
<p>I just received my new loaded MacBook Pro 15 2018 with the Core-i9 and the newest (revision 3) keyboard.  I read several reviews yesterday today that said things like &#8220;the new keyboard is not awful&#8221;, but nothing particularly good.  My results are that it is significantly better.  My biggest complaint was tactile feedback was horrible and I could not type consistently or reliably.  I just put that to the test with the typing test from <a href="https://www.quicktypingtest.com/">https://www.quicktypingtest.com/</a>.</p>
<h2>Conclusion</h2>
<p>I believe the new generation 3 MacBook 15 keyboard is a winner.  I&#8217;ll let you know after 2 weeks if I still like it.  You can see that my typing speed is about the same on the 2015 MacBook as it is on the 2018 MacBook.</p>
<p>HTH&#8217;s.</p>
<table class="aligncenter" style="width: 90%; border-collapse: collapse; border-style: inset;" border="2" cellpadding="2">
<tbody>
<tr style="height: 193px;">
<td style="width: 111px; height: 193px;"><strong>MacBook Pro 2018</strong></td>
<td style="width: 150px; height: 193px;"><a href="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i9stats.png"><img class="alignnone wp-image-4734" src="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i9stats-300x204.png" alt="" width="229" height="156" /></a></td>
<td style="width: 396px; height: 193px;"><a href="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i9.png"><img class="alignnone wp-image-4736 size-full" src="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i9.png" alt="" width="689" height="104" srcset="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i9.png 689w, http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i9-300x45.png 300w" sizes="(max-width: 689px) 100vw, 689px" /></a></td>
</tr>
<tr style="height: 229px;">
<td style="width: 111px; height: 229px;"><strong>MacBook Pro 2015</strong></td>
<td style="width: 150px; height: 229px;"><a href="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i7stats.png"><img class="alignnone wp-image-4733" src="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i7stats.png" alt="" width="227" height="186" /></a></td>
<td style="width: 396px; height: 229px;"><a href="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i7.png"><img class="alignnone size-full wp-image-4735" src="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i7.png" alt="" width="692" height="103" srcset="http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i7.png 692w, http://peterkellner.net/wp/wp/wp-content/uploads/2018/07/i7-300x45.png 300w" sizes="(max-width: 692px) 100vw, 692px" /></a></td>
</tr>
</tbody>
</table>
<h2>Other First Impressions</h2>
<p>I have to say I&#8217;ve jumped straight to the keyboard. Just like my 2016 MacBook Pro, the screen seems much brighter (you can see that in the top picture).  Of course, 32Gig of memory has been a long standing want of mind and that&#8217;s pretty obvious how that will play out so I don&#8217;t need to review it.</p>
<p>I&#8217;ll also report on the graphics later after I&#8217;ve done some tests.  I typically run with two 4K monitors and previously, the 2015 or 2016 MacBook&#8217;s did not drive them very well (jumpy, jerky), etc.  I&#8217;m optomistic now with the graphic support here for two 5K monitors.  I&#8217;m figuring if Apple advertises two 5K&#8217;s, two 4K&#8217;s probably work pretty well. We&#8217;ll see.</p>
<h2>Price</h2>
<p>Same old same old (except if you want 4TB SSD then it&#8217;s crazy stupid pricing).</p>
<p>&nbsp;</p>
]]></content:encoded>
							<wfw:commentRss>http://peterkellner.net/2018/07/14/macbook-pro-2018-vs-2015-keyboard-head-to-head/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">4732</post-id>	</item>
		<item>
		<title>Published Today My Latest Course on React and ASP.NET Core</title>
		<link>http://peterkellner.net/2018/05/23/published-today-my-latest-course-on-react-and-asp-net-core/</link>
				<comments>http://peterkellner.net/2018/05/23/published-today-my-latest-course-on-react-and-asp-net-core/#comments</comments>
				<pubDate>Wed, 23 May 2018 20:49:04 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Pluralsight]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4712</guid>
				<description><![CDATA[Checkout  3 short clips that are part of my 3 hour course on programming Facebook's React JavaScript library. This course published on Pluralsight May 23, 2018. Topics include WebPack, Server-side-rendering, ASP.NET Core Rest Services and more.]]></description>
								<content:encoded><![CDATA[<p>Today, I’m both pleased and proud to offer my 7<sup>th</sup> course from Pluralsight and my first one on React. For 10 years now, I’ve been focused on Single Page JavaScript apps that work really well with back end servers.</p>
<p>Subscribe to Pluralsight:&nbsp; <a href="https://pluralsight.pxf.io/c/1196644/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fauthors%2Fpeter-kellner">http://pluralsight.com</a></p>
<p><iframe width="480" height="270" src="https://www.youtube.com/embed/LQJC3ehK_oA" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen="allowfullscreen"></iframe></p>
<p>Course URL:&nbsp;&nbsp;<a href="https://app.pluralsight.com/library/courses/aspdotnet-core-react-building-website/table-of-contents">https://app.pluralsight.com/library/courses/aspdotnet-core-react-building-website/table-of-contents</a></p>
<p>[Start of Video Words…]</p>
<p>I continue to believe that for anyone building enterprise quality apps, the Single Page App (also known as SPA’s), are the way to go.&nbsp; If you really think about it, it makes total sense. Why is that? It’s because you can write your code in a natural way. You don’t have a ridiculous HTML DOM backend server interaction around your UI events that makes programming a nightmare. Your user click a button, an event is attached the button, JavaScript executes and everything is running in one place.</p>
<p>No crazy postback semantics to manage and program around like in php or other, in my opinion, convoluted programming paradigms.</p>
<p>So why Facebooks <a href="https://reactjs.org/">React</a>? Because simply, it’s the best <a href="https://en.wikipedia.org/wiki/JavaScript">JavaScript</a> Single Page App library out there. Personally, I know I’ll get some flack for this, I love JavaScript and especially the new features including things like lambda’s, spread operators, and promises.</p>
<p>Unlike other SPA’s, react fits like a glove to these new features and it just feels second nature to programming JavaScript.&nbsp; The learning curve is super friendly, refactoring is easy and productivity for me is high.</p>
<p>My course, React and <a href="https://www.asp.net/">ASP.NET Core</a>, is just over 3 hours and is can be viewed with a <a href="https://pluralsight.pxf.io/c/1196644/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fauthors%2Fpeter-kellner">Pluralsight subscription</a>, but if you don’t have Pluralsight account, check out the next few minutes where I’ve included a couple clips teaching how to access REST Services, a little bit of debugging with Redux and integrating with ASP.NET Core and the create-react-app templating system.</p>
<p>Of course, don’t forget, that I’m an independent consultant also, and if you need help with projects or custom videos for your company that better serve your needs then a generic training course, I can help with that to.&nbsp; Reach out to me at my web site <a href="http://peterkellner.net">http://peterkellner.net</a> and click on the contact page.</p>
]]></content:encoded>
							<wfw:commentRss>http://peterkellner.net/2018/05/23/published-today-my-latest-course-on-react-and-asp-net-core/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
						<post-id xmlns="com-wordpress:feed-additions:1">4712</post-id>	</item>
		<item>
		<title>Show a Spinner While Loading Data with React and Axios</title>
		<link>http://peterkellner.net/2018/02/11/show-spinner-loading-data-react-axios/</link>
				<pubDate>Sun, 11 Feb 2018 17:26:57 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[ASP.NET 2.0]]></category>
		<category><![CDATA[Axios]]></category>
		<category><![CDATA[React]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4486</guid>
				<description><![CDATA[Let&#8217;s face it, the internet can be slow sometimes and you want your browser users to have a good experience when they view your pages. When we are building server side SPA apps, we often first download the html, then that html downloads some JavaScript that includes the Facebook library React, then finally, the JavaScript [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>Let&#8217;s face it, the internet can be slow sometimes and you want your browser users to have a good experience when they view your pages. When we are building server side SPA apps, we often first download the html, then that html downloads some JavaScript that includes the Facebook library React, then finally, the JavaScript executes and fetches some data.</p>
<p>In this post, I talk about how the SPA (Single Page App) technology is React from Facebook.  The library that does the REST data call is Axios, and of course the logic is mine.</p>
<p>Read about it all on this <a href="https://medium.com/@pkellner/fetch-data-in-react-with-spinner-only-when-necessary-1ef2e451f541">post on Medium</a> and don&#8217;t forget to add some claps if you like it. It&#8217;s my first post on Medium and I&#8217;m trying to decide if that is a good place to write stuff.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><a href="https://medium.com/@pkellner/fetch-data-in-react-with-spinner-only-when-necessary-1ef2e451f541">Fetch Data in React With Spinner Only When Necessary</a></h2>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">4486</post-id>	</item>
		<item>
		<title>Learn ASP.NET Core Tag Helpers in this 3 Hour Video on Pluralsight</title>
		<link>http://peterkellner.net/2017/06/10/learn-asp-net-core-tag-helpers-3-hour-video-pluralsight/</link>
				<pubDate>Sat, 10 Jun 2017 17:00:32 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4468</guid>
				<description><![CDATA[ASP.NET Core Tag Helpers are the best new feature and replaces html helpers to make programming Razor view pages fun and easy. This 4 minute sample video is from the course &#8220;ASP.NET Core Tag Helpers&#8221; on Pluralsight.com. The full three hour course gives you everything you need to know to both work with all the [&#8230;]]]></description>
								<content:encoded><![CDATA[<p>ASP.NET Core Tag Helpers are the best new feature and replaces html helpers to make programming Razor view pages fun and easy. This 4 minute sample video is from the course &#8220;<a href="https://www.pluralsight.com/courses/aspdotnet-core-tag-helpers">ASP.NET Core Tag Helpers</a>&#8221; on Pluralsight.com.</p>
<p><iframe width="427" height="240" src="https://www.youtube.com/embed/V4Vx8S2XCRM" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>The full three hour course gives you everything you need to know to both work with all the Tag Helpers built in to ASP.NET Core as well as author your own simple and advanced Tag Helpers.</p>
<p>Check out the full course here:<br />
<a href="https://www.pluralsight.com/courses/aspdotnet-core-tag-helpers">https://www.pluralsight.com/courses/aspdotnet-core-tag-helpers</a></p>
<p>In addition, here is a link to the documentation on built-in tag helpers written written by Peter Kellner</p>
<p><a href="https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/">https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/</a></p>
<p style="padding-left: 30px;"><a href="https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/image-tag-helper">https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/image-tag-helper</a></p>
<p style="padding-left: 30px;"><a href="https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/cache-tag-helper">https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/cache-tag-helper</a></p>
<p style="padding-left: 30px;"><a href="https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/distributed-cache-tag-helper">https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/distributed-cache-tag-helper</a></p>
<p style="padding-left: 30px;"><a href="https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper">https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper</a></p>
<p style="padding-left: 30px;"><a href="https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/environment-tag-helper">https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/environment-tag-helper</a></p>
<p>&nbsp;</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">4468</post-id>	</item>
		<item>
		<title>Vote On Which of Douglas Crockford&#8217;s Session to See at Silicon Valley Code Camp</title>
		<link>http://peterkellner.net/2017/06/07/vote-on-which-of-douglas-crockfords-session-to-see-at-silicon-valley-code-camp/</link>
				<pubDate>Wed, 07 Jun 2017 20:39:56 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[ASP.NET 2.0]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4463</guid>
				<description><![CDATA[What Session Would You like Douglas Crockford to Open Silicon Valley Code Camp with October 7? (or reply from list https://t.co/FmDyA5dMZv — SV Code Camp (@sv_code_camp) June 7, 2017 Douglas Crockford, the inventor of JSON and one of our top speakers at SV Code Camp is currently doing two talks, Numbers and Character Sets. I&#8217;ve [&#8230;]]]></description>
								<content:encoded><![CDATA[<blockquote class="twitter-tweet" data-lang="en">
<p lang="en" dir="ltr">What Session Would You like Douglas Crockford to Open Silicon Valley Code Camp with October 7? (or reply from list <a href="https://t.co/FmDyA5dMZv">https://t.co/FmDyA5dMZv</a> </p>
<p> — SV Code Camp (@sv_code_camp) <a href="https://twitter.com/sv_code_camp/status/872271126860226561">June 7, 2017</a></p></blockquote>
<p> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>  </p>
<p><a href="https://www.siliconvalley-codecamp.com/session/2017/presenter/douglas-crockford-1124">Douglas Crockford</a>, the inventor of JSON and one of our top speakers at SV Code Camp is currently doing two talks, <a href="https://www.siliconvalley-codecamp.com/Session/2017/numbers">Numbers</a> and <a href="https://www.siliconvalley-codecamp.com/Session/2017/character-sets">Character Sets</a>. I&#8217;ve asked Doug if he&#8217;d reprise one of his more JavaScript / JSON sessions and he graciously offered me <a href="http://crockford.com/pp/">his list</a> to pick from.&#160; So, I&#8217;m turning that responsibility over to all of you.</p>
<p>Head over to twitter on this URL and&#160; <a href="https://twitter.com/sv_code_camp/status/872271126860226561"><b>VOTE</b></a>&#160; for what you want to see.&#160; While you are at it, follow the <a href="https://twitter.com/sv_code_camp">@sv_code_camp</a> twitter feed and you&#8217;ll hear about every session approved and other important SV Code Camp announcements.</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">4463</post-id>	</item>
		<item>
		<title>Looking Forward to Talking about ASP.NET Core Tag Helpers Tonight at South Bay.Net in Mountain View</title>
		<link>http://peterkellner.net/2017/05/25/looking-forward-to-talking-about-asp-net-core-tag-helpers-tonight-at-south-bay-net-in-mountain-view/</link>
				<pubDate>Thu, 25 May 2017 21:01:35 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[ASP.net]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4461</guid>
				<description><![CDATA[&#160; I’m mostly complete on my Pluralsight course on ASP.NET Core Tag Helpers.&#160; In this 1 hour presentation, I’ll talk about the highlights and what I love about Tag Helpers. Hope to see you there! https://www.meetup.com/BayNET/events/238822703/ German International School of Silicon Valley 310 Easy Street, Room 27, Mountain View, CA]]></description>
								<content:encoded><![CDATA[<p>&#160;</p>
<p>I’m mostly complete on my Pluralsight course on ASP.NET Core Tag Helpers.&#160; In this 1 hour presentation, I’ll talk about the highlights and what I love about Tag Helpers.</p>
<p>Hope to see you there!</p>
<p><a title="https://www.meetup.com/BayNET/events/238822703/" href="https://www.meetup.com/BayNET/events/238822703/">https://www.meetup.com/BayNET/events/238822703/</a></p>
<p><a href="https://www.meetup.com/BayNET/events/238822703/"><img title="southbaynet" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="southbaynet" src="http://peterkellner.net/wp/wp-content/uploads/2017/05/southbaynet.jpg" width="514" height="795" /></a></p>
<h5><a href="https://maps.google.com/maps?f=q&amp;hl=en&amp;q=310+Easy+Street%2C+Room+27%2C+Mountain+View%2C+CA%2C+us">German International School of Silicon Valley</a></h5>
<p>310 Easy Street, Room 27, Mountain View, CA</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">4461</post-id>	</item>
		<item>
		<title>Why I Love the Community and How It Helps Me</title>
		<link>http://peterkellner.net/2017/03/19/why-i-love-community/</link>
				<pubDate>Sun, 19 Mar 2017 16:13:38 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[ASP.NET 2.0]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Microsoft MVP Program]]></category>
		<category><![CDATA[stackoverflow]]></category>
		<category><![CDATA[MVP]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4444</guid>
				<description><![CDATA[Some History For much of my career, I’ve worked at home as a team of one.  Many years ago, I learned that it takes a community.  I’ve always felt one of my strengths is to both reach out when I need help, and offer help when it’s needed.  In about 2005, I started doing a [&#8230;]]]></description>
								<content:encoded><![CDATA[<h3>Some History</h3>
<p>For much of my career, I’ve worked at home as a team of one.  Many years ago, I learned that <strong>it takes a community</strong>.  I’ve always felt one of my strengths is to both reach out when I need help, and offer help when it’s needed.  In about 2005, I started doing a lot of work with the .Net stack and discovered the forums <a title="https://forums.asp.net/" href="https://forums.asp.net/">https://forums.asp.net/</a>.</p>
<p>As I was learning ASP.NET, I found myself asking a lot of questions in <a href="https://forums.asp.net/">that forum</a>.  The group was unbelievably helpful and supportive.  Having done a lot of Unix work previously, I’d had a lot of reprimands for incorrect questions so it was very uplifting for me. As I became more proficient in the .Net stack I started answering questions also.  My personal goal was to answer one question for every one I asked.</p>
<p>Though I’ve not been active in that forum for a while, it’s still a great place, and I’m proud to ultimately have been asked to be a moderator as well as achieving All-Star status, which I’m sure is based on the my 15,384 points which included my answers being marked as correct 10,200 times.</p>
<p><figure style="width: 352px" class="wp-caption alignnone"><a href="https://forums.asp.net/members/pkellner.aspx"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="forums1" src="http://peterkellner.net/wp/wp-content/uploads/2017/03/forums1.png" alt="forums.asp.net profile" width="352" height="255" border="0" /></a><figcaption class="wp-caption-text">My Forums.ASP.NET Profile</figcaption></figure></p>
<p>&nbsp;</p>
<p>Eleven years ago, the <a href="https://www.mvp.microsoft.com/en-us/">Microsoft MVP Program</a> must have noticed my activity here, as well as an event I’ve been the primary organizer for the past 11 years called <a href="https://www.siliconvalley-codecamp.com/">Silicon Valley Code Camp</a>, where we have hundreds of speakers from the community, hundreds of volunteers, many corporate sponsors and thousands of attendees all coming together to learn and share.  I believe it’s been the biggest and longest running free technology focused community event in the world.</p>
<h3>So, what motivated me to write this post today?</h3>
<p>I’m in the midst of building my upcoming <a href="https://app.pluralsight.com/profile/author/peter-kellner">Pluralsight </a>video course (my 5th) on <a href="https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/authoring">ASP.NET Core Tag Helpers</a>.  I’m trying to explain how the HtmlTargetElement’s query selector parameter works, and I needed an example of a car model name that is shared by two manufacturers.  I found a csv file that had 9000 car makes and models but could not (based on visual scanning) figure out a model that met what I needed.</p>
<p>I posted my question on <a href="http://stackoverflow.com/questions/42888139/need-query-to-figure-out-when-car-model-name-shared-by-two-makes/42888254?noredirect=1#comment72878755_42888254">StackOverflow</a></p>
<p><figure style="width: 397px" class="wp-caption alignnone"><a href="http://stackoverflow.com/questions/42888139/need-query-to-figure-out-when-car-model-name-shared-by-two-makes/42888254?noredirect=1#comment72878755_42888254"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="forum2" src="http://peterkellner.net/wp/wp-content/uploads/2017/03/forum2.png" alt="My StackOverflow post that inspired this article" width="397" height="229" border="0" /></a><figcaption class="wp-caption-text">My StackOverflow post that inspired this article</figcaption></figure></p>
<p>&nbsp;</p>
<p>Literally within 5 minutes a user with the handle <a href="http://stackoverflow.com/users/2333499/sqlzim">@SqlZim</a> gave me almost the perfect answer.  After a short comment exchange, I got the perfect answer, learned something new, and had my problem solved.  Plymouth and Ford both made a model named Laser. (among about 80 other matches).</p><pre class="crayon-plain-tag">select make, model
from t
where exists (
  select 1
  from t as i
  where i.model=t.model
    and i.make&lt;&gt;t.make
)</pre><p>&nbsp;</p>
<p>Well, back to my Pluralsight course script writing.  Thanks for listening, and most of all, thanks for being part of <strong>my community</strong> this early Sunday morning in March.</p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">4444</post-id>	</item>
		<item>
		<title>My Enthusiasm for Resharper Amplified</title>
		<link>http://peterkellner.net/2016/08/09/my-enthusiasm-for-resharper-amplified/</link>
				<pubDate>Tue, 09 Aug 2016 18:14:37 +0000</pubDate>
		<dc:creator><![CDATA[Peter Kellner]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[ReSharper]]></category>
		<category><![CDATA[Visual Studio 2015]]></category>

		<guid isPermaLink="false">http://peterkellner.net/?p=4422</guid>
				<description><![CDATA[I’ve posted and tweeted often over the years when I find an exciting new feature in JetBrains Resharper.&#160; Looks like they have heard me as I’m front and center on their main page now. &#160;]]></description>
								<content:encoded><![CDATA[<p>I’ve posted and tweeted often over the years when I find an exciting new feature in <a href="https://www.jetbrains.com/resharper/">JetBrains Resharper</a>.&#160; Looks like they have heard me as I’m front and center on their main page now.</p>
<p>&#160;</p>
<p><a href="https://www.jetbrains.com/resharper/"><img title="image" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="image" src="http://peterkellner.net/wp/wp-content/uploads/2016/08/image.png" width="442" height="458" /></a></p>
]]></content:encoded>
									<post-id xmlns="com-wordpress:feed-additions:1">4422</post-id>	</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.w3-edge.com/products/


Served from: peterkellner.net @ 2019-09-04 15:31:04 by W3 Total Cache
-->