Microsoft Ignite | The Tour : Sydney


As one of the premier venues on the Microsoft Ignite tour, Sydney Australia is set to be an amazing experience and DevExpress are proud to be a sponsor. Sydney has already laid on it’s best weather for the start of the week with perfect blue skies and warm 37°C days!

Come along and say a big G’Day to some of my European colleagues, DevExpress Technical Evangelist Don Wibier and John Martin. We will have fantastic swag to give away, as well as some live coding demos on the latest versions of all the DevExpress components and tools. It’s set to be a fun filled two days, if you’re going to be at the event, make sure you swing by our booth.

We look forward to seeing you there!

ignite_banner

When will I learn?


Finding the time is just one of the dilemmas when it comes to learning new software, talents or languages. I download new apps after reading the reviews and looking at the features list, but then it comes to a screaming halt. How do I actually use this product? Where do I find the best resources for learning it? When will I have the time to learn it?

A prime example of this was with Visual Studio 2019 and the .NET Core 2.1 WebAPI template. You would think as a seasoned developer, producer of many WebAPI’s, that this would be a simple process. But it turned into a demotivating way to spend New Years Eve. Previously I have harnessed the Microsoft .NET Identity Framework to build authentication systems to sit behind a mobile app. The project templates provided some boiler plate UI for creating and maintaining users. Not this time. There were some better API examples, but very little documentation in the project and when you start following URL’s it quickly became a rabbit warren. The frustration kicks in when you realise you have not achieved 1/10th of what you wanted after hours in front of the keyboard.

It’s not limited to development frameworks and the like though. I dabble in Photoshop, but find it a struggle to locate resources that are succinct yet meaty enough to teach me the things I want to learn about usage. I don’t want to spend hours watching home baked YouTube videos filled with non-professional speakers filling their gaps with “erm” and “uh”. I tried to watch one just the other day and his wife called in the middle of the recording to which he spent a minute trying to explain why that should not have happened.

Many apps can be downloaded straight to our OS from an AppStore of some kind, developers websites contain sparse detail on usage, product manuals are a thing of the past. Am I the only one who sees a problem here?

Maybe the issue is my learning style? Just show me a handful of techniques and let me at it, then I want to come back with more questions. Maybe it’s because modern applications have so much more to offer that traditional CBT no longer fits?

I’m thinking of dedicated a set amount of time each week just to improving my skills with key software that I work with, then a period of time to increase my knowledge on the new frameworks and technologies. Ah, then I have to set aside some more time for the foreign languages I want to learn. Still begs my original question…. *When* will I learn?

Please drop me a comment on what works best for you and why.

2019 The Road Ahead


Happy New Year!

2019 The year ahead

With 2019 just days away, a lot of people use this time to reflect on the year that was, and the year that is being ushered in.

What should we look forward to next year? From a technology perspective things keep moving at a rapid pace. It seems no sooner have we started to embrace a new framework  something else is being touted as the new thing. What mobile framework is the best to focus on?  Should we be looking at Docker? What about .NET Core?

Personally, I think it’s wise to at least stay informed on what’s happening. Reality for most developers; it’s difficult to look at implementing new things into legacy projects, it’s time consuming and somewhat daunting to try and keep up to date. I’d be keen to hear how you stay on top of the shifting sands.

What about tools? Did you add anything new to the toolbox? are you leaving any particular tool or service behind? For me the following are definitely coming through to next year:

There are some other everyday tools that will stay around, but that list contains some of the coolest applications I use on a day to day basis.

Interestingly, I’m leaving behind

  • Trello
  • Jira
  • Confluence

One thing I’ve noticed as the year progressed, I am spending more and more time inside Visual Studio Code, and less in Xcode and Visual Studio. Which I think shows how much closer the technologies are becoming. I no longer have to switch to my Windows VM to spin up an Azure Web Service or edit a .NET application.

By far my favourite tooling for 2019 has been the Ionic Framework, coupled with the DevExtreme components has made building multi platform mobile applications a cinch.

Closing out 2018, I conquered a number of personal goals, including my first MMA Cage Fight. A big shout out to Jason @ Gamebred Academy for hosting Brisbane’s Series 3 – Wimp 2 Warrior challenge, thank you to Richie Cranny for making it all possible. It was an amazing experience.



2019…

Instead of setting ‘resolutions’ for 2019, I prefer to set some written goals. Moving into January I have committed to writing more blogs and producing more video content. Mainly just sharing the highs and lows of technology and tools that I use each day, some of the quirks I uncover, as well as cool uses of the DevExpress components. If I can save someone hours of scouring StackOverflow or auto generated documentation then it will be a good year.

Wishing you all a safe and prosperous New Year.

 

DevExpress Sydney Meetup – Dec 1


