techbash

TechBash 2016 is a brand new developer conference taking place on September 28-30, 2016. I’m one of the organizers along with a small group of friends from the developer community. TechBash will feature great presentations for you by a variety of awesome speakers from around the country. Our venue, the Kalahari Resort is really cool. It is a brand new Resort, Conference Center, and 100,000 sq. ft. indoor water park! TechBash is located in the Pocono Mountains in PA. That means it’s not only a beautiful setting but it’s close to many people living in the northeastern US. It’s less than a 2 hour drive from New York City, Philadelphia, and northern NJ. And this location is still within reasonable driving distance of many other cities in the northeast!

Our goal is to inspire our attendees to build great things. At TechBash, we are building an environment that is designed for attendees to get the most out of the event. In the many sessions at TechBash you will learn all sorts of new things. But we know that a lot of great things happen outside of the talks as well. That is why we will have a great attendee lounge that will have plenty of space for you to hang out and talk with old friends and new. It will provide a great place for speakers and attendees to have follow up talks after sessions. There will be snacks and coffee. And it will also include our Hack Lab and our vendors as well. The Hack Lab is a space for our attendees, speakers and sponsors to collaborate, brain storm, hack and even demo the results!

TechBash is a community driven, non profit event (although not a charity) organized by the TechBash Foundation.

If you are already hooked, just register (registration info is below)! And please read on if you need a bit more convincing…

Content is Key!

Our goal is to be technology/platform agnostic. We know that nowadays, developers are interested in all kinds of stuff and there is a lot to learn for us all. Having said that, the agenda is weighted towards Microsoft Technology.So while we have content on ASP.Net (including Core), Azure, Xamarin, Visual Studio, C# and more, we also have talks about JavaScript, Docker, Go, Design Patterns, Web Security, OSS, Agile, and more. For all of the latest details, check out the session list. Keep in mind, as with any event, the schedule is subject to change.

Location, Location, Location

imageAs I said above, TechBash is pretty close for many people in the northeastern US. Sure, those of you from NYC to Philly are all set with a simple 2 hour drive. But if you are from DC to Boston to Pittsburg and beyond, this location is a reasonable drive for a 3 day event! Here are some drive times (according to Google Maps – your times may vary Smile). No air travel required!

City Drive Time City Drive Time City Drive Time
NYC 1:48 Philadelphia 1:53 Harrisburg, PA 1:59
Toms River, NJ 2:19 Syracuse, NY 2:28 Albany, NY 2:58
New Haven, Ct 2:49 Baltimore, MD 3:14 Wash. DC 4:01
Providence, RI 4:24 Buffalo, NY 4:43 Boston, MA 4:48
Pittsburgh, PA 4:51

 

Destination: Fun

Ok, so you are headed out for a 3 day tech conference. That doesn’t mean you can’t have some fun too! We’ll fry your brain all day long with tons of great content that you can take back to the office and put to good use. But in the evenings, why not enjoy the 100,000 square foot indoor water park? TechBash is hosted at the brand new Kalahari Resort and Convention Center. Yeah, it’s a state of the art conference center and great hotel. But they have restaurants, a Spa, an arcade, indoor mini-golf, hiking and more. Oh, did I mention the 100,000 square foot indoor water park?

waterparkwaterpark2waterpark3

 

Is this a family event?

Yes and no. We know that other similar conferences have kids’ tracks and family content. Plus, there is the water park. While the venue is certainly family friendly, TechBash won’t have any family content in year one but it is part of our long term plan. Let’s get through one year with content for the “big kids” only. But if you want to bring your family, please do so! We are sure they will have fun!

Sponsorship Opportunities Available

We’d love to work with your company as a partner to help make TechBash 2016 even better. Check out our website and our prospectus for more info and then contact me to get things started.

Want to help out while you are at TechBash?

Yeah, we’ll need some help running this event. If you want to help out, sign up, there is a simple form on the bottom of the website.

The most important part: Registration

