Hey I would love to know what you think while reading my posts. Please comment!.

Typescript Interfaces and Optional Properties

I love TypeScript after working with it (on an enterprise system) for well over a year now. Using it with ReactJS makes things easier and very type safe. No more issues with case sensitivity Javascript errors, or accidentally assigning a string to a number. Or so I thought!

Recently, we came across an issue with the type safety on some of our interfaces. These were interfaces that included only optional properties within them.

e.g.

interface IInvoiceFilter {
    invoiceDate?: Date;
    invoiceNo?: number;
}

We would then use this interface for what ever we were doing, and using intellisense to see what the properties were on it. Then use it something like this;

const invoiceFilter: IInvoiceFilter = { invoiceNo: 1 };
let otherFilter: IInvoiceFilter = {};
otherFilter.invoiceNo = 1;

There would then be a method that would take the filter;

const filterInvoices = (invoiceFilter: IInvoiceFilter) => {
    // do something here with it
};

You would then call this with;

filterInvoices(invoiceFilter);

UmbracoApplicationBase Application shutdown. Details ConfigurationChange

UmbracoApplicationBase Application shutdown. Details ConfigurationChange

UmbracoApplicationBase Application shutdown. Details ConfigurationChange

UmbracoApplicationBase Application shutdown. Details ConfigurationChange

Wow! Has it been so long since my last blog post?! Seems to be! Well why not stick one up on Friday 13th! I have been exceptionally busy for the past year, with a really large project in work which has eaten up all development my time, then family life has taken up the rest.

One of the projects I have been working on recently in work involved using the latest version of Umbraco hosted on an Azure VM (Windows Server 2012 R2). The Umbraco installation is just a standard one, and there is nothing fancy within it. Just some datatypes, templates, views and some macros. The dynamic data of the site is loaded via a separate API on the same Azure VM.

My client was complaining that the site was slow to load, which I had just put down to it being a test site and the application pool recycling due to inactivity. However I then started to notice that it was exceptionally slow after creating/editing pages in the CMS. I had mentioned this to another developer in the office, and he had said he had a similar issue with another client’s installation, but when the site went live, it all sorted itself out.

Today though, I was speaking to another developer who manages another client using Umbraco on another Azure VM, and he was having a similar problem to me on a live site. So we decided to look deeper into this issue and found this nice little error in the Umbraco log file.

2017-01-13 09:52:11,148 [P5216/D2/T4] INFO  Umbraco.Core.UmbracoApplicationBase - Application shutdown. Details: ConfigurationChange

_shutDownMessage=IIS configuration change
HostingEnvironment initiated shutdown
HostingEnvironment caused shutdown

_shutDownStack=   at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   at System.Environment.get_StackTrace()
   at System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()
   at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand()
   at System.Web.Hosting.PipelineRuntime.StopProcessing()

Project.deps.json could not be found

Project.deps.json could not be found

Project.deps.json could not be found

Project.deps.json could not be found

So you are creating a new ASP.NET Core Web Application (.Net Framework) through visual studio, so select “New Project > Select Template > Name > Ok”, then select the Template you want to use. Then run your shiny new website.

BOOM! Build Error

Build Error

There are no errors in the Error List, no warnings and no messages? So you check the build ouput to find

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets(262,5): error : C:\Projects\My Project\error CS2001: Source file ‘C:\Projects\My Project\Project.deps.json’ could not be found.


AspNet VNext TSX Debugging

Following on from my recent post ReactJs with TypeScript in AspNet VNext, I have been playing about with .TSX + ReactJS more, and one of the first things I noticed was that I was unable to debug the JavaScript files in the browser.

This is down to the way in which Visual Studio + the tsconfig.json are generating the .js files which are linked to .js.map files.

From my previous post, we created a simple App.tsx file that simple output <h1>Hello World</h1>. Now if you investigate the generated .js file, you will see the following in the last two lines;

ReactDOM.render(React.createElement(MyApp, null), document.getElementById('appMountNode'));
//# sourceMappingURL=app.js.map

ReactJs with TypeScript in Asp.Net VNext

Now that the ASP.NET 5 Release Candidate 1 has been announced and released, now is a great time to start playing around with it. So why not start playing around with ReactJs using TypeScript at the same time!

