IndyWatch Education Feed Archiver

Go Back:30 Days | 7 Days | 2 Days | 1 Day

IndyWatch Education Feed Today.

Go Forward:1 Day | 2 Days | 7 Days | 30 Days

IndyWatch Education Feed was generated at Community Resources IndyWatch.

Monday, 19 November


Hooked on hooks: how to use Reacts useReducer() - Medium

Photo by Pascal van de Vendel on Unsplash

So the React Conference just happened and as always something new happened. Hooks happened! The React team talked about suspense, lazy loading, concurrent rendering, and hooks :D.

Now Ill talk about my favorite hook useReducer and how you use it.

In my PokemonInfo component, I have:

const [{ count, loading }, dispatch] = useReducer(reducer, initialState);

Which is equivalent to:

const [state, dispatch] = useReducer(reducer, initialState);
const { count, loading } = state;

So what is const [state, dispatch] = useReducer(param1, param2) Lets first talk about array destructuing which is happening below.

const [state, dispatch] = useReducer(initialState);

Heres an example of array destructing:

let myHeroes = ['Ant man', 'Batman']; // Mixing DC & Marvel :D
let [marvelHero, dcHero] = myHeroes; // destructuring array
* myHeroes[0] == marvelHero => is 'Ant man'
* myHeroes[1] == dcHero => is 'Batman'

So the method useReducer has two items in its array state and dispatch. Also the useReducer takes in two parameters: one is reducer the other is initial-state.

In the useReducer param reducer, I pass in:

What this does is it takes in two arguments. One is the current state of the reducer and the other is the action. The action.type decides how it will update the reducer and return a new state to us.

So if the action.type === increment

case 'increm...


The Virtual DOM is slow. Meet the Memoized DOM - Medium

The Virtual DOM is slow. Meet the Memoized DOM.

Moving beyond the Virtual DOM and State Management

The virtual DOM was a fantastic innovation. It brought about a much more productive way of writing web applications by allowing us to write our views in a declarative manner.

This big benefit has little to do with performance of the initial render. Instead, it is the process of updating the DOM to reflect changes in your state has become much faster.

This process of bringing the DOM in sync with the state is often referred to as DOM reconciliation.

If we had an infinitely fast reconciler, we could vastly simplify our applications by rendering everything on every single frame. The state layer would never need to know about views at allmuch less send out events and track which views need to react when certain parts of the state change. The view would always be in sync with the data, no matter what you threw at it.

Sadly, virtual DOM implementations are not infinitely fast. They are, in fact, surprisingly slow. Thankfully, many have jumped on the Immutability bandwagon, in which case the virtual DOM thanks you! Others wrap all state in observables (e.g. mobx), and keep track of which view depends on what state. This allows you to reconcile only parts of your view, but comes with its own set of drawbacks.

The biggest issue is that we tend to decide how to manage our application state based on our view layer. What if we could get better performance in a world where the data layer and view layer dont really know or care about each other?

Meet the Memoized DOM

Imba is a programming language for the web. It powers the interactive screencasting platform, of which I am the lead developer. Imba was born to make developing web applications fun again. It features a clean and readable syntax inspired by Ruby. It compiles to readable and performant JavaScript, and works inside the existing ecosystem.

The whole stack of is written in Imba, but the language can easily be used just for the view layer.

Besides a clean and readable syntax, the biggest benefit of Imba is that it truly treats DOM elements as first-class citizens, on a much deeper level than JSX. It allows you to write views declaratively, yet it does not use a virtual DOM. Instead, Imba compiles views to a memoized DOM, which turns out to be an order of magnitude faster.

How it works

The general...

Go Back:30 Days | 7 Days | 2 Days | 1 Day

IndyWatch Education Feed Today.

Go Forward:1 Day | 2 Days | 7 Days | 30 Days

Saturday, 17 November


PROMISE Promoting youth involvement and social engagement IN DEFENCE OF YOUTH WORK

downloadThanks to Paul Gent (2017)

We are very pleased to help promote the results of a European project involving young people in Manchester. A showcase event, from 4-7pm on Wednesday 28th November, at the University of Manchester, will share and celebrate the stories and creativity of young people in Manchester gathered as part of a larger European project (PROMISE) exploring young peoples responses to stigma and conflict in their day to day lives. Despite experiencing such barriers and difficulties, many young people shared stories of positive changes they had made in their lives and the lives of others.

The evening will begin with an overview of the research and an exhibition of the creative outputs: photography, documentary art, and music videos. This will be followed by roundtable discussions drawing upon the experiences of youth and community organisations, practitioners and researchers. By sharing their findings in this way, the team behind the project hope to identify how their research can be used in the most effective way to improve the lives of young people in Manchester and beyond.

All are welcome and they are particularly looking forward to hearing from young people, youth workers and practitione...


The curious case of performance testing setTimeout(0) - Medium

(For full effect, read in a husky voice while surrounded by a cloud of smoke)

Image by Studio-Dee on Pixabay.

It all began on a gray fall day. The sky was cloudy, the wind was blowing, and someone told me that setTimeout(0) creates, on average, a 4 ms delay. They claimed thats the time it takes to pop the callback off the stack, onto the callback queue and back on the stack again. I thought it sounded fishy (this is the bit you imagine me in black and white with a cigar in my mouth). Given that the rendering pipeline needs to run every 16 ms to allow smooth animations, 4 ms seemed like a long time to me. A very long time.

A few naive tests in the devtools with console.time()confirmed it. The average delay across 20 runs was about 1.5 ms. Of course, 20 runs does not a sufficient sample size make, but now I had a point to prove. I wanted to run tests on a larger scale that could get me a more accurate answer. I could then, of course, go and wave that in my colleagues face to prove that they were wrong.

Why else do we do what we do?

Film Noir Photo ShootPortland Lightist by Randy Kashka on flickr.

The traditional method