Registration is easy, there are two simple steps:

  1. Click here to purchase a conference ticket on EventBrite.
  2. Book a room at the Kalahari. Just call 1-855-356-9208 and mention TechBash to get the best rate.

Thanks for reading. I’ll post more information about TechBash soon.

I’ve been waiting for this phone for a long time. My previous phone was a Lumia 920 and I got it when that phone was pretty new. That phone is a bit dated now but still works well. I’ve always liked that 920 and the Windows 8.1 Phone OS. In this review, I won’t focus on the official specs of the Lumia 950. There are plenty of places you can look them up and other reviews that focus on the specifications. This review will be based mostly on my thoughts and impressions. My device is an unlocked Lumia 950 in black. I purchased it directly from Microsoft at the Store. I’m at AT&T customer but since I am off contract, I wanted to keep it that way. I’ll also include my thoughts on Windows 10 Mobile since that is installed on the 950.

Windows 10 Mobile

Coming from Windows Phone 8.1, Windows 10 Mobile is a big change but still familiar enough to make for a smooth transition. The new OS is far more polished and the UI is refreshed a lot in great ways. Since I did not participate in the Insider program, this is really my first look at the OS. I’m sure I will have more thoughts later. Here are some of my first thoughts.

I have always like the actions available to me by swiping down from the top if start. But that menu is much improved now with an expandable/collapsible set of features available. Settings is much improved. Searching settings is a great feature and makes it very easy to use.

wp_ss_20151126_0007wp_ss_20151126_0008

I’ve always been a fan of Cortana and she is working great on Windows 10. So far there are no new surprises with Cortana but I look forward to seeing how it integrates with Windows 10 Mobile. I did have some trouble setting up Quiet Hours. From the phone you can easily turn Quiet Hours on or off but no way to schedule them. But of course, I forgot that Cortana handles that for me!

Another nice feature of the OS is the ease of which you can set where files get stored. Configuring the use of a SD card is easier than ever. I guess I should get around to actually popping in an SD card.

wp_ss_20151126_0012

My only real issue with Windows 10 Mobile is that I don’t think it is done. I have a feeling they rushed this out the door. Is that a big problem? Not really. But often (in my first day) various settings screens would open and then close immediately. So it is a nuisance. But my assumption is that these items will be patched quickly. I don’t mind the minor inconvenience since, as stated, I have been waiting forever for this phone.

Continuum

wp_ss_20151126_0010One of Windows 10 Mobile’s most exciting feature is Continuum. It sounded really cool to me but I admit I was skeptical for two reasons. First, I was unsure how good the experience would be. And second, I’m not sure how useful it would be to me. Well of course I tried it out right away! I already have a ScreenBeam Mini 2. It was super easy to get my phone connected to that via the Continuum app. I also have a little Bluetooth keyboard that goes with my Dell Venue 8. For the mouse, I chose to use the phone as a touchpad. I figured this would give me an idea of usage while “traveling light”. I could always upgrade to a Microsoft Display Dock and better mouse and keyboard. My first thoughts on Continuum – it works really well! There was a slight lag when typing but that was expected with my setup. Basically, it really felt as if I was using a “regular” computer. I played with email and Word and a few other things. The experience was really good. Now, for the big question… will I ever use it again? So far the only answer I have is maybe. I certainly wouldn’t shy away from it. But since I have a lightweight Surface Pro 3, it is not often that I am without a great device to use. And why would I travel with a separate keyboard in my bag vs. my Surface?

Hello

Windows Hello is Microsoft’s new login mechanism. Since childhood I’ve dreamed up using a Retina Scan to log in to a bank vault or some secret location. Windows Hello seemed as close as I would get for a while. Unfortunately, this was a bit of a let down to me. It seems to work but it is just too awkward and slow. I have heard this works much better on other devices. Hello does recognize me but not all of the time. But mostly, it just seems strange holding the phone up to my face and waiting. If it could recognize me really fast at arms-length it would be awesome but that does not work. I’ll be fair and play with it more but I have a feeling this will be turned off on my phone soon.