Background

For those that are not in the know:

React

A library for building user interfaces.

It was developed by the facebook guys as they started to run into problems, with other JS frameworks, when building their Apps section. So they invented their own!

TypeScript

TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.

It was developed by Microsoft, more specifically I think it was Mads Kristensen and his team? I might be wrong!

Getting Started

To begin with, we want to create a new Project in Visual Studio 2015. I am using .Net Framework 4.6.1 and then selecting the ASP.Net Web Application. Then from the ASP.NET 5 Templates, I am going to select the Web Application. This will then create the new Asp.net 5 solution structure for you.


Changing the Password length in Asp.Net 5 Identity

A while ago I wrote a blog post regarding MVC 3 Password Length DataAnnotation in order to easily change the length of the password required to register for an account within your website.

This blog post is about how you can easily manage your password password strength in an Asp.Net vNext project (Asp.Net 5) when using the Microsoft.AspNet.Identity framework.

If you create a new Asp.Net 5 Web Application in Visual Studio 15 you will see that it is set up to use Microsoft.AspNet.Identity for handling user Authentication.

By default it will come with a RegisterViewModel that has the Password property and various DataAttributes

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

Similar to my MVC 3 Password Length DataAnnotation post, the length of the password is controlled from within the Model, so if you want to change this length then you will have to edit code.


My Top 10 Dad Jokes

I have a bit of a reputation for sharing bad dad jokes. So I thought I would compile a list of my top 10 for you to enjoy!

In reverse order

10.

A lot of people cry when they cut onions. The trick is to not form an emotional bond.

9.

Sometimes I use words I don’t understand so I can sound more Photosynthesis.

8.

I cut my finger chopping cheese, but I think that I may have grater problems.

7.

What would you catch if you had sex with Harry Potter? Genital Hogwarts.

6.

My pet mouse Elvis died last night. He was caught in a trap.


Handy Git command reference

Handy Git command reference

Handy Git command reference

Handy Git command reference

Sooooo like a lot of developers out there, you probably have moments where you completely forget what git command you need to use for the correct job. There are hundreds even thousands of websites out there all with the same information, so I thought I would write another!

This is primarily just for my own reference though, so I have everything in one place that I can easily find without hunting through my many document locations.


Me right now bug fixing


Sharing an Asp.Net Machine Key for Authentication

In a recent project that I have been working on, one of the requirements was that we use our client’s Machine Key so that we can authenticate user’s passwords if their users had to login directly into our system. This was mainly to handle a situation where the main website would go down then users could open up our system directly and login.

So the client would send us the user details, username/password/passwordsalt and then they supplied us with the Machine Key that they are using in their various environments. The encryption which was being used was the standard out of the box asp.net Membership encryption, so in order to encrypt the typed in password against what is in the database, i used the following code:

public string EncryptPassword(string password, string passwordSalt)
{

    byte[] bytePass = Encoding.Unicode.GetBytes(password);
    byte[] byteSalt = Convert.FromBase64String(passwordSalt);
    byte[] byteResult = new byte[byteSalt.Length + bytePass.Length];

    Buffer.BlockCopy(byteSalt, 0, byteResult, 0, byteSalt.Length);
    Buffer.BlockCopy(bytePass, 0, byteResult, byteSalt.Length, bytePass.Length);

    HashAlgorithm ha = HashAlgorithm.Create("SHA1");
    return Convert.ToBase64String(ha.ComputeHash(byteResult));

}

While testing in a c# app this worked great, however when I then ported the code over to vb.net (yes our system is partially in vb.net), the generated encrypted password no longer matched.


More posts...

Posts by Tags...

About Me

Tim James I'm Tim, a web applications developer from Glasgow, Scotland. Currently working for Kingfisher Systems Ltd, building bespoke systems within the Car Auction industry.

  • C#
  • VB.NET
  • ASP.NET
  • .NET MVC
  • Web API
  • Razor
  • HTML5
  • CSS3
  • jQuery
  • WCF
  • SQL
  • knockout.js
  • Angularjs
  • AJAX
  • APIs
  • SignalR
Why not follow me on twitter? Follow me on Twitter