Masterclass: Building Software in 2018. Mapping abstract buzzwords to the architecture of the real-world

You know what? Buzzwords don’t compile and won’t deploy any code on behalf of your team. At the same time, buzzwords are fashionable at a particular time, or in a particular context, for a reason. Buzzwords address the need to impress the audience selling sparse working solutions for one-size-fits-all general solutions when not for true silver bullets.

Date: 8 – 9 November 2018, Bucharest
Training fee: €600/participant plus VAT, only 25 seats available

To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

About the training

The 2-day workshop aims at pinpointing the challenges of building software systems in 2018. The vision presented is articulated in five points.

  • Abstraction and Synthesis
  • Cross-platform Implementation
  • Distributed Architecture
  • Inherent Scalability
  • Replaceability

Each of these points will receive a treatment in the first day of the workshop. It’s mostly an open discussion, driven by a bunch of slides, diagrams and direct experience. More in detail, here’s a drill-down of actual arguments.

Abstraction and Synthesis Collecting requirements. Exploding features into UX. Process of UX design. UX-to-DEV communication. Tools and actual deliverables. How the structure of the team can flourish or vanish agility. Brass-band communication of efforts and deliverables.
Cross-platform Implementation .NET Core and Java. Hosting factors and costs. Highlights of ASP.NET Core. Web API: REST, RPC, security, design.
Distributed Architecture Protocols: HTTP, gRPC, custom. Data transfer: JSON, MessagePack. Bus and queues. Bounded context and mapping. Anti-corruption patterns.
Inherent Scalability Microsystems and microservices. Grass-roots microsystems (distinct systems connected together). Dealing with legacy applications. Principles of microservice design and the Gateway pattern. Data consistency and shared data. Testability.
Replaceability Deployment and DevOps. Orchestration and fine-tuning. Role of Kubernetes.

Microservices help to decompose the application in small autonomous services that can be developed and deployed independently. Sure, but this is only the tip of the iceberg. A microservices architecture also brings challenges in terms of orchestration, communication, scalability and, more than everything else, size. There are two ways to reach the level of microservices–from the bottom of independent solutions that altogether form a full system or from the top of a business domain broken into smaller and independent pieces, some of which are actually microsystems, namely graphs of microservices to a large extent invisible to the outside world.

In the second day of the workshop we’ll zoom into the implementation of a microservice and how it could be implementing a message-based business logic. In particular, we’ll look into an open-source framework—the MementoFX framework—that serves a double purpose. First, it can be a quick-and-easy replacement for CRUD systems bringing in a rather transparent way the benefits of CQRS and Event Sourcing. Second, it serves as a concrete demo of how to arrange a distributed application that implements features and functions delivering messages to a distinct and rather independent components.

The trainer

Since 2003, Dino has been the voice of Microsoft Press to Web developers and the author of many popular books on ASP.NET and software architecture. Dino wrote “Architecting Applications for the Enterprise” with fellow MVP Andrea Saltarello and “Modern Web Development” and has “Programming ASP.NET Core” in the works for 2018. When not training, Dino serves as the Digital Strategist of BaxEnergy, a software firm in the energy market.

Training fee: €600/participant plus VAT, only 25 seats available
To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

Browse more masterclasses here.

Masterclass: Building intelligent applications with A.I. technologies

How can an organization optimize its sales channels and product targeting? Can you automate first line of support and improve customer satisfaction? How do I protect my online payment channel from frauds? These and more questions are addressed in this course about building smarter business applications that leverage the capability of Artificial Intelligence technologies.

Date: 25 – 26 October 2018, Iasi
Training fee: €500/participant plus VAT, only 25 seats available

To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

About the training

This workshop provides attendees with a hands-on practice on Azure Machine Learning, Microsoft Cognitive Services and Bot Framework to build intelligent applications that analyze data and predict better outcomes for business processes and challenges.

Topics covered in this workshop are:

  • Introduction to Azure Machine Learning, Cognitive Services and Bot Framework
  • Demand estimation, recommendation and sentiment analysis in Azure ML
  • Financial outcome prediction in Azure ML
  • Biometric security (voice and face recognition) with Cognitive Services
  • Build an interactive chat bot
  • Solve the Rubik’s cube with Deep Learning Toolkit!

