I’m getting really excited for TechBash 2019. Before you know it, we’ll have loads of developers descend on the Poconos to learn, network, and have fun! I figured I would compile a list of some of the great reasons to attend TechBash. If you are on the fence, I think this will do the trick!

TechBash is Nov 12-15 2019 at the Kalahari Resort in Pocono Manor, PA.

Please see www.techbash.com for more details.


20181003_090623Of course, the main reason to attend any technical conference has to be the content! We’ve got plenty of it. What do you want to learn? We’ve got languages (C#, Go, JavaScript, etc.), Client Side stuff (Angular, React, Vue, Web Components, PWAs, CSS, etc.), Azure, DevOps, .NET Core, Azure, Testing, Machine Learning, and AI. We cover ASP.NET, .NET Core, and Entity Framework. Plus, there is more to our careers than just tech, so we help you out with soft skills to including sessions on Imposter Syndrome, Hiring, and Diversity and Inclusion. The list goes on and on. Check out our schedule at https://techbash.com/2019-schedule


I can’t say enough good things about the talented professionals that travel to TechBash to share their expertise with you! We bring in a diverse group of speakers from around the world, some representing top companies and products too. Many of these speakers do this simply because it is their passion. We are lucky to be a part of this great community.


This year we are lucky to have 4 awesome workshops. I must mention, the workshops cost extra but they are well worth the price. In these workshops, you get a deep dive into a topic and often get hands on experience too. This kind of learning can only be possible with a full-day workshop!

From Zero to Hero with Azure DevOps presented by Paul Hacker – DevOps Architect at Microsoft

Modernizing Your Apps to .NET Core / .NET 5 presented by Sean Killeen – .NET Specialty Lead, Excella

Intro to Web Components presented by John Riviello – Distinguished Engineer at Comcast & Chris Lorenzo – Distinguished Engineer at Comcast

Doing more with Serverless on Azure presented by Rich Ross – MTC Technology Architect (Microsoft) and amateur live-streamer

Water Slides

barrellingbaboon768x432Ok, it is up to you whether or not you tell your boss this part, but TechBash isn’t just about learning new tech. TechBash is FUN! TechBash is hosted at the Kalahari Resort in the Pennsylvania Poconos – a 220,000 square foot indoor water park! Bring a bathing suit.

Code of Conduct & Emphasis on Diversity

You may think it is odd that I list a code of conduct on the list of things that makes TechBash great. But we have established a forum for attendees, speakers, sponsors, and staff to all come together and feel comfortable knowing that they will all be respected. We are pretty proud of that. This year we are even hosting a panel on diversity. We want this kind of environment to spread from our event to your workplace!

Family Day Content

Bring the family along to TechBash! While you are learning, they can explore the waterpark and other great activities at the Kalahari and the surrounding area. And on Friday, we’ll provide lots for the kids to do. Take the kids out of school for the day, they’ll learn a lot with many STEM topics.

Lego Open Build, Gaming, Martial Arts, A Reptile Show, Application Development Workshop, Engineering Challenge, and more!

Attendee Party

20181003_203606Once again, I am talking about fun. But networking is an important part of our careers. Please join us for the evening attendee party, have some fun, meet your peers, and relax! If the weather is good, we’ll open the doors and enjoy the fire pits and fresh air on the patio.

Game Night

20181004_194200OK, when my colleagues suggested that we have game night at TechBash, I was a bit unsure about the idea. But I was really wrong about this. Game night is really fun. Attendees are all welcome down at the lounge for board games, card games, ping pong, giant Jenga and much more. We’ll have some snacks and a cash bar. If the weather is nice, we’ll have fire pits and corn hole outside.


20181004_144058It’s a conference but we’ve got to eat too! Our attendees have consistently commented that TechBash has the best food and snacks of any conference. We can’t take much credit for that but we are lucky the Kalahari chef’s do such a great job.


The organizers of TechBash started this conference because we were tired of traveling across the country for Tech events. So we put this conference together close to where millions of people live and work – the northeast. TechBash is less than 2 hours from NYC and Philly. That makes it a pretty easy drive from Albany, Baltimore and Harrisburg and many more areas too.

Water Slides

Yeah, I know I said this already. But seriously, the indoor water park is 220,000 square feet! It is insane and loads of fun.


We’ve had great keynote speakers in the past and 2019 is no exception. This year, we’ve got Jeffrey T, Fritz, Senior Program Manager in Microsoft’s Developer Division. You may also know him from his very popular live stream show on Twitch: Fritz and Friends. Jeff has a huge following on line and he has earned it by delivering top notch content.

Attendee Lounge and “The Hallway” Track

20181003_203606Many people say you learn the most at a tech conference in the hallway. In the hallway, you can meet up with presenters, ask follow up questions and keep learning. We’ve taken that to the next level by providing an awesome space for networking, collaboration, and relaxation – the Attendee Lounge. Relax on the couch or get some fresh air on the patio. Meet up with old friends and new.

Live Stream and Recorded Content

We’ll even be live streaming some of the content from TechBash! So if you can’t make it, I hope you will catch a session on line. And if you attend one of the recorded sessions, it’s great to be able to re-play it later at home for review. Of course, it’s best to be here in person where you can ask questions and interact Smile.

Tesla Chargers

OK, this may not be that important to you but I recently bought a Tesla. I just found out the Kalahari has Tesla chargers on site! I’m told that the chargers are part of the valet parking service which is $30 per night. I’ve also read online where the Kalahari may waive the fee for some “charging only” situations but I make no guarantees. Either way, I’ll be getting a charge.

OK, I’m a little late at getting to this but I have just posted the code for my recent talk: Creating Awesome Chat Bots with the Bot Framework and C#.

To all that attended, thanks for joining me. I had a lot of fun preparing and presenting.

The code is here: https://github.com/schwammy/bot-demo

Unfortunately, this isn’t the easiest sample to get running. I think the code serves as a good example of some great things you can do with bots. However, if you want to actually use it, there are several steps that need to be done in advance. I’ve copied the text below from the readme file. As I say in a lot of my presentations, each step is pretty easy. However, putting them all together, especially for the first time, can be tricky. There are lots of good articles and videos on the web already for getting started with Bot Framework (and LUIS and QnA). I suggest reading up a bit and then follow my very basic instructions to get the code sample running.

Contact me if you have any questions or issues. Have Fun!

Getting Started

Before using this code you need to get set up

  1. Follow the instructions in the Prerequisites section here: https://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-quickstart
  2. Install the emulator. The link is on the same page as above in the section: “Test your bot”

  3. You will also need:

Resources Setup

  1. After you create a LUIS account, create a LUIS app. You can leave it blank if you want. TechBashBot.sln contains a file LuisModel.json that can be imported to get started quickly.

  2. After you create a QnA Maker account, create a QnA service. You can import the questionsn and answers from TechBashBot.sln using the QnAMaker.tsv file.
  3. After you create your Azure Account, create a Web App Bot. Just add a resource and search “bot”, then choose Web App Bot

App Configuration

Once all of your resources are set up, you need to configure the code:

  1. Update the web.config file with the MicrosoftAppId and MicrosoftAppPassword for your new Web App Bot

  2. Update LuisDialog.cs by setting the new LUIS model id and subscription key
  3. Update QnADialog.cs by setting the QnA Service subscription key and knowledgebase id



I’ve been using the Azure Portal more and more these days and one thing is for sure, I still have a lot to learn. There is soooo much to do in Azure. This presents a problem with clutter. Since I don’t use all of the features, I find the “menu” of options to be pretty noisy. But the good news is, that is an easy problem to solve.


To the left I’ve pasted a screenshot of the Azure Portal’s side menu (actually, that is only part of it). You’ll note that the items on that list are shown as “favorites”. But I didn’t favorite them! With a few clicks I can clean this up.










Just click “All services” and you can see the complete list. The list is pretty long but I’ve included a screenshot of some of it below:


From this screen you can easily select which items really are your favorites. That will immediately reduce the size of the side menu. In addition, you will find a TON of other options that were not displayed on the favorites list originally. That’s a little depressing because it shows that there is even more to learn in Azure than I first thought. But I guess that is a good problem to have.

But wait, there’s more!



Next, notice that as you hover over each item in the favorite list, you will see an icon indicating that you can grab it. If you do, you can drag the item up or down in the list.








When I am done selecting favorites and moving them around, I am left with a menu that makes it really easy for me to find what I need. No noise. Only the items I want in the order I want them. Now I can get to work!


I wanted to point out one difference between ConfigurationManager and WebConfigurationManager. I know there are other differences but here’s an issue I ran into recently.

I’ve been working on some Bot Framework stuff (really cool and fun, by the way). The Bot uses a QnAMakerService and QnAMakerDialog which worked great when I ran the Bot locally (debugging in Visual Studio) but it didn’t work when I deployed it to Azure. I knew that a lot of features of my bot were working but when it needed to use the QnA features it was just bombing out. A coworker helping out said he fixed my problem by putting settings in for the QnaSubscriptionKey and QnaKnowledgebaseId via the Azure Portal (navigate to your App Service, then Settings > Application Settings)



Yeah, I knew those were needed of course, but I had already added them. The settings were in my web.config file:


I was glad the Bot was working and I had a major clue to my issue. I wasn’t going to let it end there. Why weren’t the web.config settings being used? I took a close look at my code:

public class QnADialog : QnAMakerDialog
public QnADialog() : base(new QnAMakerService(
new QnAMakerAttribute(
Sorry, I couldn’t find an answer for that“,

The code seemed pretty straightforward. As a matter of fact, I recalled copying it from a sample on the web! Then I noticed that the code was using “ConfigurationManager” which was not the normal thing for me. I usually create web applications and I therefor use “WebConfigurationManager” to read from web.config files. And since my bot runs as an App Service in Azure, it IS a web application. I proceeded to make the major refactor of adding the text “Web” to the word “ConfigurationManager”. I then removed the Application Settings from the Azure Portal, leaving the values I had previously entered into the web.config file. And it worked perfectly.

As developers we have a variety of options to access configuration data and that data can be stored in several places. In addition to the two previously mentioned, there is also the CloudConfigurationManager class. My understanding is that this would have worked similarly to WebConfigurationManager. And, in fact, good old plain ConfigurationManager would have worked fine for this Azure App Service if I used the Portal to set my app settings instead of the web.config file. So, choose carefully and get to know the differences between the ConfigurationManager classes

I just finished a project migrating my blog to WordPress (from dasBlog). In addition, I moved from a traditional hosting environment to Azure. Oh, and after all this time, I’m finally changing my domain name and hosting “Schwammy Says” at www.schwammysays.net! I’ve been posting to my blog since March of 2007. So during this transition, I wanted to maintain all of my posts and not break any existing links to my content.

Here are the steps I followed, as best as I can remember…

Part 1: Set up WordPress on Azure

This part was really easy.

  • Create an account on azure
  • Install WordPressTechnically you are done at this point but there was some more to do.
  • Install plugins. Here is what I am using so far:
    • Askimet
    • All In One SEO Pack
    • BlogML Importer
    • Configure SMTP
    • Easy Contact Forms
    • Google XML Sitemaps
    • Redirection
  • Pick a theme
  • Configure settings
    • Tip: One setting I chose was to block search engines from my site. Of course I will change that once my content is fully loaded and I am ready to go.

At this point the blog is ready to use. If this was a new blog I would be all set. But I’ve got to get all of my existing content loaded up before I make my blog “live”.

  • I initially created my blog as schwammysays.azurewebsites.net. However I want it to just be www.schwammysays.net. That is possible with Azure, but not in the free website version. So I switched over to a shared instance on Azure. In that mode, I’ll be able to configure the domain the way I want. More on that later. The shared instance is not free but since I an MSDN subscriber, I get some free credits on Azure.

Part 2: Migration

  • Research: Mostly this was research on how to migrate from dasBlog to WordPress. I found some great resources including this one which I found very helpful:
  • Data: Copy all content from my current web server to my PC
  • Extract: I used dasBlogMLto extract all of my content into the BlogML format.This is needed because you can’t import the dasBlog data straight into WordPress. However, you can import BlogML data WordPress.
  • Fix links: Next I opened the BlogML file in Notepad++ and updated all of the hyperlinks in my content. Since I was changing my sites URL, I needed all of self-referencing links to be up to date.
  • Now, using the BlogML Importer plugin, I was able to easily import all of my content. Note that it seems some people have a lot of errors doing this export and import from dasBlog to WordPress format but luckily I had zero errors here!
  • Next, using FTP I copied up all of my blogs files such as images, zip files, etc.

At this point, the blog is ready to go. It is styled and has content. Still I need to work out all of the url redirection so I don’t lose existing links to my blog.

Part 3: Redirection

This is the area that I was concerned about since I really don’t know that much about. Luckily my friend Nick Berardi (@nberardi) was there to answer a lot of questions.

One issue I had to contend with is that dasBlog uses a different format for urls then WordPress does. For instance, for a post named “This Is A Post” it would become a url like this:

DasBlog: www.blog.ingenuitynow.net/This+Is+A+Post.aspx

WordPress: www.schwammysays.net/this-is-a-post/

There are 3 differences, aside from the obvious fact that I changed domain names:

  • Uppercase vs. lowercase
  • Plus instead of dashes between words
  • .aspx extension vs. “/”

To set up all the redirection:

  • Set up the Domain: Next I used the tools where my domain schwammysays.net is registered and added an CNAME record to point to my new Azure site. FYI, my plan was to get it all working before redirecting the old domain (blog.ingenuitynow.net) to the new one.
  • Redirection: I’ve heard great things about the Redirection plugin so I configured it to route my old post name to my new post name. (I had a list of all the posts with old and new names courtesy of the dasblogML export tool).
  • Unfortunately, the redirection wasn’t working. I tried a bunch of different stuff but after a while I figured out that the plus sign in the URL was causing trouble. My thought was that WordPress was having an issue with the special character. Spoiler alert, I later realized that wasn’t exactly right. i thought I was stuck at this point until Nick reminded me of something that should have been obvious to me all along. I may be running WordPress on Azure but it is really just a website running on IIS. The assumption was that I’d need to deal with the plus sign before WordPress got involved. It is pretty easy to write custom HTTP Handlers with C# and plug them into the site. Nick was even so kind that he sent me a great code snippet to change the URL and issue a 301 redirection error too.
  • However, the handler wasn’t working! It wasn’t getting hit at all. I figured out that some of the web.config settings for WordPress were getting in the way. The WordPress site had some redirects built into the config file and they were getting called before my handler. I changed the web.config file as seen here. I added the parts highlighted in yellow:

    <rule name=”old” patternSyntax=”Wildcard” stopProcessing=”true”> <match url=”*.aspx”/> <action type=”None” /> </rule>

            <rule name="wordpress" patternSyntax="Wildcard">
                        <match url="*"/>
                                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                        <action type="Rewrite" url="index.php"/>

    With the handler in place, I tested it and guess what… it still didn’t work. I did some more research and found out that by default, asp.net sites don’t allow plus signs in the URL. I’m no expert on this topic but it is called double escaping. A quick change to the web.config file and everything was working.

          <requestFiltering allowDoubleEscaping="true"/>

    While I did not test this, my guess is that, had I updated my web.config file earlier to allow double escaping, the WordPress redirection plugin would probably have worked for me and the http handler would not have been needed. But actually, the handler is easier since it does all of my URLs in one shot.


  • Lastly, I sent back to my domain tools and sent traffic for blog.ingenuitynow.net to the Azure site.

This was a fairly long process. Some of it was easy. Some of it would have been easier if I knew more about URL redirection and DNS. But since you are reading this post, it seems that everything has finally worked out!