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.

DDD Perth: Lessons learnt


MapDDD Perth was held last weekend in, you guessed it Perth, a sleepy little city in Western Australia. It still makes me smile when sharing with overseas friends that they don’t quite understand the size of our beautiful country.
It’s a 45 hour drive, or a 5 hour flight from Brisbane to Perth. The flight is relatively short in comparison to my travels to USA, UK, Europe or Russia, but still a little longer than than travelling to New Zealand.

The conference was amazing, you only have to check out the twitter feed or the DDD Perth Flickr to see what went down, but there were some important lessons to be learnt.

Double check all numbers before transferring money

As sponsor for the after party, I had to transfer funds to ‘My Place Perth‘ (great place to visit by the way, especially on Karaoke night eh Lana!) since the Heritage Bank app does not allow you add new payee’s (for what reason I will never understand), the browser had to be used, navigating a bank web site on an iPhone 6 Plus is not the easiest thing to do. Attempt #1 – add all information, wait for SMS from bank to finalise the transaction, go to messages screen to get the conformation number, switch back to web browser and catch the ‘back’ button, therefore wiping out all data added! Attempt #2 – add all information, again wait for SMS from bank, carefully swap between message app and browser and enter code. All this time having a friend read back the account number and BSB to send to from a pdf invoice received on email. Celebrate the small victory of getting this far, then email a copy of the receipt to venue. Happy days! though short lived!  The owner of My Place gently advised that when she had checked the receipt it was apparent I had entered a 6 instead of 5 in the account number! GAH! So in order to keep the peace, I paid the invoice again, this time via my card. It was not a small amount, and then I had to go chasing the banks to see where my original payment had gone, however, that had to be a job for Monday since banks (for some reason) don’t work Saturday nights. After a number of calls on Monday, I was quietly assured the money will bounce back to my account sometime in the week.

Don’t leave things in your hotel room

The morning after a big party, my brain was not yet firing on all cylinders, 6am and time to get ready to head to the airport. I remember so vividly putting my Bose QC20 headphones (the only noise cancelling headphone I recommend for long flights) on the back of the chair, then noticing they had fallen off, thinking to myself “don’t forget to pick those up”.  I arrived at the airport with that niggling feeling, you know, the one where you think you have forgotten something. First sign of a bad day in progress was the ‘Priority Check-In’ taking longer than normal check-in and bag drop, this is not a usual thing, in fact the service provided by Virgin Australia is the main reason I continue to fly with them on as many trips as I can. Finally, I checked my bag and headed to the Virgin Australia lounge looking forward to some breakfast before the long flight home (which was actually shorter than the one over, but seemingly longer because I had to add 2 hours back on the clock). Lounge closed! WTF, after a quick tweet, Virgin Australia confirmed – no lounge on weekends in Perth! Okay, off to the coffee shop for a sandwich. As I sat wondering why I had that feeling, it struck me, NO, I DIDN’T!? but of course I did, the headphones were still sitting under the chair in the hotel room. I remembered I had just received an email with the settlement account from them, so I replied straight to that advising exactly what had happened and where they were. Boarded the plane and headed home. Monday, nothing from the hotel, so Tuesday morning I rang, a brief chat to house keeping explaining the whole story and I was promised a call back. A short 15 minutes later I got the promised call. “Sorry Mr Usher, we checked and there is no sign of your headphones”.  Oh well, it’s my dumb mistake anyway, but I don’t understand why they were not found. In the meantime a survey email came across my desk from AccorHotels and I took the time to share my thoughts with the COO of the group.  Approximately 30 minutes after my first call from the hotel, a lovely lady named Heather, Housekeeping Manager, called and advised my headphones had been located, yay! I’m not going to go into details here, but in short they ‘turned up’. I received an apology for the late reply to my Sunday email, and to the time it had taken to find them, I also received an email from the operations manager in Perth again apologising and confirming a policy review, hmm. My faith in AccorHotels restored, and my trusty Bose QC’s making the journey (albeit alone) back to sunny Queensland.

Don’t use the phrase ‘guy’ when you meant ‘guys & gals’

Cq1AIj7UAAApeOi

Before the conference I had sent a tweet to a couple of high profile people, namely Pip Marlow – Microsoft Australia MD, and Richard Branson (wonder if we can get that Lounge policy changed?), in support of women in tech, I am a strong advocate that more women should be involved and find it too dominated by men! After being heralded in the opening notes for my push (thank you Pip for your feedback, it’s a shame Mr Branson didn’t weigh in on the subject), I made the faux pas of using the singular, masculine phrase ‘guy’ during my talk. Thanks to Michelle for pointing that out publicly!

T1

A big weekend, well done to Rob Moore, Jake Ginnivan and the team for pulling everything and everyone together. I met some fantastic people, made some great new friends and some important lessons learnt, but all’s well that ends well.