The trainer

Stefano is a Microsoft MVP and MCT, and Chapter Leader of CRMUG Switzerland. A regular speaker at international conferences, including Microsoft Ignite, Tech Summit and Developer Week, Stefano’s interests extend to Office & Dynamics 365, Blockchain and A.I.-related technologies.


Training fee: €500/participant plus VAT, only 25 seats available
To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

Browse more masterclasses here.

Masterclass: Designing and Building Decentralized Blockchain Apps

Blockchain is an emerging technology for organizations to almost instantaneously make and verify transactions, streamlining business processes, saving money, and reducing the potential for fraud.

Date: 8 – 9 November 2018, Bucharest
Training fee: €600/participant plus VAT, only 25 seats available

To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

About the training

This workshop introduces Blockchain as a Service (BaaS) in Microsoft Azure to build a secured data structure and create a digital transaction ledger that is shared between customers (citizens) and businesses (public entities, government institutions, organizations). By combining the openness of the internet with the security of cryptography, the BaaS solution provides everyone with a faster, safer way to perform peer-to-peer financial transactions.

Topics covered in this workshop are:

  • Introduction to developing decentralized apps (dapps) for Blockchain
  • Azure BaaS – Blockchain as a Service in Microsoft Azure
  • Enterprise Smart Contracts and the Coco Framework
  • Developing applications on Ethereum
  • Practical samples of Blockchain dapps: Design, Development, Testing and Deploy

The trainer

Stefano is a Microsoft MVP and MCT, and Chapter Leader of CRMUG Switzerland. A regular speaker at international conferences, including Microsoft Ignite, Tech Summit and Developer Week, Stefano’s interests extend to Office & Dynamics 365, Blockchain and A.I.-related technologies.


Training fee: €600/participant plus VAT, only 25 seats available
To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

Browse more masterclasses here.

Masterclass: Docker Swarm: From theory to practice

Date: 20 April 2018, Timisoara
Training fee: €100/participant plus VAT, only 20 seats available

To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

Join us for a 6-hour full hands-on workshop on Docker Swarm: From theory to practice on Friday 20 April 2018, delivered by SourceLair co-founder and CTO, Docker Captain and Docker Certified Associate Antonis Kalipetis.

About the masterclass

Docker and containers have drastically changed the way we develop and deploy applications. After mastering containers, it’s only natural to start deploying containers in production. This masterclass aims at introducing participants to orchestrator principles through Docker Swarm, showcasing the different concepts, pros, cons and common best practices, while showing the way to go to production with confidence.


Join this masterclass to be introduced to the world of orchestration, through Docker Swarm. This training will go through the basic concepts, best practices and will show you the way to go to production with confidence.

Who should attend

System Administrators, Operations Executives and Developers that want to:

  1. Automate, improve and scale their production Docker setup
  2. Fill the gaps missing to deploy Docker to their production systems
  3. Secure their production systems further


  • Basic Docker knowledge and understanding of concepts (e.g. Container, Images, Dockerfiles)
  • Basic programming skills
  • Bringing your own laptop

What you will learn

  • Concepts: Nodes, Tasks, Services, Networks, Configs, Secrets)
  • Topology: Networking, Node Roles, Cryptographic Identity)
  • Practical Skills: Deploying Services, Deploying Stacks, Rolling Updates, Debugging a Docker Swarm Cluster

Course outline

  • What is a container, a crash course
  • From servers to clusters: intro to containerized infrastructure
  • Docker swarm in practice, setting up and managing a cluster
  • Deploying services to Docker Swarm
  • Production deployments in a containerized infrastructure
  • Swarm debugging


  • Event attendees will get access to a 3-node Docker Swarm cluster each to practice
  • This event’s price is a steal for the value you will bring back to your company
  • This event runs with limited seating. Get the most of the instructors’ attention!
  • Enjoy free cofee and lunch during the event.

The trainer

