<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Text(Greg);]]></title><description><![CDATA[Power Apps, coding, and food. Mostly Power Apps.]]></description><link>https://98.codes/</link><image><url>https://98.codes/favicon.png</url><title>Text(Greg);</title><link>https://98.codes/</link></image><generator>Ghost 5.79</generator><lastBuildDate>Tue, 20 Feb 2024 08:17:38 GMT</lastBuildDate><atom:link href="https://98.codes/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[A Workable Pattern for PCF Events You Can Use Today]]></title><description><![CDATA[There's an easy way to get more events than OnChange in a PCF control that's 100% supported and will continue to work, even after proper event support is added. It takes surprisingly little extra effort too—let's take a look.]]></description><link>https://98.codes/a-workable-pattern-for-pcf-events-you-can-use-today/</link><guid isPermaLink="false">6064f685795bc9003b500622</guid><category><![CDATA[powerapps]]></category><category><![CDATA[pcf]]></category><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Wed, 31 Mar 2021 23:52:30 GMT</pubDate><media:content url="https://98.codes/content/images/2021/03/Screenshot-2021-03-31-163418.png" medium="image"/><content:encoded><![CDATA[<img src="https://98.codes/content/images/2021/03/Screenshot-2021-03-31-163418.png" alt="A Workable Pattern for PCF Events You Can Use Today"><p>Looking to learn more about the Power Apps Component Framework before you dive in? This should get you started:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://docs.microsoft.com/learn/paths/use-power-apps-component-framework/?WT.mc_id=power-23278-grhurl&amp;ref=98.codes"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Create components with Power Apps Component Framework - Learn</div><div class="kg-bookmark-description">Learn how to build custom components and controls with Power Apps component framework.</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Microsoft Docs</span><span class="kg-bookmark-publisher">DaveBeasley</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://docs.microsoft.com/learn/achievements/use-power-apps-component-framework-social.png" alt="A Workable Pattern for PCF Events You Can Use Today"></div></a></figure><hr><p>If you&apos;ve created a few Power Apps component framework controls at this point, you&apos;re aware of the fact that your control gets exactly one event that it can fire: OnChange.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://98.codes/content/images/2021/03/image-1.png" class="kg-image" alt="A Workable Pattern for PCF Events You Can Use Today" loading="lazy" width="451" height="356"><figcaption>Only one event or &quot;Action&quot; listed for a PCF control: OnChange. RIP Enhanced Formula Bar.</figcaption></figure><p>There is a good way to handle this situation right now that&apos;s 100% supported and will continue to work, even after proper event support is added. It takes surprisingly little extra effort too&#x2014;let&apos;s take a look.</p><h3 id="one-new-manifest-property">One new manifest property</h3><p>This one is pretty straightforward: add a new simple text property to your control&apos;s manifest file, in this case we&apos;ve called the property <code>Name</code><em>. </em>If you have more information you need to send along with the event when it happens, create properties for those pieces of data as well. I&apos;ve added an extra one here called ever so creatively <code>Value</code><em>.</em></p><p>Note that both properties are marked as <em>output</em> properties on their usage, since these values will always be set from inside your code for use by the host app. Additionally, we&apos;ve marked the <code>required</code> property of <code>Value</code> as false, as not all events will need a value set:</p><pre><code class="language-XML">&lt;!-- ControlManifest.Input.xml --&gt;

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;manifest&gt;
  &lt;control namespace=&quot;BlogSamples&quot; constructor=&quot;Events&quot; version=&quot;0.0.1&quot;
    display-name-key=&quot;Events&quot; description-key=&quot;Events description&quot;
    control-type=&quot;standard&quot;&gt;
    &lt;property name=&quot;Name&quot; display-name-key=&quot;Name&quot;
      description-key=&quot;The name&quot; of-type=&quot;SingleLine.Text&quot;
      usage=&quot;output&quot; required=&quot;true&quot; /&gt;
    &lt;property name=&quot;Value&quot; display-name-key=&quot;Value&quot;
      description-key=&quot;The value&quot; of-type=&quot;SingleLine.Text&quot;
      usage=&quot;output&quot; required=&quot;false&quot; /&gt;
    &lt;resources&gt;
      &lt;code path=&quot;index.ts&quot; order=&quot;1&quot;/&gt;
    &lt;/resources&gt;
  &lt;/control&gt;
&lt;/manifest&gt;</code></pre><h3 id="figure-out-the-events-you-need">Figure out the events you need</h3><p>In order to keep my code easy to maintain as it grows, I put my event definitions into an interface in a separate file named <code>IControlEvent.ts</code> in the same directory as my <code>index.ts</code> file:</p><pre><code class="language-TS">// IControlEvent.ts

export interface IControlEvent {
  Name:
    &apos;OnSelect&apos; |
    &apos;OnConnect&apos; |
    &apos;OnDisconnect&apos;
  Value?: string;
}</code></pre><p>Then at the top of my main code file, I import that interface so that I can code against it:</p><pre><code class="language-TS">// index.ts

import { IInputs, IOutputs } from &quot;./generated/ManifestTypes&quot;;
import { IControlEvent } from &quot;./IControlEvent&quot;;</code></pre><p>Now all that&apos;s left is to fire those events as they happen using the built-in OnChange loop:</p><ol><li>Your code &#xA0;sets up an event to be fire, and calls <code>notifyOutputChanged</code></li><li>The framework does some stuff and then calls your control&apos;s <code>getOutputs</code> function</li><li>We retrieve the set event information in <code>getOutputs</code>, which is then sent off to Power Apps</li></ol><pre><code class="language-TS">// index.ts
private event: IControlEvent;
private notifyOutputChanged: () =&gt; void;

public init(
  context: ComponentFramework.Context&lt;IInputs&gt;,
  notifyOutputChanged: () =&gt; void,
  state: ComponentFramework.Dictionary,
  container: HTMLDivElement
) {
  // Set up notifyOutputChanged to be called later
  this.notifyOutputChanged = notifyOutputChanged;
}

// And in an event handler already hooked to a button in your control
private connectButtonClicked(): void {
  // Set up the event to be fired
  this.event = {
    Name: &apos;OnConnect&apos;,
    Value = null;
  };
  
  // and call notifyOutputChanged
  this.notifyOutputChanged();
}

public getOutputs(): IOutputs {
  // Return the set event as the output
  return event;
}</code></pre><p>Your control will have a lot more code around doing the thing the control is actually for, but this is enough to set up the event loop.</p><h3 id="using-these-events-in-an-app">Using these events in an app</h3><p>In order to use these events, you first use the PowerFx <code>Switch</code> function in your control&apos;s <code>OnChange</code> behavior property (aka event) to look for each possible event coming in, and then react accordingly:</p><pre><code class="language-excel-formula">// OnChange

