Designing a Free Online Learning Curriculum


Skyrocketing university tuition and pricy unaccredited boot camps aren’t helping to bring socioeconomic diversity to the field of UX. That’s why I’ve compiled a list of completely free learning resources from top companies and universities such as University of Michigan, Georgia Institute of Technology, Facebook, University of California San Diego, Google, M.I.T, University of Minnesota and more.

Picture from Byronbaymanor

The field of user experience has gained significant popularity in recent years. While companies like FreeCodeCamp and 42 are offering free options for people to learn how to code, learning UX doesn’t seem to have the same support network for self-motivated and driven individuals.

I often encounter discussions on UX forums and (sometimes heated) debates on UX education accessibility on my LinkedIn feed, with people asking how to get a quality education in this space if one does not have the funds for tuition. People looking to break into the field professionally often contemplate going to school for a UX related degree like Human Computer Interaction, Interaction Design, Psychology, or even taking (an often times unaccredited and pricy) boot camp. After reading an article by David Venturi on how he created his own affordable Data Science Master’s program using online resources through platforms such as EdX, Coursera and Udacity to gain access to material from world class institutions such as Harvard, Stanford, M.I.T and Johns Hopkins University, I was inspired to create a similar framework for UX design.

I’ve curated this list of online courses and resources in hopes of helping people learn about human centred design for free and hopefully bring more socioeconomic diversity to the sector as a whole. While online and open source learning is by no means a replacement for mentorship and real world experience, these resources will hopefully give any aspiring UX professional an in-depth foundational education and help cultivate new skills. I’ve scoured the internet and compiled a list of interactive, engaging and top reviewed classes and material. Lifelong learning is a mind-set critical to any user experience professional and whether you are new to UX or are currently working in the field and looking to brush up your skills, I hope this list will be of value.

Using course ratings and reviews from Class Central as well as word of mouth feedback from senior UX practitioners and various industry community members in my network, I selected the best material from world class educational institutions and companies. I’ve also compiled a short list of reading materials, podcast resources and online UX group spaces to go with this online curriculum.

*Although some of the programs featured on this list do come with a price tag, I made sure to only feature courses in which you can apply for fast financial assistance and receive the course and credential for free, or audit all course material without having to pay.

“Anyone who stops learning is old, whether at twenty or eighty. Anyone who keeps learning stays young.”
― Henry Ford

Posted in Business Metrics, Business Model, Education and Training, Integration, Uncategorized | Leave a comment

Datalist for input text in Angular


Using datalist with not get you what you wish in this case.. here is the code that partially works. After selecting any element the dropdown will not show as it was showing before.

try using select with option. This link can help you more DataList in Angular

html file

<input list="id-car" [(ngModel)]="selectedCar" 
value="{{selectedCarObj.model}} - {{selectedCarObj.make}}"
<datalist id="id-car">
  <option *ngFor="let car of cars" [value]="car.make">{{car.make}} - {{car.model}}</option>

{{selectedCarObj.model}} - {{selectedCarObj.make}}

typescript file

import { Component } from '@angular/core';

  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