Antonis is leading the technology at SourceLair – a company specialized in creating developer tools, while at the same time helps teams improve their development workflow. He’s a Python lover and developer, and a Docker Captain. When not talking about himself in the third person, he loves automating stuff and sharing knowledge around all things containers, DevOps and developer workflows. He’s also a regular speaker at local Meetups, mostly in Athens.

Training fee: €100/participant plus VAT, only 20 seats available
To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

Browse more masterclasses here.


What we know we don’t know about blockchains

Originally published on the Ness Digital Engineering blog at

Bitcoin is already a household name. The blockchain, the data structure plus protocol that lies under Bitcoin and many other novel applications, gets mentioned in almost every list of hot technologies [1].

For every writing that extols the potential of blockchains, another pops up dismissing blockchain-based solutions as inferior [2]. Both extremes are of course “right,” such as you would expect from any projection of a complex, multidimensional issue.

Yes, blockchains have potential to impact our world. Like any technological innovation, blockchains have caused our collective imagination to run loose and create narratives of a future without banks, without government [3], etc. But, predicting the future is hard. In fact, if you’re in the business of telling the future, you can rightfully be called a visionary if you manage to get just a few predictions right and fail at all the others: read Jules Verne’s Extraordinary Voyages with a critical eye, or for a more recent example, Bill Gates’ The Road Ahead. Many other narratives about the future, that completely failed to happen, are now forgotten thanks to survivorship bias.

Now apply the same critical thinking to any narrative about the impact of blockchains to any particular industry. Will cryptocurrencies change finances and banking by a little or by a lot? There is no clear answer yet. One major unknown is what will credit look like in a world of cryptocurrencies with an inelastic, capped money supply. Bitcoin’s creator was wary of credit institutions and central banks and wasn’t necessarily focused on working within a credit-based financial system [4]. Yet, for a modern economy, credit is essential. There is good evidence of a link between the rise of credit institutions and the explosion of economic activity during the European Renaissance [5]. We don’t yet have a crypto monetary system that can replace our fiat currency system without major economic regress.

To tackle the other extreme: yes, blockchain products are the baby replicas of their existing 20th century equivalents. Bitcoin is slow and expensive compared to Visa. There is no court of law to judge the breach of an Ethereum smart contract, even when most agree there should be a difference between the spirit and the letter of the contract, such as in the case of the infamous Ethereum contract bug that brought down The DAO [6].

Remember that blockchains themselves are a solution for a very narrow problem, namely achieving consensus in a network of entities who don’t trust each other. The novelty is that blockchains don’t rely on a central authority. A protocol for decentralized consensus is a building block for distributed applications, but it doesn’t have to be the only one. Higher level protocols are already emerging on top of blockchains to deal with specific applications. For example, Bitcoin developers have created the payment channels protocol [7] and the Lightning network [8]. If adopted, the Bitcoin network will see payments happen “off-chain” quickly and cheaply, and only gross settlement transactions will be committed to the blockchain, an expensive and slow process.

A useful analogy is the history of the Internet itself. The necessary building block for the Internet is a packet-switched network protocol, such as IP, that can effectively route information between nodes on a huge network without the need for a central authority that decides which packets go where. IP alone, however, does not solve all our problems. In IP, the size of a payload of information is limited by design to a few KB [9]; there is no notion of a bi-directional stream of packets between two hosts; there is also no notion of a session. There are higher-level protocols on top of IP that needed to be invented, so that we can enjoy today’s sophisticated Internet products such as Netflix and Skype.

It’s safe to say blockchains are only layer one of a stack of protocols for distributed applications, and there are many more protocols to come which have not yet been invented. My prediction is that it’s too early to pick winners, just like in the ’80s, it would have been premature to pick SNA as the winner over TCP/IP in the battle for communication network protocols.

In conclusion, when you’re building your product or your company under the assumption that “blockchains are the future,” make sure you’re only taking the risks you can afford to take. If we go by past experience, the future will certainly be surprising.



Author: Iulian Dogariu, Ness Digital Engineering

Is your team getting the most out of code reviews?

Originally published on the Ness Digital Engineering blog at

Most serious developer teams today have at least some form of code review discipline in place. This means that at least one person, other than the author, looks through a new code change before the change goes out to production. There is a good reason for that; code reviews, even when practiced less formally, have been found to increase the quality of a software product by reducing the number of defects. See [1] for research involving modern open-source software projects.