Right away, I found myself in hot water. In order to measure how long it took setTimeout(0) to run, I needed a function that:

  • took a snapshot of the current time
  • executed setTimeout
  • then exited immediately so that the stack would be clear and the scheduled callback could run and calculate the time difference
  • and I needed that function to run a sufficiently large number of times so that the calculations were statistically meaningful

But the go-to construct for thisthe for-loopwouldnt work. Because the for-loop doesnt clear the stack until it has executed every loop, the callback wouldnt run immediately. Or, to put it in code, we would get this:

The loop executes 10 times, and only then are the callbacks popped back on the stack

The problem here was inherentif I wanted to run setTimeout multiple times automatically, I would have to do it from within another context. But, so long as I ran from within another context, there would always be an additional delay from the time I started the test to the time the callback executed.

Of course I could slum it like some of these good-for-nothing detectives, write a function that does what I need, and then copy & paste it 10,000 times. I would lea...


Building a super-fast and secure website with a CMS is no big deal. Or is it? - Medium

Can I break your site? Do you have any leftover scripts there that I can take advantage of? Is there a way to steal your credentials and change content on your site? Can I access private information? No? Are you sure? Or, am I never going to find out because your page takes ages to load?

At some point when creating a website you need to think about performance and security. It does not matter if youre working on your personal website, or your clients website. It is the same as backing up your local files. There are people who do regular backups, and people who have not yet lost any, so are less inclined to do it.

Traditional CMS

If you are using a traditional content management system (CMS), the situation is more complicated for you. These systems contain lots of features. They need to cover all potential use-cases any website might have. That means code. A lot of code. Thousands of files. And, thats not allthe administration interfaces need to provide a nice UI for you to configure all these features. Potentially, another few thousand files.


Its not your code, right? So it should already be secure. Well, many CMS vendors try their best to ensure their implementations are secure. They still have to cover a lot of files. And, every single file may contain an error, some code that was left behind, or maybe a querystring parameter that exposes a database. That in itself can create a potential vulnerability.

Using open-source CMS can be even more dangerous, as the implementation is publicly known. Yes, you can argue that open-source is advantageous. Anyone can contribute and fix found issues. But, this only covers issues that are already known. Attackers would probably keep their exploits to themselves. Even if an issue was found and fixed, you still need to put a lot of effort into making sure your website is kept up-to-date. You have to perform upgrades every time a security hotfix is released.

If you are interested in real-world statistics, take a look at hacked website report by Sucuri.

So, what would attackers want to do with your website? Essentially, they want to get hold of your data, so they can misuse your website by:

  • Getting access to your database through one of the scripts. This is usually the case of custom leftover scripts, testing pages, and others.
  • Compromising and misusing your secret data. Configuration files are a typical storage option for various secret keys and credentials to other services or databases.
  • Modifying your website content.
  • Making your website inaccessible, i.e. shut it down.


When you implement your website on a traditional CMS, you usually need to customize it, so there are files of the CMS and your custom files. All of them need to be...


How to create Angular 6 Custom Elements and Web Components - Medium

6 Steps to create Angular elements using Angular CLI

Angular 6 elements

After reading the official documentation for Angular elements I realized that it lacks the implementation part in a structured manner. That is the reason I am stating the steps to get going!

1. Install Angular CLI 6 and create a new project

npm i -g @angular/cli
ng new angular-custom-elements

As Angular introduced the concept of custom elements in Angular 6 we must have v6 or later installed. You can also add the--style flag to set the default style extension.

2. Add elements package

Custom elements are not completely implemented by all the browsers. Hence we require Polyfills to get them working. With the new CLI command ng add you can add the Angular library and the required polyfills:

ng add @angular/elements

3. Create a component

Lets create a component that will act as a custom element by the end of this post:

ng g component button --inline-style --inline-template -v Native

We are using ViewEncapsulation.Native to bundle all the styles, template and component class code in a single file.

4. Add properties to the component

After making a few changes our button component looks like:

IDE: VS Code, Theme: Atom One Dark

According to the official docs:

The creation API parses the component looking for input properties, and defines corresponding attributes for the custom element.
It transforms the property names to make them compatible with custom elements, which do not recognize case distinctions. The resulting attribute names use dash-separated lowercase. For example, for a component with @Input('myInputProp') inputProp, the corresponding custom element defines an attribute my-input-prop.

And also:

Component outputs are dispatched as HTML Custom Events, with the name of the custom event matching the output name.
For example, for a component with @Output() valueChanged = new EventEmitter(), the corresponding custom element will dispatch events with the name "valu...


How to use events in Node.js the right way - Medium

Before event-driven programming became popular, the standard way to communicate between different parts of an application was pretty straightforward: a component that wanted to send out a message to another one explicitly invoked a method on that component. But event-driven code is written to react rather than be called.

The Benefits Of Eventing

This approach causes our components to be much more decoupled. As we continue to write an application, we identify events along the way. We fire them at the right time and attach one or more event listeners to each one. Extending functionality becomes much easier. We can add on more listeners to a particular event. We are not tampering with the existing listeners or the part of the application where the event was fired from. What were talking about is the Observer pattern.

Designing An Event-Driven Architecture

Identifying events is pretty important. We dont want to end up having to remove/replace existing events from the system. This might force us to delete/modify any number of listeners that were attached to the event. The general principle I use is to consider firing an event only when a unit of business logic finishes execution.

So say you want to send out a bunch of different emails after a users registration. Now, the registration process itself might involve many complicated steps, and queries. But from a business point of view, it is one step. And each of the emails to be sent out are individual steps as well. So it would make sense to fire an event as soon as registration finishes. We have multiple listeners attached to it, each responsible for sending out one type of email.

Nodes asynchronous, event-driven architecture has certain kinds of objects called emitters. They emit named events which cause functions called listeners to be invoked. All objects that emit events are instances of the EventEmitter class. Using it, we can create our own events:

An Example

Lets use the built-in events module (which I encourage you to check out in detail) to gain access to EventEmitter.

This is the part of the application where our server receives an HTTP request...


