Australia-no-longer-feeling-lucky-large.png

Google Search – Australia no longer “Feeling Lucky”

Aussies using Google have noticed they are caught in the middle of a recent conflict between Google, and the Australian Government over the newly proposed News Media Bargaining Code.   Aussie have...
GitHub-as-a-CMS-small.png

Pull Request Approved – Using GitHub as a CMS

Video: Is GitHub a good choice for a CMS? Content Management Systems like WordPress, are often a popular choice when it comes to managing content, but have you ever considered...
cloud9-banner-small.jpg

I am on Cloud 9 – SSW has migrated to Dynamics 365 Sales cloud version 9

After months of planning, data trimming and delays (not helped by COVID-19!), I am happy to say that SSW has finally migrated our Dynamics from on-premises to the cloud. It...
connecting-through-video_small_v2.jpg

Connecting Through Video – How To Engage Customers

Last month I talked about how easy it is to work from home, but to work from home effectively is hard. Likewise, making a video can be easy, but *really...

Hardcoding. Have your cake and eat it

2020-06-01CODING ·SOLID Principles One of the core principles of software that is drummed into new developers is 'Don't Hardcode anything'. What if I told you that it's OK to hardcode...
wfh-romance-or-drama-banner-670x209-1.jpg

Working from home – romance or drama?

Wow. Hasn’t this been the world’s largest ‘working from home’ experiment? Developers working remotely or from home were quite common in our software industry even before the Covid-19 lockdown. At SSW, I’ve always...
blazor-downloading-appsettings.png

Using AppSettings in Blazor WebAssembly

While client-side Blazor technically isn't yet stable, I love working with it more than other web front-end technologies. One significant hiccup I found while developing Cognitive Studio is having environment-sensitive...
outlook-1024x239-1.jpg

Coronavirus – What we are doing at SSW

This weekend I saw Coogee Beach packed to the rafters with parties. I also saw that The Oaks Hotel in Neutral Bay and The Coogee Bay Hotel were full of...
Technology-in-a-pandamic-banner.png

Technology in a Pandemic – Helping Control Coronavirus

SSW China have been working closely with the District Government in China to develop an application that will help reduce the spread of Coronavirus. Split into two smaller apps, it...
efcore-logging-query-tag.png

EF Core Query Tags and Alternatives