As principal engineer at Ness Digital Engineering, I see teams that do code review with varying degrees of rigor, from a light touch approach, all the way to mandatory, thorough reviews by at least two other engineers.

Irrespective of the actual process, the benefits of a code review discipline in your team go beyond whether the number of coding defects is below your threshold for quality. We will take a look at those first.

What I’ve repeatedly noticed is that very few engineers actually look forward to having their code reviewed. It feels like a trip to the dentist: you know it’s good for you, you know that a small intervention now prevents major decay later, but still your mom or your partner has to push you to go, because the anticipation of the drill in your mouth doesn’t exactly thrill you. In the second part of this post we’ll review some tips for running effective code reviews.

Here are other benefits of code reviews you should keep in mind for your team.

1) Code reviews spread knowledge and create a sense of ownership of the entire code base. If Alice has become an expert in module A of your code base, and Bob is an expert in module B, Alice can learn new things by reviewing Bob’s code changes in module B, and can in turn, guide Bob when he makes changes in module A. Your team is healthier when it’s free of “cliques,” and everyone feels that it’s OK to make changes to any part of the code. Also, most assume that it’s always the more senior engineer who reviews the junior engineer’s code, but a junior engineer should also be asked to do a review; he or she will learn a lot by reading through and trying to understand a code change from a more experienced colleague. Oh, and, inevitably, the time will come when a junior finds an issue with a senior’s code. To find out what to do to prevent bruised egos, skip towards the end of this post.

2) Code reviews add skin in the game. If I review and approve a code change by Charlie, my name is on the record. If that change introduces a defect, it will not be just Charlie who takes the heat.

3) Code reviews prevent deviation. It’s important for a team’s code base to have a consistent “style of doing things” everywhere. A consistent style reduces the cognitive burden of an engineer who must make changes to an unfamiliar section of the code. It doesn’t have to be the best way of doing things, even when the best way is objectively so.(it’s usually not, and likely to cause endless debate within the team). Here is an exaggerated example of why consistency is important. You can debate whether it’s better for motor vehicles to drive on the left or on the right side of the road, but an “interim” state, when trucks drive on the right and small cars drive on the left, would be a disaster.

Here are some tips on how to run code reviews effectively and with minimum pain.

  • Make them quick and non-formal. There should be no extensive meetings, and the process should be as light as possible. This lessens the friction for the reviewer. The easier it is for a reviewer to jump in, the more time he or she will have for looking over the code changes, and that’s a good thing. [1].
  • Make them frequent. Discourage huge changes and instead, insist that changes be submitted, reviewed and merged after two days of work, maximum.
  • Make them painless for the reviewee too. Encourage the reviewers to critique the code verbally in a one-on-one with the author. Discussions will be faster and less confrontational when done face to face. Beware of the cultural sensitivities in your team. Some authors may feel uncomfortable or ashamed if there are permanent records of the shortcomings of their code, such as normally done in a GitHub pull request. In that case, it’s better that all reviews happen verbally, and the only permanent record is the sign-off (thumbs-up) from the reviewer.
  • Give adequate time for the reviewer to actually read and understand the code change. Common sense, as well as research, [3] indicates that the effectiveness of reviews is reduced by the more lines of code per hour a reviewer is asked to review.
  • Make the reviews fair. Ensure reviews are not dictated by the personal taste of the reviewer. Instead, insist that the team have a Coding Conventions document.
  • Review with an optimistic mindset. If the reviewer can’t find anything wrong with the code, it’s probably because the code is fine and should be given a thumbs-up right away. Don’t guilt-trip reviewers into hunting for issues where there aren’t any. The review activity is sure to descend into nitpicking. Anyone who has been on the receiving end of it remembers the frustration. This is a toxic culture that should not be allowed to spread in your team. Keep the reviewers focused on major functional issues, or issues affecting readability and changeability, such as proper naming and adherence to SOLID principles. Don’t focus on line length or any sort of issue that a static analyzer can catch. [2] In fact, you should have a static analyzer (such as ESLint or Sonar) run before starting a code review.
  • Finally, just like with any process, don’t let the code review process go stale. Take the opportunity to improve things after every sprint retrospective. Measure the number of reviews per change, the total time a task spent in code review, and the number and magnitude of new commits added to the changes during review. This gives you an indication of the impact of the reviewers on the code being reviewed.