Your Ultimate Guide to Writing QA Documentation - Medium

Testing your average software solution is a tiresome and elaborate task. Moreover, if you need a decent piece of code, theres no way out of testing. Yet you can make your life a little bit easier by creating a proper QA documentation. The documentation saves a ton of time by streamlining your testing processes. Its also your go-to asset in case something goes off the rails with the project.

This article is the second part of Your Ultimate Guide to Writing Test Documents. In the first part, we went through 6 topics:

  1. Checklists
  2. The Reasons for Creating a Test Case
  3. How to Create the Test Case
  4. The Lifecycle of the Test Case
  5. Test Suits
  6. Typical Errors When Creating a Test Document

If youd like a review of any of those topics, please check out that article.

Now, lets continue our deep dive into writing a QA documentation. In this article, we are going to discuss five more topics:

  1. Defect Reports
  2. The Lifecycle of a Defect Report
  3. Typical Errors When Creating a Defect Report
  4. Test Plans
  5. Test Progress Report

1. Defect Reports

A defect report is a roadmap for getting a bug-free software. In short, the report describes any unwanted issue with your solution. It sounds simple until you start documenting. Below you can see an example of a typical defect report.

Lets go through every section of the defect report:

  1. The identifier is your unique value for recognizing a specific defect report in a sea of others.
  2. The summary is your laconic answer to three simple questions What happened?, Where? and Under what circumstances?
  3. The description is where you show the bug in all the details. You should describe the actual and the expected results. Moreover, its a good idea to provide a link to your software requirements.
  4. Then, you write about the steps to reproduce (STR). Dont miss a step or your report may end up in a trash folder. 
  5. In the reproducibility, you show if the bug appears every time you follow the STR.
  6. The severity shows how harmful the bug is to the project. Dont exaggerate because if the developer notices, your report might end up the last in the queue.
  7. The priority shows the urgency, and its a logical addition to the severity section.
  8. The symptom is a short label to stack your defect report with the other similar reports.
  9. Also, you should be a good tester and describe...


How does tokenization work, anyway? - Medium

Not everything will be tokenized, but that which can be will be.

2017 saw the hype of utility tokens and ICOs. 2018 marks the hyped start of asset tokenization and the launch of securities tokens/platforms. This trend is notably huge in the U.S, given how A16z and GGV Capital invested in the likes of tokenization platforms like TrustToken, Harbor, and Polymath.

In Asia, the trend is starting to pick up too. For instance, Rate3 Network was funded by various notable Asian VCs that include Matrix Partners China and Fenbushi Capital.

Conceptually, tokenization might seem easy: Issue an ERC-20 token (or any other blockchain tokens), imbue legal rights and ownership rights in the tokens, and you can trade them easily. However, this warrants a much deeper look: how do you distinguish claim rights and ownership rights? What are the differences in tokenization between different asset classes? What is impeding tokenization from adoption?

Thinking comprehensively about tokenization requires an understanding of blockchains and smart contracts, legal, finance, and economics. There has already been in-depth research on each of these components.

In this piece, I want to give a comprehensive introduction to tokenization through using real estate as a primary example. Heres what well discuss:

Lets get started!

What is Tokenization?

Isnt Tokenization just securitization?

For structured finance professionals, tokenization might seem like securitization. In summary, securitization consists of a few steps:

  1. Originator (owner of the assets) collects the assets in a pool and transfers the pool to a legal entity (usually a special purpose vehicle). Through this legal structure, assets are not exposed to counter-party risks or risk of bankruptcy of the originator bank
  2. The SPV structur...

Go Back:30 Days | 7 Days | 2 Days | 1 Day

IndyWatch Education Feed Today.

Go Forward:1 Day | 2 Days | 7 Days | 30 Days

Friday, 16 November


Lets get classy: how to create modules and classes with Python - Medium


In object-oriented computer languages such as Python, classes are basically a template to create your own objects. Objects are an encapsulation of variables and functions into a single entity. Objects get their variables and functions from classes.

Say what?

Here are some examples that will help you understandread on. There is also an interactive code shell, simply press the Run button at the top of the specific window.

The simplest way to describe classes and how to use them is this:

Imagine you have great powers. You create a species (class).

Then you create attributes for that species (properties)height, weight, limbs, color, powers, and so on.

Then you create an instance of that speciesFido the dog, Drogon from Game of Thrones, and so on. Then you work with these instances:

  • In a game, for instance, they would engage in action, interact, using their attributes.
  • In a banking app, they would be the different transactions.
  • In a vehicle buy/sell/trade/lease app, the vehicle class could then spawn sub-classes such as cars. Each would have attributes such as mileage, options, features, color, and trim.

You can already see why this is useful. You are creating, re-using, adapting, and enhancing items in a very efficient, logical, and useful way.

By now, you have probably realized that this is a way to classify and group, one that that is similar to how humans learn:

  • Animals are living things that are not human or trees, in a basic sense
  • then you move on to different types of animalsdogs, cats are probably the first animals most of us learnt about
  • then you move to different attributes of animalsshapes, sizes, sounds, appendages and so on.

For instance, when you were a child, your first understanding of a dog was probably something with four legs that barked. Then you learnt to distinguish that some were real dogs, others were toys. That this dog concept contained many types.

Creating and using classes is basically:

  • building a template to put things ina classification
  • which can then be operated on. For example, pulling up all the people with dogs that you could request to link to a blog on pets, or all bank clients who might be good prospects for a new credit card.

The main point here is classes are objects that can produce instances of those templates, on which operations and methods can be applied. It is an excellent way to conceptualize, organize, and build a hierarchy for any organization or process.

As our world gets more complex, this is a way to mimic that complexity from a hierarchical perspective. It also builds a deeper understanding of the processes and interactions for business, technical, and social...


How to Configure your macOs Terminal with Zsh like a Pro - Medium

Sometimes, using the default terminal sucks. You want to go out of the ordinary, to add life to the boring terminal and improve your productivity.