Powerhouse MuseumThis year our DevExpress Sydney Meetup is going to be held at the Powerhouse Museum on December 1. It’s a great time to share your thoughts (good or bad), grab a beer and some snacks and let the team show you through some of the great new features in v17.2. There are limited seats so be sure to reserve your spot by registering here.

I’ve already had some people request Meetups in other states, but we need numbers, so register your interest if you’re outside Sydney by sending a quick email to clientservices@devexpress.com – the more people that show an interest, the more likely I can make it happen.

DevExpress v17.2 will be released over the coming weeks and we will be presenting the What’s New webinars, but I’d prefer to see you in person at the Powerhouse 🙂

 

Closure; the missing piece


White jigsaw puzzleWhile doing a code review this week, the developer asked me if we could refactor some TypeScript. Basically take some repetitive client side code, pop it into a new file and make it easier to implement elsewhere.  The project is using the powerful DevExpress ASPxGridView control in a lot of places (multiple controls on a page and multiple pages) and in batch edit mode. The users wanted the ‘Save / Cancel’ panel to be at the top of the screen instead of the default location in the grid footer. Simple enough process, we can create a user control to handle a couple of nicely themed ASPxButtons, link to a helper class for the common work on the grid and we should be done.

First we take a look at the original markup, the client side client event is being wired to a TypeScript method


Inside the TypeScript file, the method was doing some checks and calling another method on the grid control, gvTemplates.UpdateEdit(); This is where the repetition was, each grid had its own ‘save’ method.

helper.saveGrid = function ( ) {
        gvTemplates.UpdateEdit();
}

In order to optimise the code, we have to pass in the name of the grid being edited, then find the grid in the DOM and execute the method on it.

The first part was to update the markup to call to the helper class


The key difference here is the introduction of the brackets into the assignment, we are no longer just pointing the click event to our TypeScript method, but actually executing it, which is bad. This is where the closure comes in. For more information about closures I suggest you read the following article from Julian Bucknall.

For our needs, the code should look something like this

helper.saveGrid = function (gridId: string) {
        return function (s, e) {
            var grid: ASPxClientGridView = ASPxClientControl.GetControlCollection().GetByName(gridId);
               grid.UpdateEdit();
      }
}

The ‘gridId’ parameter is going to contain the grid’s client side ID, the saveGrid() method then returns a function that is passed back to the click event handler on the button. There are a few cool things going on with the new code. Firstly (and this is where you can come unstuck very quickly) is the use of the parameter that is passed in. The inner function can use the value from the outer function. The second thing to note is the nice helper class provided by DevExpress to get access to the control, so you don’t need to go searching through the DOM. Code cleaned, duplication removed and a much nicer way to handle calls from multiple controls and/or pages.

While this serves as a very quick tutorial on being able to call common methods, I really want to highlight a) the power of the closure, b) the frustration they can cause to JavaScript / TypeScript beginners.

For more detailed information on closures and best practices please see these fantastic articles:

Caught out with closures

The module pattern

Ode to 2017


2017 Just Ahead Green Road Sign Against Clouds

A year so filled with ups and downs, tears and laughter too, 2016 you’ve tried and tested me, I’m glad you’re almost through.

2017, you’re nearly here, but yet, I claim you now, to be the year of goals and dreams, the fattened calf or cow.

The year of reconciliation, be it race, religion, creed, the year we learn to give, and put away our greed.

Let’s learn religious tolerance, offer all a helping hand, let’s share the blessings of our land, so rich with golden sands.

Families, start afresh, put yesterday aside, our forefathers never wanted this, they’d be turning in their grave.

If each of us could do one thing, different to the norm, pay it forward, help someone, a new world could be born.

To those I’ve hurt or wronged, I ask, your forgiveness and you grace. My heart just breaks for all of the human race.

2017.  The year we take back.

Life. Love. Dream. Achieve. Believe.

Go forth with love.

Approaching Angular 2 from a WebForms perspective


hires-small

Omelettes anyone?

Sometimes we spend so long working in a technology it is a difficult to make a switch. If it ain’t broke, don’t fix it, right!?  The problem is, the world moves on. Using server side technologies like ASP.NET WebForms is something I still love to do, add a few DevExpress components onto a page, set the properties, bind some data and boom, almost no code and I have a working web application. There are many debates scattered on the internet about WebForms been deprecated, that they are evil, I simply disagree. Now, if you are wanting to target a wider range of web servers and operating systems, use .Net Core, have light weight UI then you would start looking at some of the popular frameworks like Angular 2. Herein lies the dilemma, how does someone with many years experience as a WinForms and WebForms developer make the jump to a client side driven application? I’m pleased you asked…

Julian and I are presenting a free webinar on this exact topic on November 3. Specifically we will take an existing WebForms application and create an Angular 2 version using the DevExtreme Web controls.

The goal is to show how a C# (or VB) developer with a background in WebForms can get started in the client side world. As with most of my presentations lately, we will also be using TypeScript.

Take part in the fun by Registering here,  seats are limited.