export class AppComponent  {
  cars = [{
    make: 'Ford',
    model: 'GTX',
    color: 'green'
  }, {
    make: 'Ferarri',
    model: 'Enzo',
    color: 'red'
  }, {
    make: 'VW',
    model: 'Amarok',
    color: 'white'

  selectedCar = "";

  selectedCarObj = {};

  onChange = () => {
    this.selectedCarObj => c  .make==this.selectedCar);
Posted in ASP.NET MVC, Education and Training, Integration, Knowledge, Problem solving, Programming, Uncategorized | Leave a comment

3 ways to communicate between Angular components


How to communicate between components? This is the topic I’ve seen many new Angular developers to struggle with. I will show you the three most common approaches, with examples that fits different use cases.

There is also the “redux way” which I could cover in another article in the future.

Imagine the use case that you have the sidebar in your application. Sidebar is either open or closed. You have the side-bar component and then you have component (or multiple components) that can open/close it or ask for its state.

I will describe three ways of implementing this behaviour

  1. Passing the reference of one component to another
  2. Communication through parent component
  3. Communication through Service

Each one of these examples has the demo application with code inspections on StackBlitz and github repository.

1. Passing the reference of one component to another

This solution should be used when components have dependency between them. For example dropdown, and dropdown toggle. They usually can’t exist without each other.

Github repository

We will create the side-bar-toggle component which will have the side-bar component as input and by clicking on the toggle button we will open/close the side-bar component.

2. Communication through parent component

Can be used when it’s easy to control shared state between components through their parent component and you don’t feel like you want to create new service or create some boilerplate code, because of one variable.

Github repository

Implementation of this approach is almost the same as the previous one, however side-bar-toggle doesn’t receive side-bar component. Instead parent component holds sideBarIsOpened property which is passed to the side-bar component.

3. Communication through service

Finally this option is useful and should be used when you have component that is controlled or its state is asked from multiple instances.

Github Repository

Now we have multiple places across the application that will need to access our side-bar component. Let’s see how we do it.

We will now create side-bar.service.ts so we will have:

  • side-bar.service.ts
  • side-bar.component.ts
  • side-bar.component.html

Side bar services will have toggle method and change event so every component that will inject this service can be notified that panel was opened or can toggle it.

In this example neither side-bar component or side-bar-toggle component has input parameters, because they communicate through service.

Posted in ASP.NET MVC, C#, Knowledge, Problem solving, Programming, Uncategorized | Leave a comment

Made in China 2025


Posted in Business Metrics, Business Model, Knowledge, Problem solving, Uncategorized | Leave a comment

Highcharts case study


Editor’s Choice


Fitbit dashboard allows users to see data such as the number of steps walked, heart rate, quality of sleep, steps …


ESPN is a renowned U.S sports based global cable and satellite television channel. This is another excellent and useful example …

USA Spending is the publicly accessible, searchable website mandated by the Federal Funding Accountability and Transparency Act of 2006. It was …

CBS Sports

CBS Sports is the sports division of the American television network CBS. CBS Sports uses data visualization to help its …

Government of Canada

The Canadian Institutes of Health Research (CIHR) is Canada’s federal funding agency for health research. The agency regularly uses data …


The International Renewable Energy Agency (IRENA) is using a dashboard to display information about renewable power capacity and generation for …

AGing Integrated Database (AGID)

The AGing Integrated Database (AGID) is an on-line query system. In this chart, AGID is visualizing the locations of the …

U.S. Environmental Protection Agency

The United States Environmental Protection Agency (U.S. federal agency) sets protocols in place to protect human health and the environment …

Stack Overflow

Stack Overflow is the largest online community for programmers to learn, share their knowledge, and advance their careers. Each year …

The Guardian

The Guardian is a British national daily newspaper. The article written by the newspaper is about how a team
Posted in Business Metrics, Integration, Knowledge, Problem solving, Programming, Uncategorized | Leave a comment

How to Troubleshoot IIS Worker Process (w3wp) High CPU Usage


Having IIS performance problems? Do you have w3wp.exe high CPU usage? In this article, we will discuss some tips to identify what is causing high CPU usage for your ASP.NET web applications. There are a lot of reasons that your IIS worker process (w3wp.exe) could be using a lot of CPU. We will cover some of the top reasons and how to troubleshoot IIS performance problems.

To start, you should look at which web requests are currently executing with IIS to see if that helps you identify the issue.

How to View Running Web Requests in IIS

One of the first things you should do is see which web requests are currently executing. This may help you identify a specific URL that is causing the problem. There is a chance that you could recognize one of the URLs that is known to take a very long time or cause high CPU issues.

Although, it may also show a bunch of web requests that are queued up and not directly lead you to the root cause.

Via the IIS User Interface

Via the IIS management console, you can view the running worker processes. You can view which IIS application pool is causing high CPU and view the currently running web requests.

iis manager click worker processes

After selecting “Worker Processes” from the main IIS menu, you can see the currently running IIS worker processes.

After selecting "Worker Processes" from the main IIS menu, you can see the currently running IIS worker processes.

If you double-click on a worker process, you can see all of the currently executing requests. Here is an example from one of our servers. You can see that each request is in different parts of the ASP.NET pipeline and currently executing different HTTP modules.

You can see that each request is in different parts of the ASP.NET pipeline and currently executing different HTTP modules.

Via Command Line

The appcmd.exe utility can be useful for a lot of things, including the currently running web requests.

C:\Windows\System32\inetsrv>appcmd list requests
REQUEST "f20000048000021c" (url:GET /nopcommerce, time:6312 msec, client:localhost, stage:BeginRequest, module:IIS Web Core)

Understanding The Results & Things to Look For

You can view the currently executing web requests via the IIS user interface or command line. Either way, it returns the same information.

  • URL – the complete URL that was being executed
  • Time – the total amount of time, in milliseconds, the web request has been executing
  • Client – the address of the user that initiated the request
  • Stage – the stage of the IIS pipeline that the request is currently in
  • Module – the ASP.NET module that is currently executing

There are a few things you want to pay attention to when looking at the requests.

  • Are all of the requests for the same URL? Perhaps that URL is the source of the problem
  • Is a high number of requests coming from the same client? Perhaps a specific user is slamming your web server with traffic.
  • Are all the requests stuck in the same stage or module? There could be a problem with requests getting hung in that specific step of the IIS pipeline.

6 Common Causes of IIS Worker Process High CPU

There are a lot of reasons that you can be seeing w3wp.exe high CPU usage. I have selected six common causes to cover in this article.

  • High error rates within your ASP.NET web application
  • Increase in web traffic causing high CPU
  • Problems with application dependencies
  • Garbage collection
  • Requests getting blocked or hung somewhere in the ASP.NET pipeline
  • Inefficient .NET code that needs to be optimized

 1. High Error Rates Within Your ASP.NET Web Application

Application errors could be happening in your application, and you don’t even know it. Some errors will cause your users to receive an error message of some form. Other errors may happen, and nobody knows about it.

If you are using an error monitoring or application performance management tool, be sure to check those for high error rates.

There are a few places you can look for application error rates and actual errors. Including Windows Event Viewer, IIS Logs, and more. Read this article to learn more: IIS Logs, Error Logs and More – 6 Ways to Find Failed ASP.NET Requests

Windows Performance Counters for Error Rates

There are two specific performance counters I would recommend reviewing for high error rates. You can check these by opening Performance Monitor within Windows and adding the counters to the chart view.

.NET CLR Exceptions -> # of Exceps Thrown / sec – Check this to see if a lot of exceptions are being thrown by your application. It is possible for your application to have a lot of hidden errors that can cause big performance problems.  Any exceptions at all are bad, but some are unavoidable.

W3SVC_W3WP -> % 500 HTTP Response Sent –  Any requests with a 500 status code are internal server errors. Make sure this percentage is very low. It should be 0-1%.

2. Increase in Web Traffic Causing High CPU

One of the simplest explanations for w3wp high CPU usage is an increase in web traffic. However, if you don’t have any baseline for what your normal volume of traffic is, it can be had to know if traffic has increased.

If you are using some application monitoring tool that tracks the traffic, be sure to check it and see if traffic levels have changed.

If you don’t have any way to know if traffic levels have changed, you could use your IIS log files to try and find out. You can use VisualLogParser or Log Parser Lizard to query them.

Related tutorials:
Analyze your IIS Log Files – Favorite Log Parser Queries (VisualLogParser)
Tutorial for Log Parser Lizard GUI

There are also windows performance counters for Requests / Sec and Requests Current to see the current traffic rates in real time.

Possible Reasons for Higher Web Traffic

If traffic levels are up, you should evaluate if it should be or not. Here some things to think about in regards to increased traffic levels:

  • Client or user – Is there a huge spike in traffic from a specific client, user, or source? Perhaps something that accesses your site is not working correctly. You may need to block a specific IP address.
  • Bots – Similar to a specific user causing a lot of traffic, it could be a bot causing it. Look at the user agents being used to access your site in your IIS logs.
  • Oprah effect – Did Oprah or somebody mention your products? Did you just go viral? Getting a lot of attention is awesome, but you may need to scale up to handle it.

If your site is receiving a lot more traffic, you may need to get a bigger server (scale up) or more servers (scale out). If your site doesn’t get very many requests per second, traffic may not be the problem.

Many ASP.NET applications have 10-30 requests per second. However, I have also seen lightweight web requests on busy apps doing over 100 requests per second. The volume of traffic from one web app to another and the related CPU usage varies wildly. It is all about your specific application.

How to Identify Expensive Web Requests

By identifying which web requests are taking the longest, you may be able to identify your high CPU issue or identify parts of your application that could use some performance review to improve.If you are using an APM solution, like Retrace, it can help you track performance over time of your entire application. It can also tell you which specific web requests take the longest.

APM tools use .NET profilers and other data collection techniques to understand the performance of your application down to the code level.

By identifying which web requests are taking the longest, you may be able to identify your high CPU issue or identify parts of your application that could use some performance review to improve.

Read more: Application Performance Management Solution with Retrace Code Profiling

3. Problems With Application Dependencies

Application Performance ProblemsToday’s web applications leverage a lot of different types of external services and dependencies. Including SQL, NoSQL, queuing, caching, and many external HTTP web services.

Slowdowns from any application dependency can cause performance problems with your application.The most common problems are slow SQL queries or problems with external HTTP web services.

Tracking the performance of your application to this level requires an APM tool, like Retrace. Retrace tracks the performance of your application down to the code level. It can help you quickly identify slow SQL queries, web service calls, and much more.

4. Garbage Collection

Microsoft .NET utilizes garbage collection to manage the allocation and release of memory. Depending on what your application does, the allocation and cleanup of application memory can cause a lot of garbage collection activity. For example, the usage of lots of large string variables on the large object heap causes garbage collection problems.

To measure if garbage collection could be causing problems for your application, check this Windows Performance Counter:

.NET CLR Memory -> % Time in GC – This counter reflects what % of the time your application spends doing garbage collection. If this number spikes a lot above 5-10%, you want to investigate memory usage further.

Garbage collection also has two modes. You may need to enable server mode, which is not the default.

5. Requests Are Getting Blocked and Hang in the ASP.NET Pipeline

Requests Are Getting Blocked and Hang in the ASP.NET Pipeline

There are many steps in the lifecycle of an ASP.NET request. This includes basic steps like the start of the request, authentication, authorization, evaluating the correct HTTP handler and finishing the request. As part of this, there are many standard and custom HTTP modules that may be in use.

The first thing I showed you was how to view the currently executing web requests. If you are having performance problems, I would suggest looking to see if all the requests seem to hang on a specific HTTP module.

HTTP modules can be native code or managed .NET code. They can be standard .NET modules like FormsAuthenticaion or SessionStateModule. Many applications also use 3rd party or custom HTTP modules.

Are You Using Sessions?

Most people don’t realize how much of a performance overhead ASP.NET sessions cause. On every page load, they cause your IIS worker process to retrieve your session object, lock it, and then release it at the end of the request.

Sessions cause locking and can cause a bottleneck within your application. If you are using a session provider like Redis or SQL, any performance slowdowns will impact the performance of your application.

6. Inefficient .NET Code That Needs to Be Optimized

If none of the other common causes was a problem, you might need to dig into the code to make improvements. You will need to use .NET code profilers to capture what methods are being called in your code and how long they take. Profilers can help you identify specific methods in your code that are very slow.

Warning: Profilers do add overhead to your application. So if your application already has very high CPU usage (90+%), profiling will be very slow, and the performance of your application will get worse. This could make your application unusable even depending on the detail level of profiling you are doing and the CPU usage before you started profiling.

My favorite .NET profiler is RedGate’s ANTS Performance Profiler. They do offer a free trial that you can take advantage of.

RedGate's ANTS Performance Profiler.

Check out these articles to learn more about ANTS and how to profile ASP.NET applications.

How to Troubleshoot High .NET App CPU in Production With ANTS and Process Hacker
Walkthrough: ASP.NET profiling with ANTS Performance Profiler

Good Luck With Your IIS Performance Problems!

Hopefully, you are reading this because you are trying to figure out how to improve performance. I hope your server isn’t at 100% and you are scrambling!

As a provider of APM solutions, we spend a lot of time working on and thinking about application performance problems. We hope that this guide has been helpful.

Posted in ASP.NET MVC, C#, Knowledge, Problem solving, Programming, Software architecture, Uncategorized | Leave a comment

Multiple signalR connections/hubs on your website


You can have multiple hubs sharing one connection on your site. SignalR 2.0 was updated to handle multiple hubs over one signlar connection with no lost in performance.

Official docs:

All clients will use the same URL to establish a SignalR connection with your service (“/signalr” or your custom URL if you specified one), and that connection is used for all Hubs defined by the service.

There is no performance difference for multiple Hubs compared to defining all Hub functionality in a single class.

Posted in Problem solving, Programming, SOA, Software architecture, Uncategorized | Leave a comment