Z shell (Zsh) is a Unix shell built on top of bash (the default shell for macOS) with a large number of improvements.

In this walk-through, we will configure iTerm2 with ZSH and its dependencies. This is a no-brainer, and after this, youll ponder the reason for not discovering ZSH earlier. Well, since youre here already, lets kick-start this.


  • Homebrew installation
  • iTerm2 installation
  • ZSH and Oh My ZSH installations
  • Setting up the dependencies to create a beautiful terminal

Step 1: Install Homebrew

Homebrew is a free and open-source software package management system that simplifies the installation of software on Apples macOS.

Before installing Homebrew, we need to install the CLI tools for Xcode. Open your terminal and run the command:

xcode-select -install

If you get an error, run xcode-select -r to reset xcode-select.

Then, install Homebrew.

/usr/bin/ruby -e "$(curl -fsSL"

Step 2: Install iTerm2

iTerm2 is a replacement for terminal and the successor to iTerm. Most software engineers prefer iTerm2 over the default terminal that ships with macOS as a result of its cool features. You can integrate zsh into iTerm2 to increase productivity.

To install iTerm2, run the command:

brew cask install iterm2

Step 2: Install ZSH

Zsh is a shell designed for interactive use, although it is also a powerful scripting language.

By default, macOs ships with zsh located in/bin/zsh.

Lets install zsh using brew and make iTerm2 use it.

brew install zsh

Step 3: Install Oh My Zsh

Oh My Zsh is an open source, community-driven framework for managing your zsh configuration. It will not make you a 10x developerbut you might feel like one
Robby Russell

It runs on Zsh to provide cool features configurable within the ~/.zhrc config file. Install Oh My Zsh by running the command

sh -c "$(curl -fsSL"

Check the installed version

zsh --version

You can upgrade it to get the late...


An Introduction to the basic principles of Functional Programming - Medium

An introduction to the basic principles of Functional Programming

After a long time learning and working with object-oriented programming, I took a step back to think about system complexity.

"Complexity is anything that makes software hard to understand or to modify."John Outerhout

Doing some research, I found functional programming concepts like immutability and pure function. Those concepts are big advantages to build side-effect-free functions, so it is easier to maintain systemswith some other benefits.

In this post, I will tell you more about functional programming, and some important concepts, with a lot of code examples.

What is functional programming?

Functional programming is a programming paradigma style of building the structure and elements of computer programsthat treats computation as the evaluation of mathematical functions and avoids changing-state and mutable dataWikipedia

Pure functions

water drop by Mohan Murugesan on Unsplash

The first fundamental concept we learn when we want to understand functional programming is pure functions. But what does that really mean? What makes a function pure?

So how do we know if a function is pure or not? Here is a very strict definition of purity:

  • It returns the same result if given the same arguments (it is also referred as deterministic)
  • It does not cause any observable side effects

It returns the same result if given the same arguments

Imagine we want to implement a function that calculates the area of a circle. An impure function would receive radius as the parameter, and then calculate radius * radius * PI. In Clojure, the operator comes first, so radius * radius * PI becomes (* radius radius PI):

Why is this an impure function? Simply because it uses a global object that was not passed as a parameter to the function.

Now imagine some mathematicians argue that the PI value is actually...


How to build a simple actor-based blockchain - Medium

Me on Flickr

Scalachain is a blockchain built using the Scala programming language and the actor model (Akka Framework).

In this story I will show the development process to build this simple prototype of a blockchain. This means that the project is not perfect, and there may be better implementations. For all these reasons any contributionmay it be a suggestion, or a PR on the GitHub repositoryis very welcome! :-)

Lets start with a little introduction to the blockchain. After that we can define the simplified model that we will implement.

Quick Introduction to the blockchain

There a lot of good articles that explain how a blockchain works, so I will do a high level introduction just to provide some context to this project.

The blockchain is a distributed ledger: it registers some transaction of values (like coins) between a sender and a receiver. What makes a blockchain different from a traditional database is the decentralized nature of the blockchain: it is distributed among several communicating nodes that guarantee the validity of the transactions registered.

The blockchain stores transactions in blocks, that are created we say minedby nodes investing computational power. Every block is created by solving a cryptographic puzzle that is hard to solve, but easy to verify. In this way, every block represents the work needed to solve such puzzle. This is the reason why the cryptographic puzzle is called the Proof of Work: the solution of the puzzle is the proof that a node spent a certain amount of work to solve it and mine the block.

Why do nodes invest computational power to mine a block? Because the creation of a new block is rewarded by a predefined amount of coins. In this way nodes are encouraged to mine new blocks, contributing in the growth and strength of the blockchain.

Simple blockchain

The solution of the Proof Of Work depends on the values stored in the last mined block. In this way every block is chained to the previous one. This means that, to change a mined block, a node should mine again all the blocks above the modified one. Since every block represents an amount of work, this operation would be unfeasible once several blocks are mined upon the modified one. This is the foundation of the distributed consensus, The agreement of all the nodes on the validity of the blocks (that is the transactions) stored in the blockchain.

It may...


Three years ago I attended a coding bootcamp. Today I became a Google Developer Advocate. - Medium

This is the story of my journey and how I got there

I am a Google Developer Expert in Web Technologies

What is a Google Developer Expert?

Let me start with Googles official definition, and then I will follow with my definition.

A Google Developers Expert (GDE) is a person recognized by Google as having exemplary expertise in one or more of their products. The Google Developers Experts program awards GDEs. Google established and administers the program.

For me, a Google Developer Expert is a person who is a leader in their area of specialization. This person also contributes to the tech community. Contribution can consist of any combination of speaking, writing, open source contribution, training courses or maintaining a repo.

How Do You Become a Google Developer Expert?

To earn the GDE distinction, other people that are GDE have to agree that you are an expert. You cannot apply for the program. You have to be nominated by a current GDE.