Switch(
  Self.name,
  &quot;OnSelect&quot;,
    Notify(&quot;OnSelect received! Selected value: &quot; &amp; Self.EventValue),
  &quot;OnConnect&quot;,
    Notify(&quot;OnConnect received!&quot;),
  &quot;OnDisconnect&quot;
    Notify(&quot;OnDisconnect received!&quot;)
)</code></pre><p>That&apos;s all there is to it! Once we have proper event support we can do things differently, but this should help until we get there.</p><hr><p>Have feedback? Questions? Head on over to the Power Apps Developer Community Forum and let us know!</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://powerusers.microsoft.com/t5/Power-Apps-Pro-Dev-ISV/bd-p/pa_component_framework?WT.mc_id=power-23278-grhurl&amp;ref=98.codes"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Power Apps Pro Dev &amp; ISV</div><div class="kg-bookmark-description">This forum is for all professional developers &amp; ISVs looking to build business apps on the Power Platform. It also covers topics like Power Apps component framework, Application Lifecycle Management (ALM) , and how to monitor your apps post AppSource publication via ISV Studio.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://powerusers.microsoft.com/html/@0BFA89FF2AD5E85BBB3CA75A65BBB62C/assets/favicon.ico" alt="A Workable Pattern for PCF Events You Can Use Today"><span class="kg-bookmark-author">Power Apps</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://powerusers.microsoft.com/t5/image/serverpage/image-id/182921i56FF007C4C1F11A3/image-size/large/is-moderation-mode/true?v=1.0&amp;px=999" alt="A Workable Pattern for PCF Events You Can Use Today"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Keep those PCF components inside the box]]></title><description><![CDATA[PCF is awesome! Let's fix some common border box issues with a few lines of CSS and one extra line of PCF code.]]></description><link>https://98.codes/keep-those-pcf-components-inside-the-box/</link><guid isPermaLink="false">605bc079975012003b2f186e</guid><category><![CDATA[powerapps]]></category><category><![CDATA[pcf]]></category><category><![CDATA[css]]></category><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Fri, 26 Mar 2021 19:05:11 GMT</pubDate><media:content url="https://98.codes/content/images/2021/03/pcf-is-awesome-twitter-2.png" medium="image"/><content:encoded><![CDATA[<img src="https://98.codes/content/images/2021/03/pcf-is-awesome-twitter-2.png" alt="Keep those PCF components inside the box"><p>You could be forgiven if you thought that the overall div container that the Power Apps Component Framework gives you would constrain your control to the outer boundary. You might also think that you&apos;d automatically get the runtime height and width of your control when you asked for it.</p><p>The bad news is that <em>neither</em> of those are true without a little extra work in your control code. The good news is both of them are fixable in just a line of code or two.</p><p>First, fixing the outer border. Adding an <code>overflow: hidden</code> or <code>overflow: scroll</code> to your &#xA0;container&apos;s CSS won&apos;t necessarily fix it on it&apos;s own, but it <em>is</em> necessary. </p><pre><code class="language-CSS">/*
  FYI this CSS is sitting in the background. It&apos;s laying things out, but anything
  meaningful to what we&apos;re talking about is in the TypeScript code below.
*/