Size and Weight

I really like the size of this device. I’m coming from a Lumia 920 and I expected the 950 to feel a lot bigger. But it doesn’t. It is bigger but it doesn’t really feel bigger so that is great. Part of that may be due to the weight – this phone is much lighter than my 920. Part of its lightweight nature is due to the material used for the back of the phone. I’ve read many reviews that claimed that the plastic back made the phone feel cheap. I couldn’t care less about that. I really think this is a non-issue. To me, the phone is lightweight – that is a big plus. Also, the back is removable and replaceable so I assume you can get a more expensive back for it if you are so inclined. I’m happy as is. Also, I find it funny that many reviewers suggest that the back material feels cheap and users won’t like it. But many users will get a case for their phone anyway. So why would they care? While the size of this device may not feel much bigger, I have a ton more screen real-estate. I can fit so many icons on the start screen. I am really loving that. For me, the size is great. I feel like the size combined with the resolution makes for a great user experience and fits a lot of information on screen.

Setup

wp_ss_20151126_0009Setup was basically pretty easy. I logged in with my Microsoft Account and I was given the option to copy my old phone’s apps and settings or start from scratch. I chose to copy. So it took a while to install all of my apps but that is to be expected. My start screen looked really funny at first because my Lumia 920 didn’t support as many tiles as the 950 does. I can fit a ton of tiles and it doesn’t look crowded. It looks really cool, I think. Organized and slick. After the initial setup process I spent some time arranging the start screen, configuring email and calendar accounts, and more. Really a very simple process. The only problem worth noting, in case it helps someone else prepare, was the need for a Nano SIM card. My old phone’s SIM card was not compatible with this device. So while at the mall I went to the AT&T store. As much as I dislike that store, it was pretty quick and easy. The staff quickly got me set up with a new SIM Card at no cost.

 

 

 

Screen

As stated earlier, I won’t get into actual specs. I’ll just tell you that this screen is beautiful. As important as the insides of the device are, the screen is what you see, what you use. Touch feels great. Details look sharp and the colors are crisp. The screen is bright. Of course, I haven’t had a chance to try out the 950 in a variety of locations, like the beach for example, but my first impressions are that the screen is beautiful.

Camera

The camera is probably the feature that I was most excited to try. I’ve been trying to read up on the features and capabilities as much as possible and I need to continue doing so. I really want to get the most out of this camera. I had heard good things about the camera’s ability to take low light shots. I took a few pictures inside with no flash and dim lighting. I really was shocked at how good the resulting images were. This is really impressive. I’m very impressed with Rich Camera. With this feature, the camera actually takes multiple pictures and allows the user to to adjust the images later. Wow… again I am really impressed. I definitely need to play around with the camera. I’m also excited about the Living Image feature that takes a bit of video before a picture. Sounds like you can use that to make really nice montages and slide shows.

Apps

Yeah, Windows 10 Mobile is short on apps. We know that already. However, the new mail, calendar and other default apps are really nice and much improved.

Other

Capture

This phone comes ready for 2 SIM Cards. I only have 1. I find it a bit annoying that the phone and text tiles each have a little “1” on them to indicate which SIM card they are for. But I keep seeing the “1” thinking I have 1 text message waiting for me. I’ll probably get used to that.

 

 

 

 

 

 

Speaking of 2s, the phone came with 2 USB-C cables. One that is USB-C to full size USB. Another that is USB-C with a power plug on the end. That was a small but added bonus. I love the idea of a removable battery. And of course, allowing for SD card expansion is a great thing.
selection of cases and back. My 920 had hardware buttons for “back”, “Home” and “Search”. The new phone does not. The 950 has software buttons for these actions. That is taking me a bit of time to get used to but I have a feeling that this is a better set up.

Summary