Once you are nominated you have to complete an application form. This form shows your level of expertise and your level of contribution to the tech community. If your application passes then you go through many rounds of interviews. You will be interviewed to judge your contribution to the tech community. Other interviews will evaluate your technical knowledge. The technical knowledge is done by a Google employee who is an expert in your area of specialization. If you pass all these steps then Google will recognize you as a GDE.

A Quick History of My Background

Many many years ago I was a Lotus Notes Developer. I did this for 10+ years. I specialized in Lotus Notes deployments on IBMs AS/400. As a result, IBM hired me to write a book on Lotus Notes development. If you read the book Developing E-Business Applications Using Lotus Domino on the AS/400 then you have read my book.

If you have ever used Lotus Notes, I bet you are probably not using it today. It was because of this decline in usage that I stopped being a developer. I moved on to other areas.

During this time I started learning about internet marketing. I built up an internet marketing business that allowed me to retire at the age of 51. The last job I had before retiring was as a Project Manager in the training department at Aarons.

A year and a half after I retired I purchased a book for $1 on JavaScript programming on the clearance rack at Barnes & Noble. This was November 2014. For the next month and a half, I worked through the book and completed all the exercises. It was at this point that I remembered how much of a passion I had for programming.

My Journey to Becoming a GDE

In December 2014 I decided I wanted to get back into programming. Going back to university to get a four-year degree was complet...


Learner Spotlight: Larry Tao Wang Coursera Blog

I was a student of Electricity and Electronics, but during the last two years of my bachelors degree I found out that my real interest was in Computer Science. So apart from taking courses offered by my university, I also took CS courses from Coursera as a supplementary resource.

Take a peek at Larrys Coursera course list:

When I needed to learn topics that my university didnt offer, Coursera, is one of the best places to go.

Specifically, the Algorithms course helped me prepare for interviews, and I applied what I learned in the cloud computing and functional programming courses during my internship at Intel.

My university did not offer the courses about Scala or Functional Programming or Spark. I completed part of Functional Programming in Scala which gave me fundamental knowledge and practice opportunities for these topics. This in turn helped me pass the Intel interview because one round is about this specific subject. ...


Everything you need to know about <ng-template>, <ng-content>, <ng-container> and *ngTemplateOutlet - Medium

It was one of those days when I was busy working on new features for my office project. All a sudden, something caught my attention:

Final rendered DOM in Angular

While inspecting the DOM I saw the ngcontent being applied on elements by Angular. Hmm if they contain the elements in the final DOM, then what is the use of <ng-container>? At that time I got confused between <ng-container> and <ng-content>.

In the quest to know the answers to my questions I discovered the concept of <ng-template>. To my surprise, there was also *ngTemplateOutlet. I started my journey seeking clarity about two concepts but now I had four of them, sounding nearly the same!

Have you ever been to this situation? If yes, then you are in the right place. So without further ado lets take them one by one.

1. <ng-template>

As the name suggests the <ng-template> is a template element that Angular uses with structural directives (*ngIf, *ngFor, [ngSwitch] and custom directives).

These template elements only work in the presence of structural directives. Angular wraps the host element (to which the directive is applied) inside <ng-template> and consumes the <ng-template> in the finished DOM by replacing it with diagnostic comments.

Consider a simple example of *ngIf:

Example 1- Angular process of interpreting structural directives

Shown above is the Angular interpretation of *ngIf. Angular puts the host element to which the directive is applied within <ng-template> and keeps the host as it is. The final DOM is similar to what we have seen at the beginning of this article:

Example 1- Final rendered DOM


We have seen how Angular uses <ng-template> but what if we want to use it? As these elements work only with a structural directive, we can write as:

Example 2- Using <ng-template>

Here home is a boolean component variable set to true value. The output of the above code in DOM:

Example 2- Final rendered DOM