When doing a performance review on client applications (and my friend's apps), I often see issues related to EF Core and most devs don't seem to notice them until they...
image-3.png

Upgrade the Angular .NET Core SPA Template to Angular 9

Angular 9 has just been released and includes a number of major improvements. Be sure to check the official announcement to learn more. If like me you build single page...
custom-form-recognizer-setup-script.png

Getting started with Form Recognizer (preview)

When I first heard about Form Recognizer, I thought to myself, "Wow, there are so many forms in the real world that needs to be parsed and digitilized!". Once v2...
Introducing-SSWPeople_banner-1024x320-1.jpg

Introducing SSW People!

About a year ago, during SSW’s annual retreat in Brisbane, we started to imagine what the world would look like if the SSW Rules site was easier to use.  Therefore,...
Figure-01-2.png

Clean Architecture with .NET Core: Getting Started

Over the past two years, I’ve travelled the world teaching programmers how to build enterprise applications using Clean Architecture with .NET Core. I started by providing a sample solution using...
Adams-2019-Year-in-Review-Updated-1024x319-1.png

Fires + Adam’s 2019 in Review

2019 ended in uncertainty for a lot of people across Australia. Our bush fire season started a lot earlier than usual, and this year the fires are insanely bigger, and...
photo-1577805996203-4b5eed5ba295.jpg

Retrospective: 2019

Inspired by my friend's retrospective blog post, I have also decided to make a retrospective. For me, a retro isn't just about looking at the past and fixing old mistakes,...
AdamsBlog-8TipsToStrenghthenYourDevOps-1024x320-1.jpg

8 Tips to Strengthen Your DevOps (Project KNOWnoise)

[embedded content].NET, NgRx and Angular – How We Developed ‘KNOWnoise’ with Hutchison Weller At SSW each year we are lucky to deliver a lot of cool projects. I want to...
ml-net-model-builder-01.png

Interview – Machine Learning that's ACTUALLY easy with Richard Campbell

Do you want to try machine learning, but don't want to invest too much time learning a new programming language or some other complicated API or complicated online tools? Richard...
Newsletter-NDCSydney2019-1.jpg

SSW had fun at NDC – gotta catch ’em all!

The NDC conference gets better and better every year. I look forward to it, and the SSW devs say it’s awesome. It’s located at the Hilton in Sydney’s CBD, and...
blazor-github-rocket-hero.jpg

Publish client-side Blazor to GitHub pages

Lately, I got fascinated by client-side Blazor, as I can build and host a .NET Core application with $0 cost! This is because Blazor only needs to be hosted somewhere...

I like big bots and I cannot lie… 5 simple ways bots should be answering questions for your business

Bots used to be very expensive to build. Now with Microsoft and Google offering nice bot development platforms, businesses are building bots in days. At SSW we have built bots...
ml-simplified-user-group.jpg

Simplified Machine Learning for Developers with ML.NET

Recently I've been on a tour around Australia presenting about how .NET developers can start with their Machine Learning story in minutes. I presented at the SSW User Groups (Gold...

NDC Oslo 2019 Drones & AI – What's all the buzz about ?

Drones and AI are changing our world.In this session we will look at some of the real world solutions utilising these emerging technologies, you will get an understanding of the...
serilog-dotnetcore3-appsettings-properties.jpg

ASP.NET Core 3.0 + Serilog

UPDATED TO .NET Core 3.x I have been a great fan of Serilog and Seq for over 2 years and I delivered great value to many of my clients. After...

Containers – The secret to shipping cloud workloads (Slide deck)

markus-spiske-1288375-unsplash-min.jpg

Simple Machine Learning classification with ML.NET (custom code without Model Builder)

TL;DR; check my GitHub project for bank transaction classification. https://github.com/jernejk/MLSample.SimpleTransactionTagging UPDATE: If you are looking to learn Machine Learning with minimum code and effort, check out Simplified Machine Learning for...
InDroRobotics.jpg

AI on Drones – Case Study Overview

It is a great time to be a technologist. I am spending lots of my time at the moment thinking about drones, AI & IOT, about where these technologies intersect,...
azure-pipelines-labs.jpg

Azure DevOps Pipelines Workshop & Demo Scripts

I recently ran a hands-on workshop about how to build Azure Pipelines for ‘build’ and ‘release’.Pipelines are great as the allow you to automate your builds and deployments so you...

Understanding the Enterprise Bot Template

This is my version of the how bots work doco page, customised to explain the Enterprise Bot Template. The reason that I have done my own version is that for...

Enterprise Bot Workshop Agenda (draft)

This is a draft agenda for the bot workshops that Valeriia and I run with our customers. I intend to flesh this out and improve it as we run more...

Lessons from a successful project

2019-03-08PERSONAL ·Project Lessons Success Lessons learnt after recently completing a successful projectA colleague and I recently finished a short 3-week project with a client, the result of which is one...
GetHashCode_menu.png

GetHashCode() the easy way

2019-03-06CODING ·c# GetHashCode VS2017 VS2019 .Net Remembering the most appropriate way to calculate a hashcode was always difficult. But not anymoretl;dr Let Visual Studio generate your overrides for Equals() and...

New Jekyll Blog on Azure

I’ve left WordPress. Finally. WordPress isn’t bad. In fact for most people I think WordPress or Medium are probably the right choice - but for about 18 months I’ve wanted...
b2dd756b512561ceaeefe9ff53e18261

Real-time face recognition with Microsoft Cognitive Services

TL;DR; check my GitHub project for bank transaction classification. https://github.com/jernejk/MLSample.SimpleTransactionTagging UPDATE: If you are looking to learn Machine Learning with minimum code and effort, check out Simplified Jernej Kavka (JK)

New years goals

I've never been one to set myself new years resolutions, not for any particular reason, I just don't. However, last year I set myself several goals and/or challenges.I’ve never been...

NDC Sydney 2018 Bots – the Next UI Revolution

Bots are the new UI frontier. Siri, Google Assistant and Alexa started the trend, but no-UI is the future of UI. Users are going to expect to be able to...
image.png

Building Single Page Applications on ASP.NET Core 2.2

The recently released ASP.NET Core 2.2 includes many improvements such as updated SPA templates. The templates can be used to build single page apps with Angular 6 + Angular CLI...
Screenshot_2018-09-02-Vorlon-js.png

Remote web debugging with Vorlon

In this post we'll cover how to debug applications running in browser and/or devices that don't have debugging abilities. We'll manipulate DOM tree, see console output and more. This post...

SignalR – Why? Because its easy

2018-08-21CODING ·angular signalr realtime asp-net-core SignalR has been around for a few years now (since 2013), offering real-time notifications to our .Net applications.SignalR has been around for a few years...
Figure-1.png

Building Single Page Applications on ASP.NET Core 2.1 with Angular 6 – Part 3: Implementing Open API

This is the third in a series of posts on Building Single Page Applications with ASP.NET Core 2.1 and Angular 6. The previous post provided instructions to upgrade to the...
Figure-1.png

Building Single Page Applications on ASP.NET Core 2.1 with Angular 6 – Part 2: Upgrading Bootstrap

This is the second in a series of posts on building Single Page Applications with ASP.NET Core 2.1 and Angular 6. The previous post covered numerous getting started topics such...
figure-1-2.png

Building Single Page Applications on ASP.NET Core 2.1 with Angular 6 – Part 1: Getting Started

This is the first in a new series of posts on building Single Page Applications with ASP.NET Core 2.1 and Angular 6. There have been major improvements to both frameworks,...

RxJS refactor: BehaviourSubjects

2018-06-03CODING ·angular rxjs behavioursubject Using RxJS BehaviourSubjects to tidy up our code and remove tight coupling between the Template and the component, whilst also providing hooks to trigger data updates.In...
2018-06-02_17-21-44-min.jpg

Handling EF Core migrations in a team

Entity Framework Core has a good migration story for the Database, however it's not perfect, especially in a large team where DB schema changes are frequent. All migrations are increamental...

Angular6 Runtime environment Variables

2018-05-31CODING ·angular environment-variables Setting environment variables in your Angular application is pretty straight forward. But, what about when you want to set those variables at runtime depending on the environment...

Ng directive Thought Experiment

ngLet directive to resolve an async observable binding without having to use ngIf to hide contentNot long after publishing my recent post on minimising Async bindings in Angular by using...

Angular: arrrgh… too many async bindings

2018-05-01CODING ·angular rxjs async Redundant async bindings will trigger excess invocations of your observable. This simple technique, lets you remove those excess subscriptionsIn my previous post I came across a...
angular_seq.jpg

How to get Angular logs to Seq

The Angular applications are starting to become and more complicated with more layers on the client side then ever before. This means we should treat client-side applications similarly as back-end...
macbook-606763_1920-min.jpg

Remote debugging on Android and iOS devices

Every year the market share of mobile devices is growing, which means that testing on a mobile device is becoming increasingly more important. While in easy cases we can open...

RxJS: Using CombineLatest() + StartWith() to remove code duplication

2018-03-26CODING ·angular rxjs Using CombineLatest and StartWith (and DebounceTime) RxJS operators to remove code complexity and duplication when fetching paged search results05 June 2018 Update: Follow up post with further...
blur-bottle-chemistry-248152-min.jpg

.NET Core complex EF Core unit testing

When writing unit tests for EF Core we can use InMemoryDatabase so that we don't have to create mock repositories. But sometimes we need to test functionalities that are not...
cropped-jason.jpg

SPA & ASP.NET Core – Part 2: Upgrading to Angular 5

This is the second in a series of posts about building Single Page Applications with ASP.NET Core 2.0. In this post, I’ll show you how to upgrade to Angular 5....
180117figure1.png

SPA & ASP.NET Core – Part 1: Create a SPA

This is the first in a series of posts about building Single Page Applications with ASP.NET Core. As a developer, keeping up with the latest technologies is not always easy!...

The 5 Technologies that Will Change Everything in the Next Decade

Here’s my take on the main technology areas that will make a massive difference to our lives in the next decade. Artificial Intelligence This is a huge one and encompasses...
cropped-jason.jpg

Successfully Passing Microsoft Exams

Microsoft offers a large selection of professional certifications and exams focused on their core technologies.  Often I have encountered developers who hold the opinion that these exams are not useful since they learn a lot more by using...

NDC Sydney 2017 – The Story of Azure with Scott Allen

cropped-jason.jpg

The Importance of Code Reviews

Code reviews, also known as peer reviews or code walkthroughs, are an effective way of identifying defects and sharing knowledge. A code review takes place when a programmer engages a...

Microsoft Azure Service Fabric with Daniel Toomey

The Sunk Cost Fallacy

The sunk cost fallacy is in action every time you: Sit through a long boring movie even if you decided after the first half an hour that is was terrible...

How to Delegate Effectively (Orders and Enrolment)

There are 2 ways that you can allocate work. You can give orders, or you can enrol people. Orders: This is most people’s default way of delegating work. To do...

Power BI – The Six Reports Every Consultancy Should Have

I’ve been at SSW,  a medium sized custom software consultancy, for over 10 years, and in that time I’ve asked for a number of SQL Reporting Services reports to be...

Seven Tips to Being a Great Product Owner

Every software product in development has a Product Owner who is in charge of supplying the requirements, and it is often misunderstood how important this role is. You can have...

SSW Data Onion – Helping you Simplify your Data Layer

At SSW we build software for a large range of clients, from start ups to massive enterprises and even our own internal projects. We care that the software we build...

What’s new in Visual Studio 2015 and ALM 2015

I’m off to Europe for the Norwegian Developers Conference in Oslo and the Xamarin Hack Day in Slovenia. Of course I’ll be talking about Visual Studio 2015 and all things...

The Agile Olympics – it’ll be Scrumtacular

It’s no secret that I love Scrum. I’m a Scrum.org certified trainer and delight in teaching courses across the country. We follow Scrum at SSW – not just the developers,...

Getting 96% Code Reuse with Xamarin Forms

UPDATE: See my interview with Miguel de Icaza on SSW TV We’re putting more and more business logic in our pockets these days and with our latest project we’ve crammed...