Well, this should be no surprise to anyone who knows me. I love this phone. Some may say that there are better phones out there. Certainly there is an issue with available apps for Windows 10 Mobile. But I’ve been “All In” with Microsoft stuff for a while now. I am holding out hope that the platform gets more popular and the apps come. The truth is, I’m not desperate for any apps (right now). Having a Windows based phone is great for me because it works and syncs well with my home pc, my Surface Pro 3, my usage of One Drive, OneNote, and now my new Band 2. If you have a Windows Phone already, I wouldn’t hesitate from getting this device.

I had a great time on Friday 3/20 presenting “End To End Development with Schwammy’s Favorite Patterns and Practices”. Thanks to everyone who came out and sat in a packed room for a full day. And even though we had a pretty large spring snow storm, I’m pretty sure everyone stuck around for the whole day. I hope you all made it home safely.

In this talk I covered a lot of content. If you need to follow up with me on any of these topics, feel free to contact me directly or comment on this post.

Thanks for the great feedback you all provided. The response was very positive. There were a few good suggestions and I’ll definitely be taking them into account when we plan a repeat of this presentation.

Here are the files I promised. I hope the solutions all work out for everyone. Please let me know if there are any problems.

By the way… one last tip… I used one of the VS Extensions that I talked about, VSCommands, to create the zip files for download. VS Commands has a feature allowing you to right click in Solution Explorer and Zip up the solution. It will automatically remove source code bindings, ignore bin directories, and more. Very cool.

Note that the sql scripts for the ELMAH database are in the solution in the App_Readme folder.

The other day I got an email from WordPress saying “Your site has updated to WordPress 4.1.1”. I probably should have paid attention to it. But I assumed everything was ok. Next time I’ll check.

Today I went to check something on my blog and found it down. 500 error! If you host a site at all, you know that panic feeling you get when that happens. My blog is hosted on Azure Web Sites which is pretty cool but still makes me nervous when there are problems because it’s not a regular server that I can just log into and poke around. Plus, I am no expert with php or WordPress. In the end I was able to figure out the problem without too much trouble. Here’s what I did…

I opened up FileZilla (my ftp client of choice), connected to my server and started poking around. On the Azure Portal you can easily find the ftp address and account name used to connect. Luckily I knew the password!

On the root there is a folder LogFiles. That seemed like a good place to start.

It contained a file named php_errors.log. Again, sounds promising!

I found a lot of errors since this had been going on for a few days! Here is what it said:

PHP Fatal error:  ‘break’ operator with non-constant operand is no longer supported in D:\home\site\wwwroot\wp-content\plugins\blogml-importer\XPath.class.php on line 3773

So it seemed pretty clear what the problem was. An installed plugin (blogml-importer) was crashing my blog! But I had no idea how to fix it. I searched the web for “wordpress plugin fatal error” and found a link with the info I needed.

To disable a plugin manually without access to the WordPress admin site, just ftp in, go to the plugins folder (wp-content/plugins/) and rename the blogml-importer folder. I did it and everything worked.

Lucky for me, blogml-importer is just a plugin I used to import my content when I moved from dasBlog to WordPress. So I don’t need that anymore anyway.

Crisis averted. If you are stuck, I hope this information helps you too.

Do you know what a Tuple is? Have you ever used a Tuple in C#? Have you heard of Tuples but assumed they were some complicated language feature? Tuples are very useful and very easy to use.

A Tuple is a very easy way to create objects that have multiple properties. Sure, creating classes is pretty easy too. But sometimes you just want to pass around a few pieces of information and not create a class just for that. And yes, I know you can use a struct instead. But both of those are very permanent. Do I really need to create a new Type in my project for something so simple? Here’s an example.

Today I was writing a method that returned some XML as string. The XML was going to be combined into a larger XML document. Sort of like this:

string xml = "<OuterNode><Section1>{0}</Section1></OuterNode>";
string inner = someService.GetXml();
string.Format(xml, inner);

Pretty simple right? But then I found out that I actually needed to get 2 portions of XML and they went into two different places:

string xml = “<OuterNode><Section1>{0}</Section1><Section2>{1}</Section2></OuterNoded>”; //simplified for the example

Sure there are lots of ways to do this:

  1. I could create a second method to return the second section of XML. Sure I could. But as much as I like single responsibility, the method I am using really is the right place to return both pieces of information. You’ll have to trust me on that :)
  2. I could create a class to hold both pieces of information like the one below. But, well, I am lazy. Plus, it just feels like a lot of overhead for this.
public class XmlHolder
{
    public string FirstPart {get; set;}
    public string SecondPart{ get;set;}
}

This is a use case where a Tuple can come in handy. A Tuple is a data structure that has a specific number of arguments, each of a specific Type and in a particular order. Please don’t be mislead by the word “structure”; a Tuple is a Class, not a Struct. Here is how you create a Tuple:

var firstTuple = Tuple.Create(xmlPartOne, xmlPartTwo); //Both of those arguments are strings.

Cool huh?

To get the data out:

var foo = firstTuple.Item1;
var bar = firstTuple.Item2;

OK, cool. But not super cool. “Item1”, “Item2”??? To me that seems sort of cheesy. But keep in mind, this is not a Dynamic Type object so you can’t name the properties. So I guess “Item1”, etc, will be ok.

Using the Create() method is cool. But what exactly does it create? Here is another way to write it that gives us some more insight:

Tuple<string, string> firstTuple = Tuple.Create(xmlPartOne, xmlPartTwo);

or

Tuple<string, string> firstTuple = new Tuple<string, string>(xmlPartOne, xmlPartTwo);

Now you can see what is really going on… Generics! I love Generics.

Do you have more than two items? That’s no problem:

var foo = Tuple.Create(string1, string2, string3, string4, string5); // assume these arguments are all strings please.

Got items of different types? Easy:

var foo = Tuple.Create(someString, someInt, someDecimal, somePersonObject, someThingElse);

That last one is the same as this:

Tuple<string, int, decimal, Person, SomeThingElse> firstTuple = Tuple.Create(someString, someInt, someDecimal, somePersonObject, someThingElse);

Easy right? And of course, thanks to Generics it is strongly typed.

These guys are really easy to use. Plus unlike an anonymous object, you can pass them around. Here I have a method that takes a Tuple as an argument.

public void DoSomething(Tuple<int, string, DateTime> input)
{
    int age = input.Item1;
    string name = input.Item2;
    DateTime hireDate = input.Item3;
}

The problem with the example above is that the developer who calls the method cant really tell what arguments the method really wants. It would probably be better to do this:

public void DoSomething(int age, string Name, DateTime hireDate)

So, Tuples are classes that should be used with some caution. Not because they are “bad” but they may not be the best kind of object to pass around because, while strongly typed, the properties aren’t “strongly named”. Certainly not a great choice for a public API. I think they should really be used sparingly. Certainly great for prototyping. And good for real applications too. But as a team lead, I wouldn’t want to see my team start using Tuples in place of regular classes all over the place!

Some more information:

Tuples were introduced in .Net 4.0.

Tuples are immutable. You can’t change the value once it is defined.

Items in the Tuple can be value or reference types.

Tuples are classes, not structs so they are on the heap, not the stack. That means they are garbage collected.

You can use Create() for Tuples with 1 item to 8:

  • Create(T1); // called a singleton
  • Create(T1, T2); // called a pair
  • Create(T1, T2, T3); //called a triple
  • Create(T1, T2, T3, T4); // called a quadruple
  • Create(T1, T2, T3, T4, T5); // called a quintuple
  • Create(T1, T2, T3, T4, T5, T6); // called a sextuple
  • Create(T1, T2, T3, T4, T5, T6, T7); // called a septuple
  • Create(T1, T2, T3, T4, T5, T6, T7, T8); // called an octuple
  • Plus you can pass another Tuple in as the 8th argument to make even larger Tuples!

Check them out, I hope you will enjoy using Tuples in your code.