.isAwesome {
  text-align: left;
  font-size:76px;
  border:4px solid black;
  font-weight: bold;
}</code></pre><!--kg-card-begin: html--><script src="https://gist.github.com/ghurlman/277485bca8b2e1511433f01e41f4e6f5.js"></script><!--kg-card-end: html--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://98.codes/content/images/2021/03/pcf-is-awesome-1-1.png" class="kg-image" alt="Keep those PCF components inside the box" loading="lazy" width="622" height="504" srcset="https://98.codes/content/images/size/w600/2021/03/pcf-is-awesome-1-1.png 600w, https://98.codes/content/images/2021/03/pcf-is-awesome-1-1.png 622w"><figcaption>Close, but not quite: the text is stopped at the element border, but the element itself is still escaping the component border box.</figcaption></figure><p>In order to get overflow to behave nicely, you need to provide a height &amp; width for your container. On top of that, in order to get updated height &amp; width info from PCF when it changes (if someone resizes a window, rotates their phone, etc), you need to add a call to <code><a href="https://docs.microsoft.com/en-us/powerapps/developer/component-framework/reference/mode/trackcontainerresize?WT.mc_id=power-22637-grhurl&amp;ref=98.codes">context.mode.trackContainerResize</a></code>, setting that to true. After that point, PCF will keep the <code><a href="https://docs.microsoft.com/en-us/powerapps/developer/component-framework/reference/mode?ref=98.codes#allocatedheight?WT.mc_id=power-22637-grhurl">allocatedHeight</a></code> and <code><a href="https://docs.microsoft.com/en-us/powerapps/developer/component-framework/reference/mode?ref=98.codes#allocatedwidth?WT.mc_id=power-22637-grhurl">allocatedWidth</a></code> properties up to date and accurate.</p><!--kg-card-begin: html--><script src="https://gist.github.com/ghurlman/d84208e7b46a0407fc84e3c201ec2c4b.js"></script><!--kg-card-end: html--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://98.codes/content/images/2021/03/pcf-is-awesome-2.png" class="kg-image" alt="Keep those PCF components inside the box" loading="lazy" width="625" height="523" srcset="https://98.codes/content/images/size/w600/2021/03/pcf-is-awesome-2.png 600w, https://98.codes/content/images/2021/03/pcf-is-awesome-2.png 625w"><figcaption>Much better!</figcaption></figure><p>Perfect! Well, sort of. I&apos;ll leave making it pretty up to you.</p><hr><!--kg-card-begin: markdown--><p>Want to learn more? Check these out:</p>
<ul>
<li><a href="https://docs.microsoft.com/en-us/powerapps/developer/component-framework/overview?WT.mc_id=power-22637-grhurl&amp;ref=98.codes">Power Apps Component Framework official docs</a></li>
<li><a href="https://docs.microsoft.com/en-us/learn/paths/use-power-apps-component-framework/?WT.mc_id=power-22637-grhurl&amp;ref=98.codes">Create Components with Power Apps Component Framework</a></li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Power Apps and Pro Devs—It's Happening]]></title><description><![CDATA[<p>I gave an interview at Ignite this year, so I figured I&apos;d post it here to give it the smallest bit more reach AND check off posting something to the blog in 2019.</p><!--kg-card-begin: markdown--><p>If the video isn&apos;t working, you can always (probably) <a href="https://myignite.techcommunity.microsoft.com/sessions/90666?source=sessions">see it on the</a></p>]]></description><link>https://98.codes/powerapps-and-pro-devs-its-happening/</link><guid isPermaLink="false">5dd6dfedc143e10038d25135</guid><category><![CDATA[powerapps]]></category><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Thu, 21 Nov 2019 19:11:40 GMT</pubDate><media:content url="https://98.codes/content/images/2021/03/Artboard-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://98.codes/content/images/2021/03/Artboard-1.png" alt="Power Apps and Pro Devs&#x2014;It&apos;s Happening"><p>I gave an interview at Ignite this year, so I figured I&apos;d post it here to give it the smallest bit more reach AND check off posting something to the blog in 2019.</p><!--kg-card-begin: markdown--><p>If the video isn&apos;t working, you can always (probably) <a href="https://myignite.techcommunity.microsoft.com/sessions/90666?source=sessions">see it on the Ignite site here</a>.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><!-------to play video from medius with NoCookies----------><iframe width="560" height="315" src="https://medius.studios.ms/Embed/video-nc/IG19-C34" frameborder="0" allowfullscreen></iframe><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Catching up a forgotten moment]]></title><description><![CDATA[Dream job... to help others? To get famous? To help yourself? To get rich? All of the above? None? Hmmmm…]]></description><link>https://98.codes/dream-job/</link><guid isPermaLink="false">5ae75ab0b641540018e26507</guid><category><![CDATA[100-days-of-content]]></category><category><![CDATA[twitter-posts]]></category><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Tue, 02 Jan 2018 21:06:46 GMT</pubDate><media:content url="https://98.codes/content/images/2017/06/34313670624_ea677594d1_o-compressor.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://98.codes/content/images/2017/06/34313670624_ea677594d1_o-compressor.jpg" alt="Catching up a forgotten moment"><p class="featurecaption">Picture via <a href="https://flic.kr/p/UhbwNL?ref=98.codes" target="_blank">
Giuseppe Milo</a>.</p>
<p>At some point yesterday, Eric Elliott tweeted out</p>
<blockquote>
<p>Want do you want from your dream job?</p>&#x2014; Eric Elliott (@_ericelliott) <a href="https://twitter.com/_ericelliott/status/875153402812026880?ref=98.codes">June 15, 2017</a><p></p>
</blockquote>
<p>To which I replied</p>
<blockquote>
<p>Opportunity to enable others to do epic shit.</p>&#x2014; Greg Hurlman (@justcallme98) <a href="https://twitter.com/justcallme98/status/875168845723389952?ref=98.codes">June 15, 2017</a><p></p>
</blockquote>
<p>But it got me to thinking... what does that actually mean to me? What am I doing now, what have I done in the past to enable that goal?</p>
<p>It&apos;s time I did something to make that more of a reality&#x2015;I&apos;m willing to bet it&apos;s closer than I think, even now.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Elephants Out, Donkeys In]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p class="featurecaption">Photo by <a href="https://flic.kr/p/eL5jpe?ref=98.codes" target="_blank">Toshihiro Oimatsu</a>
</p><p>In case you&apos;ve been wondering what the people that dwell in Layers 3 &amp; 4 of the Internet have been up to lately, here&apos;s a taste:</p>
<blockquote>
<p>Jon Postel&apos;s famous statement in <a href="https://tools.ietf.org/html/rfc1122?ref=98.codes">RFC 1122</a> of &quot;Be liberal in what you</p></blockquote>]]></description><link>https://98.codes/elephants-out-donkeys-in/</link><guid isPermaLink="false">5ae75ab0b641540018e26508</guid><category><![CDATA[100-days-of-content]]></category><category><![CDATA[rfc-nerdery]]></category><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Fri, 16 Jun 2017 15:46:20 GMT</pubDate><media:content url="https://98.codes/content/images/2017/06/9031406155_4d8339477f_k-compressor.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://98.codes/content/images/2017/06/9031406155_4d8339477f_k-compressor.jpg" alt="Elephants Out, Donkeys In"><p class="featurecaption">Photo by <a href="https://flic.kr/p/eL5jpe?ref=98.codes" target="_blank">Toshihiro Oimatsu</a>
</p><p>In case you&apos;ve been wondering what the people that dwell in Layers 3 &amp; 4 of the Internet have been up to lately, here&apos;s a taste:</p>
<blockquote>
<p>Jon Postel&apos;s famous statement in <a href="https://tools.ietf.org/html/rfc1122?ref=98.codes">RFC 1122</a> of &quot;Be liberal in what you accept, and conservative in what you send&quot; - is a principle that has long guided the design of Internet protocols and implementations of those protocols.  The posture this statement advocates might promote interoperability in the short term, but that short-term advantage is outweighed by negative consequences that affect the long-term maintenance of a protocol and its ecosystem.</p>
</blockquote>
<p><a href="https://tools.ietf.org/html/draft-thomson-postel-was-wrong-01?ref=98.codes">The full content of the draft</a> is an interesting read, a window into what the future of base Internet protocols might look like in the future.</p>
<p>Just some light reading for your Friday morning &#x1F642;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[All new and shiny!]]></title><description><![CDATA[New effort, new URL, why not a new paint job?]]></description><link>https://98.codes/all-new-and-shiny/</link><guid isPermaLink="false">5ae75ab0b641540018e26506</guid><category><![CDATA[100-days-of-content]]></category><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Wed, 14 Jun 2017 11:00:00 GMT</pubDate><media:content url="https://98.codes/content/images/2017/06/asdf-compressor.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://98.codes/content/images/2017/06/asdf-compressor.png" alt="All new and shiny!"><p><a href="https://98.codes/100-days-of-content-day-0/">New effort</a>, new URL, why not a new paint job?</p>
<p>One of the benefits of being an <a href="http://emberjs.com/?ref=98.codes">Ember</a> guy <em>and</em> a <a href="http://ghost.org/?ref=98.codes">Ghost</a> guy is making it crazy simple to edit theme layouts, since Ghost <strong>is</strong> an Ember app! Handlebars, helpers, how the data flows through, <a href="http://themes.ghost.org/?ref=98.codes">it&apos;s all there</a>, same as every other Ember app out there!</p>
<p><img src="http://i.imgur.com/K818a2c.png" alt="All new and shiny!" loading="lazy"><br>
Firefox Dev tools, with the Ember Inspector extension loaded, showing the Ember internals of the Ghost admin app</p>
<p>I&apos;ve got a layer of <a href="https://www.cloudflare.com/?ref=98.codes">Cloudflare</a> out front, <a href="https://dev.twitter.com/cards/overview?ref=98.codes">Twitter card support</a>, <a href="https://blog.ghost.org/amp-support/?ref=98.codes">AMP support</a> (just add /amp to the end of any individual post URL to see it, <a href="https://98.codes/all-new-and-shiny/amp">like this</a>), redirection from my old blog URL to the equivalent one here, and automatic HTTPS on top of everything. Not bad at all for something that took maybe a couple hours to get just to where I like it.</p>
<p>Where I go from here, I don&apos;t know, but I&apos;m sure I&apos;ll figure it out. &#x1F603;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[What I'm Using]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Every now and then I get asked or need to explain to people what my setup is, and in the grand tradition of straight <a href="https://wesbos.com/uses/?ref=98.codes">copying</a> <a href="https://jonsuh.com/uses/?ref=98.codes">others</a>, I thought I&apos;d do the same. So, without further ado...<br>
<cut></cut></p>
<h2 id="editors">Editors</h2>
<ul>
<li><a href="https://code.visualstudio.com/?ref=98.codes">Visual Studio Code</a> (Canary/Nightly/&quot;Insider&quot; Edition)</li>
<li>Extensions: I&</li></ul>]]></description><link>https://98.codes/uses/</link><guid isPermaLink="false">5ae75ab0b641540018e26505</guid><category><![CDATA[what-i-use]]></category><category><![CDATA[100-days-of-content]]></category><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Tue, 13 Jun 2017 16:51:00 GMT</pubDate><media:content url="https://98.codes/content/images/2017/06/IMG_7160-compressor-1.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://98.codes/content/images/2017/06/IMG_7160-compressor-1.jpg" alt="What I&apos;m Using"><p>Every now and then I get asked or need to explain to people what my setup is, and in the grand tradition of straight <a href="https://wesbos.com/uses/?ref=98.codes">copying</a> <a href="https://jonsuh.com/uses/?ref=98.codes">others</a>, I thought I&apos;d do the same. So, without further ado...<br>
<cut></cut></p>
<h2 id="editors">Editors</h2>
<ul>
<li><a href="https://code.visualstudio.com/?ref=98.codes">Visual Studio Code</a> (Canary/Nightly/&quot;Insider&quot; Edition)</li>
<li>Extensions: I&apos;ll need a whole separate post to link to from here about this I think, but for now, the extensions I <em>need</em> in my life are <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp&amp;ref=98.codes">C#</a>, <a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks&amp;ref=98.codes">Bookmarks</a>, <a href="https://marketplace.visualstudio.com/items?itemName=ciena-blueplanet.vsc-ember-frost&amp;ref=98.codes">Ember Colorizer</a>, <a href="https://marketplace.visualstudio.com/items?itemName=emberjs.vscode-ember&amp;ref=98.codes">Ember Language Server</a>, <a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens&amp;ref=98.codes">Git Lens</a>, and <a href="https://marketplace.visualstudio.com/items?itemName=2gua.rainbow-brackets&amp;ref=98.codes">Rainbow Brackets</a></li>
<li>Custom color scheme (basically the default VSCode Dark theme w/ italic comments &amp; strings)</li>
<li>Operator Mono SSm 15pt</li>
<li><a href="https://www.visualstudio.com/vs/?ref=98.codes">Visual Studio 2017</a> Enterprise Edition</li>
<li>I use Enterprise because I get it through work, but honestly the free Community Edition (download from the page linked above) is <em>much</em> more than enough to get you going for the lion&apos;s share of developer tasks.</li>
</ul>
<h2 id="languagesframeworks">Languages/Frameworks</h2>
<ul>
<li><a href="https://docs.microsoft.com/en-us/dotnet/csharp/?ref=98.codes">C#</a>: 97% in service of a web app, 3% other. To that end:</li>
<li><a href="https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-vsc?ref=98.codes">ASP.NET Core Web API</a></li>
<li><a href="https://docs.microsoft.com/en-us/aspnet/core/mvc/overview?ref=98.codes">ASP.NET Core MVC</a></li>
<li><a href="https://docs.microsoft.com/en-us/dotnet/core/?ref=98.codes">.NET Core</a> in general&#xFFFD;Unless there&apos;s something that absolutely requires the full .NET Framework at this point, it&apos;s .NET Core or bust.</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/javascript?ref=98.codes">JavaScript</a></li>
<li><a href="https://emberjs.com/?ref=98.codes">Ember.js</a> front end apps for those Web API endpoints</li>
<li>Gonna try to pick up enough React to get by one of these days&#xFFFD; one of these days.</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS?ref=98.codes">CSS</a>/<a href="http://sass-lang.com/?ref=98.codes">SASS</a>: Lots of customized <a href="https://v4-alpha.getbootstrap.com/?ref=98.codes">Bootstrap</a>, some <a href="https://material.io/?ref=98.codes">Material Design</a>, some flexbox&#xFFFD;I&apos;m no <a href="https://codepen.io/tag/wizard/?ref=98.codes#">Codepen wizard</a>, but I do OK</li>
</ul>
<h2 id="machinesoses">Machines/OSes</h2>
<ul>
<li>Desktop PC: Windows 10 Pro (Insider/Fast Ring)</li>
<li>i7 CPU, 32GB RAM, 2xRadeon R9 290, totally silent</li>
<li><a href="https://pcpartpicker.com/user/ghurlman/saved/4vhj4D?ref=98.codes">Full part list</a></li>
<li>Laptop: macOS Sierra (Usually the dev beta, but giving High Sierra a little time before jumping in)</li>
<li><a href="https://support.apple.com/kb/SP691?locale=en_US&amp;ref=98.codes">Late 2013 13&quot; Retina MacBook Pro</a></li>
</ul>
<h2 id="otherdesktopapps">Other Desktop Apps</h2>
<ul>
<li><a href="https://www.adobe.com/creativecloud.html?promoid=65FN7WN4&amp;mv=other&amp;ref=98.codes">Adobe Creative Cloud</a> version of Photoshop, sometimes Illustrator</li>
<li><a href="https://www.sublimetext.com/3?ref=98.codes">Sublime Text 3</a>, for those really big log files VS Code won&apos;t open</li>
<li><a href="https://onedrive.live.com/?ref=98.codes">OneDrive</a> for cloud storage</li>
<li><a href="https://www.plex.tv/?ref=98.codes">Plex Media Server</a> for in-house streaming</li>
<li><a href="https://www.backblaze.com/?ref=98.codes">Backblaze</a> for real-time backups</li>
</ul>
<h2 id="workspace">Workspace</h2>
<ul>
<li>Wherever I find space, really</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[100 days of content: Day 0]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p class="featurecaption">Picture via <a href="https://www.flickr.com/photos/lorenkerns/14544328432/?ref=98.codes" target="_blank">Loren Kerns</a>.</p>
<p>So.</p>
<p><a href="http://100daysofcode.com/?ref=98.codes">100 Days of Code</a> is a thing that I&apos;ve been thinking about doing... it&apos;s a way to be accountable, to myself and others... but I want to do more than code. After all, coding is my day-in and day-out at work,</p>]]></description><link>https://98.codes/100-days-of-content-day-0/</link><guid isPermaLink="false">5ae75ab0b641540018e26504</guid><category><![CDATA[100-days-of-content]]></category><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Mon, 12 Jun 2017 21:13:00 GMT</pubDate><media:content url="https://98.codes/content/images/2017/06/14544328432_51880163bb_k.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://98.codes/content/images/2017/06/14544328432_51880163bb_k.jpg" alt="100 days of content: Day 0"><p class="featurecaption">Picture via <a href="https://www.flickr.com/photos/lorenkerns/14544328432/?ref=98.codes" target="_blank">Loren Kerns</a>.</p>
<p>So.</p>
<p><a href="http://100daysofcode.com/?ref=98.codes">100 Days of Code</a> is a thing that I&apos;ve been thinking about doing... it&apos;s a way to be accountable, to myself and others... but I want to do more than code. After all, coding is my day-in and day-out at work, and I don&apos;t want to allow myself to &quot;cheat&quot; by counting workdays as code days.</p>
<p>Also, there&apos;s the fact that my content production has fallen right off a cliff.</p>
<p>The plan now is to fix both in one swell foop by publishing 100 days of content: text, code, whatever, but 100 days of it, starting tomorrow.</p>
<p>Let&apos;s get started.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/RYlCVwxoL_g?list=PL5FF4A359D7985006" frameborder="0" allowfullscreen></iframe><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Ember, Azure, and Authentication]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Chances are, sooner or later, you&apos;re going to want to be able to let someone log into an application you&apos;re writing. Here in the Microsoft space where I still spend a majority of my time, authenticating against <a href="http://azure.microsoft.com/en-us/services/active-directory/?ref=98.codes">Azure Active Directory</a> is always a consideration in any</p>]]></description><link>https://98.codes/ember-azure-and-authentication/</link><guid isPermaLink="false">5ae75ab0b641540018e26503</guid><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Thu, 26 Feb 2015 16:38:50 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Chances are, sooner or later, you&apos;re going to want to be able to let someone log into an application you&apos;re writing. Here in the Microsoft space where I still spend a majority of my time, authenticating against <a href="http://azure.microsoft.com/en-us/services/active-directory/?ref=98.codes">Azure Active Directory</a> is always a consideration in any solution, something that you need to especially consider once you start wandering out of the friendly confines of Visual Studio, and Microsoft-written project templates full of C# code.</p>
<p>If you&apos;re writing an Ember CLI app as I am wont to do as of late, things have been slowly but surely getting better for the last year on the authentication and authorization front. <a href="https://vestorly.github.io/torii/?ref=98.codes">Torii</a> and <a href="https://ember-simple-auth.com/?ref=98.codes">Ember Simple Auth</a> have come to the forefront in my mind as the best options for authentication and authorization respectively, as both have a lot of great functionality built in for locking down views and logging in with a number of services such as Facebook, LinkedIn, Github, etc.</p>
<p>Logging in with Azure AD was sadly missing... was.</p>
<p>I fixed it, with the <a href="https://github.com/ghurlman/torii-azure-provider?ref=98.codes">Ember CLI Torii Azure Provider</a> (ECTAP). <a href="https://github.com/ghurlman/torii-azure-auth-sample?ref=98.codes">I also wrote a sample app using Ember Simple Auth, Torii, and ECTAP</a>, in case you are new to Ember CLI apps and needed to see it in action in order to grok how it works.</p>
<p>Both the provider and the sample are MIT licensed, meaning that you can take the code and use it wherever you want, so long as you include the library license with your finished product.</p>
<h4 id="butwaittheresmore">But wait, there&apos;s more!</h4>
<p>Now that your application is authenticating with Azure... you now have access to everything that user can access within the Azure space: services, data, even Office365 apps.</p>
<p>I&apos;m going to write a more detailed post on how to get started in Azure to use this from start to finish, but wanted to get the library announcement now since it seems that <a href="https://www.npmjs.com/package/ember-cli-torii-azure-provider?ref=98.codes">people are already using it</a>, and I <em>had</em> to get the minimal documentation out there.</p>
<p>Stay tuned!</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[On What To Call SharePoint Developer-y Type People]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p><a href="http://greghurlman.com/sharepoint-developers-and-a-name-change/?ref=98.codes">A little more than a year ago</a>, I was, as someone looking for .Net developers that knew the SharePoint API, frustrated by the confusion in the SharePoint space between the different kinds of developers that exist in the ecosystem. This confusion persists to this day, much to the detriment of</p>]]></description><link>https://98.codes/on-what-to-call-sharepoint-developer-y-type-people/</link><guid isPermaLink="false">5ae75ab0b641540018e26502</guid><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Fri, 27 Dec 2013 14:56:49 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p><a href="http://greghurlman.com/sharepoint-developers-and-a-name-change/?ref=98.codes">A little more than a year ago</a>, I was, as someone looking for .Net developers that knew the SharePoint API, frustrated by the confusion in the SharePoint space between the different kinds of developers that exist in the ecosystem. This confusion persists to this day, much to the detriment of both these developers and the people that want to hire them.</p>
<p>This needs to stop.</p>
<p>.Net developers in the SharePoint space have gotten awfully defensive in the last few years, and I can&apos;t blame them. Microsoft keeps moving their damn cheese, and for some, has been taking the cheese away entirely. The job opportunities in the SharePoint-.Net space are shrinking, and so these developers are doing whatever they can to defend this space. Unfortunately, this often includes berating the other types of developers as &quot;not real developers&quot; as often as they can.</p>
<p><em>This</em> needs to stop.</p>
<blockquote>
<p>&quot;So...&quot;</p>
</blockquote>
<p>you might ask.</p>
<blockquote>
<p>&quot;...what do we call these different roles?&quot;</p>
</blockquote>
<p>That, friends, is the easy part. Also? It turns out there are 3 disparate groups here, each worth giving their own share of the limelight. I propose we start naming these different types of jobs as such:</p>
<ol>
<li>
<p><strong>.Net Developers</strong><br>
This is the easy one &#x2014; if you use Visual Studio to compile .Net code into DLLs that are then packaged up and pushed, this group is for you.</p>
</li>
<li>
<p><strong>Front-end Developers</strong><br>
These are folks that live &amp; breathe JavaScript, HTML, and CSS and somehow wound up working on SharePoint stuff. Branding folks, UX/UI people, SharePoint-hosted app developers: these are your people.</p>
</li>
<li>
<p><strong>SharePoint Developers</strong><br>
These developers are the ones that are creating the increasingly complex solutions in SharePoint that you&apos;ll often see referred to as &quot;no code&quot; solutions. These developers know the product inside and out, can do more in a day with SharePoint Designer and InfoPath than you&apos;ll get done in a week in Visual Studio, and know when the .Net developers are coding something custom that already exists. Power users, analysts, SharePoint Designer people, InfoPath people, this is your group.</p>
</li>
</ol>
<p>Now, I can already hear the people in groups 1 &amp; 2 already complaining.</p>
<blockquote>
<p>&quot;But <em>I&apos;m</em> a SharePoint Developer <em>tooooo</em>&quot;</p>
</blockquote>
<p>Yes, yes, of course you are. Here&apos;s your cookie.</p>
<blockquote>
<p>&quot;But <em>those</em> people aren&apos;t developers <em>at alllll</em>, they don&apos;t even know how to do $thing_I_know_how_to_do&quot;</p>
</blockquote>
<p>Don&apos;t be a child. You weren&apos;t born with innate knowledge of how to do what you&apos;re doing, your path is your own and no one else&apos;s, and who the hell are you to decide who makes the mark?</p>
<p>Now shut up, adults are talking.</p>
<p>Some people will inevitably fall into more than one category; some people may cover all 3 to an extent, but anyone claiming they&apos;re at the top of the game for all three is probably full of crap. People that can cover all three at the expert level are unicorns, and will probably be the very last people to tell you they&apos;re experts in <em>any</em> group, never mind all 3.</p>
<p>Lastly, who the hell am I to be deciding any of this?</p>
<p>Well, first, if you think I have that kind of power, to decide something and have it be so... HA. If only, friend... if only. Secondly, I run two SharePoint conferences and a user group in the NYC metro area. As such, I have to design session tracks that make the most sense for attendees to follow, and for speakers to best target their session content. Ambiguity in what a session might be, ambiguity in what audience a session might serve: these are my enemies.</p>
<p>Consequently, for my conferences, I&apos;m going to start naming these groups &#x2014; and the tracks for those groups &#x2014; as laid out above. I&apos;m going to encourage other organizers and speakers to use the same nomenclature, to help get the word out. I&apos;m going to refer to these roles for any job description I need to write, and in any interview I conduct.</p>
<p>And, I&apos;ll kick out anyone from my events I hear deriding the other groups as &quot;not real developers&quot;... you people are a poison in the community, and we&apos;re better off without you.</p>
<p>Think I&apos;m full of crap? <a href="http://www.twitter.com/ghurlman?ref=98.codes">Let me know on Twitter</a>, or come find me at <a href="http://spsevents.org/city/va-beach/Pages/SPSVB2014.aspx?ref=98.codes">SharePoint Saturday Virginia Beach on January 11th</a>.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[On 2013]]></title><description><![CDATA[<!--kg-card-begin: markdown--><blockquote>
<p>But Greg... you can&apos;t post this stuff yet! Christmas isn&apos;t until, like, Wednesday!</p>
</blockquote>
<p>Yeah, and Christmas is poised to invade Labor Day next year. Shut up.</p>
<p>About this time last year, I was just so ready for 2012 to end. It was a terrible, horrible, no</p>]]></description><link>https://98.codes/on-2013/</link><guid isPermaLink="false">5ae75ab0b641540018e26501</guid><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Tue, 17 Dec 2013 19:51:28 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><blockquote>
<p>But Greg... you can&apos;t post this stuff yet! Christmas isn&apos;t until, like, Wednesday!</p>
</blockquote>
<p>Yeah, and Christmas is poised to invade Labor Day next year. Shut up.</p>
<p>About this time last year, I was just so ready for 2012 to end. It was a terrible, horrible, no good, very bad year, and 2013 was &#x2014; I was <em>sure</em> &#x2014; going to solve all of my problems. After all, what better cure for life&apos;s ills than an arbitrary marker of the passage of time?</p>
<p>Well, fair reader, it turns out it takes more than changing a number to make a profound impact on one&apos;s life. Thankfully, I had a plan B: make an effort towards real, substantive change. During the year there were of course highs and lows, but the lows felt like the deepest pit one could be cast into. At different times during the year I considered the reality of a complete career change, considered dropping completely off the radar, wondered if almost every decision I&apos;d made in the last 7 years had been wrong. Having finally landed on my feet again, it&apos;s obvious to see that in order to build something shiny &amp; new properly, the obstacles had to be completely cleared away; there was no hope in building one atop the other. Now that the painful work of rebuilding is done, I can see the journey&apos;s been well worth it and I know I&apos;ve been made better for the experience, bruises, scars, and all.</p>
<p>I actually wrote the list below before I wrote the introduction above. The tone of the original draft&apos;s introduction was much darker, and the process of listing out everything that happened this year helped me realize that 2013 wasn&apos;t the disaster I had felt it was. No, 2013 was a fresh start, one that I&apos;m very glad to have.</p>
<p>So without further adieu: my 2013, in handy-dandy list form:</p>
<ul>
<li>Finally switched from the DC team of my company to the Northeast team (I live in NJ, not DC)</li>
<li>Got to start a project from scratch for the first time in a while</li>
<li>Got to do an all Office365 project</li>
<li>Was given my first <a href="http://penny-arcade.com/patv/episode/enforcers?ref=98.codes">Enforcer</a> (deputy) management role at <a href="http://east.paxsite.com/?ref=98.codes">PAX East</a></li>
<li>Founded (with 3 partners) a new LLC to manage all my community events in the NYC metro area</li>
<li>Launched a brand new community event, <a href="http://spsevents.org/city/nj?ref=98.codes">SharePoint Saturday NJ</a></li>
<li>Spoke at several community events</li>
<li>Attended the SharePoint Conference</li>
<li>Between getting that project &amp; now, worked 60 - 80 hour weeks pretty much every week. Weekends, nights, didn&apos;t matter.</li>
<li>Got fired (long story, buy me some hard liquor and I might tell you about it)</li>
<li>Went to <a href="http://prime.paxsite.com/?ref=98.codes">PAX Prime</a> anyway, managed some more <a href="http://penny-arcade.com/patv/episode/enforcers?ref=98.codes">Enforcers</a></li>
<li>Was told at Prime that I could handle the big theatre back East &quot;no problem&quot;</li>
<li>Had a September of Otherwise No Fun And No Money</li>
<li>Got a contract gig that started at the beginning of October</li>
<li>Got a verbal commitment to extend that contract through 2014 (yeah, I know - the client waits until nowish to sign new stuff)</li>
<li>Migrated the blog to what you&apos;re seeing now (yay minimalism)</li>
<li>Really stepped up the tweeting on my &quot;other&quot; account</li>
<li>Wondered if I should make the &quot;other&quot; account protected</li>
<li>Had my mother pass away (we didn&apos;t have that much of a relationship, so don&apos;t aww too hard on this one)</li>
<li>Was able to use inheritance money to finally &#x2014; FINALLY &#x2014; get out of debt. Mostly. Still a car and a mortgage to pay off</li>
<li>Formed a corporation, hired myself</li>
<li>Moved from calling myself &quot;freelance&quot; to calling myself &quot;independent&quot;</li>
<li>Recognized how lucky I am to have friends around the world, even if very few live near me</li>
<li>Wrote a big list summing up 2013, realized it wasn&apos;t so awful after all</li>
</ul>
<p>There&apos;s still 2 weeks of 2013 left, but it&apos;s really just &quot;garbage time&quot;, waiting out the clock for next year; the die on 2013 has already been cast.</p>
<p>Next year though? Going to be huge both personally &amp; professionally. I can feel it, and I can&apos;t wait.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[On responsibility, real and imagined]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>I recently inherited some money, and as a consequence was able to pay off most of my long term, PITA, oh god how are we ever gonna get out of this, debt. The day I went from website to website zeroing everything out was supposed to be a good day;</p>]]></description><link>https://98.codes/on-responsibility/</link><guid isPermaLink="false">5ae75ab0b641540018e26500</guid><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Thu, 12 Dec 2013 20:28:11 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>I recently inherited some money, and as a consequence was able to pay off most of my long term, PITA, oh god how are we ever gonna get out of this, debt. The day I went from website to website zeroing everything out was supposed to be a good day; it turned out be be wholly unsatisfying in every way.</p>
<p>A month or so ago, I started a new job where I put in 40 hours a week, every week, and nobody has so much as intimated that night &amp; weekend work should ever be expected. Not even for &quot;crunch time&quot;. While that is a <em>definite</em> upgrade from my last job stress-wise, it is, as of yet, unfulfilling.</p>
<p>Also just recently (what can I say, Q4 2013 was Change City for me), I&apos;ve stopped submitting to speak at SharePoint Saturday events, as I&apos;m no longer doing SharePoint work, and have no want to do that work.</p>
<p>As a result, I&apos;ve been miserable.</p>
<blockquote>
<p>Wat.</p>
</blockquote>
<p>I know. Read on.</p>
<p>My wife pointed something out to me the other night when I mentioned to her that I seem to be kinda depressed at the end of the day, and I didn&apos;t seem to have any good reason why. She told me, without even a split second to think about it, that I probably feel like crap because right now I&apos;m at the lowest point in being responsible for anything than I&apos;ve been in <strong>years</strong>.</p>
<p>And you know what? She&apos;s absolutely right. I&apos;m only responsible for myself at work; nobody to lead, nobody to review, nobody to mentor. I&apos;ve got no responsibility towards the tech community right now; no presentations to prepare, no events to plan. Now, with the debt (mostly) gone, I have no overbearing, oversized superproblem to work out to fill in the gaps between things.</p>
<p>That place in which I put my focus outside of work hours, is completely empty. My brain, lacking something on which to focus, still freaks out as if I&apos;m procrastinating on something big. So, I wind up feeling like crap instead of being able to relax at the end of the day.</p>
<p>This is all a temporary condition. Come the end of January, I can start planning <a href="http://spsevents.org/city/nyc?ref=98.codes">SPSNYC</a>. Sooner or later, there will be local Code Camp events to sink my speaking teeth into. Also at the end of January, I&apos;ll be taking up mobile development in a formal way, training and all.</p>
<p>So really, I just need to learn how to chill, and not be &quot;on&quot; all the damn time. I need to stop comparing myself to kids in their 20s, still finding their way, working on ALL THE THINGS because they haven&apos;t found the new things that leave them satisfied. I need to allocate some time to be responsible to myself, and not make that my very lowest priority.</p>
<p>Most of all, I need to get my <a href="https://www.youtube.com/watch?v=RYlCVwxoL_g&amp;ref=98.codes">FILDI</a> and <a href="http://www.urbandictionary.com/define.php?term=idgaf&amp;ref=98.codes">IDGAF</a> to stop fighting for a little while, and enjoy the rest of 2013, and gear up for what is sure to be an epic new year.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[On keeping secrets]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Derek Sivers:</p>
<blockquote>
<p>We got two ciders and she patiently waited while I spent 20 minutes reading through it. Pages filled with words about processing family drama, formulating goals, plans for life changes, romantic details, lists of regrets, contemplations, etc.</p>
</blockquote>
<blockquote>
<p>I was surprised it was all meaningless to me. These pages</p></blockquote>]]></description><link>https://98.codes/on-keeping-secrets/</link><guid isPermaLink="false">5ae75ab0b641540018e264ff</guid><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Thu, 12 Dec 2013 13:10:12 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Derek Sivers:</p>
<blockquote>
<p>We got two ciders and she patiently waited while I spent 20 minutes reading through it. Pages filled with words about processing family drama, formulating goals, plans for life changes, romantic details, lists of regrets, contemplations, etc.</p>
</blockquote>
<blockquote>
<p>I was surprised it was all meaningless to me. These pages meant the world to her, but to me they meant no more than any non-secret conversation we&#x2019;d ever had. It was the same stuff that we all think.</p>
</blockquote>
<blockquote>
<p>Later, I thought about the stuff I keep secret.</p>
</blockquote>
<blockquote>
<p><a href="http://sivers.org/ws?ref=98.codes">http://sivers.org/ws</a></p>
</blockquote>
<p>After I read that post, I also wondered the same thing.</p>
<p>My <code>D:\Dev</code> folder on my home PC is filled to the brim with stuff. Little utility projects, half-baked ideas, whole-baked ideas that went nowhere, and so on. A good number of those have respositories on github, and all but very few are public.</p>
<p>Why? Because I don&apos;t want anyone to see my half-baked ideas? Because I don&apos;t anyone to realize that I start a million things a year and ship damn near none of it? Because I think my code is crap, and don&apos;t want anyone to see it or &#x2014; god forbid &#x2014; think it&apos;s the proper way to do something? Maybe some of these things, probably all of these things.</p>
<p>After I thought about it for a little while, I came to a realization. I can just add a note at the top of my readme.md...</p>
<h4 id="stopthisishalfbakeditmayneverbedoneitmaynevercomecloseclonerbeware">&quot;STOP! This is half-baked. It may never be done. It may never come close. Cloner beware.&quot;</h4>
<p>Mark the repo public, and be done with it. There&apos;s no client stuff up there, nothing NDA&apos;d, no real good reason to not do this. So. I&apos;m gonna do it. Can&apos;t do it now, at work; I&apos;ll have to remember to do it when I get home.</p>
<p>The funny thing is, as Derek&apos;s post from the opening brought to a point, none of this will matter at the end of the day. Maybe, someday, I&apos;ll finish something, or maybe someone will finish something for me. Until then, I&apos;ll keep working &#x2014; out in the sun now &#x2014; only this time, I&apos;ll be hidden in the crowd.</p>
<p>And I&apos;m OK with that.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Hoards Of Novices]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Uncle Bob Martin:</p>
<blockquote>
<p>Is the software industry trying to write the script for Hamlet by hiring a million monkeys to bang on keyboards? Perhaps we should rethink that strategy and hire one bard instead. Perhaps, instead of hoards of novices, we need a small team of professionals.</p>
</blockquote>
<blockquote>
<p><a href="http://blog.8thlight.com/uncle-bob/2013/11/19/HoardsOfNovices.html?ref=98.codes">http://blog.8thlight.</a></p></blockquote>]]></description><link>https://98.codes/hoards-of-novices/</link><guid isPermaLink="false">5ae75ab0b641540018e264fe</guid><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Wed, 20 Nov 2013 13:36:47 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Uncle Bob Martin:</p>
<blockquote>
<p>Is the software industry trying to write the script for Hamlet by hiring a million monkeys to bang on keyboards? Perhaps we should rethink that strategy and hire one bard instead. Perhaps, instead of hoards of novices, we need a small team of professionals.</p>
</blockquote>
<blockquote>
<p><a href="http://blog.8thlight.com/uncle-bob/2013/11/19/HoardsOfNovices.html?ref=98.codes">http://blog.8thlight.com/uncle-bob/2013/11/19/HoardsOfNovices.html</a></p>
</blockquote>
<p>This very thought &#x2014; that there are just too many permanovices in the development world, <em>especially</em> in the .Net world &#x2014; is what originally drove me to find smaller and smaller companies to work for, now ending with me only relying on me for success in my work.</p>
<p>Every time I&apos;ve found myself in a long term lead position for developers, I always made it a point to do code reviews early and often, do lunch &amp; learn-style mandatory post mortems for all my developers (not just the project team) when a project had finished, and hold monthly internal-user-group style meetings on some development topic.</p>
<p>My point is that I wasn&apos;t just the guy on the team that had been doing it longer; I took the time to mentor my team from the most junior dev all the way up to the dev I&apos;d trust to take over for me when I was out. I took the responsibility to do what I could to make sure my developers wouldn&apos;t just become proficient workers, but have the ability to become proper mentors themselves when they wound up in my position.</p>
<p>True mentorship in software development has been lacking for ages &#x2014; so long that we have developer leads that have never been properly led themselves. If this sounds a lot like the effects of bad parenting... you&apos;re not very far off.</p>
<p>Now, the software industry is reaping the <em>*ahem*</em> benefits of all this shoddy leadership, and I wonder if there&apos;s anything we can do for the bad lead devs already in the system. my first impulse is to compartmentalize them, refuse to to hire them, such that they find jobs leading developer teams with such high turnover that the effect a lack of proper mentorship has is mimimized. That sounds harsh, but let&apos;s face it, a lot of these developers are already at home working for companies like Accenture that&apos;ll hire 50,000+ <em>this year</em>.</p>
<p>Let the proper software be written by the little guys, and let the enterprise guys spend their moneypiles on crap; they won&apos;t notice the difference, I promise.</p>
<p>Now, to convince governments to stop hiring these companies...</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[End of an Era]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h4 id="greg10">Greg 1.0</h4>
<p>Born in the Bronx. Grew up in upper middle class suburban New Jersey. College at Virginia Tech: went in a Computer Science major, came out with a B.A. in Interdisciplinary Studies. College summers working at Walt Disney World, first at <a href="https://disneyworld.disney.go.com/dining/magic-kingdom/cosmic-ray-starlight-cafe/?ref=98.codes">Cosmic Ray&apos;s Starlight Cafe</a></p>]]></description><link>https://98.codes/end-of-an-era/</link><guid isPermaLink="false">5ae75ab0b641540018e264fd</guid><dc:creator><![CDATA[Greg Hurlman]]></dc:creator><pubDate>Tue, 05 Nov 2013 16:43:26 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h4 id="greg10">Greg 1.0</h4>
<p>Born in the Bronx. Grew up in upper middle class suburban New Jersey. College at Virginia Tech: went in a Computer Science major, came out with a B.A. in Interdisciplinary Studies. College summers working at Walt Disney World, first at <a href="https://disneyworld.disney.go.com/dining/magic-kingdom/cosmic-ray-starlight-cafe/?ref=98.codes">Cosmic Ray&apos;s Starlight Cafe</a>, then at the world famous <a href="https://en.wikipedia.org/wiki/Jungle_Cruise?ref=98.codes#Magic_Kingdom">Jungle Cruise</a>.</p>
<p>After college, went to work for Microsoft in their <a href="https://en.wikipedia.org/wiki/Product_Support_Services?ref=98.codes">support division</a>, developer support for IIS specifically. Wrote <a href="http://support.microsoft.com/kb/299525?ref=98.codes">KB articles</a>. Debugged classic ASP hangs and crashes. Learned the .Net Framework while in the 1.0alpha stages.</p>
<p>Left Microsoft, went on a grand tour of contractor jobs in North Carolina and New York City. While in NYC, got a call from Avanade. Made the jump from contractor to capital-C Consultant. Enjoyed having things like health insurance and paid vacation (that I rarely took, but still).</p>
<h4 id="greg20">Greg 2.0</h4>
<p>New York City, Summer 2006. I&apos;d been working for Avanade for not quite a year, and was being convinced by management that I needed to join the newly formed and growing Information Worker practice. According to them, SharePoint was the next big thing and they needed some &quot;real .Net developers&quot; to join the team to work on a project using the latest beta version of MOSS 2007.</p>
<p>So, I did what I figured what was best for my career at the time and made the switch. Whether that was a good or bad decision would be enough for a series of blog posts, but over the last 7 years, it boiled down to working on insanely frustrating code for Really Good Money. Yes, I sold out, but it took me about 4 years to realize it.</p>
<p>In the past year or two, really since SharePoint 2013 became public knowledge, it became increasingly clear to me that time was short in the SharePoint world for expert-level .Net developers. I began to wonder if I&apos;d made a wrong turn back in 2006, but those golden handcuffs were on tight; I wasn&apos;t going anywhere unless my hand was forced.</p>
<p>Then, my hand was forced.</p>
<h4 id="greg30">Greg 3.0</h4>
<p>This past August, I found myself without a job. Freed of the shackles of the &quot;safe&quot; yet shitty job, it was immediately clear what I needed to do.</p>
<p>I went to <a href="http://prime.paxsite.com/?ref=98.codes">PAX Prime</a> and enforced things.</p>
<p>Then, I came home, and declared myself a freelancer on the internets, determined to not work on anything remotely related to SharePoint. Some lowball offers came in, an avalanche of BS lowball crap offers came in, and then I was finally able to find a contract worth taking. On October 7th, I got back to work.</p>
<p>Now I&apos;m back working in ASP.Net code &#x2014; this time MVC &#x2014; though really the server-side code is paper thin; it&apos;s 80% JavaScript for me these days. The really exciting bit is that I&apos;m able to make the leap I&apos;ve been talking about for years &amp; years, and really go to work for myself. This past weekend, the incorporation paperwork was filed, and come January 1, 2014, I&apos;ll hire myself, and god willing, never look back.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>