If your team is just getting started with code reviews, you will probably need to choose a tool. Pick one that the team already knows or already has installed. Your code hosting platform, e.g. GitHub, BitBucket, Gitlab, already offers code review features. There are also open-source tools specifically for code review, e.g. Gerrit, Phabricator Differential, ReviewBoard, as well as many commercial offerings.

[1] McIntosh, Kamei, Adams, and Hassan, The Impact of Code Review Coverage and Code Review Participation on Software Quality,,VTK,AndITKProjects.pdf

[2] Bosu, Greiler, and Bird, Characteristics of Useful Code Reviews: An Empirical Study at Microsoft

[3] Kemerer and Paulk, The Impact of Design and Code Reviews on Software Quality: An Empirical Study Based on PSP Data

Author: Iulian Dogariu, Ness Digital Engineering


Masterclass: Situational Leadership®: Taking Charge

Situational Leadership®: Taking Charge is 1 day workshop designed to help front-line employees and individual contributors develop a thorough understanding of the leadership process. When employees can recognize a clear connection between their performance and the success of the organization, they perform to the full extent of their capabilities, as opposed to simply working within the parameters of their job descriptions.

Date: 25 April 2018, Iasi

Training fee: €190/participant plus VAT, only 25 seats available
To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).


Utilizing the performance language of Situational Leadership®, participants learn to diagnose their own task-specific Performance Readiness® and effectively communicate their specific performance needs to their supervisors.


Success and Engagement

  • Triangle Production
  • The Focus of Leadership

Owning Your Performance

  • Introducing the Situational Leadership® Model Process Steps
  • Identify the task
  • Ability and Willingness

Diagnosing Performance Readiness®

  • Identifying Performance Readiness® Levels
  • Leadership Styles

Communication Performance Readiness®



TRAINING KIT: Participant Workbook, Taking Charge Handout, Taking Charge Action Planner, Triangle Production Worksheet, and Participant Certificate.


Date: 25 April 2018, Iasi

Training fee: €190/participant plus VAT, only 25 seats available
To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

Browse more masterclasses here.

Masterclass: Leveraging Your Power to Influence

Training based on Situational Leadership® Model, the most powerful system utilized globally for increasing leaders’ performance in work environment and their results, obtained through the persons they are coordinating, regardless of their hierarchical position in organization or their functional role.


Date: 26 April 2018, Iasi

Training fee: €250/participant plus VAT, only 25 seats available
To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

About Leveraging Your Power to Influence®

Situational Leadership® – Leveraging Your Power to Influence® explores the dynamics that exist in the seven distinct, but highly interdependent, bases of power. This one-day workshop focuses on developing your leaders’ ability to recognize and successfully apply the correct power base in order to effectively influence across all levels of the organization – up, down and across peer groups.

Participants will learn to cultivate their personal and position power bases to help enhance leadership effectiveness and increase overall team performance.

The program directly supports the use of Situational Leadership® skills of assessing readiness and applying the appropriate leadership style. Additional emphasis is placed on the challenges faced by team leaders in coaching others to build power bases with their team members.

The participants in this session will learn:

  • To describe personal and position power and the differences between them.
  • To build and leverage their own power bases in order to influence up, down and across the organization.
  • To discover which power bases they may tend to overuse and underuse, and whether they have enough of the right power to influence others.
  • To help their team members to build and apply power bases on their own.


Introduction to Power:

  • Indicators of Power
  • Key Terms
  • Personal versus Position Power

Building the Power Bases:

  • The Seven Power Bases
  • Three responses to the Seven Power Bases
  • Building and Decreasing Power Bases
  • Video Case Study – Applying Power Bases

Power and the Team:

  • Power to Influence Self Inventory
  • Establishing Power Bases with Others
  • Coaching Situations When Power is Eroding

Resources for participant:  

Participant Workbook

Power to Influence Assessment