Nothing got rendered! :(

But why cant we see our message even after using <ng-...


How to use GitHub as a PyPi server - Medium

I was looking for a hosted private PyPi Python Package server. A server that used credentials that the team already has (such as GitHub).

I didnt want to create an on-premise server. For us, it would make it impossible to use cloud-based servers, and it is another moving part that can go wrong. There are also potential issues with fine-grained security and speed. (We have a worldwide team, so serving the content via a CDN would be helpful.)

I didnt want to force the team to create accounts with another provider. They already have Active Directory and GitHub accounts. It is an annoyance for them and creates a governance burden for me.

Sadly, I couldnt find such a service. GemFury is excellent but doesnt allow me to use GitHub authorization. MyGet is also excellent. It does allow me to use GitHub authorization, but doesnt host Python packages. Azure DevOps has something that looks promising, but its in private beta at the moment.

Happily, this is possible using cloud Git repositories such as GitHub, GitLab and BitBucket.

Pip can install packages from a Git repo

I have hosted a Python package on GitHub (python_world), which you can install with the following command.

pip install git+

Pip provides options to install from head, from a branch, from a tag or from a commit. I usually tag each release and install from these tags. See the pip install documentation for full details.

This repository is public, but it works just the same with a private repo, as long as you have permission. There is no special magic in the package (it's a vanilla Python package). does most of the work of creating the package.

If you are new to creating Python Packages, the Packaging Python Projects tutorial is worth a quick read.

Setuptools can install dependencies from Git

Setuptools is how most people create Python packages. If it cant find a package during installation, it will look in dependency_links. As in the example above, we can use Git as a source in dependency_links. There are some details in the Setuptools documentation

I have hosted another pa...


How to deploy your Cloud Foundry app with (almost) zero fear using Travis CI - Medium

Photo by William Canady from Pexels

Application deployments to the cloud should be painless. We should be able to deploy new code continuously, as often as we want, without fear. The blue-green deployment model enables us to do this.

I recently joined a new team at work that was deploying node.js Cloud Foundry applications to the IBM Cloud using Travis with the Bluemix CloudFoundry deployment provider. This works great for quickly and easily setting up your deployment with just a few parameters.

With the blue-green deployment technique, your current application (Blue) continues to run and take network traffic. While your new application code (Green) is deployed on a temporary route. The new Green application can be validated on the temporary route. If there are any problems, the deployment stops. The Blue application continues to serve traffic uninterrupted. Once the Green application is vetted, the router is updated to point at the Green application. The Blue can be stopped.

I immediately started looking around for a way to blue-green deploy our applications. In the interest of writing as little custom code as possible, I decided to leverage the cf-blue-green-deploy plugin for the Cloud Foundry command-line interface (CLI). I will share how I did this here.

Im going to assume if you landed here you are probably past the point of simply getting started with Travis. I wont be covering those details here.

If youre not interested in following along and just want to get straight to the goods, y...


What the new Apple Watchs EKG means for the future of consumer wearables and healthcare - Medium

When Apple announced this September that its newest Series 4 Apple Watch includes EKG functionality, I imagined millions of hearts worldwide fluttering with delight.

The news was significant for several reasons. The chief reason is it is the first time a mainstream consumer wearable device will perform a sophisticated medical procedure. This same procedure we need to see the doctor for today.

To understand the significance, you need first to set aside the fact that health and fitness are already key reasons why consumers currently use wearables. Fitness trackers have had heart rate sensors for many years now.

(Heart rate sensors are convenient for fitness purposes, to be sure. But, theyre also primitive. Anyone with a finger can feel for a pulse and calculate a heart rate if necessary.)

An EKG (or ECG/electrocardiogram) is different than a heart rate measurement. For one, because an EKG looks at the hearts electrical impulses to monitor for and identify specific heart anomalies. These anomalies are the immediate precursor to serious medical conditions. Conditions like strokes or heart attacks.

The technology can and will save lives.

By adding new and substantial medical features, Apple (and others) could be paving the way to a future in which wearables serve as the frontline for the diagnosis, treatment, and even prevention of serious medical conditions.

Hold your finger on the crown of the Series 4 Apple Watch, and youll get an EKG reading on the spot.

The Apple Watch is a class II medical device.

Adding an EKG to the Apple Watch wasnt just an engineering task.

It also required the attention and cooperation of the notoriously finicky Food and Drug Administration (FDA). The FD has cleared Apples use of two medical-grade features in the new Apple Watch: 1) the EKG, and 2) the Apple Watchs ability to identify and notify users of an irregular heart rhythm.

Its important to note that, with the FDA, clearing a device is not the same as approving one. The latter is much harder to do and requires much significant collaboration and testing to mitigate potential risks. Clearing the Apple watch took just one month from application to decision. Class II devices like the new Apple Watch dont require FDA approval because the associated health risks arent deemed great enough to warrant a more rigorous vetting process.

Its also important to understand that the FDA clearance letters came with language stating that the cleared features are not intended for users under the age o...


An introduction to Object-Oriented Programming in JavaScript - Medium

JavaScript and Object-Oriented Programming

This article is for students of JavaScript that dont have any prior knowledge in object-oriented programming (OOP). I focus on the parts of OOP that are only relevant for JavaScript and not OOP in general. I skip polymorphism because it fits better with a static-typed language.

Why do you need to know this?

Have you picked JavaScript to be your first programming language? Do you want to be a hot-shot developer who works on giant enterprise systems spanning hundred-thousand lines of code or more?

Unless you learn to embrace Object-Oriented Programming fully, you will be well and truly lost.

Different Mindsets

In football, you can play from a safe defense, you can play with high balls from the sides or you can attack like there is no tomorrow. All these strategies have the same objective: To win the game.

The same is true for programming paradigms. There are different ways to approach a problem and design a solution.

Object-oriented programming, or OOP, is THE paradigm for modern application development. It is supported by major languages like Java, C# or JavaScript.

The Object-Oriented Paradigm

From the OOP perspective, an application is a collection of objects that communicate with each other. We base these objects on things in the real world, like products in inventory or employee records. Objects contain data and perform some logic based on their data. As a result, OOP code is very easy to understand. What is not so easy is deciding how to break an application into these small objects in the first place.

If you were like me when I heard it the first time, you have no clue what this actually meansit all sounds very abstract. Feeling that way is absolutely fine. Its more important that youve heard the idea, remember it, and try to apply OOP in your code. Over time, you will gain experience and align more of your code with this theoretical concept.

Lesson: OOP based on real-world objects lets anyone read your code and understand whats going on.

Object as Centerpiece

A simple example will help you see how JavaScript implements the fundamental principles of OOP. Consider a shopping use case in which you put products into your basket and then calculate the total price you must pay. If you take your JavaScript knowledge and code the use case without OOP, it would look like this:

const bread = {name: 'Bread', price: 1};
const water = {name: 'Water', price: 0.25};
const basket = [];
const total =...


How to build an Augmented Reality Android App with ARCore and Android Studio - Medium

This article was originally posted here

In the previous post, I explained what ARCore is and how it helps developers build awesome augmented reality apps without the need to understand OpenGL or Matrix maths.

If you havent checked it out yet, I highly recommend doing so before moving ahead with this article and diving into ARCore app development.


According to Wikipedia, ARCore is a software development kit developed by Google that allows for augmented reality applications to be built.

ARCore uses three key technologies to integrate virtual content with the real environment:

  1. Motion Tracking: it allows the phone to understand its position relative to the world.
  2. Environmental understanding: This allows the phone to detect the size and location of all type of surfaces, vertical, horizontal and angled.
  3. Light Estimation: it allows the phone to estimate the environments current lighting conditions.

Getting Started

To get started with ARCore app development, you first need to enable ARCore in your project. This is simple as we will be using Android Studio and Sceneform SDK. There are two major operations Sceneform performs automatically:

  1. Checking for availability of ARCore
  2. Asking for camera permission

You dont need to bother with these two steps when creating an ARCore app using Sceneform SDK. But you do need to include Sceneform SDK in your project.

Create a new Android Studio project and select an empty activity.

Add the following dependency to your project level build.gradle file:

dependencies {
classpath ''

Add the following to your app level build.gradle file:

implementation ""

Now sync project with Gradle files and wait for the build to finish. This will install the Sceneform SDK to the project and Sceneform plugin to AndroidStudio. It will help you to view the .sfb files. These files are the 3D models which are rendered in your camera. It also helps you in importing, viewing, and building 3D assets.

Building your first ARCore app

Now with our Android Studio setup complete and Sceneform SDK installed, we can get started with writing our very first ARCore app.



What you need to know to start building mobile apps in React Native - Medium

Nothing is better than building apps with JavaScript. Unless you are building mobile apps. JavaScript is for building web apps, and using it to build native mobile app used to not be possible. It was hard for any web developer to dive into building native mobile apps. They have to learn Java, or Objective-C or any programming language that was used for this purpose.

That is, until Facebooks React Native broke this barrier. React Native comes with great advantages like building cross-platform apps for both Android and IOS. Before React Native, you had to write your code twiceone for Android and one for IOS. Thats no longer the case.

This article is an intro to the world of React Native, so get ready .

Why React Native?

Right, so why React native and not any other technology?

It gives us many solutions that other technologies can not afford. Here is what you can do with React Native:

Building native mobile apps

React Native allows us to write native apps in JavaScript for both iOS and Android. It gives us the ability to use all the native components like gestures, push notifications, camera, and location. There are some other JavaScript libraries for building mobile apps like ionic or PhoneGap. But those libraries use Webview, and the apps built with those technologies are not native.

Building cross platform mobile apps (iOS and Android)

Yeah, with React Native you can build mobile apps that can run on iOS and Android. This is one of the great benefits of React Native. Before Facebook created it, you had to build your app twice and with different code: one for iOS using Swift or Objective-C and one for Android using Java or Kotlin. React Native solved this problem so you can build your React Native app and it will work in iOS and Android. Awesome! 

Write your code all in JavaScript and React

While you are building React Native apps, you will actually write JavaScript. Reactjs code allows us to build great UI and user experience components.

Getting started with react-native

Starting with react-native can be exciting, but at the same can be a bit confusing. The first step is to install it, and there are several ways to do it:

Using expo-cli:

expo-cli is a command line tool. It downloads and installs the React Native boilerplate for you, integrated with expo API (check here for installation guide). Its an easy way to build a React Native app, and its the recommended way if youve just started with React Native.

expo-cli gives you many options. You can run and test your application on a mobile device without any configuration. Scan a QR co...


Eastern European workers vote with their feet Education, Economy and Society

The countdown to Brexit has seen a 15% fall in the number of Eastern European workers residing in the UK   in all 154,000  fewer than for July to September 2017  and 173,000 fewer than the record high of 1.05 million for July to September 2016.  This decline comes at a time when vacancies, after Continue reading Eastern European workers vote with their feet


Coursera and AWS Join Forces on New Digital Training Course Coursera Blog

Cloud represents an enormous opportunity for organizations of every size, in almost every industry, providing them with the speed, flexibility, and scalability they need to remain competitive. With more than 83% of enterprise workloads expected to be on the cloud by 2020, companies are expanding the scope of traditional IT roles by aggressively hiring and developing professionals with the skills to execute on their cloud strategy. As demand for cloud professionals continues to grow, those with Amazon Web Services (AWS) experience are in high demand in todays job market.

As we continue to execute on our mission to close the global skills gap and empower learners with career-relevant skills, were excited to partner with AWS for the first time to offer AWS Fundamentals: Going Cloud-Native. This course is a starting point for learners with a working knowledge of IT infrastructure concepts who are interested in learning how to apply AWS services to their roles and businesses.

The growing adoption of cloud is changing the landscape of traditional IT jobs, and more and more companies are looking to hire and develop professionals with the skills and experience to set up and oversee cloud strategy, management, and implementation, said Maureen Lonergan, Director of Training and Certification at AWS. Were thrilled to be working with Coursera to provide a robust and flexible learning program to make career advancement and cloud computing accessible to learners around the world.

Learners who enroll in AWS Fundamentals: Going Cloud-Native will benefit from an engaging program that combines fundamental theory with practical projects, such as learning how to deploy and run a cloud-native application.

Designed and taught by AWS Authorized Instructors, the course allows learners to:

  • Augment their professional expertise with fundamentals in planning, designing...

Go Back:30 Days | 7 Days | 2 Days | 1 Day

IndyWatch Education Feed Today.

Go Forward:1 Day | 2 Days | 7 Days | 30 Days

Thursday, 15 November


6-Week Challenge: The Taste of Defeat / Recalibration We, The Dancers

So, last week was bleak. Facing the reality of losing my $500 set off my anxiety, badly. My sleep has suffered ever since, with me either lying awake half the night or waking up an hour or two early and feeling incredibly anxious and panicky. Ive had a handful of near panic attacks thinking about the money, something I havent had more than a couple of times in the past two years.

Maybe because of this, maybe because of my period, I have also been feeling pretty crappy about myself. I have lost weight and inches, my resting heart rate has dropped and my blood pressure has improved but I look in the mirror and see the same body I saw before I started the challenge.

Not to say I dont like that body I almost always like my body (especially naked). But I dont see anything different about it (anymore before the mid-point weigh-in, I really did).

And I am starting to see some of the disordered thinking creeping in. Ive mentioned before that I am pretty confident in my ability to resist this, and I still am. But my god, I can see this being so harmful to so many people who were/are at risk or have a history of disordered eating or working out or any sort of body dysmorphia.

(BTW, as I write this I am *cheating* with my second cheat apple of the day and also a cheat dish of two tbsp of nut/seed butter because goddamn if I aint starving and Im too grouchy to sit here and suffer any more.)

For one thing, Ive started to notice myself judging other peoples bodies. Thoughts like, Wow, he must be so unhappy with himself, how sad. OMG!! I dont think that way! What is happening!

I also find myself feeling anxious when I think about ending this diet and going back to regular eating, because Im worried about eating the wrong things. Again I dont think this way! I know Ill overcome it easily as I have a solid foundation in healthy eating and thinking but its disturbing to feel this creeping in. Also it doesnt feel good.

AND ANOTHER THING! Today and tonight I am hungry! And Im so damn bored with eating chicken breasts! And I dont want to meal prep!

I just want to eat an avocado and some almonds and some salmon. <sob>

Annnnnnyway. I met with the trainer last week after my disastrous weigh-in (READ: only disastrous relative to the goal SHE SET FOR ME by my own goals and standards, Im doing great! Im getting stronger! My heart rate is dropping!). She confirmed that I have been following the plan *perfectly.* She even looked at my food log app and couldnt find one thing wrong. She had no suggestions aside from that I should start drinking a gallon (AN IMPERIAL GALLON) of water each day. Thats 19 cups. Which Ive been doing, no problem actually, and havent seen any difference.



Pat Farenga The Evolution of Unschooling [PODCAST #586] School Sucks Project

Pat Farenga is a leading unschooling advocate, and the father of three adult unschooled children. He worked closely with unschooling pioneer John Holt on the Growing Without Schooling Magazine, and in the mid-1980s he took over as publisher of GWS and the president of Holt Associates. Today Pat runs the website, which archives all ...


Announcing AI for Everyone: a new course from on Coursera Coursera Blog

Dear Friends,

I am excited to announce the newest course from, AI for Everyone. It will be available on Coursera in early 2019.

AI is not only for engineers. This non-technical course will help you understand technologies like machine learning and deep learning and spot opportunities to apply AI to problems in your own organization. You will see examples of what todays AI can and cannot do. Finally, you will understand how AI is impacting society and how to navigate through this technological change.

If you are a non-technical business leader, AI for Everyone will help you understand how to build a sustainable AI strategy. If you are a machine learning engineer or data scientist, this is the course to ask your manager, VP or CEO to take if you want them to understand what you can (and cannot!) do.

AI for Everyone

Artificial intelligence will transform every industry, just as electricity did 100 years ago. Between now and 2030, AI will create an estimated $13 trillion of GDP growth.

Through my work with Landing AI, I meet daily with CEOs who want to transform their companies with machine learning. The number one question they ask is how to align their long-term business strategy with todays AI capabilities.

The AI-powered future must be built by both engineers and domain experts. We will need millions of AI engineers. We will also need millions of CEOs, product managers, marketers, salespeople, designers and financiers who understand how to apply AI technologies within their organizations and communities.

Bringing the community togeth...

Wednesday, 14 November


A dedicated youth minister and then what? IN DEFENCE OF YOUTH WORK


Though it was wholly unrelated to her role as youth minister, Tracey Crouchs recent ministerial resignation has reactivated the demand for a dedicated youth minister from what Children and Young People Now calls youth leaders that is, directors and chief executives of some national organisations. In principle this is clearly highly desirable. Who wouldnt want someone, even low down in the governmental hierarchy, whose sole focus was young people and the development of policies for them?

Yet, even if it existed, the record since 2010 of Crouch and her predecessors suggests that we would still be facing a very tough struggle to get all-the-year-round, community-based youth work facilities recognised by those policies. Over that period the post itself was migrated first from the Department for Education to the Cabinet Office and then, in 2016, to what we now know take a deep breath! as the Department for Digital, Culture, Media & Sport. The latter decision was prompted, it seemed, not by any strategic thinking on where the role might best be located but by the then minister Rob Wilsons wish t...


Feed RSS Last fetched Next fetched after
Cassandra Rankin XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Charlotte Mason in the City XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Citizenship and Social Justice XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Coursera Blog XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Critically Chatting Collectives Blog XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Dadosaurus Rex XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Denise Gaskins' Let's Play Math XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Dumbo Feather Conversations XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Education, Economy and Society XML 12:25, Monday, 19 November 13:25, Monday, 19 November - Medium XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Homeschooling The Well Prepared Child XML 12:25, Monday, 19 November 13:25, Monday, 19 November XML 12:25, Monday, 19 November 13:25, Monday, 19 November XML 12:25, Monday, 19 November 13:25, Monday, 19 November XML 12:25, Monday, 19 November 13:25, Monday, 19 November XML 12:25, Monday, 19 November 13:25, Monday, 19 November
IN DEFENCE OF YOUTH WORK XML 12:25, Monday, 19 November 13:25, Monday, 19 November
IN DEFENCE OF YOUTH WORK XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Informally Young XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Learning Happens XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Lib Ed articles XML 12:25, Monday, 19 November 13:25, Monday, 19 November
livingwithoutschool XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Murrayshire Academy XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Random Acts of Candice XML 12:25, Monday, 19 November 13:25, Monday, 19 November
School Sucks Project XML 12:25, Monday, 19 November 13:25, Monday, 19 November
The "Focus Room" Horror XML 12:25, Monday, 19 November 13:25, Monday, 19 November
The Adventures of Rover an Alaskan Boy XML 12:25, Monday, 19 November 13:25, Monday, 19 November
The Architecture of Open Source Applications: The Blog XML 12:25, Monday, 19 November 13:25, Monday, 19 November
The Cookie Train XML 12:25, Monday, 19 November 13:25, Monday, 19 November
The Mommy Writer XML 12:25, Monday, 19 November 13:25, Monday, 19 November
We, The Dancers XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Work Boxes For Children XML 12:25, Monday, 19 November 13:25, Monday, 19 November
Zinn Education Project XML 12:25, Monday, 19 November 13:25, Monday, 19 November

IndyWatch Education Feed Archiver

Go Back:30 Days | 7 Days | 2 Days | 1 Day

IndyWatch Education Feed Today.

Go Forward:1 Day | 2 Days | 7 Days | 30 Days

IndyWatch Education Feed was generated at Community Resources IndyWatch.

Resource generated at IndyWatch using aliasfeed and rawdog