Date: 26 April 2018, Iasi

Training fee: €250/participant plus VAT, only 25 seats available
To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

Browse more masterclasses here.

How to create simple apps using Unity 3D and Parse Server

If you want to create an app faster, and you do not have knowledge from the backend area, but you require your app to interact with a database, one accessible solution is to use Parse Server. Parse Server is an open source Back-as-a Service (BaaS) framework initially developed by Facebook which uses web-based, all-in-one Dashboard. From here, you can create classes and manage your data, to view analytics, and send push notifications.


As you know, the Parse Service was shut down in January 30, 2017 (I hope you have migrated to other backend service you decided to).

An easy solution for this problem is using Back4app, which is an open source backend that already uses framework and helps developers to build their apps scalable and extensible at a much faster speed. Back4app is great for developers if they are looking for flexibility, customization on source code and the capability to integrate their app with other cloud services.

Read this article and learn how to create simple apps using Unity 3D and Parse Server.

About ASSIST Software

ASSIST Software is a software outsourcing company based in Suceava, the largest city in the North-East of Romania. Founded in 1992, ASSIST Software is present on the international market, as a supplier of innovative solutions, being a reliable and trustworthy outsourcing partner for more than 230 clients worldwide.

Focusing the activities toward developing complex software products, we provide consistent results in emerging fields such as mobile and web-based custom business applications, IoT, e-commerce, e-payment, e-security, e-health and enterprise & resource planning, entertainment and gaming industry

Our teams can adapt to our clients’ demands, being able to support complete software development life cycle (requirements-development-deployment-maintenance), project management, quality assurance and consulting services.

Our Microsoft Certified Partner status is recognition for our performances and competences. These competences are greatly supported by the software development team. The partnership with IBM, Intel, CISCO and HP are testament to our ability to design and deliver quality hardware and software solutions optimized for any platform.


Masterclass: Functional Programming on the JVM with Scala & Clojure

Most programming languages are gaining functional programming constructs, and the JVM remains a rock-solid base on which to build a wide variety of applications; however, the legacy ties to OOP in the Java programming language itself make many of the more interesting and useful aspects of functional programming difficult to achieve.


23 March 2018, IASI

Training fee: €250/participant plus VAT, only 25 seats available

To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

About the training

In this course we’ll dive into two popular FP languages for the JVM: Scala and Clojure. You’ll learn about the critical features designed into these languages that can take your software to the next level. Both languages have great strengths, but we’ll also talk about the most significant problems that you’ll face when adopting either.

The hands-on portion of the course will concentrate on some of the most significant benefits of working with each.


The content is approachable for all levels of developers. Experience working with Java, Javascript, or C# is recommended.

Course Outline

  • Scala 
    • First-class persistent data structures
    • Improved type system
    • Type inference, call-by-name, extended argument lists, implicits
    • Libraries of interest
    • Weaknesses and Challenges
    • Scala.js (browser-based scala)
    • Lab: Some tractable code examples you can run/modify
  • Clojure 
    • Dramatically simpler syntax
    • Language concerns at a library layer
    • Code as data
    • Ad-hoc polymorphism
    • First-class treatment of time as a programming concern
    • Spec vs Type systems
    • Dynamic development
    • Libraries of interest
    • Weaknesses and Challenges
    • Clojurescript (browser-based Clojure)
    • Lab: Some tractable code examples you can run/modify.
  • Summary
    • A review of pros/cons, naming specific use-cases for each language
    • Objective comparison: How to talk to others about the pros/cons

The trainer

Vijay is a functional programmer in Clojure/Scala with 15 years of experience with Java and JVM technologies that includes building large enterprise applications, leading, architecting Big Data and Machine Learning projects. Vijay enjoys coaching and mentoring and is a Lightbend certified Advanced Scala Trainer.

He currently works as a Dangineer leading the Data Engineering/Analytics/Science team at Werkspot, Amsterdam and is a co-host of Defn Podcast, focused on Clojure.


23 March 2018, IASI

Training fee: €250/participant plus VAT, only 25 seats available

To book your seats, please contact us by email ([email protected]) or phone (+40 741 103 133).

Browse more